The update card stayed pinned to the bottom-right for the entire
`downloading` / `downloaded` / `error` lifecycle with no minimize
affordance, and the X on downloaded/error persistently dismissed the
version — which silently orphaned in-flight downloads. Add an always-on
status-bar segment that surfaces progress / ready / error state, plus an
ephemeral `updateCardCollapsed` flag that the card's new minimize button
and Escape key set in those three phases. The flag is renderer-only and
resets on every phase transition so a collapsed `downloading` cannot
bury the `downloaded` / `error` that follows.
- Symlink delete/rename now preserve the link entry (new `preserveSymlink`
option on resolveAuthorizedPath) instead of operating on the target.
- File-explorer delete force-saves dirty editors before trashing so undo
restores the user's latest edits, not stale disk content.
- Thread `recursive` through preload → SSH provider so remote directory
delete works end-to-end.
- Remote deletes now confirm (permanent `rm`, no Trash) and the toast
reflects that no Trash/Recycle Bin is involved.
- Codex managed-home check canonicalizes the storage root before the
prefix compare so macOS `/private/var` paths stop being rejected.
- Add http-link-routing module to centralize link opening logic
- Refactor terminal, markdown, and editor link handlers to use openHttpLink
- Update browser settings to reflect new cross-component link routing
- Inject store accessor to avoid circular import issues
Replaces the `stable` + optional `version` inputs with explicit
`rc | patch | minor | major` choices. Stable kinds are always computed
off the latest published stable release (ignoring intermediate RCs), so
there's nothing to type and no way to pick a version that regresses
electron-updater.
The stable-must-strictly-increase guard stays in place for patch/minor/
major. RC behavior is unchanged — continues an active series or starts
a new one on the next patch.
* docs(electron-skill): harden playwright-cli usage against alias and port collisions
Prefer `command playwright-cli` to bypass user shell aliases that can leak
flags (e.g., `--persistent`) into subcommands. Add guidance to probe a free
CDP port before launching and verify the attached target is the intended
worktree, since stale dev servers on 9333 cause silent mis-attachment.
* docs(electron-skill): trim verbose CDP sections
Trashing is reversible (OS trash + in-app undo), so the extra prompt
is noise. The file explorer now directly moves the file to Trash /
Recycle Bin and shows an auto-dismissing bottom-right toast.
Port VSCode's two-detector pattern (MIT): the existing path pass handles
tokens with a `/`, and a new bare-word pass emits tentative candidates
for whitespace-separated filenames so `ls` output becomes clickable.
The provider's existing `pathExists` check filters candidates that
don't resolve against the terminal's cwd.
Also fix an off-by-one in the xterm link range — `parsed.endIndex` is
the exclusive string-slice end, but xterm's `IBufferRange.end.x` is
1-based inclusive, so `+1` was including the trailing whitespace cell
of column-padded output ("package.json ").
Replaces the local `pnpm release:{rc,patch,minor,major}` scripts with a
single manually-dispatched GitHub Actions workflow (`release-cut.yml`)
that takes `kind` (rc|stable), an optional `ref`, and an optional explicit
`version`.
Why: cutting releases locally was too easy to get wrong — `npm version
prerelease` behaves differently depending on whether the current version
is already an rc, there was no guard against tagging a dirty tree or an
off-main branch, and the "bad commit just landed, release the previous
one" case had no first-class answer. The new workflow:
- Resolves the next version automatically from GitHub Releases (or takes
an explicit override).
- Refuses to cut a stable release whose version isn't strictly greater
than the latest published stable. This is the only invariant
electron-updater needs within the `latest` channel.
- Only fast-forwards `main` with the version-bump commit when the caller
released the tip of `main`. Off-main releases publish only the tag, so
main is never polluted by a one-off RC against a feature branch.
CONTRIBUTING.md now documents the new flow with the common scenarios
(normal release, bad-commit-revert-to-previous-SHA, one-off RC, explicit
minor/major). The scheduled RC cron in release-rc.yml is untouched.
Cmd+F in the rich markdown editor previously inserted a sticky search bar
in the flex column, pushing document content down when opened. Wrap the
scroll area in a relative container and absolutely position the search bar
top-right so it overlays the content like Monaco's find widget.
Switch the status bar right-click menu from the bespoke Radix ContextMenu
to the onContextMenuCapture + hidden-trigger DropdownMenu pattern used by
WorktreeContextMenu, TerminalContextMenu, and the tab bar. Updates the
anchor point on every right-click so opening in a new spot re-anchors
instead of leaving the menu where it first appeared. Adds provider /
feature icons to each toggle to match the rest of the app.
* fix(terminal): drop FORCE_HYPERLINK=1 from PTY spawn env
FORCE_HYPERLINK=1 was set on every local PTY. It is read by
oh-my-zsh's supports_hyperlinks(), the Rust supports-hyperlinks
crate, GNU coreutils, and other tooling — so forcing it on
makes every subprocess invoked during shell init take extra
branches and emit OSC-8 escapes.
Reproduced locally with a heavy zshrc (oh-my-zsh + p10k + nvm +
pyenv): time-to-prompt jumps from ~600 ms without the variable
to ~2000 ms with it (3.2×) on a clean sandbox. Stacked with the
user-reported configuration (conda init, gcloud completions,
compaudit over Homebrew paths, corporate network calls) that
multiplier applied to a long serial chain of forks can stretch
into "terminal is effectively never ready."
xterm still renders OSC-8 hyperlinks when tools emit them on
their own detection, so link support in Orca is preserved. VS
Code does not set this variable either.
* feat(terminal): make FORCE_HYPERLINK opt-out via settings, default on
The previous commit on this branch removed FORCE_HYPERLINK=1 from PTY
spawn env entirely. Revise: keep the historical default (on) so
existing users don't silently lose OSC-8 hyperlink emission from
tooling that checks this flag, but expose a toggle in Settings →
Terminal → Advanced so users with heavy rc files (oh-my-zsh +
powerlevel10k + nvm + pyenv + conda, etc.) can turn it off and reclaim
the shell-startup time that the extra subprocess branching and escape
emission was costing them.
- Add `terminalForceHyperlink: boolean` to GlobalSettings (default true)
- LocalPtyProvider gains an `isForceHyperlinkEnabled` hook; IPC wires
it from the live settings snapshot
- New SearchableSetting row in TerminalPane with zshrc-adjacent search
keywords so users troubleshooting slow startup find it
- Unit tests cover both default-on and opt-out paths