claude-mux 0.7.1 → 0.9.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 +38 -13
- package/CONTEXT.md +23 -0
- package/README.md +100 -257
- 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.js +10 -2
- 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 +8 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +8 -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/service.d.ts +3 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +154 -0
- package/dist/commands/service.js.map +1 -0
- 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/BIuG5Qqu.js +1 -0
- package/dist/web/client/_app/immutable/chunks/Bj8d0LuM.js +1 -0
- package/dist/web/client/_app/immutable/chunks/CGb10hB5.js +1 -0
- package/dist/web/client/_app/immutable/chunks/ClwveEwa.js +3 -0
- package/dist/web/client/_app/immutable/chunks/Cq1Dbx4Z.js +1 -0
- package/dist/web/client/_app/immutable/chunks/D7LHlC1M.js +2 -0
- package/dist/web/client/_app/immutable/chunks/DJ24Tldm.js +69 -0
- package/dist/web/client/_app/immutable/entry/app.--CjzkSO.js +2 -0
- package/dist/web/client/_app/immutable/entry/start.D4AuhR4O.js +1 -0
- package/dist/web/client/_app/immutable/nodes/0.BA0ffjuI.js +1 -0
- package/dist/web/client/_app/immutable/nodes/1.0vn7u2tx.js +1 -0
- package/dist/web/client/_app/immutable/nodes/2.BdBKTxl6.js +1 -0
- package/dist/web/client/_app/immutable/nodes/3.DqYZlAWl.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-DjVZUt8p.js +40 -0
- package/dist/web/server/chunks/0-DjVZUt8p.js.map +1 -0
- package/dist/web/server/chunks/{1-CPgO8U7d.js → 1-DAqMo8Wb.js} +7 -8
- package/dist/web/server/chunks/1-DAqMo8Wb.js.map +1 -0
- package/dist/web/server/chunks/2-CR4pAIvi.js +19 -0
- package/dist/web/server/chunks/2-CR4pAIvi.js.map +1 -0
- package/dist/web/server/chunks/3-Bkv2-jfN.js +24 -0
- package/dist/web/server/chunks/3-Bkv2-jfN.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/package.json +6 -4
- package/scripts/install.sh +85 -0
- package/src/agents.ts +39 -0
- package/src/cli.ts +17 -1
- package/src/commands/capture.ts +38 -0
- package/src/commands/index.ts +8 -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/service.ts +180 -0
- 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 -88
- 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 +72 -120
- 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/BIuG5Qqu.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Bj8d0LuM.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CGb10hB5.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/ClwveEwa.js +3 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Cq1Dbx4Z.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/DJ24Tldm.js +69 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.--CjzkSO.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.D4AuhR4O.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.BA0ffjuI.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.0vn7u2tx.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.BdBKTxl6.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.DqYZlAWl.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/BGcEgn7w.js +0 -3
- package/dist/web/client/_app/immutable/chunks/BHwiZXRv.js +0 -1
- package/dist/web/client/_app/immutable/chunks/By6CYjmE.js +0 -1
- package/dist/web/client/_app/immutable/chunks/C9P-coqM.js +0 -1
- package/dist/web/client/_app/immutable/chunks/CR5jMWGV.js +0 -5
- package/dist/web/client/_app/immutable/chunks/Cegv0r8x.js +0 -1
- 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.DmtnygN7.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.fYmelGlC.js +0 -1
- package/dist/web/client/_app/immutable/nodes/0.DGDAdwT5.js +0 -1
- package/dist/web/client/_app/immutable/nodes/1.Cg8dWgUN.js +0 -1
- package/dist/web/client/_app/immutable/nodes/2.DItUEo3e.js +0 -1
- package/dist/web/client/_app/immutable/nodes/3.dHui0twF.js +0 -1
- package/dist/web/client/_app/immutable/nodes/4.CiEHP0cr.js +0 -6
- package/dist/web/server/chunks/0-BmRg-l2z.js +0 -23
- package/dist/web/server/chunks/0-BmRg-l2z.js.map +0 -1
- package/dist/web/server/chunks/1-CPgO8U7d.js.map +0 -1
- package/dist/web/server/chunks/2--ZO5fZp_.js +0 -22
- package/dist/web/server/chunks/2--ZO5fZp_.js.map +0 -1
- package/dist/web/server/chunks/3-7HqSep9c.js +0 -32
- package/dist/web/server/chunks/3-7HqSep9c.js.map +0 -1
- package/dist/web/server/chunks/4-C1PCdmY0.js +0 -21
- package/dist/web/server/chunks/4-C1PCdmY0.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 -408
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/AllSessionsPanel.BKhqOrbV.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_layout.WptSHSUl.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DldLgTc-.css +0 -1
- package/web/.svelte-kit/adapter-node/_app/immutable/assets/_page.DoNWy7tW.css +0 -1
- package/web/.svelte-kit/adapter-node/chunks/AllSessionsPanel.svelte_svelte_type_style_lang.js +0 -49
- package/web/.svelte-kit/adapter-node/chunks/alert-dialog-description.js +0 -2670
- package/web/.svelte-kit/adapter-node/chunks/auth.js +0 -59
- package/web/.svelte-kit/adapter-node/chunks/button.js +0 -82
- package/web/.svelte-kit/adapter-node/chunks/client.js +0 -29
- package/web/.svelte-kit/adapter-node/chunks/context.js +0 -133
- package/web/.svelte-kit/adapter-node/chunks/environment.js +0 -34
- package/web/.svelte-kit/adapter-node/chunks/events.js +0 -121
- 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 -2828
- package/web/.svelte-kit/adapter-node/chunks/internal.js +0 -920
- package/web/.svelte-kit/adapter-node/chunks/pane.js +0 -82
- package/web/.svelte-kit/adapter-node/chunks/sessions-json.js +0 -124
- package/web/.svelte-kit/adapter-node/chunks/sessions.svelte.js +0 -229
- 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/chunks/ws-handlers.js +0 -782
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/auth/login/_server.ts.js +0 -22
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/auth/logout/_server.ts.js +0 -9
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/beads/_server.ts.js +0 -22
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/browse/_server.ts.js +0 -50
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/chrome/_server.ts.js +0 -30
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/files/image/_server.ts.js +0 -53
- 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 -36
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/restart/_server.ts.js +0 -40
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/screenshots/_server.ts.js +0 -28
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_id_/send/_server.ts.js +0 -29
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_server.ts.js +0 -49
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/sessions/_target_/output/_server.ts.js +0 -14
- package/web/.svelte-kit/adapter-node/entries/endpoints/api/tmux/panes/_server.ts.js +0 -21
- package/web/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +0 -27
- package/web/.svelte-kit/adapter-node/entries/hooks.server.js +0 -105
- package/web/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +0 -499
- package/web/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +0 -3057
- package/web/.svelte-kit/adapter-node/entries/pages/login/_page.server.ts.js +0 -15
- package/web/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +0 -37
- package/web/.svelte-kit/adapter-node/entries/pages/session/_target_/_page.svelte.js +0 -653
- 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 -167
- package/web/.svelte-kit/adapter-node/manifest.js +0 -171
- 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 -10
- package/web/.svelte-kit/adapter-node/nodes/4.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/BGcEgn7w.js +0 -3
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BHwiZXRv.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/By6CYjmE.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/CR5jMWGV.js +0 -5
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Cegv0r8x.js +0 -1
- 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.DmtnygN7.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.fYmelGlC.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.DGDAdwT5.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.Cg8dWgUN.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.DItUEo3e.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.dHui0twF.js +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.CiEHP0cr.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,25 +19,50 @@ 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
|
|
38
37
|
bun vitest run tests/db/sessions.test.ts
|
|
39
38
|
```
|
|
40
39
|
|
|
40
|
+
## Releasing
|
|
41
|
+
|
|
42
|
+
Releases are fully automated. **Do not `npm publish` manually.**
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm version minor # bumps package.json + src/utils/version.ts, commits, tags vX.Y.Z
|
|
46
|
+
git push origin main
|
|
47
|
+
git push origin vX.Y.Z # tag push triggers .github/workflows/release.yml
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The workflow builds CLI + web, publishes to npm via **OIDC trusted publishing** (no token, no MFA — the trust anchor is `christinoleo/claude-mux` + `release.yml` registered on npmjs.com), and creates a GitHub release. Publish runs as `npx -y npm@latest publish --access public --provenance` because the runner's bundled npm is too old for OIDC.
|
|
51
|
+
|
|
52
|
+
After release, other machines update with: `claude-mux update`.
|
|
53
|
+
|
|
54
|
+
## Service management on remote hosts
|
|
55
|
+
|
|
56
|
+
For machines that should run claude-mux as a long-lived service (e.g. `engage`):
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
claude-mux service install # ~/.config/systemd/user/claude-mux.service, enabled + started
|
|
60
|
+
sudo loginctl enable-linger $USER # one-time: survive logout, start on boot
|
|
61
|
+
journalctl --user -u claude-mux -f # logs
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`update` restarts a `nohup`-launched server it finds on :3456, but it does **not** restart a systemd-managed instance. On systemd hosts, after `claude-mux update` run `systemctl --user restart claude-mux.service` (or use `--skip-restart` on update and restart explicitly).
|
|
65
|
+
|
|
41
66
|
## Architecture
|
|
42
67
|
|
|
43
68
|
claude-mux has three main components:
|
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
|
|
|
@@ -14,339 +14,191 @@
|
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
bun install -g claude-mux
|
|
90
|
-
# or: npm install -g claude-mux
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### From source
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
git clone https://github.com/christinoleo/claude-mux.git
|
|
97
|
-
cd claude-mux
|
|
98
|
-
bun install
|
|
99
|
-
bun run build
|
|
100
|
-
bun link # Makes 'claude-mux' available globally
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Quick Start
|
|
106
|
-
|
|
107
|
-
### 1. Run setup
|
|
69
|
+
**One-liner (recommended)** — installs bun, claude-mux, hooks, and starts the server on `127.0.0.1:3456`:
|
|
108
70
|
|
|
109
71
|
```bash
|
|
110
|
-
claude-mux
|
|
72
|
+
curl -fsSL https://raw.githubusercontent.com/christinoleo/claude-mux/main/scripts/install.sh | bash
|
|
111
73
|
```
|
|
112
74
|
|
|
113
|
-
|
|
114
|
-
- Create the data directory at `~/.claude-watch/`
|
|
115
|
-
- Install Claude Code hooks in `~/.claude/settings.json`
|
|
75
|
+
Override defaults with env vars: `CLAUDE_MUX_VERSION`, `CLAUDE_MUX_PORT`, `CLAUDE_MUX_NO_SETUP=1`, `CLAUDE_MUX_NO_SERVE=1`.
|
|
116
76
|
|
|
117
|
-
|
|
77
|
+
**Manual** — if you already have a Node/Bun toolchain:
|
|
118
78
|
|
|
119
79
|
```bash
|
|
120
|
-
claude-mux
|
|
80
|
+
npm install -g claude-mux # or: bun install -g claude-mux
|
|
81
|
+
claude-mux setup # install Claude Code hooks
|
|
121
82
|
```
|
|
122
83
|
|
|
123
|
-
|
|
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
|
-
|
|
146
|
-
### Session View
|
|
147
|
-
|
|
148
|
-
Click any session to open the real-time terminal view:
|
|
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 |
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## CLI Commands
|
|
168
|
-
|
|
169
|
-
| Command | Description |
|
|
170
|
-
|---------|-------------|
|
|
171
|
-
| `claude-mux serve` | Start the web server |
|
|
172
|
-
| `claude-mux setup` | Run interactive setup wizard |
|
|
173
|
-
| `claude-mux uninstall` | Remove hooks and configuration |
|
|
174
|
-
| `claude-mux` | Start TUI dashboard (legacy, requires tmux) |
|
|
175
|
-
|
|
176
|
-
### Server Options
|
|
84
|
+
If `npm install -g` fails with `EACCES`, your npm prefix is a system path. Switch to a user prefix (one-time):
|
|
177
85
|
|
|
178
86
|
```bash
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
-h, --host <string> Host to bind to (default: "localhost")
|
|
184
|
-
-a, --auth <password> Enable authentication with password
|
|
87
|
+
mkdir -p ~/.npm-global
|
|
88
|
+
npm config set prefix ~/.npm-global
|
|
89
|
+
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
|
|
90
|
+
exec $SHELL -l
|
|
185
91
|
```
|
|
186
92
|
|
|
187
|
-
|
|
93
|
+
<details>
|
|
94
|
+
<summary><strong>From source</strong></summary>
|
|
188
95
|
|
|
189
96
|
```bash
|
|
190
|
-
|
|
191
|
-
claude-mux
|
|
192
|
-
|
|
193
|
-
#
|
|
194
|
-
claude-mux serve --host 0.0.0.0
|
|
195
|
-
|
|
196
|
-
# With authentication
|
|
197
|
-
claude-mux serve --host 0.0.0.0 --auth mysecretpassword
|
|
97
|
+
git clone https://github.com/christinoleo/claude-mux.git
|
|
98
|
+
cd claude-mux
|
|
99
|
+
bun install && bun run build
|
|
100
|
+
bun link # makes 'claude-mux' available globally
|
|
198
101
|
```
|
|
102
|
+
</details>
|
|
199
103
|
|
|
200
104
|
---
|
|
201
105
|
|
|
202
|
-
##
|
|
106
|
+
## Updating
|
|
203
107
|
|
|
204
|
-
|
|
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
|
-
└──────────────────┘ └─────────────────┘
|
|
108
|
+
```bash
|
|
109
|
+
claude-mux update # npm i -g latest, re-syncs hooks, restarts prod server if running
|
|
110
|
+
claude-mux update --force # reinstall even when already on latest
|
|
221
111
|
```
|
|
222
112
|
|
|
223
|
-
|
|
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
|
|
113
|
+
`update` stops the prod server before reinstalling so live module files aren't clobbered, then re-runs `setup --yes` so hook paths stay current.
|
|
240
114
|
|
|
241
115
|
---
|
|
242
116
|
|
|
243
|
-
##
|
|
117
|
+
## Running as a service (boot autostart)
|
|
244
118
|
|
|
245
|
-
claude-mux
|
|
119
|
+
`claude-mux service install` writes a **systemd user unit** (no root needed for install):
|
|
246
120
|
|
|
247
121
|
```bash
|
|
248
|
-
claude-mux
|
|
249
|
-
|
|
122
|
+
claude-mux service install # writes ~/.config/systemd/user/claude-mux.service, enables + starts
|
|
123
|
+
claude-mux service status # systemctl --user status …
|
|
124
|
+
claude-mux service uninstall --purge # disable + remove unit
|
|
250
125
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
| `j` / `↓` | Move selection down |
|
|
254
|
-
| `k` / `↑` | Move selection up |
|
|
255
|
-
| `Enter` | Jump to selected session |
|
|
256
|
-
| `q` | Quit dashboard |
|
|
126
|
+
sudo loginctl enable-linger $USER # ONE-TIME sudo: keeps service running after logout / starts on boot
|
|
127
|
+
```
|
|
257
128
|
|
|
258
|
-
|
|
129
|
+
Logs: `journalctl --user -u claude-mux.service -f`
|
|
259
130
|
|
|
260
131
|
---
|
|
261
132
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
### Prerequisites
|
|
265
|
-
|
|
266
|
-
- Node.js >= 18 (or Bun)
|
|
267
|
-
- tmux (for full functionality)
|
|
268
|
-
|
|
269
|
-
### Setup
|
|
133
|
+
## Quick Start
|
|
270
134
|
|
|
271
135
|
```bash
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
bun install
|
|
275
|
-
```
|
|
136
|
+
# 1. Install hooks into Claude Code
|
|
137
|
+
claude-mux setup
|
|
276
138
|
|
|
277
|
-
|
|
139
|
+
# 2. Start the web server
|
|
140
|
+
claude-mux serve --port 3456 --host 0.0.0.0
|
|
278
141
|
|
|
279
|
-
|
|
280
|
-
|
|
142
|
+
# 3. Open http://localhost:3456 (or your LAN IP)
|
|
143
|
+
# 4. Start any Claude Code session — it appears automatically
|
|
281
144
|
```
|
|
282
145
|
|
|
283
|
-
|
|
146
|
+
---
|
|
284
147
|
|
|
285
|
-
|
|
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
|
-
```
|
|
148
|
+
## CLI Commands
|
|
290
149
|
|
|
291
|
-
|
|
150
|
+
| Command | Description |
|
|
151
|
+
|---------|-------------|
|
|
152
|
+
| `claude-mux serve` | Start web server (`--port`, `--host`, `--auth <password>`) |
|
|
153
|
+
| `claude-mux setup` | Install Claude Code hooks |
|
|
154
|
+
| `claude-mux update` | `npm i -g` latest, re-sync hooks, restart prod server |
|
|
155
|
+
| `claude-mux service install` | Install systemd user unit (boot autostart, no root) |
|
|
156
|
+
| `claude-mux service uninstall` | Disable systemd user unit (`--purge` removes the file) |
|
|
157
|
+
| `claude-mux service status` | Show systemd service status |
|
|
158
|
+
| `claude-mux uninstall` | Remove hooks and configuration |
|
|
159
|
+
| `claude-mux send <target> [text]` | Send text or `--keys` to a session |
|
|
160
|
+
| `claude-mux status <target>` | Get session state as JSON |
|
|
161
|
+
| `claude-mux wait <target>` | Block until session reaches `--state` (default: idle,waiting,permission) |
|
|
162
|
+
| `claude-mux new-session --cwd <path>` | Spawn a new detached Claude Code session |
|
|
163
|
+
| `claude-mux capture <target>` | Capture tmux pane output (`--lines N`) |
|
|
164
|
+
| `claude-mux` | TUI dashboard (legacy, requires tmux) |
|
|
292
165
|
|
|
293
|
-
|
|
294
|
-
bun test # Run tests
|
|
295
|
-
bun run lint # Lint code
|
|
296
|
-
bun run format # Format code
|
|
297
|
-
```
|
|
166
|
+
---
|
|
298
167
|
|
|
299
|
-
|
|
168
|
+
## How It Works
|
|
300
169
|
|
|
301
170
|
```
|
|
302
|
-
claude-mux/
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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
|
|
171
|
+
Claude Code events ──> Hook script ──> JSON files (~/.claude-mux/sessions/)
|
|
172
|
+
|
|
|
173
|
+
File watcher (500ms)
|
|
174
|
+
|
|
|
175
|
+
WebSocket broadcast
|
|
176
|
+
|
|
|
177
|
+
Browser <──> SvelteKit server
|
|
318
178
|
```
|
|
319
179
|
|
|
180
|
+
**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.
|
|
181
|
+
|
|
320
182
|
---
|
|
321
183
|
|
|
322
184
|
## Troubleshooting
|
|
323
185
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
1. Ensure you ran `claude-mux setup` to install hooks
|
|
327
|
-
2. Restart any running Claude Code sessions (hooks are loaded at startup)
|
|
328
|
-
3. Check that `~/.claude/settings.json` contains claude-mux hooks
|
|
186
|
+
**Sessions not appearing** — Run `claude-mux setup`, then restart Claude Code sessions (hooks load at startup).
|
|
329
187
|
|
|
330
|
-
|
|
188
|
+
**Can't connect from another device** — Use `--host 0.0.0.0` and check your firewall.
|
|
331
189
|
|
|
332
|
-
|
|
333
|
-
2. Check your firewall allows the port
|
|
334
|
-
3. Use your machine's LAN IP, not `localhost`
|
|
190
|
+
**Status not updating** — Verify hooks: `grep claude-mux ~/.claude/settings.json`
|
|
335
191
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
1. Check hooks are installed: `grep claude-mux ~/.claude/settings.json`
|
|
339
|
-
2. Restart Claude Code sessions to pick up new hooks
|
|
192
|
+
**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
193
|
|
|
341
194
|
---
|
|
342
195
|
|
|
343
196
|
## Requirements
|
|
344
197
|
|
|
345
|
-
-
|
|
346
|
-
-
|
|
347
|
-
-
|
|
348
|
-
|
|
349
|
-
> **Note:** The `claude-mux serve` command requires [Bun](https://bun.sh) runtime.
|
|
198
|
+
- [Bun](https://bun.sh) >= 1.0
|
|
199
|
+
- tmux
|
|
200
|
+
- Claude Code with hooks support
|
|
201
|
+
- Optional, for voice input: a working C/C++ toolchain (whisper.cpp builds on first use); NVIDIA CUDA toolkit for GPU transcription
|
|
350
202
|
|
|
351
203
|
---
|
|
352
204
|
|
|
@@ -354,15 +206,6 @@ claude-mux/
|
|
|
354
206
|
|
|
355
207
|
MIT
|
|
356
208
|
|
|
357
|
-
---
|
|
358
|
-
|
|
359
209
|
## Contributing
|
|
360
210
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
1. Fork the repository
|
|
364
|
-
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
365
|
-
3. Run tests (`bun test`)
|
|
366
|
-
4. Commit your changes
|
|
367
|
-
5. Push to the branch
|
|
368
|
-
6. Open a Pull Request
|
|
211
|
+
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"}
|