Commit Graph
5972 Commits
Author SHA1 Message Date
Jinjing afd9cd5e02 Improve translations for Spanish, Japanese, Korean, and Chinese (#7381)
Translate various remaining English strings in Spanish, Japanese, Korean,
and Chinese locale files to provide better localized terminology for
common UI actions, settings descriptions, and toast messages.
2026-07-04 17:11:21 -07:00
Jinjing 568722a320 Update mobile Android APK links to 0.0.22 2026-07-04 17:06:09 -07:00
NeilandOrca b3f86813b3 fix(ci): register PSGallery via PSResourceGet for Windows SignPath install (#7379)
Register-PSRepository -Default failed inside the legacy nuget.exe provider
with "Missing option value for: '-source'" on the hosted windows-2022 image,
leaving PSGallery unregistered so the subsequent Set-PSRepository threw
"No repository with the name 'PSGallery'".

Prefer Microsoft.PowerShell.PSResourceGet (bundled with PowerShell 7.4+),
which has PSGallery registered by default and avoids that code path; fall
back to PowerShellGet with an explicit NuGet-provider bootstrap only when
PSResourceGet is unavailable.

Co-authored-by: Orca <help@stably.ai>
2026-07-04 16:57:09 -07:00
Jinjing 4fa21f727a Use official OpenCode SVG icon instead of remote favicon (#7373)
* Use official OpenCode SVG icon instead of remote favicon

Replaces the remote favicon loading for OpenCode with a local SVG icon.
This avoids flaky external network requests and ensures the icon renders
properly across light and dark themes using theme-aware currentColor.

* Update OpenCodeIcon SVG geometry to use official 512 canvas

Update the OpenCode icon geometry and viewBox to use the official
512x512 canvas sourced from the opencode.ai favicon. Using a square
viewBox matches sibling glyphs.
2026-07-04 16:54:23 -07:00
Neil dbd5064235 fix: refit desktop watcher xterm when mobile-fit override arrives (#6410) (#6596) 2026-07-04 16:42:50 -07:00
Jinjing 50339fbe82 Revert "Add default browser action for terminal links (#6129)" (#7378)
This reverts commit 3614cbc40c.
2026-07-04 16:36:29 -07:00
github-actions[bot] ad329e2f26 release: v1.4.122-rc.4 v1.4.122-rc.4 2026-07-04 22:41:11 +00:00
Jinjing c641e55486 Normalize GitHub work item type from URL to prevent issue/PR mismatch (#7371)
- Resolve true work item identity (issue vs. PR) using the URL path to
  override stale or incorrect cached payload types.
- Prevent invalid PR start point resolution when launching an issue
  misclassified as a PR.
- Validate and reject mismatched URL types in the worktree metadata
  dialog fields to avoid incorrect associations.
2026-07-04 15:16:50 -07:00
Jinjing 5ba4e2454d Remove "Open" status badge from PR comment actions (#7338)
Remove the unused "Open" action state condition and its associated
`statusBadgeOpen` class from presentation definitions.
2026-07-04 14:47:36 -07:00
8b69e41391 Fix missing space in import-cookies "From <browser>" menu labels (#6468)
* Fix missing space in import-cookies "From <browser>" menu labels

The Import Cookies dropdown rendered browser entries as "FromGoogle Chrome"
and "FromSafari" — JSX collapses whitespace between the adjacent
{translate(…, 'From')}{browser.label} expressions.

Switch both settings menus to the 'From {{value0}}' interpolation pattern
already used by the other import-cookies menus, so the label is a single
translatable unit and renders with the correct space. Interpolation also lets
each locale position the browser name correctly: ja/ko use postpositions
("から"/"에서") that belong after the name, which the old concatenation placed
before it. Localized the new key in es/ja/ko/zh to match the existing catalog
style. Adds a regression test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Fix browser use import source label

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 14:46:09 -07:00
Bevis a3e34b66b8 fix(pet): stop i18n from corrupting CSS keyframes
Keep PetOverlay runtime keyframes out of localization so translated locales cannot invalidate sprite or bob animations.\n\nAlso adds regression coverage for translated-locale keyframe CSS and removes the stale generated locale entries.
2026-07-04 14:43:57 -07:00
Vladislav Meshkorudnyj fa3ca498c2 fix(secure-file): re-harden on coarse-ctime filesystems
Store POSIX mode bits in secure-file hardening cache entries so permission drift is detected even when ctime granularity is coarse.

Also clears inherited HISTFILE in the local PTY test harness for hermetic WSL history assertions, and adds a deterministic coarse-ctime regression test for directory and credential-file mode drift.
2026-07-04 14:38:05 -07:00
2607ff110b feat(ghostty): import adjust-cell-height and dual-value window paddings (#7125)
* feat(ghostty): import adjust-cell-height and dual-value window paddings

Two Ghostty config forms previously landed in unsupportedKeys:

- adjust-cell-height percentages (e.g. "35%") now map to
  terminalLineHeight (1.35), the direct xterm equivalent. Pixel values
  are still rejected because they depend on the rendered cell height.
- window-padding-x/y "top,bottom" / "left,right" pairs now import as
  the rounded average, preserving the total padding along the axis.

parseStrictInt moves to numeric-config-values.ts alongside the new
pair parser to keep mapper.ts under the max-lines budget.

* fix(ghostty): tighten import edge cases

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

* fix(settings): sentence-case account runtime copy

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 14:19:00 -07:00
a81b82f640 feat(ghostty): resolve theme references during config import (#7126)
* feat(ghostty): resolve theme references during config import

`theme = <name>` is how most Ghostty configs pick their colors, but the
importer treated the key as unsupported and silently dropped the entire
palette. Resolve the referenced theme file and merge its colors as
defaults, mirroring Ghostty's own precedence:

- Search user themes first (XDG, then the native macOS dir), then the
  bundled themes inside the Ghostty install, and parse the file with the
  existing parseGhosttyConfig (theme files are plain config subsets).
- Explicit config keys win over theme values; config palette entries are
  appended after the theme's so per-index overrides apply naturally.
- Only color-bearing keys may flow from a theme into the import, a theme
  file cannot smuggle font/window settings past the user's config.
- Theme names containing path separators are rejected (no traversal),
  files over 256 KB are ignored, and light:/dark: pairs plus unresolvable
  names surface as annotated unsupportedKeys instead of vanishing.

* fix(ghostty): align theme resolution with Ghostty lookup

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

* test: stabilize ghostty import CI coverage

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 14:15:35 -07:00
Brennan BensonandOrca ac8d365296 Fix STA-1292: prevent Windows worktree-create hang (disable interactive credential prompt + timeout create-path git) (#7301)
Co-authored-by: Orca <help@stably.ai>
2026-07-04 13:37:06 -07:00
d7d7067ae1 chore(i18n): refine Spanish locale copy (#7359)
* chore(i18n): refine Spanish locale copy

Why:
Improve the Spanish UI copy so developer-facing terms stay natural and technically accurate.

Changes:
- Keep core dev terms such as PR, worktree, branch, and runtime consistent.
- Preserve locale key parity and placeholder compatibility with English.

* chore(i18n): localize new Spanish strings

* chore(i18n): use rama for branch in Spanish

* chore(i18n): clarify Spanish repository copy

* fix(i18n): correct Spanish locale defects found in review

Post-review polish on the Spanish copy pass:
- Restore dropped/altered meaning: 'repo color' (was 'en el repositorio'),
  'uploaded' (was 'sincronizado'), 'is behind {ref}' (was '{ref} atrás',
  which rendered the ref name as a quantity).
- Translate leftover English over prior correct strings: 'Review from'->
  'Revisión de', 'Agents'->'Agentes', 'workspace'->'espacio de trabajo',
  'clone'->'clon', 'Skill de Agent'->'Skill de agente'.
- Grammar/register: 'para commit'->'para hacer commit' (x3), 'desde issue'->
  'desde el issue' (x4), 'Cuando tanto...y'->'Cuando ambos...', unify tú in
  the sidebar-tint description, 'obligatorio'->'obligatorias' (agrees with
  approvals), 'desbloquear'->'descongelar' for 'unfreeze', de-Spanglish the
  local-folder-drop message.

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

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 11:37:26 -07:00
rubin dc1c1e9fdd Honor agent settings for bare CLI terminal launches (#6750)
Bare repo-backed terminal creates now reuse Settings agent defaults for exact agent commands while preserving raw commands, disabled agents, and already-managed launches.

Validation:
- PR Checks / verify passed
- Local runtime tests, typecheck, lint, CLI build, and Electron CLI/runtime smoke passed
2026-07-04 08:20:58 -07:00
mehmet turac ccfd6727c9 fix(browser): route focused guest zoom shortcuts to page zoom (#6744)
Route focused browser guest zoom shortcuts to the browser page zoom path, including native Electron zoom-command fallback and wheel/native dedupe.
2026-07-04 08:17:55 -07:00
c6bfd86d4e fix(terminal): pass Ctrl+Arrow to PSReadLine on local Windows ConPTY (#6763)
* fix(terminal): pass Ctrl+Arrow to PSReadLine on local Windows ConPTY

On local Windows shells (PowerShell/cmd via PSReadLine) Ctrl+Left/Right
printed a stray "b"/"f" instead of moving by word. The terminal shortcut
policy translated Ctrl+Arrow to \eb/\ef (readline's Alt+b/Alt+f word-nav
bytes), but PSReadLine binds Escape to RevertLine and has no Alt+b/Alt+f
binding, so it consumed the ESC and self-inserted the bare letter.
PSReadLine already binds Ctrl+Left/Right to word-nav natively, so the
translation was breaking a working default.

Gate the translation so genuine local native Windows ConPTY panes fall
through to xterm's native \e[1;5D/\e[1;5C, while Linux and remote/WSL/SSH
readline shells keep the \eb/\ef translation. Reuses isLocalNativeWindowsConpty
(the same execution-host heuristic as the Kitty-keyboard fix) so SSH/WSL
panes on a Windows client are correctly excluded. Adds policy coverage for
the ConPTY-passthrough and SSH/WSL-still-translates paths.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(terminal): use live session for Windows Ctrl+Arrow

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 07:46:50 -07:00
github-actions[bot] db7046721f Update README downloads badge 2026-07-04 12:42:10 +00:00
NeilandOrca b5359ca7e3 Seed WSL Codex runtime config through the fresh-mirror preparation (#7343)
* Seed WSL Codex runtime config through the fresh-mirror preparation

The WSL runtime home seed copied config.toml verbatim, so relative
path-valued settings (model_instructions_file etc.) resolved against the
runtime home inside the distro and aborted Codex config load with
'os error 2' -- the same failure class #7157 fixed for host runtime and
managed account homes. Seed now applies the shared fresh-mirror
preparation (deprecated codex_hooks normalization + relative-path rewrite
anchored to the Linux-side source home + system hook-trust strip).

Also fixes CRLF configs skipping deprecated codex_hooks normalization:
the feature-section header regexes did not tolerate the trailing \r.

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

* Extract prepareWslRuntimeSeedConfig and pin UNC->Linux anchor in tests

The e2e seed test's mocked WSL home is a plain local path, so the
parseWslUncPath linuxPath branch was never exercised. Extract the seed
preparation as a pure exported function and cover both UNC spellings
(wsl.localhost and wsl$) with hardcoded literals.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-07-04 02:54:20 -07:00
Neil 533cafdfa9 Fix cross-worktree chat leak: key native-chat transcript cache by resolved file path (#7341) 2026-07-04 02:40:37 -07:00
Neil 7c10abc582 fix(ssh): make reconnection prompts non-blocking unless the project is focused (#7344)
The SSH reconnect dialog was auto-opened at render time for any active/restored
worktree whose SSH target was disconnected, blocking the entire UI even when the
user was working elsewhere. On app restart the previously-active worktree is
restored without a click, so the modal stole focus app-wide over unrelated work.

The disconnected state is now surfaced only through the non-blocking affordances
that already existed — the worktree card chip, the status-bar Connect action, and
the pane-scoped terminal reconnect overlay. The blocking dialog opens only on
deliberate focus (clicking the worktree card), and even then it is suppressed when
the active view is a terminal, since that pane already shows the in-context
reconnect overlay and a second prompt would just duplicate it.

Fixes #7314
2026-07-04 02:35:00 -07:00
Loongandlinyunlong dd1133c873 chore: optimize and refine Chinese (zh-CN) translation (#7178)
Refines 291 Simplified Chinese (zh-CN) strings for terminology consistency and clarity. Rebased onto main with full en/es/ja/ko key + interpolation parity; fixed placeholder parity on 4 keys and 9 reviewed translation-quality issues.

Co-authored-by: linyunlong <yunlonglin1995@gmail.com>
2026-07-04 01:52:41 -07:00
9964d1ccbf perf: overlap sidebar-scope loads with worktree scan at startup (#7225) (#7306)
* perf: overlap sidebar-scope loads with worktree scan at startup (#7225)

Continues the renderer-chain parallelization proposed in #7225 (proposal 2),
on top of the merged #7266:

- Run project-groups → folder-workspaces concurrently with the per-repo
  `git worktree list` fan-out. Neither reads the repos store nor worktrees,
  so a slow remote host's 15s scope RPCs no longer queue ahead of the scan.
- Raise worktree refresh concurrency 5 → 8 so multi-core machines run fewer
  sequential scan batches, still bounded so one moment can't launch every
  git probe at once.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Test overlapping sidebar scope loads and worktree hydration at startup

Verify that sidebar scope loads and worktree hydration operations run
concurrently before session hydration. This protects against regressions
in startup performance under the perf/startup-lag optimization.

Additionally, document the rationale for the worktree refresh
concurrency limit in the worktrees slice.

* Clarify worktree refresh concurrency comment

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-07-04 01:34:40 -07:00
Jinjing 0d8205ae73 Validate terminal startup CWD paths against symlink escapes (#7334)
Resolve terminal CWD and worktree paths to their canonical form using
realpath before validating containment. This blocks symlink escape
routes for local terminal spawns, returning the default workspace
directory if a requested path attempts to escape the worktree.

- Local terminal paths are canonicalized using native realpath logic
- WSL UNC paths and SSH/remote terminals skip canonicalization
- Floating terminal startup directories bypass containment checks
- Missing or unresolvable workspace directories default safely
2026-07-04 01:31:09 -07:00
Rod BoevandJinjing 840bedc90d fix(automations): start scheduler in headless serve mode (#7296)
* fix(automations): start scheduler in headless serve mode

* Trigger initial catch-up check for headless scheduled automations

Headless serve never receives a renderer-ready IPC, which previously
prevented the initial catch-up pass of due scheduled automations from
running on startup. Checking for the presence of a headless dispatcher
allows starting the evaluation pass immediately.

Additionally, refactor the corresponding test to use fake timers for
better reliability and deterministic assertions.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-07-04 01:30:04 -07:00
NeilandOrca 04046fc4f2 Fall back to local base ref when worktree-create refresh fails (#7335)
Creating a workspace hard-failed with "Could not refresh base ref …"
whenever the pre-create git fetch of a remote-tracking base (e.g.
origin/main) failed — offline, transient, or (common on Linux GUI) the
Electron process lacking SSH_AUTH_SOCK so `ssh -o BatchMode=yes` cannot
auth. This blocked creation even when a perfectly usable local
origin/main already existed and `git worktree add` from it would succeed.

Regression introduced by #2310 (5c93579e40), which replaced the prior
best-effort fetch + post-create reconcile with a hard network gate.

Fix: at all three create sites (local runtime, local IPC, SSH), only
throw when the refresh failed AND no usable local base ref exists;
otherwise create from the local ref (a possibly stale but valid base).
Also: move the SSH local-ref probe after session.registerRoot so relays
that gate generic git.exec don't false-negative and defeat the fallback.

Co-authored-by: Orca <help@stably.ai>
2026-07-04 01:30:01 -07:00
f215a48064 fix: pr-bug-scan validated finding from #6952 (#7180)
* fix: address pr-bug-scan validated finding from #6952

throwNodeNotFound() now re-raises AbortError when the shared signal is aborted, so a signal-cancelled node probe no longer launders into 'Node.js not found'; sequential fallback runs.

* fix(ssh): make session-limited (MaxSessions=1) relay deploys actually succeed

Review of #7180 verified the parent fallback end-to-end against a real
MaxSessions=1 sshd and found the connect still failed. Four gaps, in order
of discovery:

- isSshSessionLimitError missed stock OpenSSH, which refuses session
  channels over MaxSessions with SSH2_OPEN_CONNECT_FAILED (2) and 'open
  failed' — reason 4 never matched, so the fallback never triggered.
- execCommand settled aborted commands before the channel finished
  closing, so the sequential fallback reissued execs while sshd still
  counted the old session.
- SshConnection.waitForSshCallback rejected aborts mid-channel-open
  immediately, leaking a confirmed-late channel that held the only
  session slot; it now settles after the late channel closes (bounded)
  and drains its streams so ssh2 emits 'close'.
- Session channel opens now retry transient session-limit refusals
  (sshd frees the slot only after processing our close-ack, which the
  next open can beat by microseconds), and the remote orca CLI shim
  install is non-fatal like the managed-hook install — after the relay
  bridge occupies the sole session slot, raw-connection extras must
  degrade instead of failing the connection.

Verified live against Docker sshd (OpenSSH 9.2, MaxSessions=1): fresh
deploy (upload + native deps + launch), reconnect cycles, and a PTY
round-trip all succeed; unrestricted-sshd regression run also passes.

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

* Handle ssh execution aborts immediately during retry backoff or hangs

- Cancel the session-limit retry delay immediately if the operation is
  aborted during backoff.
- Limit the wait time to a 5-second grace period when aborted during a
  channel open that is hung and never invokes its callback, rather than
  waiting for the full connection timeout.

---------

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-04 01:26:55 -07:00
github-actions[bot] 8070e65778 release: v1.4.122-rc.3 v1.4.122-rc.3 2026-07-04 07:27:11 +00:00
Neil 0ebfc989cb Fix flaky terminal-rendering-golden repo-load race on macOS CI (#7330)
The release-blocking `terminal rendering golden mac` job was failing ~40%
of Cut Release runs with `Expected e2e repo to be loaded`, leaving the RC
stuck as a draft (publish-release depends on this job).

Root cause: the sharedPage fixture did a single-shot fetchRepos() + find()
+ throw. window.api.repos.add() fires a repos:changed echo that triggers a
concurrent fetchRepos() in the renderer; the store's reposFetchGeneration
guard then drops the fixture's own awaited fetch result, leaving `repos`
briefly stale, so find() returns undefined and throws. The repo lands a few
ms later (the failure screenshot's sidebar actually shows it).

Wrap the repo load in expect.poll (matching the seeded-worktree poll right
below it) so it retries fetchRepos until the repo lands, then runs the
idempotent updateRepo. Also harden the single-shot hasWebgl/cursorHidden
diagnostics reads in the golden spec: WebGL reattaches asynchronously after
a worktree switch, so poll those eventually-consistent fields until they
settle before the golden asserts. Regression detection is preserved: a real
WebGL/cursor regression times out the poll and still fails the test; the
geometry/wrap/overpaint golden checks stay single-shot.
2026-07-04 00:25:21 -07:00
Jinjing 0982882436 Exclude submodule worktree-only changes from Stage All action (#7298)
- Prevent the "Stage All" button from being enabled when only nested
  submodule worktree changes are present.
- Remove the disabled stage button on submodule worktree-only rows,
  replacing it with an explanatory tooltip.
- Fix WSL terminal environment assertion in daemon PTY tests to allow
  inherited agent-hook environment variables.
2026-07-04 00:21:55 -07:00
Jinjing 7c77ccab7d Fix notes send targets for manual agents (#7300)
* Fix notes send targets for manual agents

* Split agent title merging into manual and launch-agent paths

Separate the merging logic for terminal titles depending on whether the
tab has a launch agent or is a manually started CLI.

- Launch-agent tabs carry an owner bit, allowing their live titles to
  promote a stale status row on the same pane.
- Manually started agents have no owner bit, so they only ever add a
  row and must not override existing status evidence.
- Remove the temporary TitleHintAgentTarget type and the need to strip
  metadata when pushing targets.
2026-07-04 00:10:53 -07:00
Jinwoo Hong a074ed6182 Fix Windows ConPTY overlay after cold restore (#7310) 2026-07-03 23:24:24 -07:00
github-actions[bot] 7595baccef release: v1.4.122-rc.2 v1.4.122-rc.2 2026-07-04 06:21:22 +00:00
slashdevcorpseandJinwoo Hong 9fa1313179 Fix Windows native chat title fallback (#7313)
* fix: resolve title-only native chat agents

* test: cover native chat unsupported identity fallback

* fix: harden native chat agent fallback precedence

---------

Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
2026-07-03 23:02:12 -07:00
github-actions[bot] 19bb7df93a release: v1.4.122-rc.1 v1.4.122-rc.1 2026-07-04 05:49:42 +00:00
Neil bec4392d87 cleanup(main): defer serve-sim materialization, dedupe reload flags, guard gate validators (#7321)
Quality pass on main-process/build PRs merged 2026-07-03:

- ios-emulator-backend: resolve the serve-sim executable via a lazily-cached getter
  instead of eagerly in the constructor. The bridge is built before the main window
  is shown, so the one-time recursive copy + xattr subprocess (first launch after each
  version bump) no longer blocks macOS startup for a feature that may go unused (#7174).
- index: collapse the two near-identical `{webContentsId, until}` reload flags
  (expectedRendererReload / recoveryReloadInFlight) into one `createWebContentsTimedFlag`
  primitive; behavior preserved, including consume-on-read for the recovery reload (#7290).
- check-reliability-gates: coerce gate.commands/testFiles/platforms/providers with an
  `asArray` helper before `.includes`, so a hand-edited manifest with a missing/mistyped
  field reports a validation failure instead of throwing an uncaught TypeError; extract
  `hasCompleteRedGreenEvidence` for the duplicated status check (#7295).
- claude-pty: derive FABLE_WEEKLY_LABEL_RE from WEEKLY_RE.source so a future weekly-
  wording change stays in one place and can't reopen the parsing gap it just closed.
- macos-tcc-login-shell: trim the 30-line flag-by-flag JSDoc to the two non-obvious whys
  (TCC identity, env(1) SHELL re-assertion) per the repo comment guidance (#7003).

Typecheck, oxlint, oxfmt, `check:reliability-gates`, and touched unit suites all pass.
2026-07-03 22:32:11 -07:00
Neil 3fdeec7c2f cleanup(renderer): drop dead code, dedupe helpers, skip wasted work, fix garbled comments (#7322)
Quality pass on renderer/shared PRs merged 2026-07-03:

- WorktreeTitleInlineRename: skip the truncation measure + ResizeObserver in `wrapTitle`
  mode, where wrapped titles never truncate — it could only churn unused state (#7307).
- editor slice: reuse the `removeEditorStateForReplacedPreview` helper this PR added
  instead of a hand-rolled copy of the same six-field eviction (drops ~50 lines) (#6476).
- useFileExplorerTree: extract `readWorktreeDirectory` so the connectionId/settings
  assembly for `readRuntimeDirectory` lives in one place, not three (#6321).
- comment-markdown-github-attachment-media: extract a shared `AttachmentFallbackLink`
  for the image/video error-fallback link (#6759).
- repository-icon-github: fold the two near-identical live resolvers into one
  parameterized `resolveRepositoryIdentityLive`; trim a 3-line comment to 2 (#6507).
- resource-usage-open-slices: delete the `shouldReadPopoverSlices` identity wrapper and
  inline `open` at the four call sites (#7275).
- BrowserPane: drop the pointerEvents assignment already applied inside
  `ensureBrowserPageWebview` for the reused-webview path (#6958).
- github slice: fix two garbled "…a commit main confirmed…" comments (#7277).
- runtime-file-client: trim the binary-file fallback comment to its whys (#6606).
- composer-branch-selection: drop the inline comment that restated the JSDoc (#6748).
- TabBarQuickCommandsButton: correct the stale "+ Command" comment (button shows no +).

No behavior change (the editor-helper reuse is behavior-equivalent, only more
conservative on an edge case); typecheck, oxlint, react-doctor, oxfmt, and touched
unit suites all pass.
2026-07-03 22:31:56 -07:00
Neil 529c06ff62 cleanup(terminal): dedupe pane teardown, reuse platform check, harden shadow-cursor tracking (#7320)
Quality pass on terminal PRs merged 2026-07-03:

- pane-split-close: extract a shared `teardownManagedPane` so `closeManagedPane` and
  `detachManagedPaneForExternalMove` can't drift apart on future edits (#7215).
- terminal-link-activation: reuse the existing `isMacPlatform()` instead of a second
  inline `navigator.userAgent` copy, keeping one source of truth for Mac detection.
- pty-connection: gate the shadow-cursor moves on empty CSI params so parameterized/
  modified cursor keys (e.g. Ctrl+Left word-jump, `ESC[1;5D`) reset command tracking
  instead of silently desyncing the buffer used to infer a typed agent name; relocate
  the `getAuthoritativePaneAgent` JSDoc to the function it documents (#6954).

No behavior change except the cursor-tracking hardening; all touched unit suites pass.
2026-07-03 22:31:54 -07:00
Jinwoo HongandOrca 52e2eb01b1 Tab strip: judge click-vs-drag at pointerup and flush gesture state on window focus (#7316)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 22:22:35 -07:00
Neil 22d5989ed9 Fix manual sorting for project headers and groups
Fixes #6609.
2026-07-03 21:38:34 -07:00
Jinjing b2fcbdbc73 fix: bound release notes by published releases (#7311) 2026-07-03 20:53:16 -07:00
Neil c29ee51a0a Make sidebar worktree hover title editable (#7307) 2026-07-03 20:21:09 -07:00
NeilandOrca e4ac582e16 Revert "Update quick command button to use plus icon and clearer label (#6517)" (#7304)
This reverts commit a94d692cd5, restoring the
shorter "Command" label and the Play icon on the quick command entry
(PRs #5528 and #5674).

Co-authored-by: Orca <help@stably.ai>
2026-07-03 20:20:23 -07:00
Brennan BensonandOrca 20201f3ae8 Fix #5787: recovery reload no longer sweeps local PTYs; guard close for hung-but-alive renderer (#7290)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 20:09:19 -07:00
5b5ce6cef8 Harden reliability gate policy and register merged terminal regression tests as gates (#7295)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <delta-eng@stably.ai>
2026-07-03 19:58:07 -07:00
Brennan BensonandOrca bdd8bb0a3b fix(agent-status): keep harness-injected turns out of sidebar prompt labels (#7274)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:49:17 -07:00
Jinjing 0d2d44b989 Use ASCII-safe speech model cache paths on Windows (#7291)
sherpa-onnx cannot load model files or hotword lists from Windows
paths containing non-ASCII characters.

- Resolve speech model and hotwords paths to ASCII-safe alternatives
  like ProgramData when the default userData path contains non-ASCII
- Migrate existing downloaded models from the legacy non-ASCII cache
- Ensure deleted models are removed from the legacy source folder to
  prevent them from being re-migrated on subsequent launches
2026-07-03 19:43:38 -07:00
Jinjing bdb6d144c3 Pin the new tab button outside the tab scroll view (#7292)
Move the "New tab" button out of ScrollView so that it remains visible
and reachable regardless of how far the tabs have been scrolled.
2026-07-03 19:38:24 -07:00