* 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>
* Show worktree-attributed child agents inline
- Keep orchestration worker rows visible when hook status arrives before the
renderer has a tab for the pane.
- Show child agent lineage expanded by default with clearer parent/child styling.
- Tighten worktree list indentation so grouped and nested rows align correctly.
* Sync agent lineage from runtime graph
- Return main-owned orchestration metadata during window graph sync so live,
retained, and title-derived agent rows stay grouped under the right parent.
- Match lineage by terminal handle when pane keys are unavailable after
teardown, and ignore stale completed dispatches.
- Adjust sidebar indentation and compact agent row chrome/readability.
* Preserve agent lineage across status replay and worktree cleanup
- Enrich agent status snapshots with runtime terminal and orchestration metadata
- Share lineage tree building between dashboard and sidebar, including coordinator fallback
- Avoid applying stale runtime dispatch metadata to current hook statuses
- Use worktree attribution for PR refresh and live status removal before tabs mount
* Fix stale agent spinners from retained pane status
- Track authoritative agent pane ids, including retained and legacy rows
- Let done rows override stale runtime titles so worktree cards stop showing
working after agents finish
* fix: address review findings