@dylanpiercey/work 0.2.53 → 0.2.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/bin/cli/session.mjs +153 -18
  2. package/bin/work.mjs +2 -32
  3. package/dist/{_tAkj84_m.js → _CKxRXoHK.js} +75 -75
  4. package/dist/_CVNGN2QO.js +2 -0
  5. package/dist/{_CWO9RtPZ.js → _CZ4mgOdb.js} +203 -44
  6. package/dist/{_ByxSq8zO.js → _Cb_JPQ7K.js} +371 -59
  7. package/dist/_hjIYs3Gy.js +2 -0
  8. package/dist/index.mjs +1352 -1200
  9. package/dist/public/assets/{_BWhs553r.js → _0YT2d3LY.js} +1 -1
  10. package/dist/public/assets/_0YT2d3LY.js.br +0 -0
  11. package/dist/public/assets/{_DVbq8rez.js → _0rKvhqMi.js} +1 -1
  12. package/dist/public/assets/_0rKvhqMi.js.br +0 -0
  13. package/dist/public/assets/_5PI2fZS8.js +1 -0
  14. package/dist/public/assets/_72zzTyhJ.js +1 -0
  15. package/dist/public/assets/_91-k5tQx.js +1 -0
  16. package/dist/public/assets/{_DjIcKKrW.js → _AIdFuyL9.js} +1 -1
  17. package/dist/public/assets/_AIdFuyL9.js.br +0 -0
  18. package/dist/public/assets/{_D_qMHeyF.js → _AtwdfMkh.js} +1 -1
  19. package/dist/public/assets/_AtwdfMkh.js.br +0 -0
  20. package/dist/public/assets/_B1qplI2K.js +1 -0
  21. package/dist/public/assets/_B29W737t.js +1 -0
  22. package/dist/public/assets/{_UM6RqjfN.js → _B56DMc1H.js} +1 -1
  23. package/dist/public/assets/_B56DMc1H.js.br +0 -0
  24. package/dist/public/assets/_B8Bw484t.js +1 -0
  25. package/dist/public/assets/{_CT3v6Oze.js → _BA2Lowt-.js} +1 -1
  26. package/dist/public/assets/_BA2Lowt-.js.br +0 -0
  27. package/dist/public/assets/_BBF2mdRO.js +1 -0
  28. package/dist/public/assets/{_DFjGajU7.js → _BDCDGYHw.js} +1 -1
  29. package/dist/public/assets/_BDR1eJ6l.js +1 -0
  30. package/dist/public/assets/_BDppKLVj.js +1 -0
  31. package/dist/public/assets/{_Cn8rkyXq.js → _BFAY4fG9.js} +1 -1
  32. package/dist/public/assets/_BFAY4fG9.js.br +0 -0
  33. package/dist/public/assets/{_CeSQyrMz.js → _BGn8HXYq.js} +1 -1
  34. package/dist/public/assets/_BGn8HXYq.js.br +0 -0
  35. package/dist/public/assets/{_CfPha1FH.js → _BJ3_jYoD.js} +1 -1
  36. package/dist/public/assets/_BJ3_jYoD.js.br +0 -0
  37. package/dist/public/assets/_BJqpx-Y1.js +1 -0
  38. package/dist/public/assets/{_CnWm9a_o.js → _BOQ3PwKZ.js} +1 -1
  39. package/dist/public/assets/_BOQ3PwKZ.js.br +0 -0
  40. package/dist/public/assets/{_dZl98lyu.js → _BOXau4gS.js} +1 -1
  41. package/dist/public/assets/_BOXau4gS.js.br +0 -0
  42. package/dist/public/assets/{_Dho8D73M.js → _BPbX8cFz.js} +1 -1
  43. package/dist/public/assets/_BPbX8cFz.js.br +0 -0
  44. package/dist/public/assets/{_YIEXDh5T.js → _BT2Sj_YW.js} +4 -4
  45. package/dist/public/assets/_BT2Sj_YW.js.br +0 -0
  46. package/dist/public/assets/_BUvcY7QT.js +1 -0
  47. package/dist/public/assets/_BVeS3UXr.js +1 -0
  48. package/dist/public/assets/{_Er1jCr0y.js → _BYO4bphw.js} +1 -1
  49. package/dist/public/assets/_BYO4bphw.js.br +0 -0
  50. package/dist/public/assets/_BYYFg9LD.js +1 -0
  51. package/dist/public/assets/{_SNGXdx8T.js → _BZmB54mR.js} +1 -1
  52. package/dist/public/assets/_BZmB54mR.js.br +0 -0
  53. package/dist/public/assets/{_DVuEGjB6.js → _B_WzjbZc.js} +1 -1
  54. package/dist/public/assets/_B_WzjbZc.js.br +0 -0
  55. package/dist/public/assets/{_DahEvrx7.js → _B_mZh-m9.js} +1 -1
  56. package/dist/public/assets/_B_mZh-m9.js.br +0 -0
  57. package/dist/public/assets/_Bawb2dbh.js +1 -0
  58. package/dist/public/assets/{_CZyU6zlW.js → _BcWvsmRe.js} +4 -4
  59. package/dist/public/assets/_BcWvsmRe.js.br +0 -0
  60. package/dist/public/assets/{_D4yHrw0x.js → _BeA1nKaN.js} +1 -1
  61. package/dist/public/assets/_BeA1nKaN.js.br +0 -0
  62. package/dist/public/assets/{_Z8XAsbav.js → _BeZ7pjQV.js} +1 -1
  63. package/dist/public/assets/_BeZ7pjQV.js.br +0 -0
  64. package/dist/public/assets/{_CoVyqWOC.js → _BgV7K2cf.js} +1 -1
  65. package/dist/public/assets/_BgV7K2cf.js.br +0 -0
  66. package/dist/public/assets/{_B23iifIa.js → _BgtzrIGU.js} +1 -1
  67. package/dist/public/assets/_BgtzrIGU.js.br +0 -0
  68. package/dist/public/assets/{_CCuLPWZW.js → _BiNobkT0.js} +1 -1
  69. package/dist/public/assets/_BiNobkT0.js.br +0 -0
  70. package/dist/public/assets/_BihgYQ-n.js +1 -0
  71. package/dist/public/assets/{_53vvCtB9.js → _BjTM0FyT.js} +1 -1
  72. package/dist/public/assets/_BjTM0FyT.js.br +0 -0
  73. package/dist/public/assets/{_DWn9Bk4p.js → _Bjib9M1A.js} +1 -1
  74. package/dist/public/assets/_Bjib9M1A.js.br +0 -0
  75. package/dist/public/assets/_BkhLTI27.js +1 -0
  76. package/dist/public/assets/{_BJxnfQcd.js → _BmaXli3m.js} +1 -1
  77. package/dist/public/assets/_BmaXli3m.js.br +0 -0
  78. package/dist/public/assets/{_Dtj0n4Ea.js → _BmwvMhWC.js} +1 -1
  79. package/dist/public/assets/_BmwvMhWC.js.br +0 -0
  80. package/dist/public/assets/{_I-rWUgTm.js → _Bo0K9EaI.js} +1 -1
  81. package/dist/public/assets/_Bo0K9EaI.js.br +0 -0
  82. package/dist/public/assets/{_BZDlyKDT.js → _BqTF3ARG.js} +1 -1
  83. package/dist/public/assets/_BqTF3ARG.js.br +0 -0
  84. package/dist/public/assets/_BrMbTp16.js +1 -0
  85. package/dist/public/assets/{_BqPqaeUo.js → _BsaOdWyz.js} +1 -1
  86. package/dist/public/assets/_BsaOdWyz.js.br +0 -0
  87. package/dist/public/assets/_Bt-nevYL.js +1 -0
  88. package/dist/public/assets/{_dhxtcjZT.js → _BtCTUxzJ.js} +1 -1
  89. package/dist/public/assets/_BtCTUxzJ.js.br +0 -0
  90. package/dist/public/assets/{_DdpvFyoD.js → _BvtRBlS4.js} +1 -1
  91. package/dist/public/assets/_BvtRBlS4.js.br +0 -0
  92. package/dist/public/assets/_C0OkE91l.js +1 -0
  93. package/dist/public/assets/{_B7RTaeWh.js → _C0Qul9-A.js} +5 -5
  94. package/dist/public/assets/_C0Qul9-A.js.br +0 -0
  95. package/dist/public/assets/_C0rT0pkF.js +1 -0
  96. package/dist/public/assets/_C3CmAkGd.js +1 -0
  97. package/dist/public/assets/{_DgFgoB4_.js → _C3CvDqAU.js} +1 -1
  98. package/dist/public/assets/_C3CvDqAU.js.br +0 -0
  99. package/dist/public/assets/{_BndAJZwW.js → _C3JqzX6h.js} +1 -1
  100. package/dist/public/assets/_C3JqzX6h.js.br +0 -0
  101. package/dist/public/assets/{_3IZOU36R.js → _C4ANqjUO.js} +1 -1
  102. package/dist/public/assets/_C4ANqjUO.js.br +0 -0
  103. package/dist/public/assets/_C5DH9oOf.js +1 -0
  104. package/dist/public/assets/_C5sFdYe9.js +1 -0
  105. package/dist/public/assets/{_ahnzi6Vi.js → _C74hoXSg.js} +1 -1
  106. package/dist/public/assets/_C74hoXSg.js.br +0 -0
  107. package/dist/public/assets/_CCTo-C_5.js +1 -0
  108. package/dist/public/assets/_CDcdmiKC.js +1 -0
  109. package/dist/public/assets/_CDqJPzG_.js +1 -0
  110. package/dist/public/assets/{_I1G0J8iR.js → _CH4FVzly.js} +1 -1
  111. package/dist/public/assets/_CH4FVzly.js.br +0 -0
  112. package/dist/public/assets/_CHRtfQm8.js +1 -0
  113. package/dist/public/assets/_CHnN1OUE.js +1 -0
  114. package/dist/public/assets/_CKLCZ7qS.js +1 -0
  115. package/dist/public/assets/{_ezrIBxd5.js → _CMZsgNPc.js} +1 -1
  116. package/dist/public/assets/_CMZsgNPc.js.br +0 -0
  117. package/dist/public/assets/_CNbdL75e.js +1 -0
  118. package/dist/public/assets/_CQsxBQYp.js +1 -0
  119. package/dist/public/assets/{_BqZMlemw.js → _CSSUf_cF.js} +1 -1
  120. package/dist/public/assets/_CSSUf_cF.js.br +0 -0
  121. package/dist/public/assets/_CV0JELaI.js +1 -0
  122. package/dist/public/assets/_CVcEXbq2.js +1 -0
  123. package/dist/public/assets/_CY7yLV4X.js +1 -0
  124. package/dist/public/assets/{_Bu5hgjmu.js → _CYtI3ZUO.js} +1 -1
  125. package/dist/public/assets/_CYtI3ZUO.js.br +0 -0
  126. package/dist/public/assets/_CZ0oEQzb.js +1 -0
  127. package/dist/public/assets/_CZeCHesq.js +1 -0
  128. package/dist/public/assets/_CZei_-4z.js +1 -0
  129. package/dist/public/assets/{_Dzml7-SO.js → _CcWLzdOn.js} +1 -1
  130. package/dist/public/assets/_CcWLzdOn.js.br +0 -0
  131. package/dist/public/assets/{_Bsdn_9V_.js → _Ccwh6_69.js} +9 -9
  132. package/dist/public/assets/_Ccwh6_69.js.br +0 -0
  133. package/dist/public/assets/{_D-7MOklF.js → _CdmLszaF.js} +1 -1
  134. package/dist/public/assets/_CdmLszaF.js.br +0 -0
  135. package/dist/public/assets/_CdvRIoSW.js +1 -0
  136. package/dist/public/assets/{_CeKaED0O.js → _CeWEms2G.js} +1 -1
  137. package/dist/public/assets/{_Cyqw1SYV.js → _CkYsst7o.js} +1 -1
  138. package/dist/public/assets/_CkYsst7o.js.br +0 -0
  139. package/dist/public/assets/{_bgVS_jjB.js → _ClTXG9so.js} +1 -1
  140. package/dist/public/assets/_ClUpRbMG.js +1 -0
  141. package/dist/public/assets/{_CJBfnXPc.js → _ClapXxZl.js} +1 -1
  142. package/dist/public/assets/_ClapXxZl.js.br +0 -0
  143. package/dist/public/assets/{_B704FqW-.js → _CoaJtMCC.js} +1 -1
  144. package/dist/public/assets/_CoaJtMCC.js.br +0 -0
  145. package/dist/public/assets/_Coqwh06x.js +1 -0
  146. package/dist/public/assets/{_BAcvIhfz.js → _CqCLnBE3.js} +1 -1
  147. package/dist/public/assets/_CqCLnBE3.js.br +0 -0
  148. package/dist/public/assets/{_C_hw80DQ.js → _Crf1JP7F.js} +1 -1
  149. package/dist/public/assets/_Crf1JP7F.js.br +0 -0
  150. package/dist/public/assets/{_CuKCWxtd.js → _CruGUeWu.js} +1 -1
  151. package/dist/public/assets/_CruGUeWu.js.br +0 -0
  152. package/dist/public/assets/_CvBNrX9c.js +1 -0
  153. package/dist/public/assets/{_CnkmJKZH.js → _CvpfgyZE.js} +1 -1
  154. package/dist/public/assets/_CvpfgyZE.js.br +0 -0
  155. package/dist/public/assets/{_Do-dGY2X.js → _CxgPcY1B.js} +1 -1
  156. package/dist/public/assets/_CxgPcY1B.js.br +0 -0
  157. package/dist/public/assets/{_CB811mfH.js → _D-oIq8BZ.js} +1 -1
  158. package/dist/public/assets/_D-oIq8BZ.js.br +0 -0
  159. package/dist/public/assets/_D0H5I5m4.js +1 -0
  160. package/dist/public/assets/{_z-BjZNm3.js → _D0HnI6ug.js} +1 -1
  161. package/dist/public/assets/_D0HnI6ug.js.br +0 -0
  162. package/dist/public/assets/_D3TaXLz8.js +1 -0
  163. package/dist/public/assets/_D3TqQSka.js +1 -0
  164. package/dist/public/assets/_D4ZY_O8p.js +1 -0
  165. package/dist/public/assets/{_DJmXTsXM.js → _D4icZZux.js} +1 -1
  166. package/dist/public/assets/_D4icZZux.js.br +0 -0
  167. package/dist/public/assets/{_CqJdpoBK.js → _D4tgqiIB.js} +1 -1
  168. package/dist/public/assets/_D4tgqiIB.js.br +0 -0
  169. package/dist/public/assets/{_Idah-Wno.js → _D6OAuof8.js} +1 -1
  170. package/dist/public/assets/_D7IayTpp.js +1 -0
  171. package/dist/public/assets/{_CiCC4SAB.js → _D7UV9Wir.js} +1 -1
  172. package/dist/public/assets/_D7UV9Wir.js.br +0 -0
  173. package/dist/public/assets/{_D3dAzn-U.js → _D7siXaWH.js} +1 -1
  174. package/dist/public/assets/_D7siXaWH.js.br +0 -0
  175. package/dist/public/assets/{_DrTiWDUU.js → _D8e-tVLG.js} +1 -1
  176. package/dist/public/assets/_D8e-tVLG.js.br +0 -0
  177. package/dist/public/assets/{_Bxgu50JS.js → _D9zKRLBR.js} +1 -1
  178. package/dist/public/assets/_D9zKRLBR.js.br +0 -0
  179. package/dist/public/assets/{_DvgVDKmX.js → _DBcnZRAl.js} +1 -1
  180. package/dist/public/assets/_DBcnZRAl.js.br +0 -0
  181. package/dist/public/assets/{_C6vrNkj_.js → _DBv6A4ZA.js} +1 -1
  182. package/dist/public/assets/_DBv6A4ZA.js.br +0 -0
  183. package/dist/public/assets/{_BuQ2ay9z.js → _DChdFXSz.js} +1 -1
  184. package/dist/public/assets/_DChdFXSz.js.br +0 -0
  185. package/dist/public/assets/{_DPDpLf-R.js → _DEOJwc9o.js} +1 -1
  186. package/dist/public/assets/_DEOJwc9o.js.br +0 -0
  187. package/dist/public/assets/_DEUO3A77.js +1 -0
  188. package/dist/public/assets/_DEto2yAG.js +1 -0
  189. package/dist/public/assets/_DF4cXNDT.js +1 -0
  190. package/dist/public/assets/{_DChbhtm7.js → _DHhfMQv0.js} +1 -1
  191. package/dist/public/assets/_DHhfMQv0.js.br +0 -0
  192. package/dist/public/assets/{_DtiK3IDe.js → _DJWtiudl.js} +1 -1
  193. package/dist/public/assets/_DJWtiudl.js.br +0 -0
  194. package/dist/public/assets/{_NCVKEfbF.js → _DK7tFAuR.js} +1 -1
  195. package/dist/public/assets/_DK7tFAuR.js.br +0 -0
  196. package/dist/public/assets/_DLLxBxXt.js +1 -0
  197. package/dist/public/assets/_DLw2Ql6h.js +1 -0
  198. package/dist/public/assets/_DMAM82ur.js +1 -0
  199. package/dist/public/assets/_DMRQxpWh.js +1 -0
  200. package/dist/public/assets/{_BwsgtEeq.js → _DN8cYyMA.js} +1 -1
  201. package/dist/public/assets/_DN8cYyMA.js.br +0 -0
  202. package/dist/public/assets/_DPXtZlgx.js +1 -0
  203. package/dist/public/assets/{_mcdXVs94.js → _DRe6yj8o.js} +1 -1
  204. package/dist/public/assets/_DRe6yj8o.js.br +0 -0
  205. package/dist/public/assets/_DTRwgUDz.js +1 -0
  206. package/dist/public/assets/_DXKf95xT.js +1 -0
  207. package/dist/public/assets/{_CpqmQUsa.js → _DXTQvf2X.js} +1 -1
  208. package/dist/public/assets/_DYLeu8Yn.js +1 -0
  209. package/dist/public/assets/{_ByDMN1SH.js → _DYcJRv1v.js} +1 -1
  210. package/dist/public/assets/_DYcJRv1v.js.br +0 -0
  211. package/dist/public/assets/{_BHTNZeRn.js → _D_0P73tR.js} +1 -1
  212. package/dist/public/assets/_D_0P73tR.js.br +0 -0
  213. package/dist/public/assets/{_Cu-SfhdL.js → _Da4ArfnL.js} +1 -1
  214. package/dist/public/assets/_Da4ArfnL.js.br +0 -0
  215. package/dist/public/assets/_Da6uZcpe.js +1 -0
  216. package/dist/public/assets/_Dd0Ly8u1.js +1 -0
  217. package/dist/public/assets/_DdUtrYLB.js +1 -0
  218. package/dist/public/assets/_DeEl87FQ.js +1 -0
  219. package/dist/public/assets/{_BIt6tvPi.js → _DeSxIIXB.js} +1 -1
  220. package/dist/public/assets/_DeSxIIXB.js.br +0 -0
  221. package/dist/public/assets/_DewfgUtc.js +1 -0
  222. package/dist/public/assets/_DexEfCG6.js +1 -0
  223. package/dist/public/assets/{_BChbCwWm.js → _Df2TxuvS.js} +1 -1
  224. package/dist/public/assets/_Df2TxuvS.js.br +0 -0
  225. package/dist/public/assets/{_Luj-nE2Q.js → _DjOV2LK6.js} +2 -2
  226. package/dist/public/assets/_DjOV2LK6.js.br +0 -0
  227. package/dist/public/assets/{_BH15mqpr.js → _DkyXsbiQ.js} +2 -2
  228. package/dist/public/assets/_DkyXsbiQ.js.br +0 -0
  229. package/dist/public/assets/_DlOMVv-w.js +1 -0
  230. package/dist/public/assets/_DmFwT38J.js +1 -0
  231. package/dist/public/assets/{_B9QxmB8p.js → _DmpEhYLB.js} +1 -1
  232. package/dist/public/assets/_DmpEhYLB.js.br +0 -0
  233. package/dist/public/assets/{_DWYNR6FP.js → _Dq3-ZF2Z.js} +1 -1
  234. package/dist/public/assets/_Dq3-ZF2Z.js.br +0 -0
  235. package/dist/public/assets/_DqqEHIEx.js +1 -0
  236. package/dist/public/assets/{_B-VYcrqc.js → _Duitagee.js} +1 -1
  237. package/dist/public/assets/_Duitagee.js.br +0 -0
  238. package/dist/public/assets/_DvYVra8w.js +1 -0
  239. package/dist/public/assets/_DwEFyNc7.js +1 -0
  240. package/dist/public/assets/{_B5w-PFzL.js → _Dwea1Mf0.js} +1 -1
  241. package/dist/public/assets/_Dwea1Mf0.js.br +0 -0
  242. package/dist/public/assets/{_BKuPpEpl.js → _F19-LHbi.js} +1 -1
  243. package/dist/public/assets/_F19-LHbi.js.br +0 -0
  244. package/dist/public/assets/_Fkix9A0t.js +1 -0
  245. package/dist/public/assets/{_BBDxD-rC.js → _I_2m9jez.js} +1 -1
  246. package/dist/public/assets/_I_2m9jez.js.br +0 -0
  247. package/dist/public/assets/{_D3zgkNcZ.js → _JPzuLvxx.js} +1 -1
  248. package/dist/public/assets/_JPzuLvxx.js.br +0 -0
  249. package/dist/public/assets/_MEOVRTxh.js +1 -0
  250. package/dist/public/assets/{_C-iQnfOW.js → _NCyU2X3g.js} +1 -1
  251. package/dist/public/assets/_NCyU2X3g.js.br +0 -0
  252. package/dist/public/assets/_OXZnsLN0.js +1 -0
  253. package/dist/public/assets/_Tjc2w7pG.js +1 -0
  254. package/dist/public/assets/_Un6ZS8VK.js +1 -0
  255. package/dist/public/assets/{_-tIChhHp.js → _VlEKRWlm.js} +1 -1
  256. package/dist/public/assets/_VlEKRWlm.js.br +0 -0
  257. package/dist/public/assets/{_Bm-EJ483.js → _YShYV2y4.js} +1 -1
  258. package/dist/public/assets/_YShYV2y4.js.br +0 -0
  259. package/dist/public/assets/_ZKijEvNU.js +1 -0
  260. package/dist/public/assets/_ZWkymwZ8.js +1 -0
  261. package/dist/public/assets/_bnPm10fX.js +1 -0
  262. package/dist/public/assets/{_C3E0m_xC.js → _cH--Ry2T.js} +1 -1
  263. package/dist/public/assets/_cH--Ry2T.js.br +0 -0
  264. package/dist/public/assets/_dULwd-83.js +1 -0
  265. package/dist/public/assets/{_EFF0RahO.js → _fb-cSkNg.js} +1 -1
  266. package/dist/public/assets/_fb-cSkNg.js.br +0 -0
  267. package/dist/public/assets/{_Bltf0lwj.js → _gjXKiPz2.js} +1 -1
  268. package/dist/public/assets/_gjXKiPz2.js.br +0 -0
  269. package/dist/public/assets/_hZISiIh0.js +1 -0
  270. package/dist/public/assets/_j0MbYrcw.js +1 -0
  271. package/dist/public/assets/{_Bj18Vxoa.js → _mg_8sHU7.js} +1 -1
  272. package/dist/public/assets/_mg_8sHU7.js.br +0 -0
  273. package/dist/public/assets/{_BE3izGMt.js → _nif0UYC1.js} +1 -1
  274. package/dist/public/assets/_nif0UYC1.js.br +0 -0
  275. package/dist/public/assets/{_wRxJgfi3.js → _ocpKhGmH.js} +1 -1
  276. package/dist/public/assets/_ocpKhGmH.js.br +0 -0
  277. package/dist/public/assets/{_CYyCK3gr.js → _qthymfEm.js} +1 -1
  278. package/dist/public/assets/{__1CwTtq-.js → _rlSb3jYt.js} +2 -2
  279. package/dist/public/assets/_rlSb3jYt.js.br +0 -0
  280. package/dist/public/assets/{_C0yBoXDm.js → _thTd3DoV.js} +1 -1
  281. package/dist/public/assets/_thTd3DoV.js.br +0 -0
  282. package/dist/public/assets/_yTQokBA3.js +1 -0
  283. package/dist/public/assets/{_CzDl06G7.js → _yvNxTzJ_.js} +1 -1
  284. package/dist/public/assets/_yvNxTzJ_.js.br +0 -0
  285. package/dist/public/assets/files-view-CWdlTJZL.js +2 -0
  286. package/dist/public/assets/manage-workspace-BvB-DIwQ.js +2 -0
  287. package/dist/public/assets/new-bAfr06Ym.js +1 -0
  288. package/dist/public/assets/new-workspace-BGNyC8BU.js +2 -0
  289. package/dist/public/assets/review-view-Cnv9wu31.js +2 -0
  290. package/dist/public/assets/settings-bAfr06Ym.js +1 -0
  291. package/dist/public/assets/settings-page-DpFc3exI.js +2 -0
  292. package/dist/public/assets/{styles-rsoFYnOm.css → styles-DAX6ERBR.css} +1 -1
  293. package/dist/public/assets/styles-DAX6ERBR.css.br +0 -0
  294. package/dist/public/assets/w-bAfr06Ym.js +1 -0
  295. package/dist/public/assets/w._-B0qk5BkH.js +1 -0
  296. package/dist/public/assets/w._-B2U79M4Z.js +1 -0
  297. package/dist/public/assets/w._-bAfr06Ym.js +1 -0
  298. package/lib/setup/doctor.mjs +19 -2
  299. package/lib/setup/shims.mjs +62 -0
  300. package/package.json +1 -1
  301. package/dist/_DMIGXpem.js +0 -2
  302. package/dist/_Dbtwc-4J.js +0 -2
  303. package/dist/public/assets/_-tIChhHp.js.br +0 -0
  304. package/dist/public/assets/_3IZOU36R.js.br +0 -0
  305. package/dist/public/assets/_3LigOO1r.js +0 -1
  306. package/dist/public/assets/_53vvCtB9.js.br +0 -0
  307. package/dist/public/assets/_8F1hZg30.js +0 -1
  308. package/dist/public/assets/_8GJ-PBB-.js +0 -1
  309. package/dist/public/assets/_AF2pgiJE.js +0 -1
  310. package/dist/public/assets/_B-VYcrqc.js.br +0 -0
  311. package/dist/public/assets/_B-wjov_Z.js +0 -1
  312. package/dist/public/assets/_B23iifIa.js.br +0 -0
  313. package/dist/public/assets/_B2gvN5eE.js +0 -1
  314. package/dist/public/assets/_B31SsJ2H.js +0 -1
  315. package/dist/public/assets/_B3ioypfU.js +0 -1
  316. package/dist/public/assets/_B3zvGVOr.js +0 -1
  317. package/dist/public/assets/_B4KBgFQJ.js +0 -1
  318. package/dist/public/assets/_B4UPSzSe.js +0 -1
  319. package/dist/public/assets/_B5w-PFzL.js.br +0 -0
  320. package/dist/public/assets/_B704FqW-.js.br +0 -0
  321. package/dist/public/assets/_B7RTaeWh.js.br +0 -0
  322. package/dist/public/assets/_B8WsOiDp.js +0 -1
  323. package/dist/public/assets/_B9QxmB8p.js.br +0 -0
  324. package/dist/public/assets/_B9l6-SS5.js +0 -1
  325. package/dist/public/assets/_BAcvIhfz.js.br +0 -0
  326. package/dist/public/assets/_BBDxD-rC.js.br +0 -0
  327. package/dist/public/assets/_BChbCwWm.js.br +0 -0
  328. package/dist/public/assets/_BDnmZTGe.js +0 -1
  329. package/dist/public/assets/_BE3izGMt.js.br +0 -0
  330. package/dist/public/assets/_BH15mqpr.js.br +0 -0
  331. package/dist/public/assets/_BHTNZeRn.js.br +0 -0
  332. package/dist/public/assets/_BIt6tvPi.js.br +0 -0
  333. package/dist/public/assets/_BJxnfQcd.js.br +0 -0
  334. package/dist/public/assets/_BKuPpEpl.js.br +0 -0
  335. package/dist/public/assets/_BN3pboD3.js +0 -1
  336. package/dist/public/assets/_BQ9vuNgN.js +0 -1
  337. package/dist/public/assets/_BWhs553r.js.br +0 -0
  338. package/dist/public/assets/_BY2Fd-ai.js +0 -1
  339. package/dist/public/assets/_BZ5WB2jH.js +0 -1
  340. package/dist/public/assets/_BZDlyKDT.js.br +0 -0
  341. package/dist/public/assets/_B_6D3GJa.js +0 -1
  342. package/dist/public/assets/_BdZ9i3Bd.js +0 -1
  343. package/dist/public/assets/_Bffx--rk.js +0 -1
  344. package/dist/public/assets/_BiA2OZOl.js +0 -1
  345. package/dist/public/assets/_Bj18Vxoa.js.br +0 -0
  346. package/dist/public/assets/_BjrAjvOn.js +0 -1
  347. package/dist/public/assets/_BkQCadEV.js +0 -1
  348. package/dist/public/assets/_Bltf0lwj.js.br +0 -0
  349. package/dist/public/assets/_Bm-EJ483.js.br +0 -0
  350. package/dist/public/assets/_BndAJZwW.js.br +0 -0
  351. package/dist/public/assets/_Bq2kj2t3.js +0 -1
  352. package/dist/public/assets/_BqPqaeUo.js.br +0 -0
  353. package/dist/public/assets/_BqZMlemw.js.br +0 -0
  354. package/dist/public/assets/_Bsdn_9V_.js.br +0 -0
  355. package/dist/public/assets/_Bu5hgjmu.js.br +0 -0
  356. package/dist/public/assets/_BuGkNNaL.js +0 -1
  357. package/dist/public/assets/_BuQ2ay9z.js.br +0 -0
  358. package/dist/public/assets/_BwsgtEeq.js.br +0 -0
  359. package/dist/public/assets/_Bxgu50JS.js.br +0 -0
  360. package/dist/public/assets/_ByANtHYy.js +0 -1
  361. package/dist/public/assets/_ByDMN1SH.js.br +0 -0
  362. package/dist/public/assets/_BzRks6mQ.js +0 -1
  363. package/dist/public/assets/_Bzd4BveK.js +0 -1
  364. package/dist/public/assets/_C-iQnfOW.js.br +0 -0
  365. package/dist/public/assets/_C0yBoXDm.js.br +0 -0
  366. package/dist/public/assets/_C2zk28wV.js +0 -1
  367. package/dist/public/assets/_C3E0m_xC.js.br +0 -0
  368. package/dist/public/assets/_C6vrNkj_.js.br +0 -0
  369. package/dist/public/assets/_C9C-3hXG.js +0 -1
  370. package/dist/public/assets/_CB811mfH.js.br +0 -0
  371. package/dist/public/assets/_CCuLPWZW.js.br +0 -0
  372. package/dist/public/assets/_CGSqFdZV.js +0 -1
  373. package/dist/public/assets/_CGbnwvi6.js +0 -1
  374. package/dist/public/assets/_CJBfnXPc.js.br +0 -0
  375. package/dist/public/assets/_CKFNF1bt.js +0 -1
  376. package/dist/public/assets/_CL7o_nRC.js +0 -1
  377. package/dist/public/assets/_CO7GkttO.js +0 -1
  378. package/dist/public/assets/_CSqMt_yB.js +0 -1
  379. package/dist/public/assets/_CT3v6Oze.js.br +0 -0
  380. package/dist/public/assets/_CV1g9tqF.js +0 -1
  381. package/dist/public/assets/_CYMRiGMt.js +0 -1
  382. package/dist/public/assets/_CZLvdLqX.js +0 -1
  383. package/dist/public/assets/_CZyU6zlW.js.br +0 -0
  384. package/dist/public/assets/_C_hw80DQ.js.br +0 -0
  385. package/dist/public/assets/_CeSQyrMz.js.br +0 -0
  386. package/dist/public/assets/_CfPha1FH.js.br +0 -0
  387. package/dist/public/assets/_CfpvYRrS.js +0 -1
  388. package/dist/public/assets/_Che6-ZVy.js +0 -1
  389. package/dist/public/assets/_CiCC4SAB.js.br +0 -0
  390. package/dist/public/assets/_Cn8rkyXq.js.br +0 -0
  391. package/dist/public/assets/_CnWm9a_o.js.br +0 -0
  392. package/dist/public/assets/_Cnb9K9XY.js +0 -1
  393. package/dist/public/assets/_CnkmJKZH.js.br +0 -0
  394. package/dist/public/assets/_CoVyqWOC.js.br +0 -0
  395. package/dist/public/assets/_CqJdpoBK.js.br +0 -0
  396. package/dist/public/assets/_Cu-SfhdL.js.br +0 -0
  397. package/dist/public/assets/_CuKCWxtd.js.br +0 -0
  398. package/dist/public/assets/_CvbIq7kc.js +0 -1
  399. package/dist/public/assets/_CxPGS3y4.js +0 -1
  400. package/dist/public/assets/_Cyqw1SYV.js.br +0 -0
  401. package/dist/public/assets/_CyyVMlPp.js +0 -1
  402. package/dist/public/assets/_CzDUXeLr.js +0 -1
  403. package/dist/public/assets/_CzDl06G7.js.br +0 -0
  404. package/dist/public/assets/_D-7MOklF.js.br +0 -0
  405. package/dist/public/assets/_D-MrkdQv.js +0 -1
  406. package/dist/public/assets/_D3dAzn-U.js.br +0 -0
  407. package/dist/public/assets/_D3zgkNcZ.js.br +0 -0
  408. package/dist/public/assets/_D4yHrw0x.js.br +0 -0
  409. package/dist/public/assets/_DAGoF4RD.js +0 -1
  410. package/dist/public/assets/_DBUH1PtY.js +0 -1
  411. package/dist/public/assets/_DChbhtm7.js.br +0 -0
  412. package/dist/public/assets/_DDDEt2Cn.js +0 -1
  413. package/dist/public/assets/_DEVUMpy9.js +0 -1
  414. package/dist/public/assets/_DI2YhTfn.js +0 -1
  415. package/dist/public/assets/_DJmXTsXM.js.br +0 -0
  416. package/dist/public/assets/_DLNSQLre.js +0 -1
  417. package/dist/public/assets/_DPDpLf-R.js.br +0 -0
  418. package/dist/public/assets/_DVbq8rez.js.br +0 -0
  419. package/dist/public/assets/_DVuEGjB6.js.br +0 -0
  420. package/dist/public/assets/_DWYNR6FP.js.br +0 -0
  421. package/dist/public/assets/_DWn9Bk4p.js.br +0 -0
  422. package/dist/public/assets/_D_qMHeyF.js.br +0 -0
  423. package/dist/public/assets/_D_vDaILt.js +0 -1
  424. package/dist/public/assets/_DahEvrx7.js.br +0 -0
  425. package/dist/public/assets/_DdpvFyoD.js.br +0 -0
  426. package/dist/public/assets/_DgFgoB4_.js.br +0 -0
  427. package/dist/public/assets/_Dho8D73M.js.br +0 -0
  428. package/dist/public/assets/_DiUYcYna.js +0 -1
  429. package/dist/public/assets/_DjIcKKrW.js.br +0 -0
  430. package/dist/public/assets/_DkZVAXow.js +0 -1
  431. package/dist/public/assets/_Do-dGY2X.js.br +0 -0
  432. package/dist/public/assets/_DrTiWDUU.js.br +0 -0
  433. package/dist/public/assets/_DtBP9JxD.js +0 -1
  434. package/dist/public/assets/_DtiK3IDe.js.br +0 -0
  435. package/dist/public/assets/_Dtj0n4Ea.js.br +0 -0
  436. package/dist/public/assets/_Dv4QXsaq.js +0 -1
  437. package/dist/public/assets/_DvgVDKmX.js.br +0 -0
  438. package/dist/public/assets/_DxArLWxr.js +0 -1
  439. package/dist/public/assets/_DzasBNTs.js +0 -1
  440. package/dist/public/assets/_Dzml7-SO.js.br +0 -0
  441. package/dist/public/assets/_EFF0RahO.js.br +0 -0
  442. package/dist/public/assets/_Er1jCr0y.js.br +0 -0
  443. package/dist/public/assets/_I-rWUgTm.js.br +0 -0
  444. package/dist/public/assets/_I1G0J8iR.js.br +0 -0
  445. package/dist/public/assets/_Luj-nE2Q.js.br +0 -0
  446. package/dist/public/assets/_MTzS-gYR.js +0 -1
  447. package/dist/public/assets/_NCVKEfbF.js.br +0 -0
  448. package/dist/public/assets/_Nt06UfoF.js +0 -1
  449. package/dist/public/assets/_SNGXdx8T.js.br +0 -0
  450. package/dist/public/assets/_U-ItOyuk.js +0 -1
  451. package/dist/public/assets/_UM6RqjfN.js.br +0 -0
  452. package/dist/public/assets/_XM_G2_E8.js +0 -1
  453. package/dist/public/assets/_YIEXDh5T.js.br +0 -0
  454. package/dist/public/assets/_Z8XAsbav.js.br +0 -0
  455. package/dist/public/assets/__1CwTtq-.js.br +0 -0
  456. package/dist/public/assets/__UZfk21C.js +0 -1
  457. package/dist/public/assets/_ahnzi6Vi.js.br +0 -0
  458. package/dist/public/assets/_b8vSuisY.js +0 -1
  459. package/dist/public/assets/_cAFV8cvO.js +0 -1
  460. package/dist/public/assets/_dZl98lyu.js.br +0 -0
  461. package/dist/public/assets/_dbwi0e20.js +0 -1
  462. package/dist/public/assets/_dfb9VWND.js +0 -1
  463. package/dist/public/assets/_dhxtcjZT.js.br +0 -0
  464. package/dist/public/assets/_ezrIBxd5.js.br +0 -0
  465. package/dist/public/assets/_l6WNhzBy.js +0 -1
  466. package/dist/public/assets/_mcdXVs94.js.br +0 -0
  467. package/dist/public/assets/_r3IeTPfk.js +0 -1
  468. package/dist/public/assets/_sctMXY82.js +0 -1
  469. package/dist/public/assets/_ukc-Ezd5.js +0 -1
  470. package/dist/public/assets/_wRxJgfi3.js.br +0 -0
  471. package/dist/public/assets/_wk1rSbkR.js +0 -1
  472. package/dist/public/assets/_xAWxeLFd.js +0 -1
  473. package/dist/public/assets/_xOecD2Ye.js +0 -1
  474. package/dist/public/assets/_xqGqu7PK.js +0 -1
  475. package/dist/public/assets/_z-BjZNm3.js.br +0 -0
  476. package/dist/public/assets/_z2ZJ8cb5.js +0 -1
  477. package/dist/public/assets/_zCVRc38b.js +0 -1
  478. package/dist/public/assets/files-view-DvsrAin-.js +0 -2
  479. package/dist/public/assets/manage-workspace-DpiGdfaH.js +0 -2
  480. package/dist/public/assets/new-B9cFSdMl.js +0 -1
  481. package/dist/public/assets/new-workspace-DOoDlvjo.js +0 -2
  482. package/dist/public/assets/review-view-C4Iv_eUU.js +0 -2
  483. package/dist/public/assets/settings-B9cFSdMl.js +0 -1
  484. package/dist/public/assets/settings-page-CIKTh5Y6.js +0 -2
  485. package/dist/public/assets/styles-rsoFYnOm.css.br +0 -0
  486. package/dist/public/assets/w-B9cFSdMl.js +0 -1
  487. package/dist/public/assets/w._-B9cFSdMl.js +0 -1
  488. package/dist/public/assets/w._-BSzTwkWw.js +0 -1
  489. package/dist/public/assets/w._-BWgHxva-.js +0 -1
@@ -1,4 +1,4 @@
1
- import { $ as reopenSession, A as closedSession, An as onFinished, Bn as turnPhase, Dr as getSetting, Fn as setExpecting, Hn as turnSince, J as notifySessionsChanged, Kn as agentLabel, L as getSession, Mn as onTurnEnd, Nn as sessionWatched, Or as isKnownAgent, Q as renameSession, Qr as httpError, R as interruptSession, Sn as lastTypedAt, U as listPanesWithin, Vn as turnSettling, Y as onSessionDispose, _n as agentPhase, ai as db, an as interruptKeys, bn as hookReportedAt, cn as steerKeys, et as reopenable, gn as activityOf, ii as all, j as createSession, jn as onPhaseChange, nt as sendToSession, oi as get, pn as cleanSummary, tt as retireSession, z as killSession, zn as summaryOf } from "./_ByxSq8zO.js";
1
+ import { $ as renameSession, A as closedSession, Dr as agentChoices, E as agentCaller, En as lastTypedAt, Fn as onFinished, Gn as summaryOf, In as onPhaseChange, J as notifySessionsChanged, Jn as turnSince, Kn as turnPhase, L as getSession, Ln as onTurnEnd, Nr as getSetting, Pr as isKnownAgent, Qn as agentLabel, R as interruptSession, Rn as onTurnFailed, U as listPanesWithin, Vn as setExpecting, Xn as agentFamily, Y as onSessionDispose, _n as cleanSummary, bn as activityOf, cn as interruptKeys, di as db, et as reopenSession, fi as get, fn as steerKeys, ii as httpError, it as sendToSession, j as createSession, ln as quotesPastes, nt as restartSession, qn as turnSettling, rt as retireSession, tt as reopenable, ui as all, wn as hookReportedAt, xn as agentPhase, z as killSession, zn as sessionWatched } from "./_Cb_JPQ7K.js";
2
2
  //#region src/server/messages.ts
3
3
  var team = {
4
4
  memberGroup: () => null,
@@ -39,6 +39,8 @@ var EXCERPT = 40;
39
39
  /** A pane just started for a message can be missing from a pane list
40
40
  * taken a moment before, which is not the session exiting. */
41
41
  var START_GRACE_MS = 1e4;
42
+ /** A failure told again only past this, unless it says something new. */
43
+ var FAIL_RETELL_MS = 6e5;
42
44
  /** Two agents asking each other in a loop meet this; a conversation does
43
45
  * not, since every message is a turn of the agent it goes to. */
44
46
  var SEND_WINDOW_MS = 6e5;
@@ -47,6 +49,12 @@ var sends = /* @__PURE__ */ new Map();
47
49
  /** Recipients a delivery is typing into right now. */
48
50
  var delivering = /* @__PURE__ */ new Set();
49
51
  var deliveredAt = /* @__PURE__ */ new Map();
52
+ /** When each session reopened or restarted (`reopen`): its new pane can be
53
+ * missing from a pane list taken a moment before. */
54
+ var startedAt = /* @__PURE__ */ new Map();
55
+ /** What each session's askers were last told of its turn failing, and
56
+ * when (`turnFailed`): a CLI that fails the same way again says it once. */
57
+ var failedTold = /* @__PURE__ */ new Map();
50
58
  /** When a reply last went into each session, typed in or taken by
51
59
  * `wait`: one since the user last typed there is a result they may not
52
60
  * have read (`rollUp`). A restart forgets it, as it forgets typing. */
@@ -69,26 +77,50 @@ function labelOf(session) {
69
77
  return `${session.id} (${agentLabel(session.agent)}${session.title ? `, "${session.title}"` : ""})`;
70
78
  }
71
79
  /** The text a row is typed in as. A message from an agent says who sent
72
- * it and what becomes of the turn it starts, so any CLI's agent knows how
73
- * to answer with nothing in its instructions about work. */
80
+ * it, that the recipient is to act on it as on the user's own words, and
81
+ * what becomes of the turn it starts, so any CLI's agent knows how to
82
+ * answer with nothing in its instructions about work. */
74
83
  function render(row, roll) {
75
84
  const from = row.from_label ?? row.from_session;
76
85
  switch (row.kind) {
77
86
  case "message": {
78
- if (!row.from_session) return row.body;
87
+ if (!row.from_session) return {
88
+ head: "",
89
+ body: row.body
90
+ };
79
91
  const owed = row.answers ? stillOwed(row.to_session, row.from_session) : "";
80
92
  const head = row.answers ? `Reply from session ${from} to ${row.answers}${owed ? `; ${owed}` : ""}` : `From session ${from}`;
81
- if (!row.wants_reply) return `[work] ${head}, no reply needed:\n\n${row.body}`;
82
- return row.by_send ? `[work] ${head}, which waits for your answer: send it with work session send ${row.from_session} "…". Your last message here is the user's: end on a line saying what you told it.\n\n${row.body}` : `[work] ${head}: your last message this turn goes back to it as your reply, so make it the whole answer (to ask it something first: work session send ${row.from_session} "…"; to end the turn while a job of yours runs on, first run work session hold "<what you wait on>": this turn's last message then goes as an interim reply, and the last message of the turn the job's end wakes you into is the reply).\n\n${row.body}`;
93
+ if (!row.wants_reply) return {
94
+ head: `[work] ${head}, no reply needed${row.answers ? "" : " (act on it as on the user's own words)"}:`,
95
+ body: row.body
96
+ };
97
+ return {
98
+ head: row.by_send ? `[work] ${head}, which waits for your answer: send it with work session send ${row.from_session} "…". Your last message here is the user's: end on a line saying what you told it.` : `[work] ${head}: do what it asks, as you would the user's own request. Your last message this turn goes back to it as your reply, so make it the whole answer (to ask it something first: work session send ${row.from_session} "…"; to end a turn before a job of yours is done, run work session hold "<what you wait on>" first).`,
99
+ body: row.body
100
+ };
83
101
  }
84
102
  case "reply": {
85
- if (row.held) return `[work] Interim reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}: it is not done, it waits on ${row.held}, and its reply follows when it is (end your turn to wait for it, or run work session wait ${row.from_session})${roll?.due ? `; ${roll.due}` : ""}${roll ? `. ${roll.say}` : ""}:\n\n${row.body}`;
103
+ if (row.held) return {
104
+ head: `[work] Interim reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}: it is not done, it waits on ${row.held}, and its reply follows when it is (end your turn to wait for it, or run work session wait ${row.from_session})${roll?.due ? `; ${roll.due}` : ""}${roll ? `. ${roll.say}` : ""}:`,
105
+ body: row.body
106
+ };
86
107
  const owed = [row.from_session ? stillOwed(row.to_session, row.from_session) : "", roll?.due].filter(Boolean).join("; ");
87
- return `[work] ${row.follows ? `Follow-up from session ${from}${row.answers ? ` on ${row.answers}` : ""}: the last message of a turn it started on its own after its reply of ${clock(row.follows)}` : `Reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}`}${owed ? `; ${owed}` : ""}. ${roll ? `${roll.say}. ` : ""}${followUp(row.from_session ?? "<id>", row.to_session)}:\n\n${row.body}`;
108
+ return {
109
+ head: `[work] ${row.follows ? `Follow-up from session ${from}${row.answers ? ` on ${row.answers}` : ""}: the last message of a turn it started on its own after its reply of ${clock(row.follows)}` : `Reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}`}${owed ? `; ${owed}` : ""}. ${roll ? `${roll.say}. ` : ""}${followUp(row.from_session ?? "<id>", row.to_session)}:`,
110
+ body: row.body
111
+ };
88
112
  }
89
- case "closed": return roll ? `[work] ${row.body}${roll.due ? ` ${roll.due[0].toUpperCase()}${roll.due.slice(1)}.` : ""} ${roll.say}.` : `[work] ${row.body}`;
113
+ case "closed":
114
+ case "notice": return {
115
+ head: roll ? `[work] ${row.body}${roll.due ? ` ${roll.due[0].toUpperCase()}${roll.due.slice(1)}.` : ""} ${roll.say}.` : `[work] ${row.body}`,
116
+ body: ""
117
+ };
90
118
  }
91
119
  }
120
+ /** Typed rows as one text: each head over what it carries. */
121
+ function joined(items) {
122
+ return items.map((t) => [t.head, t.body].filter(Boolean).join("\n\n")).join("\n\n");
123
+ }
92
124
  /** A moment as a reply names it ("14:05"). */
93
125
  function clock(at) {
94
126
  return new Date(at).toLocaleTimeString("en-GB", {
@@ -161,7 +193,7 @@ function followUp(id, asker) {
161
193
  const send = `To follow up: work session send ${id} "…"`;
162
194
  const c = team.closing(id, asker);
163
195
  if (!c) return send;
164
- if (c.closed) return c.reopens ? `${send}, which reopens it on its conversation (it has closed since)` : "It has closed since, and its conversation with it: to follow up, start a new session";
196
+ if (c.closed) return c.reopens ? `${send}, which reopens it on its conversation (it has closed since)` : c.restarts ? `It has closed since: to follow up, \`work session reopen ${id}\` starts it again on its conversation, then send` : "It has closed since, and its conversation with it: to follow up, start a new session";
165
197
  return c.reopens ? `${send} (it closes ${c.when}, and a message then reopens it on its conversation; \`work session keep ${id}\` keeps it open)` : `${send} (it closes ${c.when}, and its conversation with it: \`work session keep ${id}\` keeps it for follow-ups)`;
166
198
  }
167
199
  /** What becomes of a group's members once done with, for its head. */
@@ -183,12 +215,25 @@ function groupClosing(rows) {
183
215
  * under its name. */
184
216
  function renderGroup(groupId, rows, roll) {
185
217
  const closed = rows.filter((r) => r.kind === "closed").length;
186
- return [`[work] Group "${team.groupTitle(groupId)}" (${groupId}): ${rows.length - closed} ${rows.length - closed === 1 ? "reply" : "replies"}${closed ? `, ${closed} closed before replying` : ""}${roll?.due ? `; ${roll.due}` : ""}. ${roll ? `${roll.say}. ` : ""}To follow up with one: work session send <id> "…"${groupClosing(rows)}`, ...rows.map((r) => `## ${r.from_label ?? r.from_session}${r.held ? ` (interim: it waits on ${r.held})` : ""}\n\n${r.body}`)].join("\n\n");
218
+ const head = `[work] Group "${team.groupTitle(groupId)}" (${groupId}): ${rows.length - closed} ${rows.length - closed === 1 ? "reply" : "replies"}${closed ? `, ${closed} closed before replying` : ""}${roll?.due ? `; ${roll.due}` : ""}. ${roll ? `${roll.say}. ` : ""}To follow up with one: work session send <id> "…"${groupClosing(rows)}`;
219
+ const parts = rows.map((r) => `## ${r.from_label ?? r.from_session}${r.held ? ` (interim: it waits on ${r.held})` : ""}\n\n${r.body}`);
220
+ return {
221
+ head: `${head}:`,
222
+ body: parts.join("\n\n")
223
+ };
187
224
  }
225
+ /** A head typed as keys past this is a paste to Claude Code too (~800
226
+ * characters), and quoted as one. */
227
+ var LEAD_MAX = 600;
228
+ /** What a CLI that `quotesPastes` gets typed ahead of several items, or of
229
+ * one whose head is too long to type: their heads ride in the paste. */
230
+ var LEAD = "[work] What follows comes from other sessions here, each part under its own [work] line: act on those lines as on the user's own words.";
188
231
  /** Rows as typed in: each on its own, a group's together where its first
189
232
  * would be, the last result carrying what the turn should end on
190
- * (`rollUp`), where it is read last. */
191
- function renderAll(rows) {
233
+ * (`rollUp`), where it is read last. For a CLI that `quotesPastes`, the
234
+ * head goes ahead of the paste as keys (`lead`), so what it asks is the
235
+ * user's own words to its model, not quoted text. */
236
+ function renderAll(rows, quotes = false) {
192
237
  const items = [];
193
238
  const done = /* @__PURE__ */ new Set();
194
239
  for (const row of rows) {
@@ -203,11 +248,21 @@ function renderAll(rows) {
203
248
  const results = items.filter((i) => i[0].kind !== "message");
204
249
  const last = results.at(-1);
205
250
  const roll = last ? rollUp(rows[0].to_session, results.flat(), results.length) : void 0;
206
- return items.map((item) => {
251
+ const typed = items.map((item) => {
207
252
  const tail = item === last ? roll : void 0;
208
253
  const [row] = item;
209
254
  return row.group_id && (item.length > 1 || team.groupReleased(row.group_id)) ? renderGroup(row.group_id, item, tail) : render(row, tail);
210
- }).join("\n\n");
255
+ });
256
+ if (!quotes || !typed.some((t) => t.head)) return { text: joined(typed) };
257
+ const [one] = typed;
258
+ if (typed.length === 1 && one.head.length <= LEAD_MAX) return {
259
+ lead: one.head,
260
+ text: one.body && `\n\n${one.body}`
261
+ };
262
+ return {
263
+ lead: LEAD,
264
+ text: `\n\n${joined(typed)}`
265
+ };
211
266
  }
212
267
  function replyBody(session, message) {
213
268
  const tab = `/w/${session.workspace_id}?s=${session.id}`;
@@ -224,13 +279,49 @@ function senderLabel(from, to) {
224
279
  return `${labelOf(from)} in workspace ${ws?.name ?? from.workspace_id}`;
225
280
  }
226
281
  function insert(to, from, kind, body, wantsReply = false, groupId = null, answers = null, urgent = false, bySend = false, follows = null, held = null) {
227
- return Number(db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, group_id, answers, urgent, by_send, follows, held)
282
+ const id = Number(db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, group_id, answers, urgent, by_send, follows, held)
228
283
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(to, from?.id ?? null, from ? senderLabel(from, to) : null, kind, body, wantsReply ? 1 : 0, groupId, answers, urgent ? 1 : 0, bySend ? 1 : 0, follows, held).lastInsertRowid);
284
+ logInsert(id);
285
+ return id;
229
286
  }
230
- function deleteIds(ids) {
287
+ /** Rows leave the queue once typed in or answered, saying how in the log
288
+ * (`outcome`). */
289
+ function deleteIds(ids, outcome) {
231
290
  if (!ids.length) return;
291
+ logDone(ids, outcome);
232
292
  db.prepare(`DELETE FROM session_messages WHERE id IN (${ids.map(() => "?").join(",")})`).run(...ids);
233
293
  }
294
+ /** How long message_log keeps what went between sessions. */
295
+ var LOG_KEEP = "-7 days";
296
+ var PRUNE_EVERY_MS = 36e5;
297
+ var prunedAt = 0;
298
+ /** A row just queued, as the log keeps it (`work session log`). */
299
+ function logInsert(id) {
300
+ const to = get("SELECT to_session FROM session_messages WHERE id = ?", id);
301
+ const target = to ? getSession(to.to_session) : void 0;
302
+ db.prepare(`INSERT OR REPLACE INTO message_log (id, workspace_id, to_session, to_label, from_session, from_label, kind, body, wants_reply, urgent, created_at)
303
+ SELECT id, ?, to_session, ?, from_session, from_label, kind, body, wants_reply, urgent, created_at FROM session_messages WHERE id = ?`).run(target?.workspace_id ?? null, target ? labelOf(target) : null, id);
304
+ if (Date.now() - prunedAt < PRUNE_EVERY_MS) return;
305
+ prunedAt = Date.now();
306
+ db.prepare(`DELETE FROM message_log WHERE created_at < strftime('%Y-%m-%dT%H:%M:%fZ', 'now', '${LOG_KEEP}')`).run();
307
+ }
308
+ var inIds = (ids) => `(${ids.map(() => "?").join(",")})`;
309
+ /** Rows typed in (`at its prompt`, `into its turn`) or taken by `wait`. */
310
+ function logDelivered(ids, how) {
311
+ if (!ids.length) return;
312
+ db.prepare(`UPDATE message_log SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), delivered = ?
313
+ WHERE delivered_at IS NULL AND id IN ${inIds(ids)}`).run(how, ...ids);
314
+ }
315
+ function logDone(ids, outcome) {
316
+ if (!ids.length) return;
317
+ db.prepare(`UPDATE message_log SET done_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), outcome = ?
318
+ WHERE done_at IS NULL AND id IN ${inIds(ids)}`).run(outcome, ...ids);
319
+ }
320
+ /** What went to or from `session`, or in `workspace`, the latest `limit`,
321
+ * oldest first. */
322
+ function messageLog(of, limit = 50) {
323
+ return ("session" in of ? all("SELECT * FROM message_log WHERE to_session = ? OR from_session = ? ORDER BY id DESC LIMIT ?", of.session, of.session, limit) : all("SELECT * FROM message_log WHERE workspace_id = ? ORDER BY id DESC LIMIT ?", of.workspace, limit)).reverse();
324
+ }
234
325
  /** Who a message is still to wake, for agent-state: a session owed a
235
326
  * reply, one with something waiting to be typed in (held for its group
236
327
  * or not), and a lead whose groups have members yet to answer — queued
@@ -269,7 +360,8 @@ async function deliver(id) {
269
360
  if (!rows.length) return {};
270
361
  delivering.add(id);
271
362
  try {
272
- await sendToSession(id, renderAll(rows), void 0, keys);
363
+ const { lead, text } = renderAll(rows, quotesPastes(getSession(id)?.agent));
364
+ await sendToSession(id, text, void 0, keys, lead);
273
365
  } catch (err) {
274
366
  return { waits: err.message };
275
367
  } finally {
@@ -279,7 +371,8 @@ async function deliver(id) {
279
371
  deliveredAt.set(id, Date.now());
280
372
  if (rows.some((r) => r.kind !== "message")) repliedAt.set(id, Date.now());
281
373
  answered.delete(id);
282
- deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id));
374
+ logDelivered(rows.map((r) => r.id), keys ? "into its turn" : "at its prompt");
375
+ deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id), "delivered");
283
376
  const owed = rows.filter((r) => r.wants_reply).map((r) => r.id);
284
377
  if (owed.length) db.prepare(`UPDATE session_messages SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
285
378
  WHERE id IN (${owed.map(() => "?").join(",")})`).run(...owed);
@@ -331,39 +424,42 @@ function kick() {
331
424
  * the user's own session's send back (`by_send`), which a send from it
332
425
  * to an asker it owes is (`answerBySend`).
333
426
  * `opts.now` sends it into the turn under way where its CLI takes one
334
- * there, and `opts.interrupt` stops that turn first (never a wait on the
335
- * user: theirs is the answer it waits for).
427
+ * there, as one from an agent that wants no reply goes, and
428
+ * `opts.interrupt` stops that turn first (never a wait on the user:
429
+ * theirs is the answer it waits for); with no text, it is the sender's
430
+ * messages already queued for `to` that go so.
336
431
  * `opts.member` is a fan-out starting a member (server/team): its group's
337
432
  * own caps bound it, not the sender's. */
338
433
  async function sendMessage(to, text, opts = {}) {
339
434
  const known = getSession(to) ?? closedSession(to);
340
435
  if (!known) throw httpError(404, `no session ${to}`);
436
+ if ("how" in known && known.how === "closed") throw httpError(409, `${to} was closed, not for being done, so a message does not reopen it: \`work session reopen ${to}\` starts it again on its own conversation, then send`);
341
437
  if (known.agent === "shell") throw httpError(409, `${to} is a shell: a message would run as a command there, so messages go to agent sessions`);
342
438
  if (opts.from === to) throw httpError(409, "a session cannot message itself");
439
+ const urgent = !!(opts.now || opts.interrupt);
440
+ if (!text && !urgent) throw httpError(400, "a message needs its text");
343
441
  if (text.length > MAX_BODY) throw httpError(413, `a message is at most ${MAX_BODY} characters: write the rest to a file and send its path`);
344
442
  const sender = opts.from ? getSession(opts.from) : void 0;
345
443
  const from = sender && sender.agent !== "shell" ? sender : null;
346
444
  if (!!from && from.workspace_id !== known.workspace_id) {
347
445
  if (!(await listPanesWithin(2e3))?.some((p) => p.id === to)) throw httpError(409, `${to} is not running: a message to another workspace goes only to an agent running there`);
348
446
  }
349
- if (from && !opts.member) admit(from.id);
447
+ const queued = text ? [] : all("SELECT * FROM session_messages WHERE to_session = ? AND from_session IS ? AND kind = 'message' AND delivered_at IS NULL ORDER BY id", to, from?.id ?? null);
448
+ if (!text && !queued.length) throw httpError(409, `nothing of yours is queued for ${to}: \`--now\` with no text sends what you queued sooner`);
449
+ if (from && !opts.member && text) admit(from.id);
350
450
  const live = getSession(to);
351
451
  let target = live;
352
- if (!target) {
353
- delivering.add(to);
354
- try {
355
- target = await reopenSession(to);
356
- } finally {
357
- delivering.delete(to);
358
- }
359
- }
452
+ if (!target) target = (await reopen(to, { by: from?.id })).session;
360
453
  if (!from && target.parent_id) db.prepare("UPDATE sessions SET keep = 1 WHERE id = ?").run(to);
361
- const wantsReply = !!from && opts.reply !== false;
454
+ const wantsReply = queued.length ? queued.some((r) => r.wants_reply) : !!from && opts.reply !== false;
362
455
  const bySend = wantsReply && !target.parent_id;
363
- const answered = from ? answerBySend(from, to) : [];
364
- const ahead = get("SELECT COUNT(*) AS n FROM session_messages WHERE to_session = ? AND delivered_at IS NULL", to)?.n ?? 0;
365
- const urgent = !!(opts.now || opts.interrupt);
366
- const id = insert(to, from, "message", text, wantsReply, null, answered.length ? yours(answered) : null, urgent, bySend);
456
+ const answered = from && text ? answerBySend(from, to) : [];
457
+ const ahead = (get("SELECT COUNT(*) AS n FROM session_messages WHERE to_session = ? AND delivered_at IS NULL", to)?.n ?? 0) - queued.length;
458
+ let id;
459
+ if (queued.length) {
460
+ id = queued.at(-1).id;
461
+ for (const table of ["session_messages", "message_log"]) db.prepare(`UPDATE ${table} SET urgent = 1 WHERE id IN ${inIds(queued.map((r) => r.id))}`).run(...queued.map((r) => r.id));
462
+ } else id = insert(to, from, "message", text, wantsReply, null, answered.length ? yours(answered) : null, urgent || !!from && !wantsReply, bySend);
367
463
  recompute();
368
464
  const interrupted = !!opts.interrupt && !!live && turnPhase(to) === "working" && !delivering.has(to) && await interruptSession(to);
369
465
  const sent = await deliver(to);
@@ -397,16 +493,71 @@ async function sendMessage(to, text, opts = {}) {
397
493
  /** Its messages this answers (`answerBySend`). */
398
494
  answered: answered.length ? yours(answered, "its") : null,
399
495
  /** It had closed, and is back on its conversation. */
400
- reopened: !live
496
+ reopened: !live,
497
+ /** With no text: how many of the sender's queued messages went now. */
498
+ promoted: queued.length
401
499
  };
402
500
  }
501
+ /** Start `id` again on its own conversation (`work session reopen`, a
502
+ * message to one closed for being done): one closed, its row back
503
+ * (`reopenSession`), under `by` when the session that started it is gone;
504
+ * one running, its CLI restarted (`restartSession`). With `agent`, as
505
+ * another instance of its CLI: one whose account hit its limit goes on as
506
+ * another's. What is queued for it and what it owes stay, for the turn a
507
+ * message starts there to answer. Its row is back before its CLI is: a
508
+ * send meanwhile queues behind this rather than starting the CLI afresh. */
509
+ async function reopen(id, opts = {}) {
510
+ if (delivering.has(id)) throw httpError(409, `${id} is being started or typed into: try again`);
511
+ delivering.add(id);
512
+ try {
513
+ const live = getSession(id);
514
+ if (live) {
515
+ dropHold(id);
516
+ steered.delete(id);
517
+ }
518
+ const session = live ? await restartSession(id, opts.agent) : await reopenSession(id, {
519
+ agent: opts.agent,
520
+ adopt: agentCaller(opts.by)?.id
521
+ });
522
+ failedTold.delete(id);
523
+ startedAt.set(id, Date.now());
524
+ return {
525
+ session,
526
+ restarted: !!live
527
+ };
528
+ } finally {
529
+ delivering.delete(id);
530
+ kick();
531
+ }
532
+ }
533
+ /** `id`'s turn ended failing (rate limited, signed out) while it owes
534
+ * replies: it sits at its prompt until someone carries it on, and whoever
535
+ * waits on it would wait on, unknowing. Each is told why and what it can
536
+ * do; what it owes stays owed, for the turn that carries on to answer. */
537
+ function turnFailed(id, why) {
538
+ const session = getSession(id);
539
+ if (!session) return;
540
+ const last = failedTold.get(id);
541
+ if (last?.why === why && Date.now() - last.at < FAIL_RETELL_MS) return;
542
+ const askers = all("SELECT DISTINCT from_session AS id FROM session_messages WHERE to_session = ? AND wants_reply = 1 AND delivered_at IS NOT NULL AND from_session IS NOT NULL", id).map((r) => getSession(r.id)).filter((s) => !!s && s.id !== id && s.agent !== "shell");
543
+ if (!askers.length) return;
544
+ failedTold.set(id, {
545
+ why,
546
+ at: Date.now()
547
+ });
548
+ const others = agentChoices().filter((a) => a.enabled && a.id !== session.agent && a.family === agentFamily(session.agent)).map((a) => a.id);
549
+ const move = reopenable(session) && others.length ? ` If its account is out, \`work session reopen ${id} --agent ${others[0]}\` starts it again on its conversation as ${others.join(" or ")}, then a message carries it on.` : "";
550
+ for (const asker of askers) insert(asker.id, session, "notice", `Session ${labelOf(session)} stopped: its turn failed (${why}). It still owes your reply, which comes once its turn goes on: a message to it, or the user typing into it, carries it on.${move}`);
551
+ recompute();
552
+ kick();
553
+ }
403
554
  /** `from`'s send to `to` is its answer to what `to` asked it by send:
404
555
  * those messages are answered (`answerNow`'s bookkeeping), and returned
405
556
  * for the send to name. */
406
557
  function answerBySend(from, to) {
407
558
  const owed = all("SELECT * FROM session_messages WHERE to_session = ? AND from_session = ? AND kind = 'message' AND wants_reply = 1 AND by_send = 1 AND delivered_at IS NOT NULL ORDER BY id", from.id, to);
408
559
  if (!owed.length) return owed;
409
- deleteIds(owed.map((r) => r.id));
560
+ deleteIds(owed.map((r) => r.id), "answered by a send");
410
561
  noteAnswered(from.id);
411
562
  return owed;
412
563
  }
@@ -420,7 +571,8 @@ function answerBySend(from, to) {
420
571
  function takeReplies(me, from, any = false) {
421
572
  const wanted = (r) => !from?.length || r.from_session !== null && from.includes(r.from_session) || r.group_id !== null && from.includes(r.group_id);
422
573
  const rows = delivering.has(me) ? [] : all("SELECT * FROM session_messages WHERE to_session = ? AND (kind != 'message' OR answers IS NOT NULL) AND delivered_at IS NULL ORDER BY id", me).filter(wanted).filter((r) => any || !r.group_id || team.groupReleased(r.group_id));
423
- deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id));
574
+ logDelivered(rows.map((r) => r.id), "taken by wait");
575
+ deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id), "delivered");
424
576
  const asks = rows.filter((r) => r.wants_reply).map((r) => r.id);
425
577
  if (asks.length) db.prepare(`UPDATE session_messages SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
426
578
  WHERE id IN (${asks.map(() => "?").join(",")})`).run(...asks);
@@ -539,7 +691,7 @@ function answerNow(id, message) {
539
691
  }
540
692
  if (held) db.prepare(`UPDATE session_messages SET held = NULL WHERE id IN (${owed.map(() => "?").join(",")})`).run(...owed.map((r) => r.id));
541
693
  else {
542
- deleteIds(owed.map((r) => r.id));
694
+ deleteIds(owed.map((r) => r.id), "answered");
543
695
  if (askers.size) {
544
696
  answered.set(id, {
545
697
  askers,
@@ -629,6 +781,7 @@ function settle(id, why) {
629
781
  steered.delete(id);
630
782
  answered.delete(id);
631
783
  repliedAt.delete(id);
784
+ failedTold.delete(id);
632
785
  const session = getSession(id);
633
786
  const label = session ? labelOf(session) : id;
634
787
  const group = team.memberGroup(id);
@@ -637,6 +790,9 @@ function settle(id, why) {
637
790
  const to = getSession(asker);
638
791
  if (to && to.id !== id && to.agent !== "shell") insert(to.id, session ?? null, "closed", `Session ${label} ${why}`, false, group);
639
792
  }
793
+ const gone = all("SELECT id, wants_reply FROM session_messages WHERE to_session = ?", id);
794
+ logDone(gone.filter((r) => r.wants_reply).map((r) => r.id), why.replace(/\.$/, ""));
795
+ logDone(gone.filter((r) => !r.wants_reply).map((r) => r.id), "dropped: its session went");
640
796
  db.prepare("DELETE FROM session_messages WHERE to_session = ?").run(id);
641
797
  if (group) team.memberGone(id);
642
798
  recompute();
@@ -645,7 +801,8 @@ function settle(id, why) {
645
801
  /** The scraper found no pane for the session. */
646
802
  function sessionGone(id) {
647
803
  if (!mailboxes.has(id) || delivering.has(id)) return;
648
- if (Date.now() - (deliveredAt.get(id) ?? 0) < START_GRACE_MS) return;
804
+ const started = Math.max(deliveredAt.get(id) ?? 0, startedAt.get(id) ?? 0);
805
+ if (Date.now() - started < START_GRACE_MS) return;
649
806
  settle(id, "exited before it replied.");
650
807
  }
651
808
  var started$1 = false;
@@ -653,10 +810,11 @@ function startMessages() {
653
810
  if (started$1) return;
654
811
  started$1 = true;
655
812
  onTurnEnd(answer);
813
+ onTurnFailed(turnFailed);
656
814
  onPhaseChange(kick);
657
815
  onSessionDispose((id) => {
658
816
  settle(id, "was closed before it replied.");
659
- db.prepare("DELETE FROM session_messages WHERE from_session = ? AND delivered_at IS NOT NULL AND kind = 'message'").run(id);
817
+ deleteIds(all("SELECT id FROM session_messages WHERE from_session = ? AND delivered_at IS NOT NULL AND kind = 'message'", id).map((r) => r.id), "dropped: its sender closed");
660
818
  db.prepare("UPDATE session_messages SET wants_reply = 0 WHERE from_session = ?").run(id);
661
819
  recompute();
662
820
  });
@@ -1043,7 +1201,7 @@ function keepSession(id) {
1043
1201
  if (!getSession(id)) {
1044
1202
  const closed = closedSession(id);
1045
1203
  if (!closed) throw httpError(404, `no session ${id}`);
1046
- throw httpError(409, reopenable(closed) ? `${id} has closed: a message reopens it on its conversation (\`work session send ${id} "…"\`), and it can be kept then` : `${id} has closed, and its conversation with it: start a new session with --keep`);
1204
+ throw httpError(409, !reopenable(closed) ? `${id} has closed, and its conversation with it: start a new session with --keep` : closed.how === "done" ? `${id} has closed: a message reopens it on its conversation (\`work session send ${id} "…"\`), and it can be kept then` : `${id} has closed: \`work session reopen ${id}\` starts it again on its conversation, and it can be kept then`);
1047
1205
  }
1048
1206
  db.prepare("UPDATE sessions SET keep = 1 WHERE id = ?").run(id);
1049
1207
  }
@@ -1056,7 +1214,8 @@ function closing(id, asker) {
1056
1214
  const closed = closedSession(id);
1057
1215
  return closed && {
1058
1216
  closed: true,
1059
- reopens: reopenable(closed)
1217
+ reopens: closed.how === "done" && reopenable(closed),
1218
+ restarts: reopenable(closed)
1060
1219
  };
1061
1220
  }
1062
1221
  if (!s.parent_id || s.keep) return void 0;
@@ -1103,4 +1262,4 @@ function startTeam() {
1103
1262
  kickPool();
1104
1263
  }
1105
1264
  //#endregion
1106
- export { startMessages as _, keepSession as a, retryMember as c, teamOf as d, teamsOf as f, sessionGone as g, sendMessage as h, createGroup as i, skipMember as l, messageStates as m, closeDone as n, kickPool as o, holdReply as p, closeFinished as r, memberWorkspace as s, clearGroup as t, startTeam as u, takeReplies as v };
1265
+ export { sendMessage as _, keepSession as a, takeReplies as b, retryMember as c, teamOf as d, teamsOf as f, reopen as g, messageStates as h, createGroup as i, skipMember as l, messageLog as m, closeDone as n, kickPool as o, holdReply as p, closeFinished as r, memberWorkspace as s, clearGroup as t, startTeam as u, sessionGone as v, startMessages as y };