51 Commits
Author SHA1 Message Date
JinjingandOrca 547448e15c refactor: rename pet → sidekick across codebase (#1334)
Renames the experimental pet overlay to "sidekick" with themed character
names (Claude the Mage, OpenCode the Rogue, Gremlin the Trickster).
Covers IPC channels, preload API, persisted UI state, settings flag,
on-disk userData path, components, and types.

Deletes the standalone pet-overlay design mock.

Co-authored-by: Orca <help@stably.ai>
2026-05-01 18:40:52 -07:00
JinjingandOrca d287342f99 feat: add experimental pet overlay (#1331)
* feat: add experimental pet overlay

Adds an opt-in 3D pet overlay pinned to the bottom-right. Gated behind
an experimental flag so three.js + GLB models stay out of the renderer
bundle for users who never enable the feature. Ships with four bundled
models plus user-uploaded custom GLBs via a pet:import IPC; a status-bar
segment provides model picker + hide toggle.

See docs/design/pet-overlay.md for the full design.

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

* refactor(pet): replace 3D GLB models with 2D webp images

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

* chore(pet): compress pet webp images and remove unused assets

Reduce resources/claude.webp, gremlin.webp, opencode.webp sizes; drop
the obsolete pet-overlay design doc and compress-pet-glb script now
that the GLB pipeline has been replaced by 2D webp images.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-01 16:18:21 -07:00
Neil 17110818c6 docs: fix README header alignment (#1320) 2026-05-01 12:46:56 -07:00
Neil 8d56823998 docs: localize README install updates (#1319) 2026-05-01 12:38:59 -07:00
NeilandOrca 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 HongandOrca 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
JinjingandOrca 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 HongandOrca 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
JinjingandOrca 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
NeilandOrca 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
JinjingandOrca 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
NeilandOrca 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
JinjingandOrca 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 BensonandOrca 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
JinjingandOrca 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
RamziandJinwoo-H 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 HongandClaude Opus 4.6 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