Add "Open in…" dropdown for selected item (Finder, Terminal, VS Code, Cursor, Claude Desktop, ChatGPT, Codex, copy path)
- Dominant language
- JavaScript
- Stars
- 2
- Forks
- 3
- Avg merge
- 15m
- Merged PRs (30d)
- 6
Description
## Summary
Add an **"Open in…"** dropdown to the content browser for the selected item, offering quick handoff to external tools:
- **Finder** — reveal the synced file/folder
- **Terminal** — open at the item's local directory
- **VS Code** — open the file/folder
- **Cursor** — open the file/folder
- **Claude Desktop**
- **ChatGPT**
- **Codex**
- **Copy path** — copy the path to the clipboard
## Why
Once an item is selected (and synced locally), the natural next step is often to open it somewhere else — edit it in an editor, poke at it in a terminal, or hand it to an AI tool. Today there's no path out of the app; you have to find the synced folder manually.
## Suggested placement
Alongside the existing actions in the file-tree panel header (`renderPanelHeader` in `src/renderer/file-tree.js`, next to **Sync selected…** / **Review changes…**), driven by `state.tree.selectedPaths`. A single split/dropdown button keeps the header uncluttered.
## Implementation notes / open questions
- **Local-path dependency:** Finder, Terminal, VS Code, Cursor, and Codex all need a local filesystem path, which only exists *after* the item has been synced. We'll need to map the selected DA path → local path (via the sync-folder store) and either disable those targets or trigger a sync first when no local copy exists. **Copy path** could offer either the DA path or the local path.
- **App detection:** only show targets for apps that are actually installed (e.g. probe known bundle IDs / app paths on macOS) rather than listing everything.
- **Launch mechanism:** Finder/Terminal via `shell.openPath` / `open`; editors via their CLI (`code`, `cursor`) or bundle ID; AI tools via their URL scheme or app handoff (needs investigation per app).
- macOS-first is fine given the app is Apple-Silicon-only today.
## Acceptance criteria
- [ ] "Open in…" control appears when an item is selected
- [ ] Targets that require a local file are disabled (or trigger a sync) when the item isn't synced
- [ ] Only installed apps are listed
- [ ] "Copy path" copies a sensible path to the clipboard
Contributor guide
Research direction
Start in src/renderer/file-tree.js at renderPanelHeader and trace state.tree.selectedPaths, then inspect the sync-folder store for DA-to-local path mapping. Define the app-detection and launch behavior for each target before implementing the dropdown; done means the control appears for selected items, handles unsynced paths, lists installed apps, and copies a sensible path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100