Commit Graph

48 Commits

Author SHA1 Message Date
Neil 8d56823998
docs: localize README install updates (#1319) 2026-05-01 12:38:59 -07:00
Neil ff22944fd7
feat(release): publish Orca as a Homebrew cask (#1304)
Co-authored-by: Orca <help@stably.ai>
2026-05-01 00:33:21 -07:00
Jinwoo Hong 03e7284e3c
fix: prevent 401 errors from CLI-refreshed tokens being clobbered (#1286)
Co-authored-by: Orca <help@stably.ai>
2026-04-30 22:24:10 -07:00
Jinjing be0e3c2fa7
fix: handle unhydrated store in file-explorer→terminal drop (#1296)
getConnectionId returns undefined during store hydration, which was
misclassified as remote by `!== null` check. Changed to `typeof === 'string'`
so unhydrated state falls through to client-OS quoting, consistent with
terminal-drop-handler.ts behavior.

Co-authored-by: Orca <help@stably.ai>
2026-04-30 20:39:04 -07:00
Jinwoo Hong cb73b372ff
feat(file-explorer): support drag-and-drop file import over SSH (#1279)
Co-authored-by: Orca <help@stably.ai>
2026-04-30 01:28:43 -07:00
Jinjing 572ed1a888
fix(terminal): inherit source pane cwd on split (Cmd+D) (#1243)
* Wip

* fix(terminal): make split-pane cwd resolution reliable on macOS

Coalesce and cache per-pid lsof calls in the main process, and raise the
renderer's IPC timeout to 1s so cold lsof lookups (typically 100–500ms,
occasionally ~1s) don't fall back to the worktree root.

Co-authored-by: Orca <help@stably.ai>

* chore: remove stray screenshot and harden daemon getCwd test

- drop orca-before-split.png accidentally committed in the Wip commit
- accept null OR string from getCwd in the daemon test, since the new
  terminal-host fallback calls resolveProcessCwd(pid) and the mock pid
  55555 could resolve against a live process on CI

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-29 15:54:07 -07:00
Neil eb92ba9448
fix(terminal): advertise kitty keyboard protocol for Shift+Enter (#1247)
Orca's terminal already encodes Shift+Enter as the kitty CSI-u sequence
`\x1b[13;2u`, but without `vtExtensions.kittyKeyboard` xterm.js never
answers the `CSI ? u` probe. CLIs that gate enhanced input on that
handshake (Claude Code, Codex, etc.) therefore drop the extended bytes
and treat Shift+Enter as a plain Enter — most visibly when running
inside tmux, which strips extended-key encodings by default.

- Enable `vtExtensions.kittyKeyboard` in the default terminal options
  (matches VS Code's xtermTerminal).
- Lock in the flag with a regression test in pane-lifecycle.test.ts.
- Add docs/terminal-extended-keys.md explaining the Orca side and the
  tmux-side `set -s extended-keys on` + `terminal-features xterm*:extkeys`
  users need for nested Shift+Enter to reach a CLI.

Verified end-to-end in Electron: `cat -v` + Shift+Enter now prints
`^[[13;2u`, and `printf '\e[?u'` elicits the expected `CSI ? 0 u` reply
from xterm.js.

Co-authored-by: Orca <help@stably.ai>
2026-04-28 23:56:29 -07:00
Jinjing 374f821b70
improve remote folder picker UI (#1240)
- polish remote folder picker layout and button borders
- wip in improving remote folder picker

Co-authored-by: Orca <help@stably.ai>
2026-04-28 18:52:31 -07:00
Neil 8e5d19eae3
fix(agents): use Kilocode brand logo instead of illegible favicon (#1224)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:38:17 -07:00
Jinjing bdf5f66ffd
feat(nav): back/forward traverses Tasks page visits (#1207)
Widens worktree nav history entries to string | 'tasks' so the titlebar
back/forward buttons and Cmd/Ctrl+Alt+Arrow shortcut work from the Tasks
page. openTaskPage records a 'tasks' entry; closeTaskPage rewinds the
index when parked on one; goBack/goForward dispatches Tasks entries via
a separate view activator to bypass openTaskPage side effects.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:49:34 -07:00
Brennan Benson 812ca5488b
fix(preload): collapse index.d.ts into type-checked api-types.ts (#1197)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:46:17 -07:00
Jinjing 099c4089a7
refactor(search): share rg/git-grep logic between main and relay (#1157)
Extracts rg and git-grep search logic into src/shared/text-search.ts so
the local main and SSH relay paths stop reinventing arg construction,
JSON parsing, submatch regex, and accumulator/truncation semantics.

Fixes silent truncation in the relay: searchWithRg used execFile with
a 50MB maxBuffer cap that rg --json easily exceeds on large repos,
dropping matches with no error surfaced to the user. The relay now
streams via spawn, matching the local path.

See docs/design/share-text-search.md for full rationale.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:06:00 -07:00
Jinwoo Hong 6729825bc0
feat(ssh): persist and auto-restore SSH sessions across app restarts (#1026) 2026-04-25 20:15:02 -07:00
Jinjing 96d6354b0e
docs(readme): add Annotate AI Diff feature, SSH support, and Spanish translation (#1080) 2026-04-25 00:01:53 -07:00
Jinjing aa10811780
fix: address review findings (#1078)
- fix: address review findings
- wip
- wip
2026-04-24 21:58:21 -07:00
Jinwoo Hong bec6a5c508
feat(tasks): persist last-used task source (GitHub/Linear) (#1071) 2026-04-24 20:29:41 -07:00
Neil 2ae9392b72
Rename add repo copy to add project (#1014) 2026-04-23 19:02:36 -07:00
Jinwoo Hong 6c6416a949
feat(codex-accounts): shared runtime home for account switching (#768) 2026-04-17 21:51:06 -07:00
Neil 9962655492
docs: remove extra text 'X' from twitter badge (#781) 2026-04-17 17:02:51 -07:00
Neil bbadd1f12a
docs: match X (Twitter) badge styling with others (#780) 2026-04-17 17:01:01 -07:00
Neil f15341db97
docs: update x (twitter) icon in readme (#779) 2026-04-17 16:58:44 -07:00
Brennan Benson e4cdb29a01
feat: enable split groups renderer path (#669) 2026-04-15 13:12:54 -07:00
Jinwoo Hong f5b716a760
feat: add browser tab search to Cmd+J jump palette (#675) 2026-04-15 12:54:56 -07:00
Brennan Benson c889e95d65
refactor: gate split group surface ownership in Terminal.tsx (#642) 2026-04-14 20:19:11 -07:00
Ramzi fb5afc3aab
feat: add .mmd/.mermaid file viewer with rendered diagram toggle (#597)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-14 19:26:55 -07:00
Brennan Benson 3b897d255d
feat: add split group UI with tab-bar context menus and resize handles (#646) 2026-04-14 19:01:11 -07:00
Brennan Benson cfe49ff404
fix: restore worktrees through tab group ownership (#645) 2026-04-14 17:01:58 -07:00
Brennan Benson c4460f8820
fix: harden terminal pane lifecycle for split groups (#641) 2026-04-14 16:23:01 -07:00
Brennan Benson 741974c59c
refactor: add split group model foundations (#644) 2026-04-14 14:39:01 -07:00
Jinwoo Hong 60a092686b
perf: systematic performance optimizations (#623) 2026-04-14 00:28:56 -07:00
Jinjing 28a1c93c8c
feat: allow dropping external files into the file explorer (#618)
Add support for dragging files from the OS into the file explorer sidebar.
Files are copied (not moved) into the target directory within the worktree.

- Preload detects native file drops via capture-phase listener and resolves
  the drop target (editor, terminal, or file-explorer) from DOM attributes
- New IPC handler `fs:importExternalPaths` copies files/directories with
  symlink pre-scanning, path-traversal protection, and dedup on conflict
- FileExplorer tracks native drag state separately from internal drag state
  to show correct drop highlights without interfering with tree reordering
- FileExplorerRow expands directories on hover during native drags
- useFileExplorerImport hook subscribes to preload IPC events and drives
  the import → refresh → reveal pipeline

Includes review fixes:
- Clear nativeDropTargetDir on row drag-leave to prevent stale highlights
- Clear native drag state on early return in useFileExplorerImport
- Extract row drag logic to useFileExplorerRowDrag hook
- Split import tests into dedicated filesystem-import.test.ts
- Use T[] syntax instead of Array<T> per lint rules
- Use ternary expressions for simple if/else per lint rules
2026-04-13 22:04:49 -07:00
Jinjing 90a994b951
docs: center language links below badges and use for-the-badge style (#608) (#608) 2026-04-13 18:48:08 -07:00
Jinjing 2d4bcf6759
docs: move translated READMEs to docs folder to save vertical space (#606) 2026-04-13 18:36:38 -07:00
Brennan Benson 6f2154430c
feat: add searchable repo picker to new worktree dialog (#559) 2026-04-12 18:50:24 -07:00
Neil c4aabcc4e5
fix: audit terminal shortcut interception (#519) 2026-04-11 23:24:04 -07:00
Alexander 74e008c616
Add Cmd+G / Cmd+Shift+G terminal search navigation (#440)
* Add design spec for terminal search next/prev shortcuts

Cmd+G / Cmd+Shift+G to navigate search matches when the
search bar is already open, following macOS conventions.

* Address review: isEditableTarget bypass, incremental option, native Cmd+G conflict

* Spec: clarify mod-key check placement and ref sync on empty query

* Add implementation plan for terminal search next/prev shortcuts

* Plan: merge Task 3+4 to avoid compile break, fix stale note, add reorder rationale

* Plan: import SearchState type in TerminalSearch instead of inline duplication

* test: add failing tests for search-navigate key matching

* feat: add Cmd+G / Cmd+Shift+G search navigation to keyboard handler

* feat: wire searchStateRef through TerminalPane and TerminalSearch

* refactor: use searchOpenRef to avoid listener re-registration on search toggle

* test: add Ctrl+Shift+G → previous on Linux/Windows test case
2026-04-11 22:52:32 -07:00
Jinjing c12896ca84
Add Codex account switcher gif (#489)
The gif was referenced in README but never committed.
2026-04-11 12:39:02 -07:00
Jinjing 696590918c
feat: Quick Jump to Worktree palette (Cmd+J) (#469)
* wip in the design doc

* fix: use Ctrl+Shift+J for worktree palette on non-darwin platforms

To avoid colliding with Ctrl+J (Line Feed) on Windows/Linux, we now
use Ctrl+Shift+J for the worktree jump palette on those platforms,
leaving Cmd+J for macOS.

* refactor: migrate QuickOpen to cmdk and unify overlay state

- Migrated `QuickOpen.tsx` to use `cmdk` (`CommandDialog`) for visual and
  behavioral consistency with the new worktree jump palette, while keeping
  the existing custom fuzzy match algorithm.
- Unified the overlay state systems (`activeModal`, `quickOpenVisible`,
  `worktreePaletteVisible`) into a single `activeModal` union type.
- This automatically handles mutual exclusion without boilerplate
  toggle logic spread across components.

* fix: forward QuickOpen and worktree shortcuts from browser guests

Added main-process interceptors for `Cmd/Ctrl+P` and `Cmd/Ctrl+1-9`
so that QuickOpen and numeric worktree jumping continue to work
even when an embedded browser guest (webview) has keyboard focus.

* fix: address review findings

- Set spawnEnv.SHELL before pty.spawn() in the fallback loop so the
  child process inherits the correct SHELL value instead of the stale
  original.
- Remove dead Cmd+P and Cmd+1-9 renderer keydown handlers from App.tsx;
  these are now handled via IPC from createMainWindow.ts before-input-event
  (the IPC handlers in useIpcEvents.ts have the same view-state guards).
2026-04-10 23:37:23 -07:00
Jinjing 3323069ce5
chore: organize repo root folder (#465) 2026-04-10 22:11:12 -07:00
Alexander 7a7d287ed2
feat: focus-follows-mouse setting for terminal panes (#389) 2026-04-09 17:02:01 -07:00
Jinjing d546af1b51
refactor to clean up the codebase (#412)
* chore: clean up repo root for faster README visibility

- Delete unused images (debug_orca.png, orca_3d.jpg, screenshot.png)
- Delete stale design docs from docs/
- Move tsconfig sub-configs, electron-builder config, and vitest config to config/
- Move file-drag.gif to docs/assets/ and design doc to docs/
- Update all path references in package.json, tsconfig.json, and moved configs

* fix: remove stale worktree dialog callback dependency
2026-04-08 22:49:16 -07:00
Jinwoo Hong 9b2b85c59d
feat: add non-git folder support (#356)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:54:02 -07:00
Jinjing 171a2052df
fix: address review findings (#315) 2026-04-05 16:17:07 -07:00
Jinwoo Hong abe54ea84d
Add current worktree shortcuts to Orca CLI (#301) 2026-04-04 18:33:58 -07:00
Jinjing 90d0fae8f5
feat: add explicit worktree setup flow (#286)
* feat: add explicit worktree setup flow

- Centralize worktree activation setup flow

- fix: render orca.yaml file contents in settings repo pane instead of tags when using config file

- fix: command preview title for yaml configs

- fix: update UI copy and styling to better reflect yaml setup hooks

- fix: run setup hook in background if CLI worktree is created while GUI is closed

- fix: prevent duplicate terminal tab creation when creating worktrees from the UI

- fix: ensure CLI worktree create returns correct payload type and hooks up UI setup flow

- Squashed commits

- fix minor regression

- fix: close worktree context menu when deleting

- fix: keep delete dialog open while archive hook runs and support inline yaml scripts

- chore: fix lint, typecheck and react state mutations during render for setup script feature

* fix(lint): split worktrees.test.ts to stay under max-lines limit

Extract Windows path-handling tests into worktrees-windows.test.ts
to bring the original file under the 300-line oxlint max-lines rule.

* fix(test): set up path mocks for setup launch payload test

The computeWorktreePathMock and ensurePathWithinWorkspaceMock were
cleared by afterEach but not re-established in the test, causing
areWorktreePathsEqual to receive undefined and crash.
2026-04-03 23:44:23 -07:00
Jinwoo Hong 182ba156dd
Add Orca runtime CLI and bundled install support (#273) 2026-04-03 16:50:28 -07:00
Jinjing 333023fb67
feat: show merge conflicts in source control sidebar (#204)
* Squashed commits

- refactor

- commit design doc

* docs: add why-comments to conflict resolution code and track conflicts on open

- Add explanatory comments throughout conflict resolution code covering
  safety constraints, architectural boundaries, and compatibility choices
- Track unresolved conflicts in openConflictFile so Resolved locally
  state works for conflict-safe entry point
- Add CLAUDE.md/AGENTS.md guideline for documenting the "why"
- Add test for conflict tracking through openConflictFile
2026-03-29 15:40:23 -07:00
Jinjing 3644aa8f29
Show committed files in the "source control" tab (#181)
* refactor: auto-review fixes and UI improvements

- Remove dead code and fix type assertion in getBranchDiff
- Tighten GitDiffBinaryResult type constraint
- Fix race condition in CombinedDiffViewer with generationRef
- Fix reference stability in setGitBranchCompareResult
- Extract LazySection component to fix max-lines lint
- Update filesystem IPC to match updated signatures
- Adjust file explorer item spacing and font size

* fix: correct test expectation for staged diff header label
2026-03-28 17:00:40 -07:00