@dylanpiercey/work 0.2.19 → 0.2.20
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 +3 -1
- package/bin/cli/plan.mjs +85 -0
- package/bin/cli/session.mjs +267 -31
- package/bin/cli/topic.mjs +63 -40
- package/dist/_BHlbSSAl.js +182 -0
- package/dist/_C9c_BxRk.js +787 -0
- package/dist/_DrEeyoLF.js +2 -0
- package/dist/_E0fWorAK.js +2 -0
- package/dist/{_CsokArOR.js → _Hb3LeA5Q.js} +218 -58
- package/dist/index.mjs +3456 -2299
- package/dist/public/assets/_-TUXzZ5j.js +1 -0
- package/dist/public/assets/_-TUXzZ5j.js.br +0 -0
- package/dist/public/assets/_0BO-2AH8.js +1 -0
- package/dist/public/assets/_1MkpPhCv.js +1 -0
- package/dist/public/assets/_2Czzn44S.js +2 -0
- package/dist/public/assets/_2Czzn44S.js.br +0 -0
- package/dist/public/assets/{_B9qGqvit.js → _2M3NjHcy.js} +1 -1
- package/dist/public/assets/_3J3NCTfA.js +1 -0
- package/dist/public/assets/_3yfaou9w.js +1 -0
- package/dist/public/assets/{_DSeQngGR.js → _6fcPfRKt.js} +1 -1
- package/dist/public/assets/_6fcPfRKt.js.br +0 -0
- package/dist/public/assets/_9kzNcuvf.js +1 -0
- package/dist/public/assets/_AbxeWvtk.js +1 -0
- package/dist/public/assets/{_D__ojGam.js → _B1AH7m_8.js} +1 -1
- package/dist/public/assets/_B1AH7m_8.js.br +0 -0
- package/dist/public/assets/{_BAWjkhA8.js → _B2zs9J9f.js} +1 -1
- package/dist/public/assets/_B2zs9J9f.js.br +0 -0
- package/dist/public/assets/_B4Tl4g-I.js +1 -0
- package/dist/public/assets/_B6GPBTnX.js +1 -0
- package/dist/public/assets/{_qxffRpjc.js → _B7u83Fqc.js} +1 -1
- package/dist/public/assets/_B89z0EK7.js +1 -0
- package/dist/public/assets/{_C6Yt6h_R.js → _BCYHTWZd.js} +1 -1
- package/dist/public/assets/_BCYHTWZd.js.br +0 -0
- package/dist/public/assets/_BD01_px3.js +1 -0
- package/dist/public/assets/_BDt0PKxz.js +1 -0
- package/dist/public/assets/{_0sTkxfPx.js → _BFD3zDfn.js} +1 -1
- package/dist/public/assets/_BFD3zDfn.js.br +0 -0
- package/dist/public/assets/{_CBEKHwUV.js → _BH5TfgM7.js} +1 -1
- package/dist/public/assets/_BH5TfgM7.js.br +0 -0
- package/dist/public/assets/_BHEzkZBl.js +1 -0
- package/dist/public/assets/{_CB52LkYt.js → _BHxaJLxf.js} +1 -1
- package/dist/public/assets/_BHxaJLxf.js.br +0 -0
- package/dist/public/assets/{_D8ac72_O.js → _BJc28pt5.js} +1 -1
- package/dist/public/assets/_BJc28pt5.js.br +0 -0
- package/dist/public/assets/{_BBCzcNZY.js → _BJpqJK9r.js} +1 -1
- package/dist/public/assets/_BJpqJK9r.js.br +0 -0
- package/dist/public/assets/_BKSNShOz.js +1 -0
- package/dist/public/assets/{_DTNiWZFr.js → _BKcc-iTi.js} +1 -1
- package/dist/public/assets/_BKcc-iTi.js.br +0 -0
- package/dist/public/assets/{_CG383oZY.js → _BMXIDoUj.js} +1 -1
- package/dist/public/assets/_BMXIDoUj.js.br +0 -0
- package/dist/public/assets/{_CEC5O89D.js → _BQMwlV-0.js} +1 -1
- package/dist/public/assets/_BQMwlV-0.js.br +0 -0
- package/dist/public/assets/_BUjgl28E.js +1 -0
- package/dist/public/assets/_BYUg95ML.js +1 -0
- package/dist/public/assets/{_CspPbDoP.js → _B_LxZatx.js} +1 -1
- package/dist/public/assets/_B_LxZatx.js.br +0 -0
- package/dist/public/assets/{_CfP0f0PU.js → _BeQUut65.js} +1 -1
- package/dist/public/assets/_BeQUut65.js.br +0 -0
- package/dist/public/assets/{_DJBR8Qwq.js → _Bf7EsJwj.js} +1 -1
- package/dist/public/assets/_Bf7EsJwj.js.br +0 -0
- package/dist/public/assets/_BfVmvTXe.js +1 -0
- package/dist/public/assets/_BfqDnPV7.js +1 -0
- package/dist/public/assets/{_BdSsUhCi.js → _Bfuu6mAX.js} +1 -1
- package/dist/public/assets/_Bfuu6mAX.js.br +0 -0
- package/dist/public/assets/{_CPaMvBMG.js → _BgBUZElB.js} +1 -1
- package/dist/public/assets/_BgBUZElB.js.br +0 -0
- package/dist/public/assets/{_CToqok6Q.js → _Bgbj7Vl5.js} +1 -1
- package/dist/public/assets/_Bgbj7Vl5.js.br +0 -0
- package/dist/public/assets/{_J3wdy6bJ.js → _BhrCWDl2.js} +1 -1
- package/dist/public/assets/_BhrCWDl2.js.br +0 -0
- package/dist/public/assets/_Bjsevhjr.js +1 -0
- package/dist/public/assets/_BjzBYn47.js +1 -0
- package/dist/public/assets/_BmyB1F-C.js +1 -0
- package/dist/public/assets/{_bDI-pCZR.js → _BpGvpggY.js} +1 -1
- package/dist/public/assets/_BpGvpggY.js.br +0 -0
- package/dist/public/assets/_BpjknrsF.js +1 -0
- package/dist/public/assets/{_BClUYs-k.js → _BpunB-I_.js} +1 -1
- package/dist/public/assets/_BpunB-I_.js.br +0 -0
- package/dist/public/assets/{_DsehEuMD.js → _Bqgtb-fc.js} +1 -1
- package/dist/public/assets/_Bqgtb-fc.js.br +0 -0
- package/dist/public/assets/_BtkDWVh9.js +1 -0
- package/dist/public/assets/{_zN8SypHW.js → _BvEJgNLp.js} +1 -1
- package/dist/public/assets/_BvEJgNLp.js.br +0 -0
- package/dist/public/assets/_BvYgAZl3.js +1 -0
- package/dist/public/assets/_C0Bfz_Is.js +1 -0
- package/dist/public/assets/_C1Aa6bJ9.js +1 -0
- package/dist/public/assets/_C3i3LRNx.js +1 -0
- package/dist/public/assets/_C4RHKQLq.js +1 -0
- package/dist/public/assets/{_DN7pTn2g.js → _C5Wk6L8u.js} +1 -1
- package/dist/public/assets/_C5Wk6L8u.js.br +0 -0
- package/dist/public/assets/_C7N1s7w_.js +1 -0
- package/dist/public/assets/_C7N1s7w_.js.br +0 -0
- package/dist/public/assets/_C96lrIeU.js +1 -0
- package/dist/public/assets/{_CPj_VL66.js → _CAhkFk0k.js} +1 -1
- package/dist/public/assets/_CAhkFk0k.js.br +0 -0
- package/dist/public/assets/{_bHL-NcWS.js → _CCmHKlXX.js} +1 -1
- package/dist/public/assets/_CCmHKlXX.js.br +0 -0
- package/dist/public/assets/{_DpbHp8yR.js → _CEY_n10t.js} +1 -1
- package/dist/public/assets/_CEY_n10t.js.br +0 -0
- package/dist/public/assets/_CEejNMib.js +1 -0
- package/dist/public/assets/_CFo4GZR9.js +1 -0
- package/dist/public/assets/{_Cmtl59QM.js → _CGH2Busx.js} +1 -1
- package/dist/public/assets/_CGH2Busx.js.br +0 -0
- package/dist/public/assets/{_DuyCZnNC.js → _CHwp4prQ.js} +1 -1
- package/dist/public/assets/_CHwp4prQ.js.br +0 -0
- package/dist/public/assets/{_C_D5TPb7.js → _CN7Wz2eA.js} +1 -1
- package/dist/public/assets/_CN7Wz2eA.js.br +0 -0
- package/dist/public/assets/_CP58TjsV.js +1 -0
- package/dist/public/assets/_CP58TjsV.js.br +0 -0
- package/dist/public/assets/_CPruMiA4.js +1 -0
- package/dist/public/assets/_CQEZuOE_.js +1 -0
- package/dist/public/assets/_CSMoDPwM.js +16 -0
- package/dist/public/assets/_CSMoDPwM.js.br +0 -0
- package/dist/public/assets/{_briyaWgK.js → _CVEabnQh.js} +1 -1
- package/dist/public/assets/_CVEabnQh.js.br +0 -0
- package/dist/public/assets/{_J1v2clxU.js → _CWTelCGM.js} +1 -1
- package/dist/public/assets/_CWTelCGM.js.br +0 -0
- package/dist/public/assets/_CXpplsaj.js +1 -0
- package/dist/public/assets/{_BhecGD7y.js → _CY0xLX0Y.js} +1 -1
- package/dist/public/assets/_CY0xLX0Y.js.br +0 -0
- package/dist/public/assets/{_dVHSDgPC.js → _CZNztOn6.js} +1 -1
- package/dist/public/assets/_CZNztOn6.js.br +0 -0
- package/dist/public/assets/{_Dtx52FYB.js → _Cabq459u.js} +1 -1
- package/dist/public/assets/_Cb593OOX.js +1 -0
- package/dist/public/assets/_Cbis2WSl.js +1 -0
- package/dist/public/assets/{_T5HFHZgl.js → _CeZa36O-.js} +1 -1
- package/dist/public/assets/_CeZa36O-.js.br +0 -0
- package/dist/public/assets/{_CCoTlnvb.js → _ChTMXnIu.js} +1 -1
- package/dist/public/assets/_ChTMXnIu.js.br +0 -0
- package/dist/public/assets/_Cig63HLr.js +1 -0
- package/dist/public/assets/_CjkPh72t.js +1 -0
- package/dist/public/assets/_Cm6nigjK.js +1 -0
- package/dist/public/assets/_CnAEQUMb.js +1 -0
- package/dist/public/assets/{_uCKs5N6Q.js → _Coroy2lI.js} +1 -1
- package/dist/public/assets/_Coroy2lI.js.br +0 -0
- package/dist/public/assets/_CpAeLnqO.js +1 -0
- package/dist/public/assets/_CpAeLnqO.js.br +0 -0
- package/dist/public/assets/_Cpkby1iI.js +1 -0
- package/dist/public/assets/_Cs0Q8LaN.js +1 -0
- package/dist/public/assets/_Ct2pbvTU.js +1 -0
- package/dist/public/assets/{_DWb03VKf.js → _CtC83UyG.js} +1 -1
- package/dist/public/assets/_CtC83UyG.js.br +0 -0
- package/dist/public/assets/_CtVSUTWd.js +1 -0
- package/dist/public/assets/_Ctf0pL3c.js +1 -0
- package/dist/public/assets/_CtvMc-Fn.js +1 -0
- package/dist/public/assets/_Cv7TctYK.js +1 -0
- package/dist/public/assets/_Cv7TctYK.js.br +0 -0
- package/dist/public/assets/{_DmoI4cIl.js → _CvKDzuxc.js} +1 -1
- package/dist/public/assets/_CvKDzuxc.js.br +0 -0
- package/dist/public/assets/_CvxhsaLv.js +1 -0
- package/dist/public/assets/_CwxTh04m.js +1 -0
- package/dist/public/assets/_CyMRBJfa.js +1 -0
- package/dist/public/assets/{_CdtjIoUd.js → _D-wwbDX7.js} +1 -1
- package/dist/public/assets/_D-wwbDX7.js.br +0 -0
- package/dist/public/assets/_D02jmNge.js +1 -0
- package/dist/public/assets/{_C1RigMYD.js → _D0gWUr-E.js} +1 -1
- package/dist/public/assets/_D0gWUr-E.js.br +0 -0
- package/dist/public/assets/_D2wtQpHN.js +1 -0
- package/dist/public/assets/_D2wtQpHN.js.br +0 -0
- package/dist/public/assets/_D3uCXh8z.js +2 -0
- package/dist/public/assets/_D3uCXh8z.js.br +0 -0
- package/dist/public/assets/_D5GW0gg0.js +1 -0
- package/dist/public/assets/_D5GW0gg0.js.br +0 -0
- package/dist/public/assets/{_BmpOmFbo.js → _D6YVA8vA.js} +1 -1
- package/dist/public/assets/_D6YVA8vA.js.br +0 -0
- package/dist/public/assets/_D85prZ-z.js +1 -0
- package/dist/public/assets/_D8QlsPTv.js +1 -0
- package/dist/public/assets/_D8QlsPTv.js.br +0 -0
- package/dist/public/assets/_D8rDqOqJ.js +1 -0
- package/dist/public/assets/{_1M3oZPSf.js → _DAcmaIgY.js} +1 -1
- package/dist/public/assets/_DAcmaIgY.js.br +0 -0
- package/dist/public/assets/_DBlahxfT.js +1 -0
- package/dist/public/assets/_DCPGqAo6.js +1 -0
- package/dist/public/assets/{_MHZgY1AQ.js → _DDBuDrkA.js} +1 -1
- package/dist/public/assets/_DDBuDrkA.js.br +0 -0
- package/dist/public/assets/_DDfwtidv.js +1 -0
- package/dist/public/assets/_DDfwtidv.js.br +0 -0
- package/dist/public/assets/_DEqzNO7a.js +1 -0
- package/dist/public/assets/_DEyhBnnd.js +1 -0
- package/dist/public/assets/{_DYUFCi44.js → _DG1LpTGX.js} +1 -1
- package/dist/public/assets/_DG1LpTGX.js.br +0 -0
- package/dist/public/assets/_DJK-MioE.js +1 -0
- package/dist/public/assets/{_DDcVFyaQ.js → _DLCgfhNS.js} +1 -1
- package/dist/public/assets/_DLCgfhNS.js.br +0 -0
- package/dist/public/assets/_DLYvRpNz.js +6 -0
- package/dist/public/assets/_DLYvRpNz.js.br +0 -0
- package/dist/public/assets/_DPzjUc1B.js +1 -0
- package/dist/public/assets/_DRDW7RgT.js +1 -0
- package/dist/public/assets/{_CHmEM8Sm.js → _DSoJ6ck3.js} +1 -1
- package/dist/public/assets/_DSoJ6ck3.js.br +0 -0
- package/dist/public/assets/{_C3fslTAD.js → _DW92UwGh.js} +1 -1
- package/dist/public/assets/_DW92UwGh.js.br +0 -0
- package/dist/public/assets/{_Bcc0Xs64.js → _DYIjiPYY.js} +1 -1
- package/dist/public/assets/_DYIjiPYY.js.br +0 -0
- package/dist/public/assets/_DZeeRtLs.js +1 -0
- package/dist/public/assets/{_XsB9KmcW.js → _DZzucnmx.js} +1 -1
- package/dist/public/assets/_DZzucnmx.js.br +0 -0
- package/dist/public/assets/{_EcMqP1xI.js → _D_AjKzkm.js} +1 -1
- package/dist/public/assets/_D_AjKzkm.js.br +0 -0
- package/dist/public/assets/{_DYhs8iJg.js → _DdVG8Rbg.js} +116 -116
- package/dist/public/assets/_DdVG8Rbg.js.br +0 -0
- package/dist/public/assets/{_BH9BIky6.js → _DdcPtDZz.js} +1 -1
- package/dist/public/assets/_DdcPtDZz.js.br +0 -0
- package/dist/public/assets/{_-7Amnss4.js → _De_msLFQ.js} +1 -1
- package/dist/public/assets/_De_msLFQ.js.br +0 -0
- package/dist/public/assets/_DeiCZJcm.js +1 -0
- package/dist/public/assets/_DeiCZJcm.js.br +0 -0
- package/dist/public/assets/{_CL8DzBla.js → _DfNM5GDo.js} +1 -1
- package/dist/public/assets/_DfNM5GDo.js.br +0 -0
- package/dist/public/assets/{_C7Y4xApK.js → _Dg6OsRrR.js} +1 -1
- package/dist/public/assets/_Dg6OsRrR.js.br +0 -0
- package/dist/public/assets/_DgrmX7cI.js +1 -0
- package/dist/public/assets/_DiPK_ps-.js +1 -0
- package/dist/public/assets/{_DbT6uo7W.js → _Dow17jzJ.js} +1 -1
- package/dist/public/assets/_Dow17jzJ.js.br +0 -0
- package/dist/public/assets/{_BtedGrGs.js → _DpSZYTyI.js} +1 -1
- package/dist/public/assets/_DpSZYTyI.js.br +0 -0
- package/dist/public/assets/_DpXO9fPK.js +1 -0
- package/dist/public/assets/_DpXO9fPK.js.br +0 -0
- package/dist/public/assets/{_DzNFlI0M.js → _DqiBcDpF.js} +1 -1
- package/dist/public/assets/_DqiBcDpF.js.br +0 -0
- package/dist/public/assets/_DqkJjiCU.js +1 -0
- package/dist/public/assets/{_ahCaQNeo.js → _Draa__tn.js} +1 -1
- package/dist/public/assets/_Draa__tn.js.br +0 -0
- package/dist/public/assets/_Drs3T7dh.js +1 -0
- package/dist/public/assets/_Drs3T7dh.js.br +0 -0
- package/dist/public/assets/_DtBGe4AJ.js +1 -0
- package/dist/public/assets/{_Dw1P6xZJ.js → _DxSnjCPi.js} +1 -1
- package/dist/public/assets/_DxSnjCPi.js.br +0 -0
- package/dist/public/assets/{_B9I2AEux.js → _DyEhTpVE.js} +1 -1
- package/dist/public/assets/_DyEhTpVE.js.br +0 -0
- package/dist/public/assets/{_D3IviZbJ.js → _DyFcXAXE.js} +1 -1
- package/dist/public/assets/_DyFcXAXE.js.br +0 -0
- package/dist/public/assets/_FPItrlZz.js +1 -0
- package/dist/public/assets/{_UZAFx6D8.js → _HGP7qpI4.js} +1 -1
- package/dist/public/assets/_HGP7qpI4.js.br +0 -0
- package/dist/public/assets/{_DCrPsldZ.js → _L-b7Vsug.js} +1 -1
- package/dist/public/assets/_L-b7Vsug.js.br +0 -0
- package/dist/public/assets/{_Cl7LTITm.js → _LWpc-K1g.js} +1 -1
- package/dist/public/assets/_LWpc-K1g.js.br +0 -0
- package/dist/public/assets/{_C-DhXiEm.js → _MwkLbzHQ.js} +1 -1
- package/dist/public/assets/_MwkLbzHQ.js.br +0 -0
- package/dist/public/assets/_O4DIriLZ.js +1 -0
- package/dist/public/assets/{_YoXk_8Bl.js → _T0Ktx7Km.js} +1 -1
- package/dist/public/assets/_T0Ktx7Km.js.br +0 -0
- package/dist/public/assets/_T6O8KX0b.js +1 -0
- package/dist/public/assets/_TWZgGi12.js +1 -0
- package/dist/public/assets/{_C-BYkx5h.js → _UBgRR4E9.js} +1 -1
- package/dist/public/assets/_UBgRR4E9.js.br +0 -0
- package/dist/public/assets/_X3T0JcUM.js +87 -0
- package/dist/public/assets/_X3T0JcUM.js.br +0 -0
- package/dist/public/assets/_YtP2gTmD.js +1 -0
- package/dist/public/assets/{_BQW1kIop.js → __1UtPhZb.js} +1 -1
- package/dist/public/assets/__1UtPhZb.js.br +0 -0
- package/dist/public/assets/__WDcLOp3.js +1 -0
- package/dist/public/assets/{_CIfCdAzS.js → __cyNMcUU.js} +1 -1
- package/dist/public/assets/{_BPDSQUbl.js → _csFWQzWs.js} +1 -1
- package/dist/public/assets/_csFWQzWs.js.br +0 -0
- package/dist/public/assets/_eURsGF_D.js +1 -0
- package/dist/public/assets/_fEPizk9T.js +1 -0
- package/dist/public/assets/{_B9xuaMHt.js → _hC5RUmrf.js} +1 -1
- package/dist/public/assets/_hC5RUmrf.js.br +0 -0
- package/dist/public/assets/_hfgYVPfe.js +1 -0
- package/dist/public/assets/_i51v5tw8.js +1 -0
- package/dist/public/assets/{_CuglAToi.js → _k1uZxEJ-.js} +1 -1
- package/dist/public/assets/_k1uZxEJ-.js.br +0 -0
- package/dist/public/assets/_l4nNKr9o.js +1 -0
- package/dist/public/assets/{_D7qWWxdI.js → _lA6BOkV1.js} +1 -1
- package/dist/public/assets/_lA6BOkV1.js.br +0 -0
- package/dist/public/assets/_qyrPXpIj.js +1 -0
- package/dist/public/assets/{_Bt03HU8S.js → _sLUOjXIk.js} +1 -1
- package/dist/public/assets/{_G1BLeMns.js → _sjeWoc5X.js} +1 -1
- package/dist/public/assets/_sjeWoc5X.js.br +0 -0
- package/dist/public/assets/_tByKwKUc.js +1 -0
- package/dist/public/assets/{_G8KNSVdM.js → _tFVcmmKI.js} +1 -1
- package/dist/public/assets/_tFVcmmKI.js.br +0 -0
- package/dist/public/assets/{_Ctjz3BD9.js → _txvO7pXr.js} +1 -1
- package/dist/public/assets/_txvO7pXr.js.br +0 -0
- package/dist/public/assets/_um7Vy7NX.js +1 -0
- package/dist/public/assets/_veNUvOqP.js +1 -0
- package/dist/public/assets/{_DSCqWPO0.js → _w8hTnp0H.js} +1 -1
- package/dist/public/assets/_w8hTnp0H.js.br +0 -0
- package/dist/public/assets/_wGWNa6Sp.js +1 -0
- package/dist/public/assets/_wxbEv1JK.js +1 -0
- package/dist/public/assets/files-view-BOE5HTrF.js +2 -0
- package/dist/public/assets/manage-workspace-ClwsrQ4a.js +2 -0
- package/dist/public/assets/new-CJ6ZElay.js +1 -0
- package/dist/public/assets/new-workspace-DWSBO4Vx.js +2 -0
- package/dist/public/assets/review-view-DffAZHOz.js +2 -0
- package/dist/public/assets/settings-CJ6ZElay.js +1 -0
- package/dist/public/assets/settings-page-CYL_T3Vf.js +2 -0
- package/dist/public/assets/styles-taHUfRpm.css +1 -0
- package/dist/public/assets/styles-taHUfRpm.css.br +0 -0
- package/dist/public/assets/w-CJ6ZElay.js +1 -0
- package/dist/public/assets/w._-CJ6ZElay.js +1 -0
- package/dist/public/assets/w._-ChCIRlhY.js +1 -0
- package/dist/public/assets/w._-WsR2-skZ.js +1 -0
- package/package.json +1 -1
- package/dist/_L2HNAA_8.js +0 -2
- package/dist/__TCdgPY5.js +0 -173
- package/dist/public/assets/_-7Amnss4.js.br +0 -0
- package/dist/public/assets/_0XXNUttq.js +0 -1
- package/dist/public/assets/_0sTkxfPx.js.br +0 -0
- package/dist/public/assets/_0zzYbK0A.js +0 -1
- package/dist/public/assets/_1M3oZPSf.js.br +0 -0
- package/dist/public/assets/_2O5HnHht.js +0 -1
- package/dist/public/assets/_7WlUaJPH.js +0 -1
- package/dist/public/assets/_8Tr7ByPg.js +0 -1
- package/dist/public/assets/_9AXMmQSO.js +0 -1
- package/dist/public/assets/_B1VqbV-X.js +0 -1
- package/dist/public/assets/_B9I2AEux.js.br +0 -0
- package/dist/public/assets/_B9xuaMHt.js.br +0 -0
- package/dist/public/assets/_BAWjkhA8.js.br +0 -0
- package/dist/public/assets/_BBCzcNZY.js.br +0 -0
- package/dist/public/assets/_BBW2szHh.js +0 -1
- package/dist/public/assets/_BCP2Njnu.js +0 -1
- package/dist/public/assets/_BClUYs-k.js.br +0 -0
- package/dist/public/assets/_BDdZkZRc.js +0 -1
- package/dist/public/assets/_BDdZkZRc.js.br +0 -0
- package/dist/public/assets/_BEDmGSgS.js +0 -1
- package/dist/public/assets/_BEDmGSgS.js.br +0 -0
- package/dist/public/assets/_BH9BIky6.js.br +0 -0
- package/dist/public/assets/_BLdi8Ee5.js +0 -1
- package/dist/public/assets/_BPDSQUbl.js.br +0 -0
- package/dist/public/assets/_BQW1kIop.js.br +0 -0
- package/dist/public/assets/_BQeoUfFw.js +0 -1
- package/dist/public/assets/_BRzroLbh.js +0 -1
- package/dist/public/assets/_BSXsTYSe.js +0 -1
- package/dist/public/assets/_BTXDT3Na.js +0 -1
- package/dist/public/assets/_BXm4xeFI.js +0 -1
- package/dist/public/assets/_BY8UeogK.js +0 -1
- package/dist/public/assets/_BYpyhp64.js +0 -1
- package/dist/public/assets/_BYpyhp64.js.br +0 -0
- package/dist/public/assets/_B_Kz7LnY.js +0 -1
- package/dist/public/assets/_Bcc0Xs64.js.br +0 -0
- package/dist/public/assets/_BdSsUhCi.js.br +0 -0
- package/dist/public/assets/_BdaWssEH.js +0 -1
- package/dist/public/assets/_BhecGD7y.js.br +0 -0
- package/dist/public/assets/_Bj9dpPhN.js +0 -1
- package/dist/public/assets/_BjZqS7za.js +0 -1
- package/dist/public/assets/_BjZqS7za.js.br +0 -0
- package/dist/public/assets/_BkSUiyHK.js +0 -1
- package/dist/public/assets/_BlshXH2Y.js +0 -16
- package/dist/public/assets/_BlshXH2Y.js.br +0 -0
- package/dist/public/assets/_BmX-VP7w.js +0 -1
- package/dist/public/assets/_BmpOmFbo.js.br +0 -0
- package/dist/public/assets/_Bo6YntUl.js +0 -1
- package/dist/public/assets/_BprZx4vg.js +0 -2
- package/dist/public/assets/_BprZx4vg.js.br +0 -0
- package/dist/public/assets/_Bqm7OnIV.js +0 -1
- package/dist/public/assets/_BquBGUNK.js +0 -1
- package/dist/public/assets/_BquBGUNK.js.br +0 -0
- package/dist/public/assets/_BrB66aRZ.js +0 -1
- package/dist/public/assets/_BtedGrGs.js.br +0 -0
- package/dist/public/assets/_C-BYkx5h.js.br +0 -0
- package/dist/public/assets/_C-DhXiEm.js.br +0 -0
- package/dist/public/assets/_C-NBFnST.js +0 -1
- package/dist/public/assets/_C1RigMYD.js.br +0 -0
- package/dist/public/assets/_C2vRS-ES.js +0 -1
- package/dist/public/assets/_C3fslTAD.js.br +0 -0
- package/dist/public/assets/_C4EYjWGn.js +0 -1
- package/dist/public/assets/_C4EYjWGn.js.br +0 -0
- package/dist/public/assets/_C6Yt6h_R.js.br +0 -0
- package/dist/public/assets/_C7Y4xApK.js.br +0 -0
- package/dist/public/assets/_CB52LkYt.js.br +0 -0
- package/dist/public/assets/_CBEKHwUV.js.br +0 -0
- package/dist/public/assets/_CBSLBYQF.js +0 -1
- package/dist/public/assets/_CBgzBB_k.js +0 -1
- package/dist/public/assets/_CBgzBB_k.js.br +0 -0
- package/dist/public/assets/_CCoTlnvb.js.br +0 -0
- package/dist/public/assets/_CD26To-f.js +0 -1
- package/dist/public/assets/_CDyWgQ0v.js +0 -6
- package/dist/public/assets/_CDyWgQ0v.js.br +0 -0
- package/dist/public/assets/_CEC5O89D.js.br +0 -0
- package/dist/public/assets/_CF2kEAU7.js +0 -1
- package/dist/public/assets/_CFURqbmO.js +0 -1
- package/dist/public/assets/_CG383oZY.js.br +0 -0
- package/dist/public/assets/_CHNJosg3.js +0 -1
- package/dist/public/assets/_CHmEM8Sm.js.br +0 -0
- package/dist/public/assets/_CKyzH0fl.js +0 -1
- package/dist/public/assets/_CL8DzBla.js.br +0 -0
- package/dist/public/assets/_CNYS94C5.js +0 -1
- package/dist/public/assets/_CNhypHJN.js +0 -1
- package/dist/public/assets/_CO-FkxlA.js +0 -1
- package/dist/public/assets/_COiGBSpO.js +0 -1
- package/dist/public/assets/_COvolvRQ.js +0 -1
- package/dist/public/assets/_CPaMvBMG.js.br +0 -0
- package/dist/public/assets/_CPj_VL66.js.br +0 -0
- package/dist/public/assets/_CQJC8Vx4.js +0 -1
- package/dist/public/assets/_CRHNlzBC.js +0 -1
- package/dist/public/assets/_CToqok6Q.js.br +0 -0
- package/dist/public/assets/_CUFKkl0B.js +0 -1
- package/dist/public/assets/_CZsOUa-q.js +0 -1
- package/dist/public/assets/_C_D5TPb7.js.br +0 -0
- package/dist/public/assets/_CdHI48v6.js +0 -1
- package/dist/public/assets/_CdpmkkzR.js +0 -1
- package/dist/public/assets/_CdpmkkzR.js.br +0 -0
- package/dist/public/assets/_CdtjIoUd.js.br +0 -0
- package/dist/public/assets/_Ce9Tv01m.js +0 -1
- package/dist/public/assets/_CeC7Lv10.js +0 -1
- package/dist/public/assets/_CfP0f0PU.js.br +0 -0
- package/dist/public/assets/_Cg7DH3xk.js +0 -1
- package/dist/public/assets/_Cg7DH3xk.js.br +0 -0
- package/dist/public/assets/_CikNq0z8.js +0 -1
- package/dist/public/assets/_Cl7LTITm.js.br +0 -0
- package/dist/public/assets/_Cmtl59QM.js.br +0 -0
- package/dist/public/assets/_CshYq_Dp.js +0 -1
- package/dist/public/assets/_CspPbDoP.js.br +0 -0
- package/dist/public/assets/_Ctjz3BD9.js.br +0 -0
- package/dist/public/assets/_CuglAToi.js.br +0 -0
- package/dist/public/assets/_CwSoAVRN.js +0 -1
- package/dist/public/assets/_D0XQV-Hm.js +0 -1
- package/dist/public/assets/_D36PnqCD.js +0 -1
- package/dist/public/assets/_D36PnqCD.js.br +0 -0
- package/dist/public/assets/_D3IviZbJ.js.br +0 -0
- package/dist/public/assets/_D6rgUB9O.js +0 -1
- package/dist/public/assets/_D7qWWxdI.js.br +0 -0
- package/dist/public/assets/_D8ac72_O.js.br +0 -0
- package/dist/public/assets/_D9WWxrQR.js +0 -1
- package/dist/public/assets/_D9hI5dSA.js +0 -1
- package/dist/public/assets/_DCrPsldZ.js.br +0 -0
- package/dist/public/assets/_DDcVFyaQ.js.br +0 -0
- package/dist/public/assets/_DDhkKo8Q.js +0 -1
- package/dist/public/assets/_DJBR8Qwq.js.br +0 -0
- package/dist/public/assets/_DLpa6VYT.js +0 -1
- package/dist/public/assets/_DMqe6rR-.js +0 -1
- package/dist/public/assets/_DN7pTn2g.js.br +0 -0
- package/dist/public/assets/_DP8UuFuJ.js +0 -1
- package/dist/public/assets/_DQedUaqM.js +0 -1
- package/dist/public/assets/_DSCqWPO0.js.br +0 -0
- package/dist/public/assets/_DSeQngGR.js.br +0 -0
- package/dist/public/assets/_DTNiWZFr.js.br +0 -0
- package/dist/public/assets/_DThlusXY.js +0 -1
- package/dist/public/assets/_DUK16H19.js +0 -1
- package/dist/public/assets/_DUZ13t3U.js +0 -1
- package/dist/public/assets/_DWb03VKf.js.br +0 -0
- package/dist/public/assets/_DWsyhfgn.js +0 -1
- package/dist/public/assets/_DXuzYhW6.js +0 -1
- package/dist/public/assets/_DXyOzA2b.js +0 -1
- package/dist/public/assets/_DYUFCi44.js.br +0 -0
- package/dist/public/assets/_DYhs8iJg.js.br +0 -0
- package/dist/public/assets/_D__ojGam.js.br +0 -0
- package/dist/public/assets/_DaFI_W5D.js +0 -1
- package/dist/public/assets/_DbT6uo7W.js.br +0 -0
- package/dist/public/assets/_DhnT0cCE.js +0 -1
- package/dist/public/assets/_Dm9OGn2q.js +0 -1
- package/dist/public/assets/_DmkeGFoM.js +0 -1
- package/dist/public/assets/_DmoI4cIl.js.br +0 -0
- package/dist/public/assets/_DpbHp8yR.js.br +0 -0
- package/dist/public/assets/_Dqz_HBE1.js +0 -1
- package/dist/public/assets/_DsehEuMD.js.br +0 -0
- package/dist/public/assets/_DuEyirL6.js +0 -1
- package/dist/public/assets/_DuuloSIi.js +0 -1
- package/dist/public/assets/_DuyCZnNC.js.br +0 -0
- package/dist/public/assets/_Dw1P6xZJ.js.br +0 -0
- package/dist/public/assets/_DzNFlI0M.js.br +0 -0
- package/dist/public/assets/_EcMqP1xI.js.br +0 -0
- package/dist/public/assets/_G1BLeMns.js.br +0 -0
- package/dist/public/assets/_G8KNSVdM.js.br +0 -0
- package/dist/public/assets/_J1v2clxU.js.br +0 -0
- package/dist/public/assets/_J3wdy6bJ.js.br +0 -0
- package/dist/public/assets/_MHZgY1AQ.js.br +0 -0
- package/dist/public/assets/_NHTZitq1.js +0 -2
- package/dist/public/assets/_NHTZitq1.js.br +0 -0
- package/dist/public/assets/_PsuNqRL9.js +0 -86
- package/dist/public/assets/_PsuNqRL9.js.br +0 -0
- package/dist/public/assets/_T5HFHZgl.js.br +0 -0
- package/dist/public/assets/_UZAFx6D8.js.br +0 -0
- package/dist/public/assets/_XA8_RQXF.js +0 -1
- package/dist/public/assets/_XsB9KmcW.js.br +0 -0
- package/dist/public/assets/_YoXk_8Bl.js.br +0 -0
- package/dist/public/assets/_YubCdy3Z.js +0 -1
- package/dist/public/assets/_ahCaQNeo.js.br +0 -0
- package/dist/public/assets/_bDI-pCZR.js.br +0 -0
- package/dist/public/assets/_bHL-NcWS.js.br +0 -0
- package/dist/public/assets/_bqRzDYc8.js +0 -1
- package/dist/public/assets/_briyaWgK.js.br +0 -0
- package/dist/public/assets/_dVHSDgPC.js.br +0 -0
- package/dist/public/assets/_gkZjZ9I4.js +0 -1
- package/dist/public/assets/_plyCYAnN.js +0 -1
- package/dist/public/assets/_q0Z44mWJ.js +0 -1
- package/dist/public/assets/_q0Z44mWJ.js.br +0 -0
- package/dist/public/assets/_qAsGEOt5.js +0 -1
- package/dist/public/assets/_qAsGEOt5.js.br +0 -0
- package/dist/public/assets/_uCKs5N6Q.js.br +0 -0
- package/dist/public/assets/_utWnC80Q.js +0 -1
- package/dist/public/assets/_utvzcBHT.js +0 -1
- package/dist/public/assets/_v8WbCPI8.js +0 -1
- package/dist/public/assets/_yK4b_Bl5.js +0 -1
- package/dist/public/assets/_yoQW4BY5.js +0 -1
- package/dist/public/assets/_zB6USXHX.js +0 -1
- package/dist/public/assets/_zN8SypHW.js.br +0 -0
- package/dist/public/assets/files-view-Fl0rU3Ns.js +0 -2
- package/dist/public/assets/manage-workspace-DggRcsXf.js +0 -2
- package/dist/public/assets/new-C7NxTJAT.js +0 -1
- package/dist/public/assets/new-workspace-C0pw5Iz1.js +0 -2
- package/dist/public/assets/review-view-C4YQ0J-X.js +0 -2
- package/dist/public/assets/settings-C7NxTJAT.js +0 -1
- package/dist/public/assets/settings-page-Cl_1tWCv.js +0 -2
- package/dist/public/assets/styles-Vcsj4CA7.css +0 -1
- package/dist/public/assets/styles-Vcsj4CA7.css.br +0 -0
- package/dist/public/assets/w-C7NxTJAT.js +0 -1
- package/dist/public/assets/w._-BbFH2lR-.js +0 -1
- package/dist/public/assets/w._-C7NxTJAT.js +0 -1
- package/dist/public/assets/w._-YIzLOiyZ.js +0 -1
|
@@ -500,6 +500,75 @@ var STEPS = [
|
|
|
500
500
|
|
|
501
501
|
CREATE INDEX session_messages_to ON session_messages(to_session);
|
|
502
502
|
CREATE INDEX session_messages_from ON session_messages(from_session);
|
|
503
|
+
`);
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
version: 5,
|
|
508
|
+
name: "session teams",
|
|
509
|
+
up(db) {
|
|
510
|
+
db.exec(`
|
|
511
|
+
ALTER TABLE sessions ADD COLUMN launch_dir TEXT;
|
|
512
|
+
ALTER TABLE sessions ADD COLUMN launch_mode TEXT;
|
|
513
|
+
ALTER TABLE sessions ADD COLUMN summary TEXT;
|
|
514
|
+
ALTER TABLE sessions ADD COLUMN keep INTEGER NOT NULL DEFAULT 0;
|
|
515
|
+
ALTER TABLE sessions ADD COLUMN answered_at TEXT;
|
|
516
|
+
UPDATE sessions SET answered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
517
|
+
WHERE parent_id IS NOT NULL
|
|
518
|
+
AND id NOT IN (SELECT to_session FROM session_messages);
|
|
519
|
+
|
|
520
|
+
CREATE TABLE plans (
|
|
521
|
+
id TEXT PRIMARY KEY,
|
|
522
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
523
|
+
owner TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
524
|
+
name TEXT NOT NULL,
|
|
525
|
+
phases TEXT NOT NULL DEFAULT '[]',
|
|
526
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
527
|
+
done_at TEXT
|
|
528
|
+
);
|
|
529
|
+
|
|
530
|
+
CREATE TABLE plan_log (
|
|
531
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
532
|
+
plan_id TEXT NOT NULL REFERENCES plans(id) ON DELETE CASCADE,
|
|
533
|
+
text TEXT NOT NULL,
|
|
534
|
+
at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
535
|
+
);
|
|
536
|
+
|
|
537
|
+
CREATE TABLE session_groups (
|
|
538
|
+
id TEXT PRIMARY KEY,
|
|
539
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
540
|
+
owner TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
541
|
+
plan_id TEXT REFERENCES plans(id) ON DELETE SET NULL,
|
|
542
|
+
phase TEXT,
|
|
543
|
+
title TEXT NOT NULL,
|
|
544
|
+
parallel INTEGER NOT NULL DEFAULT 4,
|
|
545
|
+
fan_in INTEGER NOT NULL DEFAULT 1,
|
|
546
|
+
close_done INTEGER NOT NULL DEFAULT 0,
|
|
547
|
+
keep INTEGER NOT NULL DEFAULT 0,
|
|
548
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
549
|
+
);
|
|
550
|
+
|
|
551
|
+
CREATE TABLE group_members (
|
|
552
|
+
id TEXT PRIMARY KEY,
|
|
553
|
+
group_id TEXT NOT NULL REFERENCES session_groups(id) ON DELETE CASCADE,
|
|
554
|
+
ord INTEGER NOT NULL,
|
|
555
|
+
session_id TEXT REFERENCES sessions(id) ON DELETE SET NULL,
|
|
556
|
+
agent TEXT NOT NULL,
|
|
557
|
+
title TEXT NOT NULL,
|
|
558
|
+
prompt TEXT NOT NULL,
|
|
559
|
+
launch_dir TEXT,
|
|
560
|
+
state TEXT NOT NULL DEFAULT 'queued' CHECK (state IN ('queued', 'running', 'done', 'closed')),
|
|
561
|
+
note TEXT,
|
|
562
|
+
summary TEXT,
|
|
563
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
564
|
+
started_at TEXT,
|
|
565
|
+
done_at TEXT
|
|
566
|
+
);
|
|
567
|
+
|
|
568
|
+
CREATE INDEX group_members_group ON group_members(group_id);
|
|
569
|
+
CREATE INDEX group_members_session ON group_members(session_id);
|
|
570
|
+
|
|
571
|
+
ALTER TABLE session_messages ADD COLUMN group_id TEXT REFERENCES session_groups(id) ON DELETE SET NULL;
|
|
503
572
|
`);
|
|
504
573
|
}
|
|
505
574
|
}
|
|
@@ -8249,6 +8318,14 @@ var lastMessages = /* @__PURE__ */ new Map();
|
|
|
8249
8318
|
var expecting = /* @__PURE__ */ new Set();
|
|
8250
8319
|
/** When someone last typed into each session's pane from a page. */
|
|
8251
8320
|
var typedAt = /* @__PURE__ */ new Map();
|
|
8321
|
+
/** What each session's turn is doing, from its last tool call ("Bash:
|
|
8322
|
+
* pnpm test"): the line a team view shows for a member at work. */
|
|
8323
|
+
var activities = /* @__PURE__ */ new Map();
|
|
8324
|
+
/** Each session's permission mode, as its hooks last reported it
|
|
8325
|
+
* (`permission_mode`): what a session it starts runs in. */
|
|
8326
|
+
var modes = /* @__PURE__ */ new Map();
|
|
8327
|
+
/** Told when a session's job is done (`onFinished`). */
|
|
8328
|
+
var finishedListeners = /* @__PURE__ */ new Set();
|
|
8252
8329
|
/** Told of each turn's end that stayed the end (`onTurnEnd`). */
|
|
8253
8330
|
var turnEndListeners = /* @__PURE__ */ new Set();
|
|
8254
8331
|
/** A turn's end is pushed once it has stayed ended this long. Stop fires
|
|
@@ -8271,13 +8348,17 @@ function setAgentPhase(sessionId, phase, reason, summary, message) {
|
|
|
8271
8348
|
if (phase === "waiting" && reason === "done") {
|
|
8272
8349
|
const failed = phases.get(sessionId) === "waiting" && reasons.get(sessionId) === "attention";
|
|
8273
8350
|
if (summary) summaries.set(sessionId, summary);
|
|
8351
|
+
activities.delete(sessionId);
|
|
8274
8352
|
if (message) lastMessages.set(sessionId, message);
|
|
8275
8353
|
else lastMessages.delete(sessionId);
|
|
8276
8354
|
if (phases.has(sessionId)) applyChange(sessionId, () => dropHook(sessionId));
|
|
8277
8355
|
if (!background.has(sessionId)) pendingDone.set(sessionId, setTimeout(() => {
|
|
8278
8356
|
pendingDone.delete(sessionId);
|
|
8279
8357
|
const answered = endTurn(sessionId);
|
|
8280
|
-
if (!failed && !answered && !expecting.has(sessionId))
|
|
8358
|
+
if (!failed && !answered && !expecting.has(sessionId)) {
|
|
8359
|
+
for (const fn of finishedListeners) fn(sessionId);
|
|
8360
|
+
notify(sessionId, "done");
|
|
8361
|
+
}
|
|
8281
8362
|
}, DONE_SETTLE_MS));
|
|
8282
8363
|
return;
|
|
8283
8364
|
}
|
|
@@ -8323,6 +8404,11 @@ function endTurn(sessionId) {
|
|
|
8323
8404
|
for (const fn of turnEndListeners) told = fn(sessionId, lastMessages.get(sessionId)) || told;
|
|
8324
8405
|
return told;
|
|
8325
8406
|
}
|
|
8407
|
+
/** A session's job is done: its turn ended and stayed ended, answering
|
|
8408
|
+
* nobody, with nothing it waits on — the moment a Finished is pushed. */
|
|
8409
|
+
function onFinished(fn) {
|
|
8410
|
+
finishedListeners.add(fn);
|
|
8411
|
+
}
|
|
8326
8412
|
/** A turn's end still waiting out `DONE_SETTLE_MS`: it may yet carry on. */
|
|
8327
8413
|
function turnSettling(sessionId) {
|
|
8328
8414
|
return pendingDone.has(sessionId);
|
|
@@ -8337,6 +8423,24 @@ function setExpecting(ids) {
|
|
|
8337
8423
|
});
|
|
8338
8424
|
}
|
|
8339
8425
|
}
|
|
8426
|
+
/** A hook's `permission_mode`: the mode the session is in now (a CLI's
|
|
8427
|
+
* own toggle can move it mid-session). */
|
|
8428
|
+
function notePermissionMode(sessionId, mode) {
|
|
8429
|
+
modes.set(sessionId, mode);
|
|
8430
|
+
}
|
|
8431
|
+
function permissionMode(sessionId) {
|
|
8432
|
+
return modes.get(sessionId);
|
|
8433
|
+
}
|
|
8434
|
+
/** The line its hooks last gave a wait or a turn's end (what a push says). */
|
|
8435
|
+
function summaryOf(sessionId) {
|
|
8436
|
+
return summaries.get(sessionId);
|
|
8437
|
+
}
|
|
8438
|
+
function noteActivity(sessionId, text) {
|
|
8439
|
+
activities.set(sessionId, text);
|
|
8440
|
+
}
|
|
8441
|
+
function activityOf(sessionId) {
|
|
8442
|
+
return activities.get(sessionId);
|
|
8443
|
+
}
|
|
8340
8444
|
/** Someone typed into the session's pane from a page. */
|
|
8341
8445
|
function noteTyped(sessionId) {
|
|
8342
8446
|
typedAt.set(sessionId, Date.now());
|
|
@@ -8424,9 +8528,13 @@ function sessionWatched(sessionId) {
|
|
|
8424
8528
|
return (viewers.get(sessionId) ?? 0) > 0;
|
|
8425
8529
|
}
|
|
8426
8530
|
async function notify(sessionId, reason) {
|
|
8427
|
-
const row = get(`SELECT s.agent, s.title, s.workspace_id, w.name
|
|
8428
|
-
|
|
8531
|
+
const row = get(`SELECT s.agent, s.title, s.workspace_id, w.name,
|
|
8532
|
+
p.agent AS parent_agent, p.title AS parent_title
|
|
8533
|
+
FROM sessions s JOIN workspaces w ON w.id = s.workspace_id
|
|
8534
|
+
LEFT JOIN sessions p ON p.id = s.parent_id WHERE s.id = ?`, sessionId);
|
|
8429
8535
|
if (!row) return;
|
|
8536
|
+
const parent = row.parent_agent ? `${row.parent_title || agentLabel(row.parent_agent)} › ` : "";
|
|
8537
|
+
if (parent && reason === "done") return;
|
|
8430
8538
|
if ((viewers.get(sessionId) ?? 0) > 0) return;
|
|
8431
8539
|
if (!notifyOn(reason)) return;
|
|
8432
8540
|
const waiting = [.../* @__PURE__ */ new Set([...phases.keys(), ...scraped.keys()])].filter((id) => agentPhase(id) === "waiting").length;
|
|
@@ -8434,7 +8542,7 @@ async function notify(sessionId, reason) {
|
|
|
8434
8542
|
const mark = reason === "done" ? "✔" : "⚠";
|
|
8435
8543
|
const inst = getInstance().name;
|
|
8436
8544
|
sendPush({
|
|
8437
|
-
title: `${mark} ${inst ? `${inst} · ` : ""}${row.name} · ${row.title || agentLabel(row.agent)}`,
|
|
8545
|
+
title: `${mark} ${inst ? `${inst} · ` : ""}${row.name} · ${parent}${row.title || agentLabel(row.agent)}`,
|
|
8438
8546
|
body: summary || (reason === "done" ? "Finished" : "Needs you"),
|
|
8439
8547
|
tag: `session-${sessionId}`,
|
|
8440
8548
|
badge: waiting,
|
|
@@ -8451,6 +8559,8 @@ function clearAgentPhase(sessionId) {
|
|
|
8451
8559
|
summaries.delete(sessionId);
|
|
8452
8560
|
lastMessages.delete(sessionId);
|
|
8453
8561
|
typedAt.delete(sessionId);
|
|
8562
|
+
modes.delete(sessionId);
|
|
8563
|
+
activities.delete(sessionId);
|
|
8454
8564
|
reportedAt.delete(sessionId);
|
|
8455
8565
|
interruptedAt.delete(sessionId);
|
|
8456
8566
|
if (!phases.has(sessionId) && !scraped.has(sessionId) && !background.has(sessionId)) return;
|
|
@@ -8488,12 +8598,53 @@ function publishChange(sessionId) {
|
|
|
8488
8598
|
const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
|
|
8489
8599
|
if (row?.workspace_id) {
|
|
8490
8600
|
const workspaceId = row.workspace_id;
|
|
8491
|
-
import("./
|
|
8601
|
+
import("./_DrEeyoLF.js").then((m) => m.notifySessionsChanged(workspaceId));
|
|
8492
8602
|
return;
|
|
8493
8603
|
}
|
|
8494
8604
|
publish("sessions.changed");
|
|
8495
8605
|
}
|
|
8496
8606
|
//#endregion
|
|
8607
|
+
//#region src/server/paths.ts
|
|
8608
|
+
/** Whether `target` is `root` or somewhere under it, by name alone. Both
|
|
8609
|
+
* are normalised first, so `..` and a trailing slash count as the
|
|
8610
|
+
* filesystem would count them, and the separator after `root` is the
|
|
8611
|
+
* whole point: a sibling `…/work-2` is not in `…/work`. A relative
|
|
8612
|
+
* `target` is in nothing — an empty one is a process cwd that could not
|
|
8613
|
+
* be read, not the root. A symlink under `root` can still lead out: what
|
|
8614
|
+
* is read through one wants `realInside`. */
|
|
8615
|
+
function inside(target, root) {
|
|
8616
|
+
if (!path.isAbsolute(target)) return false;
|
|
8617
|
+
const top = path.resolve(root);
|
|
8618
|
+
const full = path.resolve(target);
|
|
8619
|
+
return full === top || full.startsWith(top.endsWith(path.sep) ? top : top + path.sep);
|
|
8620
|
+
}
|
|
8621
|
+
/** Where `file` — named from `root`, as git and the pages name a
|
|
8622
|
+
* checkout's files, or absolute — really leads through every symlink,
|
|
8623
|
+
* when that is still `root` or under it; null when it leads out or is not
|
|
8624
|
+
* there. The check by name alone lets a symlink in a repo, which a branch
|
|
8625
|
+
* can add, point a read at any file on the machine. */
|
|
8626
|
+
async function realInside(file, root) {
|
|
8627
|
+
const full = path.resolve(root, file);
|
|
8628
|
+
if (!inside(full, root)) return null;
|
|
8629
|
+
try {
|
|
8630
|
+
const [top, real] = await Promise.all([fs$1.realpath(root), fs$1.realpath(full)]);
|
|
8631
|
+
return inside(real, top) ? real : null;
|
|
8632
|
+
} catch {
|
|
8633
|
+
return null;
|
|
8634
|
+
}
|
|
8635
|
+
}
|
|
8636
|
+
/** `realInside` for a caller that cannot wait. */
|
|
8637
|
+
function realInsideSync(file, root) {
|
|
8638
|
+
const full = path.resolve(root, file);
|
|
8639
|
+
if (!inside(full, root)) return null;
|
|
8640
|
+
try {
|
|
8641
|
+
const real = fs.realpathSync(full);
|
|
8642
|
+
return inside(real, fs.realpathSync(root)) ? real : null;
|
|
8643
|
+
} catch {
|
|
8644
|
+
return null;
|
|
8645
|
+
}
|
|
8646
|
+
}
|
|
8647
|
+
//#endregion
|
|
8497
8648
|
//#region src/agents/hooks.ts
|
|
8498
8649
|
/** Shell command a CLI hook runs to report a state: POSTs the hook's own
|
|
8499
8650
|
* stdin JSON to the app, which mines it for a notification summary. `exit 0`
|
|
@@ -9021,6 +9172,15 @@ var QUESTION_TOOL$1 = "AskUserQuestion";
|
|
|
9021
9172
|
* wait as the lead's own prompt. Claude's own notification type, beside
|
|
9022
9173
|
* the shared ones. */
|
|
9023
9174
|
var WORKER_PERMISSION = "worker_permission_prompt";
|
|
9175
|
+
/** The modes `--permission-mode` takes; `default` is no flag at all. */
|
|
9176
|
+
var MODES = /* @__PURE__ */ new Set([
|
|
9177
|
+
"acceptEdits",
|
|
9178
|
+
"auto",
|
|
9179
|
+
"bypassPermissions",
|
|
9180
|
+
"manual",
|
|
9181
|
+
"dontAsk",
|
|
9182
|
+
"plan"
|
|
9183
|
+
]);
|
|
9024
9184
|
/** How StopFailure's `error` reads on a phone. */
|
|
9025
9185
|
var FAILURES = {
|
|
9026
9186
|
authentication_failed: "Signed out",
|
|
@@ -9165,10 +9325,14 @@ var claude = {
|
|
|
9165
9325
|
]
|
|
9166
9326
|
]) })],
|
|
9167
9327
|
reportsWorking: () => true,
|
|
9328
|
+
modeFlags: (mode) => MODES.has(mode) ? ["--permission-mode", mode] : [],
|
|
9168
9329
|
envPrefixes: ["CLAUDE", "AI_AGENT"],
|
|
9169
9330
|
startupQuestions: [{
|
|
9170
9331
|
screen: /Is this a project you created or one you trust/,
|
|
9171
9332
|
asks: "whether to trust this folder"
|
|
9333
|
+
}, {
|
|
9334
|
+
screen: /running in Bypass Permissions mode[\s\S]*Yes, I accept/,
|
|
9335
|
+
asks: "whether to accept Bypass Permissions mode"
|
|
9172
9336
|
}],
|
|
9173
9337
|
readHook: readHook$6,
|
|
9174
9338
|
usage: () => Promise.all(claudeAccounts().map((account) => claudeRow(account)))
|
|
@@ -9806,47 +9970,6 @@ var cursor = {
|
|
|
9806
9970
|
usage: () => cursorRow().then((row) => [row])
|
|
9807
9971
|
};
|
|
9808
9972
|
//#endregion
|
|
9809
|
-
//#region src/server/paths.ts
|
|
9810
|
-
/** Whether `target` is `root` or somewhere under it, by name alone. Both
|
|
9811
|
-
* are normalised first, so `..` and a trailing slash count as the
|
|
9812
|
-
* filesystem would count them, and the separator after `root` is the
|
|
9813
|
-
* whole point: a sibling `…/work-2` is not in `…/work`. A relative
|
|
9814
|
-
* `target` is in nothing — an empty one is a process cwd that could not
|
|
9815
|
-
* be read, not the root. A symlink under `root` can still lead out: what
|
|
9816
|
-
* is read through one wants `realInside`. */
|
|
9817
|
-
function inside(target, root) {
|
|
9818
|
-
if (!path.isAbsolute(target)) return false;
|
|
9819
|
-
const top = path.resolve(root);
|
|
9820
|
-
const full = path.resolve(target);
|
|
9821
|
-
return full === top || full.startsWith(top.endsWith(path.sep) ? top : top + path.sep);
|
|
9822
|
-
}
|
|
9823
|
-
/** Where `file` — named from `root`, as git and the pages name a
|
|
9824
|
-
* checkout's files, or absolute — really leads through every symlink,
|
|
9825
|
-
* when that is still `root` or under it; null when it leads out or is not
|
|
9826
|
-
* there. The check by name alone lets a symlink in a repo, which a branch
|
|
9827
|
-
* can add, point a read at any file on the machine. */
|
|
9828
|
-
async function realInside(file, root) {
|
|
9829
|
-
const full = path.resolve(root, file);
|
|
9830
|
-
if (!inside(full, root)) return null;
|
|
9831
|
-
try {
|
|
9832
|
-
const [top, real] = await Promise.all([fs$1.realpath(root), fs$1.realpath(full)]);
|
|
9833
|
-
return inside(real, top) ? real : null;
|
|
9834
|
-
} catch {
|
|
9835
|
-
return null;
|
|
9836
|
-
}
|
|
9837
|
-
}
|
|
9838
|
-
/** `realInside` for a caller that cannot wait. */
|
|
9839
|
-
function realInsideSync(file, root) {
|
|
9840
|
-
const full = path.resolve(root, file);
|
|
9841
|
-
if (!inside(full, root)) return null;
|
|
9842
|
-
try {
|
|
9843
|
-
const real = fs.realpathSync(full);
|
|
9844
|
-
return inside(real, fs.realpathSync(root)) ? real : null;
|
|
9845
|
-
} catch {
|
|
9846
|
-
return null;
|
|
9847
|
-
}
|
|
9848
|
-
}
|
|
9849
|
-
//#endregion
|
|
9850
9973
|
//#region src/agents/grok/usage.ts
|
|
9851
9974
|
var AUTH = path.join(HOME, ".grok", "auth.json");
|
|
9852
9975
|
var LOG = path.join(HOME, ".grok", "logs", "unified.jsonl");
|
|
@@ -10441,6 +10564,10 @@ function agentFor(id) {
|
|
|
10441
10564
|
function agentLaunchFlags(id, ctx) {
|
|
10442
10565
|
return agentFor(id)?.launchFlags?.(ctx) ?? [];
|
|
10443
10566
|
}
|
|
10567
|
+
/** Argv that starts an instance in a permission mode (`modeFlags`). */
|
|
10568
|
+
function agentModeFlags(id, mode) {
|
|
10569
|
+
return mode ? agentFor(id)?.modeFlags?.(mode) ?? [] : [];
|
|
10570
|
+
}
|
|
10444
10571
|
/** Env for a spawned pane so the agent CLI reports state — the families
|
|
10445
10572
|
* configured by environment rather than argv. */
|
|
10446
10573
|
function agentLaunchEnv(id, ctx) {
|
|
@@ -10496,15 +10623,17 @@ function getSession(id) {
|
|
|
10496
10623
|
* workspace at once (restored tabs, a phone and a desktop) both list no
|
|
10497
10624
|
* sessions before either POST lands. The check and the insert run in one
|
|
10498
10625
|
* synchronous step, so the second gets the first one's session. */
|
|
10499
|
-
function createSession(workspaceId, agent, ifEmpty = false,
|
|
10626
|
+
function createSession(workspaceId, agent, ifEmpty = false, start = {}) {
|
|
10500
10627
|
if (!isKnownAgent(agent)) throw new Error(`unknown session kind: ${agent}`);
|
|
10501
10628
|
if (ifEmpty) {
|
|
10502
10629
|
const first = listSessions(workspaceId)[0];
|
|
10503
10630
|
if (first) return first;
|
|
10504
10631
|
}
|
|
10505
|
-
const
|
|
10632
|
+
const parent = start.parent ? getSession(start.parent) : void 0;
|
|
10633
|
+
const parentId = parent?.workspace_id === workspaceId ? parent.id : null;
|
|
10634
|
+
const mode = start.launchMode !== void 0 ? start.launchMode : parentId ? permissionMode(parentId) ?? parent?.launch_mode ?? null : null;
|
|
10506
10635
|
const id = Math.random().toString(36).slice(2, 10);
|
|
10507
|
-
db.prepare("INSERT INTO sessions (id, workspace_id, agent, parent_id) VALUES (?, ?, ?, ?)").run(id, workspaceId, agent, parentId);
|
|
10636
|
+
db.prepare("INSERT INTO sessions (id, workspace_id, agent, parent_id, launch_dir, launch_mode, keep) VALUES (?, ?, ?, ?, ?, ?, ?)").run(id, workspaceId, agent, parentId, start.launchDir ?? null, mode, start.keep ? 1 : 0);
|
|
10508
10637
|
notifySessionsChanged(workspaceId);
|
|
10509
10638
|
return getSession(id);
|
|
10510
10639
|
}
|
|
@@ -10514,11 +10643,24 @@ function renameSession(id, title) {
|
|
|
10514
10643
|
db.prepare("UPDATE sessions SET title = ? WHERE id = ?").run(title, id);
|
|
10515
10644
|
notifySessionsChanged(session.workspace_id);
|
|
10516
10645
|
}
|
|
10517
|
-
|
|
10646
|
+
/** Close a session, and with it every session it started and theirs
|
|
10647
|
+
* (`parent_id`), unless `keepChildren`: those then stand on their own.
|
|
10648
|
+
* Returns the ids closed. */
|
|
10649
|
+
async function killSession(id, keepChildren = false) {
|
|
10518
10650
|
const session = getSession(id);
|
|
10519
|
-
if (!session) return;
|
|
10520
|
-
|
|
10651
|
+
if (!session) return [];
|
|
10652
|
+
const family = keepChildren ? [id] : [id, ...descendantsOf(id)];
|
|
10653
|
+
for (const member of family) await disposeSession(member);
|
|
10521
10654
|
notifySessionsChanged(session.workspace_id);
|
|
10655
|
+
return family;
|
|
10656
|
+
}
|
|
10657
|
+
/** Every session `id` started, and theirs, nearest first. */
|
|
10658
|
+
function descendantsOf(id) {
|
|
10659
|
+
return all(`WITH RECURSIVE kids(id, depth) AS (
|
|
10660
|
+
SELECT id, 1 FROM sessions WHERE parent_id = ?
|
|
10661
|
+
UNION SELECT s.id, k.depth + 1 FROM sessions s JOIN kids k ON s.parent_id = k.id
|
|
10662
|
+
)
|
|
10663
|
+
SELECT id FROM kids GROUP BY id ORDER BY MIN(depth)`, id).map((r) => r.id);
|
|
10522
10664
|
}
|
|
10523
10665
|
/** Drop tmux + DB row with no sessions.changed — used when the workspace
|
|
10524
10666
|
* is already gone from the list (delete notifies workspaces first). */
|
|
@@ -10607,12 +10749,14 @@ function notifySessionsChanged(workspaceId) {
|
|
|
10607
10749
|
async function emitSessionsChanged(workspaceId) {
|
|
10608
10750
|
try {
|
|
10609
10751
|
const states = await sessionStates();
|
|
10752
|
+
const { teamsOf } = await import("./_E0fWorAK.js");
|
|
10610
10753
|
publish("sessions.changed", {
|
|
10611
10754
|
workspaceId,
|
|
10612
10755
|
sessions: listSessions(workspaceId).map((s) => ({
|
|
10613
10756
|
...s,
|
|
10614
10757
|
state: states[s.id] || { alive: false }
|
|
10615
|
-
}))
|
|
10758
|
+
})),
|
|
10759
|
+
teams: await teamsOf(workspaceId)
|
|
10616
10760
|
});
|
|
10617
10761
|
} catch {
|
|
10618
10762
|
publish("sessions.changed", { workspaceId });
|
|
@@ -10901,18 +11045,34 @@ function newSessionArgs(session, wsPath, mode, initialPrompt, size) {
|
|
|
10901
11045
|
"-s",
|
|
10902
11046
|
tmuxName(session.id),
|
|
10903
11047
|
"-c",
|
|
10904
|
-
wsPath,
|
|
11048
|
+
launchDir(session, wsPath),
|
|
10905
11049
|
...sessionEnvArgs(session, wsPath),
|
|
10906
|
-
...loginShellCommand(session
|
|
11050
|
+
...loginShellCommand(session, launchDir(session, wsPath), initialPrompt)
|
|
10907
11051
|
];
|
|
10908
11052
|
}
|
|
11053
|
+
/** Where a session's process starts: its `launch_dir` when that is still
|
|
11054
|
+
* a folder inside its workspace (a topic's worktree, which `topic done`
|
|
11055
|
+
* removes), else the workspace itself. */
|
|
11056
|
+
function launchDir(session, wsPath) {
|
|
11057
|
+
if (!session.launch_dir) return wsPath;
|
|
11058
|
+
const dir = realInsideSync(session.launch_dir, wsPath);
|
|
11059
|
+
try {
|
|
11060
|
+
if (dir && fs.statSync(dir).isDirectory()) return dir;
|
|
11061
|
+
} catch {}
|
|
11062
|
+
return wsPath;
|
|
11063
|
+
}
|
|
10909
11064
|
/** Run the agent through a login shell so the pane's PATH matches the
|
|
10910
11065
|
* user's interactive terminal (mise activation, cargo, custom bins) —
|
|
10911
11066
|
* a service manager's PATH is far slimmer than a login shell's. */
|
|
10912
|
-
function loginShellCommand(
|
|
11067
|
+
function loginShellCommand(session, cwd, initialPrompt) {
|
|
11068
|
+
const agent = session.agent;
|
|
10913
11069
|
const words = sessionCommand(agent);
|
|
10914
11070
|
if (!words.length) return [];
|
|
10915
|
-
const line = [
|
|
11071
|
+
const line = [
|
|
11072
|
+
...words,
|
|
11073
|
+
...agentLaunchFlags(agent, { cwd }),
|
|
11074
|
+
...agentModeFlags(agent, session.launch_mode)
|
|
11075
|
+
].map(shellQuote);
|
|
10916
11076
|
if (initialPrompt) {
|
|
10917
11077
|
const file = shellQuote(initialPrompt.file);
|
|
10918
11078
|
if (initialPrompt.text.startsWith("-")) line.push("--");
|
|
@@ -11050,4 +11210,4 @@ function sleep(ms) {
|
|
|
11050
11210
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11051
11211
|
}
|
|
11052
11212
|
//#endregion
|
|
11053
|
-
export {
|
|
11213
|
+
export { setAgentPhase as $, DEFAULT_GITHUB_HOST as $t, blankRow as A, withLock as An, disabledAgents as At, interruptedSinceReport as B, ghKnownHosts as Bt, sendToSession as C, git as Cn, PREF_MAX as Ct, AGENTS as D, config as Dn, changePref as Dt, tmuxWasStarted as E, tmux as En, allPrefs as Et, activityOf as F, setDisabledAgents as Ft, notePermissionMode as G, tilde as Gt, noteActivity as H, miseVersions as Ht, agentPhase as I, setPref as It, notifyEventOn as J, unreachableText as Jt, noteTyped as K, which as Kt, clearAgentPhase as L, setSetting as Lt, inside as M, getSetting as Mt, realInside as N, isKnownAgent as Nt, readHookPayload as O, shared as On, deleteSetting as Ot, realInsideSync as P, preferredAgent as Pt, sessionWatched as Q, firewallProbe as Qt, hookPhase as R, discoverAgents as Rt, renameSession as S, gh as Sn, validSubscription as St, tmuxName as T, run$2 as Tn, agentChoices as Tt, noteBackground as U, setupPath as Ut, lastTypedAt as V, miseInstalls as Vt, noteInterrupt as W, stableGh as Wt, onPhaseChange as X, unsetCaches as Xt, onFinished as Y, enableUntrackedCache as Yt, onTurnEnd as Z, untrackedCacheAllowed as Zt, markTmuxStarted as _, all as _n, setInstance as _t, creationOf as a, parseAgentId as an, turnPhase as at, onSessionDispose as b, workspacePath as bn, saveSubscription as bt, ensureTmuxServer as c, FRAME_ANCESTORS as cn, agentFamily as ct, killSession as d, httpError as dn, agentMeta as dt, PROJECT_TOOLS as en, setExpecting as et, killWorkspaceSessions as f, readBody as fn, ACCENT_RE as ft, listSessions as g, subscriberCount as gn, normalizeAccent as gt, listPanesWithin as h, subscribe as hn, manifest as ht, createSession as i, catalogPin as in, summaryOf as it, cleanSummary as j, enabledAgents as jt, reportsWorking as k, swr as kn, deleteWorkspacePrefs as kt, forgetPanes as l, FRAME_HEADERS as ln, agentFromCommand as lt, listPanes as m, publishJson as mn, iconSvg as mt, cleanEnv as n, agentById as nn, setSessionViewers as nt, descendantsOf as o, toolById as on, turnSettling as ot, launchDir as p, publish as pn, getInstance as pt, noteUserAnswered as q, hostReach as qt, clearTmuxStarted as r, agentLabel$1 as rn, settleQuietWorking as rt, disposeSessions as s, applyPrefChange as sn, agentBadge as st, beginCreation as t, TOOLS as tn, setScrapedPhase as tt, getSession as u, checked as un, agentLabel as ut, newSessionArgs as v, db as vn, deleteSubscription as vt, sessionStates as w, gitEnv as wn, WORKSPACE_PREFS as wt, panePids as x, TMUX_SOCKET as xn, sendPush as xt, notifySessionsChanged as y, get as yn, pushPublicKey as yt, hookReportedAt as z, doctor as zt };
|