Commit Graph
1640 Commits
Author SHA1 Message Date
github-actions[bot] 8b0d378eb1 release: v1.3.46-rc.0 [rc-slot:2026-05-09-03] v1.3.46-rc.0 2026-05-09 10:26:16 +00:00
github-actions[bot] 8151069816 release: v1.3.45 v1.3.45 2026-05-09 09:06:24 +00:00
NeilandNeil Parker 835087e77c fix(windows): titlebar logo color and window-controls overlap (#1627)
Co-authored-by: Neil Parker <nwparker@anthropic.com>
2026-05-09 02:05:28 -07:00
Jinjing e8c56be897 test: harden terminal attention e2e (#1626) 2026-05-09 01:20:35 -07:00
NeilandOrca 5eb5043344 Move STYLEGUIDE.md into docs/ (#1625)
Co-authored-by: Orca <help@stably.ai>
2026-05-09 01:08:35 -07:00
github-actions[bot] e602decf1d release: v1.3.44 v1.3.44 2026-05-09 08:05:39 +00:00
JinjingandOrca 89528f27c0 fix(sidebar): remove confusing base-drift banner from worktree card (#1622)
Co-authored-by: Orca <help@stably.ai>
2026-05-09 00:29:16 -07:00
JinjingandOrca ce67f794d2 fix(worktree): allow Unicode letters/numbers in workspace names (#1624)
Users typing CJK or other non-ASCII names (e.g. 中文) into the Create
Workspace dialog hit "Invalid worktree name" because the sanitizer's
ASCII-only allowlist stripped every character, leaving an empty string.

Replace the allowlist with a Unicode-aware one (\p{L}\p{N}) so non-Latin
scripts pass through. Git ref-format and modern filesystems accept UTF-8.

Co-authored-by: Orca <help@stably.ai>
2026-05-09 00:27:41 -07:00
Jinwoo HongandOrca b023c5713e Polish rich markdown editor interactions (#1609)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 23:28:01 -07:00
Brennan BensonandOrca 3dc5708eb3 fix(diff-comments): scroll diff to clicked note, drop sidebar pencil (#1605)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 23:00:50 -07:00
Brennan BensonandOrca 318e2b4c2c feat(telemetry): onboarding cohort + extension events (#1608)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 19:57:18 -07:00
Jinjing 68d42040f4 fix: isolate e2e daemon and onboarding state (#1606) 2026-05-08 17:45:02 -07:00
f5be12b4a3 feat(add-repo): auto-fill clone destination with workspace parent dir (#1594)
* feat(add-repo): auto-fill clone destination with workspace parent dir

Pre-fills the Clone from URL destination on first entry to the clone step,
deriving the parent directory of settings.workspaceDir so users with the
default config land at ~/orca instead of an empty field that blocks the
Clone button.

Closes #1592

* review: silence max-lines on AddRepoDialog

The PR pushes the file from 411 to 433 lines, over the 400-line cap
for src/renderer/. Matches existing precedent in this dir (RemoteFileBrowser,
WorktreeCard, WorktreeList all carry the same disable + why-comment).

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>
Co-authored-by: Orca <help@stably.ai>
2026-05-08 17:37:41 -07:00
Brennan BensonandOrca 325ee96ec4 docs(styleguide): UI style guide + AGENTS pointer + selection token cleanup (#1601)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 15:38:09 -07:00
github-actions[bot] a44ab4130c release: v1.3.43-rc.1 [rc-slot:2026-05-08-15] v1.3.43-rc.1 2026-05-08 22:24:51 +00:00
JinjingandOrca 11b362c92d feat(worktree): optimistic create with reconciled base status (#1600)
Surface worktree creation immediately and reconcile remote base state
asynchronously, emitting drift/conflict events as fetches complete.

Co-authored-by: Orca <help@stably.ai>
2026-05-08 14:59:23 -07:00
Jinjing cca7c83c80 fix: link issue metadata before workspace launch (#1599) 2026-05-08 14:58:13 -07:00
github-actions[bot] fc3b44b77f release: v1.3.43-rc.0 v1.3.43-rc.0 2026-05-08 21:54:35 +00:00
JinjingandOrca e0851ec722 feat: onboarding flow for new users (#1596)
* wip

* WIP: Changes before auto-review fixes

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

* WIP: Changes before auto-review fixes

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

* WIP: Changes before auto-review fixes

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

* fix: address auto-review findings (iteration 1)

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

* fix: address auto-review findings (iteration 2)

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

* fix: archive review context and improve agent detection on wizard mount

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

* fix: address CI lint failures and split use-onboarding-flow.ts

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

* fix: mock ./onboarding in register-core-handlers test

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

* fix: also toggle light class on documentElement so onboarding e2e theme wait resolves

The onboarding e2e calls waitForFunction(() => classList.contains('dark') || classList.contains('light')) before snapshotting the starting theme. applyDocumentTheme only toggled 'dark', so on a host that resolves system to light the wait timed out (CI Linux headless). Toggle 'light' as the inverse class so consumers can observe the resolved theme symmetrically; Tailwind keys only on 'dark' so styling is unchanged.

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

* fix: add braces to Landing menu close-on-outside-click handler

oxlint config requires braces for all if statements.

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

* chore: trigger CI

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-08 14:17:50 -07:00
Brennan BensonandOrca 2050fa87a0 feat(source-control): send all notes to agent in a new terminal tab (#1568)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 13:52:08 -07:00
Brennan BensonandOrca 2fafb9b351 fix(opencode): light up worktree status dot for opencode panes (#1593)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 13:43:49 -07:00
Jinjing 3cf4f7e93d Close node-pty spawn failure fds (#1597) 2026-05-08 13:27:53 -07:00
JinjingandOrca 97c91e8af3 fix: scroll long SSH target list in Add Repo dialog (#1598)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 13:26:49 -07:00
Jinjing bcbb7528bd Close node-pty macOS slave fd (#1588) 2026-05-08 13:09:09 -07:00
Jinjing 2dcff0687f fix: rename sidekick to pet (#1586) 2026-05-08 13:04:09 -07:00
Brennan BensonandOrca f5492c0043 feat(diff-comments): edit notes inline from diff card and sidebar (#1570)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 12:59:51 -07:00
JinjingandOrca 1fbe7d9dbf Improve node-pty spawn diagnostics (#1587)
* Improve node-pty spawn diagnostics

* Preserve original error stack when adding node-pty recovery hint

Mutate the existing Error's message instead of replacing the object so
the original stack trace and custom fields survive into telemetry/logs.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-08 12:53:03 -07:00
Brennan BensonandOrca 952ee7a6ec fix(opencode): mirror user OPENCODE_CONFIG_DIR via per-PTY overlay (#1595)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 12:12:19 -07:00
github-actions[bot] b6dab85aaa release: v1.3.42-rc.1 v1.3.42-rc.1 2026-05-08 17:56:35 +00:00
Brennan BensonandOrca 002e2acc38 feat(telemetry): onboarding-funnel events + nth_repo_added cohort (#1591)
Co-authored-by: Orca <help@stably.ai>
2026-05-08 10:50:43 -07:00
JinjingandOrca 20f950de3d feat(editor): register custom Monaco language for .astro files (#1590)
Map .astro to a dedicated 'astro' language with frontmatter, embedded
script/style, and expression interpolation handling, instead of falling
back to plain html.

Co-authored-by: Orca <help@stably.ai>
2026-05-08 10:24:43 -07:00
JinjingandOrca e400191cf0 fix(filesystem-auth): allow worktree access through macOS /var canonical alias (#1589)
#1524 stopped realpath'ing every worktree root during background refreshes
to avoid TCC prompts, which broke File Explorer for worktrees registered
under /var/folders when realpath canonicalizes them to /private/var/folders.

Lazily canonicalize the registered root only when the user actively touches
it: pass the pre-realpath source path through resolveAuthorizedPath so
isPathAllowedIncludingRegisteredWorktrees can match the canonical target
against the source's registered ancestor and cache the canonical root for
future lookups.

Co-authored-by: Orca <help@stably.ai>
2026-05-08 10:22:15 -07:00
Jinjing 884feb42b2 fix: add update recheck action (#1585) 2026-05-08 09:38:52 -07:00
github-actions[bot] 9f5306c96d release: v1.3.42-rc.0 [rc-slot:2026-05-08-03] v1.3.42-rc.0 2026-05-08 10:37:10 +00:00
NeilandNeil Parker 7c45ef45b4 feat(windows): custom title bar with renderer-drawn window controls (#1583)
Replace the default Windows native title bar with a custom renderer-drawn
titlebar to match the macOS experience:

- Set titleBarStyle:'hidden' on win32 to remove the OS chrome
- Add min/max/close buttons (Fluent-style SVG) fixed to the top-right corner,
  rendered last in DOM order so they're never blocked by -webkit-app-region:drag
- Route close through IPC (window:close-requested) so the terminal-running
  confirmation guard stays active; minimize/maximize via window:minimize and
  window:maximize IPC channels
- Add maximize state sync (window:maximize-changed) so the restore icon shows
  correctly
- Add Orca logo + ··· application-menu button on the left in place of the bare
  pl-2 spacer; ··· calls Menu.getApplicationMenu().popup() replicating Alt-key
  reveal
- Add window-controls-titlebar-spacer to reserve 138px on the right of the
  full-width titlebar so content isn't obscured by the overlay

Co-authored-by: Neil Parker <nwparker@anthropic.com>
2026-05-08 00:36:37 -07:00
83b3369ea5 fix: Support Codex pet sidekick animations (#1533)
* Support Codex pet sidekick animations

* Refine Codex pet defaults and drop unused failed animation state

Always default spritesheetPath to spritesheet.webp when a manifest
omits it, even when explicit frame/animation metadata is present, so
non-Codex bundles still benefit from the standard sheet name.

Drop the 'failed' animation entirely — Orca has no failure state, so
mapping interrupted completions to 'failed' would conflate user
cancellation with agent failure. Codex spritesheets can still expose
a 'failed' row as an asset contract, but it's never selected at runtime.

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

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-07 23:50:20 -07:00
buf0-bot[bot]andorca-bot a3242035c2 fix: pr-bug-scan findings from #1478 (#1561)
Fixed banner Docs link to use openExternal IPC like the block variant; restricted hasKeyringFallback to same-host keyring accounts so multi-host users aren't told a fallback exists when none does.

Findings addressed:
- src/renderer/src/components/github-project/GhAuthErrorHelp.tsx:218-227 — Banner Docs link uses <a target="_blank"> instead of shell IPC
- src/main/github/auth-diagnose.ts:121-127 — hasKeyringFallback ignores host, can mislead multi-host users

Rebased onto current main to drop unrelated reverts.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:14:05 -07:00
buf0-bot[bot]andorca-bot 32b88bcdc5 fix: pr-bug-scan findings from #1481 (#1566)
Split session screen's clearTerminalCache cleanup into a mount-only effect; included client identity in home-screen wireUp dep key via a WeakMap-derived clientKey so forceReconnect re-attaches subs.

Findings addressed:
- mobile/app/h/[hostId]/session/[worktreeId].tsx:436 — clearTerminalCache fires on every client identity change
- mobile/app/index.tsx — useEffect deps array uses inline expression — runs every render

Rebased onto current main.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:11:06 -07:00
buf0-bot[bot]andorca-bot 57d095bf6f fix: pr-bug-scan findings from #1475 (#1562)
host-store: write AsyncStorage metadata before SecureStore token to avoid orphaned keychain tokens on crash. mobile IPC: coalesce repeated getPairingQR calls onto a single pending device token via new DeviceRegistry.getOrCreatePendingDevice.

Findings addressed:
- [high] mobile/src/transport/host-store.ts — saveHost orders Keychain write before AsyncStorage — orphaned tokens on crash
- [low] src/main/ipc/mobile.ts:84-95 — getPairingQR creates a device token on every call, leaking pre-paired entries

Rebased onto current main to resolve conflicts; preserved tokenCache.set added on main.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:11:03 -07:00
buf0-bot[bot]andorca-bot 74159b43d1 fix: pr-bug-scan findings from #1477 (#1565)
Reordered pi prefill extension to check event.reason before consuming env var; appended shell unset/clear for ORCA_PI_PREFILL after pi exits to avoid stale prefill on rerun.

Findings addressed:
- src/main/pi/titlebar-extension-service.ts:36-46 — Prefill env var consumed before reason check — may silently drop prefill
- src/main/pi/titlebar-extension-service.ts:30-46 — ORCA_PI_PREFILL still set in shell env after pi exits

Rebased onto current main.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:10:43 -07:00
buf0-bot[bot]andorca-bot ba034c3c3d fix: pr-bug-scan findings from #1454 (#1567)
Addresses two SIGKILL/wake-routing bugs:

- setWorkspaceSession now merges prior tab.ptyId / ptyIdsByLeafId
  when the incoming snapshot's binding is empty, closing the second
  half of the SIGKILL race that could clobber persistPtyBinding.
- DaemonPtyRouter.shutdown skips sessionAdapters.delete when
  keepHistory=true so legacy-adapter sessions wake on the right
  adapter on resume.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:07:38 -07:00
buf0-bot[bot]andorca-bot cd686f58d0 fix: pr-bug-scan findings from #1551 (#1571)
Re-added the `item.type !== 'pr'` guard around the relocated 'Start workspace from issue' button in GHEditSection so PRs no longer show it.

### Findings addressed
-  **[medium]** `src/renderer/src/components/GitHubItemDialog.tsx` — 'Start workspace from issue' now renders on PRs

Rebased onto current main; removed the now-redundant early `return null` for PRs at the top of GHEditSection so the per-button guard is reachable and labels/assignees popovers remain available on PRs.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:06:47 -07:00
buf0-bot[bot]andorca-bot 98d3deaa13 fix: pr-bug-scan findings from #1508 (#1569)
Fix race between in-flight remote watcher install and unwatch/shutdown by tracking cancel tokens; emit overflow fs:changed when the 60s retry timeout gives up so renderer falls back to manual refresh.

### Findings addressed
- [medium] src/main/ipc/filesystem-watcher.ts:445-480 — Race between in-flight installRemoteWatcher and unwatch/shutdown leaks watcher
- [low] src/main/ipc/filesystem-watcher.ts:497-505 — Silent timeout: 60s give-up never notifies renderer

Rebased onto current main.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:03:13 -07:00
buf0-bot[bot]andorca-bot 75ae6d9f6a fix: pr-bug-scan findings from #1518 (#1575)
Added seq + ref guards after awaits in post-scrollback re-subscribe path; awaitReady's prior in-flight promise now resolves before re-arming so old waiters don't pin 3s timers.

Findings addressed:
- mobile/app/h/[hostId]/session/[worktreeId].tsx:280 — Post-scrollback re-subscribe path lacks a seq guard after awaits
- mobile/src/terminal/TerminalWebView.tsx:770 — awaitReady promise replaced without resolving the prior one

Rebased onto current main; conflict in worktreeId.tsx resolved by preserving main's existing 'why: scrollback null viewport' comment alongside the new seq-recheck comment.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 23:00:12 -07:00
buf0-bot[bot]andorca-bot 390f9f52fc fix: pr-bug-scan findings from #1524 (#1572)
Don't seed empty-success worktree roots in worktrees:list[All] catch (prevents auth-cache poisoning); restored focus-gated fetchWorktrees polling for the active repo so non-active worktrees pick up terminal-driven branch switches; encode detached HEAD as undefined instead of '' so renderer's nullish-coalescing preserves prior branch.

Rebased onto current main to apply only the intended diff.

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 22:59:33 -07:00
buf0-bot[bot]andbuf0-bot 9cf605796a fix: pr-bug-scan findings from #1532 (#1574)
Updated reconnect-backoff comments in rpc-client.ts and connection-health.ts to reflect the actual ~6m total (not ~2m). Made valueFromMs() snap non-preset ms to the closest finite preset so the picker's selected radio agrees with the row sublabel.

Rebased onto current main to resolve conflicts; only the 3 Fixer-summary files.

Co-authored-by: buf0-bot <buf0-bot@users.noreply.github.com>
2026-05-07 22:59:26 -07:00
Neilandhermes fc0a3f241f fix(mobile): silence no-control-regex on bracketed-paste sanitizer (#1580)
The regex /\x1b\[20[01]~/g intentionally matches control characters —
that's the entire point of the sanitizer (stripping embedded \x1b[200~ /
\x1b[201~ markers from clipboard text). Suppress the lint warning with
the same convention used elsewhere in mobile/ (see scripts/repro-worktree-startup-stream.ts).

Comment-only change, zero runtime impact. Follows up #1576.

Co-authored-by: hermes <hermes@stably.ai>
2026-05-07 22:54:54 -07:00
buf0-bot[bot]andorca-bug-scan-bot 52cc6d5f97 fix: address pr-bug-scan findings from #1553 (#1576)
Strip embedded \x1b[200~/\x1b[201~ sequences from clipboard text before bracketed-paste wrap; route accessory-key repeat through a ref so held-key repeats use the current handleAccessoryKey.

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-07 22:48:27 -07:00
buf0-bot[bot]andorca-bug-scan-bot 5e8f796200 fix: pr-bug-scan findings from #1452 (#1560)
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-07 22:18:17 -07:00
buf0-bot[bot]andorca-bot 493f08bfa5 fix: pr-bug-scan findings from #1472 (#1564)
Fixed bundle-sheet keyed-canvas discard, narrowed magenta key threshold to avoid keying purples/pinks, hardened bundle copyFile against TOCTOU via O_NOFOLLOW, and skipped frame detection when the manifest already provides a valid sprite layout.

Rebased onto current main to resolve conflicts; reviewed and merged round-1 reviewer feedback (no committed node_modules).

Co-authored-by: orca-bot <bot@stably.ai>
2026-05-07 22:07:58 -07:00