Commit Graph
16002 Commits
Author SHA1 Message Date
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
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
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 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 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]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
buf0-bot[bot]andorca-bug-scan-bot 8d9b629b26 fix: pr-bug-scan findings from #1468 (#1559)
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-07 21:58:55 -07:00
buf0-bot[bot]andorca-bug-scan-bot 9bc8166ad8 fix: pr-bug-scan findings from #1465 (#1558)
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-07 21:58:13 -07:00
JinjingandOrca a41a663448 fix(new-workspace): keep Cmd/Ctrl+Enter submit working after source selection (#1557)
Selecting a PR/issue/Linear row replaces the focused input with a source
pill, which causes Chromium to retarget the next keydown to document.body.
Allow body/documentElement as submit targets so the modal shortcut keeps
working post-selection. Also tighten the modifier check to be platform-
exclusive (Cmd-only on Mac, Ctrl-only elsewhere).

Co-authored-by: Orca <help@stably.ai>
2026-05-07 20:25:50 -07:00
Jinwoo HongandOrca 868b4c48f1 fix(terminal): write PTY output live and de-overlap reattach restores (#1527)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 20:14:42 -07:00
JinjingandOrca 1a66cc99a0 ui(orca-yaml): differentiate first-time vs re-prompt trust dialogs (#1556)
The orca.yaml trust dialog now adapts copy and layout based on whether
this is a first-time approval or a re-prompt after the script changed.
Re-prompts lead with '<repo>'s setup script changed — run the new
version?' so users understand why they're being asked again.

Restyles the 'always trust' checkbox as a card and threads a
previouslyApproved flag from ensureHooksConfirmed into the dialog.

Co-authored-by: Orca <help@stably.ai>
2026-05-07 19:35:13 -07:00
Brennan BensonandOrca 57072bed51 fix(codex): register hook trust hashes so Codex 0.129 stops gating Orca's hooks (#1547)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 18:35:23 -07:00
Jinwoo HongandOrca 49b250a0f3 Settings: rephrase phone-fit-hold copy to drop third-party brand name (#1554)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 18:19:42 -07:00
Brennan BensonandOrca 5a2a32b614 feat(agent-dashboard): default-on, remove experimentalAgentDashboard toggle (#1538)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 17:16:51 -07:00
Brennan BensonandOrca 5bb147b897 Remove pty-output developer-permission detector (#1545)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 17:12:35 -07:00
Jinwoo HongandOrca f16030b8eb fix(runtime): pin dev WebSocket port to 6769 for deterministic pairing (#1552)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 17:10:43 -07:00
Jinwoo HongandOrca 22b63a0191 Mobile: indefinite phone-fit hold + configurable auto-restore (#1532)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 16:47:31 -07:00
JinjingandOrca 3591d89464 feat(gh-project): drag to resize project view columns (#1551)
Per-scope persisted column widths via fr-weight redistribution between
adjacent column pairs, so the table fits its container without growing.
Also relocates "Start workspace from issue" button into GHEditSection and
expands comment composer with a labeled send button.

Co-authored-by: Orca <help@stably.ai>
2026-05-07 16:32:12 -07:00
zerone0x 998815c2dd fix: allow omitted optional rpc schema fields with zod 4.4 (#1541) 2026-05-07 16:13:20 -07:00
Neil e65edd7a74 fix(sidebar): reserve worktree scrollbar gutter
Always reserve the workspace sidebar scrollbar gutter and keep the worktree cards separated from the scrollbar lane.
2026-05-07 16:02:33 -07:00
Brennan BensonandOrca c375f403ef fix(agent-hooks): silence exit-127 spam from stale managed hook entries (#1536)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 13:05:30 -07:00
7fb5363296 feat(cli): tab switch --focus surfaces the browser pane (#1498)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Maciej Kobuszewski <maciej.kobuszewski@pergam.in>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-05-07 01:48:39 -07:00
45d05c3699 Add Kagi search support with encrypted private session links (#1434)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-05-07 00:40:38 -07:00
NeilandOrca b7a583d5ef fix(claude): skip redundant credential rewrites on every Claude spawn (closes #1507) (#1529)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 23:56:36 -07:00
NeilandOrca ebc38b06e0 Linear: paste only URL as draft on workspace create (#1530)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 23:48:11 -07:00
Neil 7b83b2dcdc fix: avoid repeated macOS privacy prompts (#1524)
* fix: avoid repeated macos privacy prompts

* fix: reduce background worktree permission probes

* chore: pin oxlint for ci

* fix: preserve optional rpc params with zod 4.4

* fix: preserve optional inline rpc params with zod 4.4
2026-05-06 23:30:03 -07:00
Neil 43a258951f fix(feedback): enforce anonymous submissions (#1528) 2026-05-06 23:23:58 -07:00
Jinwoo HongandOrca e83d92eede Mobile: server-authoritative phone-fit state machine + race fixes + UX cleanup (#1518)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 21:54:23 -07:00
NeilandOrca 5bdeb018d5 feat(feedback): anonymous opt-in for PR tag + contact (#1521)
* feat(feedback): let anonymous users opt in to PR tag + contact

When 'Submit anonymously' is checked the feedback dialog now smoothly
expands to reveal two optional fields:

- GitHub username \u2014 we'll @-mention them on the fix PR
- Email or x.com handle \u2014 we'll reach out when it's fixed

The animation uses a grid-rows 0fr\u21921fr transition so it expands
naturally without measuring DOM. New fields are forwarded through the
IPC + main-process proxy as 'anonymousGithubLogin' and 'anonymousContact'
so the backend can tell self-typed handles apart from verified gh
identity. Backend changes (slack message + route) ship in
orca-marketing-website.

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

* feat(feedback): split anon contact into email + x.com, tighten copy

Address review:
- move 'all optional' wording up to the top header line
- drop the inline 'we'll tag you on the PR' helper (placeholder says it)
- split the single contact input into two separate inputs (email +
  x.com handle), each with its own placeholder

IPC field rename: anonymousContact \u2192 anonymousEmail + anonymousX. Backend
PR is updated to match before either side ships.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-06 20:08:12 -07:00
Neil 96092977e3 fix(github/project-view): escape NUL byte so diffs render as text (#1519) 2026-05-06 19:24:15 -07:00
NeilandOrca 8d0b7b032a feat(pi): wire pi panes into the unified agent-hooks pipeline (#1501)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 17:26:50 -07:00
buf0-bot[bot]andorca-bug-scan-bot 3e3e30d38a fix: address pr-bug-scan findings from #1410 (#1420)
Extended removeRepo in repos.ts to drop lastVisitedAtByWorktreeId entries belonging to the removed repo, preventing monotonic growth of timestamps for deleted repos.

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-06 17:20:31 -07:00
buf0-bot[bot]andorca-bug-scan-bot 884cc6d622 fix: address pr-bug-scan findings from #1409 (#1422)
Fixed pty-connection passphrase wait gate: added 'disconnected' as terminal status (only after seeing a non-disconnected state) so cancel resolves; added waitTeardowns registry so dispose() actively u

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-06 17:20:28 -07:00
Neilandorca-bug-scan-bot 5dd48c7315 fix: address pr-bug-scan findings from #1396 (#1517)
Fix tab profile use-default fallback to default profile and destroy
all sibling webviews on workspace profile switch.

Reapplied on fresh origin/main; supersedes #1460.

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-05-06 17:19:26 -07:00
buf0-bot[bot]andnwparker 24b5fe2662 fix: filter DEFAULT_APP_FONT_FAMILY from terminal font picker (#1461)
Rebased buf0-bot #1461 onto current main — the original branch was
71 commits stale and would have reverted #1485 (Cmd/Ctrl+F search) and
#1429 (instant theme transitions).

Co-authored-by: nwparker <nwparker@users.noreply.github.com>
2026-05-06 16:53:04 -07:00
Brennan BensonandOrca e7fef4e14d fix(source-control): preserve UTF-8 paths in status and branch diff (#1515)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 16:22:24 -07:00
Neilandnwparker a75e706a6c fix: flip parentFieldRetried inside probe IIFE before resolveProbe() (#1514)
Closes the race where siblings awaiting parentFieldProbeInFlight wake
between resolveProbe() and the deferred parentFieldRetriedByOwner.add()
in the outer block, see parentFieldProbeInFlight=null +
parentFieldRetriedByOwner without scopeKey, and issue duplicate
with-parent probes.

Originally raised in #1456, but that PR branched off pre-#1465 main and
its diff against current main reverted #1465's owner-keyed parent-field
caches back to global flags. This re-applies the fix on current main.

Refs #1456

Co-authored-by: nwparker <nwparker@stably.ai>
2026-05-06 15:38:17 -07:00
Brennan BensonandOrca 21c3c9f16f refactor(shortcuts): remove Cmd-hold number-badge hint UI (#1412)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 15:27:57 -07:00
9f8bf81c38 feat(source-control): commit, push, pull, and sync actions in panel (#1211)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Alexander Saavedra <mralexsaavedra@gmail.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-05-06 15:03:52 -07:00
Jinjing 5c7e5f2f1d fix: default workspaces grouping to projects (#1513) 2026-05-06 14:51:37 -07:00