@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.
Files changed (506) hide show
  1. package/README.md +3 -1
  2. package/bin/cli/plan.mjs +85 -0
  3. package/bin/cli/session.mjs +267 -31
  4. package/bin/cli/topic.mjs +63 -40
  5. package/dist/_BHlbSSAl.js +182 -0
  6. package/dist/_C9c_BxRk.js +787 -0
  7. package/dist/_DrEeyoLF.js +2 -0
  8. package/dist/_E0fWorAK.js +2 -0
  9. package/dist/{_CsokArOR.js → _Hb3LeA5Q.js} +218 -58
  10. package/dist/index.mjs +3456 -2299
  11. package/dist/public/assets/_-TUXzZ5j.js +1 -0
  12. package/dist/public/assets/_-TUXzZ5j.js.br +0 -0
  13. package/dist/public/assets/_0BO-2AH8.js +1 -0
  14. package/dist/public/assets/_1MkpPhCv.js +1 -0
  15. package/dist/public/assets/_2Czzn44S.js +2 -0
  16. package/dist/public/assets/_2Czzn44S.js.br +0 -0
  17. package/dist/public/assets/{_B9qGqvit.js → _2M3NjHcy.js} +1 -1
  18. package/dist/public/assets/_3J3NCTfA.js +1 -0
  19. package/dist/public/assets/_3yfaou9w.js +1 -0
  20. package/dist/public/assets/{_DSeQngGR.js → _6fcPfRKt.js} +1 -1
  21. package/dist/public/assets/_6fcPfRKt.js.br +0 -0
  22. package/dist/public/assets/_9kzNcuvf.js +1 -0
  23. package/dist/public/assets/_AbxeWvtk.js +1 -0
  24. package/dist/public/assets/{_D__ojGam.js → _B1AH7m_8.js} +1 -1
  25. package/dist/public/assets/_B1AH7m_8.js.br +0 -0
  26. package/dist/public/assets/{_BAWjkhA8.js → _B2zs9J9f.js} +1 -1
  27. package/dist/public/assets/_B2zs9J9f.js.br +0 -0
  28. package/dist/public/assets/_B4Tl4g-I.js +1 -0
  29. package/dist/public/assets/_B6GPBTnX.js +1 -0
  30. package/dist/public/assets/{_qxffRpjc.js → _B7u83Fqc.js} +1 -1
  31. package/dist/public/assets/_B89z0EK7.js +1 -0
  32. package/dist/public/assets/{_C6Yt6h_R.js → _BCYHTWZd.js} +1 -1
  33. package/dist/public/assets/_BCYHTWZd.js.br +0 -0
  34. package/dist/public/assets/_BD01_px3.js +1 -0
  35. package/dist/public/assets/_BDt0PKxz.js +1 -0
  36. package/dist/public/assets/{_0sTkxfPx.js → _BFD3zDfn.js} +1 -1
  37. package/dist/public/assets/_BFD3zDfn.js.br +0 -0
  38. package/dist/public/assets/{_CBEKHwUV.js → _BH5TfgM7.js} +1 -1
  39. package/dist/public/assets/_BH5TfgM7.js.br +0 -0
  40. package/dist/public/assets/_BHEzkZBl.js +1 -0
  41. package/dist/public/assets/{_CB52LkYt.js → _BHxaJLxf.js} +1 -1
  42. package/dist/public/assets/_BHxaJLxf.js.br +0 -0
  43. package/dist/public/assets/{_D8ac72_O.js → _BJc28pt5.js} +1 -1
  44. package/dist/public/assets/_BJc28pt5.js.br +0 -0
  45. package/dist/public/assets/{_BBCzcNZY.js → _BJpqJK9r.js} +1 -1
  46. package/dist/public/assets/_BJpqJK9r.js.br +0 -0
  47. package/dist/public/assets/_BKSNShOz.js +1 -0
  48. package/dist/public/assets/{_DTNiWZFr.js → _BKcc-iTi.js} +1 -1
  49. package/dist/public/assets/_BKcc-iTi.js.br +0 -0
  50. package/dist/public/assets/{_CG383oZY.js → _BMXIDoUj.js} +1 -1
  51. package/dist/public/assets/_BMXIDoUj.js.br +0 -0
  52. package/dist/public/assets/{_CEC5O89D.js → _BQMwlV-0.js} +1 -1
  53. package/dist/public/assets/_BQMwlV-0.js.br +0 -0
  54. package/dist/public/assets/_BUjgl28E.js +1 -0
  55. package/dist/public/assets/_BYUg95ML.js +1 -0
  56. package/dist/public/assets/{_CspPbDoP.js → _B_LxZatx.js} +1 -1
  57. package/dist/public/assets/_B_LxZatx.js.br +0 -0
  58. package/dist/public/assets/{_CfP0f0PU.js → _BeQUut65.js} +1 -1
  59. package/dist/public/assets/_BeQUut65.js.br +0 -0
  60. package/dist/public/assets/{_DJBR8Qwq.js → _Bf7EsJwj.js} +1 -1
  61. package/dist/public/assets/_Bf7EsJwj.js.br +0 -0
  62. package/dist/public/assets/_BfVmvTXe.js +1 -0
  63. package/dist/public/assets/_BfqDnPV7.js +1 -0
  64. package/dist/public/assets/{_BdSsUhCi.js → _Bfuu6mAX.js} +1 -1
  65. package/dist/public/assets/_Bfuu6mAX.js.br +0 -0
  66. package/dist/public/assets/{_CPaMvBMG.js → _BgBUZElB.js} +1 -1
  67. package/dist/public/assets/_BgBUZElB.js.br +0 -0
  68. package/dist/public/assets/{_CToqok6Q.js → _Bgbj7Vl5.js} +1 -1
  69. package/dist/public/assets/_Bgbj7Vl5.js.br +0 -0
  70. package/dist/public/assets/{_J3wdy6bJ.js → _BhrCWDl2.js} +1 -1
  71. package/dist/public/assets/_BhrCWDl2.js.br +0 -0
  72. package/dist/public/assets/_Bjsevhjr.js +1 -0
  73. package/dist/public/assets/_BjzBYn47.js +1 -0
  74. package/dist/public/assets/_BmyB1F-C.js +1 -0
  75. package/dist/public/assets/{_bDI-pCZR.js → _BpGvpggY.js} +1 -1
  76. package/dist/public/assets/_BpGvpggY.js.br +0 -0
  77. package/dist/public/assets/_BpjknrsF.js +1 -0
  78. package/dist/public/assets/{_BClUYs-k.js → _BpunB-I_.js} +1 -1
  79. package/dist/public/assets/_BpunB-I_.js.br +0 -0
  80. package/dist/public/assets/{_DsehEuMD.js → _Bqgtb-fc.js} +1 -1
  81. package/dist/public/assets/_Bqgtb-fc.js.br +0 -0
  82. package/dist/public/assets/_BtkDWVh9.js +1 -0
  83. package/dist/public/assets/{_zN8SypHW.js → _BvEJgNLp.js} +1 -1
  84. package/dist/public/assets/_BvEJgNLp.js.br +0 -0
  85. package/dist/public/assets/_BvYgAZl3.js +1 -0
  86. package/dist/public/assets/_C0Bfz_Is.js +1 -0
  87. package/dist/public/assets/_C1Aa6bJ9.js +1 -0
  88. package/dist/public/assets/_C3i3LRNx.js +1 -0
  89. package/dist/public/assets/_C4RHKQLq.js +1 -0
  90. package/dist/public/assets/{_DN7pTn2g.js → _C5Wk6L8u.js} +1 -1
  91. package/dist/public/assets/_C5Wk6L8u.js.br +0 -0
  92. package/dist/public/assets/_C7N1s7w_.js +1 -0
  93. package/dist/public/assets/_C7N1s7w_.js.br +0 -0
  94. package/dist/public/assets/_C96lrIeU.js +1 -0
  95. package/dist/public/assets/{_CPj_VL66.js → _CAhkFk0k.js} +1 -1
  96. package/dist/public/assets/_CAhkFk0k.js.br +0 -0
  97. package/dist/public/assets/{_bHL-NcWS.js → _CCmHKlXX.js} +1 -1
  98. package/dist/public/assets/_CCmHKlXX.js.br +0 -0
  99. package/dist/public/assets/{_DpbHp8yR.js → _CEY_n10t.js} +1 -1
  100. package/dist/public/assets/_CEY_n10t.js.br +0 -0
  101. package/dist/public/assets/_CEejNMib.js +1 -0
  102. package/dist/public/assets/_CFo4GZR9.js +1 -0
  103. package/dist/public/assets/{_Cmtl59QM.js → _CGH2Busx.js} +1 -1
  104. package/dist/public/assets/_CGH2Busx.js.br +0 -0
  105. package/dist/public/assets/{_DuyCZnNC.js → _CHwp4prQ.js} +1 -1
  106. package/dist/public/assets/_CHwp4prQ.js.br +0 -0
  107. package/dist/public/assets/{_C_D5TPb7.js → _CN7Wz2eA.js} +1 -1
  108. package/dist/public/assets/_CN7Wz2eA.js.br +0 -0
  109. package/dist/public/assets/_CP58TjsV.js +1 -0
  110. package/dist/public/assets/_CP58TjsV.js.br +0 -0
  111. package/dist/public/assets/_CPruMiA4.js +1 -0
  112. package/dist/public/assets/_CQEZuOE_.js +1 -0
  113. package/dist/public/assets/_CSMoDPwM.js +16 -0
  114. package/dist/public/assets/_CSMoDPwM.js.br +0 -0
  115. package/dist/public/assets/{_briyaWgK.js → _CVEabnQh.js} +1 -1
  116. package/dist/public/assets/_CVEabnQh.js.br +0 -0
  117. package/dist/public/assets/{_J1v2clxU.js → _CWTelCGM.js} +1 -1
  118. package/dist/public/assets/_CWTelCGM.js.br +0 -0
  119. package/dist/public/assets/_CXpplsaj.js +1 -0
  120. package/dist/public/assets/{_BhecGD7y.js → _CY0xLX0Y.js} +1 -1
  121. package/dist/public/assets/_CY0xLX0Y.js.br +0 -0
  122. package/dist/public/assets/{_dVHSDgPC.js → _CZNztOn6.js} +1 -1
  123. package/dist/public/assets/_CZNztOn6.js.br +0 -0
  124. package/dist/public/assets/{_Dtx52FYB.js → _Cabq459u.js} +1 -1
  125. package/dist/public/assets/_Cb593OOX.js +1 -0
  126. package/dist/public/assets/_Cbis2WSl.js +1 -0
  127. package/dist/public/assets/{_T5HFHZgl.js → _CeZa36O-.js} +1 -1
  128. package/dist/public/assets/_CeZa36O-.js.br +0 -0
  129. package/dist/public/assets/{_CCoTlnvb.js → _ChTMXnIu.js} +1 -1
  130. package/dist/public/assets/_ChTMXnIu.js.br +0 -0
  131. package/dist/public/assets/_Cig63HLr.js +1 -0
  132. package/dist/public/assets/_CjkPh72t.js +1 -0
  133. package/dist/public/assets/_Cm6nigjK.js +1 -0
  134. package/dist/public/assets/_CnAEQUMb.js +1 -0
  135. package/dist/public/assets/{_uCKs5N6Q.js → _Coroy2lI.js} +1 -1
  136. package/dist/public/assets/_Coroy2lI.js.br +0 -0
  137. package/dist/public/assets/_CpAeLnqO.js +1 -0
  138. package/dist/public/assets/_CpAeLnqO.js.br +0 -0
  139. package/dist/public/assets/_Cpkby1iI.js +1 -0
  140. package/dist/public/assets/_Cs0Q8LaN.js +1 -0
  141. package/dist/public/assets/_Ct2pbvTU.js +1 -0
  142. package/dist/public/assets/{_DWb03VKf.js → _CtC83UyG.js} +1 -1
  143. package/dist/public/assets/_CtC83UyG.js.br +0 -0
  144. package/dist/public/assets/_CtVSUTWd.js +1 -0
  145. package/dist/public/assets/_Ctf0pL3c.js +1 -0
  146. package/dist/public/assets/_CtvMc-Fn.js +1 -0
  147. package/dist/public/assets/_Cv7TctYK.js +1 -0
  148. package/dist/public/assets/_Cv7TctYK.js.br +0 -0
  149. package/dist/public/assets/{_DmoI4cIl.js → _CvKDzuxc.js} +1 -1
  150. package/dist/public/assets/_CvKDzuxc.js.br +0 -0
  151. package/dist/public/assets/_CvxhsaLv.js +1 -0
  152. package/dist/public/assets/_CwxTh04m.js +1 -0
  153. package/dist/public/assets/_CyMRBJfa.js +1 -0
  154. package/dist/public/assets/{_CdtjIoUd.js → _D-wwbDX7.js} +1 -1
  155. package/dist/public/assets/_D-wwbDX7.js.br +0 -0
  156. package/dist/public/assets/_D02jmNge.js +1 -0
  157. package/dist/public/assets/{_C1RigMYD.js → _D0gWUr-E.js} +1 -1
  158. package/dist/public/assets/_D0gWUr-E.js.br +0 -0
  159. package/dist/public/assets/_D2wtQpHN.js +1 -0
  160. package/dist/public/assets/_D2wtQpHN.js.br +0 -0
  161. package/dist/public/assets/_D3uCXh8z.js +2 -0
  162. package/dist/public/assets/_D3uCXh8z.js.br +0 -0
  163. package/dist/public/assets/_D5GW0gg0.js +1 -0
  164. package/dist/public/assets/_D5GW0gg0.js.br +0 -0
  165. package/dist/public/assets/{_BmpOmFbo.js → _D6YVA8vA.js} +1 -1
  166. package/dist/public/assets/_D6YVA8vA.js.br +0 -0
  167. package/dist/public/assets/_D85prZ-z.js +1 -0
  168. package/dist/public/assets/_D8QlsPTv.js +1 -0
  169. package/dist/public/assets/_D8QlsPTv.js.br +0 -0
  170. package/dist/public/assets/_D8rDqOqJ.js +1 -0
  171. package/dist/public/assets/{_1M3oZPSf.js → _DAcmaIgY.js} +1 -1
  172. package/dist/public/assets/_DAcmaIgY.js.br +0 -0
  173. package/dist/public/assets/_DBlahxfT.js +1 -0
  174. package/dist/public/assets/_DCPGqAo6.js +1 -0
  175. package/dist/public/assets/{_MHZgY1AQ.js → _DDBuDrkA.js} +1 -1
  176. package/dist/public/assets/_DDBuDrkA.js.br +0 -0
  177. package/dist/public/assets/_DDfwtidv.js +1 -0
  178. package/dist/public/assets/_DDfwtidv.js.br +0 -0
  179. package/dist/public/assets/_DEqzNO7a.js +1 -0
  180. package/dist/public/assets/_DEyhBnnd.js +1 -0
  181. package/dist/public/assets/{_DYUFCi44.js → _DG1LpTGX.js} +1 -1
  182. package/dist/public/assets/_DG1LpTGX.js.br +0 -0
  183. package/dist/public/assets/_DJK-MioE.js +1 -0
  184. package/dist/public/assets/{_DDcVFyaQ.js → _DLCgfhNS.js} +1 -1
  185. package/dist/public/assets/_DLCgfhNS.js.br +0 -0
  186. package/dist/public/assets/_DLYvRpNz.js +6 -0
  187. package/dist/public/assets/_DLYvRpNz.js.br +0 -0
  188. package/dist/public/assets/_DPzjUc1B.js +1 -0
  189. package/dist/public/assets/_DRDW7RgT.js +1 -0
  190. package/dist/public/assets/{_CHmEM8Sm.js → _DSoJ6ck3.js} +1 -1
  191. package/dist/public/assets/_DSoJ6ck3.js.br +0 -0
  192. package/dist/public/assets/{_C3fslTAD.js → _DW92UwGh.js} +1 -1
  193. package/dist/public/assets/_DW92UwGh.js.br +0 -0
  194. package/dist/public/assets/{_Bcc0Xs64.js → _DYIjiPYY.js} +1 -1
  195. package/dist/public/assets/_DYIjiPYY.js.br +0 -0
  196. package/dist/public/assets/_DZeeRtLs.js +1 -0
  197. package/dist/public/assets/{_XsB9KmcW.js → _DZzucnmx.js} +1 -1
  198. package/dist/public/assets/_DZzucnmx.js.br +0 -0
  199. package/dist/public/assets/{_EcMqP1xI.js → _D_AjKzkm.js} +1 -1
  200. package/dist/public/assets/_D_AjKzkm.js.br +0 -0
  201. package/dist/public/assets/{_DYhs8iJg.js → _DdVG8Rbg.js} +116 -116
  202. package/dist/public/assets/_DdVG8Rbg.js.br +0 -0
  203. package/dist/public/assets/{_BH9BIky6.js → _DdcPtDZz.js} +1 -1
  204. package/dist/public/assets/_DdcPtDZz.js.br +0 -0
  205. package/dist/public/assets/{_-7Amnss4.js → _De_msLFQ.js} +1 -1
  206. package/dist/public/assets/_De_msLFQ.js.br +0 -0
  207. package/dist/public/assets/_DeiCZJcm.js +1 -0
  208. package/dist/public/assets/_DeiCZJcm.js.br +0 -0
  209. package/dist/public/assets/{_CL8DzBla.js → _DfNM5GDo.js} +1 -1
  210. package/dist/public/assets/_DfNM5GDo.js.br +0 -0
  211. package/dist/public/assets/{_C7Y4xApK.js → _Dg6OsRrR.js} +1 -1
  212. package/dist/public/assets/_Dg6OsRrR.js.br +0 -0
  213. package/dist/public/assets/_DgrmX7cI.js +1 -0
  214. package/dist/public/assets/_DiPK_ps-.js +1 -0
  215. package/dist/public/assets/{_DbT6uo7W.js → _Dow17jzJ.js} +1 -1
  216. package/dist/public/assets/_Dow17jzJ.js.br +0 -0
  217. package/dist/public/assets/{_BtedGrGs.js → _DpSZYTyI.js} +1 -1
  218. package/dist/public/assets/_DpSZYTyI.js.br +0 -0
  219. package/dist/public/assets/_DpXO9fPK.js +1 -0
  220. package/dist/public/assets/_DpXO9fPK.js.br +0 -0
  221. package/dist/public/assets/{_DzNFlI0M.js → _DqiBcDpF.js} +1 -1
  222. package/dist/public/assets/_DqiBcDpF.js.br +0 -0
  223. package/dist/public/assets/_DqkJjiCU.js +1 -0
  224. package/dist/public/assets/{_ahCaQNeo.js → _Draa__tn.js} +1 -1
  225. package/dist/public/assets/_Draa__tn.js.br +0 -0
  226. package/dist/public/assets/_Drs3T7dh.js +1 -0
  227. package/dist/public/assets/_Drs3T7dh.js.br +0 -0
  228. package/dist/public/assets/_DtBGe4AJ.js +1 -0
  229. package/dist/public/assets/{_Dw1P6xZJ.js → _DxSnjCPi.js} +1 -1
  230. package/dist/public/assets/_DxSnjCPi.js.br +0 -0
  231. package/dist/public/assets/{_B9I2AEux.js → _DyEhTpVE.js} +1 -1
  232. package/dist/public/assets/_DyEhTpVE.js.br +0 -0
  233. package/dist/public/assets/{_D3IviZbJ.js → _DyFcXAXE.js} +1 -1
  234. package/dist/public/assets/_DyFcXAXE.js.br +0 -0
  235. package/dist/public/assets/_FPItrlZz.js +1 -0
  236. package/dist/public/assets/{_UZAFx6D8.js → _HGP7qpI4.js} +1 -1
  237. package/dist/public/assets/_HGP7qpI4.js.br +0 -0
  238. package/dist/public/assets/{_DCrPsldZ.js → _L-b7Vsug.js} +1 -1
  239. package/dist/public/assets/_L-b7Vsug.js.br +0 -0
  240. package/dist/public/assets/{_Cl7LTITm.js → _LWpc-K1g.js} +1 -1
  241. package/dist/public/assets/_LWpc-K1g.js.br +0 -0
  242. package/dist/public/assets/{_C-DhXiEm.js → _MwkLbzHQ.js} +1 -1
  243. package/dist/public/assets/_MwkLbzHQ.js.br +0 -0
  244. package/dist/public/assets/_O4DIriLZ.js +1 -0
  245. package/dist/public/assets/{_YoXk_8Bl.js → _T0Ktx7Km.js} +1 -1
  246. package/dist/public/assets/_T0Ktx7Km.js.br +0 -0
  247. package/dist/public/assets/_T6O8KX0b.js +1 -0
  248. package/dist/public/assets/_TWZgGi12.js +1 -0
  249. package/dist/public/assets/{_C-BYkx5h.js → _UBgRR4E9.js} +1 -1
  250. package/dist/public/assets/_UBgRR4E9.js.br +0 -0
  251. package/dist/public/assets/_X3T0JcUM.js +87 -0
  252. package/dist/public/assets/_X3T0JcUM.js.br +0 -0
  253. package/dist/public/assets/_YtP2gTmD.js +1 -0
  254. package/dist/public/assets/{_BQW1kIop.js → __1UtPhZb.js} +1 -1
  255. package/dist/public/assets/__1UtPhZb.js.br +0 -0
  256. package/dist/public/assets/__WDcLOp3.js +1 -0
  257. package/dist/public/assets/{_CIfCdAzS.js → __cyNMcUU.js} +1 -1
  258. package/dist/public/assets/{_BPDSQUbl.js → _csFWQzWs.js} +1 -1
  259. package/dist/public/assets/_csFWQzWs.js.br +0 -0
  260. package/dist/public/assets/_eURsGF_D.js +1 -0
  261. package/dist/public/assets/_fEPizk9T.js +1 -0
  262. package/dist/public/assets/{_B9xuaMHt.js → _hC5RUmrf.js} +1 -1
  263. package/dist/public/assets/_hC5RUmrf.js.br +0 -0
  264. package/dist/public/assets/_hfgYVPfe.js +1 -0
  265. package/dist/public/assets/_i51v5tw8.js +1 -0
  266. package/dist/public/assets/{_CuglAToi.js → _k1uZxEJ-.js} +1 -1
  267. package/dist/public/assets/_k1uZxEJ-.js.br +0 -0
  268. package/dist/public/assets/_l4nNKr9o.js +1 -0
  269. package/dist/public/assets/{_D7qWWxdI.js → _lA6BOkV1.js} +1 -1
  270. package/dist/public/assets/_lA6BOkV1.js.br +0 -0
  271. package/dist/public/assets/_qyrPXpIj.js +1 -0
  272. package/dist/public/assets/{_Bt03HU8S.js → _sLUOjXIk.js} +1 -1
  273. package/dist/public/assets/{_G1BLeMns.js → _sjeWoc5X.js} +1 -1
  274. package/dist/public/assets/_sjeWoc5X.js.br +0 -0
  275. package/dist/public/assets/_tByKwKUc.js +1 -0
  276. package/dist/public/assets/{_G8KNSVdM.js → _tFVcmmKI.js} +1 -1
  277. package/dist/public/assets/_tFVcmmKI.js.br +0 -0
  278. package/dist/public/assets/{_Ctjz3BD9.js → _txvO7pXr.js} +1 -1
  279. package/dist/public/assets/_txvO7pXr.js.br +0 -0
  280. package/dist/public/assets/_um7Vy7NX.js +1 -0
  281. package/dist/public/assets/_veNUvOqP.js +1 -0
  282. package/dist/public/assets/{_DSCqWPO0.js → _w8hTnp0H.js} +1 -1
  283. package/dist/public/assets/_w8hTnp0H.js.br +0 -0
  284. package/dist/public/assets/_wGWNa6Sp.js +1 -0
  285. package/dist/public/assets/_wxbEv1JK.js +1 -0
  286. package/dist/public/assets/files-view-BOE5HTrF.js +2 -0
  287. package/dist/public/assets/manage-workspace-ClwsrQ4a.js +2 -0
  288. package/dist/public/assets/new-CJ6ZElay.js +1 -0
  289. package/dist/public/assets/new-workspace-DWSBO4Vx.js +2 -0
  290. package/dist/public/assets/review-view-DffAZHOz.js +2 -0
  291. package/dist/public/assets/settings-CJ6ZElay.js +1 -0
  292. package/dist/public/assets/settings-page-CYL_T3Vf.js +2 -0
  293. package/dist/public/assets/styles-taHUfRpm.css +1 -0
  294. package/dist/public/assets/styles-taHUfRpm.css.br +0 -0
  295. package/dist/public/assets/w-CJ6ZElay.js +1 -0
  296. package/dist/public/assets/w._-CJ6ZElay.js +1 -0
  297. package/dist/public/assets/w._-ChCIRlhY.js +1 -0
  298. package/dist/public/assets/w._-WsR2-skZ.js +1 -0
  299. package/package.json +1 -1
  300. package/dist/_L2HNAA_8.js +0 -2
  301. package/dist/__TCdgPY5.js +0 -173
  302. package/dist/public/assets/_-7Amnss4.js.br +0 -0
  303. package/dist/public/assets/_0XXNUttq.js +0 -1
  304. package/dist/public/assets/_0sTkxfPx.js.br +0 -0
  305. package/dist/public/assets/_0zzYbK0A.js +0 -1
  306. package/dist/public/assets/_1M3oZPSf.js.br +0 -0
  307. package/dist/public/assets/_2O5HnHht.js +0 -1
  308. package/dist/public/assets/_7WlUaJPH.js +0 -1
  309. package/dist/public/assets/_8Tr7ByPg.js +0 -1
  310. package/dist/public/assets/_9AXMmQSO.js +0 -1
  311. package/dist/public/assets/_B1VqbV-X.js +0 -1
  312. package/dist/public/assets/_B9I2AEux.js.br +0 -0
  313. package/dist/public/assets/_B9xuaMHt.js.br +0 -0
  314. package/dist/public/assets/_BAWjkhA8.js.br +0 -0
  315. package/dist/public/assets/_BBCzcNZY.js.br +0 -0
  316. package/dist/public/assets/_BBW2szHh.js +0 -1
  317. package/dist/public/assets/_BCP2Njnu.js +0 -1
  318. package/dist/public/assets/_BClUYs-k.js.br +0 -0
  319. package/dist/public/assets/_BDdZkZRc.js +0 -1
  320. package/dist/public/assets/_BDdZkZRc.js.br +0 -0
  321. package/dist/public/assets/_BEDmGSgS.js +0 -1
  322. package/dist/public/assets/_BEDmGSgS.js.br +0 -0
  323. package/dist/public/assets/_BH9BIky6.js.br +0 -0
  324. package/dist/public/assets/_BLdi8Ee5.js +0 -1
  325. package/dist/public/assets/_BPDSQUbl.js.br +0 -0
  326. package/dist/public/assets/_BQW1kIop.js.br +0 -0
  327. package/dist/public/assets/_BQeoUfFw.js +0 -1
  328. package/dist/public/assets/_BRzroLbh.js +0 -1
  329. package/dist/public/assets/_BSXsTYSe.js +0 -1
  330. package/dist/public/assets/_BTXDT3Na.js +0 -1
  331. package/dist/public/assets/_BXm4xeFI.js +0 -1
  332. package/dist/public/assets/_BY8UeogK.js +0 -1
  333. package/dist/public/assets/_BYpyhp64.js +0 -1
  334. package/dist/public/assets/_BYpyhp64.js.br +0 -0
  335. package/dist/public/assets/_B_Kz7LnY.js +0 -1
  336. package/dist/public/assets/_Bcc0Xs64.js.br +0 -0
  337. package/dist/public/assets/_BdSsUhCi.js.br +0 -0
  338. package/dist/public/assets/_BdaWssEH.js +0 -1
  339. package/dist/public/assets/_BhecGD7y.js.br +0 -0
  340. package/dist/public/assets/_Bj9dpPhN.js +0 -1
  341. package/dist/public/assets/_BjZqS7za.js +0 -1
  342. package/dist/public/assets/_BjZqS7za.js.br +0 -0
  343. package/dist/public/assets/_BkSUiyHK.js +0 -1
  344. package/dist/public/assets/_BlshXH2Y.js +0 -16
  345. package/dist/public/assets/_BlshXH2Y.js.br +0 -0
  346. package/dist/public/assets/_BmX-VP7w.js +0 -1
  347. package/dist/public/assets/_BmpOmFbo.js.br +0 -0
  348. package/dist/public/assets/_Bo6YntUl.js +0 -1
  349. package/dist/public/assets/_BprZx4vg.js +0 -2
  350. package/dist/public/assets/_BprZx4vg.js.br +0 -0
  351. package/dist/public/assets/_Bqm7OnIV.js +0 -1
  352. package/dist/public/assets/_BquBGUNK.js +0 -1
  353. package/dist/public/assets/_BquBGUNK.js.br +0 -0
  354. package/dist/public/assets/_BrB66aRZ.js +0 -1
  355. package/dist/public/assets/_BtedGrGs.js.br +0 -0
  356. package/dist/public/assets/_C-BYkx5h.js.br +0 -0
  357. package/dist/public/assets/_C-DhXiEm.js.br +0 -0
  358. package/dist/public/assets/_C-NBFnST.js +0 -1
  359. package/dist/public/assets/_C1RigMYD.js.br +0 -0
  360. package/dist/public/assets/_C2vRS-ES.js +0 -1
  361. package/dist/public/assets/_C3fslTAD.js.br +0 -0
  362. package/dist/public/assets/_C4EYjWGn.js +0 -1
  363. package/dist/public/assets/_C4EYjWGn.js.br +0 -0
  364. package/dist/public/assets/_C6Yt6h_R.js.br +0 -0
  365. package/dist/public/assets/_C7Y4xApK.js.br +0 -0
  366. package/dist/public/assets/_CB52LkYt.js.br +0 -0
  367. package/dist/public/assets/_CBEKHwUV.js.br +0 -0
  368. package/dist/public/assets/_CBSLBYQF.js +0 -1
  369. package/dist/public/assets/_CBgzBB_k.js +0 -1
  370. package/dist/public/assets/_CBgzBB_k.js.br +0 -0
  371. package/dist/public/assets/_CCoTlnvb.js.br +0 -0
  372. package/dist/public/assets/_CD26To-f.js +0 -1
  373. package/dist/public/assets/_CDyWgQ0v.js +0 -6
  374. package/dist/public/assets/_CDyWgQ0v.js.br +0 -0
  375. package/dist/public/assets/_CEC5O89D.js.br +0 -0
  376. package/dist/public/assets/_CF2kEAU7.js +0 -1
  377. package/dist/public/assets/_CFURqbmO.js +0 -1
  378. package/dist/public/assets/_CG383oZY.js.br +0 -0
  379. package/dist/public/assets/_CHNJosg3.js +0 -1
  380. package/dist/public/assets/_CHmEM8Sm.js.br +0 -0
  381. package/dist/public/assets/_CKyzH0fl.js +0 -1
  382. package/dist/public/assets/_CL8DzBla.js.br +0 -0
  383. package/dist/public/assets/_CNYS94C5.js +0 -1
  384. package/dist/public/assets/_CNhypHJN.js +0 -1
  385. package/dist/public/assets/_CO-FkxlA.js +0 -1
  386. package/dist/public/assets/_COiGBSpO.js +0 -1
  387. package/dist/public/assets/_COvolvRQ.js +0 -1
  388. package/dist/public/assets/_CPaMvBMG.js.br +0 -0
  389. package/dist/public/assets/_CPj_VL66.js.br +0 -0
  390. package/dist/public/assets/_CQJC8Vx4.js +0 -1
  391. package/dist/public/assets/_CRHNlzBC.js +0 -1
  392. package/dist/public/assets/_CToqok6Q.js.br +0 -0
  393. package/dist/public/assets/_CUFKkl0B.js +0 -1
  394. package/dist/public/assets/_CZsOUa-q.js +0 -1
  395. package/dist/public/assets/_C_D5TPb7.js.br +0 -0
  396. package/dist/public/assets/_CdHI48v6.js +0 -1
  397. package/dist/public/assets/_CdpmkkzR.js +0 -1
  398. package/dist/public/assets/_CdpmkkzR.js.br +0 -0
  399. package/dist/public/assets/_CdtjIoUd.js.br +0 -0
  400. package/dist/public/assets/_Ce9Tv01m.js +0 -1
  401. package/dist/public/assets/_CeC7Lv10.js +0 -1
  402. package/dist/public/assets/_CfP0f0PU.js.br +0 -0
  403. package/dist/public/assets/_Cg7DH3xk.js +0 -1
  404. package/dist/public/assets/_Cg7DH3xk.js.br +0 -0
  405. package/dist/public/assets/_CikNq0z8.js +0 -1
  406. package/dist/public/assets/_Cl7LTITm.js.br +0 -0
  407. package/dist/public/assets/_Cmtl59QM.js.br +0 -0
  408. package/dist/public/assets/_CshYq_Dp.js +0 -1
  409. package/dist/public/assets/_CspPbDoP.js.br +0 -0
  410. package/dist/public/assets/_Ctjz3BD9.js.br +0 -0
  411. package/dist/public/assets/_CuglAToi.js.br +0 -0
  412. package/dist/public/assets/_CwSoAVRN.js +0 -1
  413. package/dist/public/assets/_D0XQV-Hm.js +0 -1
  414. package/dist/public/assets/_D36PnqCD.js +0 -1
  415. package/dist/public/assets/_D36PnqCD.js.br +0 -0
  416. package/dist/public/assets/_D3IviZbJ.js.br +0 -0
  417. package/dist/public/assets/_D6rgUB9O.js +0 -1
  418. package/dist/public/assets/_D7qWWxdI.js.br +0 -0
  419. package/dist/public/assets/_D8ac72_O.js.br +0 -0
  420. package/dist/public/assets/_D9WWxrQR.js +0 -1
  421. package/dist/public/assets/_D9hI5dSA.js +0 -1
  422. package/dist/public/assets/_DCrPsldZ.js.br +0 -0
  423. package/dist/public/assets/_DDcVFyaQ.js.br +0 -0
  424. package/dist/public/assets/_DDhkKo8Q.js +0 -1
  425. package/dist/public/assets/_DJBR8Qwq.js.br +0 -0
  426. package/dist/public/assets/_DLpa6VYT.js +0 -1
  427. package/dist/public/assets/_DMqe6rR-.js +0 -1
  428. package/dist/public/assets/_DN7pTn2g.js.br +0 -0
  429. package/dist/public/assets/_DP8UuFuJ.js +0 -1
  430. package/dist/public/assets/_DQedUaqM.js +0 -1
  431. package/dist/public/assets/_DSCqWPO0.js.br +0 -0
  432. package/dist/public/assets/_DSeQngGR.js.br +0 -0
  433. package/dist/public/assets/_DTNiWZFr.js.br +0 -0
  434. package/dist/public/assets/_DThlusXY.js +0 -1
  435. package/dist/public/assets/_DUK16H19.js +0 -1
  436. package/dist/public/assets/_DUZ13t3U.js +0 -1
  437. package/dist/public/assets/_DWb03VKf.js.br +0 -0
  438. package/dist/public/assets/_DWsyhfgn.js +0 -1
  439. package/dist/public/assets/_DXuzYhW6.js +0 -1
  440. package/dist/public/assets/_DXyOzA2b.js +0 -1
  441. package/dist/public/assets/_DYUFCi44.js.br +0 -0
  442. package/dist/public/assets/_DYhs8iJg.js.br +0 -0
  443. package/dist/public/assets/_D__ojGam.js.br +0 -0
  444. package/dist/public/assets/_DaFI_W5D.js +0 -1
  445. package/dist/public/assets/_DbT6uo7W.js.br +0 -0
  446. package/dist/public/assets/_DhnT0cCE.js +0 -1
  447. package/dist/public/assets/_Dm9OGn2q.js +0 -1
  448. package/dist/public/assets/_DmkeGFoM.js +0 -1
  449. package/dist/public/assets/_DmoI4cIl.js.br +0 -0
  450. package/dist/public/assets/_DpbHp8yR.js.br +0 -0
  451. package/dist/public/assets/_Dqz_HBE1.js +0 -1
  452. package/dist/public/assets/_DsehEuMD.js.br +0 -0
  453. package/dist/public/assets/_DuEyirL6.js +0 -1
  454. package/dist/public/assets/_DuuloSIi.js +0 -1
  455. package/dist/public/assets/_DuyCZnNC.js.br +0 -0
  456. package/dist/public/assets/_Dw1P6xZJ.js.br +0 -0
  457. package/dist/public/assets/_DzNFlI0M.js.br +0 -0
  458. package/dist/public/assets/_EcMqP1xI.js.br +0 -0
  459. package/dist/public/assets/_G1BLeMns.js.br +0 -0
  460. package/dist/public/assets/_G8KNSVdM.js.br +0 -0
  461. package/dist/public/assets/_J1v2clxU.js.br +0 -0
  462. package/dist/public/assets/_J3wdy6bJ.js.br +0 -0
  463. package/dist/public/assets/_MHZgY1AQ.js.br +0 -0
  464. package/dist/public/assets/_NHTZitq1.js +0 -2
  465. package/dist/public/assets/_NHTZitq1.js.br +0 -0
  466. package/dist/public/assets/_PsuNqRL9.js +0 -86
  467. package/dist/public/assets/_PsuNqRL9.js.br +0 -0
  468. package/dist/public/assets/_T5HFHZgl.js.br +0 -0
  469. package/dist/public/assets/_UZAFx6D8.js.br +0 -0
  470. package/dist/public/assets/_XA8_RQXF.js +0 -1
  471. package/dist/public/assets/_XsB9KmcW.js.br +0 -0
  472. package/dist/public/assets/_YoXk_8Bl.js.br +0 -0
  473. package/dist/public/assets/_YubCdy3Z.js +0 -1
  474. package/dist/public/assets/_ahCaQNeo.js.br +0 -0
  475. package/dist/public/assets/_bDI-pCZR.js.br +0 -0
  476. package/dist/public/assets/_bHL-NcWS.js.br +0 -0
  477. package/dist/public/assets/_bqRzDYc8.js +0 -1
  478. package/dist/public/assets/_briyaWgK.js.br +0 -0
  479. package/dist/public/assets/_dVHSDgPC.js.br +0 -0
  480. package/dist/public/assets/_gkZjZ9I4.js +0 -1
  481. package/dist/public/assets/_plyCYAnN.js +0 -1
  482. package/dist/public/assets/_q0Z44mWJ.js +0 -1
  483. package/dist/public/assets/_q0Z44mWJ.js.br +0 -0
  484. package/dist/public/assets/_qAsGEOt5.js +0 -1
  485. package/dist/public/assets/_qAsGEOt5.js.br +0 -0
  486. package/dist/public/assets/_uCKs5N6Q.js.br +0 -0
  487. package/dist/public/assets/_utWnC80Q.js +0 -1
  488. package/dist/public/assets/_utvzcBHT.js +0 -1
  489. package/dist/public/assets/_v8WbCPI8.js +0 -1
  490. package/dist/public/assets/_yK4b_Bl5.js +0 -1
  491. package/dist/public/assets/_yoQW4BY5.js +0 -1
  492. package/dist/public/assets/_zB6USXHX.js +0 -1
  493. package/dist/public/assets/_zN8SypHW.js.br +0 -0
  494. package/dist/public/assets/files-view-Fl0rU3Ns.js +0 -2
  495. package/dist/public/assets/manage-workspace-DggRcsXf.js +0 -2
  496. package/dist/public/assets/new-C7NxTJAT.js +0 -1
  497. package/dist/public/assets/new-workspace-C0pw5Iz1.js +0 -2
  498. package/dist/public/assets/review-view-C4YQ0J-X.js +0 -2
  499. package/dist/public/assets/settings-C7NxTJAT.js +0 -1
  500. package/dist/public/assets/settings-page-Cl_1tWCv.js +0 -2
  501. package/dist/public/assets/styles-Vcsj4CA7.css +0 -1
  502. package/dist/public/assets/styles-Vcsj4CA7.css.br +0 -0
  503. package/dist/public/assets/w-C7NxTJAT.js +0 -1
  504. package/dist/public/assets/w._-BbFH2lR-.js +0 -1
  505. package/dist/public/assets/w._-C7NxTJAT.js +0 -1
  506. package/dist/public/assets/w._-YIzLOiyZ.js +0 -1
@@ -0,0 +1,2 @@
1
+ import { y as notifySessionsChanged } from "./_Hb3LeA5Q.js";
2
+ export { notifySessionsChanged };
@@ -0,0 +1,2 @@
1
+ import { p as teamsOf } from "./_C9c_BxRk.js";
2
+ export { teamsOf };
@@ -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)) notify(sessionId, "done");
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 FROM sessions s
8428
- JOIN workspaces w ON w.id = s.workspace_id WHERE s.id = ?`, sessionId);
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("./_L2HNAA_8.js").then((m) => m.notifySessionsChanged(workspaceId));
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, parent) {
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 parentId = parent && getSession(parent)?.workspace_id === workspaceId ? parent : null;
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
- async function killSession(id) {
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
- await disposeSession(session.id);
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.agent, wsPath, initialPrompt)
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(agent, cwd, initialPrompt) {
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 = [...words, ...agentLaunchFlags(agent, { cwd })].map(shellQuote);
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 { agentBadge as $, FRAME_ANCESTORS as $t, realInsideSync as A, doctor as At, noteTyped as B, enableUntrackedCache as Bt, tmuxName as C, enabledAgents as Ct, reportsWorking as D, setPref as Dt, readHookPayload as E, setDisabledAgents as Et, hookReportedAt as F, stableGh as Ft, sessionWatched as G, PROJECT_TOOLS as Gt, notifyEventOn as H, untrackedCacheAllowed as Ht, interruptedSinceReport as I, tilde as It, setScrapedPhase as J, agentLabel$1 as Jt, setAgentPhase as K, TOOLS as Kt, lastTypedAt as L, which as Lt, agentPhase as M, miseInstalls as Mt, clearAgentPhase as N, miseVersions as Nt, inside as O, setSetting as Ot, hookPhase as P, setupPath as Pt, turnSettling as Q, applyPrefChange as Qt, noteBackground as R, hostReach as Rt, sessionStates as S, disabledAgents as St, AGENTS as T, preferredAgent as Tt, onPhaseChange as U, firewallProbe as Ut, noteUserAnswered as V, unsetCaches as Vt, onTurnEnd as W, DEFAULT_GITHUB_HOST as Wt, settleQuietWorking as X, parseAgentId as Xt, setSessionViewers as Y, catalogPin as Yt, turnPhase as Z, toolById as Zt, notifySessionsChanged as _, tmux as _n, agentChoices as _t, creationOf as a, publishJson as an, getInstance as at, renameSession as b, swr as bn, deleteSetting as bt, forgetPanes as c, all as cn, normalizeAccent as ct, killWorkspaceSessions as d, workspacePath as dn, pushPublicKey as dt, FRAME_HEADERS as en, agentFamily as et, listPanes as f, TMUX_SOCKET as fn, saveSubscription as ft, newSessionArgs as g, run$2 as gn, WORKSPACE_PREFS as gt, markTmuxStarted as h, gitEnv as hn, PREF_MAX as ht, createSession as i, publish as in, ACCENT_RE as it, blankRow as j, ghKnownHosts as jt, realInside as k, discoverAgents as kt, getSession as l, db as ln, setInstance as lt, listSessions as m, git as mn, validSubscription as mt, cleanEnv as n, httpError as nn, agentLabel as nt, disposeSessions as o, subscribe as on, iconSvg as ot, listPanesWithin as p, gh as pn, sendPush as pt, setExpecting as q, agentById as qt, clearTmuxStarted as r, readBody as rn, agentMeta as rt, ensureTmuxServer as s, subscriberCount as sn, manifest as st, beginCreation as t, checked as tn, agentFromCommand as tt, killSession as u, get as un, deleteSubscription as ut, onSessionDispose as v, config as vn, allPrefs as vt, tmuxWasStarted as w, getSetting as wt, sendToSession as x, withLock as xn, deleteWorkspacePrefs as xt, panePids as y, shared as yn, changePref as yt, noteInterrupt as z, unreachableText as zt };
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 };