Commit Graph
11496 Commits
Author SHA1 Message Date
Jinjing 996284241d Implement resizable Markdown table of contents panel (#5444)
* Implement resizable Markdown table of contents panel

Introduce resizable behavior to the Markdown table of contents panel,
allowing users to adjust its width via a draggable handle.

- Persist the custom panel width in the UI state and main process store.
- Clamp the width to a safe range (200px to 600px) based on layout space.
- Ensure the remaining editor workspace does not shrink below 320px
  by computing constraints dynamically against the parent container width.

* Clone process env without undefined values for Windows preflight

- Filter out undefined values when cloning process.env to prevent
  potential serialization or typing issues.
- Update buildLocalPreflightEnv return type to Record<string, string>.
2026-06-15 19:59:44 -07:00
Trevin ChowandJinjing 7361bff698 feat: rename worktree folder to match branch on first work (#4743)
* feat: rename worktree folder to match branch on first work

When the first agent message auto-renames a freshly created creature branch to a
short, work-derived name, also align the on-disk worktree folder and the sidebar
display name with it. Re-key every worktree-scoped slice of state — renderer
store maps plus the persisted main-process state — through the resulting id
change so the live worktree survives the rename instead of being treated as a
deletion (its tabs, terminals, browser panes, and git status all follow).

The rename is best-effort and local-only: a skip or failure (remote runtime,
Windows lock, destination taken) leaves the folder as-is and never undoes the
branch/display rename that already landed.

Squashed from the original PR #4743 commits, rebased onto upstream/main to drop
accumulated merge commits and i18n formatting churn so the branch carries only
the feature diff:
- Rename worktree folder to match branch on first work
- migrate renamed worktree session ids
- keep the live worktree alive through a folder rename
- address PR review feedback

* Address PR review feedback (#4743)

- orca-runtime: emit in-process worktreesChanged client event on folder rename, mirroring notifyBranchRenamed so onClientEvent listeners aren't left stale
- worktrees: re-key rightSidebarExplorerViewByWorktree and activeWorkspaceKey through a worktree-identity rename (both were worktree-scoped but missed by buildWorktreeRenameState)
- branch-name-from-work: treat prefix-only model output as an empty slug so the caller skips the rename instead of producing a doubled prefix
- worktree-folder-rename-target: document why posix.dirname is safe (Windows filtered out earlier)
- tests for each of the above

* Extract branch rename test helpers to a separate harness file

Move git responders, mock builders, and test event fixtures out of
first-work-branch-rename.test.ts into a new test harness file. This
reduces file length and removes the max-lines ESLint disable directive,
complying with project style guidelines.

* Wrap entire OnboardingFlow in TooltipProvider

Enable the use of tooltips anywhere within the onboarding flow, rather
than restricting them to the step indicators.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:58:55 -07:00
Trevin ChowandJinjing c56f615f94 feat: Add file explorer name filter (#5410)
* Add file explorer name filter

* Integrate file content search and name filtering in File Explorer

Combine the file explorer view and the content search panel into a
unified sidebar component with a tab-like toggle between filtering by
name ("Names") and searching file contents ("Contents").

This avoids layout shifts and costly component remounting by keeping
both query fields mounted within a shared header and layering the body
panes. It also prevents directory expanding and collapsing when a name
filter query is active to preserve tree projection invariants.

* Restrict file explorer loading and actions to active files view

Prevent passive file loads, macOS app-data probes, and background explorer
activities when the sidebar is open to the search panel instead of the
files panel.

* Resolve visible files worktree path only when in files view
* Disable explorer actions (collapse all, refresh, drag-and-drop) on search
* Add safety check in useFileSearchPanel rerunSearch for missing worktree

* Improve file explorer search component architecture and accessibility

- Refactor FileExplorerViewSwitch to use shadcn ToggleGroup primitives.
- Add translated aria-labels to the search input and clear button.
- Ignore escape and other keydown actions during IME composition.
- Document logic for directory expansion suppression and search IDs.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:49:38 -07:00
Trevin ChowandJinjing 3ec1a36ba9 feat: add safe fork upstream sync setting (#5408)
* add safe fork upstream sync setting

* fix fork sync review feedback

* Review safe fork sync setting

* Fix local preflight env typing

* Fix onboarding flow SSR test tooltip provider

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:41:45 -07:00
Trevin ChowandJinjing a325ac467c feat: expandable commits and actions in the git history panel (#5419)
* feat: expandable commits and actions in the git history panel

Expand a commit row in the Commits panel to see its changed files inline; click a file to open that file's commit diff. Author and date surface on expand, so the dense row itself stays subject-only.

Right-click a commit for: open in the in-app browser, copy hash, copy message, and explain changes (spawns the default agent seeded with the commit context).

Open-in-browser resolves the provider commit URL in the main process via a new remoteCommitUrl resolver (GitHub/GitLab/Bitbucket), mirroring the existing remoteFileUrl chain end-to-end (repo, IPC, SSH provider, runtime RPC, preload) so it works for local and SSH/remote workspaces.

Layout: subject-first single-line rows with a tighter graph, refs moved inline, and local/remote ref pills deduped when they point at the same commit.

* fix: address git history review feedback

* fix: address PR review feedback on the git history panel

- Trim commit SHA before building the remote URL so whitespace input returns null instead of an invalid %20 URL.
- Gate commit-row expansion on the file loader (onLoadCommitFiles) so a row can't expand into a perpetual loading state.
- Harden the explain prompt: treat the commit subject and diff as untrusted data and run git show --no-ext-diff.
- Keep ambiguous multi-segment remote refs instead of mis-deduping them against a local branch.
- Use standard 10-char i18n keys for the new commit-history strings and translate them into es/ja/ko/zh.

* refactor: extract commit-history actions into useGitHistoryCommitActions hook

Moves the commit load/open/context-menu action callbacks (and the per-commit compare cache) out of SourceControl.tsx — which already carries a max-lines disable — into a focused hook, addressing the PR review nitpick. Behavior is unchanged.

* Refine git history row rendering, ref deduplication, and OID validation

- Prevent deduplication of remote branch badges in the history view
  when multiple remotes exist or when a ref is explicitly preserved.
- Render GitHistoryRow as an accessible button with dynamic ARIA labels
  for expansion states.
- Add double-click handler on commit files to open them permanently.
- Validate commit SHAs as full 40-character Git object IDs before
  requesting remote commit URLs.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:28:45 -07:00
Neil 13f7163365 Add agent permission mode controls (#5440) 2026-06-15 18:38:56 -07:00
Jinjing c94c20c30c test: use local host label in expectations (#5441) 2026-06-15 18:38:40 -07:00
github-actions[bot] fae4b92352 release: v1.4.72-rc.0 v1.4.72-rc.0 2026-06-16 01:37:38 +00:00
OrcaWinandNeil a32fe5d823 Refresh Windows PATH for local preflight probes (#5442)
Co-authored-by: Neil <neil@stably.ai>
2026-06-15 18:35:28 -07:00
Trevin Chow 1d05e72de3 refactor(search): dedupe rg/git-grep match-append logic
Deduplicate the rg/git-grep search match append/count/truncation path into a shared helper while preserving current matchCount normalization and fallback behavior from main.
2026-06-15 18:27:40 -07:00
Trevin ChowandJinjing 2b8d9a43de feat(linear): add project support to agent CLI (#5433)
* feat(linear): add project support to agent CLI

* fix(linear): resolve project names across search pages

* fix(linear): harden agent project support

* fix(linear): address project review feedback

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 18:24:53 -07:00
JinjingandTrevin Chow 7f3aac9f5e refactor(search): dedupe rg/git-grep match-append logic (#5439)
The append-and-cap step — push a match, bump the count, trip the
truncation flag at the cap — was copy-pasted across three call sites in
ingestRgJsonLine and ingestGitGrepLine. Each copy independently carried
the truncation-ordering invariant (set acc.truncated synchronously in the
same tick it returns 'stop'), so a future edit could break that safety
property in one copy while the others kept working. Collapse the three
into a single pushMatch helper.

Also drop the hand-rolled escapeRegexSource in favor of the shared
escapeRegex from string-utils; its "esbuild chokes on bracket-class regex
literals" rationale is stale, verified by building the relay bundle, which
now contains that literal and compiles cleanly. And swap the per-match
conditional-spread object build for direct assignment to skip two
throwaway allocations per match on the hot path.

No behavior change; the 29 text-search tests, typecheck, oxlint, and the
relay build all pass.

Co-authored-by: Trevin Chow <trevin@trevinchow.com>
2026-06-15 18:18:37 -07:00
Neil 98e7831247 Add TextMate-backed Nim highlighting (#5434) 2026-06-15 18:11:12 -07:00
OrcaWin 03d572c022 Fix Windows worktree deletion and host labels (#5391)
- close local filesystem watchers before Windows worktree deletion\n- normalize local repo/worktree path comparisons for Windows casing and slashes\n- use platform-aware local host labels\n- remove the Nim highlighting changes; that should land separately via a maintained grammar path\n- add review coverage for pending watcher grace teardown
2026-06-15 17:07:12 -07:00
Jinwoo HongandOrca f53dddeb78 Fix stale GitHub task drawer (#5424)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 16:51:58 -07:00
Jinwoo HongandOrca 50de1de815 Use stepped animation for agent working dot (#5428)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 16:42:39 -07:00
github-actions[bot] ab3ac8893d release: v1.4.71-rc.2 v1.4.71-rc.2 2026-06-15 23:41:42 +00:00
Brennan Benson bf31ecbad7 Keep Codex terminals responsive during startup (#5301) 2026-06-15 16:40:45 -07:00
Brennan Benson 3a87a9e572 Clarify agent hibernation controls (#5426) 2026-06-15 16:31:18 -07:00
Brennan BensonandOrca f3f41e3e2b Make compact workspace cards easier to find in Settings (#5422)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 15:48:48 -07:00
github-actions[bot] 68c3830f62 release: v1.4.71-rc.1 v1.4.71-rc.1 2026-06-15 22:43:53 +00:00
Trevin ChowandJinjing 9236ce5a19 fix: worktree tab overflow (#5415)
* fix worktree tab overflow

* address tab overflow review feedback

* Fix tab width rules and improve overflow navigation updates

* Move width constraints from tab roots to outer containers to ensure correct sizing and prevent layout breakdown.
* Track a dynamic tab layout signature to recompute overflow navigation boundaries whenever tab states, status, or labels change.
* Handle malformed timestamps in git history formatting to prevent application crashes on invalid or infinite date numbers.
* Remove redundant tooltip titles from the tab bar scroll buttons.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 15:37:58 -07:00
a873fedf60 fix: Fix macOS worktree permission scoping (#5407)
* Fix macOS worktree permission scoping

* Address macOS permission review feedback

* Tighten permission prompt review tests

* Fix worktree root permission scoping

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-15 14:54:50 -07:00
Jinwoo HongandOrca ce6d6280fa fix: share Pi agent overlays by source (#5417)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 14:50:51 -07:00
Trevin Chowandbrennanb2025 6f783142f7 fix(sidebar): keep pinned worktrees in grouped lists (#4745)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-15 14:46:37 -07:00
Brennan Benson 9e6afad545 Prevent large diffs from freezing the diff view (#5409) 2026-06-15 14:39:56 -07:00
github-actions[bot] 239148f911 release: v1.4.71-rc.0 v1.4.71-rc.0 2026-06-15 21:38:46 +00:00
Brennan Benson 04f2121ee9 Add experimental agent hibernation (#5347) 2026-06-15 14:36:10 -07:00
26121a4315 fix(mobile): respect Android device rotation lock instead of forcing rotation (#5403)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* fix(mobile): respect Android device rotation lock instead of forcing rotation

The app rotated on Android even when the system auto-rotate lock was on.
Expo's top-level `orientation: "default"` emits `android:screenOrientation="unspecified"`,
which auto-rotates on many devices regardless of the lock, and the
`react-native-screens` `orientation: 'all'` screenOption mapped to FULL_SENSOR,
which forces rotation outright.

react-native-screens exposes no orientation value that honors the rotation lock
(even 'default' calls setRequestedOrientation(UNSPECIFIED) at runtime, overriding
the manifest). The Android value that respects the lock is "fullUser", which must
come from the manifest. So:

- Add an `android-respect-rotation-lock` Expo config plugin that sets the main
  activity to `android:screenOrientation="fullUser"` (honors the lock; allows all
  orientations when unlocked, matching iOS).
- Remove the runtime `orientation` screenOption so the manifest value governs.

iOS behavior is unchanged (UISupportedInterfaceOrientations still lists all four).

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:45:58 -07:00
Jinwoo HongandOrca 1d85515a3e fix: bound gh cli detail calls (#5413)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 13:37:50 -07:00
cd31cd702d feat(mobile): add terminal text size (zoom) setting (#5388)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* feat(mobile): add terminal text size (zoom) setting

The mobile terminal fits the desktop's full column count to the phone
width with a CSS scale, which cancels out xterm's raw fontSize — so there
was no way to make text bigger or smaller. Add a persisted baseline zoom
multiplier the WebView applies on top of the fit.

- Settings → Terminal → "Text size": 50%–200% presets.
- Pinch-to-zoom in the terminal snaps to the same presets and persists.
- Per-device display preference; does not change the desktop terminal.
- Extracts the xterm WebView HTML into terminal-webview-html.ts to keep
  TerminalWebView.tsx within its max-lines budget.

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

* refactor(mobile): make terminal text size reflow columns instead of CSS scaling

Text size now drives the real xterm fontSize rather than a CSS transform
baseline. A larger cell means fewer columns fit the phone width, so the
existing measure -> terminal.updateViewport pipeline resizes the PTY and the
shell rewraps to the new width (and smaller sizes show more columns). Pinch
still snaps to a preset, but now changes the font size and reflows instead of
scaling pixels; the refit hook re-fits the PTY whenever the scale changes.

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

* fix(mobile): restore terminal touch scrollback (undefined contentWiderThanViewport)

The single-finger touchmove handler gated horizontal panning on
contentWiderThanViewport(), which is never defined — so every one-finger
touchmove threw a ReferenceError before reaching the vertical-scroll code
below it, killing all touch scrolling including scrollback.

Replace the call with the inline overflow check clampPan() already uses
(scrollWidth * getTotalScale() > innerWidth). Vertical scroll now always runs;
two-finger pinch-to-zoom is unaffected. Merged two adjacent var decls to keep
the file under its max-lines cap without a disable.

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

* test(mobile): guard terminal text scale viewport refit

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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-06-15 13:14:58 -07:00
d17c22c826 feat(mobile): add terminal keyboard autocomplete toggle (#5348)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* feat(mobile): add terminal keyboard autocomplete toggle

Terminal command inputs disable autocorrect/suggestions and use a
password-class keyboard so the OS never rewrites commands, flags, or
paths. Some users want phone-style typing in the command bar.

Add a Settings → Terminal "Autocomplete & autocorrect" toggle
(persisted locally, default off). When on, the command bar enables
autoCorrect/spellCheck and uses the default keyboard so Android shows
its suggestion strip; iOS drops the ascii-capable restriction. The
direct keyboard-capture input is unchanged — it streams raw keystrokes
where suggestions cannot apply.

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

* fix(mobile): remount command input when autocomplete toggles

Android caches the IME inputType at mount, so flipping the toggle did
not switch suggestions on until the field remounted.

* fix(mobile): guard autocomplete pref loads against unmount and fast toggle

Address review feedback: the settings toggle's initial load could clobber
a fast user toggle, and the session focus-effect could setState after the
screen unfocused. Both now use a guard flag.

* test mobile terminal autocomplete preference

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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-06-15 13:07:07 -07:00
Jinwoo HongandOrca 5bf24368c0 Reduce Orca idle CPU (#5402)
* Reduce Orca idle CPU

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

* Restore low-cost working spinner

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-15 12:56:22 -07:00
Brennan BensonandOrca 4880b56998 Show attached worktrees in folder workspace sidebar (#5289)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 12:48:08 -07:00
Jinwoo HongandOrca cbe8c94831 fix: restore workspace composer autofocus (#5401)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 10:06:08 -07:00
Neil 668c7111f5 Fix new workspace composer lazy chunk crash (#5390) 2026-06-15 01:27:34 -07:00
Neil 1f2a50fe69 Remove tune density walkthrough step (#5389) 2026-06-15 01:20:04 -07:00
97dce8b1d4 fix: pr-bug-scan validated finding from #5283 (#5306)
* fix: address pr-bug-scan validated finding from #5283

Added '+'-foreground filter in resolveAgentForegroundProcessFromPs so a suspended/backgrounded recognized agent is not returned when a non-agent holds the terminal foreground.

* fix: handle shell foreground when agent is stopped

---------

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 00:03:20 -07:00
JinjingandCursor e6d3453ccf fix: keep review annotation add-button visible on long selections (#5384)
* fix: keep review annotation button visible

* fix: improve review annotation add-button visibility on selection

Make the plus button larger and styled with primary accent so it stays readable when it appears on active text selections, including long ones clamped inside the editor shell.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-14 23:39:08 -07:00
github-actions[bot] d5df9b7998 release: v1.4.70-rc.1 v1.4.70-rc.1 2026-06-15 06:24:38 +00:00
Jinjing a79f6f325b fix: keep review annotation button visible (#5383) 2026-06-14 23:23:43 -07:00
Jinjing c29e6e4a8c Support Bitbucket, Azure DevOps, and Gitea PRs in worktree flows (#5382)
Extend worktree creation, remote-conflict detection, and the Checks panel UI to support linked PRs from Bitbucket, Azure DevOps, and Gitea alongside GitHub and GitLab.

* Extract shared metadata lookup helpers to map provider-specific review identifiers.
* Update remote-conflict validation to check hosted reviews on target providers during worktree creation.
* Propagate provider-specific PR states through the RPC layers and into the Checks and Source Control UI panels.
2026-06-14 23:23:31 -07:00
8b90c15df9 fix(watcher): don't force-terminate the file-watcher worker before it unsubscribes (#5378)
* fix(watcher): don't force-terminate the file-watcher worker before it unsubscribes

The file-watcher worker runs @parcel/watcher in a Node worker thread. On
dispose the host posted an 'unsubscribe' message but then immediately called
worker.terminate(), force-freeing the worker's V8 environment while the native
watch thread and inflight async work were still live. That faults inside napi
(Watcher::findCallback / napi_strict_equals on a stale callback ref, and
PromiseRunner::onWorkComplete -> napi_fatal_error during FreeEnvironment),
crashing the main process.

Wait for the worker to unsubscribe and exit on its own; only terminate as a
backstop if it fails to exit within a timeout. The terminate was already
documented as a 'backstop in case the worker is wedged' but fired every time.

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

* Prevent worker exit event listener leaks in file watcher host

Ensure the 'exit' listener registered on the file watcher worker is
cleaned up during teardown, preventing potential memory leaks and
race conditions when wait times out or completes.

- Implement `waitForWorkerExit` helper to handle exit/timeout races.
- Clean up 'exit' listener on worker using `worker.off` on settling.
- Update test mocks and verify exit listener cleanup behaves correctly.

* Share pending file watcher dispose across racing callers

Ensure concurrent calls to the file watcher's dispose function
share the same worker-exit promise. This prevents subsequent
callers from resolving immediately while worker teardown is still
in flight.

---------

Co-authored-by: David Eiffert <davideiffert@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-14 23:17:25 -07:00
Carlos Baraza 999facb1b2 fix(sidebar): keep same-host checkouts of one repo as separate groups (#5375)
Multiple local checkouts (clones or worktrees) of the same GitHub repo
share the owner/repo slug, so the project-first sidebar grouping added in
#5071 collapsed them into one project group named after whichever folder
was added first.

Each checkout is already a distinct ProjectHostSetup, so group by setup
when a project backs more than one setup on the same host. Single-checkout
projects and cross-host (Local + SSH) grouping are unchanged, preserving
the multi-host workbench behavior.
2026-06-14 22:51:28 -07:00
github-actions[bot] 98806ffe38 release: v1.4.70-rc.0 [rc-slot:2026-06-14-15] v1.4.70-rc.0 2026-06-14 22:30:18 +00:00
Jinwoo HongandOrca 414ae73838 Prevent main-process crash on huge git status output (#5371)
* Prevent main-process crash on huge git status output

git status on a repo with an enormous un-ignored folder could emit a
listing large enough that buffering it into one string exceeded V8's
max string length, throwing an uncatchable RangeError inside Node's
execFile exit handler and crashing the main process (and blocking
mobile). The runner also forwarded an undefined maxBuffer straight to
execFile, which silently disabled the cap entirely.

- runner: apply a non-bypassable default maxBuffer so no git call can
  buffer without a bound.
- status: stream porcelain-v2 output through an incremental parser and
  kill git the moment the changed-entry count crosses a limit
  (default 10,000); skip numstat/upstream probe when limited. Apply the
  same limit to the relay/SSH status path.
- UX: surface a 'too many changes' state, pause auto status polling
  while a repo is over the limit, and offer to .gitignore a detected
  huge folder.

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

* Address review: validate inputs, fix stream decoding, localize copy

- huge-folder-ignore: restrict folderName to the known-folder allowlist
  before writing .gitignore (reject path-sep/newline injection).
- gitStreamStdout: decode stdout/stderr with StringDecoder so multibyte
  UTF-8 split across chunk boundaries isn't corrupted; flush on cleanup.
- gitStreamStdout: wrap the onStdout callback in try/catch so a throwing
  parser rejects the promise instead of crashing the main process.
- status/relay: validate the status limit as a non-negative integer.
- SourceControl: localize the 'too many changes' banner and the
  .gitignore warning toast via translate() with placeholder params.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-14 13:32:05 -07:00
github-actions[bot] 71647d32e3 release: v1.4.69 v1.4.69 2026-06-14 19:00:47 +00:00
Jinwoo HongandOrca a28dd42429 Fix Cmd+J host badge spacing and false "Connected" runtime state (#5362)
Co-authored-by: Orca <help@stably.ai>
2026-06-14 11:23:08 -07:00
github-actions[bot] c377ec1d1b release: v1.4.68 v1.4.68 2026-06-14 08:55:13 +00:00
Jinwoo HongandOrca 719ae00009 Fix remote runtime tab and agent status UX (#5341)
Co-authored-by: Orca <help@stably.ai>
2026-06-14 01:48:26 -07:00