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
* fix(browser): set up session policies for default browser partition
The default browser partition (persist:orca-browser) was created in the
registry constructor but never got session policies — permission handlers,
download handlers, WebAuthn handlers, etc. — because:
1. hydrateFromPersisted() explicitly skips the default partition
2. createProfile() never targets the default partition
3. restorePersistedUserAgent() only restored the user agent, not policies
This meant sites in the default browser partition that requested
clipboard-sanitized-write (or any other permission) were denied by
Electron's default behavior, since no handler was registered.
Fix: call setupSessionPolicies(ORCA_BROWSER_PARTITION) in
restorePersistedUserAgent(), which is the startup path that runs after
app is ready. The configuredPartitions guard makes this idempotent.
Also adds a test verifying the default partition gets its session
policies on restore.
Co-authored-by: Orca <help@stably.ai>
* fix(browser): preserve clipboard permissions for browser session
Co-authored-by: Orca <help@stably.ai>
* Initialize browser sessions at app startup
- Move cookie replay and persisted session setup out of renderer IPC wiring
- Install default browser partition policies once per process before webviews load
- Cover startup ordering, retry behavior, permission denial, downloads, and WebAuthn policies
---------
Co-authored-by: Prethish-Complyance <prethish@complyance.io>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
- 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
Use a platform-shaped selected Codex home fixture so native Windows PTY tests exercise the host Codex home path instead of filtering a POSIX /tmp path as WSL-shaped.
* fix: address review findings
* Fix compact agent row overflow in worktree cards
- Allow inline agent rows to outdent into the card gutter without clipping
- Scope compact agent list sizing to the list container instead of the button
- Keep expanded agent headers quiet while preserving collapsed pill styling
Reviewed and landed with maintainer follow-ups for preview-tab promotion, source-control double-click behavior, dirty/split preview safety, and current-main persistence test compatibility.
* fix(settings): prevent IME composition cancellation in repository Display Name and Worktree Location inputs
Controlled inputs bound directly to the zustand store caused IME
composition to be cancelled on every keystroke because React re-rendered
from the stale store value before the async IPC round-trip completed.
On slow typing this yielded bare jamo decomposition (가나다 → ㄱㅏㄴㅏㄷㅏ);
on fast typing characters were silently dropped.
Introduce RepoSettingsDraftInput, a wrapper that keeps keystrokes in
local draft state so the input is always synchronously controlled. The
store is still written on every keystroke in the background so the
sidebar stays live. Draft resets only when the active repo changes, so
async IPC echoes cannot clobber newer draft text.
Apply RepoSettingsDraftInput to both the Display Name and the Worktree
Location inputs (identical store-bound binding, same root cause).
Also link the Display Name Label to its input via htmlFor/id for a11y
and test-locator clarity.
Tests added:
- RepositoryPaneDraftInput.test.tsx: unit tests (happy-dom) — draft
survives stale store re-render and stale IPC echo; resets on repo
switch; persists on every keystroke.
- tests/e2e/settings-display-name-ime.spec.ts: Playwright e2e driving
Blink's real IME pipeline via CDP Input.imeSetComposition /
Input.insertText with an adaptive 2-set Korean IME emulator.
Fails with 'ㄱㅏㄴㅏㄷㅏ' on the pre-fix code; passes on the fix.
* fix(settings): preserve external repo setting updates
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>