Persist the selected profile to localStorage when checked, and
preselect it on subsequent dialog opens.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change backend start command to use PORT= instead of --port flag and
cargo watch for auto-reload. Install cargo-watch in sandbox container.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a worktree runs inside a Docker sandbox, its ports are only
reachable via the container's bridge IP. socat forwards host ports to
the container so the browser (over SSH) can reach them.
- New socat.ts module manages forwarding lifecycle (start/stop/reconcile)
- Polls for container after creation (non-blocking, up to 30s)
- Kills orphaned socat on startup before re-establishing forwards
- Cleans up on worktree removal and SIGINT/SIGTERM
- Extract readEnvLocal to env.ts to break circular import
- Change isPortListening to HTTP fetch (avoids socat false positives)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Read .env.local from the worktree to get port assignments and build a
system prompt informing Claude of backend/frontend ports and startup
commands. For sandbox profiles, double-escape quotes to survive the
extra shell layer inside the container.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split a 33% width shell pane on the right, using the worktree
directory from pane 0 so it starts in the correct path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract inline create dialog into its own component. Wrap both dialogs
in forms so Enter submits, and autofocus the confirm button in
ConfirmDialog so Enter triggers confirm instead of cancel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dismiss the confirmation dialog as soon as the user confirms instead
of waiting for the API call. Show the item grayed out with
pointer-events disabled while deletion is in progress. Auto-select
the previous (or next) worktree when the selected one is removed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Start a detached tmux session if none exists, so worktree
operations don't fail when tmux hasn't been started yet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show an × button on hover for non-main worktrees. Replace the
boolean showConfirmRemove with a removeBranch string so the
confirm dialog works from both sidebar and top bar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add "Agent (skip permissions)" profile that runs claude with
--dangerously-skip-permissions. Filter worktrees without a tmux
window from the sidebar list instead of showing a disabled entry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Support "agent-only" and "full" profiles when creating worktrees.
Agent-only skips default pane commands, kills extra panes, and starts
only claude. Full uses the default workmux pane layout. Profile is
selected via a centered dialog in the frontend.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Check mux status before attempting terminal connection. Worktrees
without a tmux window (mux !== "✓") show an informational message
instead of failing with "can't find window".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of spawning with hardcoded 120x30 on WebSocket open, wait for
the client's first resize message with real fitted dimensions. Fixes
terminal not taking full width/height since script+pipes PTY can't be
resized after creation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server crashes/restarts left orphaned wm-dash-* grouped tmux sessions,
causing "duplicate session" errors on subsequent connections. Now cleans
up stale sessions on startup and pre-emptively before each attach.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bun's terminal option data callback doesn't fire inside Bun.serve
context (Bun 1.3.9 bug). Switch to script(1) for PTY allocation with
piped stdin/stdout. Fix terminal not taking full width/height by adding
min-h-0, min-w-0 and width: 100% for proper flex layout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Web dashboard (Bun + xterm.js) that wraps workmux CLI commands and
renders tmux windows in embedded browser terminals. Replaces direct
tmux navigation with a sidebar-based UI at localhost:5111.
- Bun HTTP server with REST API for worktree CRUD (add/rm/open/close/send)
- Bun.Terminal PTY API to attach to tmux grouped sessions per worktree
- xterm.js frontend with WebSocket bridge for real-time terminal I/O
- Scrollback buffer for reconnection, ResizeObserver for dynamic fitting
- Add direnv allow to worktree-env post-create hook for nix devshell
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>