* Add keyboard shortcuts to launch agent tabs
Cmd+T opens a plain terminal tab, but launching an agent in a new tab was
mouse-only (tab bar + menu). This adds:
- tab.newAgent ("New agent tab"): launches the default agent in a new tab
in the active workspace. Default chord Cmd+Alt+T on macOS; unassigned on
Windows/Linux (AltGr / desktop-terminal chord conflicts), bindable in
Settings. Resolves the agent via the configured default when detected
and enabled, otherwise the shared auto-pick order; a 'blank' default
falls through to auto-pick since an explicit agent chord wants an agent.
- tab.newAgent.<id>: one bindable action per TUI agent so each enabled
agent can sit on its own chord. All ship unassigned. Settings →
Shortcuts shows them in a new "Agents" group, hiding disabled agents;
a per-agent chord launches its agent even when detection hasn't
confirmed the binary (explicit request fails visibly in the tab).
Launches go through launchAgentInNewTab (same path as the tab-bar quick
launch) with launch_source 'shortcut'. Agent display names move to a
shared module so the keybinding registry can title the generated actions
without importing renderer code. groupDefinitions moves out of
ShortcutsPane.tsx to keep it under the max-lines lint cap.
* Fix recording Option-composed shortcuts on macOS
On macOS, Option changes the produced character (Cmd+Alt+C reports
key 'ç'), so the shortcut recorder rejected Alt combos with 'Press a
key, not only a modifier'. Capture now falls back to the physical key
code when Alt is held, matching the existing matcher behavior.
* fix: ignore disabled agent shortcuts in conflict checks
Co-authored-by: Orca <help@stably.ai>
* fix: align mac option shortcut capture with matching
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
* Fix markdown preview links opening in system browser instead of Orca
In the markdown preview, a plain (or Cmd/Ctrl) click on an http/https link
called window.api.shell.openUrl() directly, which always routes to
shell.openExternal (the OS default browser). It bypassed openHttpLink, so a
plain click could never open in the Orca built-in browser, regressing the
behavior from #987. The Cmd/Ctrl+Shift escape hatch was already correct.
Route both http click paths through openHttpLink via a new
resolveMarkdownPreviewHttpOpenOptions helper that centralizes the
cross-platform modifier decision (Cmd on Mac, Ctrl on Linux/Windows):
- plain / Cmd-click -> { worktreeId } -> Orca browser (per openLinksInApp),
falling back to the system browser when the setting is off, no worktree is
known, or a remote runtime is active.
- Cmd/Ctrl+Shift-click -> { forceSystemBrowser: true } -> system browser.
The remote/SSH case is handled inside openHttpLink (http stays on the client
system browser; file:// blocking is unchanged).
Adds a happy-dom interaction test that renders the real component and fires
real modifier clicks, plus full modifier-matrix coverage for the helper.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* review: share markdown preview link modifier logic
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>