The default oxlint output buries filenames in multi-line blocks, making
CI errors like "File has too many lines" hard to diagnose. The github
format produces ::error annotations with file paths front and center.
This commit completely overhauls the README to prominently feature the new Orca CLI orchestration capabilities. It also revamps the page structure for better conversion by adding trust badges, explicit cross-platform support text, a 'Quick Start' guide, and a dedicated 'Why Orca?' section. Lastly, the CONTRIBUTING.md guide was updated to encourage contributors to provide their Twitter handle for shoutouts.
* feat: allow opening files outside the worktree in the editor
Fixes an issue where prompting Claude Code to open a file outside the worktree
would fall back to opening the default system viewer, and dragging external files
into Orca wouldn't work.
- Replaced `shell.openFilePath` fallback with internal `store.openFile` for
external files clicked in the terminal.
- Added a global drag-and-drop handler (`useGlobalFileDrop`) that resolves
external file paths and opens them natively in Orca.
- Used `window.api.fs.stat` to prevent opening directories directly in the editor,
falling back to the OS system viewer.
Closesstablyai/orca#271
* fix: authorize external editor file opens
* feat: add field to edit terminal font weight
* fix: allow scrolling in terminal font menu dropdown
* feat: scroll through fonts with arrow keys
* fix: keep terminal font picker keyboard-focused after button clicks
* fix: let keyboard users close terminal font picker from toggle button
* fix: responsive resize behavior
* chore: add tests
* fix: clamp hydrated sidebar widths
* feat: add update reminder component and background polling
* refactor: replace update reminder banner with subtle bottom-right toast
Swap the full-width top banner for a compact fixed-position toast in the
bottom-right corner, matching the existing Sonner toast styling. Also
extract pure functions (statusesEqual, isBenignCheckFailure) from
updater.ts into updater-fallback.ts to fix max-lines lint error.
* fix: mock checkForUpdates to return a promise so .catch() works in tests
The previous 1px default was too thin for comfortable visibility.
This changes the default to 3px, which only affects new users who
haven't customized the setting. Also updates the preview component's
fallback to stay consistent with the new default.
Action buttons (revert, stage) in the Changes list now use absolute
positioning with a solid background overlay, so they appear on hover
without taking up space or shifting file names and status letters.
* feat: add copy remote URL to line number context menu
Add 'Copy Remote URL' option to the line number gutter right-click menu,
allowing users to quickly copy a shareable link to a file and line on
GitHub, GitLab, Bitbucket, or other hosted git providers.
- Install hosted-git-info to parse remote URLs and generate browse URLs
- Add getRemoteFileUrl() to resolve file URLs using default branch
- Wire up IPC handler, preload bridge, and renderer UI
- Use ExternalLink icon to distinguish from path copy options
* refactor: use @types/hosted-git-info instead of custom type declarations
Replace the custom hosted-git-info.d.ts with the @types package from
DefinitelyTyped. Use a targeted cast for browseFile() which the @types
package doesn't include yet (stuck on v3 API).
* refactor: revert to local type declarations for hosted-git-info
The @types/hosted-git-info package is stuck on the v3 API and lacks
browseFile(). A local .d.ts is cleaner than casting around stale types.
* fix: address review findings
- Add sandbox="allow-same-origin" to PDF iframes to prevent script execution
- Wrap atob() in try/catch to gracefully handle corrupt base64 data
- Reset imageError state on content change to allow re-rendering
- Add click overlay on PDF iframe so popup open works correctly
- Compact test mock resets to stay within max-lines lint rule
* fix: consolidate binary preview tests to stay within max-lines limit
- Reject worktree creation if the computed branch name already exists locally, on a remote, or in PR history. This prevents a fresh worktree from inheriting a stale/merged PR immediately after creation.
- Wrap getPRForBranch in try/catch so GitHub API failures don't block worktree creation
- Fix remote branch matching to compare full branch name after refs/remotes/<remote>/ prefix, preventing false positives
- Wrap updateWorktreeMeta in try/catch so meta-update failures don't leave the dialog in an error state for an already-created worktree
* feat: show ShieldAlert icon for conflict-review tabs
Display a distinct orange ShieldAlert icon for tabs opened in
conflict-review mode, differentiating them from regular diff tabs.
* fix: clear stale Rebasing/Merging badge on non-active worktrees
The git status polling only runs for the active worktree. When a
non-active worktree finishes rebasing, its conflict operation was
never updated to 'unknown', leaving the badge stuck.
Add a lightweight git:conflictOperation IPC (fs-only, no git subprocess)
and poll it for non-active worktrees that have a non-unknown operation.
Once the operation clears, the worktree drops out of the poll list.
Add a "Open file" button in the diff editor header that opens the
modified-side file in a regular edit tab — useful for accessing
markdown preview from a diff. The button is disabled when the diff
target is deleted.
Also refine tab bar styling: active tabs now use accent background
with bold text, and file explorer rows get consistent hover colors.