@dylanpiercey/work 0.2.20 → 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/cli/session.mjs +26 -24
- package/bin/cli/topic.mjs +10 -0
- package/dist/{_Hb3LeA5Q.js → _BdBBZphI.js} +43 -3
- package/dist/_Bu1xx1j4.js +2 -0
- package/dist/_C9UcJEf9.js +2 -0
- package/dist/{_BHlbSSAl.js → _DdVpb0NT.js} +73 -73
- package/dist/{_C9c_BxRk.js → _Dqcw6PJn.js} +29 -71
- package/dist/index.mjs +1509 -1608
- package/dist/public/assets/_1ILmLLBG.js +1 -0
- package/dist/public/assets/{_BFD3zDfn.js → _1sZQ0eRv.js} +1 -1
- package/dist/public/assets/_1sZQ0eRv.js.br +0 -0
- package/dist/public/assets/{_CHwp4prQ.js → _23Uz-owF.js} +1 -1
- package/dist/public/assets/_23Uz-owF.js.br +0 -0
- package/dist/public/assets/_34CbiDVl.js +2 -0
- package/dist/public/assets/_34CbiDVl.js.br +0 -0
- package/dist/public/assets/_3I2tROZb.js +1 -0
- package/dist/public/assets/{_BHxaJLxf.js → _4cEqdNvh.js} +1 -1
- package/dist/public/assets/_4cEqdNvh.js.br +0 -0
- package/dist/public/assets/{_BQMwlV-0.js → _64GOyyOB.js} +1 -1
- package/dist/public/assets/_64GOyyOB.js.br +0 -0
- package/dist/public/assets/{_2M3NjHcy.js → _6QZtRBus.js} +1 -1
- package/dist/public/assets/{_BeQUut65.js → _8RDpbidN.js} +1 -1
- package/dist/public/assets/_8RDpbidN.js.br +0 -0
- package/dist/public/assets/_9CjR6hLh.js +1 -0
- package/dist/public/assets/{_D_AjKzkm.js → _AG96qq5c.js} +1 -1
- package/dist/public/assets/_AG96qq5c.js.br +0 -0
- package/dist/public/assets/_B-LC6V8J.js +1 -0
- package/dist/public/assets/_B-n1N1R6.js +1 -0
- package/dist/public/assets/_B-n1N1R6.js.br +0 -0
- package/dist/public/assets/_B0t2Y-hr.js +1 -0
- package/dist/public/assets/{_D-wwbDX7.js → _B4ktpJPW.js} +1 -1
- package/dist/public/assets/_B4ktpJPW.js.br +0 -0
- package/dist/public/assets/_B58i39eE.js +1 -0
- package/dist/public/assets/_B5DZ-CwH.js +1 -0
- package/dist/public/assets/_B69YLvAs.js +1 -0
- package/dist/public/assets/{_CCmHKlXX.js → _B6T9l5dc.js} +1 -1
- package/dist/public/assets/_B6T9l5dc.js.br +0 -0
- package/dist/public/assets/{_Dow17jzJ.js → _B8IaRv-R.js} +1 -1
- package/dist/public/assets/_B8IaRv-R.js.br +0 -0
- package/dist/public/assets/{_CGH2Busx.js → _B8QgPZ90.js} +1 -1
- package/dist/public/assets/_B8QgPZ90.js.br +0 -0
- package/dist/public/assets/_B9ig3GQ6.js +1 -0
- package/dist/public/assets/{_UBgRR4E9.js → _BBNVjYRZ.js} +1 -1
- package/dist/public/assets/_BBNVjYRZ.js.br +0 -0
- package/dist/public/assets/_BCF-crck.js +1 -0
- package/dist/public/assets/_BF_s6XCW.js +1 -0
- package/dist/public/assets/_BFvCCmWn.js +1 -0
- package/dist/public/assets/_BHEO7RLD.js +1 -0
- package/dist/public/assets/{_Dg6OsRrR.js → _BHSyE7UM.js} +1 -1
- package/dist/public/assets/_BHSyE7UM.js.br +0 -0
- package/dist/public/assets/_BLpd8N-w.js +1 -0
- package/dist/public/assets/{_DxSnjCPi.js → _BQNJzR93.js} +1 -1
- package/dist/public/assets/_BQNJzR93.js.br +0 -0
- package/dist/public/assets/{_Bfuu6mAX.js → _BQgXAmMb.js} +1 -1
- package/dist/public/assets/_BQgXAmMb.js.br +0 -0
- package/dist/public/assets/{_Bf7EsJwj.js → _BSvw1UG1.js} +1 -1
- package/dist/public/assets/_BSvw1UG1.js.br +0 -0
- package/dist/public/assets/{_DpSZYTyI.js → _BUCCv9Hi.js} +1 -1
- package/dist/public/assets/_BUCCv9Hi.js.br +0 -0
- package/dist/public/assets/{_C5Wk6L8u.js → _BVLdrpoX.js} +1 -1
- package/dist/public/assets/_BVLdrpoX.js.br +0 -0
- package/dist/public/assets/{_T0Ktx7Km.js → _BbsW8us6.js} +1 -1
- package/dist/public/assets/_BbsW8us6.js.br +0 -0
- package/dist/public/assets/_BcIlugCw.js +1 -0
- package/dist/public/assets/{_L-b7Vsug.js → _BckU3AOP.js} +1 -1
- package/dist/public/assets/_BckU3AOP.js.br +0 -0
- package/dist/public/assets/{_HGP7qpI4.js → _Bcxjmiob.js} +1 -1
- package/dist/public/assets/_Bcxjmiob.js.br +0 -0
- package/dist/public/assets/_Bevd9dK7.js +1 -0
- package/dist/public/assets/_Bj_HkP9h.js +1 -0
- package/dist/public/assets/_BjvYGQBe.js +1 -0
- package/dist/public/assets/_BkqHlxO2.js +1 -0
- package/dist/public/assets/{_ChTMXnIu.js → _BkrUEbVS.js} +1 -1
- package/dist/public/assets/_BkrUEbVS.js.br +0 -0
- package/dist/public/assets/_Bl5uJkXr.js +1 -0
- package/dist/public/assets/_BlG8w-GK.js +1 -0
- package/dist/public/assets/_BlG8w-GK.js.br +0 -0
- package/dist/public/assets/{_CAhkFk0k.js → _Boy8zitV.js} +1 -1
- package/dist/public/assets/_Boy8zitV.js.br +0 -0
- package/dist/public/assets/{_BgBUZElB.js → _Bp0eGxZI.js} +1 -1
- package/dist/public/assets/_Bp0eGxZI.js.br +0 -0
- package/dist/public/assets/_BpxhQa77.js +1 -0
- package/dist/public/assets/_Bpza2t1g.js +1 -0
- package/dist/public/assets/{_CEY_n10t.js → _BsNcNflU.js} +1 -1
- package/dist/public/assets/_BsNcNflU.js.br +0 -0
- package/dist/public/assets/{_B7u83Fqc.js → _BsS0f5pl.js} +1 -1
- package/dist/public/assets/{_csFWQzWs.js → _Bx1yzJ7J.js} +1 -1
- package/dist/public/assets/_Bx1yzJ7J.js.br +0 -0
- package/dist/public/assets/_By7JhS_H.js +1 -0
- package/dist/public/assets/_By7mDOGe.js +1 -0
- package/dist/public/assets/_By7mDOGe.js.br +0 -0
- package/dist/public/assets/{_CN7Wz2eA.js → _ByNsS0Bo.js} +1 -1
- package/dist/public/assets/_ByNsS0Bo.js.br +0 -0
- package/dist/public/assets/{_BpGvpggY.js → _C-Yjwvb7.js} +1 -1
- package/dist/public/assets/_C-Yjwvb7.js.br +0 -0
- package/dist/public/assets/_C0XDDquE.js +1 -0
- package/dist/public/assets/_C0kbjmme.js +1 -0
- package/dist/public/assets/{_D0gWUr-E.js → _C1TFPaLw.js} +1 -1
- package/dist/public/assets/_C1TFPaLw.js.br +0 -0
- package/dist/public/assets/{_DLCgfhNS.js → _C1hChloH.js} +1 -1
- package/dist/public/assets/_C1hChloH.js.br +0 -0
- package/dist/public/assets/_C5_F6Lkp.js +1 -0
- package/dist/public/assets/_C5m17sK1.js +86 -0
- package/dist/public/assets/_C5m17sK1.js.br +0 -0
- package/dist/public/assets/{_Coroy2lI.js → _C6aIqGTH.js} +1 -1
- package/dist/public/assets/_C6aIqGTH.js.br +0 -0
- package/dist/public/assets/{__1UtPhZb.js → _C8FYvxEo.js} +1 -1
- package/dist/public/assets/_C8FYvxEo.js.br +0 -0
- package/dist/public/assets/_C9PQMYui.js +1 -0
- package/dist/public/assets/{_hC5RUmrf.js → _CAAXB063.js} +1 -1
- package/dist/public/assets/_CAAXB063.js.br +0 -0
- package/dist/public/assets/_CAF5BaCM.js +1 -0
- package/dist/public/assets/{_CtC83UyG.js → _CAg9DmBU.js} +1 -1
- package/dist/public/assets/_CAg9DmBU.js.br +0 -0
- package/dist/public/assets/_CArxykYQ.js +1 -0
- package/dist/public/assets/{_DG1LpTGX.js → _CCDXrv8_.js} +1 -1
- package/dist/public/assets/_CCDXrv8_.js.br +0 -0
- package/dist/public/assets/_CCLoAy9K.js +1 -0
- package/dist/public/assets/{_BJpqJK9r.js → _CCzklqPj.js} +1 -1
- package/dist/public/assets/_CCzklqPj.js.br +0 -0
- package/dist/public/assets/{_lA6BOkV1.js → _CDAx5pmr.js} +1 -1
- package/dist/public/assets/_CDAx5pmr.js.br +0 -0
- package/dist/public/assets/_CELecOKQ.js +6 -0
- package/dist/public/assets/_CELecOKQ.js.br +0 -0
- package/dist/public/assets/_CErwzInA.js +1 -0
- package/dist/public/assets/_CG1u18ih.js +1 -0
- package/dist/public/assets/_CIJ6oAG_.js +1 -0
- package/dist/public/assets/_CJ0qFlds.js +1 -0
- package/dist/public/assets/{_sjeWoc5X.js → _CJL270Sa.js} +1 -1
- package/dist/public/assets/_CJL270Sa.js.br +0 -0
- package/dist/public/assets/_CJX55Ay-.js +1 -0
- package/dist/public/assets/{_D6YVA8vA.js → _CKYRaQgb.js} +1 -1
- package/dist/public/assets/_CKYRaQgb.js.br +0 -0
- package/dist/public/assets/_CO2ElP37.js +1 -0
- package/dist/public/assets/_CPGSt-5v.js +1 -0
- package/dist/public/assets/_CPwsu9mG.js +1 -0
- package/dist/public/assets/_CQ3Qetvc.js +1 -0
- package/dist/public/assets/_CQ3Qetvc.js.br +0 -0
- package/dist/public/assets/{_BCYHTWZd.js → _CQZwCaRa.js} +1 -1
- package/dist/public/assets/_CQZwCaRa.js.br +0 -0
- package/dist/public/assets/_CSaFk-iZ.js +1 -0
- package/dist/public/assets/_CUUKuB9B.js +1 -0
- package/dist/public/assets/{_6fcPfRKt.js → _CZAa6k8r.js} +1 -1
- package/dist/public/assets/_CZAa6k8r.js.br +0 -0
- package/dist/public/assets/{_DyFcXAXE.js → _Ca09Co2_.js} +1 -1
- package/dist/public/assets/_Ca09Co2_.js.br +0 -0
- package/dist/public/assets/{__cyNMcUU.js → _CaMYkF4Y.js} +1 -1
- package/dist/public/assets/{_B2zs9J9f.js → _CbPA-khl.js} +1 -1
- package/dist/public/assets/_CbPA-khl.js.br +0 -0
- package/dist/public/assets/_Cd-QCXVO.js +1 -0
- package/dist/public/assets/_Cd-QCXVO.js.br +0 -0
- package/dist/public/assets/{_Cabq459u.js → _CdQ4fvS9.js} +1 -1
- package/dist/public/assets/{_CeZa36O-.js → _CfCAvlpN.js} +1 -1
- package/dist/public/assets/_CfCAvlpN.js.br +0 -0
- package/dist/public/assets/{_De_msLFQ.js → _CfDFnjIA.js} +1 -1
- package/dist/public/assets/_CfDFnjIA.js.br +0 -0
- package/dist/public/assets/{_MwkLbzHQ.js → _CguuUE5Z.js} +1 -1
- package/dist/public/assets/_CguuUE5Z.js.br +0 -0
- package/dist/public/assets/{_DfNM5GDo.js → _CheGsco8.js} +1 -1
- package/dist/public/assets/_CheGsco8.js.br +0 -0
- package/dist/public/assets/_CiNXWd7k.js +1 -0
- package/dist/public/assets/_Cixej1RI.js +1 -0
- package/dist/public/assets/_CkqDVBQ2.js +1 -0
- package/dist/public/assets/_CkzEaTeL.js +1 -0
- package/dist/public/assets/{_LWpc-K1g.js → _ClvEtigR.js} +1 -1
- package/dist/public/assets/_ClvEtigR.js.br +0 -0
- package/dist/public/assets/{_DW92UwGh.js → _CmptminH.js} +1 -1
- package/dist/public/assets/_CmptminH.js.br +0 -0
- package/dist/public/assets/_CqX-X1xx.js +1 -0
- package/dist/public/assets/{_B_LxZatx.js → _CrWx2tiL.js} +1 -1
- package/dist/public/assets/_CrWx2tiL.js.br +0 -0
- package/dist/public/assets/_CrlWRKRt.js +1 -0
- package/dist/public/assets/_Ct6Y6bBB.js +1 -0
- package/dist/public/assets/_Ct6Y6bBB.js.br +0 -0
- package/dist/public/assets/{_CZNztOn6.js → _CtCy1f-U.js} +1 -1
- package/dist/public/assets/_CtCy1f-U.js.br +0 -0
- package/dist/public/assets/_CtvKW08N.js +1 -0
- package/dist/public/assets/_CvmNpKTH.js +1 -0
- package/dist/public/assets/_Cvn7uBC2.js +1 -0
- package/dist/public/assets/_Cvn7uBC2.js.br +0 -0
- package/dist/public/assets/_Cx7UUMvh.js +1 -0
- package/dist/public/assets/_D0_g6mca.js +1 -0
- package/dist/public/assets/_D5JzFugM.js +1 -0
- package/dist/public/assets/{_Bqgtb-fc.js → _D5Zr3Ieu.js} +1 -1
- package/dist/public/assets/_D5Zr3Ieu.js.br +0 -0
- package/dist/public/assets/{_BKcc-iTi.js → _D9Iv3ydL.js} +1 -1
- package/dist/public/assets/_D9Iv3ydL.js.br +0 -0
- package/dist/public/assets/_DAsQt0f1.js +1 -0
- package/dist/public/assets/_DAsQt0f1.js.br +0 -0
- package/dist/public/assets/{_BhrCWDl2.js → _DCS2QSLg.js} +1 -1
- package/dist/public/assets/_DCS2QSLg.js.br +0 -0
- package/dist/public/assets/{_Bgbj7Vl5.js → _DDaCDBJL.js} +1 -1
- package/dist/public/assets/_DDaCDBJL.js.br +0 -0
- package/dist/public/assets/_DEWulNhA.js +1 -0
- package/dist/public/assets/{_BpunB-I_.js → _DFGEQ2lP.js} +1 -1
- package/dist/public/assets/_DFGEQ2lP.js.br +0 -0
- package/dist/public/assets/_DG4itPwq.js +1 -0
- package/dist/public/assets/_DGIU-7Wg.js +1 -0
- package/dist/public/assets/{_DqiBcDpF.js → _DIdlinjd.js} +1 -1
- package/dist/public/assets/_DIdlinjd.js.br +0 -0
- package/dist/public/assets/_DJyoX7Fs.js +1 -0
- package/dist/public/assets/{_DDBuDrkA.js → _DLFBMV-d.js} +1 -1
- package/dist/public/assets/_DLFBMV-d.js.br +0 -0
- package/dist/public/assets/{_DdVG8Rbg.js → _DNgHcXLH.js} +115 -115
- package/dist/public/assets/_DNgHcXLH.js.br +0 -0
- package/dist/public/assets/{_tFVcmmKI.js → _DP1ORnUN.js} +1 -1
- package/dist/public/assets/_DP1ORnUN.js.br +0 -0
- package/dist/public/assets/_DPdbyqi7.js +1 -0
- package/dist/public/assets/_DS4JUkck.js +1 -0
- package/dist/public/assets/_DSft5FYa.js +1 -0
- package/dist/public/assets/{_DSoJ6ck3.js → _DVizKx9R.js} +1 -1
- package/dist/public/assets/_DVizKx9R.js.br +0 -0
- package/dist/public/assets/{_CY0xLX0Y.js → _DXSpITKr.js} +1 -1
- package/dist/public/assets/_DXSpITKr.js.br +0 -0
- package/dist/public/assets/{_sLUOjXIk.js → _DXl_K_Qo.js} +1 -1
- package/dist/public/assets/{_BMXIDoUj.js → _DYEXlK8E.js} +1 -1
- package/dist/public/assets/_DYEXlK8E.js.br +0 -0
- package/dist/public/assets/{_BH5TfgM7.js → _DYctpXxy.js} +1 -1
- package/dist/public/assets/_DYctpXxy.js.br +0 -0
- package/dist/public/assets/{_CvKDzuxc.js → _DZg23aWr.js} +1 -1
- package/dist/public/assets/_DZg23aWr.js.br +0 -0
- package/dist/public/assets/_DcJnsCIZ.js +1 -0
- package/dist/public/assets/{_w8hTnp0H.js → _DddSmP6c.js} +1 -1
- package/dist/public/assets/_DddSmP6c.js.br +0 -0
- package/dist/public/assets/{_CVEabnQh.js → _DgXa8uL0.js} +1 -1
- package/dist/public/assets/_DgXa8uL0.js.br +0 -0
- package/dist/public/assets/_DjR-TsBN.js +1 -0
- package/dist/public/assets/_Dk6txOT4.js +1 -0
- package/dist/public/assets/{_B1AH7m_8.js → _Dkmur8bW.js} +1 -1
- package/dist/public/assets/_Dkmur8bW.js.br +0 -0
- package/dist/public/assets/_DotAJq8w.js +1 -0
- package/dist/public/assets/{_DyEhTpVE.js → _Dr3Cn_7L.js} +1 -1
- package/dist/public/assets/_Dr3Cn_7L.js.br +0 -0
- package/dist/public/assets/_Ds-yc5Hu.js +1 -0
- package/dist/public/assets/{_txvO7pXr.js → _DtH6GwBF.js} +1 -1
- package/dist/public/assets/_DtH6GwBF.js.br +0 -0
- package/dist/public/assets/_DtnXfycX.js +1 -0
- package/dist/public/assets/_DuAH8M0Q.js +1 -0
- package/dist/public/assets/{_BvEJgNLp.js → _DwuvHD28.js} +1 -1
- package/dist/public/assets/_DwuvHD28.js.br +0 -0
- package/dist/public/assets/_Fuuv8lzd.js +1 -0
- package/dist/public/assets/_HQOmlxwh.js +1 -0
- package/dist/public/assets/_HdTcnTrz.js +1 -0
- package/dist/public/assets/{_DdcPtDZz.js → _KlvXaypq.js} +1 -1
- package/dist/public/assets/_KlvXaypq.js.br +0 -0
- package/dist/public/assets/_Ncoq83TJ.js +1 -0
- package/dist/public/assets/_Q9HEP0lA.js +1 -0
- package/dist/public/assets/_Qddqtdvo.js +1 -0
- package/dist/public/assets/{_DAcmaIgY.js → _ROLDku11.js} +1 -1
- package/dist/public/assets/_ROLDku11.js.br +0 -0
- package/dist/public/assets/_Xy7h-bZy.js +1 -0
- package/dist/public/assets/{_Draa__tn.js → _ahCaQNeo.js} +1 -1
- package/dist/public/assets/_ahCaQNeo.js.br +0 -0
- package/dist/public/assets/{_BJc28pt5.js → _cZGRGdtZ.js} +1 -1
- package/dist/public/assets/_cZGRGdtZ.js.br +0 -0
- package/dist/public/assets/{_DDfwtidv.js → _dzckEiIO.js} +1 -1
- package/dist/public/assets/_dzckEiIO.js.br +0 -0
- package/dist/public/assets/_eRu_Vt-4.js +1 -0
- package/dist/public/assets/_eRu_Vt-4.js.br +0 -0
- package/dist/public/assets/_i7yVYPBz.js +1 -0
- package/dist/public/assets/_idH4jHfv.js +1 -0
- package/dist/public/assets/_jzdrGeR8.js +1 -0
- package/dist/public/assets/_ljmEi4Be.js +1 -0
- package/dist/public/assets/_mSReELZF.js +2 -0
- package/dist/public/assets/_mSReELZF.js.br +0 -0
- package/dist/public/assets/_mdQquljU.js +1 -0
- package/dist/public/assets/{_k1uZxEJ-.js → _op0vQN0h.js} +1 -1
- package/dist/public/assets/_op0vQN0h.js.br +0 -0
- package/dist/public/assets/_pqEowNNk.js +1 -0
- package/dist/public/assets/_qyReqH1J.js +1 -0
- package/dist/public/assets/_qyReqH1J.js.br +0 -0
- package/dist/public/assets/_s3G4WS5u.js +1 -0
- package/dist/public/assets/{_DYIjiPYY.js → _s3skvHRb.js} +1 -1
- package/dist/public/assets/_s3skvHRb.js.br +0 -0
- package/dist/public/assets/{_CWTelCGM.js → _sNzqJEFd.js} +1 -1
- package/dist/public/assets/_sNzqJEFd.js.br +0 -0
- package/dist/public/assets/_vM7qrN-T.js +1 -0
- package/dist/public/assets/{_CSMoDPwM.js → _xhUJdynX.js} +7 -7
- package/dist/public/assets/_xhUJdynX.js.br +0 -0
- package/dist/public/assets/_xonpFVfx.js +1 -0
- package/dist/public/assets/_xonpFVfx.js.br +0 -0
- package/dist/public/assets/{_DZzucnmx.js → _zs2sw7ou.js} +1 -1
- package/dist/public/assets/_zs2sw7ou.js.br +0 -0
- package/dist/public/assets/files-view-rGkk6M-X.js +2 -0
- package/dist/public/assets/manage-workspace-DxRg-pD7.js +2 -0
- package/dist/public/assets/new-C3NRJbz3.js +1 -0
- package/dist/public/assets/new-workspace-Hntl8FTA.js +2 -0
- package/dist/public/assets/review-view-D799zeTK.js +2 -0
- package/dist/public/assets/settings-C3NRJbz3.js +1 -0
- package/dist/public/assets/settings-page-0ZnVy_Ch.js +2 -0
- package/dist/public/assets/styles-CDnuxBl_.css +1 -0
- package/dist/public/assets/styles-CDnuxBl_.css.br +0 -0
- package/dist/public/assets/w-C3NRJbz3.js +1 -0
- package/dist/public/assets/w._-BQD2y7wD.js +1 -0
- package/dist/public/assets/w._-C3NRJbz3.js +1 -0
- package/dist/public/assets/w._-CAaQHelK.js +1 -0
- package/package.json +1 -1
- package/bin/cli/plan.mjs +0 -85
- package/dist/_DrEeyoLF.js +0 -2
- package/dist/_E0fWorAK.js +0 -2
- package/dist/public/assets/_-TUXzZ5j.js +0 -1
- package/dist/public/assets/_-TUXzZ5j.js.br +0 -0
- package/dist/public/assets/_0BO-2AH8.js +0 -1
- package/dist/public/assets/_1MkpPhCv.js +0 -1
- package/dist/public/assets/_2Czzn44S.js +0 -2
- package/dist/public/assets/_2Czzn44S.js.br +0 -0
- package/dist/public/assets/_3J3NCTfA.js +0 -1
- package/dist/public/assets/_3yfaou9w.js +0 -1
- package/dist/public/assets/_6fcPfRKt.js.br +0 -0
- package/dist/public/assets/_9kzNcuvf.js +0 -1
- package/dist/public/assets/_AbxeWvtk.js +0 -1
- package/dist/public/assets/_B1AH7m_8.js.br +0 -0
- package/dist/public/assets/_B2zs9J9f.js.br +0 -0
- package/dist/public/assets/_B4Tl4g-I.js +0 -1
- package/dist/public/assets/_B6GPBTnX.js +0 -1
- package/dist/public/assets/_B89z0EK7.js +0 -1
- package/dist/public/assets/_BCYHTWZd.js.br +0 -0
- package/dist/public/assets/_BD01_px3.js +0 -1
- package/dist/public/assets/_BDt0PKxz.js +0 -1
- package/dist/public/assets/_BFD3zDfn.js.br +0 -0
- package/dist/public/assets/_BH5TfgM7.js.br +0 -0
- package/dist/public/assets/_BHEzkZBl.js +0 -1
- package/dist/public/assets/_BHxaJLxf.js.br +0 -0
- package/dist/public/assets/_BJc28pt5.js.br +0 -0
- package/dist/public/assets/_BJpqJK9r.js.br +0 -0
- package/dist/public/assets/_BKSNShOz.js +0 -1
- package/dist/public/assets/_BKcc-iTi.js.br +0 -0
- package/dist/public/assets/_BMXIDoUj.js.br +0 -0
- package/dist/public/assets/_BQMwlV-0.js.br +0 -0
- package/dist/public/assets/_BUjgl28E.js +0 -1
- package/dist/public/assets/_BYUg95ML.js +0 -1
- package/dist/public/assets/_B_LxZatx.js.br +0 -0
- package/dist/public/assets/_BeQUut65.js.br +0 -0
- package/dist/public/assets/_Bf7EsJwj.js.br +0 -0
- package/dist/public/assets/_BfVmvTXe.js +0 -1
- package/dist/public/assets/_BfqDnPV7.js +0 -1
- package/dist/public/assets/_Bfuu6mAX.js.br +0 -0
- package/dist/public/assets/_BgBUZElB.js.br +0 -0
- package/dist/public/assets/_Bgbj7Vl5.js.br +0 -0
- package/dist/public/assets/_BhrCWDl2.js.br +0 -0
- package/dist/public/assets/_Bjsevhjr.js +0 -1
- package/dist/public/assets/_BjzBYn47.js +0 -1
- package/dist/public/assets/_BmyB1F-C.js +0 -1
- package/dist/public/assets/_BpGvpggY.js.br +0 -0
- package/dist/public/assets/_BpjknrsF.js +0 -1
- package/dist/public/assets/_BpunB-I_.js.br +0 -0
- package/dist/public/assets/_Bqgtb-fc.js.br +0 -0
- package/dist/public/assets/_BtkDWVh9.js +0 -1
- package/dist/public/assets/_BvEJgNLp.js.br +0 -0
- package/dist/public/assets/_BvYgAZl3.js +0 -1
- package/dist/public/assets/_C0Bfz_Is.js +0 -1
- package/dist/public/assets/_C1Aa6bJ9.js +0 -1
- package/dist/public/assets/_C3i3LRNx.js +0 -1
- package/dist/public/assets/_C4RHKQLq.js +0 -1
- package/dist/public/assets/_C5Wk6L8u.js.br +0 -0
- package/dist/public/assets/_C7N1s7w_.js +0 -1
- package/dist/public/assets/_C7N1s7w_.js.br +0 -0
- package/dist/public/assets/_C96lrIeU.js +0 -1
- package/dist/public/assets/_CAhkFk0k.js.br +0 -0
- package/dist/public/assets/_CCmHKlXX.js.br +0 -0
- package/dist/public/assets/_CEY_n10t.js.br +0 -0
- package/dist/public/assets/_CEejNMib.js +0 -1
- package/dist/public/assets/_CFo4GZR9.js +0 -1
- package/dist/public/assets/_CGH2Busx.js.br +0 -0
- package/dist/public/assets/_CHwp4prQ.js.br +0 -0
- package/dist/public/assets/_CN7Wz2eA.js.br +0 -0
- package/dist/public/assets/_CP58TjsV.js +0 -1
- package/dist/public/assets/_CP58TjsV.js.br +0 -0
- package/dist/public/assets/_CPruMiA4.js +0 -1
- package/dist/public/assets/_CQEZuOE_.js +0 -1
- package/dist/public/assets/_CSMoDPwM.js.br +0 -0
- package/dist/public/assets/_CVEabnQh.js.br +0 -0
- package/dist/public/assets/_CWTelCGM.js.br +0 -0
- package/dist/public/assets/_CXpplsaj.js +0 -1
- package/dist/public/assets/_CY0xLX0Y.js.br +0 -0
- package/dist/public/assets/_CZNztOn6.js.br +0 -0
- package/dist/public/assets/_Cb593OOX.js +0 -1
- package/dist/public/assets/_Cbis2WSl.js +0 -1
- package/dist/public/assets/_CeZa36O-.js.br +0 -0
- package/dist/public/assets/_ChTMXnIu.js.br +0 -0
- package/dist/public/assets/_Cig63HLr.js +0 -1
- package/dist/public/assets/_CjkPh72t.js +0 -1
- package/dist/public/assets/_Cm6nigjK.js +0 -1
- package/dist/public/assets/_CnAEQUMb.js +0 -1
- package/dist/public/assets/_Coroy2lI.js.br +0 -0
- package/dist/public/assets/_CpAeLnqO.js +0 -1
- package/dist/public/assets/_CpAeLnqO.js.br +0 -0
- package/dist/public/assets/_Cpkby1iI.js +0 -1
- package/dist/public/assets/_Cs0Q8LaN.js +0 -1
- package/dist/public/assets/_Ct2pbvTU.js +0 -1
- package/dist/public/assets/_CtC83UyG.js.br +0 -0
- package/dist/public/assets/_CtVSUTWd.js +0 -1
- package/dist/public/assets/_Ctf0pL3c.js +0 -1
- package/dist/public/assets/_CtvMc-Fn.js +0 -1
- package/dist/public/assets/_Cv7TctYK.js +0 -1
- package/dist/public/assets/_Cv7TctYK.js.br +0 -0
- package/dist/public/assets/_CvKDzuxc.js.br +0 -0
- package/dist/public/assets/_CvxhsaLv.js +0 -1
- package/dist/public/assets/_CwxTh04m.js +0 -1
- package/dist/public/assets/_CyMRBJfa.js +0 -1
- package/dist/public/assets/_D-wwbDX7.js.br +0 -0
- package/dist/public/assets/_D02jmNge.js +0 -1
- package/dist/public/assets/_D0gWUr-E.js.br +0 -0
- package/dist/public/assets/_D2wtQpHN.js +0 -1
- package/dist/public/assets/_D2wtQpHN.js.br +0 -0
- package/dist/public/assets/_D3uCXh8z.js +0 -2
- package/dist/public/assets/_D3uCXh8z.js.br +0 -0
- package/dist/public/assets/_D5GW0gg0.js +0 -1
- package/dist/public/assets/_D5GW0gg0.js.br +0 -0
- package/dist/public/assets/_D6YVA8vA.js.br +0 -0
- package/dist/public/assets/_D85prZ-z.js +0 -1
- package/dist/public/assets/_D8QlsPTv.js +0 -1
- package/dist/public/assets/_D8QlsPTv.js.br +0 -0
- package/dist/public/assets/_D8rDqOqJ.js +0 -1
- package/dist/public/assets/_DAcmaIgY.js.br +0 -0
- package/dist/public/assets/_DBlahxfT.js +0 -1
- package/dist/public/assets/_DCPGqAo6.js +0 -1
- package/dist/public/assets/_DDBuDrkA.js.br +0 -0
- package/dist/public/assets/_DDfwtidv.js.br +0 -0
- package/dist/public/assets/_DEqzNO7a.js +0 -1
- package/dist/public/assets/_DEyhBnnd.js +0 -1
- package/dist/public/assets/_DG1LpTGX.js.br +0 -0
- package/dist/public/assets/_DJK-MioE.js +0 -1
- package/dist/public/assets/_DLCgfhNS.js.br +0 -0
- package/dist/public/assets/_DLYvRpNz.js +0 -6
- package/dist/public/assets/_DLYvRpNz.js.br +0 -0
- package/dist/public/assets/_DPzjUc1B.js +0 -1
- package/dist/public/assets/_DRDW7RgT.js +0 -1
- package/dist/public/assets/_DSoJ6ck3.js.br +0 -0
- package/dist/public/assets/_DW92UwGh.js.br +0 -0
- package/dist/public/assets/_DYIjiPYY.js.br +0 -0
- package/dist/public/assets/_DZeeRtLs.js +0 -1
- package/dist/public/assets/_DZzucnmx.js.br +0 -0
- package/dist/public/assets/_D_AjKzkm.js.br +0 -0
- package/dist/public/assets/_DdVG8Rbg.js.br +0 -0
- package/dist/public/assets/_DdcPtDZz.js.br +0 -0
- package/dist/public/assets/_De_msLFQ.js.br +0 -0
- package/dist/public/assets/_DeiCZJcm.js +0 -1
- package/dist/public/assets/_DeiCZJcm.js.br +0 -0
- package/dist/public/assets/_DfNM5GDo.js.br +0 -0
- package/dist/public/assets/_Dg6OsRrR.js.br +0 -0
- package/dist/public/assets/_DgrmX7cI.js +0 -1
- package/dist/public/assets/_DiPK_ps-.js +0 -1
- package/dist/public/assets/_Dow17jzJ.js.br +0 -0
- package/dist/public/assets/_DpSZYTyI.js.br +0 -0
- package/dist/public/assets/_DpXO9fPK.js +0 -1
- package/dist/public/assets/_DpXO9fPK.js.br +0 -0
- package/dist/public/assets/_DqiBcDpF.js.br +0 -0
- package/dist/public/assets/_DqkJjiCU.js +0 -1
- package/dist/public/assets/_Draa__tn.js.br +0 -0
- package/dist/public/assets/_Drs3T7dh.js +0 -1
- package/dist/public/assets/_Drs3T7dh.js.br +0 -0
- package/dist/public/assets/_DtBGe4AJ.js +0 -1
- package/dist/public/assets/_DxSnjCPi.js.br +0 -0
- package/dist/public/assets/_DyEhTpVE.js.br +0 -0
- package/dist/public/assets/_DyFcXAXE.js.br +0 -0
- package/dist/public/assets/_FPItrlZz.js +0 -1
- package/dist/public/assets/_HGP7qpI4.js.br +0 -0
- package/dist/public/assets/_L-b7Vsug.js.br +0 -0
- package/dist/public/assets/_LWpc-K1g.js.br +0 -0
- package/dist/public/assets/_MwkLbzHQ.js.br +0 -0
- package/dist/public/assets/_O4DIriLZ.js +0 -1
- package/dist/public/assets/_T0Ktx7Km.js.br +0 -0
- package/dist/public/assets/_T6O8KX0b.js +0 -1
- package/dist/public/assets/_TWZgGi12.js +0 -1
- package/dist/public/assets/_UBgRR4E9.js.br +0 -0
- package/dist/public/assets/_X3T0JcUM.js +0 -87
- package/dist/public/assets/_X3T0JcUM.js.br +0 -0
- package/dist/public/assets/_YtP2gTmD.js +0 -1
- package/dist/public/assets/__1UtPhZb.js.br +0 -0
- package/dist/public/assets/__WDcLOp3.js +0 -1
- package/dist/public/assets/_csFWQzWs.js.br +0 -0
- package/dist/public/assets/_eURsGF_D.js +0 -1
- package/dist/public/assets/_fEPizk9T.js +0 -1
- package/dist/public/assets/_hC5RUmrf.js.br +0 -0
- package/dist/public/assets/_hfgYVPfe.js +0 -1
- package/dist/public/assets/_i51v5tw8.js +0 -1
- package/dist/public/assets/_k1uZxEJ-.js.br +0 -0
- package/dist/public/assets/_l4nNKr9o.js +0 -1
- package/dist/public/assets/_lA6BOkV1.js.br +0 -0
- package/dist/public/assets/_qyrPXpIj.js +0 -1
- package/dist/public/assets/_sjeWoc5X.js.br +0 -0
- package/dist/public/assets/_tByKwKUc.js +0 -1
- package/dist/public/assets/_tFVcmmKI.js.br +0 -0
- package/dist/public/assets/_txvO7pXr.js.br +0 -0
- package/dist/public/assets/_um7Vy7NX.js +0 -1
- package/dist/public/assets/_veNUvOqP.js +0 -1
- package/dist/public/assets/_w8hTnp0H.js.br +0 -0
- package/dist/public/assets/_wGWNa6Sp.js +0 -1
- package/dist/public/assets/_wxbEv1JK.js +0 -1
- package/dist/public/assets/files-view-BOE5HTrF.js +0 -2
- package/dist/public/assets/manage-workspace-ClwsrQ4a.js +0 -2
- package/dist/public/assets/new-CJ6ZElay.js +0 -1
- package/dist/public/assets/new-workspace-DWSBO4Vx.js +0 -2
- package/dist/public/assets/review-view-DffAZHOz.js +0 -2
- package/dist/public/assets/settings-CJ6ZElay.js +0 -1
- package/dist/public/assets/settings-page-CYL_T3Vf.js +0 -2
- package/dist/public/assets/styles-taHUfRpm.css +0 -1
- package/dist/public/assets/styles-taHUfRpm.css.br +0 -0
- package/dist/public/assets/w-CJ6ZElay.js +0 -1
- package/dist/public/assets/w._-CJ6ZElay.js +0 -1
- package/dist/public/assets/w._-ChCIRlhY.js +0 -1
- package/dist/public/assets/w._-WsR2-skZ.js +0 -1
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ Inside a workspace, `work branches`, `work session`, `work topic`,
|
|
|
63
63
|
other with `work session new|send|wait` — any vendor's, each in a tab of its
|
|
64
64
|
own the user watches, its last message as a turn ends coming back to the
|
|
65
65
|
one that asked as a prompt — and run groups of them with
|
|
66
|
-
`work session fanout
|
|
66
|
+
`work session fanout`, which the session list shows as a
|
|
67
67
|
lead's team; to change things,
|
|
68
68
|
`work workspace create`, `work repo add`, `work config get|set` (checked
|
|
69
69
|
against what each setting takes; `work config schema` lists them),
|
package/bin/cli/session.mjs
CHANGED
|
@@ -20,6 +20,13 @@ function sessionId(ctx) {
|
|
|
20
20
|
return id;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
/** The agent asking, for the routes that hold one to its own workspace:
|
|
24
|
+
* `?by=<WORK_SESSION_ID>`, nothing from a terminal outside work. */
|
|
25
|
+
function by(sep = "?") {
|
|
26
|
+
const me = process.env.WORK_SESSION_ID;
|
|
27
|
+
return me ? `${sep}by=${encodeURIComponent(me)}` : "";
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
/** How long `wait` waits by default: inside an agent's own tool limit
|
|
24
31
|
* (ten minutes for most), so it ends saying who is still working rather
|
|
25
32
|
* than being killed. */
|
|
@@ -148,7 +155,7 @@ function printGroup(ctx, g) {
|
|
|
148
155
|
c.closed && `${c.closed} closed`,
|
|
149
156
|
].filter(Boolean);
|
|
150
157
|
console.log(
|
|
151
|
-
`${g.
|
|
158
|
+
`${g.id} "${g.title}" ${parts.join(" · ")} (${g.parallel} at a time, ${g.fanIn ? (left ? "replies held until all answer" : "replies sent as one") : "replies as each comes"})`,
|
|
152
159
|
);
|
|
153
160
|
for (const m of g.members)
|
|
154
161
|
console.log(
|
|
@@ -179,7 +186,7 @@ work session new [--agent <id>] [--title "<name>"] [--prompt "<text>"|-] [--no-r
|
|
|
179
186
|
answered and is done with — when your job finishes, or after ten idle
|
|
180
187
|
minutes — unless --keep, it is on the user's screen, or they have typed
|
|
181
188
|
into it. Past ${SESSION_CAP} running sessions in the workspace it wants --force.
|
|
182
|
-
work session fanout --agent <id> [--agent <id>…] [--count <n>] --prompt "<text>"|- [<item>…] [--title "<name>"] [--
|
|
189
|
+
work session fanout --agent <id> [--agent <id>…] [--count <n>] --prompt "<text>"|- [<item>…] [--title "<name>"] [--parallel <n>] [--stream] [--close-done|--keep] [--topic <name> [--repo <repo>…] [--install]]
|
|
183
190
|
Start a group of sessions from this one: each --agent once (or --count
|
|
184
191
|
times), or once for each <item> with {} in the prompt replaced by it
|
|
185
192
|
({i} is the member's number). They queue and start --parallel at a time
|
|
@@ -189,12 +196,11 @@ work session fanout --agent <id> [--agent <id>…] [--count <n>] --prompt "<text
|
|
|
189
196
|
closes once done with, as \`new\`'s does (its result is kept);
|
|
190
197
|
--close-done closes it as soon as it answers, --keep never;
|
|
191
198
|
--topic gives each member a topic branch of its own (<name>-1, -2, …),
|
|
192
|
-
side by side in Review
|
|
193
|
-
plan (\`work plan\`). For a quick sweep inside your own CLI, its own
|
|
199
|
+
side by side in Review. For a quick sweep inside your own CLI, its own
|
|
194
200
|
subagents are cheaper: this is for other vendors, long work, or work the
|
|
195
201
|
user may want to watch.
|
|
196
202
|
work session team [--json]
|
|
197
|
-
This session's
|
|
203
|
+
This session's groups: each member (its id, then its
|
|
198
204
|
session's), its state and its last line (what it is doing, or its
|
|
199
205
|
result).
|
|
200
206
|
work session retry <member>
|
|
@@ -208,7 +214,10 @@ work session send <id> "<text>"|- [--no-reply]
|
|
|
208
214
|
or a draft someone is typing. From an agent's session it wants a reply
|
|
209
215
|
unless --no-reply: the recipient's last message as that turn ends,
|
|
210
216
|
typed into this session as a prompt of its own. End your turn to wait
|
|
211
|
-
for it. A file's path says more than its text pasted in.
|
|
217
|
+
for it. A file's path says more than its text pasted in. An agent in
|
|
218
|
+
another workspace (\`work session list <workspace>\`) can be messaged
|
|
219
|
+
when the user asks, and only while it runs; everything else here an
|
|
220
|
+
agent does in its own workspace only.
|
|
212
221
|
work session wait [<id>|<group>...] [--any] [--timeout <seconds>]
|
|
213
222
|
Wait for the replies owed to this session (by those sessions or groups,
|
|
214
223
|
else by any), printing each as it comes; a reply printed here is not
|
|
@@ -234,7 +243,6 @@ work session kill --done
|
|
|
234
243
|
"--repo",
|
|
235
244
|
"--count",
|
|
236
245
|
"--parallel",
|
|
237
|
-
"--phase",
|
|
238
246
|
]);
|
|
239
247
|
switch (verb) {
|
|
240
248
|
case undefined: {
|
|
@@ -272,7 +280,7 @@ work session kill --done
|
|
|
272
280
|
case "title": {
|
|
273
281
|
const id = sessionId(ctx);
|
|
274
282
|
const title = rest.join(" ");
|
|
275
|
-
await ctx.api.patch(`/api/sessions/${id}`, { title });
|
|
283
|
+
await ctx.api.patch(`/api/sessions/${id}${by()}`, { title });
|
|
276
284
|
return ctx.out({ id, title: title || null }, () =>
|
|
277
285
|
console.log(
|
|
278
286
|
title ? `named ${id} "${title}"` : `cleared ${id}'s name`,
|
|
@@ -366,13 +374,12 @@ work session kill --done
|
|
|
366
374
|
const total = new Set(agents).size * (items.length || count);
|
|
367
375
|
const topic = ctx.flag("--topic");
|
|
368
376
|
const at = topic ? await topicDirs(ctx, topic, total) : null;
|
|
369
|
-
const g = await ctx.api.post(`/api/sessions/${me}/groups`, {
|
|
377
|
+
const g = await ctx.api.post(`/api/sessions/${me}/groups${by()}`, {
|
|
370
378
|
title: ctx.flag("--title") ?? "",
|
|
371
379
|
prompt,
|
|
372
380
|
agents,
|
|
373
381
|
...(items.length ? { items } : { count }),
|
|
374
382
|
...(parallel ? { parallel } : {}),
|
|
375
|
-
...(ctx.has("--phase") ? { phase: ctx.flag("--phase") } : {}),
|
|
376
383
|
fanIn: !ctx.has("--stream"),
|
|
377
384
|
closeDone: ctx.has("--close-done"),
|
|
378
385
|
keep: ctx.has("--keep"),
|
|
@@ -398,16 +405,8 @@ work session kill --done
|
|
|
398
405
|
const me = sessionId(ctx);
|
|
399
406
|
const t = await ctx.api.get(`/api/sessions/${me}/team`);
|
|
400
407
|
return ctx.out(t, (t) => {
|
|
401
|
-
if (!t.
|
|
402
|
-
return console.log(
|
|
403
|
-
"no plan or groups: `work session fanout` starts one",
|
|
404
|
-
);
|
|
405
|
-
if (t.plan) {
|
|
406
|
-
console.log(
|
|
407
|
-
`plan "${t.plan.name}"${t.plan.done ? " (done)" : ""}: ${t.plan.phases.map((p) => p.title).join(" → ") || "no phases"}`,
|
|
408
|
-
);
|
|
409
|
-
for (const l of t.plan.log) console.log(` · ${l.text}`);
|
|
410
|
-
}
|
|
408
|
+
if (!t.groups.length)
|
|
409
|
+
return console.log("no groups: `work session fanout` starts one");
|
|
411
410
|
for (const g of t.groups) printGroup(ctx, g);
|
|
412
411
|
});
|
|
413
412
|
}
|
|
@@ -415,7 +414,7 @@ work session kill --done
|
|
|
415
414
|
case "skip": {
|
|
416
415
|
const [member] = rest;
|
|
417
416
|
if (!member) ctx.die(`usage: work session ${verb} <member>`);
|
|
418
|
-
await ctx.api.post(`/api/members/${member}/${verb}`);
|
|
417
|
+
await ctx.api.post(`/api/members/${member}/${verb}${by()}`);
|
|
419
418
|
return ctx.out(
|
|
420
419
|
{ member, [verb === "retry" ? "retried" : "skipped"]: true },
|
|
421
420
|
() =>
|
|
@@ -451,7 +450,10 @@ work session kill --done
|
|
|
451
450
|
const replies = [];
|
|
452
451
|
let owing = [];
|
|
453
452
|
for (;;) {
|
|
454
|
-
const r = await ctx.api.post(
|
|
453
|
+
const r = await ctx.api.post(
|
|
454
|
+
`/api/sessions/${me}/replies${by()}`,
|
|
455
|
+
body,
|
|
456
|
+
);
|
|
455
457
|
replies.push(...r.replies);
|
|
456
458
|
if (!ctx.json) r.replies.forEach(printReply);
|
|
457
459
|
owing = r.owing;
|
|
@@ -482,7 +484,7 @@ work session kill --done
|
|
|
482
484
|
if (ctx.has("--done")) {
|
|
483
485
|
const me = sessionId(ctx);
|
|
484
486
|
const { closed } = await ctx.api.post(
|
|
485
|
-
`/api/sessions/${me}/close-done`,
|
|
487
|
+
`/api/sessions/${me}/close-done${by()}`,
|
|
486
488
|
);
|
|
487
489
|
return ctx.out({ closed }, () =>
|
|
488
490
|
console.log(
|
|
@@ -513,7 +515,7 @@ work session kill --done
|
|
|
513
515
|
);
|
|
514
516
|
}
|
|
515
517
|
const r = await ctx.api.del(
|
|
516
|
-
`/api/sessions/${id}${keep ?
|
|
518
|
+
`/api/sessions/${id}${keep ? `?children=keep${by("&")}` : by()}`,
|
|
517
519
|
);
|
|
518
520
|
const closed = r?.closed ?? [id];
|
|
519
521
|
return ctx.out({ id, killed: true, closed }, () =>
|
package/bin/cli/topic.mjs
CHANGED
|
@@ -220,6 +220,16 @@ export function makeTopics(
|
|
|
220
220
|
// origin, never to the base it was cut from.
|
|
221
221
|
git(repo.dir, ["worktree", "add", "--no-track", "-b", branch, dest, start]);
|
|
222
222
|
const stacked = from && from !== `origin/${repo.base_branch}` ? from : null;
|
|
223
|
+
// Its PR's base, said as gh reads it (branch.<b>.gh-merge-base): the
|
|
224
|
+
// branch it stacks on, else the base it was cut from.
|
|
225
|
+
const prBase = (stacked ?? repo.base_branch).replace(/^origin\//, "");
|
|
226
|
+
if (
|
|
227
|
+
has(repo.dir, `refs/heads/${prBase}`) ||
|
|
228
|
+
has(repo.dir, `refs/remotes/origin/${prBase}`)
|
|
229
|
+
)
|
|
230
|
+
git(repo.dir, ["config", `branch.${branch}.gh-merge-base`, prBase], {
|
|
231
|
+
allowFail: true,
|
|
232
|
+
});
|
|
223
233
|
made.push({
|
|
224
234
|
topic: name,
|
|
225
235
|
repo: repo.worktree,
|
|
@@ -569,6 +569,32 @@ var STEPS = [
|
|
|
569
569
|
CREATE INDEX group_members_session ON group_members(session_id);
|
|
570
570
|
|
|
571
571
|
ALTER TABLE session_messages ADD COLUMN group_id TEXT REFERENCES session_groups(id) ON DELETE SET NULL;
|
|
572
|
+
`);
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
version: 6,
|
|
577
|
+
name: "drop work plan",
|
|
578
|
+
up(db) {
|
|
579
|
+
db.exec(`
|
|
580
|
+
CREATE TABLE session_groups_new (
|
|
581
|
+
id TEXT PRIMARY KEY,
|
|
582
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
583
|
+
owner TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
584
|
+
title TEXT NOT NULL,
|
|
585
|
+
parallel INTEGER NOT NULL DEFAULT 4,
|
|
586
|
+
fan_in INTEGER NOT NULL DEFAULT 1,
|
|
587
|
+
close_done INTEGER NOT NULL DEFAULT 0,
|
|
588
|
+
keep INTEGER NOT NULL DEFAULT 0,
|
|
589
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
590
|
+
);
|
|
591
|
+
INSERT INTO session_groups_new (id, workspace_id, owner, title, parallel, fan_in, close_done, keep, created_at)
|
|
592
|
+
SELECT id, workspace_id, owner, title, parallel, fan_in, close_done, keep, created_at FROM session_groups;
|
|
593
|
+
DROP TABLE session_groups;
|
|
594
|
+
ALTER TABLE session_groups_new RENAME TO session_groups;
|
|
595
|
+
|
|
596
|
+
DROP TABLE plan_log;
|
|
597
|
+
DROP TABLE plans;
|
|
572
598
|
`);
|
|
573
599
|
}
|
|
574
600
|
}
|
|
@@ -8598,7 +8624,7 @@ function publishChange(sessionId) {
|
|
|
8598
8624
|
const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
|
|
8599
8625
|
if (row?.workspace_id) {
|
|
8600
8626
|
const workspaceId = row.workspace_id;
|
|
8601
|
-
import("./
|
|
8627
|
+
import("./_C9UcJEf9.js").then((m) => m.notifySessionsChanged(workspaceId));
|
|
8602
8628
|
return;
|
|
8603
8629
|
}
|
|
8604
8630
|
publish("sessions.changed");
|
|
@@ -10619,6 +10645,20 @@ function listSessions(workspaceId) {
|
|
|
10619
10645
|
function getSession(id) {
|
|
10620
10646
|
return get("SELECT * FROM sessions WHERE id = ?", id);
|
|
10621
10647
|
}
|
|
10648
|
+
/** The agent a request is made for (the `WORK_SESSION_ID` the CLI sends
|
|
10649
|
+
* as `by`, `parent` or `from`), when it is one: a shell's is the user's. */
|
|
10650
|
+
function agentCaller(id) {
|
|
10651
|
+
const s = id ? getSession(id) : void 0;
|
|
10652
|
+
return s && s.agent !== "shell" ? s : void 0;
|
|
10653
|
+
}
|
|
10654
|
+
/** An agent runs sessions only in its own workspace — starts them, fans
|
|
10655
|
+
* out, closes, skips, retries, renames, takes their replies; another
|
|
10656
|
+
* workspace's it may only message, while running (\`sendMessage\`). The
|
|
10657
|
+
* user (the app, their own shell) is held to none of it. */
|
|
10658
|
+
function ownWorkspaceOnly(caller, workspaceId, what) {
|
|
10659
|
+
const agent = agentCaller(caller);
|
|
10660
|
+
if (agent && workspaceId && agent.workspace_id !== workspaceId) throw httpError(403, `an agent ${what} only in its own workspace: to reach one in another (when the user asks), message an agent running there with \`work session send\``);
|
|
10661
|
+
}
|
|
10622
10662
|
/** `ifEmpty` is a first open's auto-create: two pages mounting one empty
|
|
10623
10663
|
* workspace at once (restored tabs, a phone and a desktop) both list no
|
|
10624
10664
|
* sessions before either POST lands. The check and the insert run in one
|
|
@@ -10749,7 +10789,7 @@ function notifySessionsChanged(workspaceId) {
|
|
|
10749
10789
|
async function emitSessionsChanged(workspaceId) {
|
|
10750
10790
|
try {
|
|
10751
10791
|
const states = await sessionStates();
|
|
10752
|
-
const { teamsOf } = await import("./
|
|
10792
|
+
const { teamsOf } = await import("./_Bu1xx1j4.js");
|
|
10753
10793
|
publish("sessions.changed", {
|
|
10754
10794
|
workspaceId,
|
|
10755
10795
|
sessions: listSessions(workspaceId).map((s) => ({
|
|
@@ -11210,4 +11250,4 @@ function sleep(ms) {
|
|
|
11210
11250
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11211
11251
|
}
|
|
11212
11252
|
//#endregion
|
|
11213
|
-
export {
|
|
11253
|
+
export { onTurnEnd as $, untrackedCacheAllowed as $t, readHookPayload as A, shared as An, deleteSetting as At, hookPhase as B, discoverAgents as Bt, panePids as C, TMUX_SOCKET as Cn, sendPush as Ct, tmuxName as D, run$2 as Dn, agentChoices as Dt, sessionStates as E, gitEnv as En, WORKSPACE_PREFS as Et, realInside as F, isKnownAgent as Ft, noteBackground as G, setupPath as Gt, interruptedSinceReport as H, ghKnownHosts as Ht, realInsideSync as I, preferredAgent as It, noteTyped as J, which as Jt, noteInterrupt as K, stableGh as Kt, activityOf as L, setDisabledAgents as Lt, blankRow as M, withLock as Mn, disabledAgents as Mt, cleanSummary as N, enabledAgents as Nt, tmuxWasStarted as O, tmux as On, allPrefs as Ot, inside as P, getSetting as Pt, onPhaseChange as Q, unsetCaches as Qt, agentPhase as R, setPref as Rt, ownWorkspaceOnly as S, workspacePath as Sn, saveSubscription as St, sendToSession as T, git as Tn, PREF_MAX as Tt, lastTypedAt as U, miseInstalls as Ut, hookReportedAt as V, doctor as Vt, noteActivity as W, miseVersions as Wt, notifyEventOn as X, unreachableText as Xt, noteUserAnswered as Y, hostReach as Yt, onFinished as Z, enableUntrackedCache as Zt, listSessions as _, subscribe as _n, manifest as _t, createSession as a, agentLabel$1 as an, settleQuietWorking as at, notifySessionsChanged as b, db as bn, deleteSubscription as bt, disposeSessions as c, toolById as cn, turnSettling as ct, getSession as d, FRAME_HEADERS as dn, agentFromCommand as dt, firewallProbe as en, sessionWatched as et, killSession as f, checked as fn, agentLabel as ft, listPanesWithin as g, publishJson as gn, iconSvg as gt, listPanes as h, publish as hn, getInstance as ht, clearTmuxStarted as i, agentById as in, setSessionViewers as it, reportsWorking as j, swr as jn, deleteWorkspacePrefs as jt, AGENTS as k, config as kn, changePref as kt, ensureTmuxServer as l, applyPrefChange as ln, agentBadge as lt, launchDir as m, readBody as mn, ACCENT_RE as mt, beginCreation as n, PROJECT_TOOLS as nn, setExpecting as nt, creationOf as o, catalogPin as on, summaryOf as ot, killWorkspaceSessions as p, httpError as pn, agentMeta as pt, notePermissionMode as q, tilde as qt, cleanEnv as r, TOOLS as rn, setScrapedPhase as rt, descendantsOf as s, parseAgentId as sn, turnPhase as st, agentCaller as t, DEFAULT_GITHUB_HOST as tn, setAgentPhase as tt, forgetPanes as u, FRAME_ANCESTORS as un, agentFamily as ut, markTmuxStarted as v, subscriberCount as vn, normalizeAccent as vt, renameSession as w, gh as wn, validSubscription as wt, onSessionDispose as x, get as xn, pushPublicKey as xt, newSessionArgs as y, all as yn, setInstance as yt, clearAgentPhase as z, setSetting as zt };
|
|
@@ -85,98 +85,98 @@ var iconSize = {
|
|
|
85
85
|
};
|
|
86
86
|
//#endregion
|
|
87
87
|
//#region src/tags/settings-agents.css.ts
|
|
88
|
-
var agentRow = "
|
|
89
|
-
var list$3 = "
|
|
90
|
-
var metaChip = "
|
|
88
|
+
var agentRow = "_fG _dX";
|
|
89
|
+
var list$3 = "_d1 _dJ _dW _dZ";
|
|
90
|
+
var metaChip = "_ee _bz _by";
|
|
91
91
|
var sectionCount = "_dG _bp _bq";
|
|
92
|
-
var usageNote = "
|
|
93
|
-
var pop$2 = "
|
|
94
|
-
var spinner = "
|
|
95
|
-
var toolLead = "
|
|
96
|
-
var name$4 = "
|
|
97
|
-
var desc$1 = "
|
|
92
|
+
var usageNote = "_j4 _by";
|
|
93
|
+
var pop$2 = "_g0 _bN";
|
|
94
|
+
var spinner = "_g3 _bD _bi";
|
|
95
|
+
var toolLead = "_gg _d_";
|
|
96
|
+
var name$4 = "_gq _d_";
|
|
97
|
+
var desc$1 = "_gr _ea";
|
|
98
98
|
//#endregion
|
|
99
99
|
//#region src/tags/lsp-add-dialog.css.ts
|
|
100
|
-
var addDlg = "
|
|
101
|
-
var key$1 = "
|
|
102
|
-
var addTile = "
|
|
103
|
-
var field$
|
|
104
|
-
var keyField = "
|
|
105
|
-
var labelField = "
|
|
106
|
-
var detailsToggle = "
|
|
107
|
-
var themeSeg = "
|
|
108
|
-
var checkList = "
|
|
100
|
+
var addDlg = "_ly _bX";
|
|
101
|
+
var key$1 = "_lH _lF";
|
|
102
|
+
var addTile = "_lJ _lF";
|
|
103
|
+
var field$2 = "_lU _bA";
|
|
104
|
+
var keyField = "_lV _lU _bA";
|
|
105
|
+
var labelField = "_lW _lU _bA";
|
|
106
|
+
var detailsToggle = "_gI _6";
|
|
107
|
+
var themeSeg = "_fW _bR";
|
|
108
|
+
var checkList = "_h7 _dH";
|
|
109
109
|
//#endregion
|
|
110
110
|
//#region src/tags/prompt-dialog.css.ts
|
|
111
|
-
var promptDlg = "
|
|
111
|
+
var promptDlg = "_b1 _bX";
|
|
112
112
|
var item$1 = "_b6 _D";
|
|
113
113
|
var glance = "_dT _D";
|
|
114
114
|
//#endregion
|
|
115
115
|
//#region src/tags/side-nav.css.ts
|
|
116
|
-
var iconBtn = "
|
|
117
|
-
var settingsDot = "
|
|
118
|
-
var notifyBtn = "
|
|
116
|
+
var iconBtn = "_ca _D";
|
|
117
|
+
var settingsDot = "_cb _bQ";
|
|
118
|
+
var notifyBtn = "_cg _D";
|
|
119
119
|
//#endregion
|
|
120
120
|
//#region src/styles/session-pop.css.ts
|
|
121
|
-
var sessionPop = "
|
|
122
|
-
var sessionPopBtn = "
|
|
123
|
-
var wsBtn = "
|
|
124
|
-
var rowIcon = "
|
|
125
|
-
var prChip = "
|
|
121
|
+
var sessionPop = "_b9 _bN";
|
|
122
|
+
var sessionPopBtn = "_b_ _bk";
|
|
123
|
+
var wsBtn = "_e5 _bk";
|
|
124
|
+
var rowIcon = "_e7 _bF _D";
|
|
125
|
+
var prChip = "_l7 _M _l1";
|
|
126
126
|
//#endregion
|
|
127
127
|
//#region src/tags/port-chip.css.ts
|
|
128
|
-
var port = "
|
|
128
|
+
var port = "_oP _M _l1";
|
|
129
129
|
var depth = {
|
|
130
|
-
"1": "
|
|
131
|
-
"2": "
|
|
132
|
-
"3": "
|
|
130
|
+
"1": "_kT",
|
|
131
|
+
"2": "_kU",
|
|
132
|
+
"3": "_kV"
|
|
133
133
|
};
|
|
134
|
-
var open = "
|
|
135
|
-
var action = "
|
|
136
|
-
var toggle = "
|
|
137
|
-
var fold = "
|
|
138
|
-
var item = "
|
|
134
|
+
var open = "_k1 _bk";
|
|
135
|
+
var action = "_k6 _bI _D";
|
|
136
|
+
var toggle = "_ej _6";
|
|
137
|
+
var fold = "_ek _dY";
|
|
138
|
+
var item = "_kA _bk";
|
|
139
139
|
var statusOf = {
|
|
140
|
-
queued: "
|
|
141
|
-
starting: "
|
|
142
|
-
working: "
|
|
143
|
-
waiting: "
|
|
144
|
-
idle: "
|
|
145
|
-
done: "
|
|
146
|
-
closed: "
|
|
140
|
+
queued: "_m0",
|
|
141
|
+
starting: "_m1",
|
|
142
|
+
working: "_m2",
|
|
143
|
+
waiting: "_m3",
|
|
144
|
+
idle: "_m4",
|
|
145
|
+
done: "_m5",
|
|
146
|
+
closed: "_m6"
|
|
147
147
|
};
|
|
148
|
-
var menu = "
|
|
149
|
-
var menuItem = "
|
|
150
|
-
var findBtn$1 = "_jp
|
|
151
|
-
var tool = "
|
|
152
|
-
var heldRefresh = "
|
|
153
|
-
var pop$1 = "
|
|
154
|
-
var fileFilter = "
|
|
155
|
-
var findInput = "
|
|
156
|
-
var keybarIconBtn = "
|
|
157
|
-
var input = "
|
|
158
|
-
var group = "
|
|
159
|
-
var hint$1 = "
|
|
160
|
-
var sheetDir = "
|
|
161
|
-
var upBtn = "
|
|
162
|
-
var findBtn = "
|
|
163
|
-
var goBtn = "
|
|
164
|
-
var note = "
|
|
148
|
+
var menu = "_nH _b9 _bN";
|
|
149
|
+
var menuItem = "_nJ _bk";
|
|
150
|
+
var findBtn$1 = "_jp _if _bG _D";
|
|
151
|
+
var tool = "_if _bG _D";
|
|
152
|
+
var heldRefresh = "_in _M";
|
|
153
|
+
var pop$1 = "_mr _b9 _bN";
|
|
154
|
+
var fileFilter = "_oO _F";
|
|
155
|
+
var findInput = "_eR _F";
|
|
156
|
+
var keybarIconBtn = "_e0 _bI _D";
|
|
157
|
+
var input = "_cI _F";
|
|
158
|
+
var group = "_cL _6";
|
|
159
|
+
var hint$1 = "_nk _bp _3";
|
|
160
|
+
var sheetDir = "_n6 _bP";
|
|
161
|
+
var upBtn = "_iz _bG _D";
|
|
162
|
+
var findBtn = "_iD _if _bG _D";
|
|
163
|
+
var goBtn = "_iE _if _bG _D";
|
|
164
|
+
var note = "_mn _by";
|
|
165
165
|
//#endregion
|
|
166
166
|
//#region src/tags/manage-workspace.css.ts
|
|
167
|
-
var procCmd = "
|
|
168
|
-
var factCopy = "
|
|
169
|
-
var resultRow = "
|
|
170
|
-
var resultBranch = "
|
|
171
|
-
var urlAction = "
|
|
172
|
-
var curRow = "
|
|
167
|
+
var procCmd = "_hd _d_";
|
|
168
|
+
var factCopy = "_hk _bI _D";
|
|
169
|
+
var resultRow = "_lh _bk";
|
|
170
|
+
var resultBranch = "_li _ee _bz _by _bF _D";
|
|
171
|
+
var urlAction = "_lj _ee _bz _by _ef";
|
|
172
|
+
var curRow = "_hb _d4";
|
|
173
173
|
//#endregion
|
|
174
174
|
//#region src/tags/join-dialog.css.ts
|
|
175
|
-
var dlg = "
|
|
176
|
-
var hint = "
|
|
177
|
-
var kbtn = "
|
|
178
|
-
var repeat = "
|
|
179
|
-
var dpadUser = "
|
|
180
|
-
var dpadEsc = "
|
|
175
|
+
var dlg = "_kH _bX";
|
|
176
|
+
var hint = "_kI _by";
|
|
177
|
+
var kbtn = "_c4 _bH _D";
|
|
178
|
+
var repeat = "_c7 _c6";
|
|
179
|
+
var dpadUser = "_c_ _c6";
|
|
180
|
+
var dpadEsc = "_da _c6";
|
|
181
181
|
//#endregion
|
|
182
|
-
export { field$
|
|
182
|
+
export { field$2 as $, statusOf as A, prTone as At, wsBtn as B, fileFilter as C, chipBtn as Ct, findBtn$1 as D, iconBtnXs as Dt, tool as E, iconBtnRow as Et, depth as F, settingsDot as G, sessionPopBtn as H, open as I, promptDlg as J, glance as K, port as L, fold as M, usageFill as Mt, toggle as N, usageInk as Nt, menu as O, inputLg as Ot, action as P, addTile as Q, prChip as R, keybarIconBtn as S, btnSm as St, heldRefresh as T, iconBtnLg as Tt, iconBtn as U, sessionPop as V, notifyBtn as W, themeSeg as X, checkList as Y, detailsToggle as Z, sheetDir as _, tocDot as _t, dlg as a, name$4 as at, input as b, toastTitle as bt, resultBranch as c, spinner as ct, factCopy as d, list$3 as dt, key$1 as et, procCmd as f, metaChip as ft, upBtn as g, sans as gt, goBtn as h, iconSize as ht, repeat as i, desc$1 as it, item as j, tone as jt, menuItem as k, phaseIcon as kt, resultRow as l, usageNote as lt, findBtn as m, color as mt, dpadUser as n, labelField as nt, hint as o, toolLead as ot, note as p, agentRow as pt, item$1 as q, kbtn as r, addDlg as rt, curRow as s, pop$2 as st, dpadEsc as t, keyField as tt, urlAction as u, sectionCount as ut, hint$1 as v, toastKind as vt, pop$1 as w, glyphBadgeNum as wt, findInput as x, btnLg as xt, group as y, toastStack as yt, rowIcon as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $ as onTurnEnd, Ft as isKnownAgent, L as activityOf, N as cleanSummary, Pt as getSetting, Q as onPhaseChange, R as agentPhase, T as sendToSession, U as lastTypedAt, V as hookReportedAt, Z as onFinished, a as createSession, b as notifySessionsChanged, bn as db, ct as turnSettling, d as getSession, et as sessionWatched, f as killSession, ft as agentLabel, g as listPanesWithin, nt as setExpecting, ot as summaryOf, pn as httpError, st as turnPhase, w as renameSession, x as onSessionDispose, xn as get, yn as all } from "./_BdBBZphI.js";
|
|
2
2
|
//#region src/server/messages.ts
|
|
3
3
|
var team = {
|
|
4
4
|
memberGroup: () => null,
|
|
@@ -83,9 +83,17 @@ function replyBody(session, message) {
|
|
|
83
83
|
if (message.length <= MAX_REPLY) return message;
|
|
84
84
|
return `${message.slice(0, MAX_REPLY)}\n\n[cut at ${MAX_REPLY} characters: the rest is in its tab, ${tab}]`;
|
|
85
85
|
}
|
|
86
|
+
/** How a sender is named where its message lands: with its workspace,
|
|
87
|
+
* when that is another. */
|
|
88
|
+
function senderLabel(from, to) {
|
|
89
|
+
const target = getSession(to);
|
|
90
|
+
if (!from.workspace_id || from.workspace_id === target?.workspace_id) return labelOf(from);
|
|
91
|
+
const ws = get("SELECT name FROM workspaces WHERE id = ?", from.workspace_id);
|
|
92
|
+
return `${labelOf(from)} in workspace ${ws?.name ?? from.workspace_id}`;
|
|
93
|
+
}
|
|
86
94
|
function insert(to, from, kind, body, wantsReply = false, groupId = null) {
|
|
87
95
|
return Number(db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, group_id)
|
|
88
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(to, from?.id ?? null, from ?
|
|
96
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(to, from?.id ?? null, from ? senderLabel(from, to) : null, kind, body, wantsReply ? 1 : 0, groupId).lastInsertRowid);
|
|
89
97
|
}
|
|
90
98
|
function deleteIds(ids) {
|
|
91
99
|
if (!ids.length) return;
|
|
@@ -190,6 +198,9 @@ async function sendMessage(to, text, opts = {}) {
|
|
|
190
198
|
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`);
|
|
191
199
|
const sender = opts.from ? getSession(opts.from) : void 0;
|
|
192
200
|
const from = sender && sender.agent !== "shell" ? sender : null;
|
|
201
|
+
if (!!from && from.workspace_id !== target.workspace_id) {
|
|
202
|
+
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`);
|
|
203
|
+
}
|
|
193
204
|
if (from && !opts.member) admit(from.id);
|
|
194
205
|
if (!from && target.parent_id) db.prepare("UPDATE sessions SET keep = 1 WHERE id = ?").run(to);
|
|
195
206
|
const wantsReply = !!from && opts.reply !== false;
|
|
@@ -338,8 +349,6 @@ var MAX_BOOTING = 2;
|
|
|
338
349
|
/** A pool with queued members looks again this often, for a slot that a
|
|
339
350
|
* session freed without a hook to say so. */
|
|
340
351
|
var POOL_RETRY_MS = 5e3;
|
|
341
|
-
/** Lines a plan keeps of its log. */
|
|
342
|
-
var MAX_LOG = 200;
|
|
343
352
|
/** A finished group older than this goes as the server starts. */
|
|
344
353
|
var PRUNE_AFTER = "-1 day";
|
|
345
354
|
var now = () => (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -394,18 +403,19 @@ function createGroup(owner, input) {
|
|
|
394
403
|
const dirs = input.dirs ?? [];
|
|
395
404
|
if (dirs.length && dirs.length !== slots.length) throw httpError(400, `${dirs.length} folders for ${slots.length} members`);
|
|
396
405
|
const title = input.title.trim() || "fan-out";
|
|
406
|
+
const groupTitle = title.replace(/\s*[:·\-–]?\s*\{i?\}\s*/g, " ").trim() || "fan-out";
|
|
397
407
|
const parallel = Math.min(MAX_PARALLEL, Math.max(1, Math.floor(input.parallel ?? DEFAULT_PARALLEL)));
|
|
398
|
-
const current = openPlan(owner);
|
|
399
408
|
const id = newId("g");
|
|
400
|
-
db.prepare(`INSERT INTO session_groups (id, workspace_id, owner,
|
|
401
|
-
VALUES (?, ?, ?, ?, ?, ?, ?,
|
|
409
|
+
db.prepare(`INSERT INTO session_groups (id, workspace_id, owner, title, parallel, fan_in, close_done, keep)
|
|
410
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, lead.workspace_id, owner, groupTitle, parallel, input.fanIn === false ? 0 : 1, input.closeDone ? 1 : 0, input.keep ? 1 : 0);
|
|
402
411
|
const several = new Set(slots.map((p) => p.agent)).size > 1;
|
|
403
412
|
const insert = db.prepare(`INSERT INTO group_members (id, group_id, ord, agent, title, prompt, launch_dir)
|
|
404
413
|
VALUES (?, ?, ?, ?, ?, ?, ?)`);
|
|
405
414
|
slots.forEach((p, i) => {
|
|
406
415
|
const name = p.item ?? (slots.length > agents.length ? `#${p.n}` : "");
|
|
407
416
|
const who = several ? p.agent : "";
|
|
408
|
-
const
|
|
417
|
+
const templated = /\{i?\}/.test(title);
|
|
418
|
+
const memberTitle = (templated ? [title.replaceAll("{}", p.item ?? name).replaceAll("{i}", String(i + 1)), who] : [title, [name, who].filter(Boolean).join(" ")]).filter(Boolean).join(templated ? " " : " · ").slice(0, 60);
|
|
409
419
|
const prompt = input.prompt.replaceAll("{}", p.item ?? "").replaceAll("{i}", String(i + 1));
|
|
410
420
|
insert.run(newId("m"), id, i + 1, p.agent, memberTitle, prompt, dirs[i] ?? null);
|
|
411
421
|
});
|
|
@@ -414,6 +424,10 @@ function createGroup(owner, input) {
|
|
|
414
424
|
kickPool();
|
|
415
425
|
return groupView(groupOf(id));
|
|
416
426
|
}
|
|
427
|
+
/** The workspace a member's group runs in. */
|
|
428
|
+
function memberWorkspace(memberId) {
|
|
429
|
+
return get("SELECT g.workspace_id FROM group_members m JOIN session_groups g ON g.id = m.group_id WHERE m.id = ?", memberId)?.workspace_id;
|
|
430
|
+
}
|
|
417
431
|
/** Rerun a member that closed: a fresh session with the same prompt. Its
|
|
418
432
|
* lead's word that it closed is taken back, so the group waits for it. */
|
|
419
433
|
function retryMember(memberId) {
|
|
@@ -587,40 +601,6 @@ setTeamHooks({
|
|
|
587
601
|
changed(g.workspace_id);
|
|
588
602
|
}
|
|
589
603
|
});
|
|
590
|
-
function openPlan(owner) {
|
|
591
|
-
return get("SELECT * FROM plans WHERE owner = ? AND done_at IS NULL ORDER BY created_at DESC LIMIT 1", owner);
|
|
592
|
-
}
|
|
593
|
-
/** A lead's plan: the phases its groups fall under, in order. A new one
|
|
594
|
-
* ends the lead's last. */
|
|
595
|
-
function createPlan(owner, name, phases) {
|
|
596
|
-
const lead = getSession(owner);
|
|
597
|
-
if (!lead?.workspace_id) throw httpError(404, `no session ${owner}`);
|
|
598
|
-
if (!name.trim()) throw httpError(400, "a plan needs a name");
|
|
599
|
-
db.prepare("UPDATE plans SET done_at = ? WHERE owner = ? AND done_at IS NULL").run(now(), owner);
|
|
600
|
-
const id = newId("p");
|
|
601
|
-
const clean = phases.map((p) => ({
|
|
602
|
-
title: p.title.trim(),
|
|
603
|
-
detail: p.detail?.trim() || void 0
|
|
604
|
-
})).filter((p) => p.title);
|
|
605
|
-
db.prepare("INSERT INTO plans (id, workspace_id, owner, name, phases) VALUES (?, ?, ?, ?, ?)").run(id, lead.workspace_id, owner, name.trim(), JSON.stringify(clean));
|
|
606
|
-
changed(lead.workspace_id);
|
|
607
|
-
return planView(get("SELECT * FROM plans WHERE id = ?", id));
|
|
608
|
-
}
|
|
609
|
-
/** A line of what the lead is doing, over its plan's phases. */
|
|
610
|
-
function logPlan(owner, text) {
|
|
611
|
-
const plan = openPlan(owner);
|
|
612
|
-
if (!plan) throw httpError(409, "no plan to log to: start one with `work plan new \"<name>\"`");
|
|
613
|
-
db.prepare("INSERT INTO plan_log (plan_id, text) VALUES (?, ?)").run(plan.id, text.trim().slice(0, 300));
|
|
614
|
-
db.prepare(`DELETE FROM plan_log WHERE plan_id = ? AND id NOT IN
|
|
615
|
-
(SELECT id FROM plan_log WHERE plan_id = ? ORDER BY id DESC LIMIT ${MAX_LOG})`).run(plan.id, plan.id);
|
|
616
|
-
changed(plan.workspace_id);
|
|
617
|
-
}
|
|
618
|
-
function finishPlan(owner) {
|
|
619
|
-
const plan = openPlan(owner);
|
|
620
|
-
if (!plan) throw httpError(409, "no plan under way");
|
|
621
|
-
db.prepare("UPDATE plans SET done_at = ? WHERE id = ?").run(now(), plan.id);
|
|
622
|
-
changed(plan.workspace_id);
|
|
623
|
-
}
|
|
624
604
|
function memberStatus(m, alive) {
|
|
625
605
|
if (m.state !== "running") return m.state;
|
|
626
606
|
if (booting.has(m.id) || !m.session_id) return "starting";
|
|
@@ -664,7 +644,6 @@ function groupView(g, alive = null) {
|
|
|
664
644
|
return {
|
|
665
645
|
id: g.id,
|
|
666
646
|
title: g.title,
|
|
667
|
-
phase: g.phase,
|
|
668
647
|
parallel: g.parallel,
|
|
669
648
|
fanIn: !!g.fan_in,
|
|
670
649
|
closeDone: !!g.close_done,
|
|
@@ -674,36 +653,16 @@ function groupView(g, alive = null) {
|
|
|
674
653
|
members
|
|
675
654
|
};
|
|
676
655
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
try {
|
|
680
|
-
phases = JSON.parse(p.phases);
|
|
681
|
-
} catch {}
|
|
682
|
-
return {
|
|
683
|
-
id: p.id,
|
|
684
|
-
name: p.name,
|
|
685
|
-
phases,
|
|
686
|
-
log: all("SELECT text, at FROM plan_log WHERE plan_id = ? ORDER BY id DESC LIMIT 5", p.id).reverse(),
|
|
687
|
-
done: !!p.done_at,
|
|
688
|
-
createdAt: p.created_at
|
|
689
|
-
};
|
|
690
|
-
}
|
|
691
|
-
/** Every lead's team in a workspace: its plan (the open one, else its
|
|
692
|
-
* last) and its groups. */
|
|
656
|
+
/** Every lead's team in a workspace: its groups. (Its plan is its own
|
|
657
|
+
* todo list, on its session row.) */
|
|
693
658
|
async function teamsOf(workspaceId) {
|
|
694
659
|
const panes = await listPanesWithin(2e3);
|
|
695
660
|
const alive = panes ? new Set(panes.flatMap((p) => p.id ? [p.id] : [])) : null;
|
|
696
661
|
const groups = all("SELECT * FROM session_groups WHERE workspace_id = ? ORDER BY created_at", workspaceId);
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
return {
|
|
702
|
-
owner,
|
|
703
|
-
plan: plan ? planView(plan) : null,
|
|
704
|
-
groups: groups.filter((g) => g.owner === owner).map((g) => groupView(g, alive))
|
|
705
|
-
};
|
|
706
|
-
});
|
|
662
|
+
return [...new Set(groups.map((g) => g.owner))].map((owner) => ({
|
|
663
|
+
owner,
|
|
664
|
+
groups: groups.filter((g) => g.owner === owner).map((g) => groupView(g, alive))
|
|
665
|
+
}));
|
|
707
666
|
}
|
|
708
667
|
/** The groups `owner` runs, for `work session team`. */
|
|
709
668
|
async function teamOf(owner) {
|
|
@@ -711,7 +670,6 @@ async function teamOf(owner) {
|
|
|
711
670
|
if (!s?.workspace_id) throw httpError(404, `no session ${owner}`);
|
|
712
671
|
return (await teamsOf(s.workspace_id)).find((t) => t.owner === owner) ?? {
|
|
713
672
|
owner,
|
|
714
|
-
plan: null,
|
|
715
673
|
groups: []
|
|
716
674
|
};
|
|
717
675
|
}
|
|
@@ -784,4 +742,4 @@ function startTeam() {
|
|
|
784
742
|
kickPool();
|
|
785
743
|
}
|
|
786
744
|
//#endregion
|
|
787
|
-
export {
|
|
745
|
+
export { kickPool as a, skipMember as c, teamsOf as d, messageStates as f, takeReplies as g, startMessages as h, createGroup as i, startTeam as l, sessionGone as m, closeDone as n, memberWorkspace as o, sendMessage as p, closeFinished as r, retryMember as s, clearGroup as t, teamOf as u };
|