claude-mux 0.7.0 → 0.8.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.
- package/.github/workflows/release.yml +59 -0
- package/CLAUDE.md +12 -13
- package/CONTEXT.md +23 -0
- package/README.md +61 -266
- package/dist/agents.d.ts +12 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +28 -0
- package/dist/agents.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/capture.d.ts +3 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +33 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/new-session.d.ts +3 -0
- package/dist/commands/new-session.d.ts.map +1 -0
- package/dist/commands/new-session.js +98 -0
- package/dist/commands/new-session.js.map +1 -0
- package/dist/commands/resolve-session.d.ts +15 -0
- package/dist/commands/resolve-session.d.ts.map +1 -0
- package/dist/commands/resolve-session.js +37 -0
- package/dist/commands/resolve-session.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +67 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +4 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/setup.d.ts +0 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +5 -5
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +21 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +36 -22
- package/dist/commands/tui.js.map +1 -1
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +122 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/wait-idle.d.ts +3 -0
- package/dist/commands/wait-idle.d.ts.map +1 -0
- package/dist/commands/wait-idle.js +66 -0
- package/dist/commands/wait-idle.js.map +1 -0
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/sessions-json.d.ts +21 -3
- package/dist/db/sessions-json.d.ts.map +1 -1
- package/dist/db/sessions-json.js +73 -19
- package/dist/db/sessions-json.js.map +1 -1
- package/dist/hooks/claude-mux-hook.js +148 -25
- package/dist/hooks/claude-mux-hook.js.map +1 -1
- package/dist/server/attachments.d.ts +26 -0
- package/dist/server/attachments.d.ts.map +1 -0
- package/dist/server/attachments.js +60 -0
- package/dist/server/attachments.js.map +1 -0
- package/dist/server/message-queue.d.ts +39 -0
- package/dist/server/message-queue.d.ts.map +1 -0
- package/dist/server/message-queue.js +143 -0
- package/dist/server/message-queue.js.map +1 -0
- package/dist/server/ws-handlers.d.ts +33 -81
- package/dist/server/ws-handlers.d.ts.map +1 -1
- package/dist/server/ws-handlers.js +320 -321
- package/dist/server/ws-handlers.js.map +1 -1
- package/dist/setup/hooks.d.ts +8 -2
- package/dist/setup/hooks.d.ts.map +1 -1
- package/dist/setup/hooks.js +48 -20
- package/dist/setup/hooks.js.map +1 -1
- package/dist/setup/wizard.d.ts +3 -1
- package/dist/setup/wizard.d.ts.map +1 -1
- package/dist/setup/wizard.js +9 -9
- package/dist/setup/wizard.js.map +1 -1
- package/dist/tmux/pane.d.ts +17 -12
- package/dist/tmux/pane.d.ts.map +1 -1
- package/dist/tmux/pane.js +60 -36
- package/dist/tmux/pane.js.map +1 -1
- package/dist/types/ws-messages.d.ts +216 -0
- package/dist/types/ws-messages.d.ts.map +1 -0
- package/dist/types/ws-messages.js +71 -0
- package/dist/types/ws-messages.js.map +1 -0
- package/dist/utils/paths.d.ts +3 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +24 -3
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/slug.d.ts +3 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +6 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/web/client/_app/immutable/assets/0._7q2-APf.css +1 -0
- package/dist/web/client/_app/immutable/assets/3.luY-vLwW.css +1 -0
- package/dist/web/client/_app/immutable/assets/AllSessionsPanel.Chdj8GD8.css +1 -0
- package/dist/web/client/_app/immutable/chunks/BH3SFRWG.js +1 -0
- package/dist/web/client/_app/immutable/chunks/BIuG5Qqu.js +1 -0
- package/dist/web/client/_app/immutable/chunks/BkAy2L0f.js +69 -0
- package/dist/web/client/_app/immutable/chunks/CGb10hB5.js +1 -0
- package/dist/web/client/_app/immutable/chunks/D7LHlC1M.js +2 -0
- package/dist/web/client/_app/immutable/chunks/DtqyE18S.js +1 -0
- package/dist/web/client/_app/immutable/chunks/e3neaX0M.js +3 -0
- package/dist/web/client/_app/immutable/entry/app.r0-ETIJN.js +2 -0
- package/dist/web/client/_app/immutable/entry/start.C4mVhUwG.js +1 -0
- package/dist/web/client/_app/immutable/nodes/0.NP7v5jwY.js +1 -0
- package/dist/web/client/_app/immutable/nodes/1.CmX900J8.js +1 -0
- package/dist/web/client/_app/immutable/nodes/2.BQA6OZIp.js +1 -0
- package/dist/web/client/_app/immutable/nodes/3.bY9l1t_h.js +98 -0
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/client/favicon.svg +22 -0
- package/dist/web/server/chunks/0-1j1Fe_oa.js +40 -0
- package/dist/web/server/chunks/0-1j1Fe_oa.js.map +1 -0
- package/dist/web/server/chunks/{1-YRx6A8Tm.js → 1-D1dSc_vl.js} +7 -8
- package/dist/web/server/chunks/1-D1dSc_vl.js.map +1 -0
- package/dist/web/server/chunks/2-CCOk5pX2.js +19 -0
- package/dist/web/server/chunks/2-CCOk5pX2.js.map +1 -0
- package/dist/web/server/chunks/3-DFcJIcL4.js +24 -0
- package/dist/web/server/chunks/3-DFcJIcL4.js.map +1 -0
- package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js +3358 -0
- package/dist/web/server/chunks/_layout.svelte-yoaT7ri1.js.map +1 -0
- package/dist/web/server/chunks/_page.svelte-CREhk3v0.js +19 -0
- package/dist/web/server/chunks/_page.svelte-CREhk3v0.js.map +1 -0
- package/dist/web/server/chunks/_page.svelte-DtdzlL3m.js +1392 -0
- package/dist/web/server/chunks/_page.svelte-DtdzlL3m.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-B-6emYlG.js +63 -0
- package/dist/web/server/chunks/_server.ts-B-6emYlG.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-Df2isGQc.js → _server.ts-B2vhCPsh.js} +6 -5
- package/dist/web/server/chunks/_server.ts-B2vhCPsh.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-B4o51l3m.js +19 -0
- package/dist/web/server/chunks/_server.ts-B4o51l3m.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-BVHUS8fm.js → _server.ts-BEQA_put.js} +4 -5
- package/dist/web/server/chunks/{_server.ts-BVHUS8fm.js.map → _server.ts-BEQA_put.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CR0uWvpz.js → _server.ts-BUOOqQRk.js} +4 -5
- package/dist/web/server/chunks/{_server.ts-CR0uWvpz.js.map → _server.ts-BUOOqQRk.js.map} +1 -1
- package/dist/web/server/chunks/_server.ts-Bkk6XA1G.js +48 -0
- package/dist/web/server/chunks/_server.ts-Bkk6XA1G.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-BUKgRb6U.js → _server.ts-Bp8qgUhz.js} +5 -4
- package/dist/web/server/chunks/_server.ts-Bp8qgUhz.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-CTIiLzg9.js +35 -0
- package/dist/web/server/chunks/_server.ts-CTIiLzg9.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-3WAmKvn2.js → _server.ts-ChuAmmhw.js} +8 -6
- package/dist/web/server/chunks/_server.ts-ChuAmmhw.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-WldRpSRi.js → _server.ts-CkC3JTyo.js} +4 -4
- package/dist/web/server/chunks/_server.ts-CkC3JTyo.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-Cy0wvEJk.js +78 -0
- package/dist/web/server/chunks/_server.ts-Cy0wvEJk.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-CDAUUmG_.js → _server.ts-D0ylgRRV.js} +4 -5
- package/dist/web/server/chunks/{_server.ts-CDAUUmG_.js.map → _server.ts-D0ylgRRV.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DdbOAkOj.js → _server.ts-DIhiJl4f.js} +7 -7
- package/dist/web/server/chunks/_server.ts-DIhiJl4f.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-DK7C_rXn.js +93 -0
- package/dist/web/server/chunks/_server.ts-DK7C_rXn.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-BAWJCSFb.js → _server.ts-DLI_Pwvd.js} +3 -4
- package/dist/web/server/chunks/{_server.ts-BAWJCSFb.js.map → _server.ts-DLI_Pwvd.js.map} +1 -1
- package/dist/web/server/chunks/_server.ts-Dj_iwP-Z.js +59 -0
- package/dist/web/server/chunks/_server.ts-Dj_iwP-Z.js.map +1 -0
- package/dist/web/server/chunks/{_server.ts-C4oPmOJR.js → _server.ts-DyeW0P3w.js} +3 -4
- package/dist/web/server/chunks/_server.ts-DyeW0P3w.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-ZObkLZOS.js +25 -0
- package/dist/web/server/chunks/_server.ts-ZObkLZOS.js.map +1 -0
- package/dist/web/server/chunks/_server.ts-eFJEOOS1.js +45 -0
- package/dist/web/server/chunks/_server.ts-eFJEOOS1.js.map +1 -0
- package/dist/web/server/chunks/agents-rTKwF5qh.js +42 -0
- package/dist/web/server/chunks/agents-rTKwF5qh.js.map +1 -0
- package/dist/web/server/chunks/attachments-B8VMrOm4.js +42 -0
- package/dist/web/server/chunks/attachments-B8VMrOm4.js.map +1 -0
- package/dist/web/server/chunks/button-BKSlzQeg.js +8309 -0
- package/dist/web/server/chunks/button-BKSlzQeg.js.map +1 -0
- package/dist/web/server/chunks/{chunks-DmdqVYC7.js → chunks-DLJ18IUO.js} +3 -4
- package/dist/web/server/chunks/chunks-DLJ18IUO.js.map +1 -0
- package/dist/web/server/chunks/{client-CUrSQijh.js → client-Dnt8rmsr.js} +5 -4
- package/dist/web/server/chunks/client-Dnt8rmsr.js.map +1 -0
- package/dist/web/server/chunks/constants-CZFdiL46.js +10 -0
- package/dist/web/server/chunks/constants-CZFdiL46.js.map +1 -0
- package/dist/web/server/chunks/{error.svelte-D-c-9pTE.js → error.svelte-VCYDSS3H.js} +5 -7
- package/dist/web/server/chunks/error.svelte-VCYDSS3H.js.map +1 -0
- package/dist/web/server/chunks/{exports-CCurQ-Tl.js → exports-DLCVjVJM.js} +13 -34
- package/dist/web/server/chunks/exports-DLCVjVJM.js.map +1 -0
- package/dist/web/server/chunks/{hooks.server-BK1bopsh.js → hooks.server-CzdMWOsb.js} +11 -28
- package/dist/web/server/chunks/hooks.server-CzdMWOsb.js.map +1 -0
- package/dist/web/server/chunks/{internal-DLENj6YI.js → internal-CwN2I5C2.js} +8 -3
- package/dist/web/server/chunks/internal-CwN2I5C2.js.map +1 -0
- package/dist/web/server/chunks/message-queue-BhryIx7W.js +119 -0
- package/dist/web/server/chunks/message-queue-BhryIx7W.js.map +1 -0
- package/dist/web/server/chunks/popover-trigger-BQJRZ2Xv.js +5659 -0
- package/dist/web/server/chunks/popover-trigger-BQJRZ2Xv.js.map +1 -0
- package/dist/web/server/chunks/root-L_UzGTpb.js +4238 -0
- package/dist/web/server/chunks/root-L_UzGTpb.js.map +1 -0
- package/dist/web/server/chunks/{sessions-json-DgfkCLO7.js → sessions-json-w9KPwiDl.js} +79 -23
- package/dist/web/server/chunks/sessions-json-w9KPwiDl.js.map +1 -0
- package/dist/web/server/chunks/shared-server-CB2NTyFt.js +13 -0
- package/dist/web/server/chunks/shared-server-CB2NTyFt.js.map +1 -0
- package/dist/web/server/chunks/state.svelte-DM05ho1v.js +8 -0
- package/dist/web/server/chunks/state.svelte-DM05ho1v.js.map +1 -0
- package/dist/web/server/chunks/{ws-handlers-B4r5eSP2.js → ws-handlers-B_p_71BD.js} +346 -268
- package/dist/web/server/chunks/ws-handlers-B_p_71BD.js.map +1 -0
- package/dist/web/server/chunks/ws-managers-B0N9UU0g.js +12 -0
- package/dist/web/server/chunks/ws-managers-B0N9UU0g.js.map +1 -0
- package/dist/web/server/index.js +1226 -1718
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +98 -62
- package/dist/web/server/manifest.js.map +1 -1
- package/docs/adr/0001-attachments-stored-in-home-dir.md +45 -0
- package/docs/adr/0002-attachment-files-deleted-only-on-session-kill.md +47 -0
- package/docs/images/desktop-dashboard.png +0 -0
- package/docs/images/desktop-session.png +0 -0
- package/docs/images/mobile-dashboard.png +0 -0
- package/docs/images/mobile-session.png +0 -0
- package/docs/release-checklist.md +8 -34
- package/docs/removing-hooks.md +14 -14
- package/package.json +6 -4
- package/scripts/install.sh +85 -0
- package/src/agents.ts +39 -0
- package/src/cli.ts +16 -2
- package/src/commands/capture.ts +38 -0
- package/src/commands/index.ts +7 -0
- package/src/commands/new-session.ts +114 -0
- package/src/commands/resolve-session.ts +42 -0
- package/src/commands/send.ts +81 -0
- package/src/commands/serve.ts +5 -3
- package/src/commands/setup.ts +5 -6
- package/src/commands/status.ts +24 -0
- package/src/commands/tui.ts +39 -22
- package/src/commands/update.ts +134 -0
- package/src/commands/wait-idle.ts +84 -0
- package/src/db/index.ts +5 -0
- package/src/db/sessions-json.ts +87 -21
- package/src/hooks/claude-mux-hook.ts +158 -30
- package/src/server/attachments.ts +64 -0
- package/src/server/message-queue.ts +176 -0
- package/src/server/ws-handlers.ts +352 -405
- package/src/setup/hooks.ts +58 -22
- package/src/setup/wizard.ts +9 -9
- package/src/tmux/pane.ts +71 -37
- package/src/types/ws-messages.ts +87 -0
- package/src/utils/paths.ts +24 -4
- package/src/utils/slug.ts +6 -0
- package/src/utils/version.ts +1 -1
- package/steamdeck/build/icon-1024.png +0 -0
- package/steamdeck/build/icon.png +0 -0
- package/steamdeck/main.js +35 -0
- package/steamdeck/package.json +46 -0
- package/steamdeck/scripts/release.ts +36 -0
- package/web/.env.example +4 -0
- package/web/.svelte-kit/adapter-bun/.vite/manifest.json +180 -161
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/AllSessionsPanel.hZMOJZyZ.css +1 -0
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.OA9bot5w.css +1 -0
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.luY-vLwW.css +1 -0
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.s6Kx4oz1.css +1 -0
- package/web/.svelte-kit/adapter-bun/chunks/agents.js +32 -0
- package/web/.svelte-kit/adapter-bun/chunks/attachments.js +38 -0
- package/web/.svelte-kit/adapter-bun/chunks/button.js +422 -4
- package/web/.svelte-kit/adapter-bun/chunks/client.js +1 -0
- package/web/.svelte-kit/adapter-bun/chunks/constants.js +9 -0
- package/web/.svelte-kit/adapter-bun/chunks/environment.js +3 -3
- package/web/.svelte-kit/adapter-bun/chunks/exports.js +9 -9
- package/web/.svelte-kit/adapter-bun/chunks/index.js +1 -2
- package/web/.svelte-kit/adapter-bun/chunks/internal.js +7 -800
- package/web/.svelte-kit/adapter-bun/chunks/message-queue.js +114 -0
- package/web/.svelte-kit/adapter-bun/chunks/popover-trigger.js +6801 -0
- package/web/.svelte-kit/adapter-bun/chunks/render-context.js +602 -0
- package/web/.svelte-kit/{output/server/chunks/index2.js → adapter-bun/chunks/root.js} +2231 -727
- package/web/.svelte-kit/adapter-bun/chunks/sessions-json.js +87 -22
- package/web/.svelte-kit/adapter-bun/chunks/shared-server.js +14 -0
- package/web/.svelte-kit/adapter-bun/chunks/shared.js +993 -53
- package/web/.svelte-kit/adapter-bun/chunks/state.svelte.js +4 -2
- package/web/.svelte-kit/adapter-bun/chunks/utils.js +3 -5
- package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +380 -299
- package/web/.svelte-kit/adapter-bun/chunks/ws-managers.js +12 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/health/_server.ts.js +2 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/projects/new-session/_server.ts.js +65 -25
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/servers/discover/_server.ts.js +50 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +74 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +4 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +65 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +32 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +2 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/send/_server.ts.js +31 -13
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +86 -0
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_server.ts.js +4 -36
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/sessions/_target_/output/_server.ts.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/tmux/panes/_server.ts.js +3 -3
- package/web/.svelte-kit/adapter-bun/entries/endpoints/downloads/_file_/_server.ts.js +20 -0
- package/web/.svelte-kit/adapter-bun/entries/fallbacks/error.svelte.js +1 -1
- package/web/.svelte-kit/adapter-bun/entries/hooks.server.js +9 -29
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.server.ts.js +9 -0
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +3588 -369
- package/web/.svelte-kit/adapter-bun/entries/pages/_page.svelte.js +13 -3045
- package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.svelte.js +1186 -455
- package/web/.svelte-kit/adapter-bun/entries/pages/session/_target_/_page.ts.js +4 -0
- package/web/.svelte-kit/adapter-bun/index.js +892 -472
- package/web/.svelte-kit/adapter-bun/internal.js +9 -7
- package/web/.svelte-kit/adapter-bun/manifest-full.js +45 -32
- package/web/.svelte-kit/adapter-bun/manifest.js +45 -32
- package/web/.svelte-kit/adapter-bun/nodes/0.js +5 -3
- package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/2.js +2 -2
- package/web/.svelte-kit/adapter-bun/nodes/3.js +9 -6
- package/web/.svelte-kit/adapter-bun/remote-entry.js +530 -131
- package/web/.svelte-kit/ambient.d.ts +347 -62
- package/web/.svelte-kit/generated/client/app.js +3 -5
- package/web/.svelte-kit/generated/client/nodes/1.js +1 -1
- package/web/.svelte-kit/generated/client/nodes/3.js +3 -1
- package/web/.svelte-kit/generated/client-optimized/app.js +3 -5
- package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -1
- package/web/.svelte-kit/generated/client-optimized/nodes/3.js +3 -1
- package/web/.svelte-kit/generated/server/internal.js +4 -3
- package/web/.svelte-kit/non-ambient.d.ts +19 -9
- package/web/.svelte-kit/output/client/.vite/manifest.json +73 -121
- package/web/.svelte-kit/output/client/_app/immutable/assets/0._7q2-APf.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/assets/3.luY-vLwW.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/assets/AllSessionsPanel.Chdj8GD8.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BH3SFRWG.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BIuG5Qqu.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BkAy2L0f.js +69 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CGb10hB5.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/D7LHlC1M.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DtqyE18S.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/e3neaX0M.js +3 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.r0-ETIJN.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.C4mVhUwG.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.NP7v5jwY.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.CmX900J8.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.BQA6OZIp.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.bY9l1t_h.js +98 -0
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/client/favicon.svg +22 -0
- package/web/.svelte-kit/output/server/.vite/manifest.json +180 -161
- package/web/.svelte-kit/output/server/_app/immutable/assets/AllSessionsPanel.hZMOJZyZ.css +1 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.OA9bot5w.css +1 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.luY-vLwW.css +1 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.s6Kx4oz1.css +1 -0
- package/web/.svelte-kit/output/server/chunks/agents.js +32 -0
- package/web/.svelte-kit/output/server/chunks/attachments.js +38 -0
- package/web/.svelte-kit/output/server/chunks/button.js +422 -4
- package/web/.svelte-kit/output/server/chunks/client.js +1 -0
- package/web/.svelte-kit/output/server/chunks/constants.js +9 -0
- package/web/.svelte-kit/output/server/chunks/environment.js +3 -3
- package/web/.svelte-kit/output/server/chunks/exports.js +9 -9
- package/web/.svelte-kit/output/server/chunks/index.js +1 -2
- package/web/.svelte-kit/output/server/chunks/internal.js +7 -800
- package/web/.svelte-kit/output/server/chunks/message-queue.js +114 -0
- package/web/.svelte-kit/output/server/chunks/popover-trigger.js +6801 -0
- package/web/.svelte-kit/output/server/chunks/render-context.js +602 -0
- package/web/.svelte-kit/{adapter-bun/chunks/index2.js → output/server/chunks/root.js} +2231 -727
- package/web/.svelte-kit/output/server/chunks/sessions-json.js +87 -22
- package/web/.svelte-kit/output/server/chunks/shared-server.js +14 -0
- package/web/.svelte-kit/output/server/chunks/shared.js +993 -53
- package/web/.svelte-kit/output/server/chunks/state.svelte.js +4 -2
- package/web/.svelte-kit/output/server/chunks/utils.js +3 -5
- package/web/.svelte-kit/output/server/chunks/ws-handlers.js +380 -299
- package/web/.svelte-kit/output/server/chunks/ws-managers.js +12 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/health/_server.ts.js +2 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/projects/new-session/_server.ts.js +65 -25
- package/web/.svelte-kit/output/server/entries/endpoints/api/servers/discover/_server.ts.js +50 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/attach/_server.ts.js +74 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +4 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/queue/_server.ts.js +65 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/rename/_server.ts.js +32 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +2 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/send/_server.ts.js +31 -13
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_id_/voice/_server.ts.js +86 -0
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_server.ts.js +4 -36
- package/web/.svelte-kit/output/server/entries/endpoints/api/sessions/_target_/output/_server.ts.js +1 -1
- package/web/.svelte-kit/output/server/entries/endpoints/api/tmux/panes/_server.ts.js +3 -3
- package/web/.svelte-kit/output/server/entries/endpoints/downloads/_file_/_server.ts.js +20 -0
- package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +1 -1
- package/web/.svelte-kit/output/server/entries/hooks.server.js +9 -29
- package/web/.svelte-kit/output/server/entries/pages/_layout.server.ts.js +9 -0
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +3588 -369
- package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +13 -3045
- package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.svelte.js +1186 -455
- package/web/.svelte-kit/output/server/entries/pages/session/_target_/_page.ts.js +4 -0
- package/web/.svelte-kit/output/server/index.js +892 -472
- package/web/.svelte-kit/output/server/internal.js +9 -7
- package/web/.svelte-kit/output/server/manifest-full.js +45 -32
- package/web/.svelte-kit/output/server/manifest.js +45 -32
- package/web/.svelte-kit/output/server/nodes/0.js +5 -3
- package/web/.svelte-kit/output/server/nodes/1.js +1 -1
- package/web/.svelte-kit/output/server/nodes/2.js +2 -2
- package/web/.svelte-kit/output/server/nodes/3.js +9 -6
- package/web/.svelte-kit/output/server/remote-entry.js +530 -131
- package/web/.svelte-kit/tsconfig.json +7 -1
- package/web/.svelte-kit/types/route_meta_data.json +24 -12
- package/web/.svelte-kit/types/src/routes/$types.d.ts +9 -6
- package/web/.svelte-kit/types/src/routes/api/browse/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/chrome/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/files/image/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/health/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/projects/new-session/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/{beads → servers/discover}/$types.d.ts +2 -3
- package/web/.svelte-kit/types/src/routes/api/sessions/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/attach/$types.d.ts +10 -0
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/kill/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/queue/$types.d.ts +10 -0
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/rename/$types.d.ts +10 -0
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/restart/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/screenshots/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/send/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/sessions/[id]/voice/$types.d.ts +10 -0
- package/web/.svelte-kit/types/src/routes/api/sessions/[target]/output/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/api/tmux/panes/$types.d.ts +1 -2
- package/web/.svelte-kit/types/src/routes/downloads/[file]/$types.d.ts +10 -0
- package/web/.svelte-kit/types/src/routes/proxy+layout.server.ts +10 -0
- package/web/.svelte-kit/types/src/routes/session/[target]/$types.d.ts +4 -3
- package/web/package.json +3 -1
- package/web/src/app.html +1 -0
- package/web/src/hooks.server.ts +12 -46
- package/web/src/lib/actions/clickOutside.ts +61 -0
- package/web/src/lib/actions/longPress.ts +90 -0
- package/web/src/lib/components/AllSessionsPanel.svelte +666 -343
- package/web/src/lib/components/MessageQueuePanel.svelte +225 -0
- package/web/src/lib/components/ScreenshotsPanel.svelte +38 -95
- package/web/src/lib/components/ServerPicker.svelte +209 -0
- package/web/src/lib/components/SidebarAccordion.svelte +123 -0
- package/web/src/lib/components/SystemStatsWidget.svelte +121 -0
- package/web/src/lib/components/TerminalRenderer.svelte +69 -157
- package/web/src/lib/components/VoiceButton.svelte +525 -0
- package/web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +1 -1
- package/web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/web/src/lib/components/ui/dialog/dialog-content.svelte +1 -1
- package/web/src/lib/components/ui/dialog/dialog-overlay.svelte +1 -1
- package/web/src/lib/components/ui/popover/index.ts +19 -0
- package/web/src/lib/components/ui/popover/popover-close.svelte +7 -0
- package/web/src/lib/components/ui/popover/popover-content.svelte +31 -0
- package/web/src/lib/components/ui/popover/popover-portal.svelte +7 -0
- package/web/src/lib/components/ui/popover/popover-trigger.svelte +17 -0
- package/web/src/lib/components/ui/popover/popover.svelte +7 -0
- package/web/src/lib/constants.ts +6 -0
- package/web/src/lib/gamepad.svelte.ts +182 -0
- package/web/src/lib/server/voice/index.ts +1 -0
- package/web/src/lib/server/voice/whisper.ts +70 -0
- package/web/src/lib/server/ws-managers.ts +21 -0
- package/web/src/lib/stores/drafts.svelte.ts +47 -0
- package/web/src/lib/stores/persisted.ts +43 -0
- package/web/src/lib/stores/preferences.svelte.ts +20 -31
- package/web/src/lib/stores/servers.svelte.ts +49 -0
- package/web/src/lib/stores/sessions.svelte.ts +194 -14
- package/web/src/lib/stores/sidebarActions.svelte.ts +42 -0
- package/web/src/lib/stores/terminal.svelte.ts +62 -33
- package/web/src/lib/stores/tmuxPanes.svelte.ts +78 -0
- package/web/src/lib/stores/voice.svelte.ts +287 -0
- package/web/src/lib/types/servers.ts +10 -0
- package/web/src/lib/types/tmux.ts +6 -0
- package/web/src/lib/voice/recorder.ts +223 -0
- package/web/src/lib/wakeLock.svelte.ts +41 -0
- package/web/src/routes/+layout.server.ts +8 -0
- package/web/src/routes/+layout.svelte +91 -195
- package/web/src/routes/+page.svelte +47 -3
- package/web/src/routes/api/health/+server.ts +2 -1
- package/web/src/routes/api/projects/new-session/+server.ts +69 -27
- package/web/src/routes/api/servers/discover/+server.ts +72 -0
- package/web/src/routes/api/sessions/+server.ts +4 -50
- package/web/src/routes/api/sessions/[id]/attach/+server.ts +88 -0
- package/web/src/routes/api/sessions/[id]/kill/+server.ts +5 -2
- package/web/src/routes/api/sessions/[id]/queue/+server.ts +69 -0
- package/web/src/routes/api/sessions/[id]/rename/+server.ts +33 -0
- package/web/src/routes/api/sessions/[id]/restart/+server.ts +2 -0
- package/web/src/routes/api/sessions/[id]/send/+server.ts +45 -15
- package/web/src/routes/api/sessions/[id]/voice/+server.ts +46 -0
- package/web/src/routes/api/sessions/[target]/output/+server.ts +1 -1
- package/web/src/routes/api/tmux/panes/+server.ts +5 -8
- package/web/src/routes/downloads/[file]/+server.ts +25 -0
- package/web/src/routes/session/[target]/+page.svelte +1375 -124
- package/web/src/routes/session/[target]/+page.ts +1 -0
- package/web/static/favicon.svg +22 -0
- package/web/vite.config.ts +13 -29
- package/.beads/README.md +0 -81
- package/.beads/config.yaml +0 -62
- package/.beads/interactions.jsonl +0 -0
- package/.beads/issues.jsonl +0 -5
- package/.beads/metadata.json +0 -4
- package/PLAN-beads-integration.md +0 -250
- package/dist/db/schema.d.ts +0 -4
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -23
- package/dist/db/schema.js.map +0 -1
- package/dist/db/sessions.d.ts +0 -38
- package/dist/db/sessions.d.ts.map +0 -1
- package/dist/db/sessions.js +0 -87
- package/dist/db/sessions.js.map +0 -1
- package/dist/hooks/claude-watch-hook.d.ts +0 -15
- package/dist/hooks/claude-watch-hook.d.ts.map +0 -1
- package/dist/hooks/claude-watch-hook.js +0 -396
- package/dist/hooks/claude-watch-hook.js.map +0 -1
- package/dist/server/custom-server.d.ts +0 -13
- package/dist/server/custom-server.d.ts.map +0 -1
- package/dist/server/custom-server.js +0 -63
- package/dist/server/custom-server.js.map +0 -1
- package/dist/server/index.d.ts +0 -9
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -1143
- package/dist/server/index.js.map +0 -1
- package/dist/server/middleware/cors.d.ts +0 -2
- package/dist/server/middleware/cors.d.ts.map +0 -1
- package/dist/server/middleware/cors.js +0 -11
- package/dist/server/middleware/cors.js.map +0 -1
- package/dist/server/routes/sessions.d.ts +0 -3
- package/dist/server/routes/sessions.d.ts.map +0 -1
- package/dist/server/routes/sessions.js +0 -78
- package/dist/server/routes/sessions.js.map +0 -1
- package/dist/server/routes/stream.d.ts +0 -3
- package/dist/server/routes/stream.d.ts.map +0 -1
- package/dist/server/routes/stream.js +0 -45
- package/dist/server/routes/stream.js.map +0 -1
- package/dist/server/types.d.ts +0 -28
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js +0 -2
- package/dist/server/types.js.map +0 -1
- package/dist/server/websocket.d.ts +0 -51
- package/dist/server/websocket.d.ts.map +0 -1
- package/dist/server/websocket.js +0 -156
- package/dist/server/websocket.js.map +0 -1
- package/dist/web/client/_app/immutable/assets/0.WptSHSUl.css +0 -1
- package/dist/web/client/_app/immutable/assets/4.DoNWy7tW.css +0 -1
- package/dist/web/client/_app/immutable/assets/AllSessionsPanel.CGHY3HLy.css +0 -1
- package/dist/web/client/_app/immutable/chunks/-3mUPuLP.js +0 -1
- package/dist/web/client/_app/immutable/chunks/B5U4_V3d.js +0 -1
- package/dist/web/client/_app/immutable/chunks/BHwiZXRv.js +0 -1
- package/dist/web/client/_app/immutable/chunks/C9P-coqM.js +0 -1
- package/dist/web/client/_app/immutable/chunks/Cegv0r8x.js +0 -1
- package/dist/web/client/_app/immutable/chunks/DU91Ml7U.js +0 -3
- package/dist/web/client/_app/immutable/chunks/DmdO6ygw.js +0 -1
- package/dist/web/client/_app/immutable/chunks/HKNo9LID.js +0 -5
- package/dist/web/client/_app/immutable/chunks/U4ip-C0d.js +0 -2
- package/dist/web/client/_app/immutable/chunks/cgUjKIhX.js +0 -2
- package/dist/web/client/_app/immutable/entry/app.CGIBnoln.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.CJk8zB1j.js +0 -1
- package/dist/web/client/_app/immutable/nodes/0.CqlJ9a31.js +0 -1
- package/dist/web/client/_app/immutable/nodes/1.BQUZh2-w.js +0 -1
- package/dist/web/client/_app/immutable/nodes/2.CCV1YdgF.js +0 -1
- package/dist/web/client/_app/immutable/nodes/3.D9tDCdq8.js +0 -1
- package/dist/web/client/_app/immutable/nodes/4.BqPyNkFA.js +0 -6
- package/dist/web/server/chunks/0-BHWsmCJv.js +0 -23
- package/dist/web/server/chunks/0-BHWsmCJv.js.map +0 -1
- package/dist/web/server/chunks/1-YRx6A8Tm.js.map +0 -1
- package/dist/web/server/chunks/2-eC6JuGAo.js +0 -22
- package/dist/web/server/chunks/2-eC6JuGAo.js.map +0 -1
- package/dist/web/server/chunks/3-Bk-wV20p.js +0 -32
- package/dist/web/server/chunks/3-Bk-wV20p.js.map +0 -1
- package/dist/web/server/chunks/4-nteBgDrW.js +0 -21
- package/dist/web/server/chunks/4-nteBgDrW.js.map +0 -1
- package/dist/web/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang-Bt4B0-oi.js +0 -35
- package/dist/web/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang-Bt4B0-oi.js.map +0 -1
- package/dist/web/server/chunks/_layout.svelte-BIF9eZCY.js +0 -453
- package/dist/web/server/chunks/_layout.svelte-BIF9eZCY.js.map +0 -1
- package/dist/web/server/chunks/_page.svelte-Be6iabRn.js +0 -34
- package/dist/web/server/chunks/_page.svelte-Be6iabRn.js.map +0 -1
- package/dist/web/server/chunks/_page.svelte-C_fGJVSE.js +0 -576
- package/dist/web/server/chunks/_page.svelte-C_fGJVSE.js.map +0 -1
- package/dist/web/server/chunks/_page.svelte-CnfJk6cu.js +0 -2722
- package/dist/web/server/chunks/_page.svelte-CnfJk6cu.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-3WAmKvn2.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-BPpMOZCm.js +0 -24
- package/dist/web/server/chunks/_server.ts-BPpMOZCm.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-BUKgRb6U.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-BrF3od0O.js +0 -45
- package/dist/web/server/chunks/_server.ts-BrF3od0O.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-C4oPmOJR.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-CSqdCNGi.js +0 -21
- package/dist/web/server/chunks/_server.ts-CSqdCNGi.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-DI9fzUo9.js +0 -52
- package/dist/web/server/chunks/_server.ts-DI9fzUo9.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-DNjJTClI.js +0 -46
- package/dist/web/server/chunks/_server.ts-DNjJTClI.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-DdbOAkOj.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-Df2isGQc.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-Vpw25_-3.js +0 -12
- package/dist/web/server/chunks/_server.ts-Vpw25_-3.js.map +0 -1
- package/dist/web/server/chunks/_server.ts-WldRpSRi.js.map +0 -1
- package/dist/web/server/chunks/alert-dialog-description-DDA6u-nS.js +0 -2890
- package/dist/web/server/chunks/alert-dialog-description-DDA6u-nS.js.map +0 -1
- package/dist/web/server/chunks/auth-DrUf-v4J.js +0 -51
- package/dist/web/server/chunks/auth-DrUf-v4J.js.map +0 -1
- package/dist/web/server/chunks/button-D6xS9rHt.js +0 -2335
- package/dist/web/server/chunks/button-D6xS9rHt.js.map +0 -1
- package/dist/web/server/chunks/chunk-EKzHsMy_.js +0 -42
- package/dist/web/server/chunks/chunks-DmdqVYC7.js.map +0 -1
- package/dist/web/server/chunks/client-CUrSQijh.js.map +0 -1
- package/dist/web/server/chunks/clsx-FzI4_gi0.js +0 -332
- package/dist/web/server/chunks/clsx-FzI4_gi0.js.map +0 -1
- package/dist/web/server/chunks/error.svelte-D-c-9pTE.js.map +0 -1
- package/dist/web/server/chunks/events-BDBlYddw.js +0 -89
- package/dist/web/server/chunks/events-BDBlYddw.js.map +0 -1
- package/dist/web/server/chunks/exports-CCurQ-Tl.js.map +0 -1
- package/dist/web/server/chunks/hooks.server-BK1bopsh.js.map +0 -1
- package/dist/web/server/chunks/index2-BQnysSj-.js +0 -2588
- package/dist/web/server/chunks/index2-BQnysSj-.js.map +0 -1
- package/dist/web/server/chunks/internal-DLENj6YI.js.map +0 -1
- package/dist/web/server/chunks/pane-Dg3pKvsm.js +0 -94
- package/dist/web/server/chunks/pane-Dg3pKvsm.js.map +0 -1
- package/dist/web/server/chunks/sessions-json-DgfkCLO7.js.map +0 -1
- package/dist/web/server/chunks/sessions.svelte-Ds82MvkB.js +0 -178
- package/dist/web/server/chunks/sessions.svelte-Ds82MvkB.js.map +0 -1
- package/dist/web/server/chunks/state.svelte-xeAZvWZ6.js +0 -7
- package/dist/web/server/chunks/state.svelte-xeAZvWZ6.js.map +0 -1
- package/dist/web/server/chunks/ws-handlers-B4r5eSP2.js.map +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_layout.WptSHSUl.css +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DldLgTc-.css +0 -1
- package/web/.svelte-kit/adapter-bun/_app/immutable/assets/_page.DoNWy7tW.css +0 -1
- package/web/.svelte-kit/adapter-bun/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +0 -49
- package/web/.svelte-kit/adapter-bun/chunks/alert-dialog-description.js +0 -2670
- package/web/.svelte-kit/adapter-bun/chunks/auth.js +0 -59
- package/web/.svelte-kit/adapter-bun/chunks/context.js +0 -133
- package/web/.svelte-kit/adapter-bun/chunks/events.js +0 -121
- package/web/.svelte-kit/adapter-bun/chunks/false.js +0 -4
- package/web/.svelte-kit/adapter-bun/chunks/pane.js +0 -82
- package/web/.svelte-kit/adapter-bun/chunks/sessions.svelte.js +0 -229
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/auth/login/_server.ts.js +0 -22
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/auth/logout/_server.ts.js +0 -9
- package/web/.svelte-kit/adapter-bun/entries/endpoints/api/beads/_server.ts.js +0 -22
- package/web/.svelte-kit/adapter-bun/entries/pages/login/_page.server.ts.js +0 -15
- package/web/.svelte-kit/adapter-bun/entries/pages/login/_page.svelte.js +0 -37
- package/web/.svelte-kit/adapter-bun/nodes/4.js +0 -8
- package/web/.svelte-kit/adapter-node/.vite/manifest.json +0 -223
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_layout.4NiX29PU.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.BEMzYUGV.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DOJn7TG7.css +0 -1
- package/web/.svelte-kit/adapter-node/chunks/context.js +0 -121
- package/web/.svelte-kit/adapter-node/chunks/environment.js +0 -34
- package/web/.svelte-kit/adapter-node/chunks/exports.js +0 -174
- package/web/.svelte-kit/adapter-node/chunks/false.js +0 -4
- package/web/.svelte-kit/adapter-node/chunks/index.js +0 -59
- package/web/.svelte-kit/adapter-node/chunks/index2.js +0 -2710
- package/web/.svelte-kit/adapter-node/chunks/internal.js +0 -1005
- package/web/.svelte-kit/adapter-node/chunks/sessions-json.js +0 -109
- package/web/.svelte-kit/adapter-node/chunks/sessions.svelte.js +0 -67
- package/web/.svelte-kit/adapter-node/chunks/shared.js +0 -542
- package/web/.svelte-kit/adapter-node/chunks/state.svelte.js +0 -16
- package/web/.svelte-kit/adapter-node/chunks/utils.js +0 -43
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/browse/_server.ts.js +0 -50
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/health/_server.ts.js +0 -7
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/projects/new-session/_server.ts.js +0 -44
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/_server.ts.js +0 -20
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/kill/_server.ts.js +0 -30
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/send/_server.ts.js +0 -22
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_server.ts.js +0 -126
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_target_/output/_server.ts.js +0 -14
- package/web/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +0 -44
- package/web/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +0 -12
- package/web/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +0 -87
- package/web/.svelte-kit/adapter-node/entries/pages/session/_target_/_page.svelte.js +0 -76
- package/web/.svelte-kit/adapter-node/index.js +0 -3864
- package/web/.svelte-kit/adapter-node/internal.js +0 -13
- package/web/.svelte-kit/adapter-node/manifest-full.js +0 -103
- package/web/.svelte-kit/adapter-node/manifest.js +0 -107
- package/web/.svelte-kit/adapter-node/nodes/0.js +0 -8
- package/web/.svelte-kit/adapter-node/nodes/1.js +0 -8
- package/web/.svelte-kit/adapter-node/nodes/2.js +0 -8
- package/web/.svelte-kit/adapter-node/nodes/3.js +0 -8
- package/web/.svelte-kit/adapter-node/remote-entry.js +0 -541
- package/web/.svelte-kit/generated/client/nodes/4.js +0 -1
- package/web/.svelte-kit/generated/client-optimized/nodes/4.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.WptSHSUl.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/assets/4.DoNWy7tW.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/assets/AllSessionsPanel.CGHY3HLy.css +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/-3mUPuLP.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/B5U4_V3d.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BHwiZXRv.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/C9P-coqM.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Cegv0r8x.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DU91Ml7U.js +0 -3
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DmdO6ygw.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/HKNo9LID.js +0 -5
- package/web/.svelte-kit/output/client/_app/immutable/chunks/U4ip-C0d.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/cgUjKIhX.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.CGIBnoln.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.CJk8zB1j.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.CqlJ9a31.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.BQUZh2-w.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.CCV1YdgF.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.D9tDCdq8.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.BqPyNkFA.js +0 -6
- package/web/.svelte-kit/output/server/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +0 -1
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.WptSHSUl.css +0 -1
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.DldLgTc-.css +0 -1
- package/web/.svelte-kit/output/server/_app/immutable/assets/_page.DoNWy7tW.css +0 -1
- package/web/.svelte-kit/output/server/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +0 -49
- package/web/.svelte-kit/output/server/chunks/alert-dialog-description.js +0 -2670
- package/web/.svelte-kit/output/server/chunks/auth.js +0 -59
- package/web/.svelte-kit/output/server/chunks/context.js +0 -133
- package/web/.svelte-kit/output/server/chunks/events.js +0 -121
- package/web/.svelte-kit/output/server/chunks/false.js +0 -4
- package/web/.svelte-kit/output/server/chunks/pane.js +0 -82
- package/web/.svelte-kit/output/server/chunks/sessions.svelte.js +0 -229
- package/web/.svelte-kit/output/server/entries/endpoints/api/auth/login/_server.ts.js +0 -22
- package/web/.svelte-kit/output/server/entries/endpoints/api/auth/logout/_server.ts.js +0 -9
- package/web/.svelte-kit/output/server/entries/endpoints/api/beads/_server.ts.js +0 -22
- package/web/.svelte-kit/output/server/entries/pages/login/_page.server.ts.js +0 -15
- package/web/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +0 -37
- package/web/.svelte-kit/output/server/nodes/4.js +0 -8
- package/web/.svelte-kit/types/src/routes/api/auth/login/$types.d.ts +0 -10
- package/web/.svelte-kit/types/src/routes/api/auth/logout/$types.d.ts +0 -10
- package/web/.svelte-kit/types/src/routes/login/$types.d.ts +0 -25
- package/web/.svelte-kit/types/src/routes/login/proxy+page.server.ts +0 -19
- package/web/src/lib/components/BeadsPanel.svelte +0 -146
- package/web/src/lib/components/IssueItem.svelte +0 -287
- package/web/src/lib/components/SessionsSidebar.svelte +0 -312
- package/web/src/lib/server/auth.ts +0 -90
- package/web/src/lib/stores/beads.svelte.ts +0 -163
- package/web/src/lib/stores/input-injection.svelte.ts +0 -39
- package/web/src/lib/types/terminal.ts +0 -31
- package/web/src/lib/utils/terminal-parser.ts +0 -239
- package/web/src/routes/api/auth/login/+server.ts +0 -34
- package/web/src/routes/api/auth/logout/+server.ts +0 -10
- package/web/src/routes/api/beads/+server.ts +0 -28
- package/web/src/routes/login/+page.server.ts +0 -18
- package/web/src/routes/login/+page.svelte +0 -69
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
version:
|
|
10
|
+
description: "Version to publish (without leading v); defaults to package.json"
|
|
11
|
+
required: false
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
id-token: write # required for npm trusted publishing (OIDC)
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
publish:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
|
|
25
|
+
- uses: oven-sh/setup-bun@v2
|
|
26
|
+
with:
|
|
27
|
+
bun-version: "1.3.0"
|
|
28
|
+
|
|
29
|
+
- uses: actions/setup-node@v4
|
|
30
|
+
with:
|
|
31
|
+
node-version: "22"
|
|
32
|
+
registry-url: "https://registry.npmjs.org"
|
|
33
|
+
|
|
34
|
+
- name: Sanity-check tag matches package.json
|
|
35
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
36
|
+
run: |
|
|
37
|
+
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
38
|
+
PKG_VERSION=$(node -p "require('./package.json').version")
|
|
39
|
+
if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
|
|
40
|
+
echo "Tag $TAG_VERSION does not match package.json $PKG_VERSION"
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
- name: Install dependencies
|
|
45
|
+
run: bun install --frozen-lockfile
|
|
46
|
+
|
|
47
|
+
- name: Build CLI + web
|
|
48
|
+
run: bun run build
|
|
49
|
+
|
|
50
|
+
- name: Publish to npm (trusted publishing, no token)
|
|
51
|
+
# npm 11.5.1+ required for OIDC trusted publishing without an auth token.
|
|
52
|
+
# `npx npm@latest` avoids overwriting the runner's bundled npm mid-process.
|
|
53
|
+
run: npx -y npm@latest publish --access public --provenance
|
|
54
|
+
|
|
55
|
+
- name: Create GitHub release
|
|
56
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
57
|
+
uses: softprops/action-gh-release@v2
|
|
58
|
+
with:
|
|
59
|
+
generate_release_notes: true
|
package/CLAUDE.md
CHANGED
|
@@ -4,10 +4,10 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
4
4
|
|
|
5
5
|
## Development Server
|
|
6
6
|
|
|
7
|
-
Dev server runs via Vite with HMR at **http://localhost:
|
|
7
|
+
Dev server runs via Vite with HMR at **http://localhost:3434** (or `--port` to change). Prod server uses :3456.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
bun run dev:serve # Start dev server
|
|
10
|
+
bun run dev:serve # Start dev server on :3434
|
|
11
11
|
bun run dev:serve --port 3456 # Custom port
|
|
12
12
|
bun run dev:serve --host 0.0.0.0 # LAN access
|
|
13
13
|
```
|
|
@@ -19,19 +19,18 @@ After each change, check tmux pane `0:1.1` to verify HMR worked. If the server d
|
|
|
19
19
|
## Build & Development Commands
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
bun
|
|
23
|
-
bun run build
|
|
24
|
-
bun run build:
|
|
25
|
-
bun run
|
|
26
|
-
bun
|
|
27
|
-
bun run
|
|
28
|
-
bun
|
|
22
|
+
bun src/cli.ts <command> # Run CLI directly from source (no build needed)
|
|
23
|
+
bun run build # Build CLI + SvelteKit web app
|
|
24
|
+
bun run build:cli # Build CLI only (TypeScript)
|
|
25
|
+
bun run build:web # Build SvelteKit web app only
|
|
26
|
+
bun run dev:serve # Vite dev server with HMR
|
|
27
|
+
bun run prod:restart # Kill, rebuild, and relaunch prod server on :3456 (detached)
|
|
28
|
+
bun test # Run vitest tests
|
|
29
|
+
bun run lint # ESLint check
|
|
30
|
+
bun run format # Prettier formatting
|
|
29
31
|
```
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
bun dist/cli.js serve --port 3456 --host 0.0.0.0
|
|
34
|
-
```
|
|
33
|
+
**Use `bun src/cli.ts` for development** — bun runs TypeScript directly, no build step needed. Only build for production (`bun dist/cli.js`).
|
|
35
34
|
|
|
36
35
|
Run a single test file:
|
|
37
36
|
```bash
|
package/CONTEXT.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Glossary
|
|
2
|
+
|
|
3
|
+
## Attachment
|
|
4
|
+
|
|
5
|
+
A file or image the user is staging to send into Claude Code on the **next** prompt.
|
|
6
|
+
|
|
7
|
+
An attachment has two layers:
|
|
8
|
+
|
|
9
|
+
- **Staging (prompt-scoped)** — the chip in the input row. Cleared from the UI
|
|
10
|
+
when the prompt fires. Each prompt starts with an empty staging area.
|
|
11
|
+
- **Backing file (session-scoped)** — bytes persisted on disk under the session's
|
|
12
|
+
attachment directory. Kept for the lifetime of the session and removed only
|
|
13
|
+
when the session is killed. This avoids racing Claude Code's read of `@/path`.
|
|
14
|
+
|
|
15
|
+
Once a prompt is sent, the attached bytes also live inside Claude Code's own
|
|
16
|
+
conversation context (as multimodal message content). Re-referencing the same
|
|
17
|
+
image in later prompts ("look at the image again") works because Claude Code
|
|
18
|
+
already has the bytes in context; it does not need to re-open the backing file.
|
|
19
|
+
|
|
20
|
+
Not to be confused with **Screenshot**: screenshots are session artifacts emitted
|
|
21
|
+
by Claude Code hooks and displayed in the sidebar. Screenshots are read-only
|
|
22
|
+
context surfaced to the user; attachments are user-supplied payloads sent into
|
|
23
|
+
Claude Code.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">claude-mux</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong>
|
|
4
|
+
<strong>Real-time web dashboard for monitoring and controlling multiple Claude Code sessions</strong>
|
|
5
5
|
</p>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
@@ -9,158 +9,93 @@
|
|
|
9
9
|
<a href="https://www.npmjs.com/package/claude-mux"><img src="https://img.shields.io/npm/v/claude-mux?style=flat-square&color=blue" alt="npm version"></a>
|
|
10
10
|
<a href="https://www.npmjs.com/package/claude-mux"><img src="https://img.shields.io/npm/dm/claude-mux?style=flat-square&color=green" alt="npm downloads"></a>
|
|
11
11
|
<a href="https://github.com/christinoleo/claude-mux/blob/main/LICENSE"><img src="https://img.shields.io/github/license/christinoleo/claude-mux?style=flat-square" alt="license"></a>
|
|
12
|
-
<img src="https://img.shields.io/badge/
|
|
12
|
+
<img src="https://img.shields.io/badge/bun-%3E%3D1.0-f472b6?style=flat-square" alt="bun version">
|
|
13
13
|
<img src="https://img.shields.io/badge/platform-linux%20%7C%20macos-lightgrey?style=flat-square" alt="platform">
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
|
-
<a href="#features">Features</a>
|
|
18
|
-
<a href="#installation">Installation</a>
|
|
19
|
-
<a href="#quick-start">Quick Start</a>
|
|
20
|
-
<a href="#
|
|
21
|
-
<a href="#how-it-works">
|
|
17
|
+
<a href="#features">Features</a> •
|
|
18
|
+
<a href="#installation">Installation</a> •
|
|
19
|
+
<a href="#quick-start">Quick Start</a> •
|
|
20
|
+
<a href="#cli-commands">CLI</a> •
|
|
21
|
+
<a href="#how-it-works">Architecture</a>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
## Screenshots
|
|
27
|
-
|
|
28
26
|
<p align="center">
|
|
29
|
-
<img src="docs/images/desktop-dashboard.png" alt="
|
|
30
|
-
<br>
|
|
31
|
-
<em>Dashboard view — Monitor all your Claude Code sessions at a glance</em>
|
|
27
|
+
<img src="docs/images/desktop-dashboard.png" alt="Dashboard" width="100%">
|
|
28
|
+
<br><em>Dashboard — sessions grouped by project with live state indicators</em>
|
|
32
29
|
</p>
|
|
33
30
|
|
|
34
31
|
<p align="center">
|
|
35
|
-
<img src="docs/images/desktop-session.png" alt="Session View
|
|
36
|
-
<br>
|
|
37
|
-
<em>Session view — Real-time terminal output with syntax highlighting</em>
|
|
32
|
+
<img src="docs/images/desktop-session.png" alt="Session View" width="100%">
|
|
33
|
+
<br><em>Session view — real-time ANSI terminal output with action toolbar</em>
|
|
38
34
|
</p>
|
|
39
35
|
|
|
40
36
|
<details>
|
|
41
|
-
<summary><strong>Mobile
|
|
37
|
+
<summary><strong>Mobile</strong></summary>
|
|
42
38
|
<br>
|
|
43
39
|
<p align="center">
|
|
44
40
|
<img src="docs/images/mobile-dashboard.png" alt="Mobile Dashboard" width="300">
|
|
45
41
|
|
|
46
42
|
<img src="docs/images/mobile-session.png" alt="Mobile Session" width="300">
|
|
47
43
|
</p>
|
|
48
|
-
<p align="center"><em>Fully responsive
|
|
44
|
+
<p align="center"><em>Fully responsive — control sessions from your phone</em></p>
|
|
49
45
|
</details>
|
|
50
46
|
|
|
51
47
|
---
|
|
52
48
|
|
|
53
49
|
## Features
|
|
54
50
|
|
|
55
|
-
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **
|
|
63
|
-
- **
|
|
64
|
-
- **
|
|
65
|
-
- **
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- **Fully responsive** — Works on desktop, tablet, and phone
|
|
69
|
-
- **Touch-friendly controls** — Large buttons for common actions
|
|
70
|
-
- **Quick action toolbar** — Send keys (Up, Down, Tab, Esc, Ctrl-C) with one tap
|
|
71
|
-
|
|
72
|
-
### Session Control
|
|
73
|
-
- **Send text input** — Type messages directly to Claude
|
|
74
|
-
- **Keyboard shortcuts** — Send special keys and key combinations
|
|
75
|
-
- **Terminal resize** — Fit tmux pane to browser viewport
|
|
76
|
-
- **Kill sessions** — Terminate Claude processes when needed
|
|
77
|
-
|
|
78
|
-
### Optional Features
|
|
79
|
-
- **Authentication** — Password-protect your dashboard
|
|
80
|
-
- **LAN access** — Monitor sessions from any device on your network
|
|
51
|
+
- **Live session monitoring** — WebSocket-powered, no polling. See state (busy/idle/waiting/permission) at a glance
|
|
52
|
+
- **Project grouping** — sessions organized by working directory with color-coded borders
|
|
53
|
+
- **ANSI terminal rendering** — real tmux colors via [ansi_up](https://github.com/drudru/ansi_up), toggleable
|
|
54
|
+
- **Session control** — send text, keys (Up/Down/Tab/Esc/Ctrl-C), Yes/No/Always quick buttons
|
|
55
|
+
- **Voice input** — local Whisper transcription (CPU or CUDA, auto-detected). Trigger with `F2`, `Pause`, or `Ctrl+\`` while the input is focused; press `Enter` to stop and submit, `Esc` or the `×` overlay to discard. Long-press the mic button for language, microphone, and auto-submit settings
|
|
56
|
+
- **Orchestrator pairing** — main + orchestrator sessions grouped together with role labels
|
|
57
|
+
- **Remote Control** — auto-detects Claude's `/rc` and opens it in a new window
|
|
58
|
+
- **Mobile-first** — touch toolbar, hamburger sidebar, swipe gestures
|
|
59
|
+
- **Screenshots panel** — view and dismiss captured screenshots
|
|
60
|
+
- **Dead pane detection** — visual indication when a tmux pane closes
|
|
61
|
+
- **Other tmux panes** — browse and view non-Claude panes too
|
|
62
|
+
- **Auth support** — optional password protection for LAN access
|
|
63
|
+
- **CLI scripting** — `send`, `wait`, `status`, `capture` commands for automation
|
|
81
64
|
|
|
82
65
|
---
|
|
83
66
|
|
|
84
67
|
## Installation
|
|
85
68
|
|
|
86
|
-
### From npm/bun (recommended)
|
|
87
|
-
|
|
88
69
|
```bash
|
|
89
70
|
bun install -g claude-mux
|
|
90
71
|
# or: npm install -g claude-mux
|
|
91
72
|
```
|
|
92
73
|
|
|
93
|
-
|
|
74
|
+
<details>
|
|
75
|
+
<summary><strong>From source</strong></summary>
|
|
94
76
|
|
|
95
77
|
```bash
|
|
96
78
|
git clone https://github.com/christinoleo/claude-mux.git
|
|
97
79
|
cd claude-mux
|
|
98
|
-
bun install
|
|
99
|
-
bun
|
|
100
|
-
bun link # Makes 'claude-mux' available globally
|
|
80
|
+
bun install && bun run build
|
|
81
|
+
bun link # makes 'claude-mux' available globally
|
|
101
82
|
```
|
|
83
|
+
</details>
|
|
102
84
|
|
|
103
85
|
---
|
|
104
86
|
|
|
105
87
|
## Quick Start
|
|
106
88
|
|
|
107
|
-
### 1. Run setup
|
|
108
|
-
|
|
109
89
|
```bash
|
|
90
|
+
# 1. Install hooks into Claude Code
|
|
110
91
|
claude-mux setup
|
|
111
|
-
```
|
|
112
92
|
|
|
113
|
-
|
|
114
|
-
- Create the data directory at `~/.claude-watch/`
|
|
115
|
-
- Install Claude Code hooks in `~/.claude/settings.json`
|
|
116
|
-
|
|
117
|
-
### 2. Start the web server
|
|
118
|
-
|
|
119
|
-
```bash
|
|
93
|
+
# 2. Start the web server
|
|
120
94
|
claude-mux serve --port 3456 --host 0.0.0.0
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### 3. Open the dashboard
|
|
124
|
-
|
|
125
|
-
Navigate to `http://localhost:3456` (or your machine's IP for LAN access).
|
|
126
|
-
|
|
127
|
-
### 4. Start using Claude Code
|
|
128
|
-
|
|
129
|
-
Any Claude Code session started after setup will appear in the dashboard automatically.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Web Interface
|
|
134
|
-
|
|
135
|
-
### Dashboard
|
|
136
|
-
|
|
137
|
-
The main dashboard shows all active Claude Code sessions organized by project:
|
|
138
|
-
|
|
139
|
-
| Element | Description |
|
|
140
|
-
|---------|-------------|
|
|
141
|
-
| **Project cards** | Sessions grouped by working directory |
|
|
142
|
-
| **Status indicators** | Busy, Idle, Waiting for input |
|
|
143
|
-
| **Current action** | Shows what Claude is currently doing |
|
|
144
|
-
| **Quick actions** | New session, kill session, refresh |
|
|
145
95
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
| Feature | Description |
|
|
151
|
-
|---------|-------------|
|
|
152
|
-
| **Live output** | Streams terminal content via WebSocket |
|
|
153
|
-
| **Syntax highlighting** | Color-coded messages and tool calls |
|
|
154
|
-
| **Text input** | Send messages to Claude |
|
|
155
|
-
| **Action buttons** | Up, Down, Space, Tab, Esc, Ctrl-C, etc. |
|
|
156
|
-
| **Tmux command** | Copy `tmux attach` command for direct access |
|
|
157
|
-
|
|
158
|
-
### Keyboard Shortcuts (in session view)
|
|
159
|
-
|
|
160
|
-
| Key | Action |
|
|
161
|
-
|-----|--------|
|
|
162
|
-
| `Enter` | Send message |
|
|
163
|
-
| `Shift+Enter` | New line in message |
|
|
96
|
+
# 3. Open http://localhost:3456 (or your LAN IP)
|
|
97
|
+
# 4. Start any Claude Code session — it appears automatically
|
|
98
|
+
```
|
|
164
99
|
|
|
165
100
|
---
|
|
166
101
|
|
|
@@ -168,183 +103,52 @@ Click any session to open the real-time terminal view:
|
|
|
168
103
|
|
|
169
104
|
| Command | Description |
|
|
170
105
|
|---------|-------------|
|
|
171
|
-
| `claude-mux serve` | Start
|
|
172
|
-
| `claude-mux setup` |
|
|
106
|
+
| `claude-mux serve` | Start web server (`--port`, `--host`, `--auth <password>`) |
|
|
107
|
+
| `claude-mux setup` | Install Claude Code hooks |
|
|
173
108
|
| `claude-mux uninstall` | Remove hooks and configuration |
|
|
174
|
-
| `claude-mux` |
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
claude-mux
|
|
180
|
-
|
|
181
|
-
Options:
|
|
182
|
-
-p, --port <number> Port to listen on (default: 45677)
|
|
183
|
-
-h, --host <string> Host to bind to (default: "localhost")
|
|
184
|
-
-a, --auth <password> Enable authentication with password
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Examples
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
# Start on custom port
|
|
191
|
-
claude-mux serve --port 8080
|
|
192
|
-
|
|
193
|
-
# Allow LAN access
|
|
194
|
-
claude-mux serve --host 0.0.0.0
|
|
195
|
-
|
|
196
|
-
# With authentication
|
|
197
|
-
claude-mux serve --host 0.0.0.0 --auth mysecretpassword
|
|
198
|
-
```
|
|
109
|
+
| `claude-mux send <target> [text]` | Send text or `--keys` to a session |
|
|
110
|
+
| `claude-mux status <target>` | Get session state as JSON |
|
|
111
|
+
| `claude-mux wait <target>` | Block until session reaches `--state` (default: idle,waiting,permission) |
|
|
112
|
+
| `claude-mux new-session --cwd <path>` | Spawn a new detached Claude Code session |
|
|
113
|
+
| `claude-mux capture <target>` | Capture tmux pane output (`--lines N`) |
|
|
114
|
+
| `claude-mux` | TUI dashboard (legacy, requires tmux) |
|
|
199
115
|
|
|
200
116
|
---
|
|
201
117
|
|
|
202
118
|
## How It Works
|
|
203
119
|
|
|
204
|
-
### Architecture
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
|
208
|
-
│ Claude Code │────▶│ Hook Scripts │────▶│ JSON Files │
|
|
209
|
-
│ (running) │ │ (on events) │ │ (~/.claude-watch/sessions/)
|
|
210
|
-
└─────────────────┘ └──────────────────┘ └────────┬────────┘
|
|
211
|
-
│
|
|
212
|
-
┌─────────────────┐ ┌──────────────────┐ │
|
|
213
|
-
│ tmux panes │────▶│ Pane Capture │──────────────┤
|
|
214
|
-
│ (terminal) │ │ (WebSocket) │ │
|
|
215
|
-
└─────────────────┘ └──────────────────┘ │
|
|
216
|
-
▼
|
|
217
|
-
┌──────────────────┐ ┌─────────────────┐
|
|
218
|
-
│ Web Browser │◀───▶│ SvelteKit │
|
|
219
|
-
│ (dashboard) │ │ (WebSocket) │
|
|
220
|
-
└──────────────────┘ └─────────────────┘
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### Claude Code Hooks
|
|
224
|
-
|
|
225
|
-
claude-mux uses [Claude Code hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) to track session state:
|
|
226
|
-
|
|
227
|
-
| Hook | Purpose |
|
|
228
|
-
|------|---------|
|
|
229
|
-
| `SessionStart` | Register new session with PID and working directory |
|
|
230
|
-
| `UserPromptSubmit` | Mark session as busy |
|
|
231
|
-
| `PreToolUse` | Update status with current tool name |
|
|
232
|
-
| `Stop` | Mark session as idle when turn ends |
|
|
233
|
-
| `Notification` | Handle permission requests and questions |
|
|
234
|
-
|
|
235
|
-
### Real-time Updates
|
|
236
|
-
|
|
237
|
-
- **WebSocket connections** for instant updates (no polling)
|
|
238
|
-
- **File watcher** monitors session state changes
|
|
239
|
-
- **Pane capture** streams terminal output every 200ms
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## Terminal UI (Legacy)
|
|
244
|
-
|
|
245
|
-
claude-mux also includes a terminal-based dashboard for use inside tmux:
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
claude-mux # Requires tmux
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
| Key | Action |
|
|
252
|
-
|-----|--------|
|
|
253
|
-
| `j` / `↓` | Move selection down |
|
|
254
|
-
| `k` / `↑` | Move selection up |
|
|
255
|
-
| `Enter` | Jump to selected session |
|
|
256
|
-
| `q` | Quit dashboard |
|
|
257
|
-
|
|
258
|
-
Press `prefix + W` from any tmux session to jump to the dashboard.
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Development
|
|
263
|
-
|
|
264
|
-
### Prerequisites
|
|
265
|
-
|
|
266
|
-
- Node.js >= 18 (or Bun)
|
|
267
|
-
- tmux (for full functionality)
|
|
268
|
-
|
|
269
|
-
### Setup
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
git clone https://github.com/christinoleo/claude-mux.git
|
|
273
|
-
cd claude-mux
|
|
274
|
-
bun install
|
|
275
120
|
```
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
121
|
+
Claude Code events ──> Hook script ──> JSON files (~/.claude-mux/sessions/)
|
|
122
|
+
|
|
|
123
|
+
File watcher (500ms)
|
|
124
|
+
|
|
|
125
|
+
WebSocket broadcast
|
|
126
|
+
|
|
|
127
|
+
Browser <──> SvelteKit server
|
|
281
128
|
```
|
|
282
129
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
```bash
|
|
286
|
-
bun run build # Build CLI + web app
|
|
287
|
-
bun run build:cli # Build CLI only
|
|
288
|
-
bun run build:web # Build web app only
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
### Testing
|
|
292
|
-
|
|
293
|
-
```bash
|
|
294
|
-
bun test # Run tests
|
|
295
|
-
bun run lint # Lint code
|
|
296
|
-
bun run format # Format code
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Project Structure
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
claude-mux/
|
|
303
|
-
├── src/ # CLI and hooks
|
|
304
|
-
│ ├── cli.ts # Entry point
|
|
305
|
-
│ ├── commands/ # CLI commands (serve, setup, tui)
|
|
306
|
-
│ ├── hooks/ # Claude Code hook handler
|
|
307
|
-
│ └── server/ # File watcher, WebSocket handlers
|
|
308
|
-
├── web/ # SvelteKit web app
|
|
309
|
-
│ ├── src/
|
|
310
|
-
│ │ ├── lib/
|
|
311
|
-
│ │ │ ├── components/ # UI components
|
|
312
|
-
│ │ │ ├── stores/ # Svelte stores (sessions, terminal, preferences)
|
|
313
|
-
│ │ │ └── utils/ # Terminal parser, helpers
|
|
314
|
-
│ │ └── routes/ # Pages and API routes
|
|
315
|
-
│ └── svelte.config.js
|
|
316
|
-
└── docs/
|
|
317
|
-
└── images/ # Screenshots
|
|
318
|
-
```
|
|
130
|
+
**Hooks** run inside Claude Code's process and write session state to JSON on every event (start, prompt, tool use, stop, notification). The **SvelteKit server** watches those files and pushes updates to connected browsers via WebSocket. Terminal output is captured directly from tmux panes.
|
|
319
131
|
|
|
320
132
|
---
|
|
321
133
|
|
|
322
134
|
## Troubleshooting
|
|
323
135
|
|
|
324
|
-
|
|
136
|
+
**Sessions not appearing** — Run `claude-mux setup`, then restart Claude Code sessions (hooks load at startup).
|
|
325
137
|
|
|
326
|
-
|
|
327
|
-
2. Restart any running Claude Code sessions (hooks are loaded at startup)
|
|
328
|
-
3. Check that `~/.claude/settings.json` contains claude-mux hooks
|
|
138
|
+
**Can't connect from another device** — Use `--host 0.0.0.0` and check your firewall.
|
|
329
139
|
|
|
330
|
-
|
|
140
|
+
**Status not updating** — Verify hooks: `grep claude-mux ~/.claude/settings.json`
|
|
331
141
|
|
|
332
|
-
|
|
333
|
-
2. Check your firewall allows the port
|
|
334
|
-
3. Use your machine's LAN IP, not `localhost`
|
|
335
|
-
|
|
336
|
-
### Status not updating
|
|
337
|
-
|
|
338
|
-
1. Check hooks are installed: `grep claude-mux ~/.claude/settings.json`
|
|
339
|
-
2. Restart Claude Code sessions to pick up new hooks
|
|
142
|
+
**Voice transcription slow on first use** — The first invocation builds whisper.cpp and downloads a Whisper model into `~/.claude-mux/voice/`. Subsequent runs reuse the cache. CUDA is used automatically if `nvidia-smi` and `nvcc` are present.
|
|
340
143
|
|
|
341
144
|
---
|
|
342
145
|
|
|
343
146
|
## Requirements
|
|
344
147
|
|
|
345
|
-
-
|
|
346
|
-
-
|
|
347
|
-
-
|
|
148
|
+
- [Bun](https://bun.sh) >= 1.0
|
|
149
|
+
- tmux
|
|
150
|
+
- Claude Code with hooks support
|
|
151
|
+
- Optional, for voice input: a working C/C++ toolchain (whisper.cpp builds on first use); NVIDIA CUDA toolkit for GPU transcription
|
|
348
152
|
|
|
349
153
|
---
|
|
350
154
|
|
|
@@ -352,15 +156,6 @@ claude-mux/
|
|
|
352
156
|
|
|
353
157
|
MIT
|
|
354
158
|
|
|
355
|
-
---
|
|
356
|
-
|
|
357
159
|
## Contributing
|
|
358
160
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
1. Fork the repository
|
|
362
|
-
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
363
|
-
3. Run tests (`bun test`)
|
|
364
|
-
4. Commit your changes
|
|
365
|
-
5. Push to the branch
|
|
366
|
-
6. Open a Pull Request
|
|
161
|
+
PRs welcome. Fork, branch, test (`bun test`), and open a PR.
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SessionAgent } from "./db/index.js";
|
|
2
|
+
export declare const AGENT_IDS: readonly ["claude", "gemini", "copilot"];
|
|
3
|
+
export interface AgentMeta {
|
|
4
|
+
icon: string;
|
|
5
|
+
color: string;
|
|
6
|
+
label: string;
|
|
7
|
+
command: string;
|
|
8
|
+
argv: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare const AGENTS: Record<SessionAgent, AgentMeta>;
|
|
11
|
+
export declare function parseAgent(value: unknown): SessionAgent;
|
|
12
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,SAAS,0CAA2C,CAAC;AAElE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,CAsBlD,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAEvD"}
|
package/dist/agents.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const AGENT_IDS = ["claude", "gemini", "copilot"];
|
|
2
|
+
export const AGENTS = {
|
|
3
|
+
claude: {
|
|
4
|
+
icon: "mdi:creation",
|
|
5
|
+
color: "#d97757",
|
|
6
|
+
label: "Claude Code",
|
|
7
|
+
command: "claude --dangerously-skip-permissions",
|
|
8
|
+
argv: ["env", "-u", "CLAUDECODE", "claude", "--dangerously-skip-permissions"],
|
|
9
|
+
},
|
|
10
|
+
gemini: {
|
|
11
|
+
icon: "mdi:google",
|
|
12
|
+
color: "#4285f4",
|
|
13
|
+
label: "Gemini CLI",
|
|
14
|
+
command: "gemini --yolo",
|
|
15
|
+
argv: ["gemini", "--yolo"],
|
|
16
|
+
},
|
|
17
|
+
copilot: {
|
|
18
|
+
icon: "mdi:github",
|
|
19
|
+
color: "#ddd",
|
|
20
|
+
label: "GitHub Copilot CLI",
|
|
21
|
+
command: "copilot --allow-all-tools",
|
|
22
|
+
argv: ["copilot", "--allow-all-tools"],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export function parseAgent(value) {
|
|
26
|
+
return AGENT_IDS.includes(value) ? value : "claude";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAUlE,MAAM,CAAC,MAAM,MAAM,GAAoC;IACrD,MAAM,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,uCAAuC;QAChD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,gCAAgC,CAAC;KAC9E;IACD,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC;KACvC;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAqB,CAAC,CAAC,CAAC,CAAE,KAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxF,CAAC"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
2
|
import { program } from "commander";
|
|
3
|
-
import { createServeCommand, createSetupCommand, createUninstallCommand, runTui, runServe, } from "./commands/index.js";
|
|
3
|
+
import { createServeCommand, createSetupCommand, createUninstallCommand, createSendCommand, createWaitIdleCommand, createStatusCommand, createCaptureCommand, createNewSessionCommand, createUpdateCommand, runTui, runServe, } from "./commands/index.js";
|
|
4
4
|
import { runSetup, runCleanup } from "./setup/index.js";
|
|
5
|
-
import { DEFAULT_SERVER_PORT } from "./utils/paths.js";
|
|
5
|
+
import { DEFAULT_SERVER_PORT, migrateLegacyDataDir } from "./utils/paths.js";
|
|
6
6
|
import { VERSION } from "./utils/version.js";
|
|
7
|
+
migrateLegacyDataDir();
|
|
7
8
|
// Deprecation warning helper
|
|
8
9
|
function deprecationWarning(oldFlag, newCommand) {
|
|
9
10
|
console.warn(`\x1b[33m⚠ Warning: --${oldFlag} is deprecated. Use "claude-mux ${newCommand}" instead.\x1b[0m`);
|
|
@@ -17,6 +18,12 @@ program
|
|
|
17
18
|
program.addCommand(createServeCommand());
|
|
18
19
|
program.addCommand(createSetupCommand());
|
|
19
20
|
program.addCommand(createUninstallCommand());
|
|
21
|
+
program.addCommand(createSendCommand());
|
|
22
|
+
program.addCommand(createWaitIdleCommand());
|
|
23
|
+
program.addCommand(createStatusCommand());
|
|
24
|
+
program.addCommand(createCaptureCommand());
|
|
25
|
+
program.addCommand(createNewSessionCommand());
|
|
26
|
+
program.addCommand(createUpdateCommand());
|
|
20
27
|
// BACKWARD COMPATIBILITY: Support old flags on root command
|
|
21
28
|
program
|
|
22
29
|
.option("--setup", "Run interactive setup wizard (deprecated: use 'setup' command)")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,MAAM,EACN,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,MAAM,EACN,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,oBAAoB,EAAE,CAAC;AAEvB,6BAA6B;AAC7B,SAAS,kBAAkB,CAAC,OAAe,EAAE,UAAkB;IAC7D,OAAO,CAAC,IAAI,CACV,wBAAwB,OAAO,mCAAmC,UAAU,mBAAmB,CAChG,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,uBAAuB;AACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC7C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,4DAA4D;AAC5D,OAAO;KACJ,MAAM,CAAC,SAAS,EAAE,gEAAgE,CAAC;KACnF,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,MAAM,CAAC,SAAS,EAAE,uEAAuE,CAAC;KAC1F,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;KACpG,MAAM,CAAC,wBAAwB,EAAE,sCAAsC,EAAE,WAAW,CAAC,CAAC;AAEzF,oCAAoC;AACpC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACrH,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,qDAAqD;AACrD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/B,iCAAiC;IACjC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kDAAkD;IAClD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,2CAA2C;IAC3C,MAAM,MAAM,CAAC;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,SAAS;QACvB,IAAI,EAAE,OAAO,CAAC,SAAS;KACxB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
|