@dylanpiercey/work 0.2.18 → 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 +6 -1
- package/bin/cli/plan.mjs +85 -0
- package/bin/cli/session.mjs +406 -41
- package/bin/cli/topic.mjs +63 -40
- package/bin/work.mjs +10 -1
- 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/{_BlLEM8du.js → _Hb3LeA5Q.js} +321 -67
- package/dist/index.mjs +3447 -1913
- 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/{_Dh9434oc.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/{_B-H6ABVZ.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/{_DjYscMjF.js → _B1AH7m_8.js} +1 -1
- package/dist/public/assets/_B1AH7m_8.js.br +0 -0
- package/dist/public/assets/{_HpxvfbM2.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/{_w-MAJku6.js → _B7u83Fqc.js} +1 -1
- package/dist/public/assets/_B89z0EK7.js +1 -0
- package/dist/public/assets/{_Df-N1G_n.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/{_RudCGuBM.js → _BFD3zDfn.js} +1 -1
- package/dist/public/assets/_BFD3zDfn.js.br +0 -0
- package/dist/public/assets/{_9JG-F3GR.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/{_CPqT91JX.js → _BHxaJLxf.js} +1 -1
- package/dist/public/assets/_BHxaJLxf.js.br +0 -0
- package/dist/public/assets/{_DXvsvUmJ.js → _BJc28pt5.js} +1 -1
- package/dist/public/assets/_BJc28pt5.js.br +0 -0
- package/dist/public/assets/{_CpVeIwQ4.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/{_B-iOtMg6.js → _BKcc-iTi.js} +1 -1
- package/dist/public/assets/_BKcc-iTi.js.br +0 -0
- package/dist/public/assets/{_DG3L8-RO.js → _BMXIDoUj.js} +1 -1
- package/dist/public/assets/_BMXIDoUj.js.br +0 -0
- package/dist/public/assets/{_B3Z1kRpD.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/{_BIUaA4Nl.js → _B_LxZatx.js} +1 -1
- package/dist/public/assets/_B_LxZatx.js.br +0 -0
- package/dist/public/assets/{_Bs_MPTBZ.js → _BeQUut65.js} +1 -1
- package/dist/public/assets/_BeQUut65.js.br +0 -0
- package/dist/public/assets/{_B4hn3NNW.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/{_CUxBk_RE.js → _Bfuu6mAX.js} +1 -1
- package/dist/public/assets/_Bfuu6mAX.js.br +0 -0
- package/dist/public/assets/{_DNrRZhO7.js → _BgBUZElB.js} +1 -1
- package/dist/public/assets/_BgBUZElB.js.br +0 -0
- package/dist/public/assets/{_B26gPL08.js → _Bgbj7Vl5.js} +1 -1
- package/dist/public/assets/_Bgbj7Vl5.js.br +0 -0
- package/dist/public/assets/{_DRpsUHP5.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/{_BXHggM8M.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/{_WOU8TCkO.js → _BpunB-I_.js} +1 -1
- package/dist/public/assets/_BpunB-I_.js.br +0 -0
- package/dist/public/assets/{_CcINcTUt.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/{_5tN48iuJ.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/{_Cfts4mFJ.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/{_B6VtVybz.js → _CAhkFk0k.js} +1 -1
- package/dist/public/assets/_CAhkFk0k.js.br +0 -0
- package/dist/public/assets/{_BD1SQU0V.js → _CCmHKlXX.js} +1 -1
- package/dist/public/assets/_CCmHKlXX.js.br +0 -0
- package/dist/public/assets/{_C9k00otG.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/{_vG7bXn-C.js → _CGH2Busx.js} +1 -1
- package/dist/public/assets/_CGH2Busx.js.br +0 -0
- package/dist/public/assets/{_BJpBnuvv.js → _CHwp4prQ.js} +1 -1
- package/dist/public/assets/_CHwp4prQ.js.br +0 -0
- package/dist/public/assets/{_BXPUZfKX.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/{_GK8r-gEu.js → _CVEabnQh.js} +1 -1
- package/dist/public/assets/_CVEabnQh.js.br +0 -0
- package/dist/public/assets/{_CLV83hY7.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/{_C46o3wQ8.js → _CY0xLX0Y.js} +1 -1
- package/dist/public/assets/_CY0xLX0Y.js.br +0 -0
- package/dist/public/assets/{_DG_QOtsx.js → _CZNztOn6.js} +1 -1
- package/dist/public/assets/_CZNztOn6.js.br +0 -0
- package/dist/public/assets/{_Bt4cxzaP.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/{_10dZ1R0m.js → _CeZa36O-.js} +1 -1
- package/dist/public/assets/_CeZa36O-.js.br +0 -0
- package/dist/public/assets/{_DZqoQxTm.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/{_CX5VOdNU.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/{_DUH5o_iN.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/{_CIDjLk1A.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/{_DDWIDZyP.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/{_DJwY_zBh.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/{_ClHeQc6g.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/{_B0FhzjB2.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/{_DUmYv8Kf.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/{_CZsqsL_m.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/{_BSRsPQTe.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/{_Cq4DpL3R.js → _DSoJ6ck3.js} +1 -1
- package/dist/public/assets/_DSoJ6ck3.js.br +0 -0
- package/dist/public/assets/{_i6YkSowH.js → _DW92UwGh.js} +1 -1
- package/dist/public/assets/_DW92UwGh.js.br +0 -0
- package/dist/public/assets/{_DYxQeog7.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/{_CcflXOTj.js → _DZzucnmx.js} +1 -1
- package/dist/public/assets/_DZzucnmx.js.br +0 -0
- package/dist/public/assets/{_8_DzkMgB.js → _D_AjKzkm.js} +1 -1
- package/dist/public/assets/_D_AjKzkm.js.br +0 -0
- package/dist/public/assets/{_DHYIZWev.js → _DdVG8Rbg.js} +116 -116
- package/dist/public/assets/_DdVG8Rbg.js.br +0 -0
- package/dist/public/assets/{_tJgkkxOD.js → _DdcPtDZz.js} +1 -1
- package/dist/public/assets/_DdcPtDZz.js.br +0 -0
- package/dist/public/assets/{_DKlB-yMq.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/{_YDyNvOET.js → _DfNM5GDo.js} +1 -1
- package/dist/public/assets/_DfNM5GDo.js.br +0 -0
- package/dist/public/assets/{_Dku55Ypt.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/{_BI45WgW9.js → _Dow17jzJ.js} +1 -1
- package/dist/public/assets/_Dow17jzJ.js.br +0 -0
- package/dist/public/assets/{_vHqiFYsh.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/{_XWw1j8vS.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/{_B8joFpf1.js → _DxSnjCPi.js} +1 -1
- package/dist/public/assets/_DxSnjCPi.js.br +0 -0
- package/dist/public/assets/{_DGRgLaG-.js → _DyEhTpVE.js} +1 -1
- package/dist/public/assets/_DyEhTpVE.js.br +0 -0
- package/dist/public/assets/{_DMCVOg7x.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/{_o8mJsMHw.js → _HGP7qpI4.js} +1 -1
- package/dist/public/assets/_HGP7qpI4.js.br +0 -0
- package/dist/public/assets/{_f8D86HXZ.js → _L-b7Vsug.js} +1 -1
- package/dist/public/assets/_L-b7Vsug.js.br +0 -0
- package/dist/public/assets/{_B5NleRC6.js → _LWpc-K1g.js} +1 -1
- package/dist/public/assets/_LWpc-K1g.js.br +0 -0
- package/dist/public/assets/{_hbXd8Ogo.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/{_C-z8Ntse.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/{_BxKDE6Ct.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/{_sSKEak2x.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/{_DnUBW0Qq.js → __cyNMcUU.js} +1 -1
- package/dist/public/assets/{_rv9KtZHz.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/{_DB7_Yora.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/{_CYcgwayF.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/{_l9xpLTP_.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/{_B2DHvTZR.js → _sLUOjXIk.js} +1 -1
- package/dist/public/assets/{_BLeLpnYL.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/{_BkHLXMjq.js → _tFVcmmKI.js} +1 -1
- package/dist/public/assets/_tFVcmmKI.js.br +0 -0
- package/dist/public/assets/{_oVsjszGq.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/{_BkGAUdMd.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/lib/preview/media.d.mts +1 -1
- package/lib/preview/media.mjs +15 -2
- package/package.json +1 -1
- package/dist/_BAJGOEa1.js +0 -168
- package/dist/_t9VsALwo.js +0 -2
- package/dist/public/assets/_10dZ1R0m.js.br +0 -0
- package/dist/public/assets/_1EPD0XJG.js +0 -1
- package/dist/public/assets/_1jA3fFvQ.js +0 -1
- package/dist/public/assets/_4Sj6a8Ya.js +0 -1
- package/dist/public/assets/_4Sj6a8Ya.js.br +0 -0
- package/dist/public/assets/_5tN48iuJ.js.br +0 -0
- package/dist/public/assets/_8_DzkMgB.js.br +0 -0
- package/dist/public/assets/_9JG-F3GR.js.br +0 -0
- package/dist/public/assets/_9KUM3Nch.js +0 -2
- package/dist/public/assets/_9KUM3Nch.js.br +0 -0
- package/dist/public/assets/_B-H6ABVZ.js.br +0 -0
- package/dist/public/assets/_B-iOtMg6.js.br +0 -0
- package/dist/public/assets/_B0FhzjB2.js.br +0 -0
- package/dist/public/assets/_B26gPL08.js.br +0 -0
- package/dist/public/assets/_B3Z1kRpD.js.br +0 -0
- package/dist/public/assets/_B3sH8Usv.js +0 -1
- package/dist/public/assets/_B3sH8Usv.js.br +0 -0
- package/dist/public/assets/_B42hLH2K.js +0 -1
- package/dist/public/assets/_B4hn3NNW.js.br +0 -0
- package/dist/public/assets/_B5NleRC6.js.br +0 -0
- package/dist/public/assets/_B5fRGxPQ.js +0 -1
- package/dist/public/assets/_B5fRGxPQ.js.br +0 -0
- package/dist/public/assets/_B65yR5Ej.js +0 -1
- package/dist/public/assets/_B6Sh9WEH.js +0 -1
- package/dist/public/assets/_B6VtVybz.js.br +0 -0
- package/dist/public/assets/_B7rJ4n9b.js +0 -1
- package/dist/public/assets/_B8M-AD29.js +0 -1
- package/dist/public/assets/_B8joFpf1.js.br +0 -0
- package/dist/public/assets/_B9nA-Uh1.js +0 -1
- package/dist/public/assets/_B9nA-Uh1.js.br +0 -0
- package/dist/public/assets/_BA6X_Aj6.js +0 -1
- package/dist/public/assets/_BBFJV2Bx.js +0 -1
- package/dist/public/assets/_BCW5GFMW.js +0 -1
- package/dist/public/assets/_BD1SQU0V.js.br +0 -0
- package/dist/public/assets/_BEpd9Y1R.js +0 -1
- package/dist/public/assets/_BEy7R4W_.js +0 -1
- package/dist/public/assets/_BFGJOHQb.js +0 -1
- package/dist/public/assets/_BI45WgW9.js.br +0 -0
- package/dist/public/assets/_BIKvQKWe.js +0 -1
- package/dist/public/assets/_BIPnL2aI.js +0 -1
- package/dist/public/assets/_BIUaA4Nl.js.br +0 -0
- package/dist/public/assets/_BJpBnuvv.js.br +0 -0
- package/dist/public/assets/_BLeLpnYL.js.br +0 -0
- package/dist/public/assets/_BMb5ANTv.js +0 -1
- package/dist/public/assets/_BSRsPQTe.js.br +0 -0
- package/dist/public/assets/_BVuerXin.js +0 -6
- package/dist/public/assets/_BVuerXin.js.br +0 -0
- package/dist/public/assets/_BWV8aSlZ.js +0 -1
- package/dist/public/assets/_BXHggM8M.js.br +0 -0
- package/dist/public/assets/_BXPUZfKX.js.br +0 -0
- package/dist/public/assets/_BYebhygn.js +0 -1
- package/dist/public/assets/_BZgCxd-U.js +0 -1
- package/dist/public/assets/_BZgCxd-U.js.br +0 -0
- package/dist/public/assets/_B_W51WxU.js +0 -1
- package/dist/public/assets/_B_jFFNyT.js +0 -1
- package/dist/public/assets/_Ba9OQzPV.js +0 -1
- package/dist/public/assets/_Ba9OQzPV.js.br +0 -0
- package/dist/public/assets/_BayiY7GU.js +0 -1
- package/dist/public/assets/_BcDMeS82.js +0 -1
- package/dist/public/assets/_BdD1sZp_.js +0 -1
- package/dist/public/assets/_Bg_WwlL2.js +0 -1
- package/dist/public/assets/_BhHzv4g0.js +0 -1
- package/dist/public/assets/_BjEinMEe.js +0 -1
- package/dist/public/assets/_BjEinMEe.js.br +0 -0
- package/dist/public/assets/_BkGAUdMd.js.br +0 -0
- package/dist/public/assets/_BkHLXMjq.js.br +0 -0
- package/dist/public/assets/_BmSWsZvV.js +0 -1
- package/dist/public/assets/_Bn6y2_ex.js +0 -1
- package/dist/public/assets/_Bn6y2_ex.js.br +0 -0
- package/dist/public/assets/_Bp2gqUaf.js +0 -1
- package/dist/public/assets/_Bs6oYKkD.js +0 -1
- package/dist/public/assets/_Bs_MPTBZ.js.br +0 -0
- package/dist/public/assets/_Bt13j1ev.js +0 -1
- package/dist/public/assets/_BwlnYt-t.js +0 -1
- package/dist/public/assets/_Bx9aUXTG.js +0 -1
- package/dist/public/assets/_BxKDE6Ct.js.br +0 -0
- package/dist/public/assets/_BymFDqKj.js +0 -1
- package/dist/public/assets/_C-z8Ntse.js.br +0 -0
- package/dist/public/assets/_C0XUbqWe.js +0 -1
- package/dist/public/assets/_C1upDwBv.js +0 -1
- package/dist/public/assets/_C3f4huqn.js +0 -1
- package/dist/public/assets/_C46o3wQ8.js.br +0 -0
- package/dist/public/assets/_C4_3qKLX.js +0 -1
- package/dist/public/assets/_C7tG4xwv.js +0 -1
- package/dist/public/assets/_C8LciIOa.js +0 -1
- package/dist/public/assets/_C9k00otG.js.br +0 -0
- package/dist/public/assets/_CBG92pZO.js +0 -1
- package/dist/public/assets/_CBfI2lSr.js +0 -1
- package/dist/public/assets/_CFKwHn62.js +0 -1
- package/dist/public/assets/_CFKwHn62.js.br +0 -0
- package/dist/public/assets/_CHDvRNgn.js +0 -1
- package/dist/public/assets/_CIDjLk1A.js.br +0 -0
- package/dist/public/assets/_CLV83hY7.js.br +0 -0
- package/dist/public/assets/_CO8ZosDU.js +0 -1
- package/dist/public/assets/_CPqT91JX.js.br +0 -0
- package/dist/public/assets/_CRZ03hrO.js +0 -1
- package/dist/public/assets/_CUKvJRmi.js +0 -1
- package/dist/public/assets/_CU_FKEsy.js +0 -1
- package/dist/public/assets/_CUxBk_RE.js.br +0 -0
- package/dist/public/assets/_CW_vyZfo.js +0 -1
- package/dist/public/assets/_CX5VOdNU.js.br +0 -0
- package/dist/public/assets/_CYcgwayF.js.br +0 -0
- package/dist/public/assets/_CZsqsL_m.js.br +0 -0
- package/dist/public/assets/_C_a8QggH.js +0 -1
- package/dist/public/assets/_C_ymFHNL.js +0 -1
- package/dist/public/assets/_CaU4irFc.js +0 -1
- package/dist/public/assets/_Cb3fSi2R.js +0 -1
- package/dist/public/assets/_CcINcTUt.js.br +0 -0
- package/dist/public/assets/_CcflXOTj.js.br +0 -0
- package/dist/public/assets/_Cfts4mFJ.js.br +0 -0
- package/dist/public/assets/_ClHeQc6g.js.br +0 -0
- package/dist/public/assets/_CnSlVcEh.js +0 -1
- package/dist/public/assets/_Co71-HWR.js +0 -1
- package/dist/public/assets/_CpEeHKyF.js +0 -1
- package/dist/public/assets/_CpVeIwQ4.js.br +0 -0
- package/dist/public/assets/_Cq4DpL3R.js.br +0 -0
- package/dist/public/assets/_CvxsvMFa.js +0 -1
- package/dist/public/assets/_Cwdn40Q2.js +0 -1
- package/dist/public/assets/_Cwdn40Q2.js.br +0 -0
- package/dist/public/assets/_CzN0wC_5.js +0 -16
- package/dist/public/assets/_CzN0wC_5.js.br +0 -0
- package/dist/public/assets/_D3ieGLoq.js +0 -1
- package/dist/public/assets/_D4wF26fk.js +0 -1
- package/dist/public/assets/_D9a9nY1Q.js +0 -1
- package/dist/public/assets/_DB7_Yora.js.br +0 -0
- package/dist/public/assets/_DDWIDZyP.js.br +0 -0
- package/dist/public/assets/_DG3L8-RO.js.br +0 -0
- package/dist/public/assets/_DGRgLaG-.js.br +0 -0
- package/dist/public/assets/_DG_QOtsx.js.br +0 -0
- package/dist/public/assets/_DHYIZWev.js.br +0 -0
- package/dist/public/assets/_DJwY_zBh.js.br +0 -0
- package/dist/public/assets/_DKlB-yMq.js.br +0 -0
- package/dist/public/assets/_DMCVOg7x.js.br +0 -0
- package/dist/public/assets/_DMXnrdYy.js +0 -1
- package/dist/public/assets/_DMXnrdYy.js.br +0 -0
- package/dist/public/assets/_DNrRZhO7.js.br +0 -0
- package/dist/public/assets/_DPdb5l-Z.js +0 -1
- package/dist/public/assets/_DRpsUHP5.js.br +0 -0
- package/dist/public/assets/_DUH5o_iN.js.br +0 -0
- package/dist/public/assets/_DUmYv8Kf.js.br +0 -0
- package/dist/public/assets/_DXvsvUmJ.js.br +0 -0
- package/dist/public/assets/_DYxQeog7.js.br +0 -0
- package/dist/public/assets/_DZIDdpeW.js +0 -1
- package/dist/public/assets/_DZqoQxTm.js.br +0 -0
- package/dist/public/assets/_D_4RJnk0.js +0 -2
- package/dist/public/assets/_D_4RJnk0.js.br +0 -0
- package/dist/public/assets/_DclJXqwW.js +0 -1
- package/dist/public/assets/_Debmjz1c.js +0 -1
- package/dist/public/assets/_DeiCZCO_.js +0 -1
- package/dist/public/assets/_Df-N1G_n.js.br +0 -0
- package/dist/public/assets/_Df_3rEok.js +0 -86
- package/dist/public/assets/_Df_3rEok.js.br +0 -0
- package/dist/public/assets/_DjYscMjF.js.br +0 -0
- package/dist/public/assets/_Dku55Ypt.js.br +0 -0
- package/dist/public/assets/_Dm8TVkBX.js +0 -1
- package/dist/public/assets/_DoOPrRIy.js +0 -1
- package/dist/public/assets/_DqJvxlYV.js +0 -1
- package/dist/public/assets/_Drle66GA.js +0 -1
- package/dist/public/assets/_DtrvrAfl.js +0 -1
- package/dist/public/assets/_DwTaEsY5.js +0 -1
- package/dist/public/assets/_DwTaEsY5.js.br +0 -0
- package/dist/public/assets/_Dypj9l-z.js +0 -1
- package/dist/public/assets/_DyvwMfCp.js +0 -1
- package/dist/public/assets/_GK8r-gEu.js.br +0 -0
- package/dist/public/assets/_HpxvfbM2.js.br +0 -0
- package/dist/public/assets/_RudCGuBM.js.br +0 -0
- package/dist/public/assets/_UbfI3k4y.js +0 -1
- package/dist/public/assets/_WOU8TCkO.js.br +0 -0
- package/dist/public/assets/_XWw1j8vS.js.br +0 -0
- package/dist/public/assets/_YDyNvOET.js.br +0 -0
- package/dist/public/assets/_ahCaQNeo.js.br +0 -0
- package/dist/public/assets/_f8D86HXZ.js.br +0 -0
- package/dist/public/assets/_hbXd8Ogo.js.br +0 -0
- package/dist/public/assets/_i6YkSowH.js.br +0 -0
- package/dist/public/assets/_k1ciacDf.js +0 -1
- package/dist/public/assets/_k6nXIP-i.js +0 -1
- package/dist/public/assets/_keX09TNx.js +0 -1
- package/dist/public/assets/_l9xpLTP_.js.br +0 -0
- package/dist/public/assets/_n9Rb26YX.js +0 -1
- package/dist/public/assets/_o8mJsMHw.js.br +0 -0
- package/dist/public/assets/_oVsjszGq.js.br +0 -0
- package/dist/public/assets/_pM8W420Q.js +0 -1
- package/dist/public/assets/_rv9KtZHz.js.br +0 -0
- package/dist/public/assets/_sSKEak2x.js.br +0 -0
- package/dist/public/assets/_tJgkkxOD.js.br +0 -0
- package/dist/public/assets/_uP3LGOtV.js +0 -1
- package/dist/public/assets/_vG7bXn-C.js.br +0 -0
- package/dist/public/assets/_vHqiFYsh.js.br +0 -0
- package/dist/public/assets/_vXJ7nP0d.js +0 -1
- package/dist/public/assets/_wvhU__5f.js +0 -1
- package/dist/public/assets/_xFMpRp_e.js +0 -1
- package/dist/public/assets/_yXimF5vw.js +0 -1
- package/dist/public/assets/files-view-BennlUmP.js +0 -2
- package/dist/public/assets/manage-workspace-CaESLJdc.js +0 -2
- package/dist/public/assets/new-BNH4m99d.js +0 -1
- package/dist/public/assets/new-workspace-CwiZjHNn.js +0 -2
- package/dist/public/assets/review-view-BdbMyVt7.js +0 -2
- package/dist/public/assets/settings-BNH4m99d.js +0 -1
- package/dist/public/assets/settings-page-CU3aC70Q.js +0 -2
- package/dist/public/assets/styles-ctr-Sxsj.css +0 -1
- package/dist/public/assets/styles-ctr-Sxsj.css.br +0 -0
- package/dist/public/assets/w-BNH4m99d.js +0 -1
- package/dist/public/assets/w._-BNH4m99d.js +0 -1
- package/dist/public/assets/w._-CLYxMMR4.js +0 -1
- package/dist/public/assets/w._-_w8eUYMy.js +0 -1
|
@@ -478,6 +478,99 @@ var STEPS = [
|
|
|
478
478
|
up(db) {
|
|
479
479
|
db.exec("DELETE FROM settings WHERE key = 'ui.term-predict'");
|
|
480
480
|
}
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
version: 4,
|
|
484
|
+
name: "session messages",
|
|
485
|
+
up(db) {
|
|
486
|
+
db.exec(`
|
|
487
|
+
ALTER TABLE sessions ADD COLUMN parent_id TEXT REFERENCES sessions(id) ON DELETE SET NULL;
|
|
488
|
+
|
|
489
|
+
CREATE TABLE session_messages (
|
|
490
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
491
|
+
to_session TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
492
|
+
from_session TEXT,
|
|
493
|
+
from_label TEXT,
|
|
494
|
+
kind TEXT NOT NULL CHECK (kind IN ('message', 'reply', 'closed')),
|
|
495
|
+
body TEXT NOT NULL,
|
|
496
|
+
wants_reply INTEGER NOT NULL DEFAULT 0,
|
|
497
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
498
|
+
delivered_at TEXT
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
CREATE INDEX session_messages_to ON session_messages(to_session);
|
|
502
|
+
CREATE INDEX session_messages_from ON session_messages(from_session);
|
|
503
|
+
`);
|
|
504
|
+
}
|
|
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;
|
|
572
|
+
`);
|
|
573
|
+
}
|
|
481
574
|
}
|
|
482
575
|
];
|
|
483
576
|
var LATEST = STEPS.at(-1).version;
|
|
@@ -8215,6 +8308,26 @@ var interruptedAt = /* @__PURE__ */ new Map();
|
|
|
8215
8308
|
* finished: the session is working until a turn ends with none left, and
|
|
8216
8309
|
* that end is the one pushed. */
|
|
8217
8310
|
var background = /* @__PURE__ */ new Map();
|
|
8311
|
+
/** Each session's last finished turn's message, whole: what a session
|
|
8312
|
+
* that messaged it gets back (server/messages). */
|
|
8313
|
+
var lastMessages = /* @__PURE__ */ new Map();
|
|
8314
|
+
/** Sessions a message is still to wake (server/messages keeps the set):
|
|
8315
|
+
* each asked another something not yet answered, or has one waiting to
|
|
8316
|
+
* be typed in. Like background work, that makes the session working, and
|
|
8317
|
+
* a turn of it that ends meanwhile has handed off rather than finished. */
|
|
8318
|
+
var expecting = /* @__PURE__ */ new Set();
|
|
8319
|
+
/** When someone last typed into each session's pane from a page. */
|
|
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();
|
|
8329
|
+
/** Told of each turn's end that stayed the end (`onTurnEnd`). */
|
|
8330
|
+
var turnEndListeners = /* @__PURE__ */ new Set();
|
|
8218
8331
|
/** A turn's end is pushed once it has stayed ended this long. Stop fires
|
|
8219
8332
|
* again each time something sends the agent back to work (a stop hook
|
|
8220
8333
|
* that continues it, a goal loop, background subagents reporting in), and
|
|
@@ -8225,7 +8338,7 @@ var listeners = /* @__PURE__ */ new Set();
|
|
|
8225
8338
|
function onPhaseChange(fn) {
|
|
8226
8339
|
listeners.add(fn);
|
|
8227
8340
|
}
|
|
8228
|
-
function setAgentPhase(sessionId, phase, reason, summary) {
|
|
8341
|
+
function setAgentPhase(sessionId, phase, reason, summary, message) {
|
|
8229
8342
|
reportedAt.set(sessionId, Date.now());
|
|
8230
8343
|
cancelDone(sessionId);
|
|
8231
8344
|
if (phase === "idle") {
|
|
@@ -8235,10 +8348,17 @@ function setAgentPhase(sessionId, phase, reason, summary) {
|
|
|
8235
8348
|
if (phase === "waiting" && reason === "done") {
|
|
8236
8349
|
const failed = phases.get(sessionId) === "waiting" && reasons.get(sessionId) === "attention";
|
|
8237
8350
|
if (summary) summaries.set(sessionId, summary);
|
|
8351
|
+
activities.delete(sessionId);
|
|
8352
|
+
if (message) lastMessages.set(sessionId, message);
|
|
8353
|
+
else lastMessages.delete(sessionId);
|
|
8238
8354
|
if (phases.has(sessionId)) applyChange(sessionId, () => dropHook(sessionId));
|
|
8239
|
-
if (!
|
|
8355
|
+
if (!background.has(sessionId)) pendingDone.set(sessionId, setTimeout(() => {
|
|
8240
8356
|
pendingDone.delete(sessionId);
|
|
8241
|
-
|
|
8357
|
+
const answered = endTurn(sessionId);
|
|
8358
|
+
if (!failed && !answered && !expecting.has(sessionId)) {
|
|
8359
|
+
for (const fn of finishedListeners) fn(sessionId);
|
|
8360
|
+
notify(sessionId, "done");
|
|
8361
|
+
}
|
|
8242
8362
|
}, DONE_SETTLE_MS));
|
|
8243
8363
|
return;
|
|
8244
8364
|
}
|
|
@@ -8273,6 +8393,62 @@ function noteBackground(sessionId, work) {
|
|
|
8273
8393
|
else background.delete(sessionId);
|
|
8274
8394
|
});
|
|
8275
8395
|
}
|
|
8396
|
+
/** A turn's end once it has stayed the end (`DONE_SETTLE_MS`), with its
|
|
8397
|
+
* last message (undefined: the CLI reports none). A listener returns
|
|
8398
|
+
* whether it passed the end on to another session. */
|
|
8399
|
+
function onTurnEnd(fn) {
|
|
8400
|
+
turnEndListeners.add(fn);
|
|
8401
|
+
}
|
|
8402
|
+
function endTurn(sessionId) {
|
|
8403
|
+
let told = false;
|
|
8404
|
+
for (const fn of turnEndListeners) told = fn(sessionId, lastMessages.get(sessionId)) || told;
|
|
8405
|
+
return told;
|
|
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
|
+
}
|
|
8412
|
+
/** A turn's end still waiting out `DONE_SETTLE_MS`: it may yet carry on. */
|
|
8413
|
+
function turnSettling(sessionId) {
|
|
8414
|
+
return pendingDone.has(sessionId);
|
|
8415
|
+
}
|
|
8416
|
+
/** The sessions a message is still to wake (server/messages). */
|
|
8417
|
+
function setExpecting(ids) {
|
|
8418
|
+
for (const id of /* @__PURE__ */ new Set([...expecting, ...ids])) {
|
|
8419
|
+
if (expecting.has(id) === ids.has(id)) continue;
|
|
8420
|
+
applyChange(id, () => {
|
|
8421
|
+
if (ids.has(id)) expecting.add(id);
|
|
8422
|
+
else expecting.delete(id);
|
|
8423
|
+
});
|
|
8424
|
+
}
|
|
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
|
+
}
|
|
8444
|
+
/** Someone typed into the session's pane from a page. */
|
|
8445
|
+
function noteTyped(sessionId) {
|
|
8446
|
+
typedAt.set(sessionId, Date.now());
|
|
8447
|
+
}
|
|
8448
|
+
/** When someone last typed into the session's pane (0: not this run). */
|
|
8449
|
+
function lastTypedAt(sessionId) {
|
|
8450
|
+
return typedAt.get(sessionId) ?? 0;
|
|
8451
|
+
}
|
|
8276
8452
|
function cancelDone(sessionId) {
|
|
8277
8453
|
const timer = pendingDone.get(sessionId);
|
|
8278
8454
|
if (!timer) return;
|
|
@@ -8352,9 +8528,13 @@ function sessionWatched(sessionId) {
|
|
|
8352
8528
|
return (viewers.get(sessionId) ?? 0) > 0;
|
|
8353
8529
|
}
|
|
8354
8530
|
async function notify(sessionId, reason) {
|
|
8355
|
-
const row = get(`SELECT s.agent, s.title, s.workspace_id, w.name
|
|
8356
|
-
|
|
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);
|
|
8357
8535
|
if (!row) return;
|
|
8536
|
+
const parent = row.parent_agent ? `${row.parent_title || agentLabel(row.parent_agent)} › ` : "";
|
|
8537
|
+
if (parent && reason === "done") return;
|
|
8358
8538
|
if ((viewers.get(sessionId) ?? 0) > 0) return;
|
|
8359
8539
|
if (!notifyOn(reason)) return;
|
|
8360
8540
|
const waiting = [.../* @__PURE__ */ new Set([...phases.keys(), ...scraped.keys()])].filter((id) => agentPhase(id) === "waiting").length;
|
|
@@ -8362,7 +8542,7 @@ async function notify(sessionId, reason) {
|
|
|
8362
8542
|
const mark = reason === "done" ? "✔" : "⚠";
|
|
8363
8543
|
const inst = getInstance().name;
|
|
8364
8544
|
sendPush({
|
|
8365
|
-
title: `${mark} ${inst ? `${inst} · ` : ""}${row.name} · ${row.title || agentLabel(row.agent)}`,
|
|
8545
|
+
title: `${mark} ${inst ? `${inst} · ` : ""}${row.name} · ${parent}${row.title || agentLabel(row.agent)}`,
|
|
8366
8546
|
body: summary || (reason === "done" ? "Finished" : "Needs you"),
|
|
8367
8547
|
tag: `session-${sessionId}`,
|
|
8368
8548
|
badge: waiting,
|
|
@@ -8377,6 +8557,10 @@ async function notify(sessionId, reason) {
|
|
|
8377
8557
|
function clearAgentPhase(sessionId) {
|
|
8378
8558
|
cancelDone(sessionId);
|
|
8379
8559
|
summaries.delete(sessionId);
|
|
8560
|
+
lastMessages.delete(sessionId);
|
|
8561
|
+
typedAt.delete(sessionId);
|
|
8562
|
+
modes.delete(sessionId);
|
|
8563
|
+
activities.delete(sessionId);
|
|
8380
8564
|
reportedAt.delete(sessionId);
|
|
8381
8565
|
interruptedAt.delete(sessionId);
|
|
8382
8566
|
if (!phases.has(sessionId) && !scraped.has(sessionId) && !background.has(sessionId)) return;
|
|
@@ -8387,11 +8571,17 @@ function clearAgentPhase(sessionId) {
|
|
|
8387
8571
|
background.delete(sessionId);
|
|
8388
8572
|
});
|
|
8389
8573
|
}
|
|
8390
|
-
/** What a session is doing. The hook wins where there is one:
|
|
8391
|
-
* the turn itself, where tmux only sees the pane still moving
|
|
8392
|
-
|
|
8574
|
+
/** What a session's own turn is doing. The hook wins where there is one:
|
|
8575
|
+
* it reports the turn itself, where tmux only sees the pane still moving
|
|
8576
|
+
* after it. Undefined: at its prompt, where a message can be typed in. */
|
|
8577
|
+
function turnPhase(sessionId) {
|
|
8393
8578
|
return hookPhase(sessionId) ?? scraped.get(sessionId);
|
|
8394
8579
|
}
|
|
8580
|
+
/** What a session is doing: its turn, else working while a message is
|
|
8581
|
+
* still to wake it — a session that handed work to another is not done. */
|
|
8582
|
+
function agentPhase(sessionId) {
|
|
8583
|
+
return turnPhase(sessionId) ?? (expecting.has(sessionId) ? "working" : void 0);
|
|
8584
|
+
}
|
|
8395
8585
|
/** Apply a mutation and broadcast when it moved the session's phase (or,
|
|
8396
8586
|
* `force`, its reason: finished and blocked draw differently). Only a
|
|
8397
8587
|
* hook ever reports "waiting", so a transition into it is a push. */
|
|
@@ -8408,12 +8598,53 @@ function publishChange(sessionId) {
|
|
|
8408
8598
|
const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
|
|
8409
8599
|
if (row?.workspace_id) {
|
|
8410
8600
|
const workspaceId = row.workspace_id;
|
|
8411
|
-
import("./
|
|
8601
|
+
import("./_DrEeyoLF.js").then((m) => m.notifySessionsChanged(workspaceId));
|
|
8412
8602
|
return;
|
|
8413
8603
|
}
|
|
8414
8604
|
publish("sessions.changed");
|
|
8415
8605
|
}
|
|
8416
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
|
|
8417
8648
|
//#region src/agents/hooks.ts
|
|
8418
8649
|
/** Shell command a CLI hook runs to report a state: POSTs the hook's own
|
|
8419
8650
|
* stdin JSON to the app, which mines it for a notification summary. `exit 0`
|
|
@@ -8472,7 +8703,8 @@ function readClaudeStyle(p, reported) {
|
|
|
8472
8703
|
const text = str$1(p.last_assistant_message) || str$1(p["last-assistant-message"]) || str$1(p.lastAssistantMessage);
|
|
8473
8704
|
if (text) return {
|
|
8474
8705
|
reason,
|
|
8475
|
-
summary: cleanSummary(text)
|
|
8706
|
+
summary: cleanSummary(text),
|
|
8707
|
+
message: text
|
|
8476
8708
|
};
|
|
8477
8709
|
if (kind) return {
|
|
8478
8710
|
reason,
|
|
@@ -8940,6 +9172,15 @@ var QUESTION_TOOL$1 = "AskUserQuestion";
|
|
|
8940
9172
|
* wait as the lead's own prompt. Claude's own notification type, beside
|
|
8941
9173
|
* the shared ones. */
|
|
8942
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
|
+
]);
|
|
8943
9184
|
/** How StopFailure's `error` reads on a phone. */
|
|
8944
9185
|
var FAILURES = {
|
|
8945
9186
|
authentication_failed: "Signed out",
|
|
@@ -9084,10 +9325,14 @@ var claude = {
|
|
|
9084
9325
|
]
|
|
9085
9326
|
]) })],
|
|
9086
9327
|
reportsWorking: () => true,
|
|
9328
|
+
modeFlags: (mode) => MODES.has(mode) ? ["--permission-mode", mode] : [],
|
|
9087
9329
|
envPrefixes: ["CLAUDE", "AI_AGENT"],
|
|
9088
9330
|
startupQuestions: [{
|
|
9089
9331
|
screen: /Is this a project you created or one you trust/,
|
|
9090
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"
|
|
9091
9336
|
}],
|
|
9092
9337
|
readHook: readHook$6,
|
|
9093
9338
|
usage: () => Promise.all(claudeAccounts().map((account) => claudeRow(account)))
|
|
@@ -9503,7 +9748,10 @@ function readHook$4(p, reported, _state) {
|
|
|
9503
9748
|
};
|
|
9504
9749
|
}
|
|
9505
9750
|
const read = readClaudeStyle(p, reported);
|
|
9506
|
-
if (!read.summary && reported === "done")
|
|
9751
|
+
if (!read.summary && reported === "done") {
|
|
9752
|
+
read.message = lastMessageFromTranscript(p);
|
|
9753
|
+
if (read.message) read.summary = cleanSummary(read.message);
|
|
9754
|
+
}
|
|
9507
9755
|
return read;
|
|
9508
9756
|
}
|
|
9509
9757
|
/** The last non-empty `assistant.message` of the turn that just ended in
|
|
@@ -9527,7 +9775,7 @@ function lastMessageFromTranscript(p) {
|
|
|
9527
9775
|
try {
|
|
9528
9776
|
const ev = JSON.parse(lines[i]);
|
|
9529
9777
|
const content = ev.type === "assistant.message" ? ev.data?.content : void 0;
|
|
9530
|
-
if (typeof content === "string" && content.trim()) return
|
|
9778
|
+
if (typeof content === "string" && content.trim()) return content.trim();
|
|
9531
9779
|
} catch {}
|
|
9532
9780
|
}
|
|
9533
9781
|
} finally {
|
|
@@ -9722,47 +9970,6 @@ var cursor = {
|
|
|
9722
9970
|
usage: () => cursorRow().then((row) => [row])
|
|
9723
9971
|
};
|
|
9724
9972
|
//#endregion
|
|
9725
|
-
//#region src/server/paths.ts
|
|
9726
|
-
/** Whether `target` is `root` or somewhere under it, by name alone. Both
|
|
9727
|
-
* are normalised first, so `..` and a trailing slash count as the
|
|
9728
|
-
* filesystem would count them, and the separator after `root` is the
|
|
9729
|
-
* whole point: a sibling `…/work-2` is not in `…/work`. A relative
|
|
9730
|
-
* `target` is in nothing — an empty one is a process cwd that could not
|
|
9731
|
-
* be read, not the root. A symlink under `root` can still lead out: what
|
|
9732
|
-
* is read through one wants `realInside`. */
|
|
9733
|
-
function inside(target, root) {
|
|
9734
|
-
if (!path.isAbsolute(target)) return false;
|
|
9735
|
-
const top = path.resolve(root);
|
|
9736
|
-
const full = path.resolve(target);
|
|
9737
|
-
return full === top || full.startsWith(top.endsWith(path.sep) ? top : top + path.sep);
|
|
9738
|
-
}
|
|
9739
|
-
/** Where `file` — named from `root`, as git and the pages name a
|
|
9740
|
-
* checkout's files, or absolute — really leads through every symlink,
|
|
9741
|
-
* when that is still `root` or under it; null when it leads out or is not
|
|
9742
|
-
* there. The check by name alone lets a symlink in a repo, which a branch
|
|
9743
|
-
* can add, point a read at any file on the machine. */
|
|
9744
|
-
async function realInside(file, root) {
|
|
9745
|
-
const full = path.resolve(root, file);
|
|
9746
|
-
if (!inside(full, root)) return null;
|
|
9747
|
-
try {
|
|
9748
|
-
const [top, real] = await Promise.all([fs$1.realpath(root), fs$1.realpath(full)]);
|
|
9749
|
-
return inside(real, top) ? real : null;
|
|
9750
|
-
} catch {
|
|
9751
|
-
return null;
|
|
9752
|
-
}
|
|
9753
|
-
}
|
|
9754
|
-
/** `realInside` for a caller that cannot wait. */
|
|
9755
|
-
function realInsideSync(file, root) {
|
|
9756
|
-
const full = path.resolve(root, file);
|
|
9757
|
-
if (!inside(full, root)) return null;
|
|
9758
|
-
try {
|
|
9759
|
-
const real = fs.realpathSync(full);
|
|
9760
|
-
return inside(real, fs.realpathSync(root)) ? real : null;
|
|
9761
|
-
} catch {
|
|
9762
|
-
return null;
|
|
9763
|
-
}
|
|
9764
|
-
}
|
|
9765
|
-
//#endregion
|
|
9766
9973
|
//#region src/agents/grok/usage.ts
|
|
9767
9974
|
var AUTH = path.join(HOME, ".grok", "auth.json");
|
|
9768
9975
|
var LOG = path.join(HOME, ".grok", "logs", "unified.jsonl");
|
|
@@ -10215,7 +10422,8 @@ function readHook$1(p, reported) {
|
|
|
10215
10422
|
const summary = str$1(p.summary);
|
|
10216
10423
|
return {
|
|
10217
10424
|
reason: reported,
|
|
10218
|
-
summary: summary ? cleanSummary(summary) : void 0
|
|
10425
|
+
summary: summary ? cleanSummary(summary) : void 0,
|
|
10426
|
+
message: summary || void 0
|
|
10219
10427
|
};
|
|
10220
10428
|
}
|
|
10221
10429
|
var opencode = {
|
|
@@ -10323,7 +10531,8 @@ function readHook(p, reported) {
|
|
|
10323
10531
|
const summary = str$1(p.summary);
|
|
10324
10532
|
return {
|
|
10325
10533
|
reason: reported,
|
|
10326
|
-
summary: summary ? cleanSummary(summary) : void 0
|
|
10534
|
+
summary: summary ? cleanSummary(summary) : void 0,
|
|
10535
|
+
message: summary || void 0
|
|
10327
10536
|
};
|
|
10328
10537
|
}
|
|
10329
10538
|
//#endregion
|
|
@@ -10355,6 +10564,10 @@ function agentFor(id) {
|
|
|
10355
10564
|
function agentLaunchFlags(id, ctx) {
|
|
10356
10565
|
return agentFor(id)?.launchFlags?.(ctx) ?? [];
|
|
10357
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
|
+
}
|
|
10358
10571
|
/** Env for a spawned pane so the agent CLI reports state — the families
|
|
10359
10572
|
* configured by environment rather than argv. */
|
|
10360
10573
|
function agentLaunchEnv(id, ctx) {
|
|
@@ -10410,14 +10623,17 @@ function getSession(id) {
|
|
|
10410
10623
|
* workspace at once (restored tabs, a phone and a desktop) both list no
|
|
10411
10624
|
* sessions before either POST lands. The check and the insert run in one
|
|
10412
10625
|
* synchronous step, so the second gets the first one's session. */
|
|
10413
|
-
function createSession(workspaceId, agent, ifEmpty = false) {
|
|
10626
|
+
function createSession(workspaceId, agent, ifEmpty = false, start = {}) {
|
|
10414
10627
|
if (!isKnownAgent(agent)) throw new Error(`unknown session kind: ${agent}`);
|
|
10415
10628
|
if (ifEmpty) {
|
|
10416
10629
|
const first = listSessions(workspaceId)[0];
|
|
10417
10630
|
if (first) return first;
|
|
10418
10631
|
}
|
|
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;
|
|
10419
10635
|
const id = Math.random().toString(36).slice(2, 10);
|
|
10420
|
-
db.prepare("INSERT INTO sessions (id, workspace_id, agent) VALUES (?, ?, ?)").run(id, workspaceId, agent);
|
|
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);
|
|
10421
10637
|
notifySessionsChanged(workspaceId);
|
|
10422
10638
|
return getSession(id);
|
|
10423
10639
|
}
|
|
@@ -10427,18 +10643,38 @@ function renameSession(id, title) {
|
|
|
10427
10643
|
db.prepare("UPDATE sessions SET title = ? WHERE id = ?").run(title, id);
|
|
10428
10644
|
notifySessionsChanged(session.workspace_id);
|
|
10429
10645
|
}
|
|
10430
|
-
|
|
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) {
|
|
10431
10650
|
const session = getSession(id);
|
|
10432
|
-
if (!session) return;
|
|
10433
|
-
|
|
10651
|
+
if (!session) return [];
|
|
10652
|
+
const family = keepChildren ? [id] : [id, ...descendantsOf(id)];
|
|
10653
|
+
for (const member of family) await disposeSession(member);
|
|
10434
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);
|
|
10435
10664
|
}
|
|
10436
10665
|
/** Drop tmux + DB row with no sessions.changed — used when the workspace
|
|
10437
10666
|
* is already gone from the list (delete notifies workspaces first). */
|
|
10438
10667
|
async function disposeSessions(sessions) {
|
|
10439
10668
|
for (const session of sessions) await disposeSession(session.id);
|
|
10440
10669
|
}
|
|
10670
|
+
/** Told of a session about to go, while its row is still there (its
|
|
10671
|
+
* messages go with it: server/messages answers what it owed first). */
|
|
10672
|
+
var disposeListeners = /* @__PURE__ */ new Set();
|
|
10673
|
+
function onSessionDispose(fn) {
|
|
10674
|
+
disposeListeners.add(fn);
|
|
10675
|
+
}
|
|
10441
10676
|
async function disposeSession(id) {
|
|
10677
|
+
for (const fn of disposeListeners) fn(id);
|
|
10442
10678
|
await tmux([
|
|
10443
10679
|
"kill-session",
|
|
10444
10680
|
"-t",
|
|
@@ -10513,12 +10749,14 @@ function notifySessionsChanged(workspaceId) {
|
|
|
10513
10749
|
async function emitSessionsChanged(workspaceId) {
|
|
10514
10750
|
try {
|
|
10515
10751
|
const states = await sessionStates();
|
|
10752
|
+
const { teamsOf } = await import("./_E0fWorAK.js");
|
|
10516
10753
|
publish("sessions.changed", {
|
|
10517
10754
|
workspaceId,
|
|
10518
10755
|
sessions: listSessions(workspaceId).map((s) => ({
|
|
10519
10756
|
...s,
|
|
10520
10757
|
state: states[s.id] || { alive: false }
|
|
10521
|
-
}))
|
|
10758
|
+
})),
|
|
10759
|
+
teams: await teamsOf(workspaceId)
|
|
10522
10760
|
});
|
|
10523
10761
|
} catch {
|
|
10524
10762
|
publish("sessions.changed", { workspaceId });
|
|
@@ -10807,18 +11045,34 @@ function newSessionArgs(session, wsPath, mode, initialPrompt, size) {
|
|
|
10807
11045
|
"-s",
|
|
10808
11046
|
tmuxName(session.id),
|
|
10809
11047
|
"-c",
|
|
10810
|
-
wsPath,
|
|
11048
|
+
launchDir(session, wsPath),
|
|
10811
11049
|
...sessionEnvArgs(session, wsPath),
|
|
10812
|
-
...loginShellCommand(session
|
|
11050
|
+
...loginShellCommand(session, launchDir(session, wsPath), initialPrompt)
|
|
10813
11051
|
];
|
|
10814
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
|
+
}
|
|
10815
11064
|
/** Run the agent through a login shell so the pane's PATH matches the
|
|
10816
11065
|
* user's interactive terminal (mise activation, cargo, custom bins) —
|
|
10817
11066
|
* a service manager's PATH is far slimmer than a login shell's. */
|
|
10818
|
-
function loginShellCommand(
|
|
11067
|
+
function loginShellCommand(session, cwd, initialPrompt) {
|
|
11068
|
+
const agent = session.agent;
|
|
10819
11069
|
const words = sessionCommand(agent);
|
|
10820
11070
|
if (!words.length) return [];
|
|
10821
|
-
const line = [
|
|
11071
|
+
const line = [
|
|
11072
|
+
...words,
|
|
11073
|
+
...agentLaunchFlags(agent, { cwd }),
|
|
11074
|
+
...agentModeFlags(agent, session.launch_mode)
|
|
11075
|
+
].map(shellQuote);
|
|
10822
11076
|
if (initialPrompt) {
|
|
10823
11077
|
const file = shellQuote(initialPrompt.file);
|
|
10824
11078
|
if (initialPrompt.text.startsWith("-")) line.push("--");
|
|
@@ -10956,4 +11210,4 @@ function sleep(ms) {
|
|
|
10956
11210
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
10957
11211
|
}
|
|
10958
11212
|
//#endregion
|
|
10959
|
-
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 };
|