Commit Graph
1303 Commits
Author SHA1 Message Date
NeilandOrca c85f487ebf chore: move agent skills to internal delivery (#1254)
Private skill files are now stored and versioned in a separate internal
repo; a setup hook populates .claude/skills and .agents/skills with
machine-local symlinks instead. This keeps contributor-facing patterns
(agent skills in the tree) while allowing some skills to be developed
privately.

- Remove tracked skill files (62 files across 7 skill dirs).
- Gitignore the now machine-local skill directories.
- Add an env-gated hook to orca.yaml scripts.setup. Runs a setup script
  whose path lives in $ORCA_INTERNAL_DEV_SETUP when present; silently
  no-ops for public contributors.

No new contributor-facing requirements: the hook is optional, the env
var is only set by internal tooling, and the setup itself runs in the
worktree that Orca just created.

Co-authored-by: Orca <help@stably.ai>
2026-04-29 14:36:03 -07:00
Brennan BensonandOrca 3a138a2f07 ci: stabilize pnpm native addon install in PR checks (#733)
Co-authored-by: Orca <help@stably.ai>
2026-04-29 14:29:24 -07:00
Brennan BensonandOrca 006272b25c Recolor agent 'done' state from sky blue to emerald green (#1246)
Co-authored-by: Orca <help@stably.ai>
2026-04-29 10:47:28 -07:00
github-actions[bot] 6abb9b5e8e release: 1.3.25-rc.1 [rc-slot:2026-04-29-03] v1.3.25-rc.1 2026-04-29 10:33:13 +00:00
github-actions[bot] 39a3893a48 release: v1.3.25-rc.0 v1.3.25-rc.0 2026-04-29 06:56:53 +00: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 2964e2d9aa feat(terminal): auto-focus newly created terminal tab (#1244)
Extracts the double-rAF xterm focus helper into a shared module and calls
it from all four new-terminal entry points (Cmd+T, "+" menu, IPC-triggered,
and per-group newTerminalTab/newTerminalWithShell). Previously only the
"+" menu path focused the new tab, so keyboard and IPC-created terminals
would drop the first keystroke.

Co-authored-by: Orca <help@stably.ai>
2026-04-28 21:22:18 -07:00
github-actions[bot] aec56be96e release: v1.3.24 v1.3.24 2026-04-29 04:18:25 +00:00
JinjingandOrca 4ac2a8c4a1 improve active worktree card visibility in light mode (#1241)
* feat(sidebar): improve active worktree card visibility in light mode

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

* tweak active worktree card contrast and primary badge style

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-28 19:10:11 -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
Brennan BensonandOrca 29411c5a63 fix(sidebar): clear agent status when sleeping a worktree (#1238)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 17:47:48 -07:00
ed6c8755fe Prefer upstream remotes for GitHub issue tasks (#1076)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-04-28 17:01:03 -07:00
Brennan BensonandOrca 44c90b9c9a feat(sidebar): expand agent-status hovercard trigger to whole card (#1235)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 16:34:32 -07:00
Neil c25b61c558 fix(mac): request media permissions dynamically (#1233) 2026-04-28 16:18:22 -07:00
JinjingandOrca 45d33bf744 feat(sidebar): inline Connect for disconnected SSH targets in remote project dialog (#1234)
Previously the "Open remote project" dialog showed disconnected SSH targets
as disabled rows with a "Not connected" label, forcing users out to Settings
to bring them up. Now each disconnected row has an inline Connect button,
and the row state updates live via the ssh:state-changed listener so the
user can proceed without reopening the dialog.

Co-authored-by: Orca <help@stably.ai>
2026-04-28 16:05:33 -07:00
Jinwoo HongandOrca 25a0cb5444 fix(terminal): refresh WebGL canvas after split reparenting (#1230)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 15:49:15 -07:00
github-actions[bot] 3d3815fe2c release: 1.3.24-rc.3 [rc-slot:2026-04-28-15] v1.3.24-rc.3 2026-04-28 22:16:20 +00:00
github-actions[bot] 869d65d091 release: v1.3.24-rc.2 v1.3.24-rc.2 2026-04-28 21:46:06 +00:00
Brennan BensonandOrca ae994e7032 feat(settings): gate Agent Dashboard behind experimental setting (#1219)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 14:41:37 -07:00
Brennan BensonandOrca b6e736a5b4 fix(sidebar): top-align worktree status dot with title (#1231)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 14:38:34 -07:00
Brennan BensonandOrca af284dbac7 fix(sidebar): let heuristic 'working' beat retained 'done' in worktree dot (#1228)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 14:06:19 -07:00
Jinwoo HongandOrca e4f9c2496f feat(skills): add standalone orchestration skill (#1227)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 13:25:16 -07:00
Jinwoo HongandOrca 910c5719d1 fix(terminal): restore cursor visibility on daemon snapshot reattach (#1217)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 13:12:14 -07:00
Brennan BensonandOrca 1937d481a0 test(notifications): guard agent-task-complete producer at IPC boundary (#1218)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 13:09:22 -07:00
JinjingandOrca 56d2386b5e fix: stop file explorer edge auto-scroll on drag leave (#1225)
- fix: stop file explorer edge auto-scroll on drag leave

Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:57:49 -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
NeilandOrca 1559cd290f fix(agents): detect Kiro under its real binary name kiro-cli (#1223)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:37:50 -07:00
Jinwoo HongandOrca c9391e203f feat(orchestration): add inter-agent orchestration system (#1188)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:21:31 -07:00
Brennan BensonandOrca 2c494da361 feat(agents): Agent Dashboard v2 — hook endpoint discovery, dashboard UI, sidebar status overlay (#1147)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 10:13:32 -07:00
Brennan BensonandOrca 41939bf391 refactor(pty): extract sessionId helper and harden daemon spawn cleanup (#1216)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 10:08:00 -07:00
github-actions[bot] f4d8ec72fb release: 1.3.24-rc.0 [rc-slot:2026-04-28-03] v1.3.24-rc.0 2026-04-28 10:36:28 +00:00
github-actions[bot] a01d94abbf release: v1.3.23 v1.3.23 2026-04-28 07:48:33 +00:00
JinjingandOrca a65a463883 fix: update Cmd+J placeholder and comments to use 'repo/worktree' terminology (#1210)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 00:45:50 -07:00
NeilandOrca 6834a980d8 fix(terminal): restore Polish / US-Extended Option+letter composition (#1205) (#1209)
* fix(terminal): restore Polish / US-Extended Option+letter composition (#1205)

The macOptionAsAlt layout probe only inspects `navigator.keyboard.getLayoutMap()`,
which surfaces the base (unshifted) layer. Polish Pro, US Extended, ABC
Extended, and the CJK Roman IMEs all ship a US-QWERTY base layer and put
their dead-key composition on the Option layer — invisible to the
fingerprint. The probe therefore classified them as `'us'`, flipped
`macOptionIsMeta=true`, and xterm.js translated every Option+letter into
an Esc+letter readline chord, silently swallowing ą, ć, ę, ł, etc.

Adds a main-process IPC that reads macOS's
`AppleCurrentKeyboardLayoutInputSourceID` (the same signal Ghostty uses
via TISCopyCurrentKeyboardInputSource) and an explicit denylist of input
source IDs whose Option layer composes. When the active ID is on the
denylist, the probe forces `'non-us'` so `effectiveMacOptionAsAlt`
resolves to `'false'` and Option+letter compositions reach the shell.

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

* fix(terminal): widen Option+letter composition fix to ABC + all non-US layouts

My earlier attempt at #1205 missed the broader bug: Option+A wasn't working
on the plain "ABC" layout either (Option+A → å got swallowed). Two
corrections:

1. systemPreferences.getUserDefault only reads NSGlobalDomain / the app's
   own domain. AppleCurrentKeyboardLayoutInputSourceID lives in
   com.apple.HIToolbox, so the previous IPC returned null on every
   machine. Switched to execFileSync('/usr/bin/defaults') with a 500ms
   timeout — the same mechanism Apple documents — so the real ID reaches
   the renderer. Verified live: the IPC now returns
   `com.apple.keylayout.ABC` instead of `null`.

2. The denylist approach was too narrow. macOS ships many layouts that
   share a US-identical base layer but compose via Option (ABC, Polish
   Pro, US Extended, ABC Extended, every CJK Roman IME). Flipped to an
   allowlist matching Ghostty: only com.apple.keylayout.US and
   com.apple.keylayout.USInternational-PC get Option-as-Meta; everything
   else defaults to compose. When the IPC returns a concrete ID, the
   classifier is authoritative and the layout fingerprint is skipped;
   the fingerprint only runs as a fallback on non-Darwin / IPC failure.

Verified live in dev: on ABC, Option+A now produces å in the terminal.

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

* fix(ipc): read keyboard input source ID asynchronously

Avoids blocking the main-process event loop on every focus-in probe
(up to 500ms). Same behavior, same timeout — just non-blocking.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-28 00:32:28 -07:00
6233b8e8a4 feat: Add GitHub PR review workflow to tasks (#1172)
* Render GitHub markdown safely

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

* Support PR line comment ranges in diffs

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

* Add GitHub item dialog review workflow

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

* Make attribution tests environment-safe

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

* Wire GitHubItemDialog for row clicks and bound file cache

Row clicks in the Tasks GitHub list now open the new GitHubItemDialog
instead of the legacy GitHubItemDrawer, making the PR review workflow
reachable from the main entry point. The unused drawer and its state
are removed.

Also bounds prFileContentCache at 64 entries with LRU eviction so the
module-level map can no longer grow without limit across many PR
openings in a session.

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

* Convert GitHubItemDialog to a right-side drawer

Replaces the centered Dialog modal with a Sheet drawer (side=right,
max-w 960/1100/1280 across breakpoints) so the review surface slides
in from the side instead of popping over the task list.

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

* Address review feedback on GitHub work-item details

- Restore full pagination in listAssignableUsers (REST /assignees --paginate)
  so repos with >100 assignees no longer silently drop users from the picker.
- Drop redundant REST /users/<login> fan-out in getMentionParticipants; the
  aliased GraphQL query already returns login/name/avatarUrl.
- Parallelize mention-participant lookup with checks/participants fetch.
- Avoid mutating caller-provided objects in mergeGitHubUsers.
- Type addIssueComment / addPRReviewComment(Reply) preload wrappers as
  Promise<GitHubCommentResult> instead of Promise<unknown>.
- Use typeof startLine === 'number' to harden the review-comment guard.

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

---------

Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-04-28 00:11:39 -07:00
JinjingandOrca 3bf738fc7f test(ui): fix openTaskPage tests by including nav-history slice (#1208)
* feat(nav): back/forward traverses Tasks page visits

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>

* test(ui): include worktree-nav-history slice in test store

openTaskPage calls get().recordViewVisit('tasks'), which lives in
the worktree-nav-history slice. The ui.test.ts store was composing
only the UI slice, so the two settings-navigation tests threw
TypeError: get(...).recordViewVisit is not a function.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:53:00 -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
github-actions[bot] 8aff317fc0 release: v1.3.23-rc.2 v1.3.23-rc.2 2026-04-28 06:40:35 +00:00
NeilandOrca db7b633d23 fix(notifications): restore agent-task-complete dispatch broken by #944 (#1200)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:39:21 -07:00
JinjingandOrca e25da448ee fix(monaco): disable syntax validation in diff viewer (#1206)
The sandboxed TS worker parses concatenated original+modified text in
the diff viewer, producing fake parse errors like "',' expected (1005)".
Disable syntax validation alongside the already-disabled semantic and
suggestion diagnostics; tokenization still provides colorization.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:35:38 -07:00
JinjingandOrca 37e554b65a Squashed commits (#1203)
- fix(browser-pane): ensure tooltip reliably triggers on container hover

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:30:59 -07:00
JinjingandOrca 6cd8a92e20 fix(e2e): update worktree test for tabbed Create Workspace modal (#1202)
Remove assertions on StartFromField (deleted in #1191); keep getBaseRefDefault
IPC round-trip + render-error sweep as the #1186 regression guard.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:30:09 -07:00
JinjingandOrca 6212bc76b4 feat(cmd-j): sort by recency on empty query with worktree cap (#1201)
Empty-query Cmd+J now uses pure recency (lastActivityAt) so it's a predictable jump-back surface. Typing still uses smart-sort for ranking. Adds a hint row when worktrees are capped and browser tabs are present.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:25:43 -07:00
JinjingandOrca 9a7cfd4985 fix(ssh): support new markdown file creation on SSH worktrees (#1199)
Skip the local shell.pathExists probe when a connectionId is present and
forward connectionId through to fs.createFile, so 'New Markdown File'
works on SSH worktrees.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:03:03 -07:00
github-actions[bot] 8559d07509 release: v1.3.23-rc.1 v1.3.23-rc.1 2026-04-28 05:48:26 +00:00
NeilandOrca 0e8571b58d Tabbed Create Workspace dialog (Quick / Create from…) (#1191)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:48:04 -07:00
JinjingandOrca a110b6d794 feat(ui): unify SSH workspace icon to Server across all surfaces (#1198)
SSH workspaces previously rendered as Globe in some places and Wifi in
others. Globe implies web/internet and Wifi implies wireless network
strength — neither reads as "remote machine". Use Server/ServerOff
across every SSH context for a consistent mental model. Globe remains
in true browser/web surfaces (browser pane, address bar, tabs, clone
from URL, Browser settings pane).

Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:31:11 -07:00
Jinwoo HongandOrca 3abf68dbef fix(terminal): restore cursor visibility after scrollback replay (#1192)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:50:13 -07:00
Brennan BensonandOrca 4279fc8075 feat(agent-hooks): on-disk endpoint discovery for surviving PTYs (v2) (#1196)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:49:18 -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