- Pass initialPane to attach() so zoom runs inside the shell command
chain where tmux is guaranteed to exist (no external race)
- Send initialPane in the first resize WS message (atomic, single msg)
- Remove pendingPane from WsData (dead code from iterative patching)
- Fix unzoom: use shell conditional instead of broken tmux if-shell
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bun processes async WS messages sequentially, so selectPane always
arrives after attach completes — call selectPane() directly when
attached instead of only queueing
- Always unzoom on attach via tmux if-shell #{window_zoomed_flag} so
desktop never starts with a pane zoomed from a previous mobile session
- Remove unreliable setTimeout approach, send selectPane from client
immediately after resize
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Collapsible sidebar (full-screen overlay on mobile), hamburger menu,
bottom pane switcher bar for full (Claude/Backend/Frontend) and sandbox
(Claude/Shell) profiles, auto-zoom into Claude pane on mobile connect,
larger terminal font on mobile, and iOS overscroll prevention.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ~/windmill-ee-private mount to sandbox extra_mounts (needed for
.git access) and remove ArrowLeft/ArrowRight agent-switching keydown
handler from CreateWorktreeDialog.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>
Cmd+Up/Down to switch worktrees, Cmd+K to create new, Cmd+D to remove.
xterm.js passthrough ensures shortcuts bubble up from terminal. Shortcut
hints displayed in a fixed panel at the bottom of the sidebar.
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>
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>
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>
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>
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>