- run.sh builds frontend then serves in production mode
- Persist AGENT in .env.local and show it in worktree list
- Add preview proxy config so production mode routes API/WS correctly
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Persist profile to .env.local on worktree creation and display it
(full, agent-only, agent-yolo) in the worktree list.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add agent selector (Claude/Codex) to the create worktree dialog,
orthogonal to the profile choice. Selection is persisted alongside
the profile default.
Backend builds the appropriate command per agent: codex uses
--full-auto for sandbox, claude uses --dangerously-skip-permissions
with --append-system-prompt.
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>
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>
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>
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>