* Revert "fix(terminal): add proportional scroll fallback for sidebar resize" (#937)
* fix(sidebar): smoothly animate off-screen worktree reveal on click (#1302)
Clicking a worktree card whose row lies outside the sidebar viewport
caused an instant jump when scrolling it into view. Switching
`scrollToIndex` to `behavior: 'smooth'` turns that minimum-distance
scroll into an animated slide while keeping `align: 'auto'` so visible
cards still no-op (no re-centering).
Co-authored-by: Orca <help@stably.ai>
* Avoid local scrollback serialization on shutdown (#1821)
* Fix PR refresh coordinator test arguments (#2545)
* release: v1.4.31
* release: v1.4.31
* release: v1.4.31
* release: v1.4.31
* release: v1.4.31
* release: v1.4.31
* release: v1.4.31
* release: v1.4.36-rc.6
* release: v1.4.36-rc.6
* release: v1.4.36-rc.6
* ci: gate release-cut to the canonical repo so it skips forks (#4815)
The cut job checks out main, bumps package.json's version, and
fast-forwards main. On a fork with Actions enabled, the scheduled RC
cut runs against the fork's main and diverges it on the version line
every slot, so that contributor's PRs back to upstream conflict on
package.json even when their change never touches it.
Gate the job to github.repository == 'stablyai/orca' so it (and the
jobs that depend on it) no-op on forks. Canonical scheduled and manual
cuts are unaffected.
* feat(hooks): install Devin managed status hooks
* feat(devin): address hook review, resume, and UI polish
- Parse Devin config.json as JSONC; warn on read_config_from overlap
- Windows hook command uses forward slashes; APPDATA fallback
- Add devin to sleeping-agent resume and UI registries (plan 003/004)
- Add hook-service and hook-config-json tests
Closes follow-up for plans 002–004 on feat/add-devin-agent.
* feat(devin): scan ATIF transcripts for AI Vault
Register devin in AI_VAULT_AGENTS, discover ~/.local/share/devin/cli/transcripts
(or DEVIN_HOME), parse ATIF JSON sessions, and build devin --resume commands.
* docs(devin): clarify stdin-after-start vs bracketed paste
* fix(devin): use JSONC for remote install, add partial+APPDATA tests
- installRemote: replace readHooksJsonRemote (JSON.parse) with
readTextFileRemote + parseJsonc for JSONC compatibility on SSH
- Add partial status test (some hooks missing → state:'partial')
- Add Windows APPDATA config path test with fallback
* fix(devin): address CodeRabbit review — sessionId fallback, parseJsonc errors, comment, i18n
* Fix Devin integration edge cases
Co-authored-by: Orca <help@stably.ai>
* Package Devin JSONC parser dependency
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
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: Trevin Chow <trevin@trevinchow.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
The line-note popover anchored its top edge just below the selected line
and only ever grew downward. When the anchor line sat near the bottom of
the editor viewport, the popover extended past the visible area and was
clipped by the editor pane's overflow container, hiding the textarea and
the action buttons.
Resolve the popover's vertical placement against real geometry: flip it
above the anchor line when it would not fit below, and clamp it inside the
viewport when it fits neither way. Placement now lives in a pure
resolveDiffCommentPopoverTop helper, while the popover measures its own
height and its container via a ResizeObserver so it re-resolves as the
textarea auto-grows or the pane resizes.
Thread the anchor line height from both diff viewers (DiffViewer and
DiffSectionItem) through to the popover; markdown annotation callers keep
working via a zero default and still benefit from the viewport clamp.
Clarify the mobile-driving experience by updating outdated terminology and
making actions more precise. Generic "Mobile" references are replaced with
"Phone", and action buttons now explicitly distinguish between "this"
terminal and "all" terminals. Also introduces a modern card layout featuring
a smartphone icon badge and a live status indicator, complete with updated
locales, tests, and a standalone HTML preview.
- Remove folder path and repository name guessing when resolving the title
- Fall back to the stored workspace display name instead of a generic fallback
- Simplify helper parameters and update related unit tests
Add a configurable confirmation before pinned tabs are closed, route terminal/browser/CLI close paths through the guard, and add a one-shot Don't ask again option backed by the existing setting.
Verified with focused unit tests, typecheck, lint, Electron validation, and the PR verify workflow.
* Fix unnatural Japanese localization wording
- "Open in" submenu: bare で開く → アプリで開く
- "Assigned to me" filter: 私に割り当てられました → 私に割り当てられた Issue
- Use Latin "Issue" instead of katakana イシュー throughout (JP engineering convention)
- Terminal/theme cursor settings: render the screen cursor as カーソル, not the
Cursor product. The brand-protection revert (Cursor→カーソル→Cursor) now exempts
these keys/values so カーソル survives while the Cursor product stays Latin.
- GraphQL: グラフQL → GraphQL
- Assignee picker aria-label: {{value0}} に割り当てられました → {{value0}} に割り当て済み
Fixes are made in the locale repair policy (overrides / phrase fixes) and applied via
repair:ja-catalog so they persist across future catalog regeneration.
* Extract screen-cursor exemption into a focused module
Move the Cursor screen-vs-product discrimination (SCREEN_CURSOR_ENVALUES /
SCREEN_CURSOR_KEYS / isScreenCursorContext) out of locale-translation-policy.mjs
into locale-screen-cursor-exemptions.mjs to keep the policy file under the
max-lines limit. No behavior change.
* Fix PR/issue state badge wording in Japanese
"State: Closed" was 状態: 閉店 (a shop closing) — change to 状態: クローズ to match
how the Closed state is rendered elsewhere. Also align "State: Merged" (状態: 結合済み)
with the standard マージ済み used for git merges.
---------
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
- Limit worktree refresh concurrency to 5 parallel workers to prevent launching too many concurrent git scans during startup and activation.
- Record renderer breadcrumbs as tracer spans to provide durable pre-crash context for native main-process crashes.
- Log a breadcrumb when activating a worktree from the sidebar.
Change the button variant from solid destructive to outline destructive
in MergedReviewActions. This matches the styling of the sibling Reopen
control, signaling danger without having a solid red fill dominate the
PR summary panel.
Prevent the source selection popover from opening automatically during
dialog autofocus or other programmatic focus calls upon dialog mount.
Instead, defer opening the popover until the user actively interacts
with the name input (clicks or typing) or moves focus to it from another
control within the workspace composer.
* fix: explain missing build tools when SSH relay native deps fail to compile
Deploying the relay to a remote host runs `npm install` for node-pty and
@parcel/watcher on first connect. node-pty ships no Linux prebuild, so that
install falls back to `node-gyp rebuild`, which needs a C/C++ toolchain. On a
host without one it dies with an opaque `not found: make` and the error the
user sees is just `... npm install ... failed (exit 1):` with nothing after it.
After a failed install on Linux, probe the remote for make/gcc/g++/python3 and,
when the toolchain is missing, throw an error that names what is missing and
gives the exact install command for the detected package manager
(apt-get/dnf/yum/pacman/apk/zypper), falling back to a short per-distro list.
The raw npm/node-gyp output is kept as the underlying error for triage.
Windows hosts are unaffected (node-pty has win32 prebuilds); the probe and the
rewritten message only run on Linux relays.
* fix: preserve SSH relay native install output
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
OMP creates SQLite databases like agent.db lazily under the agent PTY
directory. Proactively pre-create and link these database files (plus WAL/SHM
sidecars on Windows) to the user's persistent store so that credentials and
history are not lost in disposable overlays.
- Implement `mirrorOmpPersistentSqliteFiles` to handle linking `agent.db`
- Support both Unix symlinks and Windows hardlinks for writable state
- Extract prefill and titlebar extension source code into separate files