claude-mux 0.9.5 → 0.10.0

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 (364) hide show
  1. package/CLAUDE.md +1 -1
  2. package/dist/app.d.ts +2 -1
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/claude/commands.d.ts +15 -0
  5. package/dist/claude/commands.d.ts.map +1 -0
  6. package/dist/claude/commands.js +245 -0
  7. package/dist/claude/commands.js.map +1 -0
  8. package/dist/components/Header.d.ts +2 -1
  9. package/dist/components/Header.d.ts.map +1 -1
  10. package/dist/components/HelpDialog.d.ts +2 -1
  11. package/dist/components/HelpDialog.d.ts.map +1 -1
  12. package/dist/components/SessionEntry.d.ts +2 -1
  13. package/dist/components/SessionEntry.d.ts.map +1 -1
  14. package/dist/components/SessionList.d.ts +2 -1
  15. package/dist/components/SessionList.d.ts.map +1 -1
  16. package/dist/components/StatusBar.d.ts +2 -1
  17. package/dist/components/StatusBar.d.ts.map +1 -1
  18. package/dist/db/sessions-json.d.ts +1 -1
  19. package/dist/db/sessions-json.js +1 -1
  20. package/dist/server/message-queue.d.ts +7 -0
  21. package/dist/server/message-queue.d.ts.map +1 -1
  22. package/dist/server/message-queue.js +57 -4
  23. package/dist/server/message-queue.js.map +1 -1
  24. package/dist/server/ws-handlers.d.ts +34 -7
  25. package/dist/server/ws-handlers.d.ts.map +1 -1
  26. package/dist/server/ws-handlers.js +137 -51
  27. package/dist/server/ws-handlers.js.map +1 -1
  28. package/dist/tmux/snapshot.d.ts +26 -0
  29. package/dist/tmux/snapshot.d.ts.map +1 -0
  30. package/dist/tmux/snapshot.js +121 -0
  31. package/dist/tmux/snapshot.js.map +1 -0
  32. package/dist/utils/version.d.ts +1 -1
  33. package/dist/utils/version.d.ts.map +1 -1
  34. package/dist/utils/version.js +1 -1
  35. package/dist/utils/version.js.map +1 -1
  36. package/dist/web/client/_app/immutable/assets/0.BHMH03xN.css +1 -0
  37. package/dist/web/client/_app/immutable/assets/2.BPFnFMPa.css +1 -0
  38. package/{web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.B_k6eI2k.css → dist/web/client/_app/immutable/assets/3.C-mmGOc7.css} +1 -1
  39. package/dist/web/client/_app/immutable/chunks/B-uNUC1g.js +2 -0
  40. package/dist/web/client/_app/immutable/chunks/BC4YnY_W.js +1 -0
  41. package/dist/web/client/_app/immutable/chunks/BMXiuv0v.js +1 -0
  42. package/dist/web/client/_app/immutable/chunks/BcLVN_yA.js +1 -0
  43. package/dist/web/client/_app/immutable/chunks/C75YkvRA.js +1 -0
  44. package/dist/web/client/_app/immutable/chunks/CrbnT13E.js +1 -0
  45. package/dist/web/client/_app/immutable/chunks/DuapVKBU.js +2 -0
  46. package/dist/web/client/_app/immutable/chunks/jsJxHQ3D.js +69 -0
  47. package/dist/web/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  48. package/dist/web/client/_app/immutable/entry/app.BPxQgXOL.js +2 -0
  49. package/dist/web/client/_app/immutable/entry/start.CFsMAOx8.js +1 -0
  50. package/dist/web/client/_app/immutable/nodes/0.CWdPHOZW.js +1 -0
  51. package/dist/web/client/_app/immutable/nodes/1.CBrHLWCB.js +1 -0
  52. package/dist/web/client/_app/immutable/nodes/2.Concd-Od.js +1 -0
  53. package/dist/web/client/_app/immutable/nodes/3.Bxw2z5gl.js +101 -0
  54. package/dist/web/client/_app/version.json +1 -1
  55. package/dist/web/client/apple-touch-icon.png +0 -0
  56. package/dist/web/client/icon-192.png +0 -0
  57. package/dist/web/client/icon-512.png +0 -0
  58. package/dist/web/client/manifest.webmanifest +16 -0
  59. package/dist/web/server/chunks/{0-D9F7XwhO.js → 0-DdxdcbPU.js} +13 -12
  60. package/dist/web/server/chunks/0-DdxdcbPU.js.map +1 -0
  61. package/dist/web/server/chunks/{1-CaA6_Msb.js → 1-CvSoa3QJ.js} +6 -6
  62. package/dist/web/server/chunks/1-CvSoa3QJ.js.map +1 -0
  63. package/dist/web/server/chunks/2-BrM2VX61.js +20 -0
  64. package/dist/web/server/chunks/2-BrM2VX61.js.map +1 -0
  65. package/dist/web/server/chunks/3-DPGMF1DL.js +23 -0
  66. package/dist/web/server/chunks/3-DPGMF1DL.js.map +1 -0
  67. package/dist/web/server/chunks/{popover-trigger-BQJRZ2Xv.js → _layout.svelte-DQzPx1fa.js} +3622 -288
  68. package/dist/web/server/chunks/_layout.svelte-DQzPx1fa.js.map +1 -0
  69. package/dist/web/server/chunks/{_page.svelte-CREhk3v0.js → _page.svelte-BlOLzyrl.js} +4 -4
  70. package/dist/web/server/chunks/_page.svelte-BlOLzyrl.js.map +1 -0
  71. package/dist/web/server/chunks/{_server.ts-CTIiLzg9.js → _server.ts-12NE7UeG.js} +5 -5
  72. package/dist/web/server/chunks/{_server.ts-CTIiLzg9.js.map → _server.ts-12NE7UeG.js.map} +1 -1
  73. package/dist/web/server/chunks/{_server.ts-Dj_iwP-Z.js → _server.ts-BDmSWnC6.js} +8 -6
  74. package/dist/web/server/chunks/{_server.ts-Dj_iwP-Z.js.map → _server.ts-BDmSWnC6.js.map} +1 -1
  75. package/dist/web/server/chunks/{_server.ts-B-6emYlG.js → _server.ts-BFLtnMcp.js} +7 -5
  76. package/dist/web/server/chunks/{_server.ts-B-6emYlG.js.map → _server.ts-BFLtnMcp.js.map} +1 -1
  77. package/dist/web/server/chunks/{_server.ts-DyeW0P3w.js → _server.ts-BOo-YmUp.js} +5 -4
  78. package/dist/web/server/chunks/{_server.ts-DyeW0P3w.js.map → _server.ts-BOo-YmUp.js.map} +1 -1
  79. package/dist/web/server/chunks/{_server.ts-BUOOqQRk.js → _server.ts-BXt5Kowc.js} +3 -3
  80. package/dist/web/server/chunks/{_server.ts-BUOOqQRk.js.map → _server.ts-BXt5Kowc.js.map} +1 -1
  81. package/dist/web/server/chunks/{_server.ts-ChuAmmhw.js → _server.ts-BYBeCdq2.js} +4 -4
  82. package/dist/web/server/chunks/{_server.ts-ChuAmmhw.js.map → _server.ts-BYBeCdq2.js.map} +1 -1
  83. package/dist/web/server/chunks/{_server.ts-ZObkLZOS.js → _server.ts-Bm14TVxq.js} +2 -2
  84. package/dist/web/server/chunks/{_server.ts-ZObkLZOS.js.map → _server.ts-Bm14TVxq.js.map} +1 -1
  85. package/dist/web/server/chunks/{_server.ts-DIhiJl4f.js → _server.ts-C0ur_l7h.js} +5 -4
  86. package/dist/web/server/chunks/{_server.ts-DIhiJl4f.js.map → _server.ts-C0ur_l7h.js.map} +1 -1
  87. package/dist/web/server/chunks/{_server.ts-D0ylgRRV.js → _server.ts-CJ0nhTTh.js} +3 -3
  88. package/dist/web/server/chunks/{_server.ts-D0ylgRRV.js.map → _server.ts-CJ0nhTTh.js.map} +1 -1
  89. package/dist/web/server/chunks/{_server.ts-DLI_Pwvd.js → _server.ts-CgG8pj06.js} +2 -2
  90. package/dist/web/server/chunks/{_server.ts-DLI_Pwvd.js.map → _server.ts-CgG8pj06.js.map} +1 -1
  91. package/dist/web/server/chunks/_server.ts-CrRQ-1IB.js +208 -0
  92. package/dist/web/server/chunks/_server.ts-CrRQ-1IB.js.map +1 -0
  93. package/dist/web/server/chunks/{_server.ts-CkC3JTyo.js → _server.ts-CzgDUjKe.js} +12 -11
  94. package/dist/web/server/chunks/{_server.ts-CkC3JTyo.js.map → _server.ts-CzgDUjKe.js.map} +1 -1
  95. package/dist/web/server/chunks/{_server.ts-DK7C_rXn.js → _server.ts-D8hEf52k.js} +13 -12
  96. package/dist/web/server/chunks/{_server.ts-DK7C_rXn.js.map → _server.ts-D8hEf52k.js.map} +1 -1
  97. package/dist/web/server/chunks/{_server.ts-B4o51l3m.js → _server.ts-DJhqVvwC.js} +3 -3
  98. package/dist/web/server/chunks/{_server.ts-B4o51l3m.js.map → _server.ts-DJhqVvwC.js.map} +1 -1
  99. package/dist/web/server/chunks/{_server.ts-Bkk6XA1G.js → _server.ts-DQhRNIQX.js} +15 -9
  100. package/dist/web/server/chunks/{_server.ts-Bkk6XA1G.js.map → _server.ts-DQhRNIQX.js.map} +1 -1
  101. package/dist/web/server/chunks/{_server.ts-B2vhCPsh.js → _server.ts-DtVo0TCf.js} +4 -4
  102. package/dist/web/server/chunks/{_server.ts-B2vhCPsh.js.map → _server.ts-DtVo0TCf.js.map} +1 -1
  103. package/dist/web/server/chunks/{_server.ts-Bp8qgUhz.js → _server.ts-S3P3Wga8.js} +3 -3
  104. package/dist/web/server/chunks/{_server.ts-Bp8qgUhz.js.map → _server.ts-S3P3Wga8.js.map} +1 -1
  105. package/dist/web/server/chunks/{_server.ts-Cy0wvEJk.js → _server.ts-UE7vj5nG.js} +7 -6
  106. package/dist/web/server/chunks/{_server.ts-Cy0wvEJk.js.map → _server.ts-UE7vj5nG.js.map} +1 -1
  107. package/dist/web/server/chunks/{_server.ts-BEQA_put.js → _server.ts-mGAUzFSv.js} +2 -2
  108. package/dist/web/server/chunks/{_server.ts-BEQA_put.js.map → _server.ts-mGAUzFSv.js.map} +1 -1
  109. package/dist/web/server/chunks/{_server.ts-eFJEOOS1.js → _server.ts-qEqBc4dH.js} +5 -5
  110. package/dist/web/server/chunks/{_server.ts-eFJEOOS1.js.map → _server.ts-qEqBc4dH.js.map} +1 -1
  111. package/dist/web/server/chunks/{agents-rTKwF5qh.js → agents-21cPpmjY.js} +1 -1
  112. package/dist/web/server/chunks/{agents-rTKwF5qh.js.map → agents-21cPpmjY.js.map} +1 -1
  113. package/dist/web/server/chunks/{attachments-B8VMrOm4.js → attachments-KlCvKhak.js} +2 -2
  114. package/dist/web/server/chunks/{attachments-B8VMrOm4.js.map → attachments-KlCvKhak.js.map} +1 -1
  115. package/dist/web/server/chunks/{button-BKSlzQeg.js → button-DG6I4Dia.js} +4733 -885
  116. package/dist/web/server/chunks/button-DG6I4Dia.js.map +1 -0
  117. package/dist/web/server/chunks/{constants-CZFdiL46.js → constants-DxYZCFLw.js} +1 -1
  118. package/dist/web/server/chunks/{constants-CZFdiL46.js.map → constants-DxYZCFLw.js.map} +1 -1
  119. package/dist/web/server/chunks/{error.svelte-VCYDSS3H.js → error.svelte-r19Dfgak.js} +3 -5
  120. package/dist/web/server/chunks/error.svelte-r19Dfgak.js.map +1 -0
  121. package/dist/web/server/chunks/{exports-DLCVjVJM.js → exports-BqJxdkkd.js} +67 -5
  122. package/dist/web/server/chunks/exports-BqJxdkkd.js.map +1 -0
  123. package/dist/web/server/chunks/{root-L_UzGTpb.js → exports-zB_G8R4F.js} +1604 -1549
  124. package/dist/web/server/chunks/exports-zB_G8R4F.js.map +1 -0
  125. package/dist/web/server/chunks/{hooks.server-CzdMWOsb.js → hooks.server-IAZrpw3O.js} +7 -6
  126. package/dist/web/server/chunks/hooks.server-IAZrpw3O.js.map +1 -0
  127. package/dist/web/server/chunks/{message-queue-BhryIx7W.js → message-queue-DletiFqf.js} +41 -6
  128. package/dist/web/server/chunks/message-queue-DletiFqf.js.map +1 -0
  129. package/dist/web/server/chunks/{sessions-json-w9KPwiDl.js → sessions-json-CaSa-c37.js} +1 -1
  130. package/dist/web/server/chunks/{sessions-json-w9KPwiDl.js.map → sessions-json-CaSa-c37.js.map} +1 -1
  131. package/dist/web/server/chunks/{shared-server-CB2NTyFt.js → shared-server-Cs1g-wuJ.js} +1 -1
  132. package/dist/web/server/chunks/{shared-server-CB2NTyFt.js.map → shared-server-Cs1g-wuJ.js.map} +1 -1
  133. package/dist/web/server/chunks/{state.svelte-DM05ho1v.js → state.svelte-Bb67lT4B.js} +2 -2
  134. package/dist/web/server/chunks/{state.svelte-DM05ho1v.js.map → state.svelte-Bb67lT4B.js.map} +1 -1
  135. package/dist/web/server/chunks/{ws-handlers-B_p_71BD.js → ws-handlers-KQ7tQLV2.js} +296 -70
  136. package/dist/web/server/chunks/ws-handlers-KQ7tQLV2.js.map +1 -0
  137. package/dist/web/server/chunks/{ws-managers-B0N9UU0g.js → ws-managers-Bk8Kzixf.js} +2 -2
  138. package/dist/web/server/chunks/{ws-managers-B0N9UU0g.js.map → ws-managers-Bk8Kzixf.js.map} +1 -1
  139. package/dist/web/server/index.js +1362 -1175
  140. package/dist/web/server/index.js.map +1 -1
  141. package/dist/web/server/manifest.js +50 -33
  142. package/dist/web/server/manifest.js.map +1 -1
  143. package/package.json +13 -13
  144. package/src/claude/commands.ts +262 -0
  145. package/src/db/sessions-json.ts +1 -1
  146. package/src/server/message-queue.ts +59 -4
  147. package/src/server/ws-handlers.ts +179 -56
  148. package/src/tmux/snapshot.ts +132 -0
  149. package/src/utils/version.ts +1 -1
  150. package/tests/components/Header.test.tsx +1 -1
  151. package/tests/db/sessions.test.ts +10 -8
  152. package/tests/setup/hooks.test.ts +4 -4
  153. package/web/.svelte-kit/adapter-bun/.vite/manifest.json +59 -66
  154. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.C_Esdb-g.css +1 -0
  155. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.BPFnFMPa.css +1 -0
  156. package/web/.svelte-kit/{output/server/_app/immutable/assets/_page.B_k6eI2k.css → adapter-bun/_app/immutable/assets/_page.C-mmGOc7.css} +1 -1
  157. package/web/.svelte-kit/adapter-bun/chunks/attachments.js +1 -1
  158. package/web/.svelte-kit/adapter-bun/chunks/button.js +9 -9
  159. package/web/.svelte-kit/adapter-bun/chunks/exports.js +5 -5
  160. package/web/.svelte-kit/adapter-bun/chunks/internal.js +29 -122
  161. package/web/.svelte-kit/adapter-bun/chunks/internal2.js +128 -0
  162. package/web/.svelte-kit/adapter-bun/chunks/message-queue.js +41 -7
  163. package/web/.svelte-kit/adapter-bun/chunks/popover-trigger.js +777 -288
  164. package/web/.svelte-kit/adapter-bun/chunks/root.js +1510 -1432
  165. package/web/.svelte-kit/adapter-bun/chunks/sessions-json.js +8 -8
  166. package/web/.svelte-kit/adapter-bun/chunks/shared-server.js +3 -3
  167. package/web/.svelte-kit/adapter-bun/chunks/state.svelte.js +1 -1
  168. package/web/.svelte-kit/{output/server/chunks/render-context.js → adapter-bun/chunks/uneval.js} +46 -109
  169. package/web/.svelte-kit/adapter-bun/chunks/utils.js +1728 -32
  170. package/web/.svelte-kit/adapter-bun/chunks/utils2.js +41 -0
  171. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +231 -57
  172. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/commands/_server.ts.js +212 -0
  173. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +1 -1
  174. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
  175. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +1 -1
  176. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +2 -2
  177. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +1 -1
  178. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
  179. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/send/_server.ts.js +1 -1
  180. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +1 -1
  181. package/web/.svelte-kit/adapter-bun/entries/fallbacks/error.svelte.js +5 -5
  182. package/web/.svelte-kit/adapter-bun/entries/hooks.server.js +1 -1
  183. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.server.ts.js +1 -1
  184. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +6 -527
  185. package/web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js +2 -2
  186. package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +422 -195
  187. package/web/.svelte-kit/adapter-bun/env.js +13 -0
  188. package/web/.svelte-kit/adapter-bun/index.js +788 -903
  189. package/web/.svelte-kit/adapter-bun/internal.js +6 -6
  190. package/web/.svelte-kit/adapter-bun/manifest-full.js +10 -3
  191. package/web/.svelte-kit/adapter-bun/manifest.js +10 -3
  192. package/web/.svelte-kit/adapter-bun/nodes/0.js +2 -2
  193. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  194. package/web/.svelte-kit/adapter-bun/nodes/2.js +2 -2
  195. package/web/.svelte-kit/adapter-bun/nodes/3.js +2 -4
  196. package/web/.svelte-kit/adapter-bun/remote-entry.js +365 -140
  197. package/web/.svelte-kit/ambient.d.ts +210 -198
  198. package/web/.svelte-kit/env.d.ts +1 -0
  199. package/web/.svelte-kit/generated/client/app.js +11 -1
  200. package/web/.svelte-kit/generated/client/nodes/1.js +1 -1
  201. package/web/.svelte-kit/generated/client-optimized/app.js +11 -1
  202. package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -1
  203. package/web/.svelte-kit/generated/root.svelte +1 -1
  204. package/web/.svelte-kit/generated/server/internal.js +6 -5
  205. package/web/.svelte-kit/generated/shared/error-template.js +1 -0
  206. package/web/.svelte-kit/non-ambient.d.ts +9 -8
  207. package/web/.svelte-kit/output/client/.vite/manifest.json +86 -70
  208. package/web/.svelte-kit/output/client/_app/immutable/assets/0.BHMH03xN.css +1 -0
  209. package/web/.svelte-kit/output/client/_app/immutable/assets/2.BPFnFMPa.css +1 -0
  210. package/{dist/web/client/_app/immutable/assets/3.B_k6eI2k.css → web/.svelte-kit/output/client/_app/immutable/assets/3.C-mmGOc7.css} +1 -1
  211. package/web/.svelte-kit/output/client/_app/immutable/chunks/B-uNUC1g.js +2 -0
  212. package/web/.svelte-kit/output/client/_app/immutable/chunks/BC4YnY_W.js +1 -0
  213. package/web/.svelte-kit/output/client/_app/immutable/chunks/BMXiuv0v.js +1 -0
  214. package/web/.svelte-kit/output/client/_app/immutable/chunks/BcLVN_yA.js +1 -0
  215. package/web/.svelte-kit/output/client/_app/immutable/chunks/C75YkvRA.js +1 -0
  216. package/web/.svelte-kit/output/client/_app/immutable/chunks/CrbnT13E.js +1 -0
  217. package/web/.svelte-kit/output/client/_app/immutable/chunks/DuapVKBU.js +2 -0
  218. package/web/.svelte-kit/output/client/_app/immutable/chunks/jsJxHQ3D.js +69 -0
  219. package/web/.svelte-kit/output/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  220. package/web/.svelte-kit/output/client/_app/immutable/entry/app.BPxQgXOL.js +2 -0
  221. package/web/.svelte-kit/output/client/_app/immutable/entry/start.CFsMAOx8.js +1 -0
  222. package/web/.svelte-kit/output/client/_app/immutable/nodes/0.CWdPHOZW.js +1 -0
  223. package/web/.svelte-kit/output/client/_app/immutable/nodes/1.CBrHLWCB.js +1 -0
  224. package/web/.svelte-kit/output/client/_app/immutable/nodes/2.Concd-Od.js +1 -0
  225. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.Bxw2z5gl.js +101 -0
  226. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  227. package/web/.svelte-kit/output/client/apple-touch-icon.png +0 -0
  228. package/web/.svelte-kit/output/client/icon-192.png +0 -0
  229. package/web/.svelte-kit/output/client/icon-512.png +0 -0
  230. package/web/.svelte-kit/output/client/manifest.webmanifest +16 -0
  231. package/web/.svelte-kit/output/server/.vite/manifest.json +59 -66
  232. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.C_Esdb-g.css +1 -0
  233. package/web/.svelte-kit/output/server/_app/immutable/assets/_page.BPFnFMPa.css +1 -0
  234. package/web/.svelte-kit/output/{client/_app/immutable/assets/3.B_k6eI2k.css → server/_app/immutable/assets/_page.C-mmGOc7.css} +1 -1
  235. package/web/.svelte-kit/output/server/chunks/attachments.js +1 -1
  236. package/web/.svelte-kit/output/server/chunks/button.js +9 -9
  237. package/web/.svelte-kit/output/server/chunks/exports.js +5 -5
  238. package/web/.svelte-kit/output/server/chunks/internal.js +29 -122
  239. package/web/.svelte-kit/output/server/chunks/internal2.js +128 -0
  240. package/web/.svelte-kit/output/server/chunks/message-queue.js +41 -7
  241. package/web/.svelte-kit/output/server/chunks/popover-trigger.js +777 -288
  242. package/web/.svelte-kit/output/server/chunks/root.js +1510 -1432
  243. package/web/.svelte-kit/output/server/chunks/sessions-json.js +8 -8
  244. package/web/.svelte-kit/output/server/chunks/shared-server.js +3 -3
  245. package/web/.svelte-kit/output/server/chunks/state.svelte.js +1 -1
  246. package/web/.svelte-kit/{adapter-bun/chunks/render-context.js → output/server/chunks/uneval.js} +46 -109
  247. package/web/.svelte-kit/output/server/chunks/utils.js +1728 -32
  248. package/web/.svelte-kit/output/server/chunks/utils2.js +41 -0
  249. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +231 -57
  250. package/web/.svelte-kit/output/server/entries/endpoints/api/commands/_server.ts.js +212 -0
  251. package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +1 -1
  252. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
  253. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +1 -1
  254. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +2 -2
  255. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +1 -1
  256. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
  257. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/send/_server.ts.js +1 -1
  258. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +1 -1
  259. package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +5 -5
  260. package/web/.svelte-kit/output/server/entries/hooks.server.js +1 -1
  261. package/web/.svelte-kit/output/server/entries/pages/_layout.server.ts.js +1 -1
  262. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +6 -527
  263. package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +2 -2
  264. package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +422 -195
  265. package/web/.svelte-kit/output/server/env.js +13 -0
  266. package/web/.svelte-kit/output/server/index.js +788 -903
  267. package/web/.svelte-kit/output/server/internal.js +6 -6
  268. package/web/.svelte-kit/output/server/manifest-full.js +10 -3
  269. package/web/.svelte-kit/output/server/manifest.js +10 -3
  270. package/web/.svelte-kit/output/server/nodes/0.js +2 -2
  271. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  272. package/web/.svelte-kit/output/server/nodes/2.js +2 -2
  273. package/web/.svelte-kit/output/server/nodes/3.js +2 -4
  274. package/web/.svelte-kit/output/server/remote-entry.js +365 -140
  275. package/web/.svelte-kit/tsconfig.json +2 -4
  276. package/web/.svelte-kit/types/route_meta_data.json +3 -0
  277. package/web/.svelte-kit/types/src/routes/$types.d.ts +1 -1
  278. package/web/.svelte-kit/types/src/routes/api/commands/$types.d.ts +9 -0
  279. package/web/package.json +11 -11
  280. package/web/src/app.html +9 -1
  281. package/web/src/hooks.server.ts +2 -1
  282. package/web/src/lib/components/CommandPalette.svelte +244 -0
  283. package/web/src/lib/components/TerminalView.svelte +113 -0
  284. package/web/src/lib/stores/terminal.svelte.ts +183 -31
  285. package/web/src/lib/terminal/ansi.ts +48 -0
  286. package/web/src/routes/+layout.svelte +14 -4
  287. package/web/src/routes/+page.svelte +1 -1
  288. package/web/src/routes/api/commands/+server.ts +9 -0
  289. package/web/src/routes/session/[target]/+page.svelte +130 -67
  290. package/web/static/apple-touch-icon.png +0 -0
  291. package/web/static/icon-192.png +0 -0
  292. package/web/static/icon-512.png +0 -0
  293. package/web/static/manifest.webmanifest +16 -0
  294. package/web/vite.config.ts +2 -1
  295. package/dist/web/client/_app/immutable/assets/0.0ZM-mOx6.css +0 -1
  296. package/dist/web/client/_app/immutable/assets/2.s6Kx4oz1.css +0 -1
  297. package/dist/web/client/_app/immutable/chunks/BIuG5Qqu.js +0 -1
  298. package/dist/web/client/_app/immutable/chunks/Bc6u7h4b.js +0 -1
  299. package/dist/web/client/_app/immutable/chunks/CGb10hB5.js +0 -1
  300. package/dist/web/client/_app/immutable/chunks/Cd9FsMi7.js +0 -1
  301. package/dist/web/client/_app/immutable/chunks/CzMlg5s0.js +0 -69
  302. package/dist/web/client/_app/immutable/chunks/D7LHlC1M.js +0 -2
  303. package/dist/web/client/_app/immutable/chunks/DnokqAh5.js +0 -3
  304. package/dist/web/client/_app/immutable/entry/app.CSyNZ-P9.js +0 -2
  305. package/dist/web/client/_app/immutable/entry/start.DDGAiG8M.js +0 -1
  306. package/dist/web/client/_app/immutable/nodes/0.6OjSQ9Bf.js +0 -1
  307. package/dist/web/client/_app/immutable/nodes/1.BxemSYR-.js +0 -1
  308. package/dist/web/client/_app/immutable/nodes/2.9MvIu4lM.js +0 -1
  309. package/dist/web/client/_app/immutable/nodes/3.CFLgLVR9.js +0 -98
  310. package/dist/web/server/chunks/0-D9F7XwhO.js.map +0 -1
  311. package/dist/web/server/chunks/1-CaA6_Msb.js.map +0 -1
  312. package/dist/web/server/chunks/2-C0lh_1Lh.js +0 -19
  313. package/dist/web/server/chunks/2-C0lh_1Lh.js.map +0 -1
  314. package/dist/web/server/chunks/3-D6h2KIjg.js +0 -24
  315. package/dist/web/server/chunks/3-D6h2KIjg.js.map +0 -1
  316. package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js +0 -3358
  317. package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js.map +0 -1
  318. package/dist/web/server/chunks/_page.svelte-CREhk3v0.js.map +0 -1
  319. package/dist/web/server/chunks/_page.svelte-NyGzfl6p.js +0 -1392
  320. package/dist/web/server/chunks/_page.svelte-NyGzfl6p.js.map +0 -1
  321. package/dist/web/server/chunks/button-BKSlzQeg.js.map +0 -1
  322. package/dist/web/server/chunks/chunks-DLJ18IUO.js +0 -57
  323. package/dist/web/server/chunks/chunks-DLJ18IUO.js.map +0 -1
  324. package/dist/web/server/chunks/client-Dnt8rmsr.js +0 -19
  325. package/dist/web/server/chunks/client-Dnt8rmsr.js.map +0 -1
  326. package/dist/web/server/chunks/error.svelte-VCYDSS3H.js.map +0 -1
  327. package/dist/web/server/chunks/exports-DLCVjVJM.js.map +0 -1
  328. package/dist/web/server/chunks/hooks.server-CzdMWOsb.js.map +0 -1
  329. package/dist/web/server/chunks/internal-CwN2I5C2.js +0 -66
  330. package/dist/web/server/chunks/internal-CwN2I5C2.js.map +0 -1
  331. package/dist/web/server/chunks/message-queue-BhryIx7W.js.map +0 -1
  332. package/dist/web/server/chunks/popover-trigger-BQJRZ2Xv.js.map +0 -1
  333. package/dist/web/server/chunks/root-L_UzGTpb.js.map +0 -1
  334. package/dist/web/server/chunks/ws-handlers-B_p_71BD.js.map +0 -1
  335. package/tests/server/integration.test.ts +0 -319
  336. package/tests/server/sessions.test.ts +0 -114
  337. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.C6z7oh1Q.css +0 -1
  338. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.s6Kx4oz1.css +0 -1
  339. package/web/.svelte-kit/adapter-bun/chunks/client.js +0 -30
  340. package/web/.svelte-kit/adapter-bun/chunks/environment.js +0 -34
  341. package/web/.svelte-kit/adapter-bun/chunks/index.js +0 -58
  342. package/web/.svelte-kit/adapter-bun/chunks/shared.js +0 -1482
  343. package/web/.svelte-kit/output/client/_app/immutable/assets/0.0ZM-mOx6.css +0 -1
  344. package/web/.svelte-kit/output/client/_app/immutable/assets/2.s6Kx4oz1.css +0 -1
  345. package/web/.svelte-kit/output/client/_app/immutable/chunks/BIuG5Qqu.js +0 -1
  346. package/web/.svelte-kit/output/client/_app/immutable/chunks/Bc6u7h4b.js +0 -1
  347. package/web/.svelte-kit/output/client/_app/immutable/chunks/CGb10hB5.js +0 -1
  348. package/web/.svelte-kit/output/client/_app/immutable/chunks/Cd9FsMi7.js +0 -1
  349. package/web/.svelte-kit/output/client/_app/immutable/chunks/CzMlg5s0.js +0 -69
  350. package/web/.svelte-kit/output/client/_app/immutable/chunks/D7LHlC1M.js +0 -2
  351. package/web/.svelte-kit/output/client/_app/immutable/chunks/DnokqAh5.js +0 -3
  352. package/web/.svelte-kit/output/client/_app/immutable/entry/app.CSyNZ-P9.js +0 -2
  353. package/web/.svelte-kit/output/client/_app/immutable/entry/start.DDGAiG8M.js +0 -1
  354. package/web/.svelte-kit/output/client/_app/immutable/nodes/0.6OjSQ9Bf.js +0 -1
  355. package/web/.svelte-kit/output/client/_app/immutable/nodes/1.BxemSYR-.js +0 -1
  356. package/web/.svelte-kit/output/client/_app/immutable/nodes/2.9MvIu4lM.js +0 -1
  357. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.CFLgLVR9.js +0 -98
  358. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.C6z7oh1Q.css +0 -1
  359. package/web/.svelte-kit/output/server/_app/immutable/assets/_page.s6Kx4oz1.css +0 -1
  360. package/web/.svelte-kit/output/server/chunks/client.js +0 -30
  361. package/web/.svelte-kit/output/server/chunks/environment.js +0 -34
  362. package/web/.svelte-kit/output/server/chunks/index.js +0 -58
  363. package/web/.svelte-kit/output/server/chunks/shared.js +0 -1482
  364. package/web/src/lib/components/TerminalRenderer.svelte +0 -101
package/CLAUDE.md CHANGED
@@ -14,7 +14,7 @@ bun run dev:serve --host 0.0.0.0 # LAN access
14
14
 
15
15
  **HMR handles most changes automatically** - no restart needed for Svelte components, stores, routes, or API endpoints. Only `vite.config.ts` changes require a restart.
16
16
 
17
- After each change, check tmux pane `0:1.1` to verify HMR worked. If the server died, restart it. Do not start a new server if one is already running. If the pane reference is wrong, find the correct one and update this file.
17
+ After each change, check tmux pane `dev:1.1` to verify HMR worked. If the server died, restart it. Do not start a new server if one is already running. If the pane reference is wrong, find the correct one and update this file.
18
18
 
19
19
  ## Build & Development Commands
20
20
 
package/dist/app.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function App(): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ export declare function App(): React.JSX.Element;
2
3
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,GAAG,4CAyKlB"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAkBhE,wBAAgB,GAAG,sBAyKlB"}
@@ -0,0 +1,15 @@
1
+ export type CommandKind = "builtin" | "command" | "skill" | "agent";
2
+ export interface DiscoveredCommand {
3
+ /** Display name, e.g. "/linus", "/ak:p1", "@code-reviewer" */
4
+ name: string;
5
+ /** Text inserted into the prompt when selected */
6
+ insert: string;
7
+ kind: CommandKind;
8
+ /** "builtin" | "user" | "project" | "plugin:<id>" */
9
+ source: string;
10
+ description: string;
11
+ /** Absolute path of the defining file (absent for builtins) */
12
+ path?: string;
13
+ }
14
+ export declare function discoverCommands(cwd?: string): DiscoveredCommand[];
15
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/claude/commands.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0MD,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA8BlE"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Discover slash commands, skills, and subagents available to Claude Code.
3
+ *
4
+ * Sources scanned (mirrors Claude Code's own lookup):
5
+ * - built-in slash commands (static list)
6
+ * - ~/.claude/commands/**\/*.md (user commands)
7
+ * - ~/.claude/skills/<name>/SKILL.md (user skills)
8
+ * - ~/.claude/agents/*.md (user subagents)
9
+ * - <cwd>/.claude/{commands,skills,agents} (project-scoped)
10
+ * - enabled plugins from ~/.claude/plugins/installed_plugins.json
11
+ * → <installPath>/{commands,skills,agents}, namespaced as `plugin:name`
12
+ */
13
+ import { existsSync, readdirSync, readFileSync, statSync } from "fs";
14
+ import { homedir } from "os";
15
+ import { basename, dirname, join, relative } from "path";
16
+ const BUILTINS = [
17
+ ["/clear", "Clear conversation history"],
18
+ ["/compact", "Compact conversation (optional focus instructions)"],
19
+ ["/config", "Open settings"],
20
+ ["/cost", "Show token usage and cost"],
21
+ ["/context", "Show context window usage"],
22
+ ["/doctor", "Check Claude Code installation health"],
23
+ ["/exit", "Exit Claude Code"],
24
+ ["/fast", "Toggle fast mode"],
25
+ ["/help", "Show help and available commands"],
26
+ ["/init", "Initialize CLAUDE.md for this project"],
27
+ ["/login", "Sign in"],
28
+ ["/logout", "Sign out"],
29
+ ["/mcp", "Manage MCP servers"],
30
+ ["/memory", "Edit memory files"],
31
+ ["/model", "Switch model"],
32
+ ["/permissions", "View and manage permissions"],
33
+ ["/plan", "Enter plan mode"],
34
+ ["/rc", "Remote Control — pair this session with claude.ai"],
35
+ ["/resume", "Resume a previous session"],
36
+ ["/review", "Request a code review"],
37
+ ["/status", "Show session status"],
38
+ ["/terminal-setup", "Configure terminal key bindings"],
39
+ ["/vim", "Toggle vim mode"],
40
+ ["/agents", "Manage subagents"],
41
+ ["/plugin", "Manage plugins"],
42
+ ["/hooks", "Manage hooks"],
43
+ ["/add-dir", "Add a working directory"],
44
+ ["/bug", "Report a bug"],
45
+ ["/release-notes", "Show release notes"],
46
+ ["/rewind", "Rewind conversation / files to a checkpoint"],
47
+ ["/skills", "List available skills"],
48
+ ["/tasks", "Show background tasks"],
49
+ ["/statusline", "Configure status line"],
50
+ ["/workflows", "Show running workflows"],
51
+ ];
52
+ /** Parse a minimal YAML frontmatter block: returns name/description if present. */
53
+ function parseFrontmatter(content) {
54
+ if (!content.startsWith("---"))
55
+ return {};
56
+ const end = content.indexOf("\n---", 3);
57
+ if (end === -1)
58
+ return {};
59
+ const block = content.slice(3, end);
60
+ const out = {};
61
+ const lines = block.split("\n");
62
+ for (let i = 0; i < lines.length; i++) {
63
+ const m = lines[i].match(/^(name|description):\s*(.*)$/);
64
+ if (!m)
65
+ continue;
66
+ const key = m[1];
67
+ let val = m[2].trim();
68
+ if (val === "|" || val === ">" || val === "|-" || val === ">-") {
69
+ // Block scalar — gather indented continuation lines
70
+ const parts = [];
71
+ while (i + 1 < lines.length && /^\s+\S/.test(lines[i + 1])) {
72
+ parts.push(lines[++i].trim());
73
+ }
74
+ val = parts.join(" ");
75
+ }
76
+ else {
77
+ val = val.replace(/^(['"])(.*)\1$/, "$2");
78
+ }
79
+ out[key] = val;
80
+ }
81
+ return out;
82
+ }
83
+ function firstMeaningfulLine(content) {
84
+ const body = content.startsWith("---")
85
+ ? content.slice(content.indexOf("\n---", 3) + 4)
86
+ : content;
87
+ for (const raw of body.split("\n")) {
88
+ const line = raw.replace(/^#+\s*/, "").trim();
89
+ if (line)
90
+ return line.slice(0, 200);
91
+ }
92
+ return "";
93
+ }
94
+ function readMd(path) {
95
+ try {
96
+ const content = readFileSync(path, "utf-8");
97
+ const fm = parseFrontmatter(content);
98
+ return { name: fm.name, description: fm.description || firstMeaningfulLine(content) };
99
+ }
100
+ catch {
101
+ return { description: "" };
102
+ }
103
+ }
104
+ function walkMd(dir, out = []) {
105
+ if (!existsSync(dir))
106
+ return out;
107
+ let entries;
108
+ try {
109
+ entries = readdirSync(dir);
110
+ }
111
+ catch {
112
+ return out;
113
+ }
114
+ for (const e of entries) {
115
+ const p = join(dir, e);
116
+ let st;
117
+ try {
118
+ st = statSync(p);
119
+ }
120
+ catch {
121
+ continue;
122
+ }
123
+ if (st.isDirectory())
124
+ walkMd(p, out);
125
+ else if (e.endsWith(".md"))
126
+ out.push(p);
127
+ }
128
+ return out;
129
+ }
130
+ /** Commands dir: every .md file → command; subdirs namespace as `dir:name`. */
131
+ function scanCommands(dir, source, prefix = "") {
132
+ return walkMd(dir).map((file) => {
133
+ const rel = relative(dir, file).replace(/\.md$/, "");
134
+ const parts = rel.split(/[\\/]/);
135
+ const bare = parts.length > 1 ? `${parts.slice(0, -1).join(":")}:${parts.at(-1)}` : parts[0];
136
+ const name = prefix ? `${prefix}:${bare}` : bare;
137
+ const md = readMd(file);
138
+ return {
139
+ name: `/${name}`,
140
+ insert: `/${name}`,
141
+ kind: "command",
142
+ source,
143
+ description: md.description,
144
+ path: file,
145
+ };
146
+ });
147
+ }
148
+ /** Skills dir: every SKILL.md under it (any depth) → skill named by frontmatter or folder. */
149
+ function scanSkills(dir, source, prefix = "") {
150
+ return walkMd(dir)
151
+ .filter((f) => basename(f) === "SKILL.md")
152
+ .map((file) => {
153
+ const md = readMd(file);
154
+ const bare = md.name || basename(dirname(file));
155
+ const name = prefix ? `${prefix}:${bare}` : bare;
156
+ return {
157
+ name: `/${name}`,
158
+ insert: `/${name}`,
159
+ kind: "skill",
160
+ source,
161
+ description: md.description,
162
+ path: file,
163
+ };
164
+ });
165
+ }
166
+ /** Agents dir: every .md → subagent (invoked by name / @mention). */
167
+ function scanAgents(dir, source) {
168
+ return walkMd(dir).map((file) => {
169
+ const md = readMd(file);
170
+ const name = md.name || basename(file, ".md");
171
+ return {
172
+ name: `@${name}`,
173
+ insert: `@${name}`,
174
+ kind: "agent",
175
+ source,
176
+ description: md.description,
177
+ path: file,
178
+ };
179
+ });
180
+ }
181
+ function scanRoot(root, source, prefix = "") {
182
+ return [
183
+ ...scanCommands(join(root, "commands"), source, prefix),
184
+ ...scanSkills(join(root, "skills"), source, prefix),
185
+ ...scanAgents(join(root, "agents"), source),
186
+ ];
187
+ }
188
+ function enabledPlugins(claudeDir) {
189
+ const installedPath = join(claudeDir, "plugins", "installed_plugins.json");
190
+ if (!existsSync(installedPath))
191
+ return [];
192
+ let installed;
193
+ try {
194
+ installed = JSON.parse(readFileSync(installedPath, "utf-8"));
195
+ }
196
+ catch {
197
+ return [];
198
+ }
199
+ let enabled = {};
200
+ try {
201
+ const settings = JSON.parse(readFileSync(join(claudeDir, "settings.json"), "utf-8"));
202
+ enabled = settings.enabledPlugins || {};
203
+ }
204
+ catch {
205
+ // no settings → treat all installed as enabled
206
+ }
207
+ const out = [];
208
+ for (const [id, entries] of Object.entries(installed.plugins || {})) {
209
+ if (id in enabled && enabled[id] === false)
210
+ continue;
211
+ const entry = entries?.[0];
212
+ if (!entry?.installPath || !existsSync(entry.installPath))
213
+ continue;
214
+ out.push({ id, name: id.split("@")[0], installPath: entry.installPath });
215
+ }
216
+ return out;
217
+ }
218
+ export function discoverCommands(cwd) {
219
+ const claudeDir = join(homedir(), ".claude");
220
+ const result = BUILTINS.map(([name, description]) => ({
221
+ name,
222
+ insert: name,
223
+ kind: "builtin",
224
+ source: "builtin",
225
+ description,
226
+ }));
227
+ result.push(...scanRoot(claudeDir, "user"));
228
+ if (cwd && existsSync(join(cwd, ".claude"))) {
229
+ result.push(...scanRoot(join(cwd, ".claude"), "project"));
230
+ }
231
+ for (const plugin of enabledPlugins(claudeDir)) {
232
+ result.push(...scanRoot(plugin.installPath, `plugin:${plugin.name}`, plugin.name));
233
+ }
234
+ // Dedup by name, first wins (project > user? Claude Code prefers project; we scanned user first
235
+ // so flip precedence here by keeping the last project entry)
236
+ const byName = new Map();
237
+ for (const c of result) {
238
+ const existing = byName.get(c.name);
239
+ if (!existing || (existing.source === "user" && c.source === "project")) {
240
+ byName.set(c.name, c);
241
+ }
242
+ }
243
+ return [...byName.values()];
244
+ }
245
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/claude/commands.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
+ import React from "react";
1
2
  interface HeaderProps {
2
3
  claudeCount: number;
3
4
  tmuxCount: number;
4
5
  }
5
- export declare function Header({ claudeCount, tmuxCount }: HeaderProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function Header({ claudeCount, tmuxCount }: HeaderProps): React.JSX.Element;
6
7
  export {};
7
8
  //# sourceMappingURL=Header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,WAAW,2CAuB7D"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,WAAW,qBAuB7D"}
@@ -1,6 +1,7 @@
1
+ import React from "react";
1
2
  interface HelpDialogProps {
2
3
  width?: number;
3
4
  }
4
- export declare function HelpDialog({ width }: HelpDialogProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function HelpDialog({ width }: HelpDialogProps): React.JSX.Element;
5
6
  export {};
6
7
  //# sourceMappingURL=HelpDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HelpDialog.d.ts","sourceRoot":"","sources":["../../src/components/HelpDialog.tsx"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,2CA6BpD"}
1
+ {"version":3,"file":"HelpDialog.d.ts","sourceRoot":"","sources":["../../src/components/HelpDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,qBA6BpD"}
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import type { Session } from "../db/index.js";
2
3
  import type { TmuxSession } from "../tmux/detect.js";
3
4
  export type DisplayItem = {
@@ -12,6 +13,6 @@ interface SessionEntryProps {
12
13
  isSelected: boolean;
13
14
  width?: number;
14
15
  }
15
- export declare function SessionEntry({ item, isSelected, width }: SessionEntryProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function SessionEntry({ item, isSelected, width }: SessionEntryProps): React.JSX.Element;
16
17
  export {};
17
18
  //# sourceMappingURL=SessionEntry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionEntry.d.ts","sourceRoot":"","sources":["../../src/components/SessionEntry.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAuBrD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC;AAE/C,UAAU,iBAAiB;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkDD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CAM1E"}
1
+ {"version":3,"file":"SessionEntry.d.ts","sourceRoot":"","sources":["../../src/components/SessionEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAuBrD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC;AAE/C,UAAU,iBAAiB;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkDD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,iBAAiB,qBAM1E"}
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import type { Session } from "../db/index.js";
2
3
  import type { TmuxSession } from "../tmux/detect.js";
3
4
  import { type DisplayItem } from "./SessionEntry.js";
@@ -7,7 +8,7 @@ interface SessionListProps {
7
8
  selectedIndex: number;
8
9
  width?: number;
9
10
  }
10
- export declare function SessionList({ sessions, tmuxSessions, selectedIndex, width }: SessionListProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function SessionList({ sessions, tmuxSessions, selectedIndex, width }: SessionListProps): React.JSX.Element;
11
12
  export declare function getTotalItemCount(sessions: Session[], tmuxSessions: TmuxSession[]): number;
12
13
  export declare function getItemAtIndex(sessions: Session[], tmuxSessions: TmuxSession[], index: number): DisplayItem | null;
13
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../src/components/SessionList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,2CA0C7F;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAY1F;AAGD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,IAAI,CAoBpB"}
1
+ {"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../src/components/SessionList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,qBA0C7F;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAY1F;AAGD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,IAAI,CAoBpB"}
@@ -1,6 +1,7 @@
1
+ import React from "react";
1
2
  interface StatusBarProps {
2
3
  inTmux: boolean;
3
4
  }
4
- export declare function StatusBar({ inTmux }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function StatusBar({ inTmux }: StatusBarProps): React.JSX.Element;
5
6
  export {};
6
7
  //# sourceMappingURL=StatusBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,2CAiBnD"}
1
+ {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,qBAiBnD"}
@@ -73,7 +73,7 @@ export declare function clearChromeActive(id: string): boolean;
73
73
  */
74
74
  export declare function removeScreenshot(id: string, screenshotPath: string): boolean;
75
75
  /**
76
- * Get all sessions, sorted by priority (permission > waiting > idle > busy).
76
+ * Get all sessions, sorted by ID for stable ordering.
77
77
  */
78
78
  export declare function getAllSessions(): Session[];
79
79
  /**
@@ -173,7 +173,7 @@ export function removeScreenshot(id, screenshotPath) {
173
173
  return true;
174
174
  }
175
175
  /**
176
- * Get all sessions, sorted by priority (permission > waiting > idle > busy).
176
+ * Get all sessions, sorted by ID for stable ordering.
177
177
  */
178
178
  export function getAllSessions() {
179
179
  ensureSessionsDir();
@@ -35,5 +35,12 @@ export declare function getQueueCounts(): Map<string, number>;
35
35
  * covers the case where a message is enqueued while already idle.
36
36
  */
37
37
  export declare function drainQueues(sessions: SessionLike[]): void;
38
+ /**
39
+ * Server-owned drain loop. Runs while any queue is non-empty, independent of
40
+ * whether a dashboard client is connected (the WS refresh loop only runs with
41
+ * clients, which previously left queues stuck once the phone closed the app).
42
+ * State comes straight from the session JSON files written by hooks.
43
+ */
44
+ export declare function ensureDrainLoop(): void;
38
45
  export {};
39
46
  //# sourceMappingURL=message-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACd;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAavG;AA+BD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAOrE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAIjE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAM9E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAQhG;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAqCzD"}
1
+ {"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACd;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAavG;AAyCD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAQrE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAIjE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAM9E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAQhG;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAiDzD;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAgBtC"}
@@ -3,6 +3,7 @@
3
3
  * Messages are queued per tmux target and auto-sent when the session goes idle.
4
4
  */
5
5
  import { execFileSync, execSync } from 'child_process';
6
+ import { getAllSessions } from '../db/index.js';
6
7
  // ============================================================================
7
8
  // Shared tmux text injection helper
8
9
  // ============================================================================
@@ -30,12 +31,19 @@ function getGlobalState() {
30
31
  if (!g[GLOBAL_KEY]) {
31
32
  g[GLOBAL_KEY] = {
32
33
  queues: new Map(),
33
- pendingDrain: new Map()
34
+ pendingDrain: new Map(),
35
+ recentlySent: new Map(),
36
+ drainTimer: null
34
37
  };
35
38
  }
36
- return g[GLOBAL_KEY];
39
+ const state = g[GLOBAL_KEY];
40
+ // Backfill fields added after an older module instance created the state (dev HMR)
41
+ state.recentlySent ??= new Map();
42
+ state.drainTimer ??= null;
43
+ return state;
37
44
  }
38
- const { queues, pendingDrain } = getGlobalState();
45
+ const globalState = getGlobalState();
46
+ const { queues, pendingDrain, recentlySent } = globalState;
39
47
  // ============================================================================
40
48
  // Queue operations
41
49
  // ============================================================================
@@ -45,6 +53,7 @@ export function enqueue(target, text) {
45
53
  }
46
54
  const queue = queues.get(target);
47
55
  queue.push({ text, queuedAt: Date.now() });
56
+ ensureDrainLoop();
48
57
  return queue;
49
58
  }
50
59
  export function dequeue(target) {
@@ -114,15 +123,26 @@ export function drainQueues(sessions) {
114
123
  continue;
115
124
  }
116
125
  if (session.state !== 'idle') {
126
+ // Session picked up work (hook flipped state) — clear send guard
117
127
  pendingDrain.delete(target);
128
+ recentlySent.delete(target);
118
129
  continue;
119
130
  }
131
+ // After an auto-send, wait for the session to leave idle (UserPromptSubmit
132
+ // hook) before sending the next message, so two queued messages don't get
133
+ // pasted into the same prompt. Falls back after 10s in case the hook never fires.
134
+ const sentAt = recentlySent.get(target);
135
+ if (sentAt !== undefined) {
136
+ if (now - sentAt < RESEND_FALLBACK_MS)
137
+ continue;
138
+ recentlySent.delete(target);
139
+ }
120
140
  const pendingTime = pendingDrain.get(target);
121
141
  if (pendingTime === undefined) {
122
142
  pendingDrain.set(target, now);
123
143
  continue;
124
144
  }
125
- if (now - pendingTime < 1000)
145
+ if (now - pendingTime < IDLE_GRACE_MS)
126
146
  continue;
127
147
  pendingDrain.delete(target);
128
148
  const message = dequeue(target);
@@ -130,6 +150,7 @@ export function drainQueues(sessions) {
130
150
  continue;
131
151
  try {
132
152
  sendTextToPane(target, message.text);
153
+ recentlySent.set(target, now);
133
154
  console.log(`[queue] Auto-sent queued message to ${target}`);
134
155
  }
135
156
  catch (err) {
@@ -140,4 +161,36 @@ export function drainQueues(sessions) {
140
161
  }
141
162
  }
142
163
  }
164
+ const IDLE_GRACE_MS = 1000;
165
+ const RESEND_FALLBACK_MS = 10_000;
166
+ const DRAIN_INTERVAL_MS = 500;
167
+ /**
168
+ * Server-owned drain loop. Runs while any queue is non-empty, independent of
169
+ * whether a dashboard client is connected (the WS refresh loop only runs with
170
+ * clients, which previously left queues stuck once the phone closed the app).
171
+ * State comes straight from the session JSON files written by hooks.
172
+ */
173
+ export function ensureDrainLoop() {
174
+ if (globalState.drainTimer)
175
+ return;
176
+ globalState.drainTimer = setInterval(() => {
177
+ if (getQueueCounts().size === 0) {
178
+ if (globalState.drainTimer)
179
+ clearInterval(globalState.drainTimer);
180
+ globalState.drainTimer = null;
181
+ return;
182
+ }
183
+ try {
184
+ drainQueues(getAllSessions());
185
+ }
186
+ catch (err) {
187
+ console.error('[queue] drain loop error:', err);
188
+ }
189
+ }, DRAIN_INTERVAL_MS);
190
+ // Don't keep the process alive just for this timer
191
+ globalState.drainTimer.unref?.();
192
+ }
193
+ // Resume draining if queues survived a module reload (dev HMR keeps globalThis)
194
+ if (getQueueCounts().size > 0)
195
+ ensureDrainLoop();
143
196
  //# sourceMappingURL=message-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAgBvD,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY,EAAE,OAAkC,EAAE;IAChG,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,wCAAwC,EAAE;QAClD,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACnC,CAAC,CAAC;IACH,YAAY,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;QAC9E,KAAK,EAAE,QAAQ;KACf,CAAC,CAAC;IACH,YAAY,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvF,IAAI,WAAW,EAAE,CAAC;QACjB,YAAY,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;AACF,CAAC;AAYD,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD,SAAS,cAAc;IACtB,MAAM,CAAC,GAAG,UAAqC,CAAC;IAChD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QACpB,CAAC,CAAC,UAAU,CAAC,GAAG;YACf,MAAM,EAAE,IAAI,GAAG,EAA2B;YAC1C,YAAY,EAAE,IAAI,GAAG,EAAkB;SACvC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,UAAU,CAAqB,CAAC;AAC1C,CAAC;AAED,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;AAElD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,IAAY;IACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAa;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACrE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,KAAK,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAe;IAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,QAAuB;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,SAAS;QACV,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,SAAS;QACV,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9B,SAAS;QACV,CAAC;QACD,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI;YAAE,SAAS;QAEvC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACJ,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,4CAA4C,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../src/server/message-queue.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,34 @@ export interface WsClient {
28
28
  getBufferedAmount?: () => number;
29
29
  }
30
30
  export type { SessionsWsMessage, SystemStatsMessage } from '../types/ws-messages.js';
31
- export interface TerminalMessage {
32
- type: 'output';
33
- output: string;
31
+ /** Visible pane changed (or initial). `historySize` is the absolute index right after the last history line. */
32
+ export interface ScreenMessage {
33
+ type: 'screen';
34
+ lines: string[];
35
+ historySize: number;
36
+ alt: boolean;
37
+ cols: number;
38
+ rows: number;
39
+ timestamp: number;
40
+ }
41
+ /** A contiguous block of history lines [start, start+lines.length). */
42
+ export interface HistoryMessage {
43
+ type: 'history';
44
+ start: number;
45
+ lines: string[];
46
+ historySize: number;
47
+ timestamp: number;
48
+ }
49
+ /** History became invalid (pane reflowed on resize, cleared, alt-screen toggled). Client drops history and re-requests. */
50
+ export interface ResetMessage {
51
+ type: 'reset';
52
+ historySize: number;
53
+ alt: boolean;
54
+ cols: number;
55
+ rows: number;
34
56
  timestamp: number;
35
57
  }
58
+ export type TerminalMessage = ScreenMessage | HistoryMessage | ResetMessage;
36
59
  export interface ResizeMessage {
37
60
  type: 'resize';
38
61
  cols: number;
@@ -88,8 +111,7 @@ export declare class SessionsWsManager {
88
111
  export declare class TerminalWsManager {
89
112
  private clients;
90
113
  private pollTimers;
91
- private lastOutput;
92
- private historyDepths;
114
+ private states;
93
115
  private config;
94
116
  private totalClients;
95
117
  private droppedClients;
@@ -104,7 +126,12 @@ export declare class TerminalWsManager {
104
126
  * Add a client for a target. Returns false if max clients reached.
105
127
  */
106
128
  addClient(client: WsClient, target: string): boolean;
107
- setHistoryDepth(target: string, lines: number): void;
129
+ /**
130
+ * Serve a client's request for `count` history lines before absolute index `before`.
131
+ * Replies only to the requesting client (each viewer scrolls independently).
132
+ */
133
+ requestHistory(client: WsClient, target: string, before: number, count: number): void;
134
+ private sendHistoryTail;
108
135
  removeClient(client: WsClient, target?: string): void;
109
136
  private startPolling;
110
137
  private stopPolling;
@@ -113,7 +140,7 @@ export declare class TerminalWsManager {
113
140
  }
114
141
  export interface WsMessageHandlers {
115
142
  resize?: (cols: number, rows: number) => void;
116
- setHistory?: (lines: number) => void;
143
+ historyRequest?: (before: number, count: number) => void;
117
144
  }
118
145
  export declare function handleWsMessage(msgStr: string, handlers?: WsMessageHandlers): 'pong' | null;
119
146
  export type WsPathResult = {