@dylanpiercey/work 0.2.44 → 0.2.46

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 (485) hide show
  1. package/bin/cli/session.mjs +28 -4
  2. package/dist/_B3vnjx9I.js +2 -0
  3. package/dist/{_Cv5RrCSW.js → _Bt8-Yuz-.js} +46 -11
  4. package/dist/{_DIwr1RBh.js → _CgUfpqH_.js} +71 -71
  5. package/dist/_CydDAvZA.js +2 -0
  6. package/dist/{_DuwPQCOE.js → _D6z2VKMF.js} +122 -21
  7. package/dist/index.mjs +1031 -1002
  8. package/dist/public/assets/_07DPZXr7.js +1 -0
  9. package/dist/public/assets/_08wRQUGN.js +1 -0
  10. package/dist/public/assets/{_DbXISrnz.js → _0VfEjNd2.js} +1 -1
  11. package/dist/public/assets/_0VfEjNd2.js.br +0 -0
  12. package/dist/public/assets/_1Wf_OdWr.js +1 -0
  13. package/dist/public/assets/_1z9zXEpe.js +1 -0
  14. package/dist/public/assets/_2nkTPOt0.js +1 -0
  15. package/dist/public/assets/{_DpkEy7xD.js → _3062YLgj.js} +1 -1
  16. package/dist/public/assets/{_DpkEy7xD.js.br → _3062YLgj.js.br} +0 -0
  17. package/dist/public/assets/{_CFRyEmz9.js → _3_Fn8PgO.js} +1 -1
  18. package/dist/public/assets/_3_Fn8PgO.js.br +0 -0
  19. package/dist/public/assets/_5LWwFaNp.js +1 -0
  20. package/dist/public/assets/{_BhEWYlaD.js → _6KmyKdIc.js} +1 -1
  21. package/dist/public/assets/_6KmyKdIc.js.br +0 -0
  22. package/dist/public/assets/{_ncO15QKP.js → _6t6Khsbs.js} +1 -1
  23. package/dist/public/assets/_6t6Khsbs.js.br +0 -0
  24. package/dist/public/assets/_86prgFCd.js +1 -0
  25. package/dist/public/assets/{_CHZBmkiY.js → _9WGPsB1P.js} +2 -2
  26. package/dist/public/assets/_9WGPsB1P.js.br +0 -0
  27. package/dist/public/assets/_A2vf592x.js +1 -0
  28. package/dist/public/assets/_B1GBCKYf.js +1 -0
  29. package/dist/public/assets/{_NFyQLwL2.js → _B2qN-uSx.js} +1 -1
  30. package/dist/public/assets/_B2qN-uSx.js.br +0 -0
  31. package/dist/public/assets/{_rCLcJh8a.js → _B3mMB6IW.js} +1 -1
  32. package/dist/public/assets/_B3mMB6IW.js.br +0 -0
  33. package/dist/public/assets/{_BESJywRP.js → _B4-QHptK.js} +1 -1
  34. package/dist/public/assets/_B4-QHptK.js.br +0 -0
  35. package/dist/public/assets/_B4BWloOc.js +1 -0
  36. package/dist/public/assets/{_BeUy9moF.js → _B7hq3Ru-.js} +1 -1
  37. package/dist/public/assets/_B7hq3Ru-.js.br +0 -0
  38. package/dist/public/assets/{_TnU4GgL4.js → _B8fF9jNI.js} +1 -1
  39. package/dist/public/assets/_B8fF9jNI.js.br +0 -0
  40. package/dist/public/assets/_B8y1loQR.js +1 -0
  41. package/dist/public/assets/_BAJu_ilQ.js +1 -0
  42. package/dist/public/assets/{_CmCSdTYC.js → _BCyeW-5f.js} +1 -1
  43. package/dist/public/assets/_BCyeW-5f.js.br +0 -0
  44. package/dist/public/assets/_BDKjA-2v.js +1 -0
  45. package/dist/public/assets/_BEWysy2V.js +1 -0
  46. package/dist/public/assets/_BEqpEmwI.js +1 -0
  47. package/dist/public/assets/_BFQVeIhi.js +1 -0
  48. package/dist/public/assets/{_D665uiM0.js → _BFgPPx2K.js} +1 -1
  49. package/dist/public/assets/_BFgPPx2K.js.br +0 -0
  50. package/dist/public/assets/{_DR3Klkrj.js → _BGSovfKD.js} +1 -1
  51. package/dist/public/assets/_BGSovfKD.js.br +0 -0
  52. package/dist/public/assets/_BI41G8D8.js +1 -0
  53. package/dist/public/assets/_BJIxhVMt.js +1 -0
  54. package/dist/public/assets/{_olpqzRSA.js → _BMaz6Hlg.js} +1 -1
  55. package/dist/public/assets/_BMaz6Hlg.js.br +0 -0
  56. package/dist/public/assets/{_B1HStpW0.js → _BNSQCIDt.js} +1 -1
  57. package/dist/public/assets/_BNSQCIDt.js.br +0 -0
  58. package/dist/public/assets/_BO6aeQrW.js +1 -0
  59. package/dist/public/assets/_BQuACzO7.js +1 -0
  60. package/dist/public/assets/{_bqkRF2KZ.js → _BRhPRtlv.js} +1 -1
  61. package/dist/public/assets/_BRhPRtlv.js.br +0 -0
  62. package/dist/public/assets/_BTe-w-J6.js +1 -0
  63. package/dist/public/assets/_BV8XnvwV.js +1 -0
  64. package/dist/public/assets/{__ALUCVjh.js → _BXRwh2Al.js} +1 -1
  65. package/dist/public/assets/_BXRwh2Al.js.br +0 -0
  66. package/dist/public/assets/_BXiyISCd.js +1 -0
  67. package/dist/public/assets/_BYnRByth.js +1 -0
  68. package/dist/public/assets/{_Dbu06XRI.js → _B_fBTSnD.js} +1 -1
  69. package/dist/public/assets/_B_fBTSnD.js.br +0 -0
  70. package/dist/public/assets/_BaAQSHn0.js +1 -0
  71. package/dist/public/assets/{_0eK035R8.js → _BaG6c9sv.js} +1 -1
  72. package/dist/public/assets/_BaG6c9sv.js.br +0 -0
  73. package/dist/public/assets/{_C7x79ALL.js → _BbLKsvgo.js} +1 -1
  74. package/dist/public/assets/_BbLKsvgo.js.br +0 -0
  75. package/dist/public/assets/_BgclFRcr.js +1 -0
  76. package/dist/public/assets/{_Clxk4NM9.js → _Bh6lf0Dh.js} +1 -1
  77. package/dist/public/assets/_Bh6lf0Dh.js.br +0 -0
  78. package/dist/public/assets/{_BGe5YZvC.js → _BiHuHdx-.js} +1 -1
  79. package/dist/public/assets/_BiHuHdx-.js.br +0 -0
  80. package/dist/public/assets/{_530dhCBX.js → _Bo3-3eyC.js} +1 -1
  81. package/dist/public/assets/_Bo3-3eyC.js.br +0 -0
  82. package/dist/public/assets/{_DHIh3Zqg.js → _BtdanPuB.js} +1 -1
  83. package/dist/public/assets/{_DQ-mN0nj.js → _BvOuwQ8N.js} +1 -1
  84. package/dist/public/assets/_BvOuwQ8N.js.br +0 -0
  85. package/dist/public/assets/{_DP401U9L.js → _BwWI7qo_.js} +1 -1
  86. package/dist/public/assets/_BwWI7qo_.js.br +0 -0
  87. package/dist/public/assets/{_DC-362Aa.js → _BxWvBNHS.js} +1 -1
  88. package/dist/public/assets/_BxWvBNHS.js.br +0 -0
  89. package/dist/public/assets/_Bz2glzhS.js +1 -0
  90. package/dist/public/assets/{_s7sH946N.js → _C2PEapy8.js} +1 -1
  91. package/dist/public/assets/_C2_9xA4D.js +1 -0
  92. package/dist/public/assets/_C4WyjeuP.js +1 -0
  93. package/dist/public/assets/{_DzgXbNBA.js → _C5ecLBA6.js} +1 -1
  94. package/dist/public/assets/_C5ecLBA6.js.br +0 -0
  95. package/dist/public/assets/{_QAl9MOeZ.js → _C640DnLS.js} +1 -1
  96. package/dist/public/assets/_C640DnLS.js.br +0 -0
  97. package/dist/public/assets/{_DPOs-wSZ.js → _C77Poa9J.js} +1 -1
  98. package/dist/public/assets/{_B2bgY7VH.js → _C7whm1Nn.js} +1 -1
  99. package/dist/public/assets/_C7whm1Nn.js.br +0 -0
  100. package/dist/public/assets/_C88aZNAi.js +1 -0
  101. package/dist/public/assets/_C9_qDsY-.js +1 -0
  102. package/dist/public/assets/{_BEYtrZXu.js → _CBcrcnfS.js} +1 -1
  103. package/dist/public/assets/_CBcrcnfS.js.br +0 -0
  104. package/dist/public/assets/{_DVMRwfVQ.js → _CGpZU6S2.js} +1 -1
  105. package/dist/public/assets/_CGpZU6S2.js.br +0 -0
  106. package/dist/public/assets/{_B7h5MWRM.js → _CHdSsujh.js} +1 -1
  107. package/dist/public/assets/_CHdSsujh.js.br +0 -0
  108. package/dist/public/assets/{_Ds1I-o0I.js → _CICUwseA.js} +1 -1
  109. package/dist/public/assets/_CICUwseA.js.br +0 -0
  110. package/dist/public/assets/{_Bcf_bFWr.js → _CLlEoBUR.js} +1 -1
  111. package/dist/public/assets/_CLlEoBUR.js.br +0 -0
  112. package/dist/public/assets/{_UpY10-py.js → _CNaCO8qU.js} +1 -1
  113. package/dist/public/assets/_CNaCO8qU.js.br +0 -0
  114. package/dist/public/assets/{_B5jpXalG.js → _COjCqlmp.js} +4 -4
  115. package/dist/public/assets/_COjCqlmp.js.br +0 -0
  116. package/dist/public/assets/_CPxC0d1M.js +1 -0
  117. package/dist/public/assets/_CQsEhfnl.js +1 -0
  118. package/dist/public/assets/{_9XfT_kAQ.js → _CR1y8nW7.js} +1 -1
  119. package/dist/public/assets/_CR1y8nW7.js.br +0 -0
  120. package/dist/public/assets/{_uqG4sflc.js → _CRhJRYNz.js} +1 -1
  121. package/dist/public/assets/_CRhJRYNz.js.br +0 -0
  122. package/dist/public/assets/_CYNaBdHA.js +1 -0
  123. package/dist/public/assets/{_CpFF408S.js → _CaYSfrFd.js} +1 -1
  124. package/dist/public/assets/_CaYSfrFd.js.br +0 -0
  125. package/dist/public/assets/_CamgMS3D.js +1 -0
  126. package/dist/public/assets/_CbU3RVtr.js +1 -0
  127. package/dist/public/assets/{_DvQxG-WL.js → _CcX0Jey7.js} +1 -1
  128. package/dist/public/assets/_CcX0Jey7.js.br +0 -0
  129. package/dist/public/assets/{_BfP0KDqb.js → _CfCp4vJp.js} +5 -5
  130. package/dist/public/assets/_CfCp4vJp.js.br +0 -0
  131. package/dist/public/assets/{_DbZt6CiW.js → _CgP3buKY.js} +1 -1
  132. package/dist/public/assets/_CgP3buKY.js.br +0 -0
  133. package/dist/public/assets/{_BRMftHcc.js → _Chdtxhew.js} +1 -1
  134. package/dist/public/assets/_Chdtxhew.js.br +0 -0
  135. package/dist/public/assets/{_CAaE_29m.js → _Ckp8RZGq.js} +1 -1
  136. package/dist/public/assets/_Ckp8RZGq.js.br +0 -0
  137. package/dist/public/assets/{_DP1Fr0Go.js → _Cn1TM7-5.js} +1 -1
  138. package/dist/public/assets/_Cn1TM7-5.js.br +0 -0
  139. package/dist/public/assets/{_CipnEfhW.js → _CoFw9cMY.js} +1 -1
  140. package/dist/public/assets/_CoFw9cMY.js.br +0 -0
  141. package/dist/public/assets/_Cpo_TxXV.js +1 -0
  142. package/dist/public/assets/_Cq3t1G49.js +1 -0
  143. package/dist/public/assets/_Cr7nH3MS.js +1 -0
  144. package/dist/public/assets/{_4xxPjzRG.js → _CtpHYmCv.js} +3 -3
  145. package/dist/public/assets/_CtpHYmCv.js.br +0 -0
  146. package/dist/public/assets/_CvazcY8W.js +1 -0
  147. package/dist/public/assets/_CvlRzC-0.js +1 -0
  148. package/dist/public/assets/{_D1L2c6wa.js → _Cyt5ill4.js} +1 -1
  149. package/dist/public/assets/_Cyt5ill4.js.br +0 -0
  150. package/dist/public/assets/{_D3df-HXh.js → _D-_kTXf3.js} +1 -1
  151. package/dist/public/assets/_D-_kTXf3.js.br +0 -0
  152. package/dist/public/assets/_D-faw_0L.js +1 -0
  153. package/dist/public/assets/{_CC5Ll6yL.js → _D1Aa6P4B.js} +1 -1
  154. package/dist/public/assets/_D1Aa6P4B.js.br +0 -0
  155. package/dist/public/assets/{_mP9WBNxQ.js → _D1dVvLMx.js} +1 -1
  156. package/dist/public/assets/_D1dVvLMx.js.br +0 -0
  157. package/dist/public/assets/_D4Er36PM.js +1 -0
  158. package/dist/public/assets/_D5W9p0WV.js +1 -0
  159. package/dist/public/assets/_D7ucV3sr.js +1 -0
  160. package/dist/public/assets/_DAPe0V47.js +1 -0
  161. package/dist/public/assets/{_CFjEXYsy.js → _DAdUUTtJ.js} +1 -1
  162. package/dist/public/assets/_DAdUUTtJ.js.br +0 -0
  163. package/dist/public/assets/{_BzTvUB76.js → _DBEiB-F6.js} +1 -1
  164. package/dist/public/assets/_DBEiB-F6.js.br +0 -0
  165. package/dist/public/assets/_DBctHZLK.js +1 -0
  166. package/dist/public/assets/{_D_Gans_z.js → _DBv3fGYE.js} +1 -1
  167. package/dist/public/assets/_DBv3fGYE.js.br +0 -0
  168. package/dist/public/assets/{_CdSpe7--.js → _DF4OaQAU.js} +1 -1
  169. package/dist/public/assets/_DF4OaQAU.js.br +0 -0
  170. package/dist/public/assets/_DFwzi8U8.js +1 -0
  171. package/dist/public/assets/_DHQEX0nD.js +1 -0
  172. package/dist/public/assets/{_T_ugRwFS.js → _DNqU_rKJ.js} +1 -1
  173. package/dist/public/assets/_DNqU_rKJ.js.br +0 -0
  174. package/dist/public/assets/{_DTeRAxTo.js → _DOCOp6Go.js} +1 -1
  175. package/dist/public/assets/_DOCOp6Go.js.br +0 -0
  176. package/dist/public/assets/_DOVzGje7.js +1 -0
  177. package/dist/public/assets/{_D0t4sewY.js → _DQLW0m4y.js} +1 -1
  178. package/dist/public/assets/_DQLW0m4y.js.br +0 -0
  179. package/dist/public/assets/_DQfGw_P8.js +1 -0
  180. package/dist/public/assets/{_ClKuBt_u.js → _DRThO3gZ.js} +1 -1
  181. package/dist/public/assets/_DRThO3gZ.js.br +0 -0
  182. package/dist/public/assets/{_DzNaxOWz.js → _DU6PhG61.js} +1 -1
  183. package/dist/public/assets/_DU6PhG61.js.br +0 -0
  184. package/dist/public/assets/_DV_CV4qz.js +1 -0
  185. package/dist/public/assets/_DWH0-FSS.js +1 -0
  186. package/dist/public/assets/_DWoDffrF.js +1 -0
  187. package/dist/public/assets/{_DpPC5wTX.js → _DYCBg-3P.js} +1 -1
  188. package/dist/public/assets/_DYCBg-3P.js.br +0 -0
  189. package/dist/public/assets/_DZDcyXO3.js +1 -0
  190. package/dist/public/assets/_DZKlzCXH.js +1 -0
  191. package/dist/public/assets/{_DbUljy8T.js → _DZqRuVY-.js} +1 -1
  192. package/dist/public/assets/_DZqRuVY-.js.br +0 -0
  193. package/dist/public/assets/{_Gds0N5t0.js → _DajOQ0p0.js} +1 -1
  194. package/dist/public/assets/_DajOQ0p0.js.br +0 -0
  195. package/dist/public/assets/_Dd-_REt8.js +1 -0
  196. package/dist/public/assets/{_DNJ8I4VP.js → _DfYARtjJ.js} +1 -1
  197. package/dist/public/assets/{_BVmlWew8.js → _DgSkQsqB.js} +1 -1
  198. package/dist/public/assets/_DgSkQsqB.js.br +0 -0
  199. package/dist/public/assets/_DiU7LTfa.js +1 -0
  200. package/dist/public/assets/{_C7wOvGGt.js → _DianI9x7.js} +1 -1
  201. package/dist/public/assets/_DianI9x7.js.br +0 -0
  202. package/dist/public/assets/{_Dj3bzjmr.js → _DjV9yrW6.js} +1 -1
  203. package/dist/public/assets/_DjV9yrW6.js.br +0 -0
  204. package/dist/public/assets/{_TQk60Mlv.js → _DjpQS0xq.js} +1 -1
  205. package/dist/public/assets/_DjpQS0xq.js.br +0 -0
  206. package/dist/public/assets/{_6rlK2kiT.js → _Dmhofxcm.js} +1 -1
  207. package/dist/public/assets/_Dmhofxcm.js.br +0 -0
  208. package/dist/public/assets/{_IiWL7q-1.js → _Dp1ms5zF.js} +1 -1
  209. package/dist/public/assets/_Dp1ms5zF.js.br +0 -0
  210. package/dist/public/assets/{_G89RhQlY.js → _Dpu3dg5I.js} +1 -1
  211. package/dist/public/assets/_Dpu3dg5I.js.br +0 -0
  212. package/dist/public/assets/_Ds40TSNI.js +1 -0
  213. package/dist/public/assets/{_DcxKRExU.js → _DtT55n_J.js} +1 -1
  214. package/dist/public/assets/_DtT55n_J.js.br +0 -0
  215. package/dist/public/assets/_DtTjnlLs.js +1 -0
  216. package/dist/public/assets/_DtW9UETb.js +1 -0
  217. package/dist/public/assets/{_D140ilf3.js → _DtnrVsRK.js} +1 -1
  218. package/dist/public/assets/_DtnrVsRK.js.br +0 -0
  219. package/dist/public/assets/{_DibgD9wu.js → _DxcLTdo3.js} +2 -2
  220. package/dist/public/assets/_DxcLTdo3.js.br +0 -0
  221. package/dist/public/assets/{_B18ixB2z.js → _DyJZTi6y.js} +1 -1
  222. package/dist/public/assets/_DyJZTi6y.js.br +0 -0
  223. package/dist/public/assets/{_CT9asvR7.js → _EX4X2azx.js} +1 -1
  224. package/dist/public/assets/_EX4X2azx.js.br +0 -0
  225. package/dist/public/assets/_FUJj09Aa.js +1 -0
  226. package/dist/public/assets/{_CH6cXBn1.js → _HTw1hZ7n.js} +1 -1
  227. package/dist/public/assets/_HTw1hZ7n.js.br +0 -0
  228. package/dist/public/assets/{_Wo5eUHN5.js → _HU17ZBCh.js} +1 -1
  229. package/dist/public/assets/_HU17ZBCh.js.br +0 -0
  230. package/dist/public/assets/_HoDJM8Kr.js +1 -0
  231. package/dist/public/assets/{_DtvewBGv.js → _I_eKN5k1.js} +1 -1
  232. package/dist/public/assets/_I_eKN5k1.js.br +0 -0
  233. package/dist/public/assets/{_8JlVECZ4.js → _JQSdYVRk.js} +8 -8
  234. package/dist/public/assets/_JQSdYVRk.js.br +0 -0
  235. package/dist/public/assets/{_C82_OMnf.js → _KtOrWyBs.js} +1 -1
  236. package/dist/public/assets/_KtOrWyBs.js.br +0 -0
  237. package/dist/public/assets/_L1Awvwo_.js +1 -0
  238. package/dist/public/assets/{_Dof9bk1s.js → _LLp3thdq.js} +1 -1
  239. package/dist/public/assets/_LLp3thdq.js.br +0 -0
  240. package/dist/public/assets/{_Cv9dhNUU.js → _M3RJBEZd.js} +1 -1
  241. package/dist/public/assets/_M3RJBEZd.js.br +0 -0
  242. package/dist/public/assets/{_BvZ6Gp79.js → _MHK7SJnf.js} +1 -1
  243. package/dist/public/assets/_MSo-mC7b.js +1 -0
  244. package/dist/public/assets/_MVjP6okL.js +1 -0
  245. package/dist/public/assets/_Nmx8ht5r.js +1 -0
  246. package/dist/public/assets/_OAWOExco.js +1 -0
  247. package/dist/public/assets/_PgGnObpP.js +1 -0
  248. package/dist/public/assets/_SFlJk0KA.js +1 -0
  249. package/dist/public/assets/{_ClqL5v_T.js → _Sccdm1d4.js} +1 -1
  250. package/dist/public/assets/_Sccdm1d4.js.br +0 -0
  251. package/dist/public/assets/_XhZ24upQ.js +1 -0
  252. package/dist/public/assets/{_BnmFcEOd.js → _b2_MrNZF.js} +1 -1
  253. package/dist/public/assets/_b2_MrNZF.js.br +0 -0
  254. package/dist/public/assets/_dTwiVIzY.js +1 -0
  255. package/dist/public/assets/_dh91hurm.js +1 -0
  256. package/dist/public/assets/{_tGYm6QKl.js → _dnC2WqPG.js} +1 -1
  257. package/dist/public/assets/_dnC2WqPG.js.br +0 -0
  258. package/dist/public/assets/{_B6sV8ze1.js → _dwUpjnsm.js} +1 -1
  259. package/dist/public/assets/_dwUpjnsm.js.br +0 -0
  260. package/dist/public/assets/{_BeDFg_MS.js → _ela1IQsi.js} +1 -1
  261. package/dist/public/assets/_ela1IQsi.js.br +0 -0
  262. package/dist/public/assets/_guhExb3L.js +1 -0
  263. package/dist/public/assets/{_HfPt-BIP.js → _h8iE5PZL.js} +2 -2
  264. package/dist/public/assets/_h8iE5PZL.js.br +0 -0
  265. package/dist/public/assets/{_BhFFgml5.js → _hGY8lgcw.js} +1 -1
  266. package/dist/public/assets/_hGY8lgcw.js.br +0 -0
  267. package/dist/public/assets/{_DqPdlS_6.js → _kxB5Bg8c.js} +1 -1
  268. package/dist/public/assets/_kxB5Bg8c.js.br +0 -0
  269. package/dist/public/assets/{_BD0MMovF.js → _mT2I-DYF.js} +1 -1
  270. package/dist/public/assets/_oxp14T_D.js +1 -0
  271. package/dist/public/assets/_pS1XexGw.js +1 -0
  272. package/dist/public/assets/_tYRHpO1A.js +1 -0
  273. package/dist/public/assets/{_Vlcj833j.js → _wTVBziXb.js} +1 -1
  274. package/dist/public/assets/_wTVBziXb.js.br +0 -0
  275. package/dist/public/assets/_wdT4EsHl.js +1 -0
  276. package/dist/public/assets/{_Jr9Fn7zH.js → _wwMcc9Hq.js} +1 -1
  277. package/dist/public/assets/_wwMcc9Hq.js.br +0 -0
  278. package/dist/public/assets/{_DfqWGAs9.js → _xZsUcQXh.js} +1 -1
  279. package/dist/public/assets/_xZsUcQXh.js.br +0 -0
  280. package/dist/public/assets/{_C2NGeccQ.js → _yfqe2ILN.js} +1 -1
  281. package/dist/public/assets/_yfqe2ILN.js.br +0 -0
  282. package/dist/public/assets/_zIelSr0v.js +1 -0
  283. package/dist/public/assets/_zxQodFWi.js +1 -0
  284. package/dist/public/assets/files-view-Dl1OHSh1.js +2 -0
  285. package/dist/public/assets/manage-workspace-DfndlchL.js +2 -0
  286. package/dist/public/assets/new-2gMkMX2J.js +1 -0
  287. package/dist/public/assets/new-workspace-lmSUsWNd.js +2 -0
  288. package/dist/public/assets/review-view-DMvee18O.js +2 -0
  289. package/dist/public/assets/settings-2gMkMX2J.js +1 -0
  290. package/dist/public/assets/settings-page-ENtf823h.js +2 -0
  291. package/dist/public/assets/{styles-C9roDUa_.css → styles-DXK4hhwJ.css} +1 -1
  292. package/dist/public/assets/styles-DXK4hhwJ.css.br +0 -0
  293. package/dist/public/assets/w-2gMkMX2J.js +1 -0
  294. package/dist/public/assets/w._-2gMkMX2J.js +1 -0
  295. package/dist/public/assets/w._-BPC5YcdG.js +1 -0
  296. package/dist/public/assets/w._-DSTAD-Wr.js +1 -0
  297. package/package.json +1 -1
  298. package/dist/_BKkT73fv.js +0 -2
  299. package/dist/_BviTiVOB.js +0 -2
  300. package/dist/public/assets/_0eK035R8.js.br +0 -0
  301. package/dist/public/assets/_291ndbCK.js +0 -1
  302. package/dist/public/assets/_2PuzSbrq.js +0 -1
  303. package/dist/public/assets/_2UvV2KY_.js +0 -1
  304. package/dist/public/assets/_3QFQfjGY.js +0 -1
  305. package/dist/public/assets/_4xxPjzRG.js.br +0 -0
  306. package/dist/public/assets/_530dhCBX.js.br +0 -0
  307. package/dist/public/assets/_6rlK2kiT.js.br +0 -0
  308. package/dist/public/assets/_8JlVECZ4.js.br +0 -0
  309. package/dist/public/assets/_9XfT_kAQ.js.br +0 -0
  310. package/dist/public/assets/_B18ixB2z.js.br +0 -0
  311. package/dist/public/assets/_B1HStpW0.js.br +0 -0
  312. package/dist/public/assets/_B2bgY7VH.js.br +0 -0
  313. package/dist/public/assets/_B4FsUOio.js +0 -1
  314. package/dist/public/assets/_B5jpXalG.js.br +0 -0
  315. package/dist/public/assets/_B6sV8ze1.js.br +0 -0
  316. package/dist/public/assets/_B7h5MWRM.js.br +0 -0
  317. package/dist/public/assets/_B92854gS.js +0 -1
  318. package/dist/public/assets/_B97w9gKV.js +0 -1
  319. package/dist/public/assets/_BAqeqFjt.js +0 -1
  320. package/dist/public/assets/_BESJywRP.js.br +0 -0
  321. package/dist/public/assets/_BEYtrZXu.js.br +0 -0
  322. package/dist/public/assets/_BGe5YZvC.js.br +0 -0
  323. package/dist/public/assets/_BMt7t-IK.js +0 -1
  324. package/dist/public/assets/_BNBHheBI.js +0 -1
  325. package/dist/public/assets/_BRA3nDhj.js +0 -1
  326. package/dist/public/assets/_BRMftHcc.js.br +0 -0
  327. package/dist/public/assets/_BRYOOYeT.js +0 -1
  328. package/dist/public/assets/_BRju0kTb.js +0 -1
  329. package/dist/public/assets/_BRuiRoDT.js +0 -1
  330. package/dist/public/assets/_BUt_dRbX.js +0 -1
  331. package/dist/public/assets/_BVmlWew8.js.br +0 -0
  332. package/dist/public/assets/_BWu7N39t.js +0 -1
  333. package/dist/public/assets/_BZfIAT7N.js +0 -1
  334. package/dist/public/assets/_BagsLgjl.js +0 -1
  335. package/dist/public/assets/_BcMqFuWN.js +0 -1
  336. package/dist/public/assets/_Bcf_bFWr.js.br +0 -0
  337. package/dist/public/assets/_BeDFg_MS.js.br +0 -0
  338. package/dist/public/assets/_BeUy9moF.js.br +0 -0
  339. package/dist/public/assets/_BfP0KDqb.js.br +0 -0
  340. package/dist/public/assets/_BhEWYlaD.js.br +0 -0
  341. package/dist/public/assets/_BhFFgml5.js.br +0 -0
  342. package/dist/public/assets/_BnmFcEOd.js.br +0 -0
  343. package/dist/public/assets/_BtbCF-Ab.js +0 -1
  344. package/dist/public/assets/_Bu2lbfre.js +0 -1
  345. package/dist/public/assets/_BwwB54Yi.js +0 -1
  346. package/dist/public/assets/_BxePzpXb.js +0 -1
  347. package/dist/public/assets/_BzTvUB76.js.br +0 -0
  348. package/dist/public/assets/_C04ADGqC.js +0 -1
  349. package/dist/public/assets/_C0spplQ-.js +0 -1
  350. package/dist/public/assets/_C2NGeccQ.js.br +0 -0
  351. package/dist/public/assets/_C2lKGi-7.js +0 -1
  352. package/dist/public/assets/_C7wOvGGt.js.br +0 -0
  353. package/dist/public/assets/_C7x79ALL.js.br +0 -0
  354. package/dist/public/assets/_C82_OMnf.js.br +0 -0
  355. package/dist/public/assets/_C92r8CS9.js +0 -1
  356. package/dist/public/assets/_CAaE_29m.js.br +0 -0
  357. package/dist/public/assets/_CC5Ll6yL.js.br +0 -0
  358. package/dist/public/assets/_CFRyEmz9.js.br +0 -0
  359. package/dist/public/assets/_CFjEXYsy.js.br +0 -0
  360. package/dist/public/assets/_CH6cXBn1.js.br +0 -0
  361. package/dist/public/assets/_CHZBmkiY.js.br +0 -0
  362. package/dist/public/assets/_CJmWqm4C.js +0 -1
  363. package/dist/public/assets/_CMO2Z_Bc.js +0 -1
  364. package/dist/public/assets/_CT9asvR7.js.br +0 -0
  365. package/dist/public/assets/_CYNPx6bU.js +0 -1
  366. package/dist/public/assets/_CaReJNeq.js +0 -1
  367. package/dist/public/assets/_CbZ4iWLd.js +0 -1
  368. package/dist/public/assets/_CclDITtv.js +0 -1
  369. package/dist/public/assets/_CcvFyGwr.js +0 -1
  370. package/dist/public/assets/_CdSpe7--.js.br +0 -0
  371. package/dist/public/assets/_CfSr8jIv.js +0 -1
  372. package/dist/public/assets/_CfhM3fwF.js +0 -1
  373. package/dist/public/assets/_Cg9u1cIy.js +0 -1
  374. package/dist/public/assets/_CipnEfhW.js.br +0 -0
  375. package/dist/public/assets/_ClKuBt_u.js.br +0 -0
  376. package/dist/public/assets/_ClqL5v_T.js.br +0 -0
  377. package/dist/public/assets/_Clxk4NM9.js.br +0 -0
  378. package/dist/public/assets/_CmCSdTYC.js.br +0 -0
  379. package/dist/public/assets/_CoaHm3nd.js +0 -1
  380. package/dist/public/assets/_CpFF408S.js.br +0 -0
  381. package/dist/public/assets/_CpU5S1i1.js +0 -1
  382. package/dist/public/assets/_CqrVmqkV.js +0 -1
  383. package/dist/public/assets/_Cv9dhNUU.js.br +0 -0
  384. package/dist/public/assets/_CvYqa2gH.js +0 -1
  385. package/dist/public/assets/_D0t4sewY.js.br +0 -0
  386. package/dist/public/assets/_D140ilf3.js.br +0 -0
  387. package/dist/public/assets/_D1L2c6wa.js.br +0 -0
  388. package/dist/public/assets/_D1hTHvx9.js +0 -1
  389. package/dist/public/assets/_D3_2ocdx.js +0 -1
  390. package/dist/public/assets/_D3df-HXh.js.br +0 -0
  391. package/dist/public/assets/_D3hZCQDD.js +0 -1
  392. package/dist/public/assets/_D665uiM0.js.br +0 -0
  393. package/dist/public/assets/_D74LN5c6.js +0 -1
  394. package/dist/public/assets/_D7wqbxr-.js +0 -1
  395. package/dist/public/assets/_DB0S6NuE.js +0 -1
  396. package/dist/public/assets/_DC-362Aa.js.br +0 -0
  397. package/dist/public/assets/_DDcVzNls.js +0 -1
  398. package/dist/public/assets/_DECzT6bt.js +0 -1
  399. package/dist/public/assets/_DLlMV9-6.js +0 -1
  400. package/dist/public/assets/_DM43C9JL.js +0 -1
  401. package/dist/public/assets/_DP1Fr0Go.js.br +0 -0
  402. package/dist/public/assets/_DP401U9L.js.br +0 -0
  403. package/dist/public/assets/_DQ-mN0nj.js.br +0 -0
  404. package/dist/public/assets/_DR3Klkrj.js.br +0 -0
  405. package/dist/public/assets/_DTeRAxTo.js.br +0 -0
  406. package/dist/public/assets/_DVMRwfVQ.js.br +0 -0
  407. package/dist/public/assets/_DW_Ubprt.js +0 -1
  408. package/dist/public/assets/_DXXk9nXp.js +0 -1
  409. package/dist/public/assets/_D_Gans_z.js.br +0 -0
  410. package/dist/public/assets/_DaB8vi2D.js +0 -1
  411. package/dist/public/assets/_DbUljy8T.js.br +0 -0
  412. package/dist/public/assets/_DbXISrnz.js.br +0 -0
  413. package/dist/public/assets/_DbZt6CiW.js.br +0 -0
  414. package/dist/public/assets/_Dbu06XRI.js.br +0 -0
  415. package/dist/public/assets/_DckneeMY.js +0 -1
  416. package/dist/public/assets/_DcxKRExU.js.br +0 -0
  417. package/dist/public/assets/_DfqWGAs9.js.br +0 -0
  418. package/dist/public/assets/_Dgl579Nh.js +0 -1
  419. package/dist/public/assets/_DibgD9wu.js.br +0 -0
  420. package/dist/public/assets/_DiyrK5Lf.js +0 -1
  421. package/dist/public/assets/_Dj3bzjmr.js.br +0 -0
  422. package/dist/public/assets/_Do7xRvdh.js +0 -1
  423. package/dist/public/assets/_Dof9bk1s.js.br +0 -0
  424. package/dist/public/assets/_DpPC5wTX.js.br +0 -0
  425. package/dist/public/assets/_DpUjTs7G.js +0 -1
  426. package/dist/public/assets/_DqPdlS_6.js.br +0 -0
  427. package/dist/public/assets/_DrHa8D7P.js +0 -1
  428. package/dist/public/assets/_Ds1I-o0I.js.br +0 -0
  429. package/dist/public/assets/_DtvewBGv.js.br +0 -0
  430. package/dist/public/assets/_DumoUwwg.js +0 -1
  431. package/dist/public/assets/_Dv4VzdiO.js +0 -1
  432. package/dist/public/assets/_DvQxG-WL.js.br +0 -0
  433. package/dist/public/assets/_DxQqRLZa.js +0 -1
  434. package/dist/public/assets/_DzNaxOWz.js.br +0 -0
  435. package/dist/public/assets/_DzgXbNBA.js.br +0 -0
  436. package/dist/public/assets/_FklcZQWH.js +0 -1
  437. package/dist/public/assets/_G89RhQlY.js.br +0 -0
  438. package/dist/public/assets/_Gds0N5t0.js.br +0 -0
  439. package/dist/public/assets/_GiXeI3GK.js +0 -1
  440. package/dist/public/assets/_Gll_ORl5.js +0 -1
  441. package/dist/public/assets/_HfPt-BIP.js.br +0 -0
  442. package/dist/public/assets/_IiWL7q-1.js.br +0 -0
  443. package/dist/public/assets/_JqVXhDVr.js +0 -1
  444. package/dist/public/assets/_Jr9Fn7zH.js.br +0 -0
  445. package/dist/public/assets/_Ls26XOto.js +0 -1
  446. package/dist/public/assets/_NFyQLwL2.js.br +0 -0
  447. package/dist/public/assets/_Nhgi-QD-.js +0 -1
  448. package/dist/public/assets/_QAl9MOeZ.js.br +0 -0
  449. package/dist/public/assets/_TQk60Mlv.js.br +0 -0
  450. package/dist/public/assets/_T_ugRwFS.js.br +0 -0
  451. package/dist/public/assets/_TnU4GgL4.js.br +0 -0
  452. package/dist/public/assets/_UpY10-py.js.br +0 -0
  453. package/dist/public/assets/_Usk3bCPM.js +0 -1
  454. package/dist/public/assets/_Vlcj833j.js.br +0 -0
  455. package/dist/public/assets/_Wo5eUHN5.js.br +0 -0
  456. package/dist/public/assets/__ALUCVjh.js.br +0 -0
  457. package/dist/public/assets/_aZ6tRh8w.js +0 -1
  458. package/dist/public/assets/_bqkRF2KZ.js.br +0 -0
  459. package/dist/public/assets/_eMO2gO0b.js +0 -1
  460. package/dist/public/assets/_l1uKMSvb.js +0 -1
  461. package/dist/public/assets/_mP9WBNxQ.js.br +0 -0
  462. package/dist/public/assets/_mY65qOO7.js +0 -1
  463. package/dist/public/assets/_ncO15QKP.js.br +0 -0
  464. package/dist/public/assets/_oZz3CTxP.js +0 -1
  465. package/dist/public/assets/_olpqzRSA.js.br +0 -0
  466. package/dist/public/assets/_rCLcJh8a.js.br +0 -0
  467. package/dist/public/assets/_scUJ1lcr.js +0 -1
  468. package/dist/public/assets/_sw1ZHuO5.js +0 -1
  469. package/dist/public/assets/_tGYm6QKl.js.br +0 -0
  470. package/dist/public/assets/_uqG4sflc.js.br +0 -0
  471. package/dist/public/assets/_wmcdeGwt.js +0 -1
  472. package/dist/public/assets/_xR8BGGM6.js +0 -1
  473. package/dist/public/assets/_zCwVHOcY.js +0 -1
  474. package/dist/public/assets/files-view-tHbs4LZi.js +0 -2
  475. package/dist/public/assets/manage-workspace-B2b1EELW.js +0 -2
  476. package/dist/public/assets/new-CG7PlpHU.js +0 -1
  477. package/dist/public/assets/new-workspace-CSFjnPk3.js +0 -2
  478. package/dist/public/assets/review-view-0JOZa_hN.js +0 -2
  479. package/dist/public/assets/settings-CG7PlpHU.js +0 -1
  480. package/dist/public/assets/settings-page-CUvav0nq.js +0 -2
  481. package/dist/public/assets/styles-C9roDUa_.css.br +0 -0
  482. package/dist/public/assets/w-CG7PlpHU.js +0 -1
  483. package/dist/public/assets/w._-BAovoZD2.js +0 -1
  484. package/dist/public/assets/w._-CG7PlpHU.js +0 -1
  485. package/dist/public/assets/w._-DRGvcgb-.js +0 -1
@@ -139,9 +139,13 @@ function sentText(id, r, asked) {
139
139
 
140
140
  function printReply(r) {
141
141
  const replied = r.kind === "reply" || r.answers;
142
- const head = replied
143
- ? `${r.label} replied${r.answers ? ` to ${r.answers}` : ""}:`
144
- : `${r.label}: ${r.text}`;
142
+ const head = !replied
143
+ ? `${r.label}: ${r.text}`
144
+ : r.held
145
+ ? `${r.label} is not done (it waits on ${r.held}), and wrote${r.answers ? ` to ${r.answers}` : ""}:`
146
+ : r.follows
147
+ ? `${r.label} followed up${r.answers ? ` on ${r.answers}` : ""}, from a turn it started on its own after its reply:`
148
+ : `${r.label} replied${r.answers ? ` to ${r.answers}` : ""}:`;
145
149
  console.log(head);
146
150
  if (replied) console.log(`${r.text}\n`);
147
151
  if (r.asks === "turn")
@@ -214,7 +218,7 @@ export const commands = [
214
218
  {
215
219
  name: "session",
216
220
  summary:
217
- "this session and the workspace's others: new, fanout, send, wait, keep, team, kill",
221
+ "this session and the workspace's others: new, fanout, send, wait, hold, keep, team, kill",
218
222
  help: `work session [--json]
219
223
  This session (WORK_SESSION_ID): its id, agent, name, state, and the
220
224
  workspace it is in (id, name, path) — what a link names (/w/<id>/…).
@@ -290,6 +294,13 @@ work session wait [<id>|<group>...] [--any] [--timeout <seconds>]
290
294
  typed in too. A group's come once all its members have answered, unless
291
295
  --any: then whatever is in, as soon as anything is. Exits 124 if some
292
296
  are still working after --timeout (${WAIT_S} s).
297
+ work session hold "<what you wait on>"
298
+ End this turn before your work is done — a job of yours runs on, and
299
+ its end wakes you — without it reading as your answer: the sessions
300
+ waiting on your reply get this turn's last message as an interim one,
301
+ saying what you wait on, and wait on; you are not closed for being
302
+ done meanwhile; and the last message of the turn the job's end wakes
303
+ you into is the reply (hold again there to wait on more).
293
304
  work session keep <id>
294
305
  Keep a session this one started open for follow-ups, as \`new --keep\`
295
306
  would have: it is never closed for being done.
@@ -559,6 +570,19 @@ work session kill --done
559
570
  );
560
571
  return;
561
572
  }
573
+ case "hold": {
574
+ const me = sessionId(ctx);
575
+ const what = rest.join(" ").trim();
576
+ if (!what) ctx.die('usage: work session hold "<what you wait on>"');
577
+ const r = await ctx.api.post(`/api/sessions/${me}/hold${by()}`, {
578
+ what,
579
+ });
580
+ return ctx.out(r, () =>
581
+ console.log(
582
+ `held: ${r.waiting.join(", ")} ${r.waiting.length === 1 ? "gets" : "get"} this turn's last message as an interim reply and ${r.waiting.length === 1 ? "waits" : "wait"} on; the last message of the turn its end wakes you into is the reply`,
583
+ ),
584
+ );
585
+ }
562
586
  case "keep": {
563
587
  const [id] = rest;
564
588
  if (!id) ctx.die("usage: work session keep <id>");
@@ -0,0 +1,2 @@
1
+ import { J as notifySessionsChanged } from "./_Bt8-Yuz-.js";
2
+ export { notifySessionsChanged };
@@ -750,6 +750,16 @@ var STEPS = [
750
750
  up(db) {
751
751
  db.exec("ALTER TABLE session_messages ADD COLUMN by_send INTEGER NOT NULL DEFAULT 0");
752
752
  }
753
+ },
754
+ {
755
+ version: 12,
756
+ name: "follow-ups and held replies",
757
+ up(db) {
758
+ db.exec(`
759
+ ALTER TABLE session_messages ADD COLUMN follows TEXT;
760
+ ALTER TABLE session_messages ADD COLUMN held TEXT;
761
+ `);
762
+ }
753
763
  }
754
764
  ];
755
765
  var LATEST = STEPS.at(-1).version;
@@ -9478,7 +9488,7 @@ function publishChange(sessionId) {
9478
9488
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
9479
9489
  if (row?.workspace_id) {
9480
9490
  const workspaceId = row.workspace_id;
9481
- import("./_BKkT73fv.js").then((m) => m.notifySessionsChanged(workspaceId));
9491
+ import("./_B3vnjx9I.js").then((m) => m.notifySessionsChanged(workspaceId));
9482
9492
  return;
9483
9493
  }
9484
9494
  publish("sessions.changed");
@@ -12923,14 +12933,19 @@ function placeInStacks(list, names, places, wsBranch, baseBranch) {
12923
12933
  * compared against the base, the review would show every default-branch
12924
12934
  * commit since the base's own fork as the lane's. Only a fork point that
12925
12935
  * contains the other counts as newer, and two that do not line up (a lane
12926
- * from the base that merged the default branch in) keep the base, as
12927
- * does a base missing from origin (its fallbacks follow). A tie is the
12928
- * default branch's: the lane holds none of the base's own commits, and
12929
- * against the base a backport repeating part of the feature would look
12930
- * already landed, an empty section, where its PR would not be. */
12936
+ * from the base that merged the default branch in) keep the base. A base
12937
+ * missing from origin leaves the default branch: the fallback after it,
12938
+ * the workspace branch's remote, holds a layer under that branch. A tie
12939
+ * is the default branch's: the lane holds none of the base's own commits,
12940
+ * and against the base a backport repeating part of the feature would
12941
+ * look already landed, an empty section, where its PR would not be. */
12931
12942
  async function laneParent(dir, head, baseBranch, defaultBranch) {
12932
12943
  if (!defaultBranch || defaultBranch === baseBranch) return { branch: baseBranch };
12933
12944
  const [onBase, onDefault] = await Promise.all([baseBranch, defaultBranch].map((b) => mergeBaseOf(dir, head, `origin/${b}`).catch(() => "")));
12945
+ if (!onBase && onDefault) return {
12946
+ branch: defaultBranch,
12947
+ mergeBase: onDefault
12948
+ };
12934
12949
  if (!onBase || !onDefault) return {
12935
12950
  branch: baseBranch,
12936
12951
  mergeBase: onBase || void 0
@@ -13674,8 +13689,8 @@ async function repoSections(dir, ws, repo, branch, localHead, open, merged) {
13674
13689
  if (!ownsBranchOf(branch, ws.branch, foreign)) return [checkout];
13675
13690
  const family = await familyBranches(dir, ws, foreign);
13676
13691
  if (!family.names.length) return [checkout];
13677
- const [places, bases] = await Promise.all([stackParents(dir, ws, repo, family, open), resolveRefs(dir, [`origin/${repo.base_branch}`])]);
13678
- const baseTip = bases.get(`origin/${repo.base_branch}`)?.commit;
13692
+ const [places, bases] = await Promise.all([stackParents(dir, ws, repo, family, open), resolveRefs(dir, [`origin/${repo.base_branch}`, `origin/${repo.default_branch}`])]);
13693
+ const baseTip = (bases.get(`origin/${repo.base_branch}`) ?? bases.get(`origin/${repo.default_branch}`))?.commit;
13679
13694
  const tipOf = (name) => family.local.get(name) ?? family.remote.get(name);
13680
13695
  const count = (range) => git([
13681
13696
  "rev-list",
@@ -17576,7 +17591,7 @@ function notifySessionsChanged(workspaceId) {
17576
17591
  async function emitSessionsChanged(workspaceId) {
17577
17592
  try {
17578
17593
  const states = await sessionStates();
17579
- const { teamsOf } = await import("./_BviTiVOB.js");
17594
+ const { teamsOf } = await import("./_CydDAvZA.js");
17580
17595
  publish("sessions.changed", {
17581
17596
  workspaceId,
17582
17597
  sessions: listSessions(workspaceId).map((s) => ({
@@ -18236,6 +18251,26 @@ function configuredBases(bare) {
18236
18251
  });
18237
18252
  return bases;
18238
18253
  }
18254
+ /** Where a repo's work lands: its workspace branch's base, unless that is
18255
+ * one of the workspace's own branches, as when the top of a stack names
18256
+ * the layer under it so `gh pr create` bases its PR there. A layer is not
18257
+ * a base (it is not on origin until pushed, and lies above the stack's
18258
+ * bottom): each one's base is followed down to the first branch outside
18259
+ * the workspace's, else the default branch. */
18260
+ function landingBase(ws, repo, bases) {
18261
+ let base = bases.get(ws.branch) ?? repo.base_branch;
18262
+ let foreign;
18263
+ const seen = /* @__PURE__ */ new Set();
18264
+ while (ownsBranch(base, ws.branch)) {
18265
+ foreign ??= otherWorkspaceBranches(ws.id);
18266
+ if (!ownsBranchOf(base, ws.branch, foreign)) break;
18267
+ const below = !seen.has(base) && bases.get(base);
18268
+ if (!below) return repo.default_branch || base;
18269
+ seen.add(base);
18270
+ base = below;
18271
+ }
18272
+ return base;
18273
+ }
18239
18274
  /** A base moved: the workspace's AGENTS.md names it, and pages show it. */
18240
18275
  var baseMoves;
18241
18276
  function baseMoved() {
@@ -18261,8 +18296,8 @@ function hydrate(ws) {
18261
18296
  if (ws.pending && materializeErrors.has(ws.id)) ws.pending_error = materializeErrors.get(ws.id);
18262
18297
  ws.repos = all("SELECT full_name, worktree, base_branch, default_branch FROM repos WHERE workspace_id = ? ORDER BY worktree", ws.id);
18263
18298
  for (const repo of ws.repos) {
18264
- const base = configuredBases(barePath(repo.full_name)).get(ws.branch);
18265
- if (!base || base === repo.base_branch) continue;
18299
+ const base = landingBase(ws, repo, configuredBases(barePath(repo.full_name)));
18300
+ if (base === repo.base_branch) continue;
18266
18301
  db.prepare("UPDATE repos SET base_branch = ? WHERE workspace_id = ? AND full_name = ?").run(base, ws.id, repo.full_name);
18267
18302
  repo.base_branch = base;
18268
18303
  baseMoved();
@@ -83,101 +83,101 @@ var toastTitle = {
83
83
  warn: "_w",
84
84
  info: "_x"
85
85
  };
86
- var tocDot = "_de _ba";
86
+ var tocDot = "_c5 _ba";
87
87
  //#endregion
88
88
  //#region src/tags/settings-agents.css.ts
89
- var agentRow = "_eU _dK";
90
- var list$3 = "_dO _dw _dJ _dM";
91
- var metaChip = "_d2 _bz _by";
89
+ var agentRow = "_fz _es";
90
+ var list$3 = "_ew _dw _er _eu";
91
+ var metaChip = "_eK _bz _by";
92
92
  var sectionCount = "_dt _bp _bq";
93
- var usageNote = "_ke _by";
94
- var pop$2 = "_hw _bN";
95
- var spinner = "_hz _bD _bi";
96
- var toolLead = "_gZ _dX";
97
- var name$4 = "_gT _dX";
98
- var desc$1 = "_gU _dY";
93
+ var usageNote = "_kf _by";
94
+ var pop$2 = "_go _bN";
95
+ var spinner = "_gr _bD _bi";
96
+ var toolLead = "_fY _eF";
97
+ var name$4 = "_f8 _eF";
98
+ var desc$1 = "_f9 _eG";
99
99
  //#endregion
100
100
  //#region src/tags/lsp-add-dialog.css.ts
101
- var addDlg = "_mh _bV";
102
- var key$1 = "_lQ _lO";
103
- var addTile = "_lS _lO";
104
- var field$2 = "_l3 _bA";
105
- var keyField = "_l4 _l3 _bA";
106
- var labelField = "_l5 _l3 _bA";
107
- var detailsToggle = "_gd _6";
108
- var themeSeg = "_fw _bR";
109
- var checkList = "_hh _du";
101
+ var addDlg = "_lT _bX";
102
+ var key$1 = "_lz _lx";
103
+ var addTile = "_lB _lx";
104
+ var field$2 = "_lM _bA";
105
+ var keyField = "_lN _lM _bA";
106
+ var labelField = "_lO _lM _bA";
107
+ var detailsToggle = "_g0 _6";
108
+ var themeSeg = "_ea _bR";
109
+ var checkList = "_h4 _du";
110
110
  //#endregion
111
111
  //#region src/tags/prompt-dialog.css.ts
112
- var promptDlg = "_bZ _bV";
112
+ var promptDlg = "_b1 _bX";
113
113
  var item$1 = "_b6 _D";
114
114
  var glance = "_dG _D";
115
115
  //#endregion
116
116
  //#region src/tags/side-nav.css.ts
117
- var iconBtn = "_b9 _D";
118
- var settingsDot = "_b_ _bQ";
119
- var notifyBtn = "_ce _D";
117
+ var iconBtn = "_cn _D";
118
+ var settingsDot = "_co _bQ";
119
+ var notifyBtn = "_ct _D";
120
120
  //#endregion
121
121
  //#region src/styles/session-pop.css.ts
122
- var sessionPop = "_cg _bN";
123
- var sessionPopBtn = "_ch _bk";
124
- var wsBtn = "_e6 _bk";
125
- var rowIcon = "_e8 _bF _D";
126
- var prChip = "_lx _M _lr";
122
+ var sessionPop = "_cl _bN";
123
+ var sessionPopBtn = "_cm _bk";
124
+ var wsBtn = "_fl _bk";
125
+ var rowIcon = "_fn _bF _D";
126
+ var prChip = "_l8 _M _l2";
127
127
  //#endregion
128
128
  //#region src/tags/port-chip.css.ts
129
- var port = "_oL _M _lr";
129
+ var port = "_oI _M _l2";
130
130
  var depth = {
131
- "1": "_kO",
132
- "2": "_kP",
133
- "3": "_kQ"
131
+ "1": "_kt",
132
+ "2": "_ku",
133
+ "3": "_kv"
134
134
  };
135
- var open = "_kW _bk";
136
- var action = "_k1 _bI _D";
137
- var toggle = "_d7 _6";
138
- var fold = "_d8 _dL";
135
+ var open = "_kB _bk";
136
+ var action = "_kG _bI _D";
137
+ var toggle = "_eP _6";
138
+ var fold = "_eQ _et";
139
139
  var statusOf = {
140
- queued: "_mK",
141
- starting: "_mL",
142
- working: "_mM",
143
- waiting: "_mN",
144
- idle: "_mO",
145
- done: "_mP",
146
- closed: "_mQ"
140
+ queued: "_mV",
141
+ starting: "_mW",
142
+ working: "_mX",
143
+ waiting: "_mY",
144
+ idle: "_mZ",
145
+ done: "_m0",
146
+ closed: "_m1"
147
147
  };
148
- var item = "_kr _bk";
149
- var menu = "_nc _cg _bN";
150
- var menuItem = "_ne _bk";
151
- var findBtn$1 = "_jh _ih _bG _D";
152
- var tool = "_ih _bG _D";
153
- var heldRefresh = "_ip _M";
154
- var pop$1 = "_no _cg _bN";
155
- var fileFilter = "_oP _F";
156
- var findInput = "_ex _F";
157
- var keybarIconBtn = "_eG _bI _D";
158
- var input = "_cN _F";
159
- var group = "_cQ _6";
160
- var hint$1 = "_nz _bp _3";
148
+ var item = "_j2 _bk";
149
+ var menu = "_nw _cl _bN";
150
+ var menuItem = "_ny _bk";
151
+ var findBtn$1 = "_jc _ic _bG _D";
152
+ var tool = "_ic _bG _D";
153
+ var heldRefresh = "_ik _M";
154
+ var pop$1 = "_ms _cl _bN";
155
+ var fileFilter = "_oM _F";
156
+ var findInput = "_dT _F";
157
+ var keybarIconBtn = "_d2 _bI _D";
158
+ var input = "_ca _F";
159
+ var group = "_cd _6";
160
+ var hint$1 = "_mz _bp _3";
161
161
  var sheetDir = "_n6 _bP";
162
- var upBtn = "_iC _bG _D";
163
- var findBtn = "_iG _ih _bG _D";
164
- var goBtn = "_iH _ih _bG _D";
162
+ var upBtn = "_ix _bG _D";
163
+ var findBtn = "_iB _ic _bG _D";
164
+ var goBtn = "_iC _ic _bG _D";
165
165
  var note = "_mo _by";
166
166
  //#endregion
167
167
  //#region src/tags/manage-workspace.css.ts
168
- var procCmd = "_gE _dX";
169
- var factCopy = "_gL _bI _D";
170
- var resultRow = "_lc _bk";
171
- var resultBranch = "_ld _d2 _bz _by _bF _D";
172
- var urlAction = "_le _d2 _bz _by _d3";
173
- var curRow = "_gs _dR";
168
+ var procCmd = "_hI _eF";
169
+ var factCopy = "_hP _bI _D";
170
+ var resultRow = "_lg _bk";
171
+ var resultBranch = "_lh _eK _bz _by _bF _D";
172
+ var urlAction = "_li _eK _bz _by _eL";
173
+ var curRow = "_gf _ez";
174
174
  //#endregion
175
175
  //#region src/tags/join-dialog.css.ts
176
- var dlg = "_l_ _bV";
177
- var hint = "_ma _by";
178
- var kbtn = "_cD _bH _D";
179
- var repeat = "_cG _cF";
180
- var dpadUser = "_cJ _cF";
181
- var dpadEsc = "_cK _cF";
176
+ var dlg = "_kM _bX";
177
+ var hint = "_kN _by";
178
+ var kbtn = "_cQ _bH _D";
179
+ var repeat = "_cT _cS";
180
+ var dpadUser = "_cW _cS";
181
+ var dpadEsc = "_cX _cS";
182
182
  //#endregion
183
183
  export { field$2 as $, item as A, usageInk as At, wsBtn as B, fileFilter as C, iconBtnRow as Ct, findBtn$1 as D, prTone as Dt, tool as E, phaseIcon as Et, depth as F, settingsDot as G, sessionPopBtn as H, open as I, promptDlg as J, glance as K, port as L, fold as M, iconSize as Mt, toggle as N, mobile as Nt, menu as O, tone as Ot, action as P, sans as Pt, addTile as Q, prChip as R, keybarIconBtn as S, iconBtnLg as St, heldRefresh as T, inputLg as Tt, iconBtn as U, sessionPop as V, notifyBtn as W, themeSeg as X, checkList as Y, detailsToggle as Z, sheetDir as _, toastTitle as _t, dlg as a, name$4 as at, input as b, chipBtn as bt, resultBranch as c, spinner as ct, factCopy as d, list$3 as dt, key$1 as et, procCmd as f, metaChip as ft, upBtn as g, toastStack as gt, goBtn as h, toastKind as ht, repeat as i, desc$1 as it, statusOf as j, color as jt, menuItem as k, usageFill as kt, resultRow as l, usageNote as lt, findBtn as m, tocDot as mt, dpadUser as n, labelField as nt, hint as o, toolLead as ot, note as p, agentRow as pt, item$1 as q, kbtn as r, addDlg as rt, curRow as s, pop$2 as st, dpadEsc as t, keyField as tt, urlAction as u, sectionCount as ut, hint$1 as v, btnLg as vt, pop$1 as w, iconBtnXs as wt, findInput as x, glyphBadgeNum as xt, group as y, btnSm as yt, rowIcon as z };
@@ -0,0 +1,2 @@
1
+ import { f as teamsOf } from "./_D6z2VKMF.js";
2
+ export { teamsOf };
@@ -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 "./_Cv5RrCSW.js";
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 "./_Bt8-Yuz-.js";
2
2
  //#region src/server/messages.ts
3
3
  var team = {
4
4
  memberGroup: () => null,
@@ -24,6 +24,8 @@ var RETRY_MS = 3e3;
24
24
  var MAX_BODY = 5e4;
25
25
  /** A reply past this is cut, pointing at the rest. */
26
26
  var MAX_REPLY = 2e4;
27
+ /** What a held reply says it waits on is a line, not a report. */
28
+ var MAX_HELD = 200;
27
29
  /** A pane that has written nothing for this long is a CLI at its prompt:
28
30
  * every agent's screen animates while it works (scraper.ts). */
29
31
  var PANE_STILL_MS = 4e3;
@@ -49,6 +51,12 @@ var deliveredAt = /* @__PURE__ */ new Map();
49
51
  var steered = /* @__PURE__ */ new Set();
50
52
  /** Turn ends held back from answering (`holdAnswer`), by session. */
51
53
  var held = /* @__PURE__ */ new Map();
54
+ /** Whom each session's turn's end last answered, and when, until a
55
+ * message goes into it or someone types into it: till then a turn of it
56
+ * is one it started on its own, still on what it was asked
57
+ * (`answerOwnTurn`). A restart forgets it, as agent-state forgets
58
+ * phases. */
59
+ var answered = /* @__PURE__ */ new Map();
52
60
  /** Sessions any row is addressed to: the scraper asks about every session
53
61
  * without a pane on every tick, so the answer for one with none is a set
54
62
  * lookup rather than a query. */
@@ -67,21 +75,26 @@ function render(row) {
67
75
  const owed = row.answers ? stillOwed(row.to_session, row.from_session) : "";
68
76
  const head = row.answers ? `Reply from session ${from} to ${row.answers}${owed ? `; ${owed}` : ""}` : `From session ${from}`;
69
77
  if (!row.wants_reply) return `[work] ${head}, no reply needed:\n\n${row.body}`;
70
- 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} "…").\n\n${row.body}`;
78
+ 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}`;
71
79
  }
72
80
  case "reply": {
81
+ 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}):\n\n${row.body}`;
73
82
  const owed = row.from_session ? stillOwed(row.to_session, row.from_session) : "";
74
- return `[work] Reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}${owed ? `; ${owed}` : ""}. ${followUp(row.from_session ?? "<id>", row.to_session)}:\n\n${row.body}`;
83
+ 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}` : ""}. ${followUp(row.from_session ?? "<id>", row.to_session)}:\n\n${row.body}`;
75
84
  }
76
85
  case "closed": return `[work] ${row.body}`;
77
86
  }
78
87
  }
79
- /** A message as a reply names it: when it was sent, and how it begins. */
80
- function excerpt(row) {
81
- const time = new Date(row.created_at).toLocaleTimeString("en-GB", {
88
+ /** A moment as a reply names it ("14:05"). */
89
+ function clock(at) {
90
+ return new Date(at).toLocaleTimeString("en-GB", {
82
91
  hour: "2-digit",
83
92
  minute: "2-digit"
84
93
  });
94
+ }
95
+ /** A message as a reply names it: when it was sent, and how it begins. */
96
+ function excerpt(row) {
97
+ const time = clock(row.created_at);
85
98
  const line = row.body.split("\n").find((l) => l.trim())?.trim() ?? "";
86
99
  return `${time} ("${line.length > EXCERPT ? `${line.slice(0, 39)}…` : line}")`;
87
100
  }
@@ -128,7 +141,7 @@ function groupClosing(rows) {
128
141
  * under its name. */
129
142
  function renderGroup(groupId, rows) {
130
143
  const closed = rows.filter((r) => r.kind === "closed").length;
131
- return [`[work] Group "${team.groupTitle(groupId)}" (${groupId}): ${rows.length - closed} ${rows.length - closed === 1 ? "reply" : "replies"}${closed ? `, ${closed} closed before replying` : ""}. To follow up with one: work session send <id> "…"${groupClosing(rows)}`, ...rows.map((r) => `## ${r.from_label ?? r.from_session}\n\n${r.body}`)].join("\n\n");
144
+ return [`[work] Group "${team.groupTitle(groupId)}" (${groupId}): ${rows.length - closed} ${rows.length - closed === 1 ? "reply" : "replies"}${closed ? `, ${closed} closed before replying` : ""}. 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");
132
145
  }
133
146
  /** Rows as typed in: each on its own, a group's together where its first
134
147
  * would be. */
@@ -161,9 +174,9 @@ function senderLabel(from, to) {
161
174
  const ws = get("SELECT name FROM workspaces WHERE id = ?", from.workspace_id);
162
175
  return `${labelOf(from)} in workspace ${ws?.name ?? from.workspace_id}`;
163
176
  }
164
- function insert(to, from, kind, body, wantsReply = false, groupId = null, answers = null, urgent = false, bySend = false) {
165
- return Number(db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, group_id, answers, urgent, by_send)
166
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(to, from?.id ?? null, from ? senderLabel(from, to) : null, kind, body, wantsReply ? 1 : 0, groupId, answers, urgent ? 1 : 0, bySend ? 1 : 0).lastInsertRowid);
177
+ function insert(to, from, kind, body, wantsReply = false, groupId = null, answers = null, urgent = false, bySend = false, follows = null, held = null) {
178
+ 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)
179
+ 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);
167
180
  }
168
181
  function deleteIds(ids) {
169
182
  if (!ids.length) return;
@@ -215,6 +228,7 @@ async function deliver(id) {
215
228
  }
216
229
  if (keys) steered.add(id);
217
230
  deliveredAt.set(id, Date.now());
231
+ answered.delete(id);
218
232
  deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id));
219
233
  const owed = rows.filter((r) => r.wants_reply).map((r) => r.id);
220
234
  if (owed.length) db.prepare(`UPDATE session_messages SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
@@ -343,7 +357,7 @@ function answerBySend(from, to) {
343
357
  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);
344
358
  if (!owed.length) return owed;
345
359
  deleteIds(owed.map((r) => r.id));
346
- db.prepare("UPDATE sessions SET answered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ?").run(from.id);
360
+ noteAnswered(from.id);
347
361
  return owed;
348
362
  }
349
363
  /** The replies (and word of sessions that closed) waiting for `me`, from
@@ -383,6 +397,10 @@ function takeReplies(me, from, any = false) {
383
397
  label: r.from_label,
384
398
  kind: r.kind,
385
399
  answers: r.answers,
400
+ /** A follow-up: when the reply it follows went. */
401
+ follows: r.follows,
402
+ /** An interim reply: what it waits on before it answers. */
403
+ held: r.held,
386
404
  /** It asks in turn: answered by this session's turn's end, or by
387
405
  * a send back (`send`). */
388
406
  asks: r.wants_reply ? r.by_send ? "send" : "turn" : null,
@@ -413,8 +431,8 @@ function messageStates() {
413
431
  * mid-turn, not at once (`holdAnswer`), and with what the turns folded
414
432
  * into this end said before it. */
415
433
  function answer(id, message, earlier = []) {
416
- if (!mailboxes.has(id)) return false;
417
- if (!steered.has(id)) return answerNow(id, message);
434
+ if (!mailboxes.has(id)) return answerOwnTurn(id, message);
435
+ if (!steered.has(id)) return answerNow(id, message) || answerOwnTurn(id, message);
418
436
  if (!get("SELECT 1 FROM session_messages WHERE to_session = ? AND wants_reply = 1 AND by_send = 0 AND delivered_at IS NOT NULL", id)) {
419
437
  steered.delete(id);
420
438
  return false;
@@ -469,20 +487,102 @@ function answerNow(id, message) {
469
487
  if (!owed.length || !session) return false;
470
488
  const body = replyBody(session, message);
471
489
  const group = team.memberGroup(id);
472
- let told = false;
490
+ const held = owed.find((r) => r.held)?.held ?? null;
491
+ const askers = /* @__PURE__ */ new Map();
473
492
  for (const asker of new Set(owed.map((r) => r.from_session))) {
474
493
  const to = asker ? getSession(asker) : void 0;
475
494
  if (!to || to.agent === "shell") continue;
476
- const answers = group ? null : yours(owed.filter((r) => r.from_session === asker));
477
- insert(to.id, session, "reply", body, false, group, answers);
495
+ const asked = owed.filter((r) => r.from_session === asker);
496
+ const answers = group ? null : yours(asked);
497
+ insert(to.id, session, "reply", body, false, group, answers, false, false, null, held);
498
+ askers.set(to.id, {
499
+ asked,
500
+ answers
501
+ });
502
+ }
503
+ if (held) db.prepare(`UPDATE session_messages SET held = NULL WHERE id IN (${owed.map(() => "?").join(",")})`).run(...owed.map((r) => r.id));
504
+ else {
505
+ deleteIds(owed.map((r) => r.id));
506
+ if (askers.size) {
507
+ answered.set(id, {
508
+ askers,
509
+ at: Date.now()
510
+ });
511
+ noteAnswered(id);
512
+ }
513
+ if (group) team.memberAnswered(id, message);
514
+ }
515
+ recompute();
516
+ kick();
517
+ return askers.size > 0;
518
+ }
519
+ /** `id` ends its turn under way before its work is done — a job of its
520
+ * own runs on and wakes it as it ends — and says so (`work session
521
+ * hold`): what it owes by its turn's end stays owed, so its askers wait
522
+ * on, and it is not closed for being done (server/team `doneWith`), and
523
+ * that end goes to them as an interim reply saying what it waits on. The
524
+ * turn the job's end wakes it into answers, or holds again. Held in a
525
+ * turn it started on its own after answering (`answerOwnTurn`), it owes
526
+ * its askers again what they had asked. Returns who waits on it. */
527
+ function holdReply(id, what) {
528
+ if (!getSession(id)) throw httpError(404, `no session ${id}`);
529
+ const waits = what.trim().replace(/\s+/g, " ").slice(0, MAX_HELD) || "a job of its own";
530
+ const bySend = get("SELECT 1 FROM session_messages WHERE to_session = ? AND wants_reply = 1 AND by_send = 1 AND delivered_at IS NOT NULL", id);
531
+ let held = db.prepare("UPDATE session_messages SET held = ? WHERE to_session = ? AND wants_reply = 1 AND by_send = 0 AND delivered_at IS NOT NULL").run(waits, id).changes;
532
+ const last = answered.get(id);
533
+ if (!held && last && lastTypedAt(id) <= last.at) {
534
+ for (const [asker, { asked }] of last.askers) {
535
+ const from = getSession(asker);
536
+ if (!from || from.agent === "shell") continue;
537
+ for (const row of asked) db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, created_at, delivered_at, held)
538
+ VALUES (?, ?, ?, 'message', ?, 1, ?, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), ?)`).run(id, asker, senderLabel(from, id), row.body, row.created_at, waits);
539
+ held++;
540
+ }
541
+ answered.delete(id);
542
+ }
543
+ if (!held) throw httpError(409, bySend ? `${id} answers by a send (\`work session send <id> "…"\`, as its header says): send it once the work is done` : `nobody waits on a reply from ${id}: there is nothing to hold`);
544
+ recompute();
545
+ return {
546
+ waiting: all("SELECT DISTINCT from_session AS id FROM session_messages WHERE to_session = ? AND held IS NOT NULL AND from_session IS NOT NULL", id).map((r) => r.id),
547
+ held: waits
548
+ };
549
+ }
550
+ /** A turn the session started on its own since its turn's end answered
551
+ * (nothing went into it, nobody typed into it): what it was asked, still
552
+ * — the job it ended that turn to wait on has ended, a wakeup it set has
553
+ * come — so its last message goes to the same askers as a follow-up, and
554
+ * again for each such turn after. Whatever woke it, the CLI's turn end
555
+ * is all this reads, so it is the same for every agent. A follow-up
556
+ * leaves a group alone: its member answered when its reply went. */
557
+ function answerOwnTurn(id, message) {
558
+ const last = answered.get(id);
559
+ const session = getSession(id);
560
+ if (!last || !session || !message) return false;
561
+ if (lastTypedAt(id) > last.at) {
562
+ answered.delete(id);
563
+ return false;
564
+ }
565
+ const body = replyBody(session, message);
566
+ const follows = new Date(last.at).toISOString();
567
+ let told = false;
568
+ for (const [asker, { answers }] of last.askers) {
569
+ const to = getSession(asker);
570
+ if (!to || to.agent === "shell") continue;
571
+ insert(to.id, session, "reply", body, false, null, answers, false, false, follows);
478
572
  told = true;
479
573
  }
480
- deleteIds(owed.map((r) => r.id));
481
- if (told) db.prepare("UPDATE sessions SET answered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ?").run(id);
482
- if (group) team.memberAnswered(id, message);
574
+ if (!told) {
575
+ answered.delete(id);
576
+ return false;
577
+ }
578
+ last.at = Date.now();
579
+ noteAnswered(id);
483
580
  recompute();
484
581
  kick();
485
- return told;
582
+ return true;
583
+ }
584
+ function noteAnswered(id) {
585
+ db.prepare("UPDATE sessions SET answered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ?").run(id);
486
586
  }
487
587
  /** The session's process is gone, or the session is: whoever waits on it
488
588
  * for a reply is told none is coming, and what was queued for it goes —
@@ -490,6 +590,7 @@ function answerNow(id, message) {
490
590
  function settle(id, why) {
491
591
  dropHold(id);
492
592
  steered.delete(id);
593
+ answered.delete(id);
493
594
  const session = getSession(id);
494
595
  const label = session ? labelOf(session) : id;
495
596
  const group = team.memberGroup(id);
@@ -964,4 +1065,4 @@ function startTeam() {
964
1065
  kickPool();
965
1066
  }
966
1067
  //#endregion
967
- export { takeReplies as _, keepSession as a, retryMember as c, teamOf as d, teamsOf as f, startMessages as g, sessionGone as h, createGroup as i, skipMember as l, sendMessage as m, closeDone as n, kickPool as o, messageStates as p, closeFinished as r, memberWorkspace as s, clearGroup as t, startTeam as u };
1068
+ 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 };