- Remove `experimentalUnifiedNewTabLauncher` flag and gate; the unified
launcher is now always enabled
- Drop the settings toggle from ExperimentalPane and search index
- Update placeholder/aria text to "Open any file, URL, agent, ..."
- Restyle the input: borderless, flush with dropdown edge, no search icon
- Update test fixtures to include agent-detection state fields now
unconditionally read by TabBarCreateEntry
* Show Kimi Code subscription usage in the status bar
Add a read-only rate-limit fetcher for Kimi Code that reads the OAuth token from ~/.kimi-code/credentials (honoring KIMI_CODE_HOME) and queries Kimi's usages endpoint, surfacing the 5h session window and weekly quota in the existing status-bar rate-limit UI alongside Claude/Codex/Gemini. Gated on the kimi CLI being detected, with a settings toggle.
Read-only by design: the fetcher never refreshes or writes credentials — rotating Kimi's refresh token would log out the user's live CLI session — and never calls Kimi's completion endpoint. It only reads the existing token and the usages quota endpoint, mirroring how the CLI itself reads managed usage.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Harden Kimi usage status handling
Preserve cached quota on transient Kimi credential/API failures and migrate the default status-bar item for existing users.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Substring detection mis-fired on titles like "opencode-blinker" or
"claude-scratch", labeling a Codex tab as OpenCode whenever the terminal
title fell back to the bare worktree directory name.
- Extract token-matching regexes into `agent-name-token-match.ts` with
a boundary guard that rejects path separators and hyphenated compounds
- Replace all `lower.includes(name)` calls in `agent-detection.ts` with
`titleHasAgentName()`; re-export `AGENT_NAMES` to keep existing importers working
- Allow `.exe/.cmd/.bat/.ps1` suffixes so Windows launcher process names
(e.g. `openclaude.exe`) still resolve correctly
- Update tests: cwd-path fragments now return null; real agent titles
that contain the name as a proper token still resolve correctly
- trim prose punctuation from embedded GitHub URLs before smart submit parsing
- avoid treating generated workspace slugs as explicit user intent
- add regression coverage for both edge cases
* feat: hide markdown front matter by default with per-file toggle (#4468)
Front matter in the markdown preview was always visible above the
rendered body, which clutters reading for files where the metadata
is incidental. Default the card to hidden and let users opt in per
file via a small switch in the section header.
* Add a per-file markdownFrontmatterVisible flag in EditorSlice,
mirroring the editorViewMode pattern (absent entry = hidden;
storing only explicit true values keeps the record minimal).
* Clean the entry up on closeFile, preview-tab replacement, and
worktree removal; reset on runtime switch.
* Render the existing front-matter card unchanged when the toggle
is on, hide only the <pre> body when it is off, and keep the
section header + SettingsSwitch visible so the affordance stays
discoverable.
* Add 4 regression cases in editor.test.ts mirroring the
editorViewMode tests.
* fix: persist markdown front matter visibility
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
Adds configurable macOS shortcuts for renaming the active terminal tab and active workspace, with review follow-up fixes for conflict detection, sidebar reveal, lineage child rename surfaces, and floating workspace focus scoping.
Avoid Electron 42.3.x's broken bulk UTF-8 conversion when persisting stats JSON. The crash loop reproduced when sparse non-ASCII strings in orca-stats.json were rewritten after restored terminal activity triggered a debounced stats save.
Add regression coverage for the sparse non-ASCII payload and surrogate-pair boundary handling.
* fix: write stats file in chunks to avoid Electron UTF-8 abort
orca-stats.json gains an event on every agent start/stop. After about a
month of use mine had grown to ~3.6k events / ~608 KB, and the app started
hard-crashing a few seconds after every launch (SIGTRAP, no catchable JS
stack):
Assertion failed: (length + 1) <= (capacity())
node::MaybeStackBuffer<char>::SetLengthAndZeroTerminate <- node::Utf8Value
The crash is in StatsCollector.writeToDiskSync(), which saves the whole
file in one writeFileSync(JSON.stringify(data)). Electron 42.3.2's bundled
Node aborts when encoding a string that large to UTF-8 in a single write;
stock Node 24 handles the same file fine and the data is well-formed, so
it's an Electron/Node encoding limit, not bad data. The save runs on a
debounce after agent_start, which restored agents fire on launch -- so it
crashed right after opening.
Write the JSON in 64 KB slices through one fd instead (never splitting a
surrogate pair), and lower MAX_EVENTS 10k -> 1k so the file can't grow back
this large. Lifetime aggregates are unaffected.
Verified by reproducing the abort standalone with the real 608 KB file
under ELECTRON_RUN_AS_NODE, confirming the chunked writer round-trips it
byte-for-byte with no crash, and running a patched build that loads the
file without crashing. The underlying encode abort is an Electron/Node bug
to report upstream.
* fix: harden stats JSON writes
* fix: chunk app state UTF-8 writes
* fix: stabilize status and terminal polling
---------
Co-authored-by: thiagomsoares <5190162+thiagomsoares@users.noreply.github.com>
* Track explicitly slept worktrees in session state
- Persist user sleep intent separately from inactive terminal/browser state
- Use slept markers for sidebar, jump palette, kanban, and activation deferral
- Preserve slept markers across local, web, and remote workspace sessions
* Preserve slept worktree state across remote sync
- Merge remote sleep/default-terminal markers by target workspace so remote
hydration does not discard local markers
- Let Sleep run for selected worktrees even when they only have preserved
wake hints, while avoiding reconnects for explicitly slept legacy sessions
* Allow session snapshots without slept worktree ids
* Default repo avatars to the GitHub upstream owner and flag forks
Make the GitHub owner avatar the default repo icon and surface it as the
primary choice in the icon picker (the "Image" tab becomes "Avatar",
moves first, and opens by default). For forks, resolve the upstream/
parent owner so the avatar reflects the source repo instead of the
personal fork, and show a fork indicator (GitFork glyph + "Fork of
owner/repo" tooltip) next to the repo in the sidebar and settings.
Fork detection prefers the offline `upstream` remote, falling back to a
`gh repo view --json isFork,parent` lookup; the resolved upstream is
stored on the repo. Existing repos self-correct via a one-time startup
backfill (local repos) and a lazy backfill when their icon settings open
(SSH repos); new repos resolve at add-time. Reset now restores the
default (re-detecting the upstream) instead of clearing to the Folder
icon.
* Harden repo upstream avatar handling
---------
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
* Allow Linear context issue lists to load more
Co-authored-by: Orca <help@stably.ai>
* Simplify Linear load more footer copy
Co-authored-by: Orca <help@stably.ai>
* Page Linear issue reads past backend cap
Co-authored-by: Orca <help@stably.ai>
* Align Linear load more footer with GitHub pager
Co-authored-by: Orca <help@stably.ai>
* Use pager for Linear issue lists
Co-authored-by: Orca <help@stably.ai>
* Avoid phantom Linear issue pages
Co-authored-by: Orca <help@stably.ai>
* Fix local Linear issue pagination cap
Co-authored-by: Orca <help@stably.ai>
* Fix Linear pagination review issues
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Orca <help@stably.ai>