@dylanpiercey/work 0.0.45 → 0.0.47

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 (246) hide show
  1. package/bin/work.mjs +7 -2
  2. package/dist/_CV5G1-Sr.js +2 -0
  3. package/dist/{_P9IsUQm2.js → _DM_oFS_v.js} +28 -3
  4. package/dist/{_BlvusYIA.js → _Dm4BVuln.js} +52 -52
  5. package/dist/{_DncwyiYL.js → _o0dwm0Ww.js} +68 -68
  6. package/dist/index.mjs +823 -1057
  7. package/dist/public/assets/{_BrNJO7NC.js → _2_8X99jw.js} +1 -1
  8. package/dist/public/assets/_2_8X99jw.js.br +0 -0
  9. package/dist/public/assets/{_CxfUzQkI.js → _5pEZdV75.js} +1 -1
  10. package/dist/public/assets/_5pEZdV75.js.br +0 -0
  11. package/dist/public/assets/{_DdvD3pSx2.js → _6fdNa05X2.js} +1 -1
  12. package/dist/public/assets/_6fdNa05X2.js.br +0 -0
  13. package/dist/public/assets/{_BPhrpOAd.js → _9CHuxVRu.js} +1 -1
  14. package/dist/public/assets/_9CHuxVRu.js.br +0 -0
  15. package/dist/public/assets/{_BeS7I1tE.js → _AG00U05V.js} +1 -1
  16. package/dist/public/assets/_AG00U05V.js.br +0 -0
  17. package/dist/public/assets/{_COItZVVh.js → _B2pxLNBO.js} +1 -1
  18. package/dist/public/assets/_B2pxLNBO.js.br +0 -0
  19. package/dist/public/assets/{_0jDMZ5Nf.js → _B3rIZBik.js} +1 -1
  20. package/dist/public/assets/_B3rIZBik.js.br +0 -0
  21. package/dist/public/assets/{_DlEZP4B2.js → _B8PQyubX.js} +1 -1
  22. package/dist/public/assets/_B8PQyubX.js.br +0 -0
  23. package/dist/public/assets/{_Dp6GcCez.js → _BDIKDRj8.js} +1 -1
  24. package/dist/public/assets/_BDIKDRj8.js.br +0 -0
  25. package/dist/public/assets/{_CBWyaxNg.js → _BEEHMSv_.js} +1 -1
  26. package/dist/public/assets/_BEEHMSv_.js.br +0 -0
  27. package/dist/public/assets/{_Drob8ol2.js → _BGFm3dJ4.js} +1 -1
  28. package/dist/public/assets/_BGFm3dJ4.js.br +0 -0
  29. package/dist/public/assets/{_2JIp-AkL.js → _BHjsQD4C.js} +1 -1
  30. package/dist/public/assets/_BHjsQD4C.js.br +0 -0
  31. package/dist/public/assets/{_DYgx29Kq2.js → _BIP7B1g62.js} +1 -1
  32. package/dist/public/assets/{_B2jdNsMP.js → _BLibugcj.js} +44 -44
  33. package/dist/public/assets/_BLibugcj.js.br +0 -0
  34. package/dist/public/assets/{_CWcbEhLf.js → _BLvHtG5b.js} +1 -1
  35. package/dist/public/assets/_BLvHtG5b.js.br +0 -0
  36. package/dist/public/assets/{_DQZT5aYv2.js → _BMWhe7UA2.js} +1 -1
  37. package/dist/public/assets/_BMWhe7UA2.js.br +0 -0
  38. package/dist/public/assets/{_DbeeD9R1.js → _BPiDffSK.js} +1 -1
  39. package/dist/public/assets/_BPiDffSK.js.br +0 -0
  40. package/dist/public/assets/{_rShrll8V.js → _BPq9uIVf.js} +1 -1
  41. package/dist/public/assets/_BPq9uIVf.js.br +0 -0
  42. package/dist/public/assets/{_ChdHZg3q2.js → _BRHBgjBP2.js} +1 -1
  43. package/dist/public/assets/_BRHBgjBP2.js.br +0 -0
  44. package/dist/public/assets/{_Fd6qP3go.js → _BZe4BZ4G.js} +1 -1
  45. package/dist/public/assets/_BZe4BZ4G.js.br +0 -0
  46. package/dist/public/assets/{_CVpg0dqw.js → _BgDRYHYE.js} +1 -1
  47. package/dist/public/assets/_BgDRYHYE.js.br +0 -0
  48. package/dist/public/assets/{_CUudFj1k2.js → _BmH7JUGb2.js} +1 -1
  49. package/dist/public/assets/_BmH7JUGb2.js.br +0 -0
  50. package/dist/public/assets/{_BKPFmzRa2.js → _BmtVFK052.js} +1 -1
  51. package/dist/public/assets/_BmtVFK052.js.br +0 -0
  52. package/dist/public/assets/{_C-3_S2jT.js → _Btx74Q-k.js} +1 -1
  53. package/dist/public/assets/_Btx74Q-k.js.br +0 -0
  54. package/dist/public/assets/{_B7_IQvxy.js → _BxlHpe2T.js} +1 -1
  55. package/dist/public/assets/_BxlHpe2T.js.br +0 -0
  56. package/dist/public/assets/{_7WXyLEhK.js → _BxuGlOMJ.js} +1 -1
  57. package/dist/public/assets/_BxuGlOMJ.js.br +0 -0
  58. package/dist/public/assets/{_Bj8eqKyf2.js → _By0S6RFm2.js} +1 -1
  59. package/dist/public/assets/_By0S6RFm2.js.br +0 -0
  60. package/dist/public/assets/{_B6bkX_xw.js → _ByQc1pkS.js} +1 -1
  61. package/dist/public/assets/_ByQc1pkS.js.br +0 -0
  62. package/dist/public/assets/{_BEn7bsbI.js → _BzuTzxB9.js} +1 -1
  63. package/dist/public/assets/_BzuTzxB9.js.br +0 -0
  64. package/dist/public/assets/{_DmkxrcNE2.js → _C3QGlxhv2.js} +1 -1
  65. package/dist/public/assets/_C3QGlxhv2.js.br +0 -0
  66. package/dist/public/assets/{_B1lH2KuX.js → _C7kYFLNM.js} +1 -1
  67. package/dist/public/assets/_C7kYFLNM.js.br +0 -0
  68. package/dist/public/assets/{_QBVNsQ8h.js → _C9YvMapn.js} +1 -1
  69. package/dist/public/assets/_C9YvMapn.js.br +0 -0
  70. package/dist/public/assets/{_BsDGIBWi.js → _CBF2sJFl.js} +1 -1
  71. package/dist/public/assets/_CBF2sJFl.js.br +0 -0
  72. package/dist/public/assets/{_cRSAYsIy.js → _CCXyJU0G.js} +1 -1
  73. package/dist/public/assets/_CCXyJU0G.js.br +0 -0
  74. package/dist/public/assets/{_wx4NAfvC.js → _CMIAElmF.js} +1 -1
  75. package/dist/public/assets/_CMIAElmF.js.br +0 -0
  76. package/dist/public/assets/{_C5qWivO82.js → _COmscE442.js} +1 -1
  77. package/dist/public/assets/_COmscE442.js.br +0 -0
  78. package/dist/public/assets/{_C7E2sftJ.js → _CRF3psRH.js} +1 -1
  79. package/dist/public/assets/_CRF3psRH.js.br +0 -0
  80. package/dist/public/assets/{_Cu2zWIrA.js → _CRpvVy-g.js} +1 -1
  81. package/dist/public/assets/_CRpvVy-g.js.br +0 -0
  82. package/dist/public/assets/{_WSiIjl8k.js → _CXsVxa93.js} +1 -1
  83. package/dist/public/assets/{_DJIoEU4l.js → _CYLr_2iE.js} +1 -1
  84. package/dist/public/assets/_CYLr_2iE.js.br +0 -0
  85. package/dist/public/assets/{_BmpuJc0U2.js → _CYb-TtX12.js} +1 -1
  86. package/dist/public/assets/_CYb-TtX12.js.br +0 -0
  87. package/dist/public/assets/{_BQKEgF_-.js → _Cawlufow.js} +1 -1
  88. package/dist/public/assets/_Cawlufow.js.br +0 -0
  89. package/dist/public/assets/{_i3m2va9y2.js → _CfyASWBT2.js} +1 -1
  90. package/dist/public/assets/_CfyASWBT2.js.br +0 -0
  91. package/dist/public/assets/{_BdE0YzeT2.js → _ChIGZgCK2.js} +1 -1
  92. package/dist/public/assets/_ChIGZgCK2.js.br +0 -0
  93. package/dist/public/assets/{_GX4ApnkB.js → _ClduJgR5.js} +1 -1
  94. package/dist/public/assets/_ClduJgR5.js.br +0 -0
  95. package/dist/public/assets/{_DUwDVnyb2.js → _Cp2bkjzT2.js} +1 -1
  96. package/dist/public/assets/_Cp2bkjzT2.js.br +0 -0
  97. package/dist/public/assets/{_BszYFXns.js → _CpxRirGf.js} +1 -1
  98. package/dist/public/assets/_CpxRirGf.js.br +0 -0
  99. package/dist/public/assets/{_DAES5BQ6.js → _CrvHv7e4.js} +1 -1
  100. package/dist/public/assets/_CrvHv7e4.js.br +0 -0
  101. package/dist/public/assets/{_DAp7RKbE2.js → _Cu3f85ax2.js} +1 -1
  102. package/dist/public/assets/_Cu3f85ax2.js.br +0 -0
  103. package/dist/public/assets/{_HmwD_O7C.js → _CyDJr5hJ.js} +1 -1
  104. package/dist/public/assets/_CyDJr5hJ.js.br +0 -0
  105. package/dist/public/assets/{_c4j42n9F2.js → _D1Ecsx8-2.js} +1 -1
  106. package/dist/public/assets/_D1Ecsx8-2.js.br +0 -0
  107. package/dist/public/assets/{_B-HE1A0L.js → _D2tmOnaH.js} +1 -1
  108. package/dist/public/assets/_D2tmOnaH.js.br +0 -0
  109. package/dist/public/assets/{_NSw61-q82.js → _D5DIKC5J2.js} +1 -1
  110. package/dist/public/assets/_D5DIKC5J2.js.br +0 -0
  111. package/dist/public/assets/{_CMXeuTU3.js → _DFC22iAc.js} +1 -1
  112. package/dist/public/assets/_DFC22iAc.js.br +0 -0
  113. package/dist/public/assets/{_Csumg8kE2.js → _DJYs9cGt2.js} +1 -1
  114. package/dist/public/assets/_DJYs9cGt2.js.br +0 -0
  115. package/dist/public/assets/{_BVVf3KNx2.js → _DPW4NADy2.js} +1 -1
  116. package/dist/public/assets/_DPW4NADy2.js.br +0 -0
  117. package/dist/public/assets/{_DSl3gnKp2.js → _DPc97sYv2.js} +1 -1
  118. package/dist/public/assets/{_DSfzkPVh.js → _DTXvrAdN.js} +1 -1
  119. package/dist/public/assets/_DTXvrAdN.js.br +0 -0
  120. package/dist/public/assets/{_RcdEaPTX.js → _DU0F-fSc.js} +1 -1
  121. package/dist/public/assets/_DU0F-fSc.js.br +0 -0
  122. package/dist/public/assets/{_wsALS6ya.js → _DZExUZ7A.js} +1 -1
  123. package/dist/public/assets/_DZExUZ7A.js.br +0 -0
  124. package/dist/public/assets/{_BKSy9tfl.js → _DZyW50O5.js} +1 -1
  125. package/dist/public/assets/_DZyW50O5.js.br +0 -0
  126. package/dist/public/assets/{_IiVyZhFQ2.js → _DbkqHev42.js} +1 -1
  127. package/dist/public/assets/_DbkqHev42.js.br +0 -0
  128. package/dist/public/assets/{_Ty6Zi_p6.js → _DeCqhciO.js} +1 -1
  129. package/dist/public/assets/_DeCqhciO.js.br +0 -0
  130. package/dist/public/assets/{_CCxiHsg1.js → _DgucIXC9.js} +1 -1
  131. package/dist/public/assets/_DgucIXC9.js.br +0 -0
  132. package/dist/public/assets/{_gqKnRhHm2.js → _Dj0FqIsq2.js} +1 -1
  133. package/dist/public/assets/_Dj0FqIsq2.js.br +0 -0
  134. package/dist/public/assets/{_B-tmCiTe2.js → _DvqRc7vA2.js} +1 -1
  135. package/dist/public/assets/_DvqRc7vA2.js.br +0 -0
  136. package/dist/public/assets/{_CvB8TafR.js → _Dvsdxjs1.js} +1 -1
  137. package/dist/public/assets/_Dvsdxjs1.js.br +0 -0
  138. package/dist/public/assets/{_CQjfWgLv.js → _FZ5aDFyS.js} +1 -1
  139. package/dist/public/assets/_FZ5aDFyS.js.br +0 -0
  140. package/dist/public/assets/{_D5wyt0NZ.js → _QZ7jIJEp.js} +1 -1
  141. package/dist/public/assets/_QZ7jIJEp.js.br +0 -0
  142. package/dist/public/assets/{_BBnPf4LB.js → _T_hWiFRO.js} +1 -1
  143. package/dist/public/assets/_T_hWiFRO.js.br +0 -0
  144. package/dist/public/assets/{_MbiYJ36s.js → _fkktwOR8.js} +1 -1
  145. package/dist/public/assets/_fkktwOR8.js.br +0 -0
  146. package/dist/public/assets/{_CVRoyRZW.js → _ji5qc8J4.js} +1 -1
  147. package/dist/public/assets/_ji5qc8J4.js.br +0 -0
  148. package/dist/public/assets/{_C9jJ-zAu2.js → _lTcPBjyz2.js} +1 -1
  149. package/dist/public/assets/_lTcPBjyz2.js.br +0 -0
  150. package/dist/public/assets/{_6t6kjpdU.js → _nqBpAHq9.js} +1 -1
  151. package/dist/public/assets/_nqBpAHq9.js.br +0 -0
  152. package/dist/public/assets/{_M4_M1GCx2.js → _tKPNE6U52.js} +1 -1
  153. package/dist/public/assets/_tKPNE6U52.js.br +0 -0
  154. package/dist/public/assets/{_C2a60ukk2.js → _zkaPdW0C2.js} +1 -1
  155. package/dist/public/assets/_zkaPdW0C2.js.br +0 -0
  156. package/dist/public/assets/diff-view-AJeZtePd.css +1 -0
  157. package/dist/public/assets/diff-view-AJeZtePd.css.br +0 -0
  158. package/dist/public/assets/index-BG3uLJV6.js +85 -0
  159. package/dist/public/assets/index-BG3uLJV6.js.br +0 -0
  160. package/dist/public/assets/index-_5MkiydM.css +1 -0
  161. package/dist/public/assets/index-_5MkiydM.css.br +0 -0
  162. package/dist/public/assets/preload-helper-C1JvlFma.css +1 -0
  163. package/dist/public/assets/preload-helper-C1JvlFma.css.br +0 -0
  164. package/package.json +1 -2
  165. package/dist/_kABYZA6_.js +0 -2
  166. package/dist/public/assets/_0jDMZ5Nf.js.br +0 -0
  167. package/dist/public/assets/_2JIp-AkL.js.br +0 -0
  168. package/dist/public/assets/_6t6kjpdU.js.br +0 -0
  169. package/dist/public/assets/_7WXyLEhK.js.br +0 -0
  170. package/dist/public/assets/_B-HE1A0L.js.br +0 -0
  171. package/dist/public/assets/_B-tmCiTe2.js.br +0 -0
  172. package/dist/public/assets/_B1lH2KuX.js.br +0 -0
  173. package/dist/public/assets/_B2jdNsMP.js.br +0 -0
  174. package/dist/public/assets/_B6bkX_xw.js.br +0 -0
  175. package/dist/public/assets/_B7_IQvxy.js.br +0 -0
  176. package/dist/public/assets/_BBnPf4LB.js.br +0 -0
  177. package/dist/public/assets/_BEn7bsbI.js.br +0 -0
  178. package/dist/public/assets/_BKPFmzRa2.js.br +0 -0
  179. package/dist/public/assets/_BKSy9tfl.js.br +0 -0
  180. package/dist/public/assets/_BPhrpOAd.js.br +0 -0
  181. package/dist/public/assets/_BQKEgF_-.js.br +0 -0
  182. package/dist/public/assets/_BVVf3KNx2.js.br +0 -0
  183. package/dist/public/assets/_BdE0YzeT2.js.br +0 -0
  184. package/dist/public/assets/_BeS7I1tE.js.br +0 -0
  185. package/dist/public/assets/_Bj8eqKyf2.js.br +0 -0
  186. package/dist/public/assets/_BmpuJc0U2.js.br +0 -0
  187. package/dist/public/assets/_BrNJO7NC.js.br +0 -0
  188. package/dist/public/assets/_BsDGIBWi.js.br +0 -0
  189. package/dist/public/assets/_BszYFXns.js.br +0 -0
  190. package/dist/public/assets/_C-3_S2jT.js.br +0 -0
  191. package/dist/public/assets/_C2a60ukk2.js.br +0 -0
  192. package/dist/public/assets/_C5qWivO82.js.br +0 -0
  193. package/dist/public/assets/_C7E2sftJ.js.br +0 -0
  194. package/dist/public/assets/_C9jJ-zAu2.js.br +0 -0
  195. package/dist/public/assets/_CBWyaxNg.js.br +0 -0
  196. package/dist/public/assets/_CCxiHsg1.js.br +0 -0
  197. package/dist/public/assets/_CMXeuTU3.js.br +0 -0
  198. package/dist/public/assets/_COItZVVh.js.br +0 -0
  199. package/dist/public/assets/_CQjfWgLv.js.br +0 -0
  200. package/dist/public/assets/_CUudFj1k2.js.br +0 -0
  201. package/dist/public/assets/_CVRoyRZW.js.br +0 -0
  202. package/dist/public/assets/_CVpg0dqw.js.br +0 -0
  203. package/dist/public/assets/_CWcbEhLf.js.br +0 -0
  204. package/dist/public/assets/_ChdHZg3q2.js.br +0 -0
  205. package/dist/public/assets/_Csumg8kE2.js.br +0 -0
  206. package/dist/public/assets/_Cu2zWIrA.js.br +0 -0
  207. package/dist/public/assets/_CvB8TafR.js.br +0 -0
  208. package/dist/public/assets/_CxfUzQkI.js.br +0 -0
  209. package/dist/public/assets/_D5wyt0NZ.js.br +0 -0
  210. package/dist/public/assets/_DAES5BQ6.js.br +0 -0
  211. package/dist/public/assets/_DAp7RKbE2.js.br +0 -0
  212. package/dist/public/assets/_DJIoEU4l.js.br +0 -0
  213. package/dist/public/assets/_DQZT5aYv2.js.br +0 -0
  214. package/dist/public/assets/_DSfzkPVh.js.br +0 -0
  215. package/dist/public/assets/_DUwDVnyb2.js.br +0 -0
  216. package/dist/public/assets/_DbeeD9R1.js.br +0 -0
  217. package/dist/public/assets/_DdvD3pSx2.js.br +0 -0
  218. package/dist/public/assets/_DlEZP4B2.js.br +0 -0
  219. package/dist/public/assets/_DmkxrcNE2.js.br +0 -0
  220. package/dist/public/assets/_Dp6GcCez.js.br +0 -0
  221. package/dist/public/assets/_Drob8ol2.js.br +0 -0
  222. package/dist/public/assets/_Fd6qP3go.js.br +0 -0
  223. package/dist/public/assets/_GX4ApnkB.js.br +0 -0
  224. package/dist/public/assets/_HmwD_O7C.js.br +0 -0
  225. package/dist/public/assets/_IiVyZhFQ2.js.br +0 -0
  226. package/dist/public/assets/_M4_M1GCx2.js.br +0 -0
  227. package/dist/public/assets/_MbiYJ36s.js.br +0 -0
  228. package/dist/public/assets/_NSw61-q82.js.br +0 -0
  229. package/dist/public/assets/_QBVNsQ8h.js.br +0 -0
  230. package/dist/public/assets/_RcdEaPTX.js.br +0 -0
  231. package/dist/public/assets/_Ty6Zi_p6.js.br +0 -0
  232. package/dist/public/assets/_c4j42n9F2.js.br +0 -0
  233. package/dist/public/assets/_cRSAYsIy.js.br +0 -0
  234. package/dist/public/assets/_gqKnRhHm2.js.br +0 -0
  235. package/dist/public/assets/_i3m2va9y2.js.br +0 -0
  236. package/dist/public/assets/_rShrll8V.js.br +0 -0
  237. package/dist/public/assets/_wsALS6ya.js.br +0 -0
  238. package/dist/public/assets/_wx4NAfvC.js.br +0 -0
  239. package/dist/public/assets/diff-view-l7q43Ong.css +0 -1
  240. package/dist/public/assets/diff-view-l7q43Ong.css.br +0 -0
  241. package/dist/public/assets/index-BXWsr0DP.js +0 -86
  242. package/dist/public/assets/index-BXWsr0DP.js.br +0 -0
  243. package/dist/public/assets/index-Du7Hgz2d.css +0 -1
  244. package/dist/public/assets/index-Du7Hgz2d.css.br +0 -0
  245. package/dist/public/assets/preload-helper-Di0vWBYv.css +0 -1
  246. package/dist/public/assets/preload-helper-Di0vWBYv.css.br +0 -0
package/bin/work.mjs CHANGED
@@ -295,10 +295,11 @@ function isWorkServerCmd(cmd) {
295
295
  /\bwork\.mjs\s+start(?:\s|$)/.test(cmd) ||
296
296
  /(?:^|[\s/])work\s+start(?:\s|$)/.test(cmd) ||
297
297
  /run-prod\.sh/.test(cmd) ||
298
+ /run-local\.sh/.test(cmd) ||
298
299
  /--why=work server is running/.test(cmd) ||
299
300
  /--why="work server is running"/.test(cmd) ||
300
301
  (/@dylanpiercey\/work\//.test(cmd) && !/\bnpm\b/.test(cmd)) ||
301
- /\/work\/(?:\S*\/)?dist\/index\.mjs/.test(cmd)
302
+ /\/work\/(?:\S*\/)?(?:dist|\.run)\/index\.mjs/.test(cmd)
302
303
  );
303
304
  }
304
305
 
@@ -368,7 +369,11 @@ function stopOldCopies(port) {
368
369
  if (!name.endsWith(".plist")) continue;
369
370
  const file = path.join(agents, name);
370
371
  const text = fs.readFileSync(file, "utf8");
371
- if (!/dev\.work\.app|work\.mjs|run-prod\.sh|@dylanpiercey\/work/.test(text))
372
+ if (
373
+ !/dev\.work\.app|work\.mjs|run-prod\.sh|run-local\.sh|@dylanpiercey\/work/.test(
374
+ text,
375
+ )
376
+ )
372
377
  continue;
373
378
  const label = text.match(
374
379
  /<key>Label<\/key>\s*<string>([^<]+)<\/string>/,
@@ -0,0 +1,2 @@
1
+ import { f as notifySessionsChanged } from "./_DM_oFS_v.js";
2
+ export { notifySessionsChanged };
@@ -6013,7 +6013,7 @@ function publishChange(sessionId) {
6013
6013
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
6014
6014
  if (row?.workspace_id) {
6015
6015
  const workspaceId = row.workspace_id;
6016
- import("./_kABYZA6_.js").then((m) => m.notifySessionsChanged(workspaceId));
6016
+ import("./_CV5G1-Sr.js").then((m) => m.notifySessionsChanged(workspaceId));
6017
6017
  return;
6018
6018
  }
6019
6019
  publish("sessions.changed");
@@ -6085,14 +6085,37 @@ function renameSession(id, title) {
6085
6085
  async function killSession(id) {
6086
6086
  const session = getSession(id);
6087
6087
  if (!session) return;
6088
+ await disposeSession(session.id);
6089
+ notifySessionsChanged(session.workspace_id);
6090
+ }
6091
+ /** Drop tmux + DB row with no sessions.changed — used when the workspace
6092
+ * is already gone from the list (delete notifies workspaces first). */
6093
+ async function disposeSessions(sessions) {
6094
+ for (const session of sessions) await disposeSession(session.id);
6095
+ }
6096
+ async function disposeSession(id) {
6088
6097
  await tmux([
6089
6098
  "kill-session",
6090
6099
  "-t",
6091
6100
  tmuxName(id)
6092
6101
  ]).catch(() => {});
6102
+ clearTmuxStarted(id);
6093
6103
  clearAgentPhase(id);
6094
6104
  db.prepare("DELETE FROM sessions WHERE id = ?").run(id);
6095
- notifySessionsChanged(session.workspace_id);
6105
+ }
6106
+ /** Session ids that have had a tmux session created at least once in this
6107
+ * process. After the agent exits, tmux drops the session; term attach must
6108
+ * not `-A` recreate it (that looks like Ctrl-C "reopening" the agent). A
6109
+ * deliberate respawn clears and re-marks this. */
6110
+ var tmuxStarted = /* @__PURE__ */ new Set();
6111
+ function markTmuxStarted(id) {
6112
+ tmuxStarted.add(id);
6113
+ }
6114
+ function tmuxWasStarted(id) {
6115
+ return tmuxStarted.has(id);
6116
+ }
6117
+ function clearTmuxStarted(id) {
6118
+ tmuxStarted.delete(id);
6096
6119
  }
6097
6120
  /** SSE payload: session rows + live tmux/hook state so clients don't refetch. */
6098
6121
  function notifySessionsChanged(workspaceId) {
@@ -6131,9 +6154,11 @@ async function sendToSession(id, text, size) {
6131
6154
  ], env).then(() => true, () => false)) {
6132
6155
  if (session.agent === "grok") {
6133
6156
  await tmux(newSessionArgs(session, wsPath, "-d", text, size), env);
6157
+ markTmuxStarted(id);
6134
6158
  return;
6135
6159
  }
6136
6160
  await tmux(newSessionArgs(session, wsPath, "-d", void 0, size), env);
6161
+ markTmuxStarted(id);
6137
6162
  await sleep(AGENT_BOOT_MS);
6138
6163
  }
6139
6164
  const buffer = `work-send-${Math.random().toString(36).slice(2, 8)}`;
@@ -6389,4 +6414,4 @@ function sleep(ms) {
6389
6414
  return new Promise((resolve) => setTimeout(resolve, ms));
6390
6415
  }
6391
6416
  //#endregion
6392
- export { TMUX_SOCKET as A, db as B, pushPublicKey as C, preferredAgent as D, allPrefs as E, publish as F, workspacePath as H, subscribe as I, subscriberCount as L, git as M, run as N, setPref as O, tmux as P, subscriberJoins as R, deleteSubscription as S, AGENTS as T, config as U, get as V, reasonFromHookPayload as _, killSession as a, setSessionViewers as b, newSessionArgs as c, renameSession as d, sendToSession as f, clearAgentPhase as g, reportsWorking as h, getSession as i, gh as j, setSetting as k, notifySessionsChanged as l, tmuxName as m, createSession as n, killWorkspaceSessions as o, sessionStates as p, ensureTmuxServer as r, listSessions as s, cleanEnv as t, panePids as u, setAgentPhase as v, saveSubscription as w, summaryFromHookPayload as x, setScrapedPhase as y, all as z };
6417
+ export { allPrefs as A, subscribe as B, setScrapedPhase as C, pushPublicKey as D, deleteSubscription as E, gh as F, get as G, subscriberJoins as H, git as I, workspacePath as K, run as L, setPref as M, setSetting as N, saveSubscription as O, TMUX_SOCKET as P, tmux as R, setAgentPhase as S, summaryFromHookPayload as T, all as U, subscriberCount as V, db as W, tmuxName as _, ensureTmuxServer as a, clearAgentPhase as b, killWorkspaceSessions as c, newSessionArgs as d, notifySessionsChanged as f, sessionStates as g, sendToSession as h, disposeSessions as i, preferredAgent as j, AGENTS as k, listSessions as l, renameSession as m, clearTmuxStarted as n, getSession as o, panePids as p, config as q, createSession as r, killSession as s, cleanEnv as t, markTmuxStarted as u, tmuxWasStarted as v, setSessionViewers as w, reasonFromHookPayload as x, reportsWorking as y, publish as z };
@@ -1981,25 +1981,25 @@ function toObjectExpression(options) {
1981
1981
  return result + "}";
1982
1982
  }
1983
1983
  var phase = {
1984
- working: "_r",
1985
- waiting: "_s",
1986
- idle: "_t",
1987
- off: "_u"
1984
+ working: "_t",
1985
+ waiting: "_u",
1986
+ idle: "_v",
1987
+ off: "_w"
1988
1988
  };
1989
1989
  var toastKind = {
1990
- error: "_C",
1991
- warn: "_D",
1992
- info: "_E"
1990
+ error: "_E",
1991
+ warn: "_F",
1992
+ info: "_G"
1993
1993
  };
1994
1994
  var toastTitle = {
1995
- error: "_F",
1996
- warn: "_G",
1997
- info: "_H"
1995
+ error: "_H",
1996
+ warn: "_I",
1997
+ info: "_J"
1998
1998
  };
1999
- var toastDismiss = "_L _y";
1999
+ var toastDismiss = "_N _A";
2000
2000
  //#endregion
2001
2001
  //#region src/tags/toast.marko
2002
- var toast_default = _template("w", (input) => {
2002
+ var toast_default = _template("v", (input) => {
2003
2003
  const $scope0_reason = _scope_reason(), $sg__input_title = _serialize_guard($scope0_reason, 7), $sg__input_title__OR__input_content__OR__input_action__OR__input_onDismiss = _serialize_guard($scope0_reason, 5), $sg__input_content = _serialize_guard($scope0_reason, 8), $sg__input_action = _serialize_guard($scope0_reason, 9), $sg__input_action__OR__input_onDismiss = _serialize_guard($scope0_reason, 3), $sg__input_onDismiss = _serialize_guard($scope0_reason, 11), $si__input_content = _serialize_if($scope0_reason, 8), $si__input_action__OR__input_onDismiss = _serialize_if($scope0_reason, 3), $si__input_action_content = _serialize_if($scope0_reason, 10);
2004
2004
  const $scope0_id = _scope_id();
2005
2005
  const $input_action_content__closures = /* @__PURE__ */ new Set();
@@ -2007,18 +2007,18 @@ var toast_default = _template("w", (input) => {
2007
2007
  const kind = inputKind || "error";
2008
2008
  const placement = inputPlacement || "float";
2009
2009
  const placementClass = {
2010
- float: "_A",
2011
- inline: "_B"
2010
+ float: "_C",
2011
+ inline: "_D"
2012
2012
  }[placement];
2013
2013
  _html(`<div${_attr_class([
2014
- "_z",
2014
+ "_B",
2015
2015
  toastKind[kind],
2016
2016
  placementClass,
2017
2017
  inputClass
2018
2018
  ])} role=${kind === "error" ? "alert" : "status"}${_attrs_partial(htmlInput, {
2019
2019
  class: 1,
2020
2020
  role: 1
2021
- }, "a", $scope0_id, "div")}><div${_attr_class("_I")}>`);
2021
+ }, "a", $scope0_id, "div")}><div${_attr_class("_K")}>`);
2022
2022
  _if(() => {
2023
2023
  if (title) {
2024
2024
  const $scope1_id = _scope_id();
@@ -2030,7 +2030,7 @@ var toast_default = _template("w", (input) => {
2030
2030
  _if(() => {
2031
2031
  if (content) {
2032
2032
  const $scope2_id = _scope_id();
2033
- _html(`<div${_attr_class("_J")}>`);
2033
+ _html(`<div${_attr_class("_L")}>`);
2034
2034
  _dynamic_tag($scope2_id, "b", content, {}, 0, 0, $sg__input_content);
2035
2035
  _html("</div>");
2036
2036
  $si__input_content && writeScope($scope2_id, { _: _scope_with_id($scope0_id) });
@@ -2041,7 +2041,7 @@ var toast_default = _template("w", (input) => {
2041
2041
  _if(() => {
2042
2042
  if (action || onDismiss) {
2043
2043
  const $scope3_id = _scope_id();
2044
- _html(`<div${_attr_class("_K")}>`);
2044
+ _html(`<div${_attr_class("_M")}>`);
2045
2045
  _if(() => {
2046
2046
  if (action) {
2047
2047
  const $scope4_id = _scope_id();
@@ -2054,7 +2054,7 @@ var toast_default = _template("w", (input) => {
2054
2054
  if (onDismiss) {
2055
2055
  const $scope5_id = _scope_id();
2056
2056
  _html(`<button${_attr_class(toastDismiss)} type=button title=Dismiss aria-label=Dismiss>×</button>${_el_resume($scope5_id, "a")}`);
2057
- _script($scope5_id, "w0");
2057
+ _script($scope5_id, "v0");
2058
2058
  writeScope($scope5_id, { _: _scope_with_id($scope3_id) });
2059
2059
  return 0;
2060
2060
  }
@@ -2065,8 +2065,8 @@ var toast_default = _template("w", (input) => {
2065
2065
  }
2066
2066
  }, $scope0_id, "e", $sg__input_action__OR__input_onDismiss, $sg__input_action__OR__input_onDismiss, $sg__input_title__OR__input_content__OR__input_action__OR__input_onDismiss, 0, 1);
2067
2067
  _html(`</div>${_el_resume($scope0_id, "a")}`);
2068
- _script($scope0_id, "w1");
2069
- _script($scope0_id, "w2");
2068
+ _script($scope0_id, "v1");
2069
+ _script($scope0_id, "v2");
2070
2070
  writeScope($scope0_id, {
2071
2071
  j: _serialize_if($scope0_reason, 7) && title,
2072
2072
  k: _serialize_if($scope0_reason, 0) && inputClass,
@@ -2082,6 +2082,32 @@ var toast_default = _template("w", (input) => {
2082
2082
  _resume_branch($scope0_id);
2083
2083
  });
2084
2084
  //#endregion
2085
+ //#region src/tags/icons/icon-base.marko
2086
+ var icon_base_default = _template("A", (input) => {
2087
+ const $scope0_reason = _scope_reason();
2088
+ const $scope0_id = _scope_id();
2089
+ const size = input.size ?? 15;
2090
+ _html(`<svg${_attr_class(["_d", input.class])}${_attr("width", size)}${_attr("height", size)} viewBox="0 0 24 24" fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path${_attr("d", input.d)}></path>${_el_resume($scope0_id, "b", _serialize_guard($scope0_reason, 2))}</svg>${_el_resume($scope0_id, "a", _serialize_guard($scope0_reason, 0))}`);
2091
+ _serialize_if($scope0_reason, 1) && writeScope($scope0_id, {});
2092
+ });
2093
+ //#endregion
2094
+ //#region src/tags/icons/icon-refresh.marko
2095
+ var icon_refresh_default = _template("N", (input) => {
2096
+ const $scope0_reason = _scope_reason(), $sg__input_size__OR__input_class = _serialize_guard($scope0_reason, 0);
2097
+ const $scope0_id = _scope_id();
2098
+ _set_serialize_reason({
2099
+ 0: $sg__input_size__OR__input_class,
2100
+ 1: $sg__input_size__OR__input_class
2101
+ });
2102
+ const $childScope = _peek_scope_id();
2103
+ icon_base_default({
2104
+ d: "M21.8883 13.5C21.1645 18.3113 17.013 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C16.1006 2 19.6248 4.46819 21.1679 8 M17 8H21.4C21.7314 8 22 7.73137 22 7.4V3",
2105
+ size: input.size,
2106
+ class: input.class
2107
+ });
2108
+ _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2109
+ });
2110
+ //#endregion
2085
2111
  //#region src/client/fuzzy.ts
2086
2112
  /** Rank an "org/name" repo against a query, weighting the name over the
2087
2113
  * org. Higher is better; -1 means no match (including an empty query —
@@ -2124,32 +2150,6 @@ function fuzzy(query, text) {
2124
2150
  return true;
2125
2151
  }
2126
2152
  //#endregion
2127
- //#region src/tags/icons/icon-base.marko
2128
- var icon_base_default = _template("B", (input) => {
2129
- const $scope0_reason = _scope_reason();
2130
- const $scope0_id = _scope_id();
2131
- const size = input.size ?? 15;
2132
- _html(`<svg${_attr_class(["_d", input.class])}${_attr("width", size)}${_attr("height", size)} viewBox="0 0 24 24" fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path${_attr("d", input.d)}></path>${_el_resume($scope0_id, "b", _serialize_guard($scope0_reason, 2))}</svg>${_el_resume($scope0_id, "a", _serialize_guard($scope0_reason, 0))}`);
2133
- _serialize_if($scope0_reason, 1) && writeScope($scope0_id, {});
2134
- });
2135
- //#endregion
2136
- //#region src/tags/icons/icon-refresh.marko
2137
- var icon_refresh_default = _template("O", (input) => {
2138
- const $scope0_reason = _scope_reason(), $sg__input_size__OR__input_class = _serialize_guard($scope0_reason, 0);
2139
- const $scope0_id = _scope_id();
2140
- _set_serialize_reason({
2141
- 0: $sg__input_size__OR__input_class,
2142
- 1: $sg__input_size__OR__input_class
2143
- });
2144
- const $childScope = _peek_scope_id();
2145
- icon_base_default({
2146
- d: "M21.8883 13.5C21.1645 18.3113 17.013 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C16.1006 2 19.6248 4.46819 21.1679 8 M17 8H21.4C21.7314 8 22 7.73137 22 7.4V3",
2147
- size: input.size,
2148
- class: input.class
2149
- });
2150
- _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2151
- });
2152
- //#endregion
2153
2153
  //#region src/client/prefs.ts
2154
2154
  /** UI preferences, stored server-side (settings table) so every device
2155
2155
  * sees the same state — nothing user-visible is per-browser. The map is
@@ -2194,7 +2194,7 @@ function diffUncommitted() {
2194
2194
  }
2195
2195
  //#endregion
2196
2196
  //#region src/tags/icons/icon-sidebar.marko
2197
- var icon_sidebar_default = _template("R", (input) => {
2197
+ var icon_sidebar_default = _template("Q", (input) => {
2198
2198
  const $scope0_reason = _scope_reason(), $sg__input_size__OR__input_class = _serialize_guard($scope0_reason, 0);
2199
2199
  const $scope0_id = _scope_id();
2200
2200
  _set_serialize_reason({
@@ -2209,11 +2209,11 @@ var icon_sidebar_default = _template("R", (input) => {
2209
2209
  });
2210
2210
  _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2211
2211
  });
2212
- var findInput = "_e8 _e";
2213
- var findIconBtn = "_fa _y";
2212
+ var findInput = "_eE _e";
2213
+ var findIconBtn = "_eH _A";
2214
2214
  //#endregion
2215
2215
  //#region src/tags/icons/icon-search.marko
2216
- var icon_search_default = _template("P", (input) => {
2216
+ var icon_search_default = _template("O", (input) => {
2217
2217
  const $scope0_reason = _scope_reason(), $sg__input_size__OR__input_class = _serialize_guard($scope0_reason, 0);
2218
2218
  const $scope0_id = _scope_id();
2219
2219
  _set_serialize_reason({
@@ -2229,4 +2229,4 @@ var icon_search_default = _template("P", (input) => {
2229
2229
  _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2230
2230
  });
2231
2231
  //#endregion
2232
- export { _subscribe as $, _el_resume as A, _peek_scope_id as B, _attr_style as C, _dynamic_tag as D, _content_resume as E, _hoist as F, _scope_with_id as G, _resume_branch as H, _hoist_read_error as I, _serialize_guard as J, _script as K, _html as L, _existing_scope as M, _flush_head as N, _el as O, _for_of as P, _show_start as Q, _id as R, _attr_select_value as S, _content as T, _scope_id as U, _resume as V, _scope_reason as W, _set_serialize_reason as X, _serialize_if as Y, _show_end as Z, _attr as _, diffTreeOpen as a, attrTag as at, _attr_input_value as b, sideNavOpen as c, icon_base_default as d, _template as et, fuzzy as f, $global as g, phase as h, icon_sidebar_default as i, _var as it, _escape as j, _el_read_error as k, workspaceTab as l, toast_default as m, findIconBtn as n, _trailers as nt, diffUncommitted as o, withPageAssets as ot, rankRepos as p, _sep as q, findInput as r, _try as rt, setWorkspaceTab as s, writeScope as st, icon_search_default as t, _to_text as tt, icon_refresh_default as u, _attr_class as v, _await as w, _attr_option_value as x, _attr_details_or_dialog_open as y, _if as z };
2232
+ export { _subscribe as $, _el_resume as A, _peek_scope_id as B, _attr_style as C, _dynamic_tag as D, _content_resume as E, _hoist as F, _scope_with_id as G, _resume_branch as H, _hoist_read_error as I, _serialize_guard as J, _script as K, _html as L, _existing_scope as M, _flush_head as N, _el as O, _for_of as P, _show_start as Q, _id as R, _attr_select_value as S, _content as T, _scope_id as U, _resume as V, _scope_reason as W, _set_serialize_reason as X, _serialize_if as Y, _show_end as Z, _attr as _, diffTreeOpen as a, attrTag as at, _attr_input_value as b, sideNavOpen as c, rankRepos as d, _template as et, icon_refresh_default as f, $global as g, phase as h, icon_sidebar_default as i, _var as it, _escape as j, _el_read_error as k, workspaceTab as l, toast_default as m, findIconBtn as n, _trailers as nt, diffUncommitted as o, withPageAssets as ot, icon_base_default as p, _sep as q, findInput as r, _try as rt, setWorkspaceTab as s, writeScope as st, icon_search_default as t, _to_text as tt, fuzzy as u, _attr_class as v, _await as w, _attr_option_value as x, _attr_details_or_dialog_open as y, _if as z };