Skip to content

feat(daemon): add worktree picker to changes sidebar - #19

Open
ephor wants to merge 2 commits into
mainfrom
feat/worktree-picker
Open

feat(daemon): add worktree picker to changes sidebar#19
ephor wants to merge 2 commits into
mainfrom
feat/worktree-picker

Conversation

@ephor

@ephor ephor commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Add a worktree switcher to the changes rail header that lets users inspect diffs, files, and file contents from any git worktree associated with the project — not just the main checkout or the active task's worktree.

Why: When reviewing or working across multiple branches, switching contexts required closing one task and opening another. This picker puts every worktree (including externally-created ones) one click away.

What changed:

  • New WorktreePicker dropdown component lists all git worktrees via git worktree list --porcelain, including detached heads and non-warpforge worktrees. Stable external:<hash> IDs prevent key churn across daemon restarts.
  • Protocol: Every diff/file/commit method accepts an optional path override. The daemon resolves it as: explicit override → task worktree → project path.
  • useTaskQueries includes worktreePath in query keys so switching worktrees instantly refetches diff, file list, and file contents for the selected tree.
  • Worktree discovery rewritten — no longer limited to .worktrees/ directory. Detects any git worktree in the repo (e.g. /tmp/foo, ../other-branch).

- Add WorktreePicker dropdown component showing all git worktrees
- Extend WorktreeManager::discover() to find all worktrees via 'git worktree list --porcelain'
- Call discover() on daemon startup for each project
- Add lazy init in list_worktrees handler for on-demand discovery
- Add path override to diff.get, file.contents, file.list, file.save, diff.resolveHunk, git.commit
- Auto-resolve task.worktree path when task runs in isolated worktree
- Improve detached worktree naming: show dirname + '(detached)'
- Rename 'Main project' to 'Working tree' in picker
@ephor
ephor force-pushed the feat/worktree-picker branch from 8f8be21 to adef4f1 Compare July 25, 2026 07:37
Events from startup config discovery (e.g. ProjectConfigChanged) can arrive
before TaskCreated. The test now loops past unexpected events instead of
panicking.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant