Commit Graph
1172 Commits
Author SHA1 Message Date
NeilandOrca e61ffbcbe3 fix(tabs): prevent Cmd+B collapse from occluding first tab (#1112)
Co-authored-by: Orca <help@stably.ai>
2026-04-25 21:51:18 -07:00
NeilandOrca 6d585e821e ci: cache electron + electron-builder tool downloads on release (#1110)
electron-builder fetches the Electron binary and its platform tools
(notarytool, winCodeSign, nsis, squirrel, AppImage) on every run.
Cache those per-platform so repeat releases skip the re-download.
Saves ~30-90s per job, including the macOS long pole.

Key includes pnpm-lock.yaml so a bump to electron/electron-builder
invalidates stale cached binaries; restore-keys falls back to the
latest per-platform cache in between lockfile changes.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 21:30:52 -07:00
Jinwoo Hong 7b25a02d1c feat(tasks): improve editability affordances (#1107) 2026-04-25 20:42:31 -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
Yax PatelandJinwoo-H 2551758c88 feat/markdown preview (#849)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-25 19:27:47 -07:00
github-actions[bot] b65a3d7cb8 release: v1.3.19-rc.8 v1.3.19-rc.8 2026-04-26 02:19:36 +00:00
Brennan Benson a5e5ce2900 feat(tabs): slimmer tabs with window-drag strip on top (#1059) 2026-04-25 19:06:39 -07:00
Brennan Benson 7c75e9a853 feat(terminal): show bell indicator until user interacts (#1068) 2026-04-25 19:05:53 -07:00
Matt Van HornandMatt Van Horn ff70ac0814 fix(diff): collapse redundant line-number gutters in inline diff view (#1091)
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-04-25 19:04:03 -07:00
NeilandOrca eeffbf0a73 ci: cache pnpm store on release + centralize node version in .nvmrc (#1106)
Co-authored-by: Orca <help@stably.ai>
2026-04-25 19:03:05 -07:00
Neil b9646acbe4 fix(pi): surface Pi working spinner on worktree card (#1083 follow-up) (#1105)
Pi's titlebar extension emits OSC 0 titles every 80ms during agent work
(`⠋ π - cwd`, `⠙ π - cwd`, …) and a trailing idle title on `agent_end`
(`π - cwd`). Node-pty on the main side batches output every 8ms, so the
renderer frequently receives multiple title updates in a single `pty:data`
chunk.

The pty-transport's data handler used `extractLastOscTitle`, which returns
only the final OSC title in a chunk. For fast agents (e.g. Pi with a small
local model) the whole working→idle cycle often lands in one IPC payload —
the intermediate working frames were silently dropped, and the worktree
card's `detectAgentStatusFromTitle` only ever saw the idle title.

Empirically on macOS: polling `runtimePaneTitlesByTabId` 20×/0.25s during
a multi-second Pi working window showed the stored title stuck at "Pi"
throughout, while a raw `ipcRenderer.on('pty:data')` listener captured
the working frames flowing through IPC correctly. After the fix, the same
polling captures "⠋ Pi" alongside "Pi".

- Add `extractAllOscTitles` in the shared agent-detection module and feed
  every OSC title in the chunk through `applyObservedTerminalTitle` in
  order, so the working→idle transition reaches the store and the agent
  tracker.
- Keep `extractLastOscTitle` exported for the main-process stats tracker
  and orca-runtime, which only care about the most recent title.
- Pin the regression with three focused tests: per-chunk spinner frames,
  dispatcher-routed end-to-end, and the exact coalesced-chunk scenario
  that used to swallow the working state.
2026-04-25 19:01:43 -07:00
555ab95d5a feat(shortcuts): add Ctrl+PageDown/Up to cycle terminal tabs only (#1094)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-04-25 18:45:21 -07:00
NeilandOrca c871f46ed3 fix(updater): let RC users upgrade to newer RC *and* stable releases (#1104)
PR #1053 fixed RC→RC by switching prerelease users to electron-updater's
native github provider with allowPrerelease=true. That silently broke
RC→stable: GitHubProvider.getLatestVersion() filters the atom feed by
channel, so when the running build's channel is "rc" any stable release
(channel=null) gets skipped — trapping the user on the RC channel.

Fix: keep the generic provider and resolve the newest tag ourselves by
parsing GitHub's /releases.atom (any channel, semver-newest strictly >
current version). For prerelease users we re-pin the feed to
/releases/download/<tag>/ before each check, which handles BOTH the
RC→newer-RC case from #1053 and the RC→stable case it broke. Stable
users keep the default /releases/latest/download/ feed untouched, and
the Shift-click RC opt-in path (enableIncludePrerelease) is unchanged.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 17:49:35 -07:00
NeilandOrca 3f8ebb258d ci: remove pr-size-labeler backfill workflow (#1103)
The action refuses to run unless GITHUB_EVENT_NAME=="pull_request",
so workflow_dispatch no-ops. Backfill was completed out-of-band via
a local script calling the REST labels endpoint; this one-off
workflow is no longer useful and is being deleted.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 17:40:26 -07:00
NeilandOrca 64c77d735a ci: add one-off workflow to backfill size labels on open PRs (#1102)
A manually-dispatched workflow that fans out across all open PRs and
runs the size labeler against each. This is a one-time verification
of the labeler against the existing PR set; the workflow will be
removed in a follow-up after it runs.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 17:30:44 -07:00
NeilandOrca b96dc93d72 ci: auto-label PRs by size via cbrgm/pr-size-labeler-action (#1101)
Adds a GitHub Actions workflow and config that labels every PR with
size/xs..size/xl based on files changed and lines added, so reviewers
can see at a glance how big a PR is. Lock files and generated/vendored
paths are excluded, and deletions aren't counted so refactors that
remove code aren't over-penalized.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 17:20:42 -07:00
JinjingandOrca 39364f975f fix(cli): unpack zod so packaged CLI can resolve it at runtime (#1098)
The CLI is compiled by tsc (not bundled) and launched via
ELECTRON_RUN_AS_NODE, which bypasses Electron's asar integration. After
#1090 introduced zod for envelope validation, the packaged CLI crashed
with MODULE_NOT_FOUND because zod was inside app.asar. Add it to
asarUnpack so require() can resolve it from app.asar.unpacked/node_modules.

Follow-up tracked in #1097 to add CI smoke-testing of the packaged CLI.

Co-authored-by: Orca <help@stably.ai>
2026-04-25 16:55:43 -07:00
Jinjing 50ebd11003 feat(fs): raise preview size cap for PDFs and images (#1096)
Local IPC bumps to 50MB; SSH relay bumps to 10MB (bounded by the 16MB JSON-RPC frame cap). Text and search paths keep the 5MB cap.
2026-04-25 16:45:01 -07:00
3bf2b31c96 feat(language-detect): add Vue Monarch grammar for .vue syntax highlighting (#1093)
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-04-25 16:28:06 -07:00
github-actions[bot] 6ba751c85a release: v1.3.19-rc.6 v1.3.19-rc.6 2026-04-25 22:29:01 +00:00
github-actions[bot] 83afb185cf release: v1.3.19-rc.5 v1.3.19-rc.5 2026-04-25 22:24:55 +00:00
Neil dfd97f069a fix(pi): stop deleting user Pi data through overlay junctions (#1083) (#1092) 2026-04-25 15:23:24 -07:00
github-actions[bot] 1d6d68e92f release: 1.3.19-rc.4 [rc-slot:2026-04-25-15] v1.3.19-rc.4 2026-04-25 22:06:37 +00:00
github-actions[bot] 5301c3670b release: v1.3.19-rc.3 v1.3.19-rc.3 2026-04-25 21:36:08 +00:00
Neil 15918d64d5 Fix attribution daemon follow-up (#1088) 2026-04-25 14:04:08 -07:00
Neil fef3f7d2f8 refactor(cli): split runtime-client.ts and add envelope schema validation (#1090)
* refactor(cli): split runtime-client.ts into runtime/ subsystem

Break the 413-line src/cli/runtime-client.ts into focused modules under
src/cli/runtime/:

- types.ts       — RuntimeRpcSuccess/Failure, RuntimeClientError,
                   RuntimeRpcFailureError
- metadata.ts    — readMetadata / tryReadMetadata /
                   getDefaultUserDataPath
- transport.ts   — sendRequest: Unix-socket newline-framed JSON with
                   id and runtimeId verification and timeout handling
- status.ts      — getCliStatus + buildCliStatusResponse +
                   isProcessRunning
- launch.ts      — launchOrcaApp + macOS .app-bundle resolution +
                   ELECTRON_RUN_AS_NODE env handling
- client.ts      — RuntimeClient class, now a thin composer
- index.ts       — subsystem barrel

runtime-client.ts becomes a backward-compat re-export barrel so
src/cli/index.ts and the existing tests import the same symbols from
the same path. No behavior changes.

Motivation: the file had an eslint-disable max-lines override and
mixed five concerns (envelope types, wire transport, metadata I/O,
status aggregation, cross-platform app launch). Splitting them makes
each concern independently testable and unblocks adding schema
validation at the RPC boundary.

* feat(cli): validate runtime RPC envelope with Zod at decode boundary

Add RuntimeRpcEnvelopeSchema and apply it inside sendRequest so every
response frame is validated against the id/ok/result/error/_meta shape
before the CLI hands it to the caller. The payload (`result`) is left
as unknown — the TResult generic remains the caller's responsibility —
so only the envelope itself is the contract this schema enforces.

Motivation: the CLI and the Orca main runtime are separate processes
and can drift in version (older CLI vs newer app, or vice versa during
dev HMR). A malformed or partial frame used to risk mis-typed field
access downstream; it now surfaces as a single structured
`invalid_runtime_response` error.

Behavior:
- Well-formed success and failure frames continue to decode unchanged.
- Failure frames without `_meta` are accepted (the runtime may fail
  before resolving its own runtimeId).
- Valid JSON that does not match the envelope shape now rejects with
  `invalid_runtime_response`, matching the existing error code for
  non-JSON frames.

Tests: adds a pure schema test file
(src/cli/runtime/envelope-schema.test.ts) covering accept/reject cases.
The existing integration tests in runtime-client.test.ts continue to
pass unchanged.
2026-04-25 13:51:50 -07:00
Neil 36c6a9241f refactor(cli): split index.ts into per-verb handler modules (#1089) 2026-04-25 13:32:14 -07:00
Jinjing 5f1161b1ab feat: add basic syntax highlighting for .astro files (#1084)
Maps .astro to Monaco's html language id, matching the existing
treatment of .vue and .svelte. This gives Astro files HTML-level
coloring instead of plain text. Proper SFC-aware highlighting
(frontmatter TS, template expressions) would require a Monarch
grammar — tracked separately.
2026-04-25 13:23:31 -07:00
Jinjing b4d688a580 fix(linear): clarify personal API key requirement and disconnect icon (#1087)
Users were tempted to click "New passkey" on the Linear Security page
instead of "New API key". Bolded key terms, spelled out the exact button
to click, and loosened the dialog header spacing.

Also swapped the disconnect button's chain-Link icon for Unlink, since
the linked-chain icon read as "connect".
2026-04-25 13:17:10 -07:00
github-actions[bot] a04be9766d release: 1.3.19-rc.2 [rc-slot:2026-04-25-03] v1.3.19-rc.2 2026-04-25 10:12:43 +00:00
Jinwoo Hong 3fc0a9680e fix: prevent pinned worktrees from expanding collapsed groups (#1081) 2026-04-25 00:29:34 -07:00
github-actions[bot] 68970c3e71 release: v1.3.19-rc.1 v1.3.19-rc.1 2026-04-25 07:09:47 +00:00
Jinjing 96d6354b0e docs(readme): add Annotate AI Diff feature, SSH support, and Spanish translation (#1080) 2026-04-25 00:01:53 -07:00
Neil 2796e5f21b Improve terminal attribution shims (#1079) 2026-04-24 22:50:30 -07:00
Neil 91f1e72cd5 fix(editor): stop infinitely flashing find-widget button tooltips (#1077) 2026-04-24 22:14:30 -07:00
Jinjing aa10811780 fix: address review findings (#1078)
- fix: address review findings
- wip
- wip
2026-04-24 21:58:21 -07:00
Neil a2928e62be refactor(terminal): remove FORCE_HYPERLINK feature and setting (#1075) 2026-04-24 21:06:21 -07:00
Jinwoo Hong cc47cad95f feat(tasks): add Linear team selector (#1074) 2026-04-24 21:03:30 -07:00
Neil f1a1f18cf8 Attribution (#1049) 2026-04-24 20:55:50 -07:00
github-actions[bot] 7ea0e8d0d1 release: v1.3.18 v1.3.18 2026-04-25 03:55:23 +00:00
Jinwoo Hong bec6a5c508 feat(tasks): persist last-used task source (GitHub/Linear) (#1071) 2026-04-24 20:29:41 -07:00
Neil 32d60308d7 fix(agents): detect Auggie using real auggie binary name (#1072) 2026-04-24 20:25:47 -07:00
Brennan Benson 1f354cb4c7 feat(sidebar): agent-status plumbing behind AGENT_DASHBOARD_ENABLED (dark launch) (#1070) 2026-04-24 18:53:00 -07:00
Brennan Benson 178a64626c fix(term): stop cold-restore from leaking CSI 997 to fresh shell (#1063) 2026-04-24 18:21:37 -07:00
Jinjing 68ceae531d feat(composer): default blank workspace name to a unique marine-creature (#1069)
Use the existing getSuggestedCreatureName helper as the fallback seed in
getWorkspaceSeedName so blank submissions get a distinct, readable name
scoped to the selected repo (respecting nestWorkspaces) instead of
colliding on the "workspace" literal.
2026-04-24 17:39:16 -07:00
Brennan Benson 60a8630f68 feat(ui): replace back/forward workspace navigation icons with arrows (#1066) 2026-04-24 17:22:24 -07:00
github-actions[bot] 005963192c release: v1.3.17 v1.3.17 2026-04-25 00:19:29 +00:00
Neil 51b8d124a7 fix(sidebar): keep worktree spinner working while any split pane is active (#1064) 2026-04-24 17:16:42 -07:00
github-actions[bot] ed49380b6d release: v1.3.17-rc.5 v1.3.17-rc.5 2026-04-24 23:56:25 +00:00
Jinjing 5766defd87 feat(ssh): surface SSH status in worktree UI and streamline add-repo flow (#1067)
- Show SSH icon (Globe/WifiOff) beside worktree titles in jump palette
  and WorktreeCard so remote state is visible at a glance.
- Replace inline add-repo flow in NewWorkspaceComposerCard with the
  existing add-repo modal for a single entry point.
- When no SSH targets are configured, let users jump straight to SSH
  settings from the add-repo dialog, and disable remote path until a
  target is selected.
2026-04-24 16:14:06 -07:00