claude-mux 0.7.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 (636) hide show
  1. package/.beads/README.md +81 -0
  2. package/.beads/config.yaml +62 -0
  3. package/.beads/interactions.jsonl +0 -0
  4. package/.beads/issues.jsonl +5 -0
  5. package/.beads/metadata.json +4 -0
  6. package/.eslintrc.json +25 -0
  7. package/.gitattributes +3 -0
  8. package/.prettierrc +7 -0
  9. package/CLAUDE.md +123 -0
  10. package/LICENSE +21 -0
  11. package/PLAN-beads-integration.md +250 -0
  12. package/README.md +366 -0
  13. package/dist/app.d.ts +2 -0
  14. package/dist/app.d.ts.map +1 -0
  15. package/dist/app.js +147 -0
  16. package/dist/app.js.map +1 -0
  17. package/dist/cli.d.ts +3 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +65 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/index.d.ts +5 -0
  22. package/dist/commands/index.d.ts.map +1 -0
  23. package/dist/commands/index.js +5 -0
  24. package/dist/commands/index.js.map +1 -0
  25. package/dist/commands/serve.d.ts +8 -0
  26. package/dist/commands/serve.d.ts.map +1 -0
  27. package/dist/commands/serve.js +59 -0
  28. package/dist/commands/serve.js.map +1 -0
  29. package/dist/commands/setup.d.ts +4 -0
  30. package/dist/commands/setup.d.ts.map +1 -0
  31. package/dist/commands/setup.js +12 -0
  32. package/dist/commands/setup.js.map +1 -0
  33. package/dist/commands/tui.d.ts +9 -0
  34. package/dist/commands/tui.d.ts.map +1 -0
  35. package/dist/commands/tui.js +234 -0
  36. package/dist/commands/tui.js.map +1 -0
  37. package/dist/commands/uninstall.d.ts +4 -0
  38. package/dist/commands/uninstall.d.ts.map +1 -0
  39. package/dist/commands/uninstall.js +12 -0
  40. package/dist/commands/uninstall.js.map +1 -0
  41. package/dist/components/Header.d.ts +7 -0
  42. package/dist/components/Header.d.ts.map +1 -0
  43. package/dist/components/Header.js +14 -0
  44. package/dist/components/Header.js.map +1 -0
  45. package/dist/components/HelpDialog.d.ts +6 -0
  46. package/dist/components/HelpDialog.d.ts.map +1 -0
  47. package/dist/components/HelpDialog.js +14 -0
  48. package/dist/components/HelpDialog.js.map +1 -0
  49. package/dist/components/SessionEntry.d.ts +17 -0
  50. package/dist/components/SessionEntry.d.ts.map +1 -0
  51. package/dist/components/SessionEntry.js +102 -0
  52. package/dist/components/SessionEntry.js.map +1 -0
  53. package/dist/components/SessionList.d.ts +14 -0
  54. package/dist/components/SessionList.d.ts.map +1 -0
  55. package/dist/components/SessionList.js +57 -0
  56. package/dist/components/SessionList.js.map +1 -0
  57. package/dist/components/StatusBar.d.ts +6 -0
  58. package/dist/components/StatusBar.d.ts.map +1 -0
  59. package/dist/components/StatusBar.js +7 -0
  60. package/dist/components/StatusBar.js.map +1 -0
  61. package/dist/components/index.d.ts +6 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/dist/components/index.js +6 -0
  64. package/dist/components/index.js.map +1 -0
  65. package/dist/db/index.d.ts +2 -0
  66. package/dist/db/index.d.ts.map +1 -0
  67. package/dist/db/index.js +3 -0
  68. package/dist/db/index.js.map +1 -0
  69. package/dist/db/schema.d.ts +4 -0
  70. package/dist/db/schema.d.ts.map +1 -0
  71. package/dist/db/schema.js +23 -0
  72. package/dist/db/schema.js.map +1 -0
  73. package/dist/db/sessions-json.d.ts +85 -0
  74. package/dist/db/sessions-json.d.ts.map +1 -0
  75. package/dist/db/sessions-json.js +242 -0
  76. package/dist/db/sessions-json.js.map +1 -0
  77. package/dist/db/sessions.d.ts +38 -0
  78. package/dist/db/sessions.d.ts.map +1 -0
  79. package/dist/db/sessions.js +87 -0
  80. package/dist/db/sessions.js.map +1 -0
  81. package/dist/hooks/claude-mux-hook.d.ts +15 -0
  82. package/dist/hooks/claude-mux-hook.d.ts.map +1 -0
  83. package/dist/hooks/claude-mux-hook.js +396 -0
  84. package/dist/hooks/claude-mux-hook.js.map +1 -0
  85. package/dist/hooks/claude-watch-hook.d.ts +15 -0
  86. package/dist/hooks/claude-watch-hook.d.ts.map +1 -0
  87. package/dist/hooks/claude-watch-hook.js +396 -0
  88. package/dist/hooks/claude-watch-hook.js.map +1 -0
  89. package/dist/server/custom-server.d.ts +13 -0
  90. package/dist/server/custom-server.d.ts.map +1 -0
  91. package/dist/server/custom-server.js +63 -0
  92. package/dist/server/custom-server.js.map +1 -0
  93. package/dist/server/index.d.ts +9 -0
  94. package/dist/server/index.d.ts.map +1 -0
  95. package/dist/server/index.js +1143 -0
  96. package/dist/server/index.js.map +1 -0
  97. package/dist/server/middleware/cors.d.ts +2 -0
  98. package/dist/server/middleware/cors.d.ts.map +1 -0
  99. package/dist/server/middleware/cors.js +11 -0
  100. package/dist/server/middleware/cors.js.map +1 -0
  101. package/dist/server/routes/sessions.d.ts +3 -0
  102. package/dist/server/routes/sessions.d.ts.map +1 -0
  103. package/dist/server/routes/sessions.js +78 -0
  104. package/dist/server/routes/sessions.js.map +1 -0
  105. package/dist/server/routes/stream.d.ts +3 -0
  106. package/dist/server/routes/stream.d.ts.map +1 -0
  107. package/dist/server/routes/stream.js +45 -0
  108. package/dist/server/routes/stream.js.map +1 -0
  109. package/dist/server/types.d.ts +28 -0
  110. package/dist/server/types.d.ts.map +1 -0
  111. package/dist/server/types.js +2 -0
  112. package/dist/server/types.js.map +1 -0
  113. package/dist/server/watcher.d.ts +22 -0
  114. package/dist/server/watcher.d.ts.map +1 -0
  115. package/dist/server/watcher.js +119 -0
  116. package/dist/server/watcher.js.map +1 -0
  117. package/dist/server/websocket.d.ts +51 -0
  118. package/dist/server/websocket.d.ts.map +1 -0
  119. package/dist/server/websocket.js +156 -0
  120. package/dist/server/websocket.js.map +1 -0
  121. package/dist/server/ws-handlers.d.ts +174 -0
  122. package/dist/server/ws-handlers.d.ts.map +1 -0
  123. package/dist/server/ws-handlers.js +695 -0
  124. package/dist/server/ws-handlers.js.map +1 -0
  125. package/dist/setup/hooks.d.ts +44 -0
  126. package/dist/setup/hooks.d.ts.map +1 -0
  127. package/dist/setup/hooks.js +267 -0
  128. package/dist/setup/hooks.js.map +1 -0
  129. package/dist/setup/index.d.ts +3 -0
  130. package/dist/setup/index.d.ts.map +1 -0
  131. package/dist/setup/index.js +3 -0
  132. package/dist/setup/index.js.map +1 -0
  133. package/dist/setup/wizard.d.ts +4 -0
  134. package/dist/setup/wizard.d.ts.map +1 -0
  135. package/dist/setup/wizard.js +72 -0
  136. package/dist/setup/wizard.js.map +1 -0
  137. package/dist/tmux/detect.d.ts +25 -0
  138. package/dist/tmux/detect.d.ts.map +1 -0
  139. package/dist/tmux/detect.js +71 -0
  140. package/dist/tmux/detect.js.map +1 -0
  141. package/dist/tmux/navigate.d.ts +13 -0
  142. package/dist/tmux/navigate.d.ts.map +1 -0
  143. package/dist/tmux/navigate.js +41 -0
  144. package/dist/tmux/navigate.js.map +1 -0
  145. package/dist/tmux/pane.d.ts +57 -0
  146. package/dist/tmux/pane.d.ts.map +1 -0
  147. package/dist/tmux/pane.js +156 -0
  148. package/dist/tmux/pane.js.map +1 -0
  149. package/dist/tmux/resize.d.ts +10 -0
  150. package/dist/tmux/resize.d.ts.map +1 -0
  151. package/dist/tmux/resize.js +25 -0
  152. package/dist/tmux/resize.js.map +1 -0
  153. package/dist/utils/paths.d.ts +7 -0
  154. package/dist/utils/paths.d.ts.map +1 -0
  155. package/dist/utils/paths.js +9 -0
  156. package/dist/utils/paths.js.map +1 -0
  157. package/dist/utils/pid.d.ts +5 -0
  158. package/dist/utils/pid.d.ts.map +1 -0
  159. package/dist/utils/pid.js +14 -0
  160. package/dist/utils/pid.js.map +1 -0
  161. package/dist/utils/version.d.ts +6 -0
  162. package/dist/utils/version.d.ts.map +1 -0
  163. package/dist/utils/version.js +6 -0
  164. package/dist/utils/version.js.map +1 -0
  165. package/dist/web/client/_app/immutable/assets/0.WptSHSUl.css +1 -0
  166. package/dist/web/client/_app/immutable/assets/2.s6Kx4oz1.css +1 -0
  167. package/dist/web/client/_app/immutable/assets/4.DoNWy7tW.css +1 -0
  168. package/dist/web/client/_app/immutable/assets/AllSessionsPanel.CGHY3HLy.css +1 -0
  169. package/dist/web/client/_app/immutable/chunks/-3mUPuLP.js +1 -0
  170. package/dist/web/client/_app/immutable/chunks/B5U4_V3d.js +1 -0
  171. package/dist/web/client/_app/immutable/chunks/BHwiZXRv.js +1 -0
  172. package/dist/web/client/_app/immutable/chunks/C9P-coqM.js +1 -0
  173. package/dist/web/client/_app/immutable/chunks/Cegv0r8x.js +1 -0
  174. package/dist/web/client/_app/immutable/chunks/DU91Ml7U.js +3 -0
  175. package/dist/web/client/_app/immutable/chunks/DmdO6ygw.js +1 -0
  176. package/dist/web/client/_app/immutable/chunks/HKNo9LID.js +5 -0
  177. package/dist/web/client/_app/immutable/chunks/U4ip-C0d.js +2 -0
  178. package/dist/web/client/_app/immutable/chunks/cgUjKIhX.js +2 -0
  179. package/dist/web/client/_app/immutable/entry/app.CGIBnoln.js +2 -0
  180. package/dist/web/client/_app/immutable/entry/start.CJk8zB1j.js +1 -0
  181. package/dist/web/client/_app/immutable/nodes/0.CqlJ9a31.js +1 -0
  182. package/dist/web/client/_app/immutable/nodes/1.BQUZh2-w.js +1 -0
  183. package/dist/web/client/_app/immutable/nodes/2.CCV1YdgF.js +1 -0
  184. package/dist/web/client/_app/immutable/nodes/3.D9tDCdq8.js +1 -0
  185. package/dist/web/client/_app/immutable/nodes/4.BqPyNkFA.js +6 -0
  186. package/dist/web/client/_app/version.json +1 -0
  187. package/dist/web/client/robots.txt +3 -0
  188. package/dist/web/env.js +32 -0
  189. package/dist/web/handler.js +744 -0
  190. package/dist/web/index.js +49 -0
  191. package/dist/web/server/chunks/0-BHWsmCJv.js +23 -0
  192. package/dist/web/server/chunks/0-BHWsmCJv.js.map +1 -0
  193. package/dist/web/server/chunks/1-YRx6A8Tm.js +17 -0
  194. package/dist/web/server/chunks/1-YRx6A8Tm.js.map +1 -0
  195. package/dist/web/server/chunks/2-eC6JuGAo.js +22 -0
  196. package/dist/web/server/chunks/2-eC6JuGAo.js.map +1 -0
  197. package/dist/web/server/chunks/3-Bk-wV20p.js +32 -0
  198. package/dist/web/server/chunks/3-Bk-wV20p.js.map +1 -0
  199. package/dist/web/server/chunks/4-nteBgDrW.js +21 -0
  200. package/dist/web/server/chunks/4-nteBgDrW.js.map +1 -0
  201. package/dist/web/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang-Bt4B0-oi.js +35 -0
  202. package/dist/web/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang-Bt4B0-oi.js.map +1 -0
  203. package/dist/web/server/chunks/_layout.svelte-BIF9eZCY.js +453 -0
  204. package/dist/web/server/chunks/_layout.svelte-BIF9eZCY.js.map +1 -0
  205. package/dist/web/server/chunks/_page.svelte-Be6iabRn.js +34 -0
  206. package/dist/web/server/chunks/_page.svelte-Be6iabRn.js.map +1 -0
  207. package/dist/web/server/chunks/_page.svelte-C_fGJVSE.js +576 -0
  208. package/dist/web/server/chunks/_page.svelte-C_fGJVSE.js.map +1 -0
  209. package/dist/web/server/chunks/_page.svelte-CnfJk6cu.js +2722 -0
  210. package/dist/web/server/chunks/_page.svelte-CnfJk6cu.js.map +1 -0
  211. package/dist/web/server/chunks/_server.ts-3WAmKvn2.js +34 -0
  212. package/dist/web/server/chunks/_server.ts-3WAmKvn2.js.map +1 -0
  213. package/dist/web/server/chunks/_server.ts-BAWJCSFb.js +29 -0
  214. package/dist/web/server/chunks/_server.ts-BAWJCSFb.js.map +1 -0
  215. package/dist/web/server/chunks/_server.ts-BPpMOZCm.js +24 -0
  216. package/dist/web/server/chunks/_server.ts-BPpMOZCm.js.map +1 -0
  217. package/dist/web/server/chunks/_server.ts-BUKgRb6U.js +13 -0
  218. package/dist/web/server/chunks/_server.ts-BUKgRb6U.js.map +1 -0
  219. package/dist/web/server/chunks/_server.ts-BVHUS8fm.js +41 -0
  220. package/dist/web/server/chunks/_server.ts-BVHUS8fm.js.map +1 -0
  221. package/dist/web/server/chunks/_server.ts-BrF3od0O.js +45 -0
  222. package/dist/web/server/chunks/_server.ts-BrF3od0O.js.map +1 -0
  223. package/dist/web/server/chunks/_server.ts-C4oPmOJR.js +38 -0
  224. package/dist/web/server/chunks/_server.ts-C4oPmOJR.js.map +1 -0
  225. package/dist/web/server/chunks/_server.ts-CDAUUmG_.js +21 -0
  226. package/dist/web/server/chunks/_server.ts-CDAUUmG_.js.map +1 -0
  227. package/dist/web/server/chunks/_server.ts-CR0uWvpz.js +24 -0
  228. package/dist/web/server/chunks/_server.ts-CR0uWvpz.js.map +1 -0
  229. package/dist/web/server/chunks/_server.ts-CSqdCNGi.js +21 -0
  230. package/dist/web/server/chunks/_server.ts-CSqdCNGi.js.map +1 -0
  231. package/dist/web/server/chunks/_server.ts-DI9fzUo9.js +52 -0
  232. package/dist/web/server/chunks/_server.ts-DI9fzUo9.js.map +1 -0
  233. package/dist/web/server/chunks/_server.ts-DNjJTClI.js +46 -0
  234. package/dist/web/server/chunks/_server.ts-DNjJTClI.js.map +1 -0
  235. package/dist/web/server/chunks/_server.ts-DdbOAkOj.js +22 -0
  236. package/dist/web/server/chunks/_server.ts-DdbOAkOj.js.map +1 -0
  237. package/dist/web/server/chunks/_server.ts-Df2isGQc.js +41 -0
  238. package/dist/web/server/chunks/_server.ts-Df2isGQc.js.map +1 -0
  239. package/dist/web/server/chunks/_server.ts-Vpw25_-3.js +12 -0
  240. package/dist/web/server/chunks/_server.ts-Vpw25_-3.js.map +1 -0
  241. package/dist/web/server/chunks/_server.ts-WldRpSRi.js +26 -0
  242. package/dist/web/server/chunks/_server.ts-WldRpSRi.js.map +1 -0
  243. package/dist/web/server/chunks/alert-dialog-description-DDA6u-nS.js +2890 -0
  244. package/dist/web/server/chunks/alert-dialog-description-DDA6u-nS.js.map +1 -0
  245. package/dist/web/server/chunks/auth-DrUf-v4J.js +51 -0
  246. package/dist/web/server/chunks/auth-DrUf-v4J.js.map +1 -0
  247. package/dist/web/server/chunks/button-D6xS9rHt.js +2335 -0
  248. package/dist/web/server/chunks/button-D6xS9rHt.js.map +1 -0
  249. package/dist/web/server/chunks/chunk-EKzHsMy_.js +42 -0
  250. package/dist/web/server/chunks/chunks-DmdqVYC7.js +58 -0
  251. package/dist/web/server/chunks/chunks-DmdqVYC7.js.map +1 -0
  252. package/dist/web/server/chunks/client-CUrSQijh.js +18 -0
  253. package/dist/web/server/chunks/client-CUrSQijh.js.map +1 -0
  254. package/dist/web/server/chunks/clsx-FzI4_gi0.js +332 -0
  255. package/dist/web/server/chunks/clsx-FzI4_gi0.js.map +1 -0
  256. package/dist/web/server/chunks/error.svelte-D-c-9pTE.js +27 -0
  257. package/dist/web/server/chunks/error.svelte-D-c-9pTE.js.map +1 -0
  258. package/dist/web/server/chunks/events-BDBlYddw.js +89 -0
  259. package/dist/web/server/chunks/events-BDBlYddw.js.map +1 -0
  260. package/dist/web/server/chunks/exports-CCurQ-Tl.js +131 -0
  261. package/dist/web/server/chunks/exports-CCurQ-Tl.js.map +1 -0
  262. package/dist/web/server/chunks/hooks.server-BK1bopsh.js +86 -0
  263. package/dist/web/server/chunks/hooks.server-BK1bopsh.js.map +1 -0
  264. package/dist/web/server/chunks/index2-BQnysSj-.js +2588 -0
  265. package/dist/web/server/chunks/index2-BQnysSj-.js.map +1 -0
  266. package/dist/web/server/chunks/internal-DLENj6YI.js +61 -0
  267. package/dist/web/server/chunks/internal-DLENj6YI.js.map +1 -0
  268. package/dist/web/server/chunks/pane-Dg3pKvsm.js +94 -0
  269. package/dist/web/server/chunks/pane-Dg3pKvsm.js.map +1 -0
  270. package/dist/web/server/chunks/sessions-json-DgfkCLO7.js +107 -0
  271. package/dist/web/server/chunks/sessions-json-DgfkCLO7.js.map +1 -0
  272. package/dist/web/server/chunks/sessions.svelte-Ds82MvkB.js +178 -0
  273. package/dist/web/server/chunks/sessions.svelte-Ds82MvkB.js.map +1 -0
  274. package/dist/web/server/chunks/state.svelte-xeAZvWZ6.js +7 -0
  275. package/dist/web/server/chunks/state.svelte-xeAZvWZ6.js.map +1 -0
  276. package/dist/web/server/chunks/ws-handlers-B4r5eSP2.js +733 -0
  277. package/dist/web/server/chunks/ws-handlers-B4r5eSP2.js.map +1 -0
  278. package/dist/web/server/index.js +4907 -0
  279. package/dist/web/server/index.js.map +1 -0
  280. package/dist/web/server/manifest.js +233 -0
  281. package/dist/web/server/manifest.js.map +1 -0
  282. package/docs/images/desktop-dashboard.png +0 -0
  283. package/docs/images/desktop-session.png +0 -0
  284. package/docs/images/mobile-dashboard.png +0 -0
  285. package/docs/images/mobile-session.png +0 -0
  286. package/docs/release-checklist.md +228 -0
  287. package/docs/removing-hooks.md +135 -0
  288. package/docs/state-transitions.md +109 -0
  289. package/package.json +71 -0
  290. package/src/app.tsx +188 -0
  291. package/src/cli.ts +83 -0
  292. package/src/commands/index.ts +4 -0
  293. package/src/commands/serve.ts +75 -0
  294. package/src/commands/setup.ts +13 -0
  295. package/src/commands/tui.ts +255 -0
  296. package/src/commands/uninstall.ts +13 -0
  297. package/src/components/Header.tsx +32 -0
  298. package/src/components/HelpDialog.tsx +45 -0
  299. package/src/components/SessionEntry.tsx +202 -0
  300. package/src/components/SessionList.tsx +98 -0
  301. package/src/components/StatusBar.tsx +26 -0
  302. package/src/components/index.ts +5 -0
  303. package/src/db/index.ts +20 -0
  304. package/src/db/sessions-json.ts +314 -0
  305. package/src/hooks/claude-mux-hook.ts +498 -0
  306. package/src/server/watcher.ts +128 -0
  307. package/src/server/ws-handlers.ts +922 -0
  308. package/src/setup/hooks.ts +333 -0
  309. package/src/setup/index.ts +2 -0
  310. package/src/setup/wizard.ts +81 -0
  311. package/src/tmux/detect.ts +87 -0
  312. package/src/tmux/navigate.ts +42 -0
  313. package/src/tmux/pane.ts +167 -0
  314. package/src/tmux/resize.ts +28 -0
  315. package/src/utils/paths.ts +11 -0
  316. package/src/utils/pid.ts +12 -0
  317. package/src/utils/version.ts +5 -0
  318. package/tests/components/Header.test.tsx +42 -0
  319. package/tests/components/SessionEntry-extended.test.tsx +165 -0
  320. package/tests/components/SessionEntry.test.tsx +138 -0
  321. package/tests/components/SessionList.test.tsx +110 -0
  322. package/tests/components/StatusBar.test.tsx +31 -0
  323. package/tests/db/index.test.ts +78 -0
  324. package/tests/db/sessions.test.ts +230 -0
  325. package/tests/server/integration.test.ts +319 -0
  326. package/tests/server/sessions.test.ts +114 -0
  327. package/tests/setup/hooks-integration.test.ts +148 -0
  328. package/tests/setup/hooks.test.ts +123 -0
  329. package/tests/tmux/detect.test.ts +54 -0
  330. package/tests/tmux/navigate.test.ts +30 -0
  331. package/tests/utils/pid.test.ts +17 -0
  332. package/tsconfig.cli.json +9 -0
  333. package/tsconfig.json +22 -0
  334. package/vitest.config.ts +29 -0
  335. package/web/.svelte-kit/adapter-bun/.vite/manifest.json +408 -0
  336. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +1 -0
  337. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.WptSHSUl.css +1 -0
  338. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DldLgTc-.css +1 -0
  339. package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DoNWy7tW.css +1 -0
  340. package/web/.svelte-kit/adapter-bun/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +49 -0
  341. package/web/.svelte-kit/adapter-bun/chunks/alert-dialog-description.js +2670 -0
  342. package/web/.svelte-kit/adapter-bun/chunks/auth.js +59 -0
  343. package/web/.svelte-kit/adapter-bun/chunks/button.js +82 -0
  344. package/web/.svelte-kit/adapter-bun/chunks/client.js +29 -0
  345. package/web/.svelte-kit/adapter-bun/chunks/context.js +133 -0
  346. package/web/.svelte-kit/adapter-bun/chunks/environment.js +34 -0
  347. package/web/.svelte-kit/adapter-bun/chunks/events.js +121 -0
  348. package/web/.svelte-kit/adapter-bun/chunks/exports.js +174 -0
  349. package/web/.svelte-kit/adapter-bun/chunks/false.js +4 -0
  350. package/web/.svelte-kit/adapter-bun/chunks/index.js +59 -0
  351. package/web/.svelte-kit/adapter-bun/chunks/index2.js +2828 -0
  352. package/web/.svelte-kit/adapter-bun/chunks/internal.js +920 -0
  353. package/web/.svelte-kit/adapter-bun/chunks/pane.js +82 -0
  354. package/web/.svelte-kit/adapter-bun/chunks/sessions-json.js +124 -0
  355. package/web/.svelte-kit/adapter-bun/chunks/sessions.svelte.js +229 -0
  356. package/web/.svelte-kit/adapter-bun/chunks/shared.js +542 -0
  357. package/web/.svelte-kit/adapter-bun/chunks/state.svelte.js +16 -0
  358. package/web/.svelte-kit/adapter-bun/chunks/utils.js +43 -0
  359. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +782 -0
  360. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/auth/login/_server.ts.js +22 -0
  361. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/auth/logout/_server.ts.js +9 -0
  362. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/beads/_server.ts.js +22 -0
  363. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/browse/_server.ts.js +50 -0
  364. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/chrome/_server.ts.js +30 -0
  365. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/files/image/_server.ts.js +53 -0
  366. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/health/_server.ts.js +7 -0
  367. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +44 -0
  368. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/_server.ts.js +20 -0
  369. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +36 -0
  370. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +40 -0
  371. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +28 -0
  372. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/send/_server.ts.js +29 -0
  373. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +49 -0
  374. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_target_/output/_server.ts.js +14 -0
  375. package/web/.svelte-kit/adapter-bun/entries/endpoints/api/tmux/panes/_server.ts.js +21 -0
  376. package/web/.svelte-kit/adapter-bun/entries/fallbacks/error.svelte.js +27 -0
  377. package/web/.svelte-kit/adapter-bun/entries/hooks.server.js +105 -0
  378. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +499 -0
  379. package/web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js +3057 -0
  380. package/web/.svelte-kit/adapter-bun/entries/pages/login/_page.server.ts.js +15 -0
  381. package/web/.svelte-kit/adapter-bun/entries/pages/login/_page.svelte.js +37 -0
  382. package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +653 -0
  383. package/web/.svelte-kit/adapter-bun/index.js +3864 -0
  384. package/web/.svelte-kit/adapter-bun/internal.js +13 -0
  385. package/web/.svelte-kit/adapter-bun/manifest-full.js +167 -0
  386. package/web/.svelte-kit/adapter-bun/manifest.js +171 -0
  387. package/web/.svelte-kit/adapter-bun/nodes/0.js +8 -0
  388. package/web/.svelte-kit/adapter-bun/nodes/1.js +8 -0
  389. package/web/.svelte-kit/adapter-bun/nodes/2.js +8 -0
  390. package/web/.svelte-kit/adapter-bun/nodes/3.js +10 -0
  391. package/web/.svelte-kit/adapter-bun/nodes/4.js +8 -0
  392. package/web/.svelte-kit/adapter-bun/remote-entry.js +541 -0
  393. package/web/.svelte-kit/adapter-node/.vite/manifest.json +223 -0
  394. package/web/.svelte-kit/adapter-node/_app/immutable/assets/_layout.4NiX29PU.css +1 -0
  395. package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.BEMzYUGV.css +1 -0
  396. package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DOJn7TG7.css +1 -0
  397. package/web/.svelte-kit/adapter-node/chunks/context.js +121 -0
  398. package/web/.svelte-kit/adapter-node/chunks/environment.js +34 -0
  399. package/web/.svelte-kit/adapter-node/chunks/exports.js +174 -0
  400. package/web/.svelte-kit/adapter-node/chunks/false.js +4 -0
  401. package/web/.svelte-kit/adapter-node/chunks/index.js +59 -0
  402. package/web/.svelte-kit/adapter-node/chunks/index2.js +2710 -0
  403. package/web/.svelte-kit/adapter-node/chunks/internal.js +1005 -0
  404. package/web/.svelte-kit/adapter-node/chunks/sessions-json.js +109 -0
  405. package/web/.svelte-kit/adapter-node/chunks/sessions.svelte.js +67 -0
  406. package/web/.svelte-kit/adapter-node/chunks/shared.js +542 -0
  407. package/web/.svelte-kit/adapter-node/chunks/state.svelte.js +16 -0
  408. package/web/.svelte-kit/adapter-node/chunks/utils.js +43 -0
  409. package/web/.svelte-kit/adapter-node/entries/endpoints/api/browse/_server.ts.js +50 -0
  410. package/web/.svelte-kit/adapter-node/entries/endpoints/api/health/_server.ts.js +7 -0
  411. package/web/.svelte-kit/adapter-node/entries/endpoints/api/projects/new-session/_server.ts.js +44 -0
  412. package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/_server.ts.js +20 -0
  413. package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +30 -0
  414. package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/send/_server.ts.js +22 -0
  415. package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_server.ts.js +126 -0
  416. package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_target_/output/_server.ts.js +14 -0
  417. package/web/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +44 -0
  418. package/web/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +12 -0
  419. package/web/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +87 -0
  420. package/web/.svelte-kit/adapter-node/entries/pages/session/_target_/_page.svelte.js +76 -0
  421. package/web/.svelte-kit/adapter-node/index.js +3864 -0
  422. package/web/.svelte-kit/adapter-node/internal.js +13 -0
  423. package/web/.svelte-kit/adapter-node/manifest-full.js +103 -0
  424. package/web/.svelte-kit/adapter-node/manifest.js +107 -0
  425. package/web/.svelte-kit/adapter-node/nodes/0.js +8 -0
  426. package/web/.svelte-kit/adapter-node/nodes/1.js +8 -0
  427. package/web/.svelte-kit/adapter-node/nodes/2.js +8 -0
  428. package/web/.svelte-kit/adapter-node/nodes/3.js +8 -0
  429. package/web/.svelte-kit/adapter-node/remote-entry.js +541 -0
  430. package/web/.svelte-kit/ambient.d.ts +187 -0
  431. package/web/.svelte-kit/generated/client/app.js +33 -0
  432. package/web/.svelte-kit/generated/client/matchers.js +1 -0
  433. package/web/.svelte-kit/generated/client/nodes/0.js +1 -0
  434. package/web/.svelte-kit/generated/client/nodes/1.js +1 -0
  435. package/web/.svelte-kit/generated/client/nodes/2.js +1 -0
  436. package/web/.svelte-kit/generated/client/nodes/3.js +1 -0
  437. package/web/.svelte-kit/generated/client/nodes/4.js +1 -0
  438. package/web/.svelte-kit/generated/client-optimized/app.js +33 -0
  439. package/web/.svelte-kit/generated/client-optimized/matchers.js +1 -0
  440. package/web/.svelte-kit/generated/client-optimized/nodes/0.js +1 -0
  441. package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
  442. package/web/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
  443. package/web/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
  444. package/web/.svelte-kit/generated/client-optimized/nodes/4.js +1 -0
  445. package/web/.svelte-kit/generated/root.js +3 -0
  446. package/web/.svelte-kit/generated/root.svelte +68 -0
  447. package/web/.svelte-kit/generated/server/internal.js +53 -0
  448. package/web/.svelte-kit/non-ambient.d.ts +73 -0
  449. package/web/.svelte-kit/output/client/.vite/manifest.json +203 -0
  450. package/web/.svelte-kit/output/client/_app/immutable/assets/0.WptSHSUl.css +1 -0
  451. package/web/.svelte-kit/output/client/_app/immutable/assets/2.s6Kx4oz1.css +1 -0
  452. package/web/.svelte-kit/output/client/_app/immutable/assets/4.DoNWy7tW.css +1 -0
  453. package/web/.svelte-kit/output/client/_app/immutable/assets/AllSessionsPanel.CGHY3HLy.css +1 -0
  454. package/web/.svelte-kit/output/client/_app/immutable/chunks/-3mUPuLP.js +1 -0
  455. package/web/.svelte-kit/output/client/_app/immutable/chunks/B5U4_V3d.js +1 -0
  456. package/web/.svelte-kit/output/client/_app/immutable/chunks/BHwiZXRv.js +1 -0
  457. package/web/.svelte-kit/output/client/_app/immutable/chunks/C9P-coqM.js +1 -0
  458. package/web/.svelte-kit/output/client/_app/immutable/chunks/Cegv0r8x.js +1 -0
  459. package/web/.svelte-kit/output/client/_app/immutable/chunks/DU91Ml7U.js +3 -0
  460. package/web/.svelte-kit/output/client/_app/immutable/chunks/DmdO6ygw.js +1 -0
  461. package/web/.svelte-kit/output/client/_app/immutable/chunks/HKNo9LID.js +5 -0
  462. package/web/.svelte-kit/output/client/_app/immutable/chunks/U4ip-C0d.js +2 -0
  463. package/web/.svelte-kit/output/client/_app/immutable/chunks/cgUjKIhX.js +2 -0
  464. package/web/.svelte-kit/output/client/_app/immutable/entry/app.CGIBnoln.js +2 -0
  465. package/web/.svelte-kit/output/client/_app/immutable/entry/start.CJk8zB1j.js +1 -0
  466. package/web/.svelte-kit/output/client/_app/immutable/nodes/0.CqlJ9a31.js +1 -0
  467. package/web/.svelte-kit/output/client/_app/immutable/nodes/1.BQUZh2-w.js +1 -0
  468. package/web/.svelte-kit/output/client/_app/immutable/nodes/2.CCV1YdgF.js +1 -0
  469. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.D9tDCdq8.js +1 -0
  470. package/web/.svelte-kit/output/client/_app/immutable/nodes/4.BqPyNkFA.js +6 -0
  471. package/web/.svelte-kit/output/client/_app/version.json +1 -0
  472. package/web/.svelte-kit/output/client/robots.txt +3 -0
  473. package/web/.svelte-kit/output/server/.vite/manifest.json +408 -0
  474. package/web/.svelte-kit/output/server/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +1 -0
  475. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.WptSHSUl.css +1 -0
  476. package/web/.svelte-kit/output/server/_app/immutable/assets/_page.DldLgTc-.css +1 -0
  477. package/web/.svelte-kit/output/server/_app/immutable/assets/_page.DoNWy7tW.css +1 -0
  478. package/web/.svelte-kit/output/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +49 -0
  479. package/web/.svelte-kit/output/server/chunks/alert-dialog-description.js +2670 -0
  480. package/web/.svelte-kit/output/server/chunks/auth.js +59 -0
  481. package/web/.svelte-kit/output/server/chunks/button.js +82 -0
  482. package/web/.svelte-kit/output/server/chunks/client.js +29 -0
  483. package/web/.svelte-kit/output/server/chunks/context.js +133 -0
  484. package/web/.svelte-kit/output/server/chunks/environment.js +34 -0
  485. package/web/.svelte-kit/output/server/chunks/events.js +121 -0
  486. package/web/.svelte-kit/output/server/chunks/exports.js +174 -0
  487. package/web/.svelte-kit/output/server/chunks/false.js +4 -0
  488. package/web/.svelte-kit/output/server/chunks/index.js +59 -0
  489. package/web/.svelte-kit/output/server/chunks/index2.js +2828 -0
  490. package/web/.svelte-kit/output/server/chunks/internal.js +920 -0
  491. package/web/.svelte-kit/output/server/chunks/pane.js +82 -0
  492. package/web/.svelte-kit/output/server/chunks/sessions-json.js +124 -0
  493. package/web/.svelte-kit/output/server/chunks/sessions.svelte.js +229 -0
  494. package/web/.svelte-kit/output/server/chunks/shared.js +542 -0
  495. package/web/.svelte-kit/output/server/chunks/state.svelte.js +16 -0
  496. package/web/.svelte-kit/output/server/chunks/utils.js +43 -0
  497. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +782 -0
  498. package/web/.svelte-kit/output/server/entries/endpoints/api/auth/login/_server.ts.js +22 -0
  499. package/web/.svelte-kit/output/server/entries/endpoints/api/auth/logout/_server.ts.js +9 -0
  500. package/web/.svelte-kit/output/server/entries/endpoints/api/beads/_server.ts.js +22 -0
  501. package/web/.svelte-kit/output/server/entries/endpoints/api/browse/_server.ts.js +50 -0
  502. package/web/.svelte-kit/output/server/entries/endpoints/api/chrome/_server.ts.js +30 -0
  503. package/web/.svelte-kit/output/server/entries/endpoints/api/files/image/_server.ts.js +53 -0
  504. package/web/.svelte-kit/output/server/entries/endpoints/api/health/_server.ts.js +7 -0
  505. package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +44 -0
  506. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/_server.ts.js +20 -0
  507. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +36 -0
  508. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +40 -0
  509. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +28 -0
  510. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/send/_server.ts.js +29 -0
  511. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +49 -0
  512. package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_target_/output/_server.ts.js +14 -0
  513. package/web/.svelte-kit/output/server/entries/endpoints/api/tmux/panes/_server.ts.js +21 -0
  514. package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +27 -0
  515. package/web/.svelte-kit/output/server/entries/hooks.server.js +105 -0
  516. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +499 -0
  517. package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +3057 -0
  518. package/web/.svelte-kit/output/server/entries/pages/login/_page.server.ts.js +15 -0
  519. package/web/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +37 -0
  520. package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +653 -0
  521. package/web/.svelte-kit/output/server/index.js +3864 -0
  522. package/web/.svelte-kit/output/server/internal.js +13 -0
  523. package/web/.svelte-kit/output/server/manifest-full.js +167 -0
  524. package/web/.svelte-kit/output/server/manifest.js +167 -0
  525. package/web/.svelte-kit/output/server/nodes/0.js +8 -0
  526. package/web/.svelte-kit/output/server/nodes/1.js +8 -0
  527. package/web/.svelte-kit/output/server/nodes/2.js +8 -0
  528. package/web/.svelte-kit/output/server/nodes/3.js +10 -0
  529. package/web/.svelte-kit/output/server/nodes/4.js +8 -0
  530. package/web/.svelte-kit/output/server/remote-entry.js +541 -0
  531. package/web/.svelte-kit/tsconfig.json +58 -0
  532. package/web/.svelte-kit/types/route_meta_data.json +55 -0
  533. package/web/.svelte-kit/types/src/routes/$types.d.ts +24 -0
  534. package/web/.svelte-kit/types/src/routes/api/auth/login/$types.d.ts +10 -0
  535. package/web/.svelte-kit/types/src/routes/api/auth/logout/$types.d.ts +10 -0
  536. package/web/.svelte-kit/types/src/routes/api/beads/$types.d.ts +10 -0
  537. package/web/.svelte-kit/types/src/routes/api/browse/$types.d.ts +10 -0
  538. package/web/.svelte-kit/types/src/routes/api/chrome/$types.d.ts +10 -0
  539. package/web/.svelte-kit/types/src/routes/api/files/image/$types.d.ts +10 -0
  540. package/web/.svelte-kit/types/src/routes/api/health/$types.d.ts +10 -0
  541. package/web/.svelte-kit/types/src/routes/api/projects/new-session/$types.d.ts +10 -0
  542. package/web/.svelte-kit/types/src/routes/api/sessions/$types.d.ts +10 -0
  543. package/web/.svelte-kit/types/src/routes/api/sessions/[id]/$types.d.ts +11 -0
  544. package/web/.svelte-kit/types/src/routes/api/sessions/[id]/kill/$types.d.ts +11 -0
  545. package/web/.svelte-kit/types/src/routes/api/sessions/[id]/restart/$types.d.ts +11 -0
  546. package/web/.svelte-kit/types/src/routes/api/sessions/[id]/screenshots/$types.d.ts +11 -0
  547. package/web/.svelte-kit/types/src/routes/api/sessions/[id]/send/$types.d.ts +11 -0
  548. package/web/.svelte-kit/types/src/routes/api/sessions/[target]/output/$types.d.ts +11 -0
  549. package/web/.svelte-kit/types/src/routes/api/tmux/panes/$types.d.ts +10 -0
  550. package/web/.svelte-kit/types/src/routes/login/$types.d.ts +25 -0
  551. package/web/.svelte-kit/types/src/routes/login/proxy+page.server.ts +19 -0
  552. package/web/.svelte-kit/types/src/routes/session/[target]/$types.d.ts +19 -0
  553. package/web/README.md +42 -0
  554. package/web/components.json +16 -0
  555. package/web/package.json +35 -0
  556. package/web/src/app.css +128 -0
  557. package/web/src/app.d.ts +13 -0
  558. package/web/src/app.html +11 -0
  559. package/web/src/hooks.server.ts +156 -0
  560. package/web/src/lib/assets/favicon.svg +1 -0
  561. package/web/src/lib/components/AllSessionsPanel.svelte +789 -0
  562. package/web/src/lib/components/BeadsPanel.svelte +146 -0
  563. package/web/src/lib/components/IssueItem.svelte +287 -0
  564. package/web/src/lib/components/ScreenshotsPanel.svelte +336 -0
  565. package/web/src/lib/components/SessionsSidebar.svelte +312 -0
  566. package/web/src/lib/components/TerminalRenderer.svelte +189 -0
  567. package/web/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +18 -0
  568. package/web/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +18 -0
  569. package/web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +29 -0
  570. package/web/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
  571. package/web/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
  572. package/web/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
  573. package/web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
  574. package/web/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
  575. package/web/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
  576. package/web/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
  577. package/web/src/lib/components/ui/alert-dialog/alert-dialog.svelte +7 -0
  578. package/web/src/lib/components/ui/alert-dialog/index.ts +37 -0
  579. package/web/src/lib/components/ui/badge/badge.svelte +50 -0
  580. package/web/src/lib/components/ui/badge/index.ts +2 -0
  581. package/web/src/lib/components/ui/button/button.svelte +86 -0
  582. package/web/src/lib/components/ui/button/index.ts +17 -0
  583. package/web/src/lib/components/ui/checkbox/checkbox.svelte +36 -0
  584. package/web/src/lib/components/ui/checkbox/index.ts +6 -0
  585. package/web/src/lib/components/ui/dialog/dialog-close.svelte +7 -0
  586. package/web/src/lib/components/ui/dialog/dialog-content.svelte +45 -0
  587. package/web/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
  588. package/web/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
  589. package/web/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  590. package/web/src/lib/components/ui/dialog/dialog-overlay.svelte +20 -0
  591. package/web/src/lib/components/ui/dialog/dialog-portal.svelte +7 -0
  592. package/web/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
  593. package/web/src/lib/components/ui/dialog/dialog-trigger.svelte +7 -0
  594. package/web/src/lib/components/ui/dialog/dialog.svelte +7 -0
  595. package/web/src/lib/components/ui/dialog/index.ts +34 -0
  596. package/web/src/lib/components/ui/scroll-area/index.ts +10 -0
  597. package/web/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
  598. package/web/src/lib/components/ui/scroll-area/scroll-area.svelte +43 -0
  599. package/web/src/lib/components/ui/textarea/index.ts +7 -0
  600. package/web/src/lib/components/ui/textarea/textarea.svelte +23 -0
  601. package/web/src/lib/index.ts +1 -0
  602. package/web/src/lib/server/auth.ts +90 -0
  603. package/web/src/lib/stores/beads.svelte.ts +163 -0
  604. package/web/src/lib/stores/input-injection.svelte.ts +39 -0
  605. package/web/src/lib/stores/preferences.svelte.ts +55 -0
  606. package/web/src/lib/stores/sessions.svelte.ts +108 -0
  607. package/web/src/lib/stores/terminal.svelte.ts +96 -0
  608. package/web/src/lib/stores/websocket-base.svelte.ts +209 -0
  609. package/web/src/lib/types/terminal.ts +31 -0
  610. package/web/src/lib/utils/terminal-parser.ts +239 -0
  611. package/web/src/lib/utils.ts +13 -0
  612. package/web/src/routes/+layout.svelte +450 -0
  613. package/web/src/routes/+page.svelte +19 -0
  614. package/web/src/routes/api/auth/login/+server.ts +34 -0
  615. package/web/src/routes/api/auth/logout/+server.ts +10 -0
  616. package/web/src/routes/api/beads/+server.ts +28 -0
  617. package/web/src/routes/api/browse/+server.ts +59 -0
  618. package/web/src/routes/api/chrome/+server.ts +35 -0
  619. package/web/src/routes/api/files/image/+server.ts +64 -0
  620. package/web/src/routes/api/health/+server.ts +6 -0
  621. package/web/src/routes/api/projects/new-session/+server.ts +50 -0
  622. package/web/src/routes/api/sessions/+server.ts +62 -0
  623. package/web/src/routes/api/sessions/[id]/+server.ts +19 -0
  624. package/web/src/routes/api/sessions/[id]/kill/+server.ts +46 -0
  625. package/web/src/routes/api/sessions/[id]/restart/+server.ts +59 -0
  626. package/web/src/routes/api/sessions/[id]/screenshots/+server.ts +32 -0
  627. package/web/src/routes/api/sessions/[id]/send/+server.ts +31 -0
  628. package/web/src/routes/api/sessions/[target]/output/+server.ts +13 -0
  629. package/web/src/routes/api/tmux/panes/+server.ts +32 -0
  630. package/web/src/routes/login/+page.server.ts +18 -0
  631. package/web/src/routes/login/+page.svelte +69 -0
  632. package/web/src/routes/session/[target]/+page.svelte +450 -0
  633. package/web/static/robots.txt +3 -0
  634. package/web/svelte.config.js +20 -0
  635. package/web/tsconfig.json +20 -0
  636. package/web/vite.config.ts +154 -0
@@ -0,0 +1,107 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "fs";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+
5
+ //#region .svelte-kit/adapter-bun/chunks/sessions-json.js
6
+ const DEFAULT_SESSIONS_DIR = join(join(homedir(), ".claude-watch"), "sessions");
7
+ const SCHEMA_VERSION = 1;
8
+ let sessionsDir = DEFAULT_SESSIONS_DIR;
9
+ function ensureSessionsDir() {
10
+ if (!existsSync(sessionsDir)) mkdirSync(sessionsDir, { recursive: true });
11
+ }
12
+ function getSessionPath(id) {
13
+ return join(sessionsDir, `${id}.json`);
14
+ }
15
+ function writeSessionFile(session) {
16
+ ensureSessionsDir();
17
+ const path = getSessionPath(session.id);
18
+ const tmpPath = path + ".tmp";
19
+ writeFileSync(tmpPath, JSON.stringify(session, null, 2));
20
+ renameSync(tmpPath, path);
21
+ }
22
+ function getSession(id) {
23
+ const path = getSessionPath(id);
24
+ try {
25
+ if (!existsSync(path)) return null;
26
+ const data = readFileSync(path, "utf-8");
27
+ return JSON.parse(data);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+ function upsertSession(input) {
33
+ const existing = getSession(input.id);
34
+ writeSessionFile({
35
+ v: SCHEMA_VERSION,
36
+ id: input.id,
37
+ pid: input.pid,
38
+ cwd: input.cwd,
39
+ git_root: input.git_root ?? existing?.git_root ?? null,
40
+ beads_enabled: input.beads_enabled ?? existing?.beads_enabled ?? false,
41
+ tmux_target: input.tmux_target ?? existing?.tmux_target ?? null,
42
+ state: input.state ?? existing?.state ?? "busy",
43
+ current_action: input.current_action ?? existing?.current_action ?? null,
44
+ prompt_text: input.prompt_text ?? existing?.prompt_text ?? null,
45
+ last_update: Date.now()
46
+ });
47
+ }
48
+ function updateSession(id, update) {
49
+ const session = getSession(id);
50
+ if (!session) return;
51
+ if (update.state !== void 0) session.state = update.state;
52
+ if (update.current_action !== void 0) session.current_action = update.current_action;
53
+ if (update.prompt_text !== void 0) session.prompt_text = update.prompt_text;
54
+ session.last_update = Date.now();
55
+ writeSessionFile(session);
56
+ }
57
+ function deleteSession(id) {
58
+ const path = getSessionPath(id);
59
+ try {
60
+ if (existsSync(path)) unlinkSync(path);
61
+ } catch {}
62
+ }
63
+ function removeScreenshot(id, screenshotPath) {
64
+ const session = getSession(id);
65
+ if (!session || !session.screenshots) return false;
66
+ const initialLength = session.screenshots.length;
67
+ session.screenshots = session.screenshots.filter((s) => s.path !== screenshotPath);
68
+ if (session.screenshots.length === initialLength) return false;
69
+ session.last_update = Date.now();
70
+ writeSessionFile(session);
71
+ return true;
72
+ }
73
+ function getAllSessions() {
74
+ ensureSessionsDir();
75
+ const sessions = [];
76
+ try {
77
+ const files = readdirSync(sessionsDir);
78
+ for (const file of files) {
79
+ if (!file.endsWith(".json")) continue;
80
+ try {
81
+ const data = readFileSync(join(sessionsDir, file), "utf-8");
82
+ sessions.push(JSON.parse(data));
83
+ } catch {
84
+ continue;
85
+ }
86
+ }
87
+ } catch {
88
+ return [];
89
+ }
90
+ const priority = {
91
+ permission: 1,
92
+ waiting: 2,
93
+ idle: 3,
94
+ busy: 4
95
+ };
96
+ sessions.sort((a, b) => {
97
+ const pa = priority[a.state] ?? 5;
98
+ const pb = priority[b.state] ?? 5;
99
+ if (pa !== pb) return pa - pb;
100
+ return b.last_update - a.last_update;
101
+ });
102
+ return sessions;
103
+ }
104
+
105
+ //#endregion
106
+ export { updateSession as a, removeScreenshot as i, getAllSessions as n, upsertSession as o, getSession as r, deleteSession as t };
107
+ //# sourceMappingURL=sessions-json-DgfkCLO7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-json-DgfkCLO7.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/chunks/sessions-json.js"],"sourcesContent":["import { readdirSync, readFileSync, existsSync, mkdirSync, writeFileSync, renameSync, unlinkSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nconst CLAUDE_WATCH_DIR = join(homedir(), \".claude-watch\");\nconst DEFAULT_SESSIONS_DIR = join(CLAUDE_WATCH_DIR, \"sessions\");\nconst SCHEMA_VERSION = 1;\nlet sessionsDir = DEFAULT_SESSIONS_DIR;\nfunction ensureSessionsDir() {\n if (!existsSync(sessionsDir)) {\n mkdirSync(sessionsDir, { recursive: true });\n }\n}\nfunction getSessionPath(id) {\n return join(sessionsDir, `${id}.json`);\n}\nfunction writeSessionFile(session) {\n ensureSessionsDir();\n const path = getSessionPath(session.id);\n const tmpPath = path + \".tmp\";\n writeFileSync(tmpPath, JSON.stringify(session, null, 2));\n renameSync(tmpPath, path);\n}\nfunction getSession(id) {\n const path = getSessionPath(id);\n try {\n if (!existsSync(path)) return null;\n const data = readFileSync(path, \"utf-8\");\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\nfunction upsertSession(input) {\n const existing = getSession(input.id);\n const session = {\n v: SCHEMA_VERSION,\n id: input.id,\n pid: input.pid,\n cwd: input.cwd,\n git_root: input.git_root ?? existing?.git_root ?? null,\n beads_enabled: input.beads_enabled ?? existing?.beads_enabled ?? false,\n tmux_target: input.tmux_target ?? existing?.tmux_target ?? null,\n state: input.state ?? existing?.state ?? \"busy\",\n current_action: input.current_action ?? existing?.current_action ?? null,\n prompt_text: input.prompt_text ?? existing?.prompt_text ?? null,\n last_update: Date.now()\n };\n writeSessionFile(session);\n}\nfunction updateSession(id, update) {\n const session = getSession(id);\n if (!session) return;\n if (update.state !== void 0) {\n session.state = update.state;\n }\n if (update.current_action !== void 0) {\n session.current_action = update.current_action;\n }\n if (update.prompt_text !== void 0) {\n session.prompt_text = update.prompt_text;\n }\n session.last_update = Date.now();\n writeSessionFile(session);\n}\nfunction deleteSession(id) {\n const path = getSessionPath(id);\n try {\n if (existsSync(path)) {\n unlinkSync(path);\n }\n } catch {\n }\n}\nfunction removeScreenshot(id, screenshotPath) {\n const session = getSession(id);\n if (!session || !session.screenshots) return false;\n const initialLength = session.screenshots.length;\n session.screenshots = session.screenshots.filter((s) => s.path !== screenshotPath);\n if (session.screenshots.length === initialLength) {\n return false;\n }\n session.last_update = Date.now();\n writeSessionFile(session);\n return true;\n}\nfunction getAllSessions() {\n ensureSessionsDir();\n const sessions = [];\n try {\n const files = readdirSync(sessionsDir);\n for (const file of files) {\n if (!file.endsWith(\".json\")) continue;\n try {\n const data = readFileSync(join(sessionsDir, file), \"utf-8\");\n sessions.push(JSON.parse(data));\n } catch {\n continue;\n }\n }\n } catch {\n return [];\n }\n const priority = {\n permission: 1,\n waiting: 2,\n idle: 3,\n busy: 4\n };\n sessions.sort((a, b) => {\n const pa = priority[a.state] ?? 5;\n const pb = priority[b.state] ?? 5;\n if (pa !== pb) return pa - pb;\n return b.last_update - a.last_update;\n });\n return sessions;\n}\nexport {\n updateSession as a,\n getSession as b,\n deleteSession as d,\n getAllSessions as g,\n removeScreenshot as r,\n upsertSession as u\n};\n"],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { K as lifecycle_function_unavailable } from "./index2-BQnysSj-.js";
2
+ import { D as ssr_context, l as getContext } from "./clsx-FzI4_gi0.js";
3
+
4
+ //#region .svelte-kit/adapter-bun/chunks/sessions.svelte.js
5
+ function onDestroy(fn) {
6
+ /** @type {SSRContext} */
7
+ ssr_context.r.on_destroy(fn);
8
+ }
9
+ function mount() {
10
+ lifecycle_function_unavailable("mount");
11
+ }
12
+ function unmount() {
13
+ lifecycle_function_unavailable("unmount");
14
+ }
15
+ async function tick() {}
16
+ const getStores = () => {
17
+ const stores$1 = getContext("__svelte__");
18
+ return {
19
+ page: { subscribe: stores$1.page.subscribe },
20
+ navigating: { subscribe: stores$1.navigating.subscribe },
21
+ updated: stores$1.updated
22
+ };
23
+ };
24
+ const page = { subscribe(fn) {
25
+ return getStores().page.subscribe(fn);
26
+ } };
27
+ const DEFAULT_CONFIG = {
28
+ pingInterval: 3e4,
29
+ pongTimeout: 1e4,
30
+ baseReconnectDelay: 1e3,
31
+ maxReconnectDelay: 3e4
32
+ };
33
+ var ReliableWebSocket = class {
34
+ connected = false;
35
+ ws = null;
36
+ pingTimer = null;
37
+ reconnectTimer = null;
38
+ lastPong = 0;
39
+ reconnectAttempts = 0;
40
+ visibilityHandler = null;
41
+ config;
42
+ constructor(config) {
43
+ this.config = {
44
+ ...DEFAULT_CONFIG,
45
+ ...config
46
+ };
47
+ }
48
+ /** Subclass can override to control reconnection (e.g., only reconnect if target is set) */
49
+ shouldReconnect() {
50
+ return true;
51
+ }
52
+ /** Subclass can override to run code on successful connection */
53
+ onConnected() {}
54
+ /** Subclass can override to run code on disconnection */
55
+ onDisconnected() {}
56
+ doConnect() {}
57
+ doDisconnect() {
58
+ if (this.reconnectTimer) {
59
+ clearTimeout(this.reconnectTimer);
60
+ this.reconnectTimer = null;
61
+ }
62
+ this.stopPingTimer();
63
+ this.removeVisibilityHandler();
64
+ this.connected = false;
65
+ this.reconnectAttempts = 0;
66
+ if (this.ws) {
67
+ this.ws.onopen = null;
68
+ this.ws.onclose = null;
69
+ this.ws.onerror = null;
70
+ this.ws.onmessage = null;
71
+ if (this.ws.readyState !== WebSocket.CLOSED) this.ws.close();
72
+ this.ws = null;
73
+ }
74
+ }
75
+ /** Force reconnection (resets backoff) */
76
+ forceReconnect() {
77
+ this.reconnectAttempts = 0;
78
+ if (this.ws) {
79
+ this.ws.onclose = null;
80
+ this.ws.close();
81
+ this.ws = null;
82
+ }
83
+ this.stopPingTimer();
84
+ this.connected = false;
85
+ this.doConnect();
86
+ }
87
+ startPingTimer() {
88
+ this.stopPingTimer();
89
+ this.pingTimer = setInterval(() => {
90
+ if (this.ws?.readyState === WebSocket.OPEN) {
91
+ if (Date.now() - this.lastPong > this.config.pingInterval + this.config.pongTimeout) {
92
+ this.ws?.close();
93
+ return;
94
+ }
95
+ this.ws.send("ping");
96
+ }
97
+ }, this.config.pingInterval);
98
+ }
99
+ stopPingTimer() {
100
+ if (this.pingTimer) {
101
+ clearInterval(this.pingTimer);
102
+ this.pingTimer = null;
103
+ }
104
+ }
105
+ scheduleReconnect() {
106
+ if (this.reconnectTimer) return;
107
+ const delay = Math.min(this.config.baseReconnectDelay * Math.pow(2, this.reconnectAttempts) + Math.random() * 1e3, this.config.maxReconnectDelay);
108
+ this.reconnectAttempts++;
109
+ this.reconnectTimer = setTimeout(() => {
110
+ this.reconnectTimer = null;
111
+ this.doConnect();
112
+ }, delay);
113
+ }
114
+ setupVisibilityHandler() {
115
+ if (this.visibilityHandler) return;
116
+ this.visibilityHandler = () => {
117
+ if (document.visibilityState === "visible" && this.shouldReconnect()) if (!this.ws || this.ws.readyState !== WebSocket.OPEN) this.forceReconnect();
118
+ else this.ws.send("ping");
119
+ };
120
+ document.addEventListener("visibilitychange", this.visibilityHandler);
121
+ }
122
+ removeVisibilityHandler() {
123
+ if (this.visibilityHandler) {
124
+ document.removeEventListener("visibilitychange", this.visibilityHandler);
125
+ this.visibilityHandler = null;
126
+ }
127
+ }
128
+ };
129
+ var SessionStore = class extends ReliableWebSocket {
130
+ sessions = [];
131
+ paused = false;
132
+ savedProjects = [];
133
+ getWsUrl() {
134
+ return `${window.location.protocol === "https:" ? "wss:" : "ws:"}//${window.location.host}/api/sessions/stream`;
135
+ }
136
+ getLogPrefix() {
137
+ return "[sessions]";
138
+ }
139
+ handleMessage(event) {
140
+ if (this.paused) return;
141
+ const data = JSON.parse(event.data);
142
+ if (data.sessions) this.sessions = data.sessions;
143
+ }
144
+ connect() {
145
+ this.doConnect();
146
+ }
147
+ disconnect() {
148
+ this.doDisconnect();
149
+ }
150
+ togglePause() {
151
+ this.paused = !this.paused;
152
+ }
153
+ loadSavedProjects() {}
154
+ saveProject(cwd) {}
155
+ removeProject(cwd) {
156
+ this.savedProjects = this.savedProjects.filter((p) => p !== cwd);
157
+ localStorage.setItem("claude-mux-projects", JSON.stringify(this.savedProjects));
158
+ }
159
+ };
160
+ const sessionStore = new SessionStore();
161
+ function stateColor(state) {
162
+ switch (state) {
163
+ case "permission":
164
+ case "waiting": return "#e74c3c";
165
+ case "idle": return "#f39c12";
166
+ case "busy": return "#27ae60";
167
+ default: return "#666";
168
+ }
169
+ }
170
+ function getProjectColor(cwd) {
171
+ let hash = 0;
172
+ for (let i = 0; i < cwd.length; i++) hash = cwd.charCodeAt(i) + ((hash << 5) - hash);
173
+ return `hsl(${Math.abs(hash) % 360}, 60%, 40%)`;
174
+ }
175
+
176
+ //#endregion
177
+ export { page as a, tick as c, onDestroy as i, unmount as l, getProjectColor as n, sessionStore as o, mount as r, stateColor as s, ReliableWebSocket as t };
178
+ //# sourceMappingURL=sessions.svelte-Ds82MvkB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.svelte-Ds82MvkB.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/chunks/sessions.svelte.js"],"sourcesContent":["import { f as ssr_context, g as getContext } from \"./context.js\";\nimport { ae as lifecycle_function_unavailable } from \"./index2.js\";\nimport \"clsx\";\nimport \"@sveltejs/kit/internal\";\nimport \"./exports.js\";\nimport \"./utils.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"./state.svelte.js\";\nfunction onDestroy(fn) {\n /** @type {SSRContext} */\n ssr_context.r.on_destroy(fn);\n}\nfunction mount() {\n lifecycle_function_unavailable(\"mount\");\n}\nfunction unmount() {\n lifecycle_function_unavailable(\"unmount\");\n}\nasync function tick() {\n}\nconst getStores = () => {\n const stores$1 = getContext(\"__svelte__\");\n return {\n /** @type {typeof page} */\n page: {\n subscribe: stores$1.page.subscribe\n },\n /** @type {typeof navigating} */\n navigating: {\n subscribe: stores$1.navigating.subscribe\n },\n /** @type {typeof updated} */\n updated: stores$1.updated\n };\n};\nconst page = {\n subscribe(fn) {\n const store = getStores().page;\n return store.subscribe(fn);\n }\n};\nconst DEFAULT_CONFIG = {\n pingInterval: 3e4,\n pongTimeout: 1e4,\n baseReconnectDelay: 1e3,\n maxReconnectDelay: 3e4\n};\nclass ReliableWebSocket {\n connected = false;\n ws = null;\n pingTimer = null;\n reconnectTimer = null;\n lastPong = 0;\n reconnectAttempts = 0;\n visibilityHandler = null;\n config;\n constructor(config) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n /** Subclass can override to control reconnection (e.g., only reconnect if target is set) */\n shouldReconnect() {\n return true;\n }\n /** Subclass can override to run code on successful connection */\n onConnected() {\n }\n /** Subclass can override to run code on disconnection */\n onDisconnected() {\n }\n doConnect() {\n return;\n }\n doDisconnect() {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.stopPingTimer();\n this.removeVisibilityHandler();\n this.connected = false;\n this.reconnectAttempts = 0;\n if (this.ws) {\n this.ws.onopen = null;\n this.ws.onclose = null;\n this.ws.onerror = null;\n this.ws.onmessage = null;\n if (this.ws.readyState !== WebSocket.CLOSED) {\n this.ws.close();\n }\n this.ws = null;\n }\n }\n /** Force reconnection (resets backoff) */\n forceReconnect() {\n this.reconnectAttempts = 0;\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n this.stopPingTimer();\n this.connected = false;\n this.doConnect();\n }\n startPingTimer() {\n this.stopPingTimer();\n this.pingTimer = setInterval(\n () => {\n if (this.ws?.readyState === WebSocket.OPEN) {\n if (Date.now() - this.lastPong > this.config.pingInterval + this.config.pongTimeout) {\n this.ws?.close();\n return;\n }\n this.ws.send(\"ping\");\n }\n },\n this.config.pingInterval\n );\n }\n stopPingTimer() {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = null;\n }\n }\n scheduleReconnect() {\n if (this.reconnectTimer) return;\n const delay = Math.min(this.config.baseReconnectDelay * Math.pow(2, this.reconnectAttempts) + Math.random() * 1e3, this.config.maxReconnectDelay);\n this.reconnectAttempts++;\n this.reconnectTimer = setTimeout(\n () => {\n this.reconnectTimer = null;\n this.doConnect();\n },\n delay\n );\n }\n setupVisibilityHandler() {\n if (this.visibilityHandler) return;\n this.visibilityHandler = () => {\n if (document.visibilityState === \"visible\" && this.shouldReconnect()) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.forceReconnect();\n } else {\n this.ws.send(\"ping\");\n }\n }\n };\n document.addEventListener(\"visibilitychange\", this.visibilityHandler);\n }\n removeVisibilityHandler() {\n if (this.visibilityHandler) {\n document.removeEventListener(\"visibilitychange\", this.visibilityHandler);\n this.visibilityHandler = null;\n }\n }\n}\nclass SessionStore extends ReliableWebSocket {\n sessions = [];\n paused = false;\n // Saved projects from localStorage\n savedProjects = [];\n getWsUrl() {\n const protocol = window.location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return `${protocol}//${window.location.host}/api/sessions/stream`;\n }\n getLogPrefix() {\n return \"[sessions]\";\n }\n handleMessage(event) {\n if (this.paused) return;\n const data = JSON.parse(event.data);\n if (data.sessions) {\n this.sessions = data.sessions;\n }\n }\n connect() {\n this.doConnect();\n }\n disconnect() {\n this.doDisconnect();\n }\n togglePause() {\n this.paused = !this.paused;\n }\n loadSavedProjects() {\n return;\n }\n saveProject(cwd) {\n return;\n }\n removeProject(cwd) {\n this.savedProjects = this.savedProjects.filter((p) => p !== cwd);\n localStorage.setItem(\"claude-mux-projects\", JSON.stringify(this.savedProjects));\n }\n}\nconst sessionStore = new SessionStore();\nfunction stateColor(state) {\n switch (state) {\n case \"permission\":\n case \"waiting\":\n return \"#e74c3c\";\n case \"idle\":\n return \"#f39c12\";\n case \"busy\":\n return \"#27ae60\";\n default:\n return \"#666\";\n }\n}\nfunction getProjectColor(cwd) {\n let hash = 0;\n for (let i = 0; i < cwd.length; i++) {\n hash = cwd.charCodeAt(i) + ((hash << 5) - hash);\n }\n const hue = Math.abs(hash) % 360;\n return `hsl(${hue}, 60%, 40%)`;\n}\nexport {\n ReliableWebSocket as R,\n stateColor as a,\n getProjectColor as g,\n mount as m,\n onDestroy as o,\n page as p,\n sessionStore as s,\n tick as t,\n unmount as u\n};\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { _ as noop } from "./clsx-FzI4_gi0.js";
2
+
3
+ //#region .svelte-kit/adapter-bun/chunks/state.svelte.js
4
+ if (noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString())) new URL("https://example.com");
5
+
6
+ //#endregion
7
+ //# sourceMappingURL=state.svelte-xeAZvWZ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.svelte-xeAZvWZ6.js","names":[],"sources":["../../../../web/.svelte-kit/adapter-bun/chunks/state.svelte.js"],"sourcesContent":["import \"clsx\";\nimport { n as noop } from \"./context.js\";\nimport \"@sveltejs/kit/internal/server\";\nconst is_legacy = noop.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop.toString());\nif (is_legacy) {\n ({\n data: {},\n form: null,\n error: null,\n params: {},\n route: { id: null },\n state: {},\n status: -1,\n url: new URL(\"https://example.com\")\n });\n}\n"],"mappings":";;;AAIA,IADkB,KAAK,UAAU,CAAC,SAAS,KAAK,IAAI,wBAAwB,KAAK,KAAK,UAAU,CAAC,CAE/F,CAQO,IAAI,IAAI,sBAAsB"}