From 7a63515ca0af8c46f433092d863d6b21303e20e3 Mon Sep 17 00:00:00 2001
From: Neil
Date: Tue, 22 Sep 2026 21:25:38 -0700
Subject: [PATCH 01/25] feat(search): bundle ripgrep for local, WSL, and SSH
search
Ship @vscode/ripgrep-universal's prebuilt rg for all six relay platforms in
every desktop artifact. Local and WSL searches spawn the bundled binary and
drop the git ls-files / git grep fallbacks; SSH deploys upload the remote's
binary once per ripgrep version and the relay prefers it over PATH rg.
---
.gitignore | 1 +
AGENTS.md | 1 +
config/bundled-ripgrep-resources.cjs | 60 +++
config/electron-builder.config.cjs | 10 +
...lectron-builder-runtime-resources.test.mjs | 12 +
config/scripts/pr-e2e-gate-contract.test.mjs | 3 +-
config/scripts/pr-e2e-source-routing.mjs | 2 +-
docs/reference/bundled-ripgrep.md | 58 +++
package.json | 1 +
pnpm-lock.yaml | 14 +-
.../git/command-runner/wsl-aware-spawn.ts | 12 +-
...-command-resolution-windows-binary.test.ts | 30 ++
.../command-runner/wsl-command-resolution.ts | 4 +-
.../runner-wsl-linked-gitdir-windows.test.ts | 10 -
...list-files-git-directory-expansion.test.ts | 201 --------
...ystem-list-files-git-fallback-real.test.ts | 167 -------
.../ipc/filesystem-list-files-git-fallback.ts | 335 --------------
.../filesystem-list-files-install-rg.test.ts | 126 -----
.../filesystem-list-files-name-filter.test.ts | 80 +---
.../filesystem-list-files-without-ripgrep.ts | 34 --
src/main/ipc/filesystem-list-files.test.ts | 430 ++----------------
src/main/ipc/filesystem-list-files.ts | 35 +-
.../ipc/filesystem-search-file-paths.test.ts | 54 +--
src/main/ipc/filesystem-search-file-paths.ts | 26 +-
src/main/ipc/filesystem-search-git.test.ts | 226 ---------
src/main/ipc/filesystem-search-git.ts | 103 -----
.../ipc/filesystem-search-rg-timeout.test.ts | 75 ++-
.../filesystem/filesystem-search-handlers.ts | 26 +-
src/main/ipc/rg-availability.test.ts | 83 ----
src/main/ipc/rg-availability.ts | 94 ----
src/main/ripgrep/bundled-ripgrep-path.test.ts | 89 ++++
src/main/ripgrep/bundled-ripgrep-path.ts | 81 ++++
...untime-files-mobile-explorer-reads.test.ts | 8 -
.../orca-runtime-files-mock-registry.ts | 24 +-
.../orca-runtime-files-preview-budget.test.ts | 8 -
...rca-runtime-files-rename-authority.test.ts | 8 -
.../runtime/orca-runtime-files-search.test.ts | 63 +--
...orca-runtime-files-ssh-chunk-reads.test.ts | 8 -
...ime-files-terminal-artifact-grants.test.ts | 8 -
...runtime-files-terminal-artifact-io.test.ts | 8 -
...s-terminal-artifact-swap-detection.test.ts | 8 -
...les-terminal-link-host-translation.test.ts | 8 -
...ime-files-terminal-path-resolution.test.ts | 8 -
...rca-runtime-files-watch-host-scope.test.ts | 8 -
...ile-commands-search-local-runtime-files.ts | 32 +-
.../runtime-search-line-fragments.test.ts | 15 +-
.../ssh-relay-bundled-ripgrep.docker.test.ts | 196 ++++++++
.../ssh-relay-deploy-staged-upload.test.ts | 7 +
src/main/ssh/ssh-relay-deploy.test.ts | 82 ++--
src/main/ssh/ssh-relay-deploy.ts | 23 +-
.../ssh/ssh-relay-native-deps-install.test.ts | 7 +
.../ssh/ssh-relay-ripgrep-install.test.ts | 254 +++++++++++
src/main/ssh/ssh-relay-ripgrep-install.ts | 230 ++++++++++
src/relay/fs-handler-list-files.ts | 19 +-
src/relay/fs-handler-utils.ts | 65 +--
src/relay/relay-bundled-ripgrep.test.ts | 130 ++++++
src/relay/relay-bundled-ripgrep.ts | 57 +++
src/relay/relay-launch-options.test.ts | 13 +
src/relay/relay-launch-options.ts | 9 +-
src/relay/relay.ts | 2 +
src/shared/bundled-ripgrep.test.ts | 17 +
src/shared/bundled-ripgrep.ts | 26 ++
.../child-process-import-allowlist.txt | 1 -
.../windows-console-visibility-allowlist.txt | 1 -
.../child-process-import-boundary.test.ts | 2 +-
.../windows-console-visibility.test.ts | 2 +-
66 files changed, 1629 insertions(+), 2211 deletions(-)
create mode 100644 config/bundled-ripgrep-resources.cjs
create mode 100644 docs/reference/bundled-ripgrep.md
create mode 100644 src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts
delete mode 100644 src/main/ipc/filesystem-list-files-git-directory-expansion.test.ts
delete mode 100644 src/main/ipc/filesystem-list-files-git-fallback-real.test.ts
delete mode 100644 src/main/ipc/filesystem-list-files-git-fallback.ts
delete mode 100644 src/main/ipc/filesystem-list-files-install-rg.test.ts
delete mode 100644 src/main/ipc/filesystem-list-files-without-ripgrep.ts
delete mode 100644 src/main/ipc/filesystem-search-git.test.ts
delete mode 100644 src/main/ipc/filesystem-search-git.ts
delete mode 100644 src/main/ipc/rg-availability.test.ts
delete mode 100644 src/main/ipc/rg-availability.ts
create mode 100644 src/main/ripgrep/bundled-ripgrep-path.test.ts
create mode 100644 src/main/ripgrep/bundled-ripgrep-path.ts
create mode 100644 src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
create mode 100644 src/main/ssh/ssh-relay-ripgrep-install.test.ts
create mode 100644 src/main/ssh/ssh-relay-ripgrep-install.ts
create mode 100644 src/relay/relay-bundled-ripgrep.test.ts
create mode 100644 src/relay/relay-bundled-ripgrep.ts
create mode 100644 src/shared/bundled-ripgrep.test.ts
create mode 100644 src/shared/bundled-ripgrep.ts
diff --git a/.gitignore b/.gitignore
index 56ecc5854b6d..4cacef3c21b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -119,6 +119,7 @@ docs/**
!docs/reference/agent-session-search-query-tuning.md
!docs/reference/agent-session-search-contract.md
!docs/reference/agent-status-store.md
+!docs/reference/bundled-ripgrep.md
!docs/reference/antigravity-readiness-evidence.md
!docs/reference/git-compatibility.md
!docs/reference/headless-linux-server.md
diff --git a/AGENTS.md b/AGENTS.md
index dad66f4bba83..6fb30790fe13 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -75,6 +75,7 @@ Orca targets macOS, Linux, and Windows. Keep all platform-dependent behavior beh
- **Windows terminal shells**: `--shell` picks the shell a terminal _is_; `--command` is typed into whatever shell the host spawned, so a shell choice routed through `command` silently becomes a child process. See [`docs/reference/windows-terminal-shell-selection.md`](./docs/reference/windows-terminal-shell-selection.md).
- **Windows setup scripts**: the setup/issue-command runner is a `.cmd` batch file unless the script starts with a `#!` line — never derive that from the user's terminal-shell preference, and never launch a `.cmd` runner with a bare `cmd.exe /c` from a Git Bash pane (MSYS rewrites the `/c`). See [`docs/reference/windows-setup-shell.md`](./docs/reference/windows-setup-shell.md).
- **Windows child processes**: start them through `runProcess`/`spawnProcess` in `src/shared/child-process/` — never `child_process` directly. It pins `windowsHide`, refuses `shell: true`, and encodes `.cmd`/`.bat` arguments so neither `CommandLineToArgvW` nor `cmd.exe` mangles them. A ratchet test fails on any new direct import. Recognised npm/pnpm `.cmd` shims are resolved to their real target so the spawn skips `cmd.exe` entirely; see [`docs/reference/windows-cmd-shim-resolution.md`](./docs/reference/windows-cmd-shim-resolution.md) before adding a shim shape or debugging one.
+- **Ripgrep**: Orca bundles `rg` for every platform, WSL, and SSH remotes. Spawn it through `bundledRipgrepCommand` (main) or the relay's resolver, never a bare `'rg'`, and don't add git/readdir fallbacks locally. See [`docs/reference/bundled-ripgrep.md`](./docs/reference/bundled-ripgrep.md).
- **Windows process enumeration**: read the table through `src/main/windows/windows-process-table.ts`, never by forking `powershell.exe`. See [`docs/reference/windows-process-enumeration.md`](./docs/reference/windows-process-enumeration.md).
- **Windows MSYS/Git Bash panes**: their children break away from the per-PTY job unless it is created without `JOB_OBJECT_LIMIT_BREAKAWAY_OK`, and a `conpty.node` built before that fix passes every existing gate. Before changing the per-PTY job or debugging `windows-msys-job.win32.test.ts`, read [`docs/reference/windows-msys-job-breakaway.md`](./docs/reference/windows-msys-job-breakaway.md).
- **Windows daemon-host relocation**: the terminal daemon runs from a copy of the app runtime under `%LOCALAPPDATA%`, which is what survives an auto-update. Before touching that copy, its exe name, or the NSIS uninstall macro, read [`docs/reference/windows-daemon-host-relocation.md`](./docs/reference/windows-daemon-host-relocation.md).
diff --git a/config/bundled-ripgrep-resources.cjs b/config/bundled-ripgrep-resources.cjs
new file mode 100644
index 000000000000..a44ff21bb228
--- /dev/null
+++ b/config/bundled-ripgrep-resources.cjs
@@ -0,0 +1,60 @@
+const { chmodSync, existsSync } = require('node:fs')
+const { join } = require('node:path')
+
+// Why every relay platform in every artifact: SSH deploys upload the remote host's rg from the
+// local bundle, and WSL runs the Linux build from the Windows install directory.
+const BUNDLED_RIPGREP_PLATFORMS = [
+ 'linux-x64',
+ 'linux-arm64',
+ 'darwin-x64',
+ 'darwin-arm64',
+ 'win32-x64',
+ 'win32-arm64'
+]
+const RIPGREP_PACKAGE_BIN_DIR = 'node_modules/@vscode/ripgrep-universal/bin'
+
+function ripgrepBinaryName(platform) {
+ return platform.startsWith('win32-') ? 'rg.exe' : 'rg'
+}
+
+const bundledRipgrepExtraResource = {
+ from: RIPGREP_PACKAGE_BIN_DIR,
+ to: 'ripgrep',
+ filter: BUNDLED_RIPGREP_PLATFORMS.map((platform) => `${platform}/**`)
+}
+
+// Why: codesign would try to sign the Linux/Windows builds; they are inert data on macOS.
+const bundledRipgrepMacSignIgnore = ['/ripgrep/(linux|win32)-']
+
+// Why: electron-builder only warns on a missing extraResources source.
+function assertBundledRipgrepInstalled(projectDir = join(__dirname, '..')) {
+ const missing = BUNDLED_RIPGREP_PLATFORMS.filter(
+ (platform) =>
+ !existsSync(join(projectDir, RIPGREP_PACKAGE_BIN_DIR, platform, ripgrepBinaryName(platform)))
+ )
+ if (missing.length > 0) {
+ throw new Error(
+ `@vscode/ripgrep-universal is missing binaries for ${missing.join(', ')}; run pnpm install.`
+ )
+ }
+}
+
+function finalizePackagedRipgrep(resourcesDir) {
+ for (const platform of BUNDLED_RIPGREP_PLATFORMS) {
+ const binaryPath = join(resourcesDir, 'ripgrep', platform, ripgrepBinaryName(platform))
+ if (!existsSync(binaryPath)) {
+ throw new Error(`Packaged app is missing bundled ripgrep: ${binaryPath}`)
+ }
+ // Why: the upstream tarball's exec bits are not guaranteed after copying.
+ chmodSync(binaryPath, 0o755)
+ }
+}
+
+module.exports = {
+ BUNDLED_RIPGREP_PLATFORMS,
+ RIPGREP_PACKAGE_BIN_DIR,
+ assertBundledRipgrepInstalled,
+ bundledRipgrepExtraResource,
+ bundledRipgrepMacSignIgnore,
+ finalizePackagedRipgrep
+}
diff --git a/config/electron-builder.config.cjs b/config/electron-builder.config.cjs
index 71c140dc0c50..2bae1e1f7cc7 100644
--- a/config/electron-builder.config.cjs
+++ b/config/electron-builder.config.cjs
@@ -19,6 +19,12 @@ const {
assertMobileWebBundleBuilt
} = require('./scripts/verify-packaged-mobile-web-bundle.cjs')
const { verifyPackagedPluginResources } = require('./scripts/verify-packaged-plugin-resources.cjs')
+const {
+ assertBundledRipgrepInstalled,
+ bundledRipgrepExtraResource,
+ bundledRipgrepMacSignIgnore,
+ finalizePackagedRipgrep
+} = require('./bundled-ripgrep-resources.cjs')
const {
verifyPackagedWindowsNodePty
} = require('./scripts/verify-packaged-node-pty-job-ownership.cjs')
@@ -105,6 +111,7 @@ const emojiShortcodeDatasetResource = {
}
const commonExtraResources = [
relayExtraResource,
+ bundledRipgrepExtraResource,
bundledPluginResources,
skillFreshnessResources,
emojiShortcodeDatasetResource
@@ -297,6 +304,7 @@ module.exports = {
// so a test can point the guard at a scratch bundle instead of needing the repo's out/ built.
beforePack: (context, mobileWebBundleDir = MOBILE_WEB_BUNDLE_DIR) => {
assertPackagedNativeVariantsInstalled(context.electronPlatformName, context.arch)
+ assertBundledRipgrepInstalled()
assertMobileWebBundleBuilt(mobileWebBundleDir)
},
afterPack: async (context) => {
@@ -384,6 +392,7 @@ module.exports = {
// Why: inspect electron-builder's real output so a broken extraResources
// mapping fails packaging before bundled content reaches users.
verifyPackagedPluginResources(resourcesDir)
+ finalizePackagedRipgrep(resourcesDir)
chmodUnixCliLaunchers(resourcesDir, context.electronPlatformName)
chmodMacServeSimHelpers(resourcesDir, context.electronPlatformName)
for (const filename of readdirSync(resourcesDir)) {
@@ -482,6 +491,7 @@ module.exports = {
icon: 'resources/build/icon.icns',
entitlements: 'resources/build/entitlements.mac.plist',
entitlementsInherit: 'resources/build/entitlements.mac.plist',
+ signIgnore: bundledRipgrepMacSignIgnore,
extendInfo: {
NSAppleEventsUsageDescription:
'Orca allows terminal-launched developer tools to automate local apps when you request it.',
diff --git a/config/scripts/electron-builder-runtime-resources.test.mjs b/config/scripts/electron-builder-runtime-resources.test.mjs
index 6eb34aff896a..77f45f621131 100644
--- a/config/scripts/electron-builder-runtime-resources.test.mjs
+++ b/config/scripts/electron-builder-runtime-resources.test.mjs
@@ -410,6 +410,7 @@ describe('packaged runtime resources', () => {
join(resourcesDir, 'plugins', 'launch'),
{ recursive: true }
)
+ await seedBundledRipgrep(resourcesDir)
const unpackedMainDir = join(resourcesDir, 'app.asar.unpacked', 'out', 'main')
await mkdir(unpackedMainDir, { recursive: true })
@@ -476,6 +477,7 @@ describe('packaged runtime resources', () => {
join(resourcesDir, 'plugins', 'launch'),
{ recursive: true }
)
+ await seedBundledRipgrep(resourcesDir)
await mkdir(join(resourcesDir, 'node_modules', 'zod', 'src'), { recursive: true })
// Why: afterPack now fails hard when the unpacked daemon entry is
// missing, so the fixture must carry one like a real package layout.
@@ -528,6 +530,16 @@ describe('packaged runtime resources', () => {
// Why source-anchored: the bundler renames a createRequire()'d require, so
// verifyPackagedMainRuntimeDeps' `require("x")` scan cannot see these specifiers — packaging
// stays green while the packaged app throws MODULE_NOT_FOUND the first time the path runs.
+// Why stubs: afterPack only checks each platform binary exists; non-ELF bytes skip the glibc scan.
+async function seedBundledRipgrep(resourcesDir) {
+ const { BUNDLED_RIPGREP_PLATFORMS } = require('../bundled-ripgrep-resources.cjs')
+ for (const platform of BUNDLED_RIPGREP_PLATFORMS) {
+ const dir = join(resourcesDir, 'ripgrep', platform)
+ await mkdir(dir, { recursive: true })
+ await writeFile(join(dir, platform.startsWith('win32-') ? 'rg.exe' : 'rg'), '', 'utf8')
+ }
+}
+
function collectLazyRequireSpecifiers(directory, found = new Map()) {
for (const entry of readdirSync(directory, { withFileTypes: true })) {
const entryPath = join(directory, entry.name)
diff --git a/config/scripts/pr-e2e-gate-contract.test.mjs b/config/scripts/pr-e2e-gate-contract.test.mjs
index 22677bb152fe..d586f27ff1a6 100644
--- a/config/scripts/pr-e2e-gate-contract.test.mjs
+++ b/config/scripts/pr-e2e-gate-contract.test.mjs
@@ -536,7 +536,8 @@ describe('PR E2E gate contract', () => {
)
}
for (const source of [
- 'src/main/ipc/rg-availability.ts',
+ 'src/main/ripgrep/bundled-ripgrep-path.ts',
+ 'src/shared/bundled-ripgrep.ts',
'src/shared/ripgrep-process-availability.ts'
]) {
expect(selectPrE2eSpecs([source]), source).toEqual([
diff --git a/config/scripts/pr-e2e-source-routing.mjs b/config/scripts/pr-e2e-source-routing.mjs
index 7efe4cca8b02..9a8f678860f0 100644
--- a/config/scripts/pr-e2e-source-routing.mjs
+++ b/config/scripts/pr-e2e-source-routing.mjs
@@ -137,7 +137,7 @@ export const PR_E2E_SOURCE_ROUTES = [
specs: ['tests/e2e/paired-quick-open-large-tree.spec.ts'],
matches: (file) =>
isProductSource(file) &&
- /^(?:src\/main\/ipc\/(?:filesystem-(?:list-files|search-file-paths)|rg-availability)\.ts|src\/main\/providers\/(?:filesystem-provider-contract|ssh-filesystem-provider(?:-capabilities)?)\.ts|src\/main\/runtime\/(?:orca-runtime-files|rpc\/methods\/files)\.ts|src\/relay\/(?:fs-handler(?:-install-rg|-list-files|-ripgrep-fallback)?|fs-list-files-fallback-chain)\.ts|src\/renderer\/src\/(?:components\/(?:QuickOpen|quick-open-file-list|quick-open-search)\.tsx?|runtime\/(?:runtime-file-client|runtime-legacy-quick-open-inventory)\.ts)|src\/shared\/(?:quick-open-(?:install-rg|path-search|transport-budget)|ripgrep-process-availability)\.ts)$/.test(
+ /^(?:src\/main\/ipc\/filesystem-(?:list-files|search-file-paths)\.ts|src\/main\/ripgrep\/bundled-ripgrep-path\.ts|src\/main\/providers\/(?:filesystem-provider-contract|ssh-filesystem-provider(?:-capabilities)?)\.ts|src\/main\/runtime\/(?:orca-runtime-files|rpc\/methods\/files)\.ts|src\/relay\/(?:fs-handler(?:-install-rg|-list-files|-ripgrep-fallback)?|fs-list-files-fallback-chain|relay-bundled-ripgrep)\.ts|src\/renderer\/src\/(?:components\/(?:QuickOpen|quick-open-file-list|quick-open-search)\.tsx?|runtime\/(?:runtime-file-client|runtime-legacy-quick-open-inventory)\.ts)|src\/shared\/(?:quick-open-(?:install-rg|path-search|transport-budget)|ripgrep-process-availability|bundled-ripgrep)\.ts)$/.test(
file
)
},
diff --git a/docs/reference/bundled-ripgrep.md b/docs/reference/bundled-ripgrep.md
new file mode 100644
index 000000000000..f7c87df1d4b4
--- /dev/null
+++ b/docs/reference/bundled-ripgrep.md
@@ -0,0 +1,58 @@
+# Bundled ripgrep
+
+Orca ships its own `rg` and never depends on the user having installed one. Quick Open, the
+Explorer name filter, text search, and the paired-server `files.*` RPCs all spawn it.
+
+## Where the binaries come from
+
+- `@vscode/ripgrep-universal` (exact pin in `package.json`) carries prebuilt ripgrep for every
+ platform inside its npm tarball: no install script, no download at install time, SHA-256 checked
+ upstream at publish. Linux builds are static musl, so they pass the glibc floor
+ (`linux-glibc-compatibility.md`) and run on any distro, including Alpine and WSL.
+- Every desktop artifact packages the six relay platforms (`linux|darwin|win32` × `x64|arm64`)
+ under `Resources/ripgrep//rg[.exe]` (`config/bundled-ripgrep-resources.cjs`).
+ - The host's own copy serves local search.
+ - Windows uses the Linux copy for WSL.
+ - SSH deploys upload the remote host's copy.
+- `beforePack` fails when a binary is missing, and `afterPack` verifies all six and sets exec bits.
+- macOS `signIgnore` keeps codesign off the Linux/Windows copies, which are inert data there.
+- Windows SignPath signs every packaged `.exe`, including both `rg.exe` copies.
+
+## Resolution
+
+`src/main/ripgrep/bundled-ripgrep-path.ts` is the only resolver in the main process.
+- It checks packaged `Resources/ripgrep` first.
+- In development and test hosts it then checks `node_modules/@vscode/ripgrep-universal/bin`.
+- As a last resort it returns `rg` on PATH, for a damaged or unpackaged install.
+
+Callers pass `{ wsl: true }` when the spawn is routed into a WSL distro, then spread
+`bundledRipgrepWslSpawnOptions(command)` into `wslAwareSpawn`. Inside the distro, a shell
+expression finds the Windows install through `wslpath -u`, which honors custom automount roots.
+- It picks the Linux build for the distro's own `uname -m`. Windows-on-ARM runs x64 Orca beside
+ arm64 distros, so the Windows process's architecture is the wrong key.
+- It falls back to the distro's own `rg` when the install drive is not mounted.
+
+There is no local fallback. When the bundled binary cannot start, local listing and search fail
+with a clear error instead of degrading to `git ls-files`/`git grep`. The usual causes are a
+damaged install or security software blocking it. This matches VS Code, which also ships rg with
+no fallback. A silent, slower, partial fallback hid exactly these failures before.
+
+## SSH remotes
+
+`src/main/ssh/ssh-relay-ripgrep-install.ts` installs the remote platform's binary at
+`~/.orca-remote/ripgrep/-/rg[.exe]`.
+- The path is keyed on the ripgrep version only, so relay upgrades never re-upload it.
+- It runs after the relay launches, so a first connect is never delayed.
+- The upload lands in a private stage directory and is renamed into place after a size check.
+- The relay is always launched with `--ripgrep-path`. It re-checks the file on each spawn, prefers
+ it, and falls back to PATH `rg` and then its git/readdir chain. That covers a `noexec` home, a
+ failed upload, or an older client that launched the relay without the flag.
+
+The relay fallbacks stay: mixed client/relay versions are normal
+(`remote-wire-compatibility.md`), and a remote can refuse to execute uploaded binaries.
+
+## Updating ripgrep
+
+Bump the `@vscode/ripgrep-universal` pin, then set `BUNDLED_RIPGREP_VERSION` in
+`src/shared/bundled-ripgrep.ts` to the `rg --version` it ships. The new value is a new remote cache
+key, so SSH hosts fetch the new binary once.
diff --git a/package.json b/package.json
index a75cc005b999..5e88d8ab9940 100644
--- a/package.json
+++ b/package.json
@@ -238,6 +238,7 @@
"@types/ssh2": "^1.15.5",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^5.2.0",
+ "@vscode/ripgrep-universal": "1.18.0",
"@xterm/addon-fit": "0.12.0-beta.300",
"@xterm/addon-image": "0.10.0-beta.300",
"@xterm/addon-ligatures": "0.11.0-beta.300",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7ba1cc7f4f5e..5590b9391739 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -322,6 +322,9 @@ importers:
'@vitejs/plugin-react':
specifier: ^5.2.0
version: 5.2.0(rolldown-vite@7.3.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@25.9.5)(esbuild@0.25.12)(jiti@2.7.0)(yaml@2.8.4))
+ '@vscode/ripgrep-universal':
+ specifier: 1.18.0
+ version: 1.18.0
'@xterm/addon-fit':
specifier: 0.12.0-beta.300
version: 0.12.0-beta.300(@xterm/xterm@6.1.0-beta.303(patch_hash=dd0ccc59cd1ccf99f4d76e5aa2456da165fa0804dce19a833d7638bd07ffa393))
@@ -3788,6 +3791,9 @@ packages:
'@vitest/utils@4.1.11':
resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==}
+ '@vscode/ripgrep-universal@1.18.0':
+ resolution: {integrity: sha512-kgrAVy1L/v/8erAjo+I720ifTf7o4rvYUwgsuEu97XAEBtPT9sk3HhcSgFpxMydvNmwdJtXo9/AVee7JjocTrg==}
+
'@vscode/windows-process-tree@0.8.0':
resolution: {integrity: sha512-TI+h2GRwX+igD/YYJMQQVAFcsCNSg7Te2yYxQpKMzwto5RsJ8d2KKgOeur/p/6sAOQwZvopiTDOClyTHEn9MhQ==}
@@ -8263,7 +8269,7 @@ snapshots:
eventsource: 3.0.7
eventsource-parser: 3.0.8
express: 5.2.1(supports-color@7.2.0)
- express-rate-limit: 8.5.2(express@5.2.1)
+ express-rate-limit: 8.5.2(express@5.2.1(supports-color@7.2.0))
hono: 4.13.7
jose: 6.2.3
json-schema-typed: 8.0.2
@@ -8285,7 +8291,7 @@ snapshots:
eventsource: 3.0.7
eventsource-parser: 3.0.8
express: 5.2.1(supports-color@7.2.0)
- express-rate-limit: 8.5.2(express@5.2.1)
+ express-rate-limit: 8.5.2(express@5.2.1(supports-color@7.2.0))
hono: 4.13.7
jose: 6.2.3
json-schema-typed: 8.0.2
@@ -10479,6 +10485,8 @@ snapshots:
convert-source-map: 2.0.0
tinyrainbow: 3.1.0
+ '@vscode/ripgrep-universal@1.18.0': {}
+
'@vscode/windows-process-tree@0.8.0(patch_hash=e66202cc623996d02040c93449eb9ae353fddadf426cb53202a59ee710ee6fe7)':
dependencies:
node-addon-api: 7.1.0
@@ -11597,7 +11605,7 @@ snapshots:
exponential-backoff@3.1.3: {}
- express-rate-limit@8.5.2(express@5.2.1):
+ express-rate-limit@8.5.2(express@5.2.1(supports-color@7.2.0)):
dependencies:
express: 5.2.1(supports-color@7.2.0)
ip-address: 10.4.0
diff --git a/src/main/git/command-runner/wsl-aware-spawn.ts b/src/main/git/command-runner/wsl-aware-spawn.ts
index 2b18d26424f8..7cdb25971dfa 100644
--- a/src/main/git/command-runner/wsl-aware-spawn.ts
+++ b/src/main/git/command-runner/wsl-aware-spawn.ts
@@ -9,11 +9,17 @@ import { resolveCommand } from './wsl-command-resolution'
export function wslAwareSpawn(
command: string,
args: string[],
- options: SpawnOptions & { cwd?: string; wslDistro?: string; useWslLoginShell?: boolean }
+ options: SpawnOptions & {
+ cwd?: string
+ wslDistro?: string
+ useWslLoginShell?: boolean
+ wslShellCommand?: string
+ }
): ChildProcess {
- const { wslDistro, useWslLoginShell, ...spawnOptions } = options
+ const { wslDistro, useWslLoginShell, wslShellCommand, ...spawnOptions } = options
const resolved = resolveCommand(command, args, options.cwd, wslDistro, {
- useWslLoginShell
+ useWslLoginShell,
+ wslShellCommand
})
const spawnStartedAt = performance.now()
const child = spawn(resolved.binary, resolved.args, {
diff --git a/src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts b/src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts
new file mode 100644
index 000000000000..4a1c6e2a0bd5
--- /dev/null
+++ b/src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts
@@ -0,0 +1,30 @@
+import { afterEach, describe, expect, it } from 'vitest'
+import { resolveCommand } from './wsl-command-resolution'
+
+const originalPlatform = process.platform
+const UNC_REPO = '\\\\wsl.localhost\\Ubuntu\\home\\dev\\repo'
+
+describe('resolveCommand wslShellCommand', () => {
+ afterEach(() => {
+ Object.defineProperty(process, 'platform', { configurable: true, value: originalPlatform })
+ })
+
+ it('uses the pre-quoted shell expression in place of the command inside WSL', () => {
+ Object.defineProperty(process, 'platform', { configurable: true, value: 'win32' })
+
+ const resolved = resolveCommand('rg', ['--files'], UNC_REPO, undefined, {
+ wslShellCommand: '"$(pick-rg)"'
+ })
+
+ expect(resolved.binary).toBe('wsl.exe')
+ expect(resolved.args.at(-1)).toBe(`cd '/home/dev/repo' && "$(pick-rg)" '--files'`)
+ })
+
+ it('keeps bare commands quoted when no expression is given', () => {
+ Object.defineProperty(process, 'platform', { configurable: true, value: 'win32' })
+
+ const resolved = resolveCommand('rg', ['--files'], UNC_REPO)
+
+ expect(resolved.args.at(-1)).toBe(`cd '/home/dev/repo' && 'rg' '--files'`)
+ })
+})
diff --git a/src/main/git/command-runner/wsl-command-resolution.ts b/src/main/git/command-runner/wsl-command-resolution.ts
index 559e1821bd12..5e24c1bb39b4 100644
--- a/src/main/git/command-runner/wsl-command-resolution.ts
+++ b/src/main/git/command-runner/wsl-command-resolution.ts
@@ -67,6 +67,8 @@ export function resolveCommand(
wslGitReadEnvironment?: WslGitReadEnvironment
env?: NodeJS.ProcessEnv
terminationBarrier?: boolean
+ /** Pre-quoted shell expression that names the program inside WSL, replacing `command`. */
+ wslShellCommand?: string
} = {}
): ResolvedCommand {
if (process.platform !== 'win32') {
@@ -85,7 +87,7 @@ export function resolveCommand(
const translatedArgs = translateArgsForWsl(args)
// Why: env on wsl.exe stays Windows-side (WSLENV forwards only named vars), so the locale must ride the command string (issue #7808).
const localePrefix = command === 'git' ? `${GIT_OUTPUT_LOCALE_SHELL_PREFIX} ` : ''
- const escapedCommand = quotePosixShell(command)
+ const escapedCommand = options.wslShellCommand ?? quotePosixShell(command)
// Why: shell-escape each arg to prevent word splitting / glob expansion inside the bash -c string.
const escapedArgs = translatedArgs.map(quotePosixShell)
// Why: prepend `cd &&` for a UNC cwd; skip it when only a distro override was given (global gh needs no cwd).
diff --git a/src/main/git/runner-wsl-linked-gitdir-windows.test.ts b/src/main/git/runner-wsl-linked-gitdir-windows.test.ts
index 1af46a510696..18ebe1878baf 100644
--- a/src/main/git/runner-wsl-linked-gitdir-windows.test.ts
+++ b/src/main/git/runner-wsl-linked-gitdir-windows.test.ts
@@ -2,8 +2,6 @@ import { execFileSync } from 'node:child_process'
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
-import { listFilesWithGit } from '../ipc/filesystem-list-files-git-fallback'
-import { searchWithGitGrep } from '../ipc/filesystem-search-git'
import {
gitExecFileAsync,
gitExecFileAsyncBuffer,
@@ -66,15 +64,7 @@ describe.runIf(process.platform === 'win32' && Boolean(distro))(
)
).toThrow(/not a git repository/i)
- await expect(listFilesWithGit(linkedPath, [], { wslDistro: distro! })).resolves.toEqual(
- expect.arrayContaining(['tracked.txt', 'untracked.txt'])
- )
resetWslLinkedWorktreeGitRoutingForTests()
- await expect(
- searchWithGitGrep(linkedPath, { query: 'tracked', rootPath: linkedPath }, 10, {
- wslDistro: distro!
- })
- ).resolves.toMatchObject({ totalMatches: 2 })
let streamedStatus = ''
await expect(
diff --git a/src/main/ipc/filesystem-list-files-git-directory-expansion.test.ts b/src/main/ipc/filesystem-list-files-git-directory-expansion.test.ts
deleted file mode 100644
index 8d3601d5baaa..000000000000
--- a/src/main/ipc/filesystem-list-files-git-directory-expansion.test.ts
+++ /dev/null
@@ -1,201 +0,0 @@
-import { EventEmitter } from 'node:events'
-import type { ChildProcess } from 'node:child_process'
-import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
-import { tmpdir } from 'node:os'
-import { dirname, join } from 'node:path'
-import { afterEach, describe, expect, it, vi } from 'vitest'
-
-const { gitSpawnMock } = vi.hoisted(() => ({
- gitSpawnMock: vi.fn()
-}))
-
-vi.mock('../git/runner', () => ({
- gitSpawnAfterWindowsEnvironmentReady: gitSpawnMock
-}))
-
-import { listFilesWithGit } from './filesystem-list-files-git-fallback'
-import { isFileListingCancellation } from '../../shared/file-listing-cancellation'
-
-const tempDirs: string[] = []
-const SHA1 = '0123456789abcdef0123456789abcdef01234567'
-
-function createMockProcess(): ChildProcess {
- const process = new EventEmitter() as unknown as ChildProcess
- ;(process as unknown as Record).stdout = new EventEmitter()
- ;(
- (process as unknown as Record).stdout as EventEmitter & {
- setEncoding: () => void
- }
- ).setEncoding = vi.fn()
- ;(process as unknown as Record).stderr = new EventEmitter()
- ;(process as unknown as Record).kill = vi.fn()
- ;(process as unknown as Record).exitCode = null
- ;(process as unknown as Record).signalCode = null
- return process
-}
-
-async function writeRel(root: string, relPath: string): Promise {
- const absPath = join(root, ...relPath.split('/'))
- await mkdir(dirname(absPath), { recursive: true })
- await writeFile(absPath, 'x')
-}
-
-afterEach(async () => {
- vi.clearAllMocks()
- await Promise.all(tempDirs.splice(0).map((dir) => rm(dir, { recursive: true, force: true })))
-})
-
-describe('main Quick Open git directory expansion', () => {
- it('expands placeholders emitted by both directory-collapsing passes', async () => {
- const root = await mkdtemp(join(tmpdir(), 'orca-main-git-ignored-dir-'))
- tempDirs.push(root)
- await writeRel(root, 'dist/generated.js')
- await writeRel(root, 'scratch/notes.txt')
-
- const revParse = createMockProcess()
- const primary = createMockProcess()
- const ignored = createMockProcess()
- gitSpawnMock
- .mockResolvedValueOnce(revParse)
- .mockResolvedValueOnce(primary)
- .mockResolvedValueOnce(ignored)
-
- const promise = listFilesWithGit(root, [], { wslDistro: 'Ubuntu' })
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(1))
- await vi.waitFor(() => expect(revParse.listenerCount('close')).toBeGreaterThan(0))
- revParse.emit('close', 0, null)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(3))
- ;(primary.stdout as unknown as EventEmitter).emit(
- 'data',
- `100644 ${SHA1} 0\tsrc/index.ts\0scratch/\0`
- )
- primary.emit('close', 0, null)
- ;(ignored.stdout as unknown as EventEmitter).emit('data', 'dist/\0')
- ignored.emit('close', 0, null)
-
- await expect(promise).resolves.toEqual([
- 'dist/generated.js',
- 'scratch/notes.txt',
- 'src/index.ts'
- ])
- expect(gitSpawnMock.mock.calls[1][1]).toEqual(
- expect.objectContaining({ admissionTier: 'interactive', wslDistro: 'Ubuntu' })
- )
- expect(gitSpawnMock.mock.calls[2][1]).toEqual(
- expect.objectContaining({ admissionTier: 'interactive', wslDistro: 'Ubuntu' })
- )
- expect(gitSpawnMock.mock.calls[2][0]).toContain('--directory')
- })
-
- it('cancels both local Git passes when Quick Open abandons the request', async () => {
- const root = await mkdtemp(join(tmpdir(), 'orca-main-git-cancel-'))
- tempDirs.push(root)
- const revParse = createMockProcess()
- const primary = createMockProcess()
- const ignored = createMockProcess()
- gitSpawnMock
- .mockResolvedValueOnce(revParse)
- .mockResolvedValueOnce(primary)
- .mockResolvedValueOnce(ignored)
-
- const controller = new AbortController()
- const promise = listFilesWithGit(root, [], {}, controller.signal)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(1))
- await vi.waitFor(() => expect(revParse.listenerCount('close')).toBeGreaterThan(0))
- revParse.emit('close', 0, null)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(3))
- controller.abort()
-
- await expect(promise).rejects.toSatisfy(isFileListingCancellation)
- expect(primary.kill).toHaveBeenCalled()
- expect(ignored.kill).toHaveBeenCalled()
- })
-
- it('kills a repository probe returned after cancellation', async () => {
- const root = await mkdtemp(join(tmpdir(), 'orca-main-git-probe-race-'))
- tempDirs.push(root)
- const revParse = createMockProcess()
- let resolveRevParse!: (child: ChildProcess) => void
- gitSpawnMock.mockReturnValueOnce(
- new Promise((resolve) => {
- resolveRevParse = resolve
- })
- )
-
- const controller = new AbortController()
- const promise = listFilesWithGit(root, [], {}, controller.signal)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledOnce())
- controller.abort()
- resolveRevParse(revParse)
-
- await expect(promise).rejects.toSatisfy(isFileListingCancellation)
- expect(revParse.kill).toHaveBeenCalled()
- expect(revParse.listenerCount('close')).toBe(0)
- })
-
- it('kills file scans returned after cancellation', async () => {
- const root = await mkdtemp(join(tmpdir(), 'orca-main-git-scan-race-'))
- tempDirs.push(root)
- const revParse = createMockProcess()
- const primary = createMockProcess()
- const ignored = createMockProcess()
- let resolvePrimary!: (child: ChildProcess) => void
- let resolveIgnored!: (child: ChildProcess) => void
- gitSpawnMock
- .mockResolvedValueOnce(revParse)
- .mockReturnValueOnce(
- new Promise((resolve) => {
- resolvePrimary = resolve
- })
- )
- .mockReturnValueOnce(
- new Promise((resolve) => {
- resolveIgnored = resolve
- })
- )
-
- const controller = new AbortController()
- const promise = listFilesWithGit(root, [], {}, controller.signal)
- await vi.waitFor(() => expect(revParse.listenerCount('close')).toBeGreaterThan(0))
- revParse.emit('close', 0, null)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(3))
- controller.abort()
- resolvePrimary(primary)
- resolveIgnored(ignored)
-
- await expect(promise).rejects.toSatisfy(isFileListingCancellation)
- expect(primary.kill).toHaveBeenCalled()
- expect(ignored.kill).toHaveBeenCalled()
- })
-
- it('cancels a pending sibling spawn when the primary scan fails', async () => {
- const root = await mkdtemp(join(tmpdir(), 'orca-main-git-sibling-failure-'))
- tempDirs.push(root)
- const revParse = createMockProcess()
- const primary = createMockProcess()
- let pendingSignal: AbortSignal | undefined
- gitSpawnMock
- .mockResolvedValueOnce(revParse)
- .mockResolvedValueOnce(primary)
- .mockImplementationOnce(
- (_args: string[], options: { signal?: AbortSignal }) =>
- new Promise((_resolve, reject) => {
- pendingSignal = options.signal
- options.signal?.addEventListener(
- 'abort',
- () => reject(Object.assign(new Error('aborted'), { name: 'AbortError' })),
- { once: true }
- )
- })
- )
-
- const promise = listFilesWithGit(root, [], {})
- await vi.waitFor(() => expect(revParse.listenerCount('close')).toBeGreaterThan(0))
- revParse.emit('close', 0, null)
- await vi.waitFor(() => expect(gitSpawnMock).toHaveBeenCalledTimes(3))
- primary.emit('error', new Error('primary failed'))
-
- await expect(promise).rejects.toThrow('primary failed')
- expect(pendingSignal?.aborted).toBe(true)
- })
-})
diff --git a/src/main/ipc/filesystem-list-files-git-fallback-real.test.ts b/src/main/ipc/filesystem-list-files-git-fallback-real.test.ts
deleted file mode 100644
index 69dde7afaf3b..000000000000
--- a/src/main/ipc/filesystem-list-files-git-fallback-real.test.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import { execFile as execFileCallback, spawn, type SpawnOptions } from 'node:child_process'
-import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
-import { tmpdir } from 'node:os'
-import { dirname, join } from 'node:path'
-import { promisify } from 'node:util'
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-import type { Store } from '../persistence'
-import type * as GitRunner from '../git/runner'
-
-const { wslAwareSpawnMock } = vi.hoisted(() => ({
- wslAwareSpawnMock: vi.fn()
-}))
-
-vi.mock('../git/runner', async (importOriginal) => ({
- ...(await importOriginal()),
- wslAwareSpawn: wslAwareSpawnMock
-}))
-
-import { listQuickOpenFiles } from './filesystem-list-files'
-
-const execFile = promisify(execFileCallback)
-
-function makeStore(repoPath: string): Store {
- return {
- getRepos: () => [
- {
- id: 'repo-1',
- path: repoPath,
- displayName: 'repo',
- badgeColor: '#000000',
- addedAt: 0,
- kind: 'git'
- }
- ],
- getSettings: () => ({})
- } as unknown as Store
-}
-
-async function writeRel(root: string, relPath: string, content = 'x'): Promise {
- const absPath = join(root, ...relPath.split('/'))
- await mkdir(dirname(absPath), { recursive: true })
- await writeFile(absPath, content)
-}
-
-async function initRepo(repoPath: string): Promise {
- await mkdir(repoPath, { recursive: true })
- await execFile('git', ['init', '-q', repoPath])
- await execFile('git', ['config', 'user.email', 'orca@example.invalid'], { cwd: repoPath })
- await execFile('git', ['config', 'user.name', 'Orca Test'], { cwd: repoPath })
-}
-
-describe('filesystem-list-files real git fallback', () => {
- let tempDir: string | null = null
-
- beforeEach(() => {
- wslAwareSpawnMock.mockImplementation(
- (_command: string, _args: string[], options: SpawnOptions & { cwd?: string }) =>
- spawn('orca-definitely-missing-rg', [], {
- cwd: options.cwd,
- stdio: options.stdio
- })
- )
- })
-
- afterEach(async () => {
- if (tempDir) {
- await rm(tempDir, { recursive: true, force: true })
- tempDir = null
- }
- vi.clearAllMocks()
- })
-
- it('returns real paths for UTF-8 filenames from the git fallback', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-git-fallback-'))
- const repoPath = join(tempDir, 'repo')
- await execFile('git', ['init', '-q', repoPath])
- const utf8FileName = '日本語-file.txt'
- await writeFile(join(repoPath, utf8FileName), 'content')
- await execFile('git', ['add', '.'], { cwd: repoPath })
-
- await expect(listQuickOpenFiles(repoPath, makeStore(repoPath))).resolves.toEqual([utf8FileName])
- })
-
- it('fills nested git repos from gitlink and untracked embedded-repo entries', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-monorepo-'))
- const repoPath = join(tempDir, 'parent')
- const appPath = join(repoPath, 'packages', 'app')
- const libPath = join(repoPath, 'packages', 'lib')
- await initRepo(repoPath)
- await writeRel(repoPath, 'README.md')
- await writeRel(repoPath, 'src/index.ts')
- await execFile('git', ['add', 'README.md', 'src/index.ts'], { cwd: repoPath })
-
- await initRepo(appPath)
- await writeRel(appPath, 'package.json', '{}')
- await writeRel(appPath, 'src/main.ts')
- await writeRel(appPath, 'node_modules/pkg/index.js')
- await execFile('git', ['add', '.'], { cwd: appPath })
- await execFile('git', ['commit', '-qm', 'init'], { cwd: appPath })
- const { stdout: appSha } = await execFile('git', ['rev-parse', 'HEAD'], { cwd: appPath })
- await execFile(
- 'git',
- ['update-index', '--add', '--cacheinfo', `160000,${appSha.trim()},packages/app`],
- { cwd: repoPath }
- )
-
- await initRepo(libPath)
- await writeRel(libPath, 'package.json', '{}')
- await writeRel(libPath, 'src/lib.ts')
-
- const result = await listQuickOpenFiles(repoPath, makeStore(repoPath))
-
- expect(result).toEqual(
- expect.arrayContaining([
- 'README.md',
- 'src/index.ts',
- 'packages/app/package.json',
- 'packages/app/src/main.ts',
- 'packages/lib/package.json',
- 'packages/lib/src/lib.ts'
- ])
- )
- expect(result).not.toContain('packages/app')
- expect(result).not.toContain('packages/lib')
- expect(result).not.toContain('packages/app/node_modules/pkg/index.js')
- expect(result).not.toContain('packages/app/.git/config')
- })
-
- it('walks a non-git root instead of returning an empty git fallback result', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-non-git-'))
- await writeRel(tempDir, 'folder/file.ts')
-
- await expect(listQuickOpenFiles(tempDir, makeStore(tempDir))).resolves.toEqual([
- 'folder/file.ts'
- ])
- })
-
- it('bounds a non-git readdir fallback without treating the limit as an error', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-bounded-non-git-'))
- await writeRel(tempDir, 'a.ts')
- await writeRel(tempDir, 'b.ts')
-
- const files = await listQuickOpenFiles(tempDir, makeStore(tempDir), undefined, undefined, 1)
-
- expect(files).toHaveLength(1)
- expect(['a.ts', 'b.ts']).toContain(files[0])
- })
-
- it('rejects abnormal git ls-files failures instead of resolving an empty list', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-bad-index-'))
- const repoPath = join(tempDir, 'repo')
- await initRepo(repoPath)
- await writeFile(join(repoPath, '.git', 'index'), 'not a git index')
-
- await expect(listQuickOpenFiles(repoPath, makeStore(repoPath))).rejects.toThrow(
- 'git ls-files exited with code'
- )
- })
-
- it('resolves an empty repo as an empty list', async () => {
- tempDir = await mkdtemp(join(tmpdir(), 'orca-quick-open-empty-repo-'))
- const repoPath = join(tempDir, 'repo')
- await initRepo(repoPath)
-
- await expect(listQuickOpenFiles(repoPath, makeStore(repoPath))).resolves.toEqual([])
- })
-})
diff --git a/src/main/ipc/filesystem-list-files-git-fallback.ts b/src/main/ipc/filesystem-list-files-git-fallback.ts
deleted file mode 100644
index 28cee2a4d50a..000000000000
--- a/src/main/ipc/filesystem-list-files-git-fallback.ts
+++ /dev/null
@@ -1,335 +0,0 @@
-import type { ChildProcess } from 'node:child_process'
-import { gitSpawnAfterWindowsEnvironmentReady } from '../git/runner'
-import {
- isWslLinkedWorktreeGitRoutingCandidate,
- prepareWslLinkedWorktreeGitRouting
-} from '../git/wsl-linked-worktree-git-routing'
-import {
- buildGitLsFilesArgsForQuickOpen,
- shouldExcludeQuickOpenRelPath,
- shouldIncludeQuickOpenPath
-} from '../../shared/quick-open-filter'
-import {
- createQuickOpenReaddirBudget,
- expandQuickOpenGitFileListing,
- listQuickOpenFilesWithReaddir,
- parseQuickOpenGitLsFilesEntry
-} from '../../shared/quick-open-readdir-walk'
-import { fileListingCancellationError } from '../../shared/file-listing-cancellation'
-
-/**
- * Fallback file lister using git ls-files. Used when rg is not available.
- *
- * Why two git ls-files calls: the first lists tracked + untracked-but-not-ignored
- * files (mirrors rg --files --hidden with gitignore respect). The second
- * surfaces ignored files (mirrors the second rg call with --no-ignore-vcs).
- */
-async function isInsideGitWorkTree(
- rootPath: string,
- localGitOptions: { wslDistro?: string },
- signal?: AbortSignal
-): Promise {
- if (signal?.aborted) {
- throw fileListingCancellationError(signal)
- }
- if (isWslLinkedWorktreeGitRoutingCandidate(rootPath, localGitOptions.wslDistro)) {
- try {
- await prepareWslLinkedWorktreeGitRouting(rootPath, localGitOptions.wslDistro, { signal })
- } catch (error) {
- if (signal?.aborted) {
- throw fileListingCancellationError(signal)
- }
- throw error
- }
- }
- if (signal?.aborted) {
- throw fileListingCancellationError(signal)
- }
- const child = await gitSpawnAfterWindowsEnvironmentReady(['rev-parse', '--is-inside-work-tree'], {
- cwd: rootPath,
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- ...(signal ? { signal } : {}),
- stdio: ['ignore', 'ignore', 'ignore']
- })
- return new Promise((resolve, reject) => {
- let done = false
- let timer: ReturnType
- const cleanup = (): void => {
- clearTimeout(timer)
- child.off('error', handleError)
- child.off('close', handleClose)
- signal?.removeEventListener('abort', handleAbort)
- }
- const finish = (isGitRepo: boolean): void => {
- if (done) {
- return
- }
- done = true
- cleanup()
- resolve(isGitRepo)
- }
- const cancel = (): void => {
- if (done) {
- return
- }
- done = true
- child.kill()
- cleanup()
- reject(fileListingCancellationError(signal))
- }
- const handleError = (): void => finish(false)
- const handleClose = (code: number | null, signal: NodeJS.Signals | null): void =>
- finish(code === 0 && signal === null)
- const handleAbort = (): void => cancel()
-
- child.once('error', handleError)
- child.once('close', handleClose)
- signal?.addEventListener('abort', handleAbort, { once: true })
- timer = setTimeout(() => {
- child.kill()
- finish(false)
- }, 10_000)
- if (signal?.aborted) {
- cancel()
- }
- })
-}
-
-export async function listFilesWithGit(
- rootPath: string,
- excludePathPrefixes: readonly string[],
- localGitOptions: { wslDistro?: string },
- signal?: AbortSignal,
- maxResults?: number
-): Promise {
- const isGitWorkTree = await isInsideGitWorkTree(rootPath, localGitOptions, signal)
- if (signal?.aborted) {
- throw fileListingCancellationError(signal)
- }
- if (!isGitWorkTree) {
- return listQuickOpenFilesWithReaddir(rootPath, {
- excludePathPrefixes,
- budget: createQuickOpenReaddirBudget(),
- maxResults,
- signal
- })
- }
-
- const gitPaths = new Set()
- const directoryPaths = new Set()
- const directFileCandidates = new Set()
- const { primary, ignoredPass } = buildGitLsFilesArgsForQuickOpen(excludePathPrefixes)
- const children: {
- child: ChildProcess
- isDone: () => boolean
- reject: (error: Error) => void
- resolve: () => void
- }[] = []
- const scanController = new AbortController()
-
- const runGitLsFiles = async (args: string[]): Promise => {
- // Why: git ls-files outputs paths relative to cwd, so we set cwd to
- // rootPath and use the output directly — no prefix stripping needed.
- const child = await gitSpawnAfterWindowsEnvironmentReady(['ls-files', ...args], {
- cwd: rootPath,
- admissionTier: 'interactive',
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- signal: scanController.signal,
- stdio: ['ignore', 'pipe', 'pipe']
- })
- return new Promise((resolve, reject) => {
- let buf = ''
- let done = false
-
- const processPath = (path: string): boolean => {
- if (!path) {
- return false
- }
- if (path.endsWith('/')) {
- directoryPaths.add(path)
- } else {
- gitPaths.add(path)
- if (maxResults !== undefined) {
- // Why: this duplicate classification exists only to stop bounded
- // scans; unbounded scans must not retain a second repo-sized set.
- const parsed = parseQuickOpenGitLsFilesEntry(path)
- const relPath = parsed.path.replace(/\/+$/, '')
- if (
- !parsed.isGitlink &&
- !parsed.isUntrackedDir &&
- shouldIncludeQuickOpenPath(relPath) &&
- !shouldExcludeQuickOpenRelPath(relPath, excludePathPrefixes)
- ) {
- directFileCandidates.add(relPath)
- }
- }
- }
- // Why: collapsed directories and gitlinks may be discarded during the
- // later filesystem classification, so they cannot consume the stop cap.
- return maxResults !== undefined && directFileCandidates.size >= maxResults
- }
-
- let timer: ReturnType
- const cleanup = (): void => {
- clearTimeout(timer)
- // Why: child.kill() is advisory. If git ignores it, detach our
- // closures so repeated Quick Open attempts do not retain old scans.
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
- child.off('error', handleError)
- child.off('close', handleClose)
- }
- const rejectPass = (err: Error): void => {
- if (done) {
- return
- }
- done = true
- buf = ''
- cleanup()
- reject(err)
- }
- const resolvePass = (): void => {
- if (done) {
- return
- }
- done = true
- cleanup()
- resolve()
- }
- children.push({
- child,
- isDone: () => done,
- reject: rejectPass,
- resolve: resolvePass
- })
- const handleStdoutData = (chunk: string): void => {
- buf += chunk
- let start = 0
- let nulIdx = buf.indexOf('\0', start)
- while (nulIdx !== -1) {
- if (processPath(buf.substring(start, nulIdx))) {
- buf = ''
- finishAtLimit()
- return
- }
- start = nulIdx + 1
- nulIdx = buf.indexOf('\0', start)
- }
- buf = start < buf.length ? buf.substring(start) : ''
- }
- const handleStderrData = (): void => {
- /* drain */
- }
- const handleError = (err: Error): void => {
- rejectPass(err)
- }
- const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
- if (done) {
- return
- }
- if (signal) {
- rejectPass(new Error(`git ls-files killed by ${signal}`))
- return
- }
- if (buf && processPath(buf)) {
- buf = ''
- finishAtLimit()
- return
- }
- if (code === 0) {
- resolvePass()
- return
- }
- rejectPass(new Error(`git ls-files exited with code ${code}`))
- }
-
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
- child.once('error', handleError)
- child.once('close', handleClose)
- timer = setTimeout(() => {
- buf = ''
- child.kill()
- rejectPass(new Error('git ls-files timed out'))
- }, 10000)
- if (scanController.signal.aborted) {
- child.kill()
- rejectPass(fileListingCancellationError(scanController.signal))
- }
- })
- }
-
- const killSurvivors = (reason = 'git ls-files canceled after sibling failure'): void => {
- // Why: Promise.all rejects on the first failed pass; cancel the sibling so
- // a stuck git process cannot keep scanning after Quick Open has failed.
- for (const entry of children) {
- if (entry.isDone()) {
- continue
- }
- if (entry.child.exitCode === null && entry.child.signalCode === null) {
- entry.child.kill()
- }
- entry.reject(new Error(reason))
- }
- }
-
- function finishAtLimit(): void {
- for (const entry of children) {
- if (entry.isDone()) {
- continue
- }
- entry.resolve()
- if (entry.child.exitCode === null && entry.child.signalCode === null) {
- entry.child.kill()
- }
- }
- }
-
- const onAbort = (): void => {
- scanController.abort(signal?.reason)
- killSurvivors('git ls-files cancelled')
- }
- signal?.addEventListener('abort', onAbort, { once: true })
- try {
- const runIgnoredPass = () =>
- // Why: ignored files are supplementary — a failed or timed-out ignored
- // pass must not discard the primary listing the user actually needs.
- runGitLsFiles(ignoredPass).catch((err: Error) => {
- if (!scanController.signal.aborted) {
- console.warn('[quick-open] git ignored-file pass failed; keeping primary results:', err)
- }
- })
- if (maxResults === undefined) {
- await Promise.all([runGitLsFiles(primary), runIgnoredPass()])
- } else {
- // Why: give ordinary source files first claim on a bounded autocomplete
- // inventory; a large ignored tree must not win a parallel-output race.
- await runGitLsFiles(primary)
- if (directFileCandidates.size < maxResults) {
- await runIgnoredPass()
- }
- }
- } catch (err) {
- scanController.abort(err)
- killSurvivors()
- if (signal?.aborted) {
- throw fileListingCancellationError(signal)
- }
- throw err
- } finally {
- signal?.removeEventListener('abort', onAbort)
- }
-
- const files = await expandQuickOpenGitFileListing({
- rootPath,
- gitPaths,
- directoryPaths,
- excludePathPrefixes,
- signal,
- maxResults
- })
- // Why: directory placeholders are expanded after Git exits; restore Git's
- // path order so empty queries and fuzzy-score ties remain stable.
- return files.sort().slice(0, maxResults)
-}
diff --git a/src/main/ipc/filesystem-list-files-install-rg.test.ts b/src/main/ipc/filesystem-list-files-install-rg.test.ts
deleted file mode 100644
index f0221d8e24ee..000000000000
--- a/src/main/ipc/filesystem-list-files-install-rg.test.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process'
-import { EventEmitter } from 'node:events'
-import { beforeEach, describe, expect, it, vi } from 'vitest'
-import type { Store } from '../persistence'
-import type * as GitRunner from '../git/runner'
-
-const {
- listFilesWithGitMock,
- resolveAuthorizedPathMock,
- checkRgAvailableMock,
- getLocalGitOptionsForRegisteredWorktreeMock,
- wslAwareSpawnMock
-} = vi.hoisted(() => ({
- listFilesWithGitMock: vi.fn(),
- resolveAuthorizedPathMock: vi.fn(),
- checkRgAvailableMock: vi.fn(),
- getLocalGitOptionsForRegisteredWorktreeMock: vi.fn(),
- wslAwareSpawnMock: vi.fn()
-}))
-
-vi.mock('./filesystem-list-files-git-fallback', () => ({
- listFilesWithGit: listFilesWithGitMock
-}))
-
-vi.mock('./filesystem-auth', () => ({
- resolveAuthorizedPath: resolveAuthorizedPathMock
-}))
-
-vi.mock('./rg-availability', () => ({
- checkRgAvailable: checkRgAvailableMock
-}))
-
-vi.mock('./local-worktree-runtime-options', () => ({
- getLocalGitOptionsForRegisteredWorktree: getLocalGitOptionsForRegisteredWorktreeMock
-}))
-
-vi.mock('../git/runner', async (importOriginal) => ({
- ...(await importOriginal()),
- wslAwareSpawn: wslAwareSpawnMock
-}))
-
-import { listQuickOpenFiles } from './filesystem-list-files'
-
-function createStartedRipgrepProcess(): ChildProcess {
- const child = new EventEmitter() as ChildProcess
- ;(child as unknown as Record).stdout = new EventEmitter()
- ;(
- (child as unknown as Record).stdout as EventEmitter & {
- setEncoding: () => void
- }
- ).setEncoding = vi.fn()
- ;(child as unknown as Record).stderr = new EventEmitter()
- ;(child as unknown as Record).kill = vi.fn()
- ;(child as unknown as Record).exitCode = null
- ;(child as unknown as Record).signalCode = null
- Object.defineProperty(child, 'pid', { value: 1 })
- return child
-}
-
-describe('filesystem-list-files ripgrep guidance', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- resolveAuthorizedPathMock.mockImplementation(async (path) => path)
- checkRgAvailableMock.mockResolvedValue(true)
- getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({})
- wslAwareSpawnMock.mockImplementation(
- (_command: string, _args: string[], options: SpawnOptions & { cwd?: string }) =>
- spawn('orca-definitely-missing-rg', [], { stdio: options.stdio })
- )
- })
-
- it('turns only a readdir budget failure into install guidance', async () => {
- listFilesWithGitMock.mockRejectedValue(new Error('File listing exceeded 10000 files'))
- const rejection = listQuickOpenFiles('/workspace', {} as Store)
-
- await expect(rejection).rejects.toThrow(
- 'Quick Open scan too large (File listing exceeded 10000 files).'
- )
- await rejection.catch((error: Error) =>
- expect(error.message).toContain('Install ripgrep on the host running the Quick Open scan')
- )
- })
-
- it('keeps the WSL preflight and falls back before starting real rg', async () => {
- getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
- checkRgAvailableMock.mockResolvedValue(false)
- listFilesWithGitMock.mockResolvedValue(['src/index.ts'])
-
- await expect(listQuickOpenFiles('C:\\repo', {} as Store)).resolves.toEqual(['src/index.ts'])
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
- expect(wslAwareSpawnMock).not.toHaveBeenCalled()
- })
-
- it("falls back when a native launcher exits outside ripgrep's contract", async () => {
- const primary = createStartedRipgrepProcess()
- const ignored = createStartedRipgrepProcess()
- let callIndex = 0
- wslAwareSpawnMock.mockImplementation(() => (++callIndex === 1 ? primary : ignored))
- listFilesWithGitMock.mockResolvedValue(['src/index.ts'])
-
- const listing = listQuickOpenFiles('/workspace', {} as Store)
- await Promise.resolve()
- primary.emit('close', 127, null)
-
- await expect(listing).resolves.toEqual(['src/index.ts'])
- expect(listFilesWithGitMock).toHaveBeenCalledTimes(1)
- })
-
- it('keeps cancellation and Git errors unchanged', async () => {
- const cancellation = new Error('File listing cancelled')
- listFilesWithGitMock.mockRejectedValueOnce(cancellation)
- await expect(listQuickOpenFiles('/workspace', {} as Store)).rejects.toBe(cancellation)
-
- const gitFailure = new Error('git ls-files exited with code 128')
- listFilesWithGitMock.mockRejectedValueOnce(gitFailure)
- await expect(listQuickOpenFiles('/workspace', {} as Store)).rejects.toBe(gitFailure)
- })
-
- it.skipIf(process.platform !== 'darwin')('shows the macOS install command', async () => {
- listFilesWithGitMock.mockRejectedValue(new Error('File listing timed out'))
-
- await expect(listQuickOpenFiles('/workspace', {} as Store)).rejects.toThrow(
- 'brew install ripgrep'
- )
- })
-})
diff --git a/src/main/ipc/filesystem-list-files-name-filter.test.ts b/src/main/ipc/filesystem-list-files-name-filter.test.ts
index 3b397eb4b047..b529dd34b397 100644
--- a/src/main/ipc/filesystem-list-files-name-filter.test.ts
+++ b/src/main/ipc/filesystem-list-files-name-filter.test.ts
@@ -1,21 +1,14 @@
-import { execFile as execFileCallback, spawn, type SpawnOptions } from 'node:child_process'
import { EventEmitter } from 'node:events'
-import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
-import { tmpdir } from 'node:os'
-import { dirname, join } from 'node:path'
-import { promisify } from 'node:util'
import { afterEach, describe, expect, it, vi } from 'vitest'
import type { Store } from '../persistence'
import type * as GitRunner from '../git/runner'
-import type * as GitFallback from './filesystem-list-files-git-fallback'
import {
pathMatchesFileNameFilterTokens,
splitFileNameFilterTokens
} from '../../shared/file-name-filter-tokens'
-const { wslAwareSpawnMock, listFilesWithGitSpy } = vi.hoisted(() => ({
- wslAwareSpawnMock: vi.fn(),
- listFilesWithGitSpy: vi.fn()
+const { wslAwareSpawnMock } = vi.hoisted(() => ({
+ wslAwareSpawnMock: vi.fn()
}))
vi.mock('../git/runner', async (importOriginal) => ({
@@ -23,16 +16,8 @@ vi.mock('../git/runner', async (importOriginal) => ({
wslAwareSpawn: wslAwareSpawnMock
}))
-vi.mock('./filesystem-list-files-git-fallback', async (importOriginal) => {
- const actual = await importOriginal()
- listFilesWithGitSpy.mockImplementation(actual.listFilesWithGit)
- return { ...actual, listFilesWithGit: listFilesWithGitSpy }
-})
-
import { listQuickOpenFiles } from './filesystem-list-files'
-const execFile = promisify(execFileCallback)
-
function makeStore(repoPath: string): Store {
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: listing only reads registered repos and settings.
return {
@@ -48,14 +33,11 @@ function nameFilter(query: string): (relativePath: string) => boolean {
return (relativePath) => pathMatchesFileNameFilterTokens(relativePath, tokens)
}
-function spawnMissingRipgrep(): void {
- wslAwareSpawnMock.mockImplementation(
- (_command: string, _args: string[], options: SpawnOptions & { cwd?: string }) =>
- spawn('orca-definitely-missing-rg', [], { cwd: options.cwd, stdio: options.stdio })
- )
-}
-
-function fakeRipgrep(output: string, killSignal: NodeJS.Signals | null = null): EventEmitter {
+function fakeRipgrep(
+ output: string,
+ killSignal: NodeJS.Signals | null = null,
+ exitCode = 0
+): EventEmitter {
const child = new EventEmitter()
const stdout = Object.assign(new EventEmitter(), { setEncoding: vi.fn() })
Object.assign(child, {
@@ -68,19 +50,13 @@ function fakeRipgrep(output: string, killSignal: NodeJS.Signals | null = null):
})
setTimeout(() => {
stdout.emit('data', output)
- child.emit('close', killSignal ? null : 0, killSignal)
+ child.emit('close', killSignal ? null : exitCode, killSignal)
}, 0)
return child
}
describe('listQuickOpenFiles name filter', () => {
- let tempDir: string | null = null
-
- afterEach(async () => {
- if (tempDir) {
- await rm(tempDir, { recursive: true, force: true })
- tempDir = null
- }
+ afterEach(() => {
vi.clearAllMocks()
})
@@ -102,44 +78,22 @@ describe('listQuickOpenFiles name filter', () => {
expect(files).toEqual(['ios/AppDelegate.swift'])
})
- it('filters the whole git listing when ripgrep is missing', async () => {
- spawnMissingRipgrep()
- tempDir = await mkdtemp(join(tmpdir(), 'orca-name-filter-'))
- const repoPath = join(tempDir, 'repo')
- await execFile('git', ['init', '-q', repoPath])
- for (const relPath of ['a.ts', 'b.ts', 'zz/Notion Web Clipper/AppDelegate.swift']) {
- await mkdir(dirname(join(repoPath, relPath)), { recursive: true })
- await writeFile(join(repoPath, relPath), 'x')
- }
- await execFile('git', ['add', '.'], { cwd: repoPath })
- const store = makeStore(repoPath)
-
- await expect(listQuickOpenFiles(repoPath, store, undefined, undefined, 2)).resolves.toEqual([
- 'a.ts',
- 'b.ts'
- ])
- await expect(
- listQuickOpenFiles(repoPath, store, undefined, undefined, 2, undefined, nameFilter('appdel'))
- ).resolves.toEqual(['zz/Notion Web Clipper/AppDelegate.swift'])
- })
-
- it('rejects an over-budget filtered walk so the renderer keeps its capped listing', async () => {
- spawnMissingRipgrep()
- listFilesWithGitSpy.mockRejectedValueOnce(new Error('File listing exceeded 20001 files'))
+ it('rejects with the bundled-ripgrep error when the filtered ignored pass cannot start', async () => {
+ wslAwareSpawnMock
+ .mockImplementationOnce(() => fakeRipgrep('ios/AppDelegate.swift\n'))
+ .mockImplementationOnce(() => fakeRipgrep('', null, -2))
await expect(
listQuickOpenFiles(
- '/folder',
- makeStore('/folder'),
+ '/repo',
+ makeStore('/repo'),
undefined,
undefined,
5,
undefined,
- nameFilter('target')
+ nameFilter('appdelegate')
)
- ).rejects.toThrow()
- expect(listFilesWithGitSpy).toHaveBeenCalledTimes(1)
- expect(listFilesWithGitSpy.mock.calls[0][4]).toBeUndefined()
+ ).rejects.toThrow("Orca's bundled search tool (ripgrep) could not start")
})
it('keeps primary matches when the ignored-file pass fails during a filtered scan', async () => {
diff --git a/src/main/ipc/filesystem-list-files-without-ripgrep.ts b/src/main/ipc/filesystem-list-files-without-ripgrep.ts
deleted file mode 100644
index b7e3cc1385ff..000000000000
--- a/src/main/ipc/filesystem-list-files-without-ripgrep.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { isQuickOpenReaddirBudgetError } from '../../shared/quick-open-readdir-walk'
-import { buildInstallRgMessage } from '../../shared/quick-open-install-rg'
-import { limitQuickOpenFilesBySerializedBytes } from '../../shared/quick-open-transport-budget'
-import { listFilesWithGit } from './filesystem-list-files-git-fallback'
-
-/** Quick Open listing through git/readdir when ripgrep is unavailable. */
-export async function listFilesWithoutRipgrep(args: {
- rootPath: string
- excludePathPrefixes: readonly string[]
- localGitOptions: { wslDistro?: string }
- signal?: AbortSignal
- maxResults?: number
- maxSerializedBytes?: number
- pathFilter?: (relativePath: string) => boolean
-}): Promise {
- const { rootPath, excludePathPrefixes, localGitOptions, signal, maxResults, pathFilter } = args
- try {
- // Why: these fallbacks cap scanned files, not matches, so a filtered listing scans everything.
- // An over-budget readdir walk rejects, and the renderer falls back to its capped listing.
- const files = pathFilter
- ? (await listFilesWithGit(rootPath, excludePathPrefixes, localGitOptions, signal))
- .filter(pathFilter)
- .slice(0, maxResults)
- : await listFilesWithGit(rootPath, excludePathPrefixes, localGitOptions, signal, maxResults)
- return args.maxSerializedBytes === undefined
- ? files
- : limitQuickOpenFilesBySerializedBytes(files, args.maxSerializedBytes)
- } catch (err) {
- if (!isQuickOpenReaddirBudgetError(err)) {
- throw err
- }
- throw new Error(await buildInstallRgMessage(err))
- }
-}
diff --git a/src/main/ipc/filesystem-list-files.test.ts b/src/main/ipc/filesystem-list-files.test.ts
index b1b06bd2d169..16c316b94679 100644
--- a/src/main/ipc/filesystem-list-files.test.ts
+++ b/src/main/ipc/filesystem-list-files.test.ts
@@ -1,14 +1,15 @@
import { describe, expect, it, vi, beforeEach } from 'vitest'
+import type * as BundledRipgrepPath from '../ripgrep/bundled-ripgrep-path'
const {
spawnMock,
resolveAuthorizedPathMock,
- checkRgAvailableMock,
+ bundledRipgrepCommandMock,
getLocalGitOptionsForRegisteredWorktreeMock
} = vi.hoisted(() => ({
spawnMock: vi.fn(),
resolveAuthorizedPathMock: vi.fn(),
- checkRgAvailableMock: vi.fn(),
+ bundledRipgrepCommandMock: vi.fn(),
getLocalGitOptionsForRegisteredWorktreeMock: vi.fn()
}))
@@ -24,8 +25,9 @@ vi.mock('./filesystem-auth', () => ({
resolveAuthorizedPath: resolveAuthorizedPathMock
}))
-vi.mock('./rg-availability', () => ({
- checkRgAvailable: checkRgAvailableMock
+vi.mock('../ripgrep/bundled-ripgrep-path', async (importOriginal) => ({
+ ...(await importOriginal()),
+ bundledRipgrepCommand: bundledRipgrepCommandMock
}))
vi.mock('./local-worktree-runtime-options', () => ({
@@ -37,13 +39,9 @@ import { EventEmitter } from 'node:events'
import type { Store } from '../persistence'
import type { ChildProcess } from 'node:child_process'
import { FileListingCancelledError } from '../../shared/file-listing-cancellation'
-import { _gitAdmissionSnapshotForTests } from '../git/command-runner/git-subprocess-admission'
-const SHA1 = '0123456789abcdef0123456789abcdef01234567'
-
-function staged(mode: string, path: string): string {
- return `${mode} ${SHA1} 0\t${path}`
-}
+const BUNDLED_RG = '/bundled/rg'
+const BUNDLED_ERROR = "Orca's bundled search tool (ripgrep) could not start"
function createMockProcess(): ChildProcess {
const p = new EventEmitter() as unknown as ChildProcess
@@ -83,8 +81,10 @@ describe('filesystem-list-files', () => {
beforeEach(() => {
vi.clearAllMocks()
resolveAuthorizedPathMock.mockImplementation(async (path) => path)
- checkRgAvailableMock.mockResolvedValue(true)
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({})
+ bundledRipgrepCommandMock.mockImplementation((options?: { wsl?: boolean }) =>
+ options?.wsl ? '/bundled/linux/rg' : BUNDLED_RG
+ )
})
it('stops after the primary rg pass fills the result budget', async () => {
@@ -109,7 +109,8 @@ describe('filesystem-list-files', () => {
expect(p1.kill).toHaveBeenCalled()
expect(p2.kill).not.toHaveBeenCalled()
expect(spawnMock).toHaveBeenCalledTimes(1)
- expect(checkRgAvailableMock).not.toHaveBeenCalled()
+ expect(spawnMock.mock.calls[0]?.[0]).toBe(BUNDLED_RG)
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: false })
expect(spawnMock.mock.calls[0]?.[1]).not.toContain('--version')
})
@@ -158,7 +159,7 @@ describe('filesystem-list-files', () => {
])
})
- it('checks rg availability inside the registered WSL runtime for Windows-path worktrees', async () => {
+ it('spawns the bundled Linux rg inside the registered WSL runtime for Windows-path worktrees', async () => {
const p1 = createMockProcess()
const p2 = createMockProcess()
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
@@ -185,7 +186,8 @@ describe('filesystem-list-files', () => {
'C:\\repo',
'C:\\repo'
)
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: true })
+ expect(spawnMock.mock.calls.every((call) => call[0] === '/bundled/linux/rg')).toBe(true)
})
it('normalizes absolute WSL rg output for Windows-path worktrees', async () => {
@@ -212,7 +214,7 @@ describe('filesystem-list-files', () => {
await expect(promise).resolves.toEqual(['src/index.ts'])
})
- it('does not mistake a WSL-routed executable exit 127 for missing rg', async () => {
+ it('treats a WSL launcher exit 127 as the bundled rg failing to start', async () => {
const p1 = createMockProcess()
const p2 = createMockProcess()
Object.defineProperty(p1, 'pid', { value: 1 })
@@ -226,10 +228,22 @@ describe('filesystem-list-files', () => {
p2.emit('close', 0, null)
}, 0)
- await expect(promise).rejects.toThrow('rg exited with code 127')
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
expect(spawnMock.mock.calls.some((call) => call[0] === 'git')).toBe(false)
})
+ it("rejects with the bundled-ripgrep error when a native launcher exits outside ripgrep's contract", async () => {
+ const p1 = createMockProcess()
+ const p2 = createMockProcess()
+ spawnMock.mockImplementation((_cmd, args: string[]) => (isIgnoredRgPass(args) ? p2 : p1))
+
+ const promise = listQuickOpenFiles('/mock/root', {} as unknown as Store)
+ setTimeout(() => p1.emit('close', 127, null), 0)
+
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
+ expect(p2.kill).toHaveBeenCalled()
+ })
+
it('rejects rg failures instead of resolving a false-empty list', async () => {
const p1 = createMockProcess()
const p2 = createMockProcess()
@@ -389,7 +403,7 @@ describe('filesystem-list-files', () => {
expect(result).toEqual(['valid.ts'])
})
- it('lets cancellation win a native-unavailable race before Git starts', async () => {
+ it('lets cancellation win a native-unavailable race', async () => {
const first = createMockProcess()
Object.defineProperty(first, 'pid', { value: undefined })
spawnMock.mockReturnValue(first)
@@ -414,391 +428,37 @@ describe('filesystem-list-files', () => {
expect(first.listenerCount('error')).toBe(0)
})
- describe('git ls-files fallback', () => {
+ describe('when the bundled rg cannot start', () => {
it('kills only the admitted pass when ignored rg fails before spawn', async () => {
const primary = createMockProcess()
const missingIgnored = createMockProcess()
- const revParse = createMockProcess()
- const gitPrimary = createMockProcess()
- const gitIgnored = createMockProcess()
Object.defineProperty(missingIgnored, 'pid', { value: undefined })
- let gitPassIndex = 0
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return isIgnoredRgPass(args) ? missingIgnored : primary
- }
- if (args.includes('rev-parse')) {
- return revParse
- }
- if (args.includes('ls-files')) {
- return gitPassIndex++ === 0 ? gitPrimary : gitIgnored
- }
- return createMockProcess()
- })
+ spawnMock.mockImplementation((_cmd: string, args: string[]) =>
+ isIgnoredRgPass(args) ? missingIgnored : primary
+ )
const promise = listQuickOpenFiles('/mock/root', {} as unknown as Store)
await flushMicrotasks()
- expect(spawnMock.mock.calls.filter((call) => call[0] === 'rg')).toHaveLength(2)
+ expect(spawnMock).toHaveBeenCalledTimes(2)
missingIgnored.emit('close', -2, null)
- await vi.waitFor(() => expect(primary.kill).toHaveBeenCalled())
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
+ expect(primary.kill).toHaveBeenCalled()
expect(missingIgnored.kill).not.toHaveBeenCalled()
const error = Object.assign(new Error('spawn rg ENOENT'), { code: 'ENOENT' })
expect(() => missingIgnored.emit('error', error)).not.toThrow()
- await vi.waitFor(() =>
- expect(
- spawnMock.mock.calls.some((call) => (call[1] as string[]).includes('rev-parse'))
- ).toBe(true)
- )
- revParse.emit('close', 0, null)
- await vi.waitFor(() =>
- expect(
- spawnMock.mock.calls.filter((call) => (call[1] as string[]).includes('ls-files'))
- ).toHaveLength(2)
- )
- gitPrimary.emit('close', 0, null)
- gitIgnored.emit('close', 0, null)
-
- await expect(promise).resolves.toEqual([])
expect(missingIgnored.listenerCount('error')).toBe(0)
})
- it('falls back to git ls-files when rg is not available', async () => {
- let callIndex = 0
- const revParseProc = createMockProcess()
- const gitP1 = createMockProcess()
- const gitP2 = createMockProcess()
+ it('rejects with the bundled-ripgrep error instead of spawning git', async () => {
+ spawnMock.mockImplementation(() => createMissingRipgrepProcess())
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- if (cmd === 'git' && args.includes('ls-files')) {
- callIndex++
- return callIndex === 1 ? gitP1 : gitP2
- }
- return createMockProcess()
- })
-
- const storeMock = {} as unknown as Store
- const promise = listQuickOpenFiles('/mock/root', storeMock)
-
- setTimeout(() => {
- revParseProc.emit('close', 0, null)
- }, 0)
- setTimeout(() => {
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', 'src/index.ts')}\0`
- )
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', 'package.json')}\0`
- )
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', 'node_modules/dep/index.js')}\0`
- )
- gitP1.emit('close', 0, null)
-
- ;(gitP2.stdout as unknown as EventEmitter).emit('data', '.env.local\0')
- ;(gitP2.stdout as unknown as EventEmitter).emit('data', 'dist/generated.js\0')
- gitP2.emit('close', 0, null)
- }, 10)
-
- const result = await promise
-
- // The primary real command doubles as the availability check.
- const rgCalls = spawnMock.mock.calls.filter((call) => call[0] === 'rg')
- expect(rgCalls.length).toBe(1)
- expect(rgCalls.every((call) => !(call[1] as string[]).includes('--version'))).toBe(true)
-
- // Verify git ls-files was called
- const gitCalls = spawnMock.mock.calls.filter(
- (call) => call[0] === 'git' && (call[1] as string[]).includes('ls-files')
- )
- expect(gitCalls.length).toBe(2)
- expect(gitCalls[0][1]).toContain('ls-files')
- expect(gitCalls[0][1]).toContain('-s')
- expect(gitCalls[0][1]).toContain('--directory')
- expect(gitCalls[1][1]).toContain('--directory')
- expect(gitCalls[1][1]).toContain('--no-empty-directory')
-
- // Should include valid files and filter node_modules
- expect(result).toContain('src/index.ts')
- expect(result).toContain('package.json')
- expect(result).toContain('.env.local')
- expect(result).toContain('dist/generated.js')
- expect(result).not.toContain('node_modules/dep/index.js')
- })
-
- it('stops after primary Git files fill the result budget', async () => {
- const revParseProc = createMockProcess()
- const gitP1 = createMockProcess()
- const gitP2 = createMockProcess()
- let callIndex = 0
-
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- if (cmd === 'git' && args.includes('ls-files')) {
- callIndex += 1
- return callIndex === 1 ? gitP1 : gitP2
- }
- return createMockProcess()
- })
-
- const promise = listQuickOpenFiles(
- '/mock/root',
- {} as unknown as Store,
- undefined,
- undefined,
- 2
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the mocked auth and runtime options never read the store.
+ await expect(listQuickOpenFiles('/mock/root', {} as unknown as Store)).rejects.toThrow(
+ BUNDLED_ERROR
)
- setTimeout(() => revParseProc.emit('close', 0, null), 0)
- setTimeout(() => {
- ;(gitP1.stdout as unknown as EventEmitter).emit('data', 'one.ts\0two.ts')
- gitP1.emit('close', 0, null)
- }, 10)
-
- await expect(promise).resolves.toEqual(['one.ts', 'two.ts'])
- expect(gitP1.kill).toHaveBeenCalled()
- expect(gitP2.kill).not.toHaveBeenCalled()
- expect(callIndex).toBe(1)
- })
-
- it('does not let a discarded Git directory placeholder consume the result budget', async () => {
- const revParseProc = createMockProcess()
- const primary = createMockProcess()
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- return primary
- })
-
- const promise = listQuickOpenFiles(
- '/mock/root',
- {} as unknown as Store,
- undefined,
- undefined,
- 1
- )
- setTimeout(() => revParseProc.emit('close', 0, null), 0)
- setTimeout(() => {
- ;(primary.stdout as unknown as EventEmitter).emit(
- 'data',
- `discarded/\0${staged('100644', 'src/kept.ts')}\0`
- )
- }, 10)
-
- await expect(promise).resolves.toEqual(['src/kept.ts'])
- expect(primary.kill).toHaveBeenCalled()
- primary.emit('close', null, 'SIGTERM')
- })
-
- it('git fallback applies hidden dir blocklist', async () => {
- const revParseProc = createMockProcess()
- const gitP1 = createMockProcess()
- const gitP2 = createMockProcess()
- let callIndex = 0
-
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- if (cmd === 'git' && args.includes('ls-files')) {
- callIndex++
- return callIndex === 1 ? gitP1 : gitP2
- }
- return createMockProcess()
- })
-
- const storeMock = {} as unknown as Store
- const promise = listQuickOpenFiles('/mock/root', storeMock)
-
- setTimeout(() => {
- revParseProc.emit('close', 0, null)
- }, 0)
- setTimeout(() => {
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', '.next/cache/1.js')}\0`
- )
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', '.vscode/settings.json')}\0`
- )
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', '.github/workflows/ci.yml')}\0`
- )
- ;(gitP1.stdout as unknown as EventEmitter).emit('data', `${staged('100644', 'valid.ts')}\0`)
- gitP1.emit('close', 0, null)
-
- gitP2.emit('close', 0, null)
- }, 10)
-
- const result = await promise
-
- expect(result).toEqual(['.github/workflows/ci.yml', 'valid.ts'])
- })
-
- it('settles and detaches git fallback scans that ignore timeout kills', async () => {
- vi.useFakeTimers()
-
- try {
- const revParseProc = createMockProcess()
- const gitP1 = createMockProcess()
- const gitP2 = createMockProcess()
- let callIndex = 0
-
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- if (cmd === 'git' && args.includes('ls-files')) {
- callIndex++
- return callIndex === 1 ? gitP1 : gitP2
- }
- return createMockProcess()
- })
-
- const storeMock = {} as unknown as Store
- const promise = listQuickOpenFiles('/mock/root', storeMock)
-
- await flushMicrotasks()
- revParseProc.emit('close', 0, null)
- await flushMicrotasks()
-
- ;(gitP1.stdout as unknown as EventEmitter).emit('data', 'src/index.ts\0partial')
-
- const rejection = expect(promise).rejects.toThrow('git ls-files timed out')
- await vi.advanceTimersByTimeAsync(10000)
-
- await rejection
- expect(gitP1.kill).toHaveBeenCalled()
- expect(gitP2.kill).toHaveBeenCalled()
- expect((gitP1.stdout as unknown as EventEmitter).listenerCount('data')).toBe(0)
- expect((gitP1.stderr as unknown as EventEmitter).listenerCount('data')).toBe(0)
- // Admission retains live children after the listing listeners detach.
- const admittedBeforeClose = _gitAdmissionSnapshotForTests().budgets.general?.baseUsed
- expect(gitP1.listenerCount('error')).toBe(1)
- expect(gitP1.listenerCount('close')).toBe(1)
- gitP1.emit('close', null, 'SIGKILL')
- gitP2.emit('close', null, 'SIGKILL')
-
- expect(admittedBeforeClose).toBe(2)
- expect(_gitAdmissionSnapshotForTests().budgets.general?.baseUsed).toBe(0)
- expect(gitP1.listenerCount('error')).toBe(0)
- expect(gitP1.listenerCount('close')).toBe(0)
- } finally {
- vi.useRealTimers()
- }
- })
-
- it('keeps primary results when only the ignored pass times out', async () => {
- const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
- vi.useFakeTimers()
-
- try {
- const revParseProc = createMockProcess()
- const gitP1 = createMockProcess()
- const gitP2 = createMockProcess()
- let callIndex = 0
-
- spawnMock.mockImplementation((cmd: string, args: string[]) => {
- if (cmd === 'rg') {
- return createMissingRipgrepProcess()
- }
- if (cmd === 'git' && args.includes('rev-parse')) {
- return revParseProc
- }
- if (cmd === 'git' && args.includes('ls-files')) {
- callIndex++
- return callIndex === 1 ? gitP1 : gitP2
- }
- return createMockProcess()
- })
-
- const storeMock = {} as unknown as Store
- const promise = listQuickOpenFiles('/mock/root', storeMock)
-
- await flushMicrotasks()
- revParseProc.emit('close', 0, null)
- await flushMicrotasks()
-
- ;(gitP1.stdout as unknown as EventEmitter).emit(
- 'data',
- `${staged('100644', 'src/index.ts')}\0`
- )
- gitP1.emit('close', 0, null)
- // Ignored entries streamed before the timeout are kept.
- ;(gitP2.stdout as unknown as EventEmitter).emit('data', 'dist/generated.js\0')
-
- await vi.advanceTimersByTimeAsync(10000)
-
- await expect(promise).resolves.toEqual(
- expect.arrayContaining(['src/index.ts', 'dist/generated.js'])
- )
- expect(gitP2.kill).toHaveBeenCalled()
- expect(warnSpy).toHaveBeenCalled()
- const admittedBeforeClose = _gitAdmissionSnapshotForTests().budgets.general?.baseUsed
- gitP2.emit('close', null, 'SIGKILL')
- expect(admittedBeforeClose).toBe(1)
- expect(_gitAdmissionSnapshotForTests().budgets.general?.baseUsed).toBe(0)
- } finally {
- vi.useRealTimers()
- warnSpy.mockRestore()
- }
- })
-
- it('does not fall back to git when rg is available', async () => {
- checkRgAvailableMock.mockResolvedValue(true)
-
- const p1 = createMockProcess()
- const p2 = createMockProcess()
-
- spawnMock.mockImplementation((_cmd, args: string[]) => {
- if (isIgnoredRgPass(args)) {
- return p2
- }
- return p1
- })
-
- const storeMock = {} as unknown as Store
- const promise = listQuickOpenFiles('/mock/root', storeMock)
-
- setTimeout(() => {
- ;(p1.stdout as unknown as EventEmitter).emit('data', 'file.ts\n')
- p1.emit('close', 0, null)
- p2.emit('close', 0, null)
- }, 10)
-
- const result = await promise
-
- expect(result).toEqual(['file.ts'])
- const rgCalls = spawnMock.mock.calls.filter((call) => call[0] === 'rg')
- expect(rgCalls.every((call) => call[1].at(-1) === '.')).toBe(true)
- // git should never have been called
- const gitCalls = spawnMock.mock.calls.filter((call) => call[0] === 'git')
- expect(gitCalls.length).toBe(0)
+ expect(spawnMock).toHaveBeenCalledTimes(1)
+ expect(spawnMock.mock.calls.some((call) => call[0] === 'git')).toBe(false)
})
})
})
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index cbddb5c9c572..ae84056e8b19 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -2,7 +2,6 @@ import { sep } from 'node:path'
import type { ChildProcess } from 'node:child_process'
import type { Store } from '../persistence'
import { resolveAuthorizedPath } from './filesystem-auth'
-import { checkRgAvailable } from './rg-availability'
import { wslAwareSpawn } from '../git/runner'
import { parseWslPath, toWindowsWslPath } from '../wsl'
import { getLocalGitOptionsForRegisteredWorktree } from './local-worktree-runtime-options'
@@ -18,7 +17,11 @@ import {
limitQuickOpenFilesBySerializedBytes,
serializedQuickOpenPathBytes
} from '../../shared/quick-open-transport-budget'
-import { listFilesWithoutRipgrep } from './filesystem-list-files-without-ripgrep'
+import {
+ bundledRipgrepCommand,
+ bundledRipgrepUnavailableError,
+ bundledRipgrepWslSpawnOptions
+} from '../ripgrep/bundled-ripgrep-path'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
@@ -51,23 +54,6 @@ export async function listQuickOpenFiles(
const excludePathPrefixes = buildExcludePathPrefixes(authorizedRootPath, excludePaths)
const wslDistroForOutput = parseWslPath(authorizedRootPath)?.distro ?? localGitOptions.wslDistro
- const listWithoutRipgrep = (): Promise =>
- listFilesWithoutRipgrep({
- rootPath: authorizedRootPath,
- excludePathPrefixes,
- localGitOptions,
- signal,
- maxResults,
- maxSerializedBytes,
- pathFilter
- })
- if (
- wslDistroForOutput &&
- !(await checkRgAvailable(authorizedRootPath, localGitOptions.wslDistro))
- ) {
- return listWithoutRipgrep()
- }
-
const files = new Set()
let serializedBytes = 2 // []
const children: {
@@ -89,6 +75,7 @@ export async function listQuickOpenFiles(
})
const primary = rgArgs.primary
const ignoredPass = rgArgs.ignoredPass
+ const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
const runRg = (args: string[]): Promise => {
return new Promise((resolve, reject) => {
@@ -137,9 +124,10 @@ export async function listQuickOpenFiles(
return maxResults !== undefined && files.size >= maxResults
}
- const child = wslAwareSpawn('rg', args, {
+ const child = wslAwareSpawn(rgCommand, args, {
cwd: authorizedRootPath,
...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
+ ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
stdio: ['ignore', 'pipe', 'pipe']
})
let timer: ReturnType
@@ -175,7 +163,7 @@ export async function listQuickOpenFiles(
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
if (
isRipgrepUnavailableExit(child, code, signal, {
- classifyNativeLauncherExit: !wslDistroForOutput
+ classifyNativeLauncherExit: true
})
) {
unavailableExitObserved = true
@@ -307,10 +295,7 @@ export async function listQuickOpenFiles(
}
} catch (err) {
killSurvivors()
- if (err instanceof RipgrepUnavailableError) {
- return listWithoutRipgrep()
- }
- throw err
+ throw err instanceof RipgrepUnavailableError ? bundledRipgrepUnavailableError() : err
}
const result = Array.from(files).slice(0, maxResults)
return maxSerializedBytes === undefined
diff --git a/src/main/ipc/filesystem-search-file-paths.test.ts b/src/main/ipc/filesystem-search-file-paths.test.ts
index 47c45d527369..792d3011e3af 100644
--- a/src/main/ipc/filesystem-search-file-paths.test.ts
+++ b/src/main/ipc/filesystem-search-file-paths.test.ts
@@ -3,19 +3,17 @@ import type { ChildProcess } from 'node:child_process'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type { Store } from '../persistence'
import type * as GitRunner from '../git/runner'
+import type * as BundledRipgrepPath from '../ripgrep/bundled-ripgrep-path'
import { isFileListingCancellation } from '../../shared/file-listing-cancellation'
-import {
- RipgrepLaunchFailureError,
- RipgrepUnavailableError
-} from '../../shared/ripgrep-process-availability'
+import { RipgrepUnavailableError } from '../../shared/ripgrep-process-availability'
const {
- checkRgAvailableMock,
+ bundledRipgrepCommandMock,
getLocalGitOptionsForRegisteredWorktreeMock,
resolveAuthorizedPathMock,
wslAwareSpawnMock
} = vi.hoisted(() => ({
- checkRgAvailableMock: vi.fn(),
+ bundledRipgrepCommandMock: vi.fn(),
getLocalGitOptionsForRegisteredWorktreeMock: vi.fn(),
resolveAuthorizedPathMock: vi.fn(),
wslAwareSpawnMock: vi.fn()
@@ -30,8 +28,9 @@ vi.mock('./filesystem-auth', () => ({
resolveAuthorizedPath: resolveAuthorizedPathMock
}))
-vi.mock('./rg-availability', () => ({
- checkRgAvailable: checkRgAvailableMock
+vi.mock('../ripgrep/bundled-ripgrep-path', async (importOriginal) => ({
+ ...(await importOriginal()),
+ bundledRipgrepCommand: bundledRipgrepCommandMock
}))
vi.mock('./local-worktree-runtime-options', () => ({
@@ -56,6 +55,8 @@ function createMockProcess(spawned = true): ChildProcess {
return child
}
+const BUNDLED_ERROR = "Orca's bundled search tool (ripgrep) could not start"
+
function createSpawnError(code: string): NodeJS.ErrnoException {
return Object.assign(new Error(`spawn rg ${code}`), { code })
}
@@ -70,8 +71,10 @@ describe('searchQuickOpenFilePaths', () => {
beforeEach(() => {
vi.clearAllMocks()
resolveAuthorizedPathMock.mockImplementation(async (path) => path)
- checkRgAvailableMock.mockResolvedValue(true)
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({})
+ bundledRipgrepCommandMock.mockImplementation((options?: { wsl?: boolean }) =>
+ options?.wsl ? '/bundled/linux/rg' : '/bundled/rg'
+ )
})
it('finds fuzzy matches after 100k paths without returning excluded worktrees', async () => {
@@ -85,6 +88,7 @@ describe('searchQuickOpenFilePaths', () => {
await flushMicrotasks()
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
+ expect(wslAwareSpawnMock.mock.calls[0][0]).toBe('/bundled/rg')
expect(wslAwareSpawnMock.mock.calls[0][1]).toContain('--no-ignore-vcs')
;(child.stdout as unknown as EventEmitter).emit(
'data',
@@ -120,21 +124,8 @@ describe('searchQuickOpenFilePaths', () => {
expect(child.kill).toHaveBeenCalledOnce()
})
- it('requires ripgrep instead of retaining an unbounded fallback inventory', async () => {
+ it('spawns the bundled Linux rg inside the registered WSL runtime', async () => {
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
- checkRgAvailableMock.mockResolvedValue(false)
-
- await expect(
- searchQuickOpenFilePaths('C:\\repo', {} as Store, { query: 'target', limit: 32 })
- ).rejects.toThrow('Quick Open search requires ripgrep')
- expect(wslAwareSpawnMock).not.toHaveBeenCalled()
- })
-
- it('retries transient WSL rg availability pressure before showing install guidance', async () => {
- getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
- checkRgAvailableMock
- .mockRejectedValueOnce(new RipgrepLaunchFailureError('rg check failed (EAGAIN)'))
- .mockResolvedValueOnce(true)
const child = createMockProcess()
wslAwareSpawnMock.mockReturnValue(child)
@@ -147,10 +138,15 @@ describe('searchQuickOpenFilePaths', () => {
child.emit('close', 0, null)
await expect(promise).resolves.toMatchObject({ paths: ['src/target.ts'] })
- expect(checkRgAvailableMock).toHaveBeenCalledTimes(2)
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: true })
+ expect(wslAwareSpawnMock).toHaveBeenCalledWith(
+ '/bundled/linux/rg',
+ expect.any(Array),
+ expect.objectContaining({ cwd: 'C:\\repo', wslDistro: 'Ubuntu' })
+ )
})
- it('retries a transient rg spawn failure instead of demanding a ripgrep install', async () => {
+ it('retries a transient rg spawn failure instead of reporting the bundled rg broken', async () => {
const failed = createMockProcess(false)
const succeeded = createMockProcess()
wslAwareSpawnMock.mockReturnValueOnce(failed).mockReturnValueOnce(succeeded)
@@ -196,7 +192,7 @@ describe('searchQuickOpenFilePaths', () => {
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(2)
})
- it('still reports a missing ripgrep binary when rg is genuinely absent', async () => {
+ it('reports the bundled-ripgrep error when rg genuinely cannot start', async () => {
const child = createMockProcess(false)
wslAwareSpawnMock.mockReturnValue(child)
const promise = searchQuickOpenFilePaths('/repo', {} as Store, {
@@ -207,11 +203,11 @@ describe('searchQuickOpenFilePaths', () => {
child.emit('error', createSpawnError('ENOENT'))
- await expect(promise).rejects.toThrow('Quick Open search requires ripgrep')
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
})
- it('reports install guidance when ripgrep is unavailable on the retry', async () => {
+ it('reports the bundled-ripgrep error when rg is unavailable on the retry', async () => {
const failed = createMockProcess(false)
wslAwareSpawnMock.mockReturnValueOnce(failed).mockImplementationOnce(() => {
throw new RipgrepUnavailableError()
@@ -224,7 +220,7 @@ describe('searchQuickOpenFilePaths', () => {
failed.emit('error', createSpawnError('EAGAIN'))
- await expect(promise).rejects.toThrow('Quick Open search requires ripgrep')
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(2)
})
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index 2c7c09a4c5c5..ca0f5c3a1149 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -20,11 +20,14 @@ import {
} from '../../shared/ripgrep-process-availability'
import { wslAwareSpawn } from '../git/runner'
import { parseWslPath, toWindowsWslPath } from '../wsl'
-import { checkRgAvailable } from './rg-availability'
import { resolveAuthorizedPath } from './filesystem-auth'
import { getLocalGitOptionsForRegisteredWorktree } from './local-worktree-runtime-options'
import { QuickOpenSubprocessPathAccumulator } from '../../shared/quick-open-listing-limits'
-import { buildRipgrepRequiredMessage } from '../../shared/quick-open-install-rg'
+import {
+ bundledRipgrepCommand,
+ bundledRipgrepUnavailableError,
+ bundledRipgrepWslSpawnOptions
+} from '../ripgrep/bundled-ripgrep-path'
export type QuickOpenFilePathSearchResult = {
paths: string[]
@@ -53,9 +56,6 @@ export async function searchQuickOpenFilePaths(
)
const wslDistroForOutput = parseWslPath(authorizedRootPath)?.distro ?? localGitOptions.wslDistro
- const fallback = async (): Promise => {
- throw new Error(await buildRipgrepRequiredMessage())
- }
const excludePathPrefixes = buildExcludePathPrefixes(authorizedRootPath, args.excludePaths)
const { ignoredPass } = buildRgArgsForQuickOpen({
searchRoot: '.',
@@ -79,18 +79,10 @@ export async function searchQuickOpenFilePaths(
}
for (let attempt = 0; attempt < 2; attempt++) {
try {
- if (
- wslDistroForOutput &&
- !(await checkRgAvailable(authorizedRootPath, localGitOptions.wslDistro, {
- rejectTransientLaunchFailure: true
- }))
- ) {
- return fallback()
- }
return await scanOnce()
} catch (error) {
if (error instanceof RipgrepUnavailableError) {
- return fallback()
+ throw bundledRipgrepUnavailableError()
}
// Why: a supersede that lands after the scan rejected still owes the caller a cancellation.
if (args.signal?.aborted) {
@@ -125,9 +117,11 @@ function scanRipgrepPaths(args: {
let unavailableExitObserved = false
let child: ReturnType
try {
- child = wslAwareSpawn('rg', args.args, {
+ const rgCommand = bundledRipgrepCommand({ wsl: Boolean(args.wslDistroForOutput) })
+ child = wslAwareSpawn(rgCommand, args.args, {
cwd: args.authorizedRootPath,
...(args.localGitOptions.wslDistro ? { wslDistro: args.localGitOptions.wslDistro } : {}),
+ ...(args.wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
stdio: ['ignore', 'pipe', 'pipe']
})
} catch (error) {
@@ -207,7 +201,7 @@ function scanRipgrepPaths(args: {
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
if (
isRipgrepUnavailableExit(child, code, signal, {
- classifyNativeLauncherExit: !args.wslDistroForOutput
+ classifyNativeLauncherExit: true
})
) {
unavailableExitObserved = true
diff --git a/src/main/ipc/filesystem-search-git.test.ts b/src/main/ipc/filesystem-search-git.test.ts
deleted file mode 100644
index 7de098199f6d..000000000000
--- a/src/main/ipc/filesystem-search-git.test.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-import { describe, expect, it, vi, beforeEach } from 'vitest'
-
-const { gitSpawnMock } = vi.hoisted(() => ({
- gitSpawnMock: vi.fn()
-}))
-
-vi.mock('../git/runner', () => ({
- gitSpawnAfterWindowsEnvironmentReady: gitSpawnMock
-}))
-
-import { searchWithGitGrep } from './filesystem-search-git'
-import { EventEmitter } from 'node:events'
-import type { ChildProcess } from 'node:child_process'
-
-function createMockProcess(): ChildProcess {
- const p = new EventEmitter() as unknown as ChildProcess
- ;(p as unknown as Record).stdout = new EventEmitter()
- ;(
- (p as unknown as Record).stdout as EventEmitter & {
- setEncoding: () => void
- }
- ).setEncoding = vi.fn()
- ;(p as unknown as Record).stderr = new EventEmitter()
- ;(p as unknown as Record).kill = vi.fn()
- return p
-}
-
-describe('filesystem-search-git', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- })
-
- it('parses git grep output and finds matches', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'hello', rootPath: '/mock/root' }, 100)
-
- setTimeout(() => {
- ;(proc.stdout as unknown as EventEmitter).emit(
- 'data',
- 'src/index.ts\x005\x00 console.log("hello world")\n'
- )
- ;(proc.stdout as unknown as EventEmitter).emit(
- 'data',
- 'src/main.ts\x0012\x00 return "hello"\n'
- )
- proc.emit('close')
- }, 10)
-
- const result = await promise
-
- expect(result.files).toHaveLength(2)
- expect(result.totalMatches).toBe(2)
- expect(result.truncated).toBe(false)
-
- expect(result.files[0].relativePath).toBe('src/index.ts')
- expect(result.files[0].matchCount).toBe(1)
- expect(result.files[0].matches[0]).toEqual({
- line: 5,
- column: 16,
- matchLength: 5,
- lineContent: ' console.log("hello world")'
- })
-
- expect(result.files[1].relativePath).toBe('src/main.ts')
- expect(result.files[1].matchCount).toBe(1)
- expect(result.files[1].matches[0].line).toBe(12)
- })
-
- it('finds multiple matches per line', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'ab', rootPath: '/mock/root' }, 100)
-
- setTimeout(() => {
- ;(proc.stdout as unknown as EventEmitter).emit('data', 'file.txt\x001\x00ab cd ab ef ab\n')
- proc.emit('close')
- }, 10)
-
- const result = await promise
-
- expect(result.files).toHaveLength(1)
- expect(result.totalMatches).toBe(3)
- expect(result.files[0].matchCount).toBe(3)
- expect(result.files[0].matches).toEqual([
- { line: 1, column: 1, matchLength: 2, lineContent: 'ab cd ab ef ab' },
- { line: 1, column: 7, matchLength: 2, lineContent: 'ab cd ab ef ab' },
- { line: 1, column: 13, matchLength: 2, lineContent: 'ab cd ab ef ab' }
- ])
- })
-
- it('respects maxResults and sets truncated', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'x', rootPath: '/mock/root' }, 2)
-
- setTimeout(() => {
- ;(proc.stdout as unknown as EventEmitter).emit(
- 'data',
- 'a.ts\x001\x00x\n' + 'b.ts\x001\x00x\n' + 'c.ts\x001\x00x\n'
- )
- proc.emit('close')
- }, 10)
-
- const result = await promise
-
- expect(result.totalMatches).toBe(2)
- expect(result.truncated).toBe(true)
- expect(result.files.map((file) => file.matchCount)).toEqual([1, 1])
- })
-
- it('passes correct flags for case-insensitive fixed-string search', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep(
- '/mock/root',
- { query: 'test', rootPath: '/mock/root', caseSensitive: false, useRegex: false },
- 100,
- { wslDistro: 'Ubuntu' }
- )
-
- setTimeout(() => proc.emit('close'), 10)
- await promise
-
- const gitArgs = gitSpawnMock.mock.calls[0][0] as string[]
- expect(gitArgs).toContain('-i')
- expect(gitArgs).toContain('--fixed-strings')
- expect(gitArgs).not.toContain('--extended-regexp')
- expect(gitSpawnMock.mock.calls[0][1]).toEqual(
- expect.objectContaining({ admissionTier: 'interactive', wslDistro: 'Ubuntu' })
- )
- })
-
- it('passes correct flags for regex whole-word search', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep(
- '/mock/root',
- {
- query: 'foo',
- rootPath: '/mock/root',
- caseSensitive: true,
- useRegex: true,
- wholeWord: true
- },
- 100
- )
-
- setTimeout(() => proc.emit('close'), 10)
- await promise
-
- const gitArgs = gitSpawnMock.mock.calls[0][0] as string[]
- expect(gitArgs).toContain('-w')
- expect(gitArgs).toContain('--extended-regexp')
- expect(gitArgs).not.toContain('-i')
- expect(gitArgs).not.toContain('--fixed-strings')
- })
-
- it('returns empty result when git grep spawn fails', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'test', rootPath: '/mock/root' }, 100)
-
- setTimeout(() => proc.emit('error', new Error('spawn git ENOENT')), 10)
-
- const result = await promise
-
- expect(result.files).toHaveLength(0)
- expect(result.totalMatches).toBe(0)
- })
-
- it('settles and detaches when git grep ignores the timeout kill', async () => {
- vi.useFakeTimers()
-
- try {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'ok', rootPath: '/mock/root' }, 100)
-
- await vi.waitFor(() =>
- expect((proc.stdout as unknown as EventEmitter).listenerCount('data')).toBeGreaterThan(0)
- )
- ;(proc.stdout as unknown as EventEmitter).emit('data', 'valid.ts\x001\x00ok\npartial')
-
- await vi.runOnlyPendingTimersAsync()
-
- const result = await promise
- expect(result.truncated).toBe(true)
- expect(result.files).toHaveLength(1)
- expect(result.files[0].matchCount).toBe(1)
- expect(proc.kill).toHaveBeenCalled()
- expect((proc.stdout as unknown as EventEmitter).listenerCount('data')).toBe(0)
- expect((proc.stderr as unknown as EventEmitter).listenerCount('data')).toBe(0)
- expect(proc.listenerCount('error')).toBe(0)
- expect(proc.listenerCount('close')).toBe(0)
- } finally {
- vi.useRealTimers()
- }
- })
-
- it('skips lines without null separator', async () => {
- const proc = createMockProcess()
- gitSpawnMock.mockReturnValue(proc)
-
- const promise = searchWithGitGrep('/mock/root', { query: 'ok', rootPath: '/mock/root' }, 100)
-
- setTimeout(() => {
- // A line without \0 should be skipped (e.g. git header output)
- ;(proc.stdout as unknown as EventEmitter).emit('data', 'no-null-here:1:ok\n')
- ;(proc.stdout as unknown as EventEmitter).emit('data', 'valid.ts\x003\x00ok\n')
- proc.emit('close')
- }, 10)
-
- const result = await promise
-
- expect(result.files).toHaveLength(1)
- expect(result.files[0].relativePath).toBe('valid.ts')
- })
-})
diff --git a/src/main/ipc/filesystem-search-git.ts b/src/main/ipc/filesystem-search-git.ts
deleted file mode 100644
index 8e930dbf8b18..000000000000
--- a/src/main/ipc/filesystem-search-git.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { SearchSubprocessLineAccumulator } from '../../shared/search-subprocess-lines'
-import type { SearchOptions, SearchResult } from '../../shared/code-search-types'
-import {
- buildGitGrepArgs,
- buildSubmatchRegex,
- createAccumulator,
- finalize,
- ingestGitGrepLine,
- SEARCH_TIMEOUT_MS
-} from '../../shared/text-search'
-import { gitSpawnAfterWindowsEnvironmentReady } from '../git/runner'
-import {
- isWslLinkedWorktreeGitRoutingCandidate,
- prepareWslLinkedWorktreeGitRouting
-} from '../git/wsl-linked-worktree-git-routing'
-
-/**
- * Fallback text search using git grep. Used when rg is not available.
- *
- * Why: On Linux, rg may not be installed or may not be in PATH when the app
- * is launched from a desktop entry (which inherits a minimal system PATH).
- * git grep is always available since this is a git-focused app.
- */
-export async function searchWithGitGrep(
- rootPath: string,
- args: SearchOptions,
- maxResults: number,
- localGitOptions: { wslDistro?: string } = {}
-): Promise {
- if (isWslLinkedWorktreeGitRoutingCandidate(rootPath, localGitOptions.wslDistro)) {
- await prepareWslLinkedWorktreeGitRouting(rootPath, localGitOptions.wslDistro)
- }
- const gitArgs = buildGitGrepArgs(args.query, args)
- const child = await gitSpawnAfterWindowsEnvironmentReady(gitArgs, {
- cwd: rootPath,
- admissionTier: 'interactive',
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- stdio: ['ignore', 'pipe', 'pipe']
- })
- return new Promise((resolve) => {
- const matchRegex = buildSubmatchRegex(args.query, args)
- const acc = createAccumulator()
- const lines = new SearchSubprocessLineAccumulator(Number.MAX_SAFE_INTEGER)
- let done = false
-
- let killTimeout: ReturnType
-
- function resolveOnce(): void {
- if (done) {
- return
- }
- done = true
- lines.clear()
- clearTimeout(killTimeout)
- // Why: child.kill() is advisory. If git ignores it, detach our
- // closures so repeated fallback searches do not retain old scans.
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
- child.off('error', handleError)
- child.off('close', handleClose)
- resolve(finalize(acc))
- }
-
- function processLine(line: string): void {
- const verdict = ingestGitGrepLine(line, rootPath, matchRegex, acc, maxResults)
- if (verdict === 'stop') {
- child.kill()
- }
- }
-
- function handleStdoutData(chunk: string): void {
- lines.push(chunk, processLine)
- }
-
- function handleStderrData(): void {
- /* drain */
- }
-
- function handleError(): void {
- resolveOnce()
- }
-
- function handleClose(): void {
- const tail = lines.finish()
- if (tail !== null) {
- processLine(tail)
- }
- resolveOnce()
- }
-
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
- child.once('error', handleError)
- child.once('close', handleClose)
-
- killTimeout = setTimeout(() => {
- acc.truncated = true
- child.kill()
- resolveOnce()
- }, SEARCH_TIMEOUT_MS)
- })
-}
diff --git a/src/main/ipc/filesystem-search-rg-timeout.test.ts b/src/main/ipc/filesystem-search-rg-timeout.test.ts
index 8860c4c55b6e..e28bf91716bc 100644
--- a/src/main/ipc/filesystem-search-rg-timeout.test.ts
+++ b/src/main/ipc/filesystem-search-rg-timeout.test.ts
@@ -1,22 +1,23 @@
import { EventEmitter } from 'node:events'
import type { ChildProcess } from 'node:child_process'
import { beforeEach, describe, expect, it, vi } from 'vitest'
+import type * as BundledRipgrepPath from '../ripgrep/bundled-ripgrep-path'
const {
handleMock,
resolveAuthorizedPathMock,
- checkRgAvailableMock,
+ bundledRipgrepCommandMock,
getLocalGitOptionsForRegisteredWorktreeMock,
- searchWithGitGrepMock,
wslAwareSpawnMock,
+ parseWslPathMock,
toWindowsWslPathMock
} = vi.hoisted(() => ({
handleMock: vi.fn(),
resolveAuthorizedPathMock: vi.fn(),
- checkRgAvailableMock: vi.fn(),
+ bundledRipgrepCommandMock: vi.fn(),
getLocalGitOptionsForRegisteredWorktreeMock: vi.fn(),
- searchWithGitGrepMock: vi.fn(),
wslAwareSpawnMock: vi.fn(),
+ parseWslPathMock: vi.fn((_value: string): { distro: string } | null => null),
toWindowsWslPathMock: vi.fn((value: string) => value)
}))
@@ -37,7 +38,7 @@ vi.mock('../git/runner', () => ({
}))
vi.mock('../wsl', () => ({
- parseWslPath: vi.fn(() => null),
+ parseWslPath: parseWslPathMock,
toWindowsWslPath: toWindowsWslPathMock
}))
@@ -63,8 +64,9 @@ vi.mock('./filesystem-mutations', () => ({
registerFilesystemMutationHandlers: vi.fn()
}))
-vi.mock('./filesystem-search-git', () => ({
- searchWithGitGrep: searchWithGitGrepMock
+vi.mock('../ripgrep/bundled-ripgrep-path', async (importOriginal) => ({
+ ...(await importOriginal()),
+ bundledRipgrepCommand: bundledRipgrepCommandMock
}))
vi.mock('./local-worktree-runtime-options', () => ({
@@ -76,10 +78,6 @@ vi.mock('./markdown-documents', () => ({
markdownDocumentsFromRelativePaths: vi.fn()
}))
-vi.mock('./rg-availability', () => ({
- checkRgAvailable: checkRgAvailableMock
-}))
-
import { registerFilesystemHandlers } from './filesystem'
function createMockProcess(): ChildProcess {
@@ -95,6 +93,8 @@ function createMockProcess(): ChildProcess {
return p
}
+const BUNDLED_ERROR = "Orca's bundled search tool (ripgrep) could not start"
+
async function flushMicrotasks(): Promise {
for (let index = 0; index < 8; index++) {
await Promise.resolve()
@@ -109,8 +109,11 @@ describe('filesystem rg search timeout', () => {
handlers.set(channel, handler)
})
resolveAuthorizedPathMock.mockImplementation(async (value: string) => value)
- checkRgAvailableMock.mockResolvedValue(true)
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({})
+ parseWslPathMock.mockReturnValue(null)
+ bundledRipgrepCommandMock.mockImplementation((options?: { wsl?: boolean }) =>
+ options?.wsl ? '/bundled/linux/rg' : '/bundled/rg'
+ )
})
it('settles and detaches when rg ignores the timeout kill', async () => {
@@ -134,7 +137,8 @@ describe('filesystem rg search timeout', () => {
const result = await promise
expect(result.truncated).toBe(true)
- expect(checkRgAvailableMock).not.toHaveBeenCalled()
+ expect(wslAwareSpawnMock.mock.calls[0]?.[0]).toBe('/bundled/rg')
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: false })
expect(child.kill).toHaveBeenCalled()
expect((child.stdout as unknown as EventEmitter).listenerCount('data')).toBe(0)
expect((child.stderr as unknown as EventEmitter).listenerCount('data')).toBe(0)
@@ -146,13 +150,11 @@ describe('filesystem rg search timeout', () => {
})
it.each(['error-first', 'close-first'] as const)(
- 'falls back once when a native launch failure is %s',
+ 'rejects with the bundled-ripgrep error when a native launch failure is %s',
async (order) => {
const child = createMockProcess()
Object.defineProperty(child, 'pid', { value: undefined })
wslAwareSpawnMock.mockReturnValue(child)
- const fallback = { files: [], totalMatches: 0, truncated: false }
- searchWithGitGrepMock.mockResolvedValue(fallback)
registerFilesystemHandlers({} as never)
const promise = handlers.get('fs:search')!(
@@ -169,9 +171,8 @@ describe('filesystem rg search timeout', () => {
expect(() => child.emit('error', error)).not.toThrow()
}
- await expect(promise).resolves.toBe(fallback)
- expect(searchWithGitGrepMock).toHaveBeenCalledTimes(1)
- expect(checkRgAvailableMock).not.toHaveBeenCalled()
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
+ expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
expect(child.listenerCount('error')).toBe(0)
expect(child.listenerCount('close')).toBe(0)
}
@@ -191,15 +192,12 @@ describe('filesystem rg search timeout', () => {
child.emit('error', new Error('post-spawn failure'))
await expect(promise).resolves.toMatchObject({ files: [] })
- expect(searchWithGitGrepMock).not.toHaveBeenCalled()
})
- it("falls back when a native launcher exits outside ripgrep's contract", async () => {
+ it("rejects when a native launcher exits outside ripgrep's contract", async () => {
const child = createMockProcess()
Object.defineProperty(child, 'pid', { value: 1 })
wslAwareSpawnMock.mockReturnValue(child)
- const fallback = { files: [], totalMatches: 0, truncated: false }
- searchWithGitGrepMock.mockResolvedValue(fallback)
registerFilesystemHandlers({} as never)
const promise = handlers.get('fs:search')!(
@@ -209,8 +207,7 @@ describe('filesystem rg search timeout', () => {
await flushMicrotasks()
child.emit('close', 127, null)
- await expect(promise).resolves.toBe(fallback)
- expect(searchWithGitGrepMock).toHaveBeenCalledTimes(1)
+ await expect(promise).rejects.toThrow(BUNDLED_ERROR)
})
it('routes rg through the registered WSL project runtime for Windows-path worktrees', async () => {
@@ -226,15 +223,14 @@ describe('filesystem rg search timeout', () => {
) as Promise
setTimeout(() => {
- child.emit('close', 127, null)
+ child.emit('close', 0, null)
}, 10)
await promise
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
- expect(searchWithGitGrepMock).not.toHaveBeenCalled()
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: true })
expect(wslAwareSpawnMock).toHaveBeenCalledWith(
- 'rg',
+ '/bundled/linux/rg',
expect.any(Array),
expect.objectContaining({
cwd: 'C:\\repo',
@@ -243,21 +239,24 @@ describe('filesystem rg search timeout', () => {
)
})
- it('keeps the WSL search preflight and falls back before starting real rg', async () => {
- const fallback = { files: [], totalMatches: 0, truncated: false }
- getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
- checkRgAvailableMock.mockResolvedValue(false)
- searchWithGitGrepMock.mockResolvedValue(fallback)
+ it('spawns the bundled Linux rg for WSL UNC roots', async () => {
+ const child = createMockProcess()
+ Object.defineProperty(child, 'pid', { value: 1 })
+ wslAwareSpawnMock.mockReturnValue(child)
+ parseWslPathMock.mockReturnValue({ distro: 'Ubuntu' })
registerFilesystemHandlers({} as never)
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: fs:search handlers return Promise.
const promise = handlers.get('fs:search')!(
{ sender: { id: 7 } },
- { rootPath: 'C:\\repo', query: 'ok' }
+ { rootPath: '\\\\wsl.localhost\\Ubuntu\\repo', query: 'ok' }
) as Promise
+ await flushMicrotasks()
+ child.emit('close', 1, null)
- await expect(promise).resolves.toBe(fallback)
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
- expect(wslAwareSpawnMock).not.toHaveBeenCalled()
+ await expect(promise).resolves.toMatchObject({ files: [] })
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: true })
+ expect(wslAwareSpawnMock.mock.calls[0]?.[0]).toBe('/bundled/linux/rg')
})
it('translates WSL rg output for Windows-path project search results', async () => {
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index 2799ff767971..927a16b4731c 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -21,7 +21,6 @@ import {
getSshFilesystemProvider,
requireSshFilesystemProvider
} from '../../providers/ssh-filesystem-dispatch'
-import { checkRgAvailable } from '../rg-availability'
import { resolveAuthorizedPath } from '../filesystem-auth'
import { listQuickOpenFiles } from '../filesystem-list-files'
import {
@@ -29,7 +28,11 @@ import {
pathMatchesFileNameFilterTokens,
splitFileNameFilterTokens
} from '../../../shared/file-name-filter-tokens'
-import { searchWithGitGrep } from '../filesystem-search-git'
+import {
+ bundledRipgrepCommand,
+ bundledRipgrepUnavailableError,
+ bundledRipgrepWslSpawnOptions
+} from '../../ripgrep/bundled-ripgrep-path'
import { getLocalGitOptionsForRegisteredWorktree } from '../local-worktree-runtime-options'
import { QuickOpenPathRanker } from '../../../shared/quick-open-path-search'
import type { FilesystemHandlerContext } from './filesystem-handler-context'
@@ -58,13 +61,8 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
Math.min(args.maxResults ?? DEFAULT_SEARCH_MAX_RESULTS, DEFAULT_SEARCH_MAX_RESULTS)
)
const searchKey = `${event.sender.id}:${rootPath}`
- // Why: WSL's bash exit 127 is ambiguous with a real executable returning 127.
const wslDistroForOutput = parseWslPath(rootPath)?.distro ?? localGitOptions.wslDistro
- if (wslDistroForOutput && !(await checkRgAvailable(rootPath, localGitOptions.wslDistro))) {
- return searchWithGitGrep(rootPath, args, maxResults, localGitOptions)
- }
-
return new Promise((resolvePromise) => {
const rgArgs = buildRgArgs(args.query, rootPath, args)
// Why: kill the prior rg so it stops parsing thousands of matches on the main thread (the large-repo freeze) after the UI moved on.
@@ -110,8 +108,8 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
resolvePromise(result)
}
const resolveOnce = (): void => finish(finalize(acc))
- const resolveWithoutRipgrep = (): void =>
- finish(searchWithGitGrep(rootPath, args, maxResults, localGitOptions))
+ const rejectUnavailable = (): void =>
+ finish(Promise.reject(bundledRipgrepUnavailableError()))
const processLine = (line: string): void => {
const verdict = ingestRgJsonLine(line, rootPath, acc, maxResults, transformAbsPath)
if (verdict === 'stop' && child) {
@@ -119,9 +117,11 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
}
}
- const nextChild = wslAwareSpawn('rg', rgArgs, {
+ const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
+ const nextChild = wslAwareSpawn(rgCommand, rgArgs, {
cwd: rootPath,
...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
+ ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
stdio: ['ignore', 'pipe', 'pipe']
})
child = nextChild
@@ -136,7 +136,7 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
const handleError = (): void => {
processErrorObserved = true
if (child && isRipgrepUnavailableExit(child, null, null)) {
- resolveWithoutRipgrep()
+ rejectUnavailable()
return
}
resolveOnce()
@@ -145,11 +145,11 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
if (
child &&
isRipgrepUnavailableExit(child, code, signal, {
- classifyNativeLauncherExit: !wslDistroForOutput
+ classifyNativeLauncherExit: true
})
) {
unavailableExitObserved = true
- resolveWithoutRipgrep()
+ rejectUnavailable()
return
}
const tail = lines.finish()
diff --git a/src/main/ipc/rg-availability.test.ts b/src/main/ipc/rg-availability.test.ts
deleted file mode 100644
index 45e40ecb99c5..000000000000
--- a/src/main/ipc/rg-availability.test.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { EventEmitter } from 'node:events'
-import type { ChildProcess } from 'node:child_process'
-import { beforeEach, describe, expect, it, vi } from 'vitest'
-
-const { wslAwareSpawnMock } = vi.hoisted(() => ({
- wslAwareSpawnMock: vi.fn()
-}))
-
-vi.mock('../git/runner', () => ({
- wslAwareSpawn: wslAwareSpawnMock
-}))
-
-import { checkRgAvailable } from './rg-availability'
-import { RipgrepLaunchFailureError } from '../../shared/ripgrep-process-availability'
-
-function createMockProcess(): ChildProcess {
- const child = new EventEmitter() as unknown as ChildProcess
- ;(child as unknown as { kill: () => boolean }).kill = vi.fn(() => true)
- return child
-}
-
-describe('checkRgAvailable', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- })
-
- it('returns true when rg exits successfully', async () => {
- const child = createMockProcess()
- wslAwareSpawnMock.mockReturnValue(child)
-
- const promise = checkRgAvailable('/repo')
- child.emit('close', 0)
-
- await expect(promise).resolves.toBe(true)
- expect(wslAwareSpawnMock).toHaveBeenCalledWith('rg', ['--version'], {
- cwd: '/repo',
- stdio: 'ignore'
- })
- })
-
- it('rejects transient synchronous launch pressure when requested', async () => {
- wslAwareSpawnMock.mockImplementationOnce(() => {
- throw Object.assign(new Error('spawn rg ENOMEM'), { code: 'ENOMEM' })
- })
-
- await expect(
- checkRgAvailable('/repo', 'Ubuntu', { rejectTransientLaunchFailure: true })
- ).rejects.toBeInstanceOf(RipgrepLaunchFailureError)
- })
-
- it('rejects transient asynchronous launch pressure when requested', async () => {
- const child = createMockProcess()
- wslAwareSpawnMock.mockReturnValue(child)
- const promise = checkRgAvailable('/repo', 'Ubuntu', {
- rejectTransientLaunchFailure: true
- })
-
- child.emit('error', Object.assign(new Error('spawn rg EAGAIN'), { code: 'EAGAIN' }))
-
- await expect(promise).rejects.toBeInstanceOf(RipgrepLaunchFailureError)
- })
-
- it('settles and detaches when rg availability check ignores timeout kills', async () => {
- vi.useFakeTimers()
-
- try {
- const child = createMockProcess()
- wslAwareSpawnMock.mockReturnValue(child)
-
- const promise = checkRgAvailable('/repo')
- await Promise.resolve()
-
- await vi.advanceTimersByTimeAsync(5000)
-
- await expect(Promise.race([promise, Promise.resolve('pending')])).resolves.toBe(false)
- expect(child.kill).toHaveBeenCalled()
- expect(child.listenerCount('error')).toBe(0)
- expect(child.listenerCount('close')).toBe(0)
- } finally {
- vi.useRealTimers()
- }
- })
-})
diff --git a/src/main/ipc/rg-availability.ts b/src/main/ipc/rg-availability.ts
deleted file mode 100644
index 3fa18ade2474..000000000000
--- a/src/main/ipc/rg-availability.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { wslAwareSpawn } from '../git/runner'
-import {
- isTransientRipgrepSpawnError,
- RipgrepLaunchFailureError
-} from '../../shared/ripgrep-process-availability'
-
-const RG_AVAILABILITY_TIMEOUT_MS = 5000
-
-// Why the `settled` flag: when rg is not installed, spawn emits both 'error'
-// and 'close' with non-deterministic ordering across Node versions/platforms.
-// Without guarding, a late 'error' after 'close' would double-resolve (or a
-// late 'close' after 'error' would resolve true after we already resolved
-// false). `settled` makes whichever fires first authoritative.
-//
-// Why no cache: `rg --version` is a sub-10ms spawn, so the cost of checking
-// per call is negligible. Caching had a footgun in both directions — a
-// negative cache persisted across rg installs (forcing an app restart),
-// while a positive cache could mask an rg that was uninstalled or broken
-// mid-session.
-
-export function checkRgAvailable(
- searchPath?: string,
- wslDistro?: string,
- options: { rejectTransientLaunchFailure?: boolean } = {}
-): Promise {
- return new Promise((resolve, reject) => {
- let settled = false
- // Why: pass cwd plus project-runtime distro so WSL projects are checked
- // inside their distro even when the search root is a Windows path.
- let child: ReturnType
- try {
- child = wslAwareSpawn('rg', ['--version'], {
- ...(searchPath ? { cwd: searchPath } : {}),
- ...(wslDistro ? { wslDistro } : {}),
- stdio: 'ignore'
- })
- } catch (error) {
- if (options.rejectTransientLaunchFailure && isTransientRipgrepSpawnError(error)) {
- reject(
- new RipgrepLaunchFailureError(
- `rg availability check failed to start (${(error as NodeJS.ErrnoException).code})`
- )
- )
- } else {
- resolve(false)
- }
- return
- }
- let timeout: ReturnType
-
- const cleanup = (): void => {
- clearTimeout(timeout)
- child.off('error', onError)
- child.off('close', onClose)
- }
-
- const settle = (available: boolean, options?: { kill?: boolean }): void => {
- if (settled) {
- return
- }
- settled = true
- cleanup()
- if (options?.kill) {
- child.kill()
- }
- resolve(available)
- }
-
- const rejectLaunchFailure = (error: NodeJS.ErrnoException): void => {
- if (settled) {
- return
- }
- settled = true
- cleanup()
- reject(new RipgrepLaunchFailureError(`rg availability check failed to start (${error.code})`))
- }
-
- const onError = (error: NodeJS.ErrnoException): void => {
- if (options.rejectTransientLaunchFailure && isTransientRipgrepSpawnError(error)) {
- rejectLaunchFailure(error)
- return
- }
- settle(false)
- }
- const onClose = (code: number | null): void => settle(code === 0)
-
- child.once('error', onError)
- child.once('close', onClose)
- timeout = setTimeout(() => settle(false, { kill: true }), RG_AVAILABILITY_TIMEOUT_MS)
- if (typeof timeout.unref === 'function') {
- timeout.unref()
- }
- })
-}
diff --git a/src/main/ripgrep/bundled-ripgrep-path.test.ts b/src/main/ripgrep/bundled-ripgrep-path.test.ts
new file mode 100644
index 000000000000..9ff1e2521d3d
--- /dev/null
+++ b/src/main/ripgrep/bundled-ripgrep-path.test.ts
@@ -0,0 +1,89 @@
+import {
+ chmodSync,
+ existsSync,
+ mkdirSync,
+ mkdtempSync,
+ realpathSync,
+ rmSync,
+ writeFileSync
+} from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterEach, describe, expect, it } from 'vitest'
+import { toBundledRipgrepPlatform } from '../../shared/bundled-ripgrep'
+import { execFileSync } from 'node:child_process'
+import { BUNDLED_RIPGREP_VERSION } from '../../shared/bundled-ripgrep'
+import {
+ bundledRipgrepCommand,
+ bundledRipgrepWslSpawnOptions,
+ resetBundledRipgrepPathCacheForTests,
+ resolveBundledRipgrepPath
+} from './bundled-ripgrep-path'
+
+const originalResourcesPath = process.resourcesPath
+
+function setResourcesPath(value: string | undefined): void {
+ Object.defineProperty(process, 'resourcesPath', { configurable: true, value })
+}
+
+describe('bundled ripgrep path', () => {
+ afterEach(() => {
+ setResourcesPath(originalResourcesPath)
+ resetBundledRipgrepPathCacheForTests()
+ })
+
+ it('resolves the checkout binary for this host in development', () => {
+ setResourcesPath(undefined)
+ const command = bundledRipgrepCommand()
+
+ expect(command).toContain(join('@vscode', 'ripgrep-universal', 'bin'))
+ expect(existsSync(command)).toBe(true)
+ })
+
+ it('resolves the Linux build for WSL-routed spawns', () => {
+ setResourcesPath(undefined)
+ const linuxPlatform = toBundledRipgrepPlatform('linux', process.arch)
+
+ expect(bundledRipgrepCommand({ wsl: true })).toContain(join('bin', `${linuxPlatform}`, 'rg'))
+ })
+
+ it('prefers the packaged resources copy', () => {
+ const resourcesDir = mkdtempSync(join(tmpdir(), 'orca-rg-resources-'))
+ try {
+ const packaged = join(resourcesDir, 'ripgrep', 'linux-x64', 'rg')
+ mkdirSync(join(resourcesDir, 'ripgrep', 'linux-x64'), { recursive: true })
+ writeFileSync(packaged, '')
+ chmodSync(packaged, 0o755)
+ setResourcesPath(resourcesDir)
+
+ expect(resolveBundledRipgrepPath('linux-x64')).toBe(realpathSync(packaged))
+ } finally {
+ rmSync(resourcesDir, { recursive: true, force: true })
+ }
+ })
+
+ it('names no bundled build for platforms outside the relay set', () => {
+ expect(toBundledRipgrepPlatform('freebsd', 'x64')).toBeNull()
+ expect(toBundledRipgrepPlatform('win32', 'ia32')).toBeNull()
+ })
+
+ it('keys the remote cache on the version the pinned binary reports', () => {
+ setResourcesPath(undefined)
+ const version = execFileSync(bundledRipgrepCommand(), ['--version'], { encoding: 'utf8' })
+
+ expect(version.split('\n')[0]).toMatch(
+ new RegExp(`^ripgrep ${BUNDLED_RIPGREP_VERSION.replaceAll('.', '\\.')}\\b`)
+ )
+ })
+
+ it('picks the distro-arch Linux build via wslpath, else the distro rg', () => {
+ const { wslShellCommand } = bundledRipgrepWslSpawnOptions(
+ 'C:\\Program Files\\Orca\\resources\\ripgrep\\linux-x64\\rg'
+ )
+
+ expect(wslShellCommand).toContain(`wslpath -u 'C:\\Program Files\\Orca\\resources\\ripgrep'`)
+ expect(wslShellCommand).toContain('aarch64|arm64) a=linux-arm64')
+ expect(wslShellCommand).toContain('else printf rg')
+ expect(bundledRipgrepWslSpawnOptions('rg')).toEqual({})
+ })
+})
diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts
new file mode 100644
index 000000000000..b1f993cb1af1
--- /dev/null
+++ b/src/main/ripgrep/bundled-ripgrep-path.ts
@@ -0,0 +1,81 @@
+import { existsSync, realpathSync } from 'node:fs'
+import { join } from 'node:path'
+import { getAppEnvironment, hasAppEnvironment } from '../../shared/app-environment'
+import { quotePosixShell } from '../../shared/wsl-login-shell-command'
+import {
+ BUNDLED_RIPGREP_PACKAGE_BIN_DIR,
+ BUNDLED_RIPGREP_RESOURCE_DIR,
+ bundledRipgrepBinaryName,
+ toBundledRipgrepPlatform,
+ type BundledRipgrepPlatform
+} from '../../shared/bundled-ripgrep'
+
+const resolvedPaths = new Map()
+
+function candidatePaths(platform: BundledRipgrepPlatform): string[] {
+ const binaryName = bundledRipgrepBinaryName(platform)
+ const candidates: string[] = []
+ if (process.resourcesPath) {
+ candidates.push(join(process.resourcesPath, BUNDLED_RIPGREP_RESOURCE_DIR, platform, binaryName))
+ }
+ // Why not packaged: a packaged app must never run a binary from whatever checkout it was launched in.
+ if (hasAppEnvironment() && getAppEnvironment().isPackaged()) {
+ return candidates
+ }
+ // Why: development and test hosts run from a checkout where only node_modules holds the binaries.
+ const roots = [hasAppEnvironment() ? getAppEnvironment().getAppPath() : null, process.cwd()]
+ for (const root of roots) {
+ if (root) {
+ candidates.push(join(root, BUNDLED_RIPGREP_PACKAGE_BIN_DIR, platform, binaryName))
+ }
+ }
+ return candidates
+}
+
+/** Absolute path to Orca's own ripgrep for `platform`, or null when this install lacks it. */
+export function resolveBundledRipgrepPath(platform: BundledRipgrepPlatform): string | null {
+ if (!resolvedPaths.has(platform)) {
+ const found = candidatePaths(platform).find((path) => existsSync(path))
+ // Why realpath: dev checkouts reach the package through pnpm symlinks, which SSH uploads reject.
+ resolvedPaths.set(platform, found ? realpathSync(found) : null)
+ }
+ return resolvedPaths.get(platform) ?? null
+}
+
+/**
+ * The rg command for a local spawn: this host's bundled binary, or its Linux build when the
+ * spawn is routed into WSL. Falls back to PATH only for a damaged or unpackaged install.
+ */
+export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
+ const platform = options.wsl
+ ? toBundledRipgrepPlatform('linux', process.arch)
+ : toBundledRipgrepPlatform(process.platform, process.arch)
+ return (platform && resolveBundledRipgrepPath(platform)) ?? 'rg'
+}
+
+/**
+ * Spawn options for a WSL-routed rg: inside the distro, pick the Linux build matching its own
+ * architecture (Windows-on-ARM runs x64 Orca beside arm64 distros) from the Windows install via
+ * wslpath (custom automount roots), else the distro's own rg when the install drive is not mounted.
+ */
+export function bundledRipgrepWslSpawnOptions(command: string): { wslShellCommand?: string } {
+ const ripgrepRoot = command.replace(/[\\/][^\\/]+[\\/][^\\/]+$/, '')
+ if (command === 'rg' || ripgrepRoot === command) {
+ return {}
+ }
+ return {
+ wslShellCommand: `"$(d=$(wslpath -u ${quotePosixShell(ripgrepRoot)} 2>/dev/null); case "$(uname -m)" in aarch64|arm64) a=linux-arm64;; *) a=linux-x64;; esac; if [ -n "$d" ] && [ -x "$d/$a/rg" ]; then printf %s "$d/$a/rg"; else printf rg; fi)"`
+ }
+}
+
+export function resetBundledRipgrepPathCacheForTests(): void {
+ resolvedPaths.clear()
+}
+
+// Why no git/readdir fallback: VS Code ships the same contract — a bundled rg that cannot start
+// means a damaged install or security-software block, which a slower partial listing would hide.
+export function bundledRipgrepUnavailableError(): Error {
+ return new Error(
+ "Orca's bundled search tool (ripgrep) could not start. Reinstall Orca, or allow it in your security software."
+ )
+}
diff --git a/src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts b/src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts
index f64e9a37f83a..fb136c783e74 100644
--- a/src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts
+++ b/src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts
@@ -25,18 +25,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-mock-registry.ts b/src/main/runtime/orca-runtime-files-mock-registry.ts
index 62c1acef4b36..d66f7caa8003 100644
--- a/src/main/runtime/orca-runtime-files-mock-registry.ts
+++ b/src/main/runtime/orca-runtime-files-mock-registry.ts
@@ -6,6 +6,7 @@ import type * as Fs from 'node:fs'
import type * as FsPromises from 'node:fs/promises'
import type * as FilesystemAuth from '../ipc/filesystem-auth'
import type * as GitRunner from '../git/runner'
+import type * as BundledRipgrepPath from '../ripgrep/bundled-ripgrep-path'
// Mock signatures stay loose on payloads: suites assert call arguments and stub
// resolved values, so real fs/git result types would only fight the fixtures.
@@ -30,13 +31,10 @@ export const watchInWatcherProcessMock: Mock<
> = vi.fn()
export const closeWatcherInWatcherProcessMock: Mock<(rootPath: string) => Promise> =
vi.fn()
-export const checkRgAvailableMock: Mock<
- (searchPath?: string, wslDistro?: string) => Promise
-> = vi.fn()
export const getLocalGitOptionsForRegisteredWorktreeMock: Mock<
(store: unknown, worktreePath: string, repoPath?: string) => unknown
> = vi.fn()
-export const searchWithGitGrepMock: Mock<(...args: unknown[]) => Promise> = vi.fn()
+export const bundledRipgrepCommandMock: Mock<(options?: { wsl?: boolean }) => string> = vi.fn()
export const wslAwareSpawnMock: Mock<
(command: string, args: string[], options: unknown) => unknown
> = vi.fn()
@@ -93,18 +91,18 @@ export async function gitRunnerModuleMock() {
}
}
-export const rgAvailabilityMock = {
- checkRgAvailable: checkRgAvailableMock
+export async function bundledRipgrepPathModuleMock() {
+ const actual = await vi.importActual('../ripgrep/bundled-ripgrep-path')
+ return {
+ ...actual,
+ bundledRipgrepCommand: bundledRipgrepCommandMock
+ }
}
export const localWorktreeRuntimeOptionsMock = {
getLocalGitOptionsForRegisteredWorktree: getLocalGitOptionsForRegisteredWorktreeMock
}
-export const filesystemSearchGitMock = {
- searchWithGitGrep: searchWithGitGrepMock
-}
-
const SSH_FILESYSTEM_PROVIDER_UNAVAILABLE_MESSAGE =
'Remote connection dropped. Click Reconnect on the SSH target before retrying.'
@@ -131,12 +129,14 @@ export function resetRuntimeFileMocks(): void {
watchInWatcherProcessMock.mockReset()
closeWatcherInWatcherProcessMock.mockReset()
watchMock.mockReset()
- checkRgAvailableMock.mockReset()
- searchWithGitGrepMock.mockReset()
+ bundledRipgrepCommandMock.mockReset()
getSshFilesystemProviderMock.mockReset()
getLocalGitOptionsForRegisteredWorktreeMock.mockReset()
wslAwareSpawnMock.mockReset()
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({})
+ bundledRipgrepCommandMock.mockImplementation((options) =>
+ options?.wsl ? '/bundled/linux/rg' : '/bundled/rg'
+ )
readdirMock.mockResolvedValue([])
lstatMock.mockRejectedValue(enoent())
renameMock.mockResolvedValue(undefined)
diff --git a/src/main/runtime/orca-runtime-files-preview-budget.test.ts b/src/main/runtime/orca-runtime-files-preview-budget.test.ts
index d8c1086cbe68..9b0511db2811 100644
--- a/src/main/runtime/orca-runtime-files-preview-budget.test.ts
+++ b/src/main/runtime/orca-runtime-files-preview-budget.test.ts
@@ -26,18 +26,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-rename-authority.test.ts b/src/main/runtime/orca-runtime-files-rename-authority.test.ts
index 489a0981db2b..0f8c8f6cca77 100644
--- a/src/main/runtime/orca-runtime-files-rename-authority.test.ts
+++ b/src/main/runtime/orca-runtime-files-rename-authority.test.ts
@@ -26,18 +26,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-search.test.ts b/src/main/runtime/orca-runtime-files-search.test.ts
index 09cb185ea287..9edbb97cf6ec 100644
--- a/src/main/runtime/orca-runtime-files-search.test.ts
+++ b/src/main/runtime/orca-runtime-files-search.test.ts
@@ -1,11 +1,10 @@
import { describe, expect, it, vi } from 'vitest'
import { EventEmitter } from 'node:events'
import {
- checkRgAvailableMock,
+ bundledRipgrepCommandMock,
getLocalGitOptionsForRegisteredWorktreeMock,
getSshFilesystemProviderMock,
resolveAuthorizedPathMock,
- searchWithGitGrepMock,
wslAwareSpawnMock
} from './orca-runtime-files-mock-registry'
import {
@@ -28,17 +27,12 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
+vi.mock('../ripgrep/bundled-ripgrep-path', async () =>
+ (await import('./orca-runtime-files-mock-registry')).bundledRipgrepPathModuleMock()
)
vi.mock(
'../providers/ssh-filesystem-dispatch',
@@ -101,7 +95,6 @@ describe('RuntimeFileCommands', () => {
const { commands } = createRuntimeFileCommands({ resolveRuntimeFileTarget })
const child = createRuntimeSearchChild()
resolveAuthorizedPathMock.mockResolvedValue('/repo')
- checkRgAvailableMock.mockResolvedValue(true)
wslAwareSpawnMock.mockReturnValue(child)
const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
@@ -120,11 +113,16 @@ describe('RuntimeFileCommands', () => {
expect(child.stderr.listenerCount('data')).toBe(0)
expect(child.listenerCount('error')).toBe(0)
expect(child.listenerCount('close')).toBe(0)
- expect(checkRgAvailableMock).not.toHaveBeenCalled()
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: false })
+ expect(wslAwareSpawnMock).toHaveBeenCalledWith(
+ '/bundled/rg',
+ expect.any(Array),
+ expect.objectContaining({ cwd: '/repo' })
+ )
})
it.each(['error-first', 'close-first'] as const)(
- 'falls back once when runtime rg native launch failure is %s',
+ 'rejects with the bundled-ripgrep error when runtime rg native launch failure is %s',
async (order) => {
const resolveRuntimeFileTarget = vi.fn(async () => ({
worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
@@ -135,8 +133,6 @@ describe('RuntimeFileCommands', () => {
Object.defineProperty(child, 'pid', { value: undefined })
resolveAuthorizedPathMock.mockResolvedValue('/repo')
wslAwareSpawnMock.mockReturnValue(child)
- const fallback = { files: [], totalMatches: 0, truncated: false }
- searchWithGitGrepMock.mockResolvedValue(fallback)
const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
query: 'needle',
@@ -152,15 +148,14 @@ describe('RuntimeFileCommands', () => {
expect(() => child.emit('error', error)).not.toThrow()
}
- await expect(resultPromise).resolves.toBe(fallback)
- expect(searchWithGitGrepMock).toHaveBeenCalledTimes(1)
- expect(checkRgAvailableMock).not.toHaveBeenCalled()
+ await expect(resultPromise).rejects.toThrow("Orca's bundled search tool (ripgrep)")
+ expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
expect(child.listenerCount('error')).toBe(0)
expect(child.listenerCount('close')).toBe(0)
}
)
- it("falls back when a runtime native launcher exits outside ripgrep's contract", async () => {
+ it("rejects when a runtime native launcher exits outside ripgrep's contract", async () => {
const resolveRuntimeFileTarget = vi.fn(async () => ({
worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
executionHostId: 'local'
@@ -170,8 +165,6 @@ describe('RuntimeFileCommands', () => {
Object.defineProperty(child, 'pid', { value: 1 })
resolveAuthorizedPathMock.mockResolvedValue('/repo')
wslAwareSpawnMock.mockReturnValue(child)
- const fallback = { files: [], totalMatches: 0, truncated: false }
- searchWithGitGrepMock.mockResolvedValue(fallback)
const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
query: 'needle',
@@ -180,8 +173,7 @@ describe('RuntimeFileCommands', () => {
await flushRuntimeSearchMicrotasks()
child.emit('close', 127, null)
- await expect(resultPromise).resolves.toBe(fallback)
- expect(searchWithGitGrepMock).toHaveBeenCalledTimes(1)
+ await expect(resultPromise).rejects.toThrow("Orca's bundled search tool (ripgrep)")
})
it('routes runtime rg searches through the registered WSL project runtime', async () => {
@@ -197,7 +189,6 @@ describe('RuntimeFileCommands', () => {
const child = createRuntimeSearchChild()
Object.defineProperty(child, 'pid', { value: 1 })
resolveAuthorizedPathMock.mockResolvedValue('C:\\repo')
- checkRgAvailableMock.mockResolvedValue(true)
getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
wslAwareSpawnMock.mockReturnValue(child)
@@ -208,7 +199,7 @@ describe('RuntimeFileCommands', () => {
await Promise.resolve()
await Promise.resolve()
await Promise.resolve()
- child.emit('close', 127, null)
+ child.emit('close', 0, null)
await expect(resultPromise).resolves.toMatchObject({ files: [] })
expect(getLocalGitOptionsForRegisteredWorktreeMock).toHaveBeenCalledWith(
@@ -216,10 +207,9 @@ describe('RuntimeFileCommands', () => {
'C:\\repo',
'C:\\repo'
)
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
- expect(searchWithGitGrepMock).not.toHaveBeenCalled()
+ expect(bundledRipgrepCommandMock).toHaveBeenCalledWith({ wsl: true })
expect(wslAwareSpawnMock).toHaveBeenCalledWith(
- 'rg',
+ '/bundled/linux/rg',
expect.any(Array),
expect.objectContaining({
cwd: 'C:\\repo',
@@ -228,25 +218,6 @@ describe('RuntimeFileCommands', () => {
)
})
- it('keeps the runtime WSL preflight and falls back before starting real rg', async () => {
- const resolveRuntimeFileTarget = vi.fn(async () => ({
- worktree: { id: 'wt-1', repoId: 'repo-1', path: 'C:\\repo' },
- executionHostId: 'local'
- }))
- const { commands } = createRuntimeFileCommands({ resolveRuntimeFileTarget })
- const fallback = { files: [], totalMatches: 0, truncated: false }
- resolveAuthorizedPathMock.mockResolvedValue('C:\\repo')
- getLocalGitOptionsForRegisteredWorktreeMock.mockReturnValue({ wslDistro: 'Ubuntu' })
- checkRgAvailableMock.mockResolvedValue(false)
- searchWithGitGrepMock.mockResolvedValue(fallback)
-
- await expect(
- commands.searchRuntimeFiles('id:wt-1', { query: 'needle', maxResults: 10 })
- ).resolves.toBe(fallback)
- expect(checkRgAvailableMock).toHaveBeenCalledWith('C:\\repo', 'Ubuntu')
- expect(wslAwareSpawnMock).not.toHaveBeenCalled()
- })
-
it('keeps legacy SSH Quick Open replies within the frame-sized result bound', async () => {
const resolveRuntimeFileTarget = vi.fn(async () => ({
worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
diff --git a/src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts b/src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts
index 8f09e269f7fb..13e5bbb8682a 100644
--- a/src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts
+++ b/src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts
@@ -30,18 +30,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts b/src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts
index 4b9bad8a9c08..7a90429cfd1c 100644
--- a/src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts
+++ b/src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts
@@ -28,18 +28,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts b/src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts
index 7ecc58b12654..27a667ebfc66 100644
--- a/src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts
+++ b/src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts
@@ -29,18 +29,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts b/src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts
index 95c6121a51a5..f2266ae85265 100644
--- a/src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts
+++ b/src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts
@@ -26,18 +26,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts b/src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts
index d4f2f4e25ae5..f0bd96d9001f 100644
--- a/src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts
+++ b/src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts
@@ -26,18 +26,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts b/src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts
index 23c599801b8f..2d0766ffc505 100644
--- a/src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts
+++ b/src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts
@@ -24,18 +24,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/orca-runtime-files-watch-host-scope.test.ts b/src/main/runtime/orca-runtime-files-watch-host-scope.test.ts
index 4a18df05b842..0cf0f19acbbb 100644
--- a/src/main/runtime/orca-runtime-files-watch-host-scope.test.ts
+++ b/src/main/runtime/orca-runtime-files-watch-host-scope.test.ts
@@ -27,18 +27,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index e7f3172f7537..ae96a4a78df5 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -13,8 +13,11 @@ import {
ingestRgJsonLine
} from '../../shared/text-search'
import { parseWslPath, toWindowsWslPath } from '../wsl'
-import { checkRgAvailable } from '../ipc/rg-availability'
-import { searchWithGitGrep } from '../ipc/filesystem-search-git'
+import {
+ bundledRipgrepCommand,
+ bundledRipgrepUnavailableError,
+ bundledRipgrepWslSpawnOptions
+} from '../ripgrep/bundled-ripgrep-path'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
@@ -42,13 +45,7 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
1,
Math.min(options.maxResults ?? DEFAULT_SEARCH_MAX_RESULTS, DEFAULT_SEARCH_MAX_RESULTS)
)
- const wslInfo = parseWslPath(authorizedRootPath)
- if (
- (wslInfo || localGitOptions.wslDistro) &&
- !(await checkRgAvailable(authorizedRootPath, localGitOptions.wslDistro))
- ) {
- return searchWithGitGrep(authorizedRootPath, options, maxResults, localGitOptions)
- }
+ const wslDistroForOutput = parseWslPath(authorizedRootPath)?.distro ?? localGitOptions.wslDistro
return new Promise((resolvePromise) => {
const searchKey = `${this.host.getRuntimeId()}:${authorizedRootPath}`
@@ -64,8 +61,8 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
let processErrorObserved = false
let unavailableExitObserved = false
let child: ChildProcessHandle | null = null
- const transformAbsPath = wslInfo
- ? (p: string): string => toWindowsWslPath(p, wslInfo.distro)
+ const transformAbsPath = wslDistroForOutput
+ ? (p: string): string => (p.startsWith('/') ? toWindowsWslPath(p, wslDistroForOutput) : p)
: undefined
const finish = (result: SearchResult | PromiseLike): void => {
@@ -80,8 +77,7 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
resolvePromise(result)
}
const resolveOnce = (): void => finish(finalize(acc))
- const resolveWithoutRipgrep = (): void =>
- finish(searchWithGitGrep(authorizedRootPath, options, maxResults, localGitOptions))
+ const rejectUnavailable = (): void => finish(Promise.reject(bundledRipgrepUnavailableError()))
let killTimeout: ReturnType | null = null
const cleanupListeners = (): void => {
@@ -115,9 +111,11 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
}
}
- const nextChild = wslAwareSpawn('rg', rgArgs, {
+ const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
+ const nextChild = wslAwareSpawn(rgCommand, rgArgs, {
cwd: authorizedRootPath,
...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
+ ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
stdio: ['ignore', 'pipe', 'pipe']
})
child = nextChild
@@ -133,7 +131,7 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
const onError = (): void => {
processErrorObserved = true
if (child && isRipgrepUnavailableExit(child, null, null)) {
- resolveWithoutRipgrep()
+ rejectUnavailable()
return
}
resolveOnce()
@@ -142,11 +140,11 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
if (
child &&
isRipgrepUnavailableExit(child, code, signal, {
- classifyNativeLauncherExit: !(wslInfo || localGitOptions.wslDistro)
+ classifyNativeLauncherExit: true
})
) {
unavailableExitObserved = true
- resolveWithoutRipgrep()
+ rejectUnavailable()
return
}
const tail = lines.finish()
diff --git a/src/main/runtime/runtime-search-line-fragments.test.ts b/src/main/runtime/runtime-search-line-fragments.test.ts
index 701abd1327e0..67308d8667f0 100644
--- a/src/main/runtime/runtime-search-line-fragments.test.ts
+++ b/src/main/runtime/runtime-search-line-fragments.test.ts
@@ -1,10 +1,6 @@
import { describe, expect, it, vi } from 'vitest'
import { EventEmitter } from 'node:events'
-import {
- checkRgAvailableMock,
- resolveAuthorizedPathMock,
- wslAwareSpawnMock
-} from './orca-runtime-files-mock-registry'
+import { resolveAuthorizedPathMock, wslAwareSpawnMock } from './orca-runtime-files-mock-registry'
import {
createRuntimeFileCommands,
useRuntimeFileCommandsLifecycle
@@ -24,18 +20,10 @@ vi.mock('../ipc/filesystem-auth', async () =>
vi.mock('../git/runner', async () =>
(await import('./orca-runtime-files-mock-registry')).gitRunnerModuleMock()
)
-vi.mock(
- '../ipc/rg-availability',
- async () => (await import('./orca-runtime-files-mock-registry')).rgAvailabilityMock
-)
vi.mock(
'../ipc/local-worktree-runtime-options',
async () => (await import('./orca-runtime-files-mock-registry')).localWorktreeRuntimeOptionsMock
)
-vi.mock(
- '../ipc/filesystem-search-git',
- async () => (await import('./orca-runtime-files-mock-registry')).filesystemSearchGitMock
-)
vi.mock(
'../providers/ssh-filesystem-dispatch',
async () => (await import('./orca-runtime-files-mock-registry')).sshFilesystemDispatchMock
@@ -74,7 +62,6 @@ describe('RuntimeFileCommands', () => {
})
const child = createRuntimeSearchChild()
resolveAuthorizedPathMock.mockResolvedValue('/repo')
- checkRgAvailableMock.mockResolvedValue(true)
wslAwareSpawnMock.mockReturnValue(child)
const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
query: 'needle',
diff --git a/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts b/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
new file mode 100644
index 000000000000..f909c15b3f53
--- /dev/null
+++ b/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
@@ -0,0 +1,196 @@
+import { execFileSync, spawnSync } from 'node:child_process'
+import { randomUUID } from 'node:crypto'
+import { appendFileSync, mkdtempSync, readFileSync, rmSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'
+
+vi.mock('electron', () => ({ app: { getAppPath: () => process.cwd() } }))
+
+import { SshChannelMultiplexer } from './ssh-channel-multiplexer'
+import { SshConnection } from './ssh-connection'
+import { deployAndLaunchRelay } from './ssh-relay-deploy'
+import { BUNDLED_RIPGREP_VERSION } from '../../shared/bundled-ripgrep'
+import type { SshTarget } from '../../shared/ssh-types'
+
+// Why opt-in: needs Docker plus an sshd+node+git image WITHOUT rg (ORCA_REVIEW_SSH_NORG_IMAGE).
+const RUN = process.env.ORCA_REVIEW_SSH_BUNDLED_RG === '1'
+const REMOTE_REPO = '/tmp/orca-bundled-rg-repo'
+const TARGET = 'ios/Notion Web Clipper/AppDelegate.swift'
+const REPORT = process.env.ORCA_REVIEW_REPORT_FILE
+
+type Fixture = { containerName: string; identityFile: string; port: number; tempDir: string }
+
+function run(command: string, args: string[], timeout = 60_000): string {
+ return execFileSync(command, args, {
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'pipe'],
+ timeout
+ })
+ .toString()
+ .trim()
+}
+
+function dockerExec(fixture: Fixture, command: string): string {
+ return run('docker', ['exec', fixture.containerName, 'bash', '-lc', command], 120_000)
+}
+
+function report(line: string): void {
+ if (REPORT) {
+ appendFileSync(REPORT, `${line}\n`)
+ }
+}
+
+function startTarget(): Fixture {
+ const image = process.env.ORCA_REVIEW_SSH_NORG_IMAGE ?? 'orca-ssh-norg:latest'
+ const tempDir = mkdtempSync(join(tmpdir(), 'orca-bundled-rg-ssh-'))
+ const identityFile = join(tempDir, 'id_ed25519')
+ run('ssh-keygen', ['-t', 'ed25519', '-N', '', '-f', identityFile, '-q'])
+ const publicKey = readFileSync(`${identityFile}.pub`, 'utf8').trim()
+ const containerName = `orca-bundled-rg-${randomUUID().slice(0, 12)}`
+ run('docker', [
+ 'run',
+ '-d',
+ '--name',
+ containerName,
+ '-p',
+ '127.0.0.1::22',
+ '-e',
+ `AUTHORIZED_KEY=${publicKey}`,
+ image,
+ 'bash',
+ '-lc',
+ 'printf "%s\\n" "$AUTHORIZED_KEY" > /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys && exec /usr/sbin/sshd -D -e'
+ ])
+ const port = Number(run('docker', ['port', containerName, '22/tcp']).split(':').at(-1))
+ const fixture = { containerName, identityFile, port, tempDir }
+ // Why 25k files: past the 20,001-path listing cap, so only a real rg search finds the target.
+ dockerExec(
+ fixture,
+ [
+ `mkdir -p '${REMOTE_REPO}' && cd '${REMOTE_REPO}' && git init -q`,
+ `for d in $(seq 0 249); do mkdir -p a$d && (cd a$d && for i in $(seq 0 99); do : > f$i.txt; done); done`,
+ `mkdir -p 'ios/Notion Web Clipper' && echo 'class AppDelegate {}' > '${TARGET}'`,
+ 'git add -A >/dev/null'
+ ].join(' && ')
+ )
+ return fixture
+}
+
+function stopTarget(fixture: Fixture | null): void {
+ if (!fixture) {
+ return
+ }
+ spawnSync('docker', ['rm', '-f', fixture.containerName], { stdio: 'ignore', timeout: 30_000 })
+ rmSync(fixture.tempDir, { recursive: true, force: true })
+}
+
+function createConnection(fixture: Fixture): SshConnection {
+ const target: SshTarget = {
+ id: `bundled-rg-${randomUUID()}`,
+ label: 'Bundled ripgrep Docker SSH target',
+ source: 'manual',
+ host: '127.0.0.1',
+ port: fixture.port,
+ username: 'root',
+ identityFile: fixture.identityFile,
+ identitiesOnly: true
+ }
+ return new SshConnection(target, { onStateChange: vi.fn() })
+}
+
+async function waitFor(check: () => boolean, timeoutMs: number): Promise {
+ const startedAt = Date.now()
+ while (Date.now() - startedAt < timeoutMs) {
+ if (check()) {
+ return Date.now() - startedAt
+ }
+ await new Promise((resolve) => setTimeout(resolve, 250))
+ }
+ throw new Error(`condition not met within ${timeoutMs}ms`)
+}
+
+describe.skipIf(!RUN)('SSH relay bundled ripgrep', () => {
+ let fixture: Fixture | null = null
+
+ beforeAll(() => {
+ fixture = startTarget()
+ }, 300_000)
+
+ afterAll(() => {
+ stopTarget(fixture)
+ })
+
+ it('installs Orca ripgrep on a host without rg and serves Quick Open search with it', async () => {
+ const active = fixture!
+ expect(dockerExec(active, 'command -v rg || echo NO_RG')).toBe('NO_RG')
+ const platform = `linux-${dockerExec(active, 'uname -m') === 'aarch64' ? 'arm64' : 'x64'}`
+ const remoteBinary = `/root/.orca-remote/ripgrep/${BUNDLED_RIPGREP_VERSION}-${platform}/rg`
+ const connection = createConnection(active)
+ await connection.connect()
+ try {
+ const deployStartedAt = Date.now()
+ const deployed = await deployAndLaunchRelay(connection, undefined, 60)
+ const deployMs = Date.now() - deployStartedAt
+ const installMs = await waitFor(
+ () => dockerExec(active, `test -x '${remoteBinary}' && echo yes || echo no`) === 'yes',
+ 60_000
+ )
+ report(
+ `SSH deploy_ms=${deployMs} rg_installed_after_launch_ms=${installMs} platform=${platform}`
+ )
+ expect(dockerExec(active, `'${remoteBinary}' --version | head -1`)).toContain('ripgrep')
+ expect(dockerExec(active, "ps -eo args | grep '[r]elay.js --detached'")).toContain(
+ `--ripgrep-path ${remoteBinary}`
+ )
+ expect(
+ dockerExec(active, `ls /root/.orca-remote/ripgrep/${BUNDLED_RIPGREP_VERSION}-${platform}`)
+ ).toBe('rg')
+
+ const mux = new SshChannelMultiplexer(deployed.transport)
+ try {
+ await mux.request('session.registerRoot', { rootPath: REMOTE_REPO })
+ const searchStartedAt = Date.now()
+ const files = await mux.request('fs.listFiles', {
+ rootPath: REMOTE_REPO,
+ searchQuery: 'AppDelegate',
+ maxResults: 33
+ })
+ report(
+ `SSH quick_open_search_ms=${Date.now() - searchStartedAt} result=${JSON.stringify(files)}`
+ )
+ expect(files).toEqual([TARGET])
+
+ const textStartedAt = Date.now()
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: relay fs.search resolves a SearchResult.
+ const text = (await mux.request('fs.search', {
+ query: 'class AppDelegate',
+ rootPath: REMOTE_REPO
+ })) as { files: { relativePath: string }[] }
+ report(`SSH text_search_ms=${Date.now() - textStartedAt} files=${text.files.length}`)
+ expect(text.files.map((file) => file.relativePath)).toEqual([TARGET])
+ } finally {
+ mux.dispose()
+ }
+ } finally {
+ await connection.disconnect()
+ }
+ }, 300_000)
+
+ it('reuses the installed binary on the next deploy without re-uploading', async () => {
+ const active = fixture!
+ const before = dockerExec(active, 'stat -c %Y /root/.orca-remote/ripgrep/*/rg')
+ const connection = createConnection(active)
+ await connection.connect()
+ try {
+ await deployAndLaunchRelay(connection, undefined, 60)
+ await new Promise((resolve) => setTimeout(resolve, 3_000))
+ expect(dockerExec(active, 'stat -c %Y /root/.orca-remote/ripgrep/*/rg')).toBe(before)
+ expect(dockerExec(active, 'ls -A /root/.orca-remote/ripgrep | grep -c upload || true')).toBe(
+ '0'
+ )
+ } finally {
+ await connection.disconnect()
+ }
+ }, 300_000)
+})
diff --git a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
index 7fad908a59a9..6ff1a94909c8 100644
--- a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
@@ -1,4 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
+import type * as RelayRipgrepInstallModule from './ssh-relay-ripgrep-install'
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
@@ -48,6 +49,12 @@ vi.mock('./ssh-remote-node-resolution', () => ({
resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
}))
+// Why: the post-launch ripgrep install is fire-and-forget and would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
+ ...(await importOriginal()),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+}))
+
vi.mock('./ssh-relay-versioned-install', () => ({
readLocalFullVersion: vi.fn().mockReturnValue('0.1.0+abcdef012345'),
computeRemoteRelayDir: (home: string, v: string) => `${home}/.orca-remote/relay-${v}`,
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index 895f2d4b5794..83af9c9854bc 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -1,4 +1,5 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
+import type * as RelayRipgrepInstallModule from './ssh-relay-ripgrep-install'
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
@@ -52,6 +53,12 @@ vi.mock('./ssh-remote-node-resolution', () => ({
resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
}))
+// Why: the fire-and-forget ripgrep install would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
+ ...(await importOriginal()),
+ ensureRemoteBundledRipgrep: vi.fn()
+}))
+
// Why: the versioned-install modules shell out for install state, locking,
// and GC. Stub them so deploy tests need no real SSH connection.
vi.mock('./ssh-relay-versioned-install', () => ({
@@ -85,6 +92,7 @@ import { execCommand, waitForSentinel } from './ssh-relay-deploy-helpers'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
import { isRelayAlreadyInstalled } from './ssh-relay-versioned-install'
import { acquireInstallLock } from './ssh-relay-install-lock'
+import { ensureRemoteBundledRipgrep } from './ssh-relay-ripgrep-install'
import * as DeployTiming from './ssh-relay-deploy-timing'
import type { SshConnection } from './ssh-connection'
import type * as SshRemoteNodeResolution from './ssh-remote-node-resolution'
@@ -134,6 +142,22 @@ function queueLaunchNamespaceAndDeadSocketProbe(): void {
vi.mocked(execCommand).mockResolvedValueOnce('').mockResolvedValueOnce('DEAD')
}
+function queueFreshLinuxDeploy(): void {
+ vi.mocked(execCommand)
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
+ .mockResolvedValueOnce('/home/user')
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
+ queueLaunchNamespaceAndDeadSocketProbe()
+ vi.mocked(execCommand).mockResolvedValueOnce('READY')
+}
+
+function detachedLaunchCommand(conn: SshConnection): string | undefined {
+ return vi
+ .mocked(conn.exec)
+ .mock.calls.map(([cmd]) => cmd as string)
+ .find((cmd) => cmd.includes('--detached'))
+}
+
describe('deployAndLaunchRelay', () => {
beforeEach(() => {
vi.clearAllMocks()
@@ -207,12 +231,7 @@ describe('deployAndLaunchRelay', () => {
it('resolves the remote node path once per deploy', async () => {
const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- mockExecCommand.mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
- mockExecCommand.mockResolvedValueOnce('/home/user')
- mockExecCommand.mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- queueLaunchNamespaceAndDeadSocketProbe()
- mockExecCommand.mockResolvedValueOnce('READY')
+ queueFreshLinuxDeploy()
await deployAndLaunchRelay(conn)
@@ -483,40 +502,30 @@ describe('deployAndLaunchRelay', () => {
it('defaults fresh relays to keep-alive-until-reset without rollout artifacts', async () => {
const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- mockExecCommand.mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
- mockExecCommand.mockResolvedValueOnce('/home/user')
- mockExecCommand.mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- queueLaunchNamespaceAndDeadSocketProbe()
- mockExecCommand.mockResolvedValueOnce('READY')
+ queueFreshLinuxDeploy()
await deployAndLaunchRelay(conn)
- const launchCommand = vi
- .mocked(conn.exec)
- .mock.calls.map(([cmd]) => cmd as string)
- .find((cmd) => cmd.includes('--detached'))
+ const launchCommand = detachedLaunchCommand(conn)
expect(launchCommand).toContain(`--grace-time ${DEFAULT_SSH_RELAY_GRACE_PERIOD_SECONDS}`)
+ expect(launchCommand).toContain(
+ "--ripgrep-path '/home/user/.orca-remote/ripgrep/15.0.0-linux-x64/rg'"
+ )
+ await vi.waitFor(() =>
+ expect(ensureRemoteBundledRipgrep).toHaveBeenCalledWith(conn, expect.anything(), '/home/user')
+ )
expect(launchCommand).not.toContain('--pty-source-credit-v1')
expect(launchCommand).not.toContain('.pty-source-credit-policy')
})
it('allows an unlimited SSH disconnect grace window', async () => {
const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- mockExecCommand.mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
- mockExecCommand.mockResolvedValueOnce('/home/user')
- mockExecCommand.mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- queueLaunchNamespaceAndDeadSocketProbe()
- mockExecCommand.mockResolvedValueOnce('READY')
+ queueFreshLinuxDeploy()
await deployAndLaunchRelay(conn, undefined, 0, 'target-a')
- const launchCommand = vi
- .mocked(conn.exec)
- .mock.calls.map(([cmd]) => cmd as string)
- .find((cmd) => cmd.includes('--detached'))
+ const launchCommand = detachedLaunchCommand(conn)
expect(launchCommand).toContain('--grace-time 0')
expect(launchCommand).not.toContain('--pty-source-credit-v1')
@@ -525,19 +534,11 @@ describe('deployAndLaunchRelay', () => {
it('clamps configured SSH disconnect grace to the seven-day maximum', async () => {
const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- mockExecCommand.mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
- mockExecCommand.mockResolvedValueOnce('/home/user')
- mockExecCommand.mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- queueLaunchNamespaceAndDeadSocketProbe()
- mockExecCommand.mockResolvedValueOnce('READY')
+ queueFreshLinuxDeploy()
await deployAndLaunchRelay(conn, undefined, MAX_SSH_RELAY_GRACE_PERIOD_SECONDS + 1, 'target-a')
- const launchCommand = vi
- .mocked(conn.exec)
- .mock.calls.map(([cmd]) => cmd as string)
- .find((cmd) => cmd.includes('--detached'))
+ const launchCommand = detachedLaunchCommand(conn)
expect(launchCommand).toContain(`--grace-time ${MAX_SSH_RELAY_GRACE_PERIOD_SECONDS}`)
})
@@ -545,11 +546,7 @@ describe('deployAndLaunchRelay', () => {
it('uses a content-hashed versioned remote install directory', async () => {
const conn = makeMockConnection()
const mockExecCommand = vi.mocked(execCommand)
- mockExecCommand.mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
- mockExecCommand.mockResolvedValueOnce('/home/user')
- mockExecCommand.mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- queueLaunchNamespaceAndDeadSocketProbe()
- mockExecCommand.mockResolvedValueOnce('READY')
+ queueFreshLinuxDeploy()
await deployAndLaunchRelay(conn)
@@ -777,6 +774,9 @@ describe('deployAndLaunchRelay', () => {
'"C:/Users/me user/.orca-remote/relay-0.1.0+abcdef012345/agent-hooks/orca-relay-'
)
expect(launchScript).toContain('--endpoint-dir')
+ expect(launchScript).toContain(
+ '--ripgrep-path "C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe"'
+ )
expect(launchScript).not.toContain('--pty-source-credit-v1')
expect(launchScript).not.toContain('.pty-source-credit-policy')
expect(launchScript).not.toContain('\\\\.\\pipe\\agent-hooks')
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index 903d318e8723..ec8de5ea31bc 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -24,6 +24,7 @@ import {
} from './ssh-relay-install-namespace'
import { createRelayInstallMarkerFileName } from './ssh-relay-install-marker'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
+import { ensureRemoteBundledRipgrep, remoteRipgrepLayout } from './ssh-relay-ripgrep-install'
import {
readLocalFullVersion,
computeRemoteRelayDir,
@@ -586,7 +587,8 @@ async function deployAndLaunchRelayAttempt(
nodePath,
graceTimeSeconds,
relayInstanceId,
- deploySignal
+ deploySignal,
+ remoteRipgrepLayout(hostPlatform, remoteHome)?.binaryPath
)
launchLivenessObserved = true
} finally {
@@ -645,6 +647,8 @@ async function deployAndLaunchRelayAttempt(
})
)
.catch(() => {})
+ // Why after launch: the relay re-checks --ripgrep-path per spawn, so the one-time upload never delays connect.
+ .then(() => ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome))
return {
transport: launched.transport,
@@ -1680,7 +1684,8 @@ async function launchRelay(
nodePath: string,
graceTimeSeconds?: number,
relayInstanceId?: string,
- signal?: AbortSignal
+ signal?: AbortSignal,
+ ripgrepPath?: string
): Promise<{
transport: MultiplexerTransport
nodePath: string
@@ -1733,7 +1738,8 @@ async function launchRelay(
graceTime,
activePipeMarkerPath,
reconnectFallback: fallbackEndpoint,
- credentialFile
+ credentialFile,
+ ripgrepPath
},
signal
)
@@ -1799,7 +1805,8 @@ async function launchRelay(
// Why: the relay derives its hook endpoint dir from the socket path; pin it back under the relay dir when the socket moved to /tmp.
const endpointDirArg =
sockFile === defaultSockFile ? '' : ` --endpoint-dir ${shellEscape(endpointDir)}`
- const launchCmd = `cd ${escapedDir} && nohup ${escapedNode} relay.js --detached --grace-time ${graceTime} --sock-path ${shellEscape(sockFile)}${endpointDirArg} --credential-file ${shellEscape(credentialFile)} --log-file ${shellEscape(logFile)} > ${shellEscape(logFile)} 2>&1 ${shellEscape(logFile)} 2>&1 {})
launchChannel.on('error', () => {})
@@ -1991,6 +1998,7 @@ type WindowsRelayLaunchOptions = {
graceTime: number
activePipeMarkerPath: string
credentialFile: string
+ ripgrepPath?: string
} & WindowsRelayEndpoint & {
reconnectFallback?: WindowsRelayEndpoint
}
@@ -2073,7 +2081,8 @@ async function launchWindowsRelay(
launchOpts.graceTime,
logFile,
errFile,
- launchOpts.credentialFile
+ launchOpts.credentialFile,
+ launchOpts.ripgrepPath
),
{ signal }
)
@@ -2165,7 +2174,8 @@ function windowsRelayLaunchCommand(
graceTime: number,
logFile: string,
errFile: string,
- credentialFile: string
+ credentialFile: string,
+ ripgrepPath?: string
): string {
const relayScript = joinRemotePath(hostPlatform, remoteDir, 'relay.js')
// Why: Windows sshd kills the exec channel's process tree on close; WMI re-parents the detached relay to survive.
@@ -2185,6 +2195,7 @@ function windowsRelayLaunchCommand(
// Why: --log-file owns rotation; shell redirects still capture pre-JS boot/crash output.
'--log-file',
quoted(logFile),
+ ...(ripgrepPath ? ['--ripgrep-path', quoted(ripgrepPath)] : []),
`1>${quoted(logFile)}`,
`2>${quoted(errFile)}`
].join(' ')
diff --git a/src/main/ssh/ssh-relay-native-deps-install.test.ts b/src/main/ssh/ssh-relay-native-deps-install.test.ts
index ec6d404cadaa..0ac5a0ea7877 100644
--- a/src/main/ssh/ssh-relay-native-deps-install.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-install.test.ts
@@ -1,5 +1,6 @@
// Why: regression coverage for the install-probe contract — the "node-pty is not available" bug shipped because every guard layer was silent.
+import type * as RelayRipgrepInstallModule from './ssh-relay-ripgrep-install'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RelayInstallMarkerModule from './ssh-relay-install-marker'
@@ -42,6 +43,12 @@ vi.mock('./ssh-relay-install-marker', async (importOriginal) => ({
createRelayInstallMarkerFileName: () => '.sftp-namespace-00000000000000000000000000000000'
}))
+// Why: the post-launch ripgrep install would consume this file's queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
+ ...(await importOriginal()),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+}))
+
vi.mock('./ssh-relay-versioned-install', () => ({
readLocalFullVersion: vi.fn().mockReturnValue('0.1.0+testhash'),
computeRemoteRelayDir: (home: string, v: string) => `${home}/.orca-remote/relay-${v}`,
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
new file mode 100644
index 000000000000..bde1935bafe5
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -0,0 +1,254 @@
+import { execFileSync } from 'node:child_process'
+import {
+ cpSync,
+ existsSync,
+ mkdirSync,
+ mkdtempSync,
+ readdirSync,
+ rmSync,
+ statSync,
+ truncateSync,
+ writeFileSync
+} from 'node:fs'
+import { tmpdir } from 'node:os'
+import { dirname, join } from 'node:path'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+
+const { execCommandMock, uploadRelayDirectoryMock, resolveBundledRipgrepPathMock } = vi.hoisted(
+ () => ({
+ execCommandMock: vi.fn(),
+ uploadRelayDirectoryMock: vi.fn(),
+ resolveBundledRipgrepPathMock: vi.fn()
+ })
+)
+
+vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execCommandMock }))
+vi.mock('./ssh-relay-install-transfers', () => ({ uploadRelayDirectory: uploadRelayDirectoryMock }))
+vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
+ resolveBundledRipgrepPath: resolveBundledRipgrepPathMock
+}))
+
+import type { SshConnection } from './ssh-connection'
+import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { decodeRemotePowerShellScript } from './ssh-remote-powershell'
+import { ensureRemoteBundledRipgrep, remoteRipgrepLayout } from './ssh-relay-ripgrep-install'
+
+const LINUX = getRemoteHostPlatform('linux-x64')
+const WINDOWS = getRemoteHostPlatform('win32-x64')
+
+function connection(usesSystemSsh = false): SshConnection {
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the install only asks the connection which transport it uses; exec/upload are mocked.
+ return { usesSystemSshTransport: () => usesSystemSsh } as unknown as SshConnection
+}
+
+function execScripts(): string[] {
+ return execCommandMock.mock.calls.map(([, command]) => {
+ const text = String(command)
+ return text.includes('-EncodedCommand') ? decodeRemotePowerShellScript(text) : text
+ })
+}
+
+describe('ensureRemoteBundledRipgrep', () => {
+ let localDir: string
+ let localBinary: string
+
+ beforeEach(() => {
+ execCommandMock.mockReset()
+ uploadRelayDirectoryMock.mockReset().mockResolvedValue(undefined)
+ localDir = mkdtempSync(join(tmpdir(), 'orca-local-rg-'))
+ localBinary = join(localDir, 'linux-x64', 'rg')
+ mkdirSync(dirname(localBinary))
+ writeFileSync(localBinary, 'x'.repeat(1234))
+ resolveBundledRipgrepPathMock.mockReset().mockReturnValue(localBinary)
+ vi.spyOn(console, 'warn').mockImplementation(() => {})
+ vi.spyOn(console, 'log').mockImplementation(() => {})
+ })
+
+ afterEach(() => {
+ rmSync(localDir, { recursive: true, force: true })
+ vi.restoreAllMocks()
+ })
+
+ it('keys the cache on ripgrep version and platform, not the relay version', () => {
+ expect(remoteRipgrepLayout(LINUX, '/home/me')?.binaryPath).toBe(
+ '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'
+ )
+ expect(remoteRipgrepLayout(WINDOWS, 'C:/Users/me user')?.binaryPath).toBe(
+ 'C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe'
+ )
+ })
+
+ it('skips the upload in one round trip when the binary is already installed', async () => {
+ execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')).resolves.toBe(
+ 'present'
+ )
+
+ expect(execCommandMock).toHaveBeenCalledTimes(1)
+ expect(execScripts()[0]).toContain("-x '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'")
+ expect(uploadRelayDirectoryMock).not.toHaveBeenCalled()
+ })
+
+ it('uploads into a private stage, then verifies, chmods and renames into place', async () => {
+ execCommandMock
+ .mockResolvedValueOnce('ORCA-RG-STAGED\n')
+ .mockResolvedValueOnce('ORCA-RG-INSTALLED\n')
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')).resolves.toBe(
+ 'installed'
+ )
+
+ const [, source, payloadDir, host, options] = uploadRelayDirectoryMock.mock.calls[0]
+ expect(source).toBe(dirname(localBinary))
+ expect(payloadDir).toMatch(
+ /^\/home\/me\/\.orca-remote\/ripgrep\/\.upload-[0-9a-f]{16}\/payload$/
+ )
+ expect(host).toBe(LINUX)
+ // Why: a chrooted SFTP subsystem must resolve the stage through its marker, like relay uploads.
+ expect(options.sftpNamespace?.homeRelativePath).toBe(payloadDir.slice('/home/me/'.length))
+ const promote = execScripts()[1]
+ expect(promote).toContain('wc -c')
+ expect(promote).toContain('"1234"')
+ expect(promote).toContain('chmod 755')
+ expect(promote).toContain(
+ `mv -f '${payloadDir}/rg' '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'`
+ )
+ })
+
+ it('reports an upload failure instead of throwing, and removes its stage', async () => {
+ execCommandMock.mockResolvedValueOnce('ORCA-RG-STAGED\n').mockResolvedValueOnce('')
+ uploadRelayDirectoryMock.mockRejectedValueOnce(new Error('sftp: permission denied'))
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')).resolves.toBe(
+ 'failed'
+ )
+
+ expect(execScripts()[1]).toMatch(/^rm -rf '\/home\/me\/\.orca-remote\/ripgrep\/\.upload-/)
+ })
+
+ it('reports a failed size verification', async () => {
+ execCommandMock
+ .mockResolvedValueOnce('ORCA-RG-STAGED\n')
+ .mockResolvedValueOnce('ORCA-RG-FAILED\n')
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')).resolves.toBe(
+ 'failed'
+ )
+ })
+
+ it('does nothing when this install has no binary for the host', async () => {
+ resolveBundledRipgrepPathMock.mockReturnValue(null)
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')).resolves.toBe(
+ 'unavailable'
+ )
+ expect(execCommandMock).not.toHaveBeenCalled()
+ })
+
+ it('installs rg.exe on Windows hosts with PowerShell and no SFTP namespace mapping', async () => {
+ resolveBundledRipgrepPathMock.mockReturnValue(localBinary)
+ execCommandMock
+ .mockResolvedValueOnce('ORCA-RG-STAGED\r\n')
+ .mockResolvedValueOnce('ORCA-RG-INSTALLED\r\n')
+
+ await expect(
+ ensureRemoteBundledRipgrep(connection(), WINDOWS, 'C:/Users/me user')
+ ).resolves.toBe('installed')
+
+ expect(execCommandMock.mock.calls.every(([, , opts]) => opts.wrapCommand === false)).toBe(true)
+ const [probe, promote] = execScripts()
+ expect(probe).toContain(
+ "Test-Path -LiteralPath 'C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe'"
+ )
+ expect(promote).toContain('Move-Item -LiteralPath $src -Destination $bin')
+ expect(promote).toContain('.Length -eq 1234')
+ expect(uploadRelayDirectoryMock.mock.calls[0][4].sftpNamespace).toBeUndefined()
+ })
+
+ it('skips the SFTP namespace mapping on the system-ssh transport', async () => {
+ execCommandMock
+ .mockResolvedValueOnce('ORCA-RG-STAGED\n')
+ .mockResolvedValueOnce('ORCA-RG-INSTALLED\n')
+
+ await ensureRemoteBundledRipgrep(connection(true), LINUX, '/home/me')
+
+ expect(uploadRelayDirectoryMock.mock.calls[0][4].sftpNamespace).toBeUndefined()
+ })
+})
+
+// Debian and Ubuntu point /bin/sh at dash; run both so a bashism cannot pass here and fail on a host.
+const SHELLS = ['/bin/sh', '/bin/dash'].filter((shell) => existsSync(shell))
+
+describe.runIf(process.platform !== 'win32').each(SHELLS)(
+ 'remote ripgrep install scripts (%s)',
+ (shell) => {
+ let home: string
+ let localDir: string
+ let localBinary: string
+
+ beforeEach(() => {
+ home = mkdtempSync(join(tmpdir(), 'orca-remote-home-'))
+ localDir = mkdtempSync(join(tmpdir(), 'orca-local-rg-'))
+ localBinary = join(localDir, 'linux-x64', 'rg')
+ mkdirSync(dirname(localBinary))
+ writeFileSync(localBinary, '#!/bin/sh\necho ripgrep 15.0.0\n')
+ resolveBundledRipgrepPathMock.mockReset().mockReturnValue(localBinary)
+ execCommandMock
+ .mockReset()
+ .mockImplementation(async (_conn: unknown, command: string) =>
+ execFileSync(shell, ['-c', command], { encoding: 'utf-8' })
+ )
+ uploadRelayDirectoryMock
+ .mockReset()
+ .mockImplementation(async (_conn: unknown, source: string, target: string) => {
+ cpSync(source, target, { recursive: true })
+ })
+ vi.spyOn(console, 'log').mockImplementation(() => {})
+ vi.spyOn(console, 'warn').mockImplementation(() => {})
+ })
+
+ afterEach(() => {
+ rmSync(home, { recursive: true, force: true })
+ rmSync(localDir, { recursive: true, force: true })
+ vi.restoreAllMocks()
+ })
+
+ const installed = (): string => join(home, '.orca-remote', 'ripgrep', '15.0.0-linux-x64', 'rg')
+ const cacheEntries = (): string[] => readdirSync(join(home, '.orca-remote', 'ripgrep'))
+
+ it('installs an executable binary once and leaves no stage behind', async () => {
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('installed')
+ expect(statSync(installed()).mode & 0o111).not.toBe(0)
+ expect(execFileSync(installed(), { encoding: 'utf-8' })).toContain('ripgrep 15.0.0')
+ expect(cacheEntries()).toEqual(['15.0.0-linux-x64'])
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('present')
+ expect(uploadRelayDirectoryMock).toHaveBeenCalledTimes(1)
+ })
+
+ it('never publishes a truncated upload', async () => {
+ uploadRelayDirectoryMock.mockImplementation(
+ async (_conn: unknown, source: string, target: string) => {
+ cpSync(source, target, { recursive: true })
+ truncateSync(join(target, 'rg'), 5)
+ }
+ )
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('failed')
+ expect(existsSync(installed())).toBe(false)
+ expect(cacheEntries()).toEqual([])
+ })
+
+ it('sweeps an abandoned stage older than an hour but keeps a live one', async () => {
+ const cache = join(home, '.orca-remote', 'ripgrep')
+ mkdirSync(join(cache, '.upload-stale', 'payload'), { recursive: true })
+ mkdirSync(join(cache, '.upload-live', 'payload'), { recursive: true })
+ execFileSync('touch', ['-t', '200001010000', join(cache, '.upload-stale')])
+
+ await ensureRemoteBundledRipgrep(connection(), LINUX, home)
+
+ expect(cacheEntries().sort()).toEqual(['.upload-live', '15.0.0-linux-x64'])
+ })
+ }
+)
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
new file mode 100644
index 000000000000..0c85a8808502
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -0,0 +1,230 @@
+/**
+ * Installs Orca's own ripgrep on an SSH host so remote Quick Open and text search do not depend
+ * on the user having `rg`. The binary lives at
+ * `~/.orca-remote/ripgrep/-/rg[.exe]`, a sibling of the
+ * `relay-` dirs keyed on the ripgrep version alone, so a relay upgrade never re-uploads it.
+ *
+ * Uploads land in a private `.upload-` stage and are renamed into place only after a size
+ * check, so an interrupted or concurrent deploy never leaves a truncated binary at the final path.
+ * Every failure is reported, never thrown: the relay falls back to PATH `rg` and its git/readdir
+ * chain, which is exactly what it did before this binary existed.
+ */
+import { randomBytes } from 'node:crypto'
+import { statSync } from 'node:fs'
+import { dirname } from 'node:path'
+import type { SshConnection } from './ssh-connection'
+import { RELAY_REMOTE_DIR } from './relay-protocol'
+import { execCommand } from './ssh-relay-deploy-helpers'
+import { uploadRelayDirectory } from './ssh-relay-install-transfers'
+import {
+ createRelayUploadStageNamespace,
+ makeRelayUploadStageDirectoryCommand,
+ relayUploadStageSftpNamespaceMapping,
+ type RelayUploadStageNamespace
+} from './ssh-relay-install-namespace'
+import { shellEscape } from './ssh-connection-utils'
+import { powerShellCommand, powerShellLiteral } from './ssh-remote-powershell'
+import {
+ assertSafeRemotePathSegment,
+ isWindowsRemoteHost,
+ joinRemotePath,
+ remoteDirname,
+ type RemoteHostPlatform
+} from './ssh-remote-platform'
+import { removeRemoteTreeCommand } from './ssh-remote-commands'
+import { resolveBundledRipgrepPath } from '../ripgrep/bundled-ripgrep-path'
+import {
+ BUNDLED_RIPGREP_VERSION,
+ bundledRipgrepBinaryName,
+ toBundledRipgrepPlatform,
+ type BundledRipgrepPlatform
+} from '../../shared/bundled-ripgrep'
+
+/** Sibling of `relay-`, `orcad-` and `native/`; owned by no version GC. */
+export const REMOTE_RIPGREP_CACHE_DIR_NAME = 'ripgrep'
+const UPLOAD_STAGE_PREFIX = '.upload-'
+// Why an hour: long enough that no live upload of ~5 MB is still writing, short enough to drain crashes.
+const STALE_UPLOAD_STAGE_MINUTES = 60
+const PRESENT = 'ORCA-RG-PRESENT'
+const STAGED = 'ORCA-RG-STAGED'
+const INSTALLED = 'ORCA-RG-INSTALLED'
+
+export type RemoteRipgrepLayout = {
+ platform: BundledRipgrepPlatform
+ cacheDir: string
+ binaryPath: string
+}
+
+export type RemoteRipgrepInstallOutcome = 'present' | 'installed' | 'unavailable' | 'failed'
+
+export function remoteRipgrepLayout(
+ host: RemoteHostPlatform,
+ remoteHome: string
+): RemoteRipgrepLayout | null {
+ const platform = toBundledRipgrepPlatform(host.os, host.arch)
+ if (!platform) {
+ return null
+ }
+ const entryName = `${BUNDLED_RIPGREP_VERSION}-${platform}`
+ assertSafeRemotePathSegment(entryName, host.pathFlavor)
+ const cacheDir = joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR, REMOTE_RIPGREP_CACHE_DIR_NAME)
+ return {
+ platform,
+ cacheDir,
+ binaryPath: joinRemotePath(host, cacheDir, entryName, bundledRipgrepBinaryName(platform))
+ }
+}
+
+/** Make sure the host has Orca's ripgrep at `remoteRipgrepLayout().binaryPath`; never throws. */
+export async function ensureRemoteBundledRipgrep(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ remoteHome: string,
+ options: { signal?: AbortSignal } = {}
+): Promise {
+ try {
+ const layout = remoteRipgrepLayout(host, remoteHome)
+ const localBinary = layout ? resolveBundledRipgrepPath(layout.platform) : null
+ if (!layout || !localBinary) {
+ console.warn(
+ `[ssh-relay] No bundled ripgrep for ${host.relayPlatform}; the relay will use rg from PATH`
+ )
+ return 'unavailable'
+ }
+ return await installRemoteRipgrep(conn, host, layout, localBinary, options.signal)
+ } catch (error) {
+ console.warn(
+ '[ssh-relay] Bundled ripgrep install failed; the relay will use rg from PATH:',
+ error instanceof Error ? error.message : String(error)
+ )
+ return 'failed'
+ }
+}
+
+async function installRemoteRipgrep(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ layout: RemoteRipgrepLayout,
+ localBinary: string,
+ signal: AbortSignal | undefined
+): Promise {
+ const exec = (command: string): Promise =>
+ execCommand(conn, command, { wrapCommand: !isWindowsRemoteHost(host), signal })
+ const stageName = `${UPLOAD_STAGE_PREFIX}${randomBytes(8).toString('hex')}`
+ const stageDir = joinRemotePath(host, layout.cacheDir, stageName)
+ const stageNamespace = createRelayUploadStageNamespace(
+ `${RELAY_REMOTE_DIR}/${REMOTE_RIPGREP_CACHE_DIR_NAME}/${stageName}`
+ )
+
+ // Why one round trip: the warm path (already installed) must cost a single exec.
+ const probe = await exec(probeOrStageCommand(host, layout, stageDir, stageNamespace))
+ if (probe.includes(PRESENT)) {
+ return 'present'
+ }
+ if (!probe.includes(STAGED)) {
+ throw new Error(`could not stage upload: ${probe.trim().slice(0, 200)}`)
+ }
+
+ let promoted = false
+ try {
+ await uploadRelayDirectory(
+ conn,
+ dirname(localBinary),
+ joinRemotePath(host, stageDir, 'payload'),
+ host,
+ {
+ signal,
+ sftpNamespace: usesOrcaOwnedSftp(conn, host)
+ ? relayUploadStageSftpNamespaceMapping(stageNamespace, host, stageDir)
+ : undefined
+ }
+ )
+ const size = statSync(localBinary).size
+ const result = await exec(promoteCommand(host, layout, stageDir, size))
+ promoted = true
+ if (!result.includes(INSTALLED)) {
+ throw new Error(`upload did not verify: ${result.trim().slice(0, 200)}`)
+ }
+ console.log(`[ssh-relay] Installed bundled ripgrep at ${layout.binaryPath} (${size} bytes)`)
+ return 'installed'
+ } finally {
+ if (!promoted) {
+ // Why best-effort: the next deploy's probe also sweeps stale stages.
+ await execCommand(conn, removeRemoteTreeCommand(host, stageDir), {
+ wrapCommand: !isWindowsRemoteHost(host)
+ }).catch(() => {})
+ }
+ }
+}
+
+/** Split shell/SFTP namespaces only arise on POSIX hosts reached over the bundled ssh2 SFTP. */
+function usesOrcaOwnedSftp(conn: SshConnection, host: RemoteHostPlatform): boolean {
+ if (isWindowsRemoteHost(host)) {
+ return false
+ }
+ return typeof conn.usesSystemSshTransport === 'function' ? !conn.usesSystemSshTransport() : true
+}
+
+export function probeOrStageCommand(
+ host: RemoteHostPlatform,
+ layout: RemoteRipgrepLayout,
+ stageDir: string,
+ stageNamespace: RelayUploadStageNamespace
+): string {
+ if (!isWindowsRemoteHost(host)) {
+ const bin = shellEscape(layout.binaryPath)
+ const sweep = `find ${shellEscape(layout.cacheDir)} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
+ const stage = makeRelayUploadStageDirectoryCommand(stageNamespace, host, stageDir)
+ return `if [ -f ${bin} ] && [ -x ${bin} ]; then echo ${PRESENT}; else ${sweep}; ${stage} && echo ${STAGED}; fi`
+ }
+ return powerShellCommand(
+ [
+ `if (Test-Path -LiteralPath ${powerShellLiteral(layout.binaryPath)} -PathType Leaf) { '${PRESENT}' } else {`,
+ `Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -Filter '${UPLOAD_STAGE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-${STALE_UPLOAD_STAGE_MINUTES}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
+ `$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(joinRemotePath(host, stageDir, 'payload'))} -ErrorAction Stop`,
+ `'${STAGED}' }`
+ ].join('\n')
+ )
+}
+
+/** Verify the staged size, then rename into place; a concurrent winner's binary also counts. */
+export function promoteCommand(
+ host: RemoteHostPlatform,
+ layout: RemoteRipgrepLayout,
+ stageDir: string,
+ expectedBytes: number
+): string {
+ const staged = joinRemotePath(
+ host,
+ stageDir,
+ 'payload',
+ bundledRipgrepBinaryName(layout.platform)
+ )
+ if (!isWindowsRemoteHost(host)) {
+ const src = shellEscape(staged)
+ const bin = shellEscape(layout.binaryPath)
+ const bytes = String(Math.trunc(expectedBytes))
+ return [
+ `if [ "$(wc -c < ${src} 2>/dev/null | tr -d ' \\t')" = "${bytes}" ] && chmod 755 ${src} && mkdir -p ${shellEscape(remoteDirname(layout.binaryPath, host))} && mv -f ${src} ${bin}; then r=${INSTALLED};`,
+ `elif [ -f ${bin} ] && [ -x ${bin} ]; then r=${INSTALLED}; else r=ORCA-RG-FAILED; fi;`,
+ `rm -rf ${shellEscape(stageDir)}; echo "$r"`
+ ].join(' ')
+ }
+ return powerShellCommand(
+ [
+ `$src = ${powerShellLiteral(staged)}`,
+ `$bin = ${powerShellLiteral(layout.binaryPath)}`,
+ "$r = 'ORCA-RG-FAILED'",
+ 'try {',
+ `if ((Get-Item -LiteralPath $src -ErrorAction Stop).Length -eq ${Math.trunc(expectedBytes)}) {`,
+ `$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(remoteDirname(layout.binaryPath, host))} -ErrorAction Stop`,
+ // Why no overwrite: a running relay may hold the installed rg.exe open.
+ 'if (-not (Test-Path -LiteralPath $bin -PathType Leaf)) { Move-Item -LiteralPath $src -Destination $bin -ErrorAction Stop }',
+ `$r = '${INSTALLED}'`,
+ '}',
+ `} catch { if (Test-Path -LiteralPath $bin -PathType Leaf) { $r = '${INSTALLED}' } }`,
+ `finally { Remove-Item -LiteralPath ${powerShellLiteral(stageDir)} -Recurse -Force -ErrorAction SilentlyContinue }`,
+ '$r'
+ ].join('\n')
+ )
+}
diff --git a/src/relay/fs-handler-list-files.ts b/src/relay/fs-handler-list-files.ts
index 7860d6dca29f..80426ab000b1 100644
--- a/src/relay/fs-handler-list-files.ts
+++ b/src/relay/fs-handler-list-files.ts
@@ -31,6 +31,11 @@ import {
RipgrepUnavailableError
} from '../shared/ripgrep-process-availability'
import { QuickOpenPathRanker } from '../shared/quick-open-path-search'
+import { buildRelayCommandEnv } from './relay-command-env'
+import {
+ resolveRelayRipgrepCommand,
+ retryRipgrepOnPathAfterLaunchFailure
+} from './relay-bundled-ripgrep'
export const LIST_FILES_TIMEOUT_MS = 25_000
@@ -102,10 +107,12 @@ export function listFilesWithRg(
// are evaluated against rg's working directory, not the absolute
// search target. Without cwd, nested-worktree exclusions silently
// stop working.
+ const command = resolveRelayRipgrepCommand()
let child: ChildProcess
try {
- child = spawn('rg', ['--no-messages', ...args], {
+ child = spawn(command, ['--no-messages', ...args], {
cwd: rootPath,
+ env: buildRelayCommandEnv(),
stdio: ['ignore', 'pipe', 'pipe'],
windowsHide: true
})
@@ -155,8 +162,14 @@ export function listFilesWithRg(
if (launchFailureCheck) {
return
}
- launchFailureCheck = isRipgrepUnavailableAfterLaunchFailure(rootPath).then(
- (unavailable) => {
+ launchFailureCheck = retryRipgrepOnPathAfterLaunchFailure(command, rootPath, error).then(
+ async (retryOnPath) => {
+ if (retryOnPath) {
+ // Why: runPass retries a launch failure once, and the retry resolves to PATH rg.
+ rejectPass(new RipgrepLaunchFailureError('bundled rg failed to start'))
+ return
+ }
+ const unavailable = await isRipgrepUnavailableAfterLaunchFailure(rootPath)
rejectPass(unavailable ? new RipgrepUnavailableError() : error)
}
)
diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts
index 7d501e56d660..0acb2e65aee6 100644
--- a/src/relay/fs-handler-utils.ts
+++ b/src/relay/fs-handler-utils.ts
@@ -2,7 +2,7 @@
* Pure helpers and child-process search utilities extracted from fs-handler.ts.
*
* Why: oxlint max-lines requires .ts files to stay under 300 lines.
- * These functions depend only on their arguments (plus `rg` being on PATH),
+ * These functions depend only on their arguments (plus a launchable `rg`),
* so they are straightforward to test independently.
*/
import { SearchSubprocessLineAccumulator } from '../shared/search-subprocess-lines'
@@ -24,6 +24,11 @@ import {
killSpawnedRipgrepProcess,
RipgrepUnavailableError
} from '../shared/ripgrep-process-availability'
+import { buildRelayCommandEnv } from './relay-command-env'
+import {
+ resolveRelayRipgrepCommand,
+ retryRipgrepOnPathAfterLaunchFailure
+} from './relay-bundled-ripgrep'
// ─── Constants ───────────────────────────────────────────────────────
@@ -110,11 +115,14 @@ export function searchWithRg(
// which would leak out of the `new Promise` executor and leave the
// promise forever pending. Treat a synchronous throw as a clean
// "no results" fallback, the same way an async 'error' event is handled.
+ const command = resolveRelayRipgrepCommand()
let child: ReturnType
try {
- child = spawn('rg', rgArgs, {
+ child = spawn(command, rgArgs, {
cwd: rootPath,
- stdio: ['ignore', 'pipe', 'pipe']
+ env: buildRelayCommandEnv(),
+ stdio: ['ignore', 'pipe', 'pipe'],
+ windowsHide: true
})
} catch {
resolve(finalize(acc))
@@ -123,9 +131,9 @@ export function searchWithRg(
let killTimeout: ReturnType
- function resolveOnce(): void {
+ function settle(): boolean {
if (resolved) {
- return
+ return false
}
resolved = true
lines.clear()
@@ -140,38 +148,35 @@ export function searchWithRg(
errorObserved: processErrorObserved,
unavailableExitObserved
})
- resolve(finalize(acc))
+ return true
}
- function rejectUnavailable(): void {
- if (resolved) {
- return
+ function resolveOnce(): void {
+ if (settle()) {
+ resolve(finalize(acc))
}
- resolved = true
- lines.clear()
- clearTimeout(killTimeout)
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
- child.off('error', handleError)
- child.off('close', handleClose)
- absorbPendingRipgrepSpawnError(child, {
- errorObserved: processErrorObserved,
- unavailableExitObserved
- })
- reject(new RipgrepUnavailableError())
}
- function settleLaunchFailure(): void {
+ function settleLaunchFailure(error?: unknown): void {
if (launchFailureCheck) {
return
}
- launchFailureCheck = isRipgrepUnavailableAfterLaunchFailure(rootPath).then((unavailable) => {
- if (unavailable) {
- rejectUnavailable()
- } else {
- resolveOnce()
+ launchFailureCheck = retryRipgrepOnPathAfterLaunchFailure(command, rootPath, error).then(
+ async (retryOnPath) => {
+ if (retryOnPath) {
+ // Why: a launch failure produced no output, so rerunning on PATH rg loses nothing.
+ if (settle()) {
+ searchWithRg(rootPath, query, opts).then(resolve, reject)
+ }
+ return
+ }
+ if (!(await isRipgrepUnavailableAfterLaunchFailure(rootPath))) {
+ resolveOnce()
+ } else if (settle()) {
+ reject(new RipgrepUnavailableError())
+ }
}
- })
+ )
}
function processLine(line: string): void {
@@ -189,10 +194,10 @@ export function searchWithRg(
/* drain */
}
- function handleError(): void {
+ function handleError(error: Error): void {
processErrorObserved = true
if (isRipgrepUnavailableExit(child, null, null)) {
- settleLaunchFailure()
+ settleLaunchFailure(error)
return
}
resolveOnce()
diff --git a/src/relay/relay-bundled-ripgrep.test.ts b/src/relay/relay-bundled-ripgrep.test.ts
new file mode 100644
index 000000000000..70fca466573a
--- /dev/null
+++ b/src/relay/relay-bundled-ripgrep.test.ts
@@ -0,0 +1,130 @@
+import { EventEmitter } from 'node:events'
+import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import type { ChildProcess } from 'node:child_process'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+
+const { spawnMock } = vi.hoisted(() => ({ spawnMock: vi.fn() }))
+vi.mock('node:child_process', () => ({ spawn: spawnMock }))
+vi.mock('./relay-diagnostic-log', () => ({ relayLogLine: vi.fn() }))
+
+import {
+ configureRelayBundledRipgrep,
+ resolveRelayRipgrepCommand,
+ retryRipgrepOnPathAfterLaunchFailure
+} from './relay-bundled-ripgrep'
+import { listFilesWithRg } from './fs-handler-list-files'
+import { searchWithRg } from './fs-handler-utils'
+
+type MockChild = ChildProcess & { stdout: EventEmitter; stderr: EventEmitter }
+
+function createProcess(pid: number | undefined): MockChild {
+ const child = Object.assign(new EventEmitter(), {
+ stdout: Object.assign(new EventEmitter(), { setEncoding: vi.fn() }),
+ stderr: new EventEmitter(),
+ kill: vi.fn(),
+ exitCode: null,
+ signalCode: null
+ })
+ Object.defineProperty(child, 'pid', { configurable: true, value: pid })
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: test double exposes only the ChildProcess members these spawners use.
+ return child as unknown as MockChild
+}
+
+function failToLaunch(child: MockChild, code: string): void {
+ setImmediate(() => child.emit('error', Object.assign(new Error(code), { code })))
+}
+
+function succeedWith(child: MockChild, stdout: string): void {
+ setImmediate(() => {
+ child.stdout.emit('data', stdout)
+ child.emit('close', 0, null)
+ })
+}
+
+describe('relay bundled ripgrep', () => {
+ let dir: string
+ let bundled: string
+
+ beforeEach(() => {
+ spawnMock.mockReset()
+ dir = mkdtempSync(join(tmpdir(), 'relay-rg-'))
+ bundled = join(dir, 'rg')
+ writeFileSync(bundled, '')
+ configureRelayBundledRipgrep(bundled)
+ })
+
+ afterEach(() => {
+ configureRelayBundledRipgrep(undefined)
+ rmSync(dir, { recursive: true, force: true })
+ })
+
+ it('prefers the bundled binary and uses PATH rg when none is configured or present', () => {
+ expect(resolveRelayRipgrepCommand()).toBe(bundled)
+ configureRelayBundledRipgrep(join(dir, 'not-uploaded-yet', 'rg'))
+ expect(resolveRelayRipgrepCommand()).toBe('rg')
+ configureRelayBundledRipgrep(undefined)
+ expect(resolveRelayRipgrepCommand()).toBe('rg')
+ })
+
+ it('does not blame the binary when the spawn cwd is what is missing', async () => {
+ await expect(
+ retryRipgrepOnPathAfterLaunchFailure(bundled, join(dir, 'missing-cwd'))
+ ).resolves.toBe(false)
+ expect(resolveRelayRipgrepCommand()).toBe(bundled)
+ await expect(retryRipgrepOnPathAfterLaunchFailure('rg', dir)).resolves.toBe(false)
+ })
+
+ it('retries a file listing on PATH rg after the bundled binary fails to launch', async () => {
+ const commands: string[] = []
+ spawnMock.mockImplementation((command: string) => {
+ commands.push(command)
+ if (command === bundled) {
+ const child = createProcess(undefined)
+ failToLaunch(child, 'EACCES')
+ return child
+ }
+ const child = createProcess(42)
+ succeedWith(child, 'src/index.ts\n')
+ return child
+ })
+
+ await expect(listFilesWithRg(dir, [], { maxResults: 10 })).resolves.toEqual(['src/index.ts'])
+ expect(commands[0]).toBe(bundled)
+ expect(commands.slice(1).every((command) => command === 'rg')).toBe(true)
+ expect(resolveRelayRipgrepCommand()).toBe('rg')
+ })
+
+ it('retries a text search on PATH rg with the relay command env and a hidden window', async () => {
+ const hit = JSON.stringify({
+ type: 'match',
+ data: {
+ path: { text: join(dir, 'a.ts') },
+ lines: { text: 'needle\n' },
+ line_number: 1,
+ submatches: [{ start: 0, end: 6 }]
+ }
+ })
+ spawnMock.mockImplementation((command: string) => {
+ if (command === bundled) {
+ const child = createProcess(undefined)
+ failToLaunch(child, 'ENOENT')
+ return child
+ }
+ const child = createProcess(42)
+ succeedWith(child, `${hit}\n`)
+ return child
+ })
+
+ const result = await searchWithRg(dir, 'needle', { maxResults: 10 })
+
+ expect(result.totalMatches).toBe(1)
+ expect(spawnMock.mock.calls.map(([command]) => command)).toEqual([bundled, 'rg'])
+ for (const [, , options] of spawnMock.mock.calls) {
+ expect(options.windowsHide).toBe(true)
+ expect(options.env.PATH ?? options.env.Path).toContain('.cargo')
+ }
+ expect(resolveRelayRipgrepCommand()).toBe('rg')
+ })
+})
diff --git a/src/relay/relay-bundled-ripgrep.ts b/src/relay/relay-bundled-ripgrep.ts
new file mode 100644
index 000000000000..b110fca5e16e
--- /dev/null
+++ b/src/relay/relay-bundled-ripgrep.ts
@@ -0,0 +1,57 @@
+/**
+ * Which `rg` the relay spawns. The SSH deploy uploads Orca's own ripgrep to a version-keyed cache
+ * and passes its path via `--ripgrep-path`; PATH `rg` (and then the git/readdir fallbacks) stays
+ * the answer whenever that binary is absent or cannot launch on this host.
+ */
+import { existsSync } from 'node:fs'
+import {
+ isRipgrepSpawnCwdUsable,
+ isTransientRipgrepSpawnError
+} from '../shared/ripgrep-process-availability'
+import { relayLogLine } from './relay-diagnostic-log'
+
+export const PATH_RIPGREP_COMMAND = 'rg'
+
+let bundledRipgrepPath: string | null = null
+let bundledRipgrepUnusable = false
+
+export function configureRelayBundledRipgrep(path: string | undefined): void {
+ bundledRipgrepPath = path ? path : null
+ bundledRipgrepUnusable = false
+}
+
+export function resolveRelayRipgrepCommand(): string {
+ // Why check existence per spawn: the deploy uploads rg after the relay starts, so it can appear mid-session.
+ if (bundledRipgrepPath && !bundledRipgrepUnusable && existsSync(bundledRipgrepPath)) {
+ return bundledRipgrepPath
+ }
+ return PATH_RIPGREP_COMMAND
+}
+
+/**
+ * Called when `command` failed to launch. Resolves true when it was the bundled binary and the
+ * caller should retry once on PATH `rg`; later spawns then skip the bundled binary.
+ */
+export async function retryRipgrepOnPathAfterLaunchFailure(
+ command: string,
+ cwd: string,
+ error?: unknown
+): Promise {
+ if (command === PATH_RIPGREP_COMMAND || command !== bundledRipgrepPath) {
+ return false
+ }
+ // Why: fd/process pressure says nothing about the binary, so it must not disable it for the relay's life.
+ if (isTransientRipgrepSpawnError(error)) {
+ return false
+ }
+ // Why: spawn reports a missing cwd as ENOENT too; that says nothing about the binary.
+ if (!(await isRipgrepSpawnCwdUsable(cwd))) {
+ return false
+ }
+ // Why only while the file exists: a removed binary is re-checked per spawn, a noexec/EACCES one never works.
+ if (existsSync(command) && !bundledRipgrepUnusable) {
+ bundledRipgrepUnusable = true
+ relayLogLine(`[relay] Bundled ripgrep at ${command} failed to launch; using rg from PATH`)
+ }
+ return true
+}
diff --git a/src/relay/relay-launch-options.test.ts b/src/relay/relay-launch-options.test.ts
index bfcbf9143fcb..23ec375a3ce2 100644
--- a/src/relay/relay-launch-options.test.ts
+++ b/src/relay/relay-launch-options.test.ts
@@ -46,6 +46,19 @@ describe('relay launch options', () => {
})
})
+ it('reads the bundled ripgrep path, which older launch commands omit', () => {
+ expect(
+ parseRelayLaunchOptions([
+ 'node',
+ 'relay.js',
+ '--detached',
+ '--ripgrep-path',
+ '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'
+ ]).ripgrepPath
+ ).toBe('/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg')
+ expect(parseRelayLaunchOptions(['node', 'relay.js', '--detached']).ripgrepPath).toBe(undefined)
+ })
+
it('keeps zero grace unlimited and ignores invalid replacements', () => {
expect(
parseRelayLaunchOptions(['node', 'relay.js', '--grace-time', '0', '--grace-time', '-1'])
diff --git a/src/relay/relay-launch-options.ts b/src/relay/relay-launch-options.ts
index 95fafae818ad..f9e057ce55f7 100644
--- a/src/relay/relay-launch-options.ts
+++ b/src/relay/relay-launch-options.ts
@@ -22,6 +22,8 @@ export type RelayLaunchOptions = {
endpointDir?: string
logFile?: string
credentialFile?: string
+ /** Orca's uploaded ripgrep; absent when an older client launched this relay or no upload happened. */
+ ripgrepPath?: string
}
export function parseRelayLaunchOptions(argv: string[]): RelayLaunchOptions {
@@ -33,6 +35,7 @@ export function parseRelayLaunchOptions(argv: string[]): RelayLaunchOptions {
let endpointDir: string | undefined
let logFile: string | undefined
let credentialFile: string | undefined
+ let ripgrepPath: string | undefined
for (let i = 2; i < argv.length; i++) {
if (argv[i] === '--grace-time' && argv[i + 1]) {
const parsed = Number.parseInt(argv[i + 1], 10)
@@ -59,6 +62,9 @@ export function parseRelayLaunchOptions(argv: string[]): RelayLaunchOptions {
} else if (argv[i] === '--credential-file' && argv[i + 1]) {
credentialFile = argv[i + 1]
i++
+ } else if (argv[i] === '--ripgrep-path' && argv[i + 1]) {
+ ripgrepPath = argv[i + 1]
+ i++
}
}
if (!sockPath) {
@@ -72,7 +78,8 @@ export function parseRelayLaunchOptions(argv: string[]): RelayLaunchOptions {
sockPath,
endpointDir,
logFile,
- credentialFile
+ credentialFile,
+ ripgrepPath
}
}
diff --git a/src/relay/relay.ts b/src/relay/relay.ts
index 083f9a3da69a..fd30961c330a 100644
--- a/src/relay/relay.ts
+++ b/src/relay/relay.ts
@@ -7,6 +7,7 @@ import { runRelayConnectChannel } from './relay-connect-channel'
import { runRelayOrcaCliChannel } from './relay-orca-cli-channel'
import { runRelayDaemon } from './relay-daemon'
import { relayLogLine } from './relay-diagnostic-log'
+import { configureRelayBundledRipgrep } from './relay-bundled-ripgrep'
async function main(): Promise {
const options = parseRelayLaunchOptions(process.argv)
@@ -23,6 +24,7 @@ async function main(): Promise {
)
return
}
+ configureRelayBundledRipgrep(options.ripgrepPath)
// Why no read here: the daemon publishes its credential itself, after it owns the socket.
await runRelayDaemon(options)
}
diff --git a/src/shared/bundled-ripgrep.test.ts b/src/shared/bundled-ripgrep.test.ts
new file mode 100644
index 000000000000..40f59ced9f62
--- /dev/null
+++ b/src/shared/bundled-ripgrep.test.ts
@@ -0,0 +1,17 @@
+import { createRequire } from 'node:module'
+import { describe, expect, it } from 'vitest'
+import { BUNDLED_RIPGREP_PACKAGE_BIN_DIR, BUNDLED_RIPGREP_PLATFORMS } from './bundled-ripgrep'
+
+const requireFromRoot = createRequire(`${process.cwd()}/`)
+
+describe('bundled ripgrep platforms', () => {
+ it('packages exactly the layout the runtime resolves', () => {
+ const packaging: {
+ BUNDLED_RIPGREP_PLATFORMS: string[]
+ RIPGREP_PACKAGE_BIN_DIR: string
+ } = requireFromRoot('./config/bundled-ripgrep-resources.cjs')
+
+ expect(packaging.BUNDLED_RIPGREP_PLATFORMS).toEqual([...BUNDLED_RIPGREP_PLATFORMS])
+ expect(packaging.RIPGREP_PACKAGE_BIN_DIR).toBe(BUNDLED_RIPGREP_PACKAGE_BIN_DIR)
+ })
+})
diff --git a/src/shared/bundled-ripgrep.ts b/src/shared/bundled-ripgrep.ts
new file mode 100644
index 000000000000..8b938407890a
--- /dev/null
+++ b/src/shared/bundled-ripgrep.ts
@@ -0,0 +1,26 @@
+import { RELAY_BUILD_PLATFORMS, type RelayBuildPlatform } from './relay-artifacts'
+
+/**
+ * Orca ships its own ripgrep for every relay platform (from @vscode/ripgrep-universal), so local,
+ * WSL, and SSH searches never depend on the user having installed `rg`.
+ * See docs/reference/bundled-ripgrep.md.
+ */
+export const BUNDLED_RIPGREP_VERSION = '15.0.0'
+export const BUNDLED_RIPGREP_PLATFORMS: readonly RelayBuildPlatform[] = RELAY_BUILD_PLATFORMS
+export type BundledRipgrepPlatform = RelayBuildPlatform
+/** Directory under the packaged resources root holding `/rg[.exe]`. */
+export const BUNDLED_RIPGREP_RESOURCE_DIR = 'ripgrep'
+/** Package directory holding the same layout in development checkouts. */
+export const BUNDLED_RIPGREP_PACKAGE_BIN_DIR = 'node_modules/@vscode/ripgrep-universal/bin'
+
+export function bundledRipgrepBinaryName(platform: BundledRipgrepPlatform): string {
+ return platform.startsWith('win32-') ? 'rg.exe' : 'rg'
+}
+
+export function toBundledRipgrepPlatform(
+ platform: string,
+ arch: string
+): BundledRipgrepPlatform | null {
+ const candidate = `${platform}-${arch}`
+ return BUNDLED_RIPGREP_PLATFORMS.find((entry) => entry === candidate) ?? null
+}
diff --git a/src/shared/child-process/__fixtures__/child-process-import-allowlist.txt b/src/shared/child-process/__fixtures__/child-process-import-allowlist.txt
index add641f04db1..34853643def5 100644
--- a/src/shared/child-process/__fixtures__/child-process-import-allowlist.txt
+++ b/src/shared/child-process/__fixtures__/child-process-import-allowlist.txt
@@ -91,7 +91,6 @@ src/main/github/gh-utils.ts
src/main/hooks.ts
src/main/ipc/app.ts
src/main/ipc/developer-permissions.ts
-src/main/ipc/filesystem-list-files-git-fallback.ts
src/main/ipc/filesystem-list-files.ts
src/main/ipc/filesystem-watcher-wsl.ts
src/main/ipc/filesystem/filesystem-handler-context.ts
diff --git a/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt b/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
index a59e3be4d7cd..d010c2846446 100644
--- a/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
+++ b/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
@@ -54,7 +54,6 @@ main/zsh-startup-hook-pty-harness.ts
relay/agent-exec-handler.ts
relay/external-automations-handler.ts
relay/fs-handler-git-fallback.ts
-relay/fs-handler-utils.ts
relay/fs-list-files-fallback-chain.ts
relay/git-handler.ts
relay/pty-shell-utils.ts
diff --git a/src/shared/child-process/child-process-import-boundary.test.ts b/src/shared/child-process/child-process-import-boundary.test.ts
index 1d6027202e01..95a314000685 100644
--- a/src/shared/child-process/child-process-import-boundary.test.ts
+++ b/src/shared/child-process/child-process-import-boundary.test.ts
@@ -29,7 +29,7 @@ const CHILD_PROCESS_IMPORT_ALLOWLIST: readonly string[] = readFileSync(
* May only ever be DECREASED, and only by migrating a file off
* `node:child_process`. Raising it is never the fix.
*/
-const DIRECT_IMPORTER_PIN = 154
+const DIRECT_IMPORTER_PIN = 153
const IMPORT_PATTERN =
/(?:from\s+['"]node:child_process['"]|from\s+['"]child_process['"]|require\(\s*['"]node:child_process['"]|require\(\s*['"]child_process['"])/
diff --git a/src/shared/child-process/windows-console-visibility.test.ts b/src/shared/child-process/windows-console-visibility.test.ts
index a15f98b288b0..e88fe386c8ce 100644
--- a/src/shared/child-process/windows-console-visibility.test.ts
+++ b/src/shared/child-process/windows-console-visibility.test.ts
@@ -34,7 +34,7 @@ const ALLOWLIST: readonly string[] = readAllowlist(
* the allowlist does not bound this: a swap (one file fixed and delisted, one
* new file added with its entry) satisfies both membership assertions.
*/
-const UNHIDDEN_SPAWNER_PIN = 64
+const UNHIDDEN_SPAWNER_PIN = 63
const CHILD_PROCESS_IMPORT =
/from\s+['"](?:node:)?child_process['"]|require\(\s*['"](?:node:)?child_process['"]/
From 263a63b9eb44c4f0da81f4b694d7662454042c6c Mon Sep 17 00:00:00 2001
From: Neil
Date: Tue, 22 Sep 2026 22:19:01 -0700
Subject: [PATCH 02/25] fix(search): address bundled ripgrep review findings
- Key the SSH ripgrep cache on the binary's content hash; a package bump is the only update step
- glibc verifier: read arch tokens below the slice root and accept static ELFs (arm64 release blocker)
- Ship ripgrep/PCRE2/musl license notices; bundle rg with orcad
- Packaged builds never spawn a bare rg; report fd pressure as transient
- SSH: install rg before sweep/GC, size-validate installs, back off instead of disabling on launch failure
- Scope Dependabot to @vscode/ripgrep-universal; revert unrelated lockfile churn
---
.github/dependabot.yml | 11 +
config/bundled-ripgrep-resources.cjs | 16 +-
config/electron-builder.config.cjs | 4 +-
config/scripts/build-orcad.mjs | 12 ++
config/scripts/verify-linux-glibc-floor.cjs | 17 +-
.../scripts/verify-linux-glibc-floor.test.mjs | 13 +-
docs/reference/bundled-ripgrep.md | 28 ++-
pnpm-lock.yaml | 6 +-
resources/licenses/ripgrep/LICENSE-MIT | 21 ++
resources/licenses/ripgrep/MUSL-COPYRIGHT | 193 ++++++++++++++++++
resources/licenses/ripgrep/PCRE2-LICENCE.md | 104 ++++++++++
resources/licenses/ripgrep/README.md | 8 +
resources/licenses/ripgrep/UNLICENSE | 24 +++
src/main/ipc/filesystem-list-files.test.ts | 17 ++
src/main/ipc/filesystem-list-files.ts | 8 +-
.../filesystem/filesystem-search-handlers.ts | 8 +-
src/main/ripgrep/bundled-ripgrep-path.test.ts | 13 +-
src/main/ripgrep/bundled-ripgrep-path.ts | 53 ++++-
...ile-commands-search-local-runtime-files.ts | 8 +-
.../ssh-relay-bundled-ripgrep.docker.test.ts | 13 +-
src/main/ssh/ssh-relay-deploy.test.ts | 12 +-
src/main/ssh/ssh-relay-deploy.ts | 17 +-
.../ssh/ssh-relay-ripgrep-install.test.ts | 32 ++-
src/main/ssh/ssh-relay-ripgrep-install.ts | 44 ++--
src/relay/relay-bundled-ripgrep.test.ts | 18 ++
src/relay/relay-bundled-ripgrep.ts | 20 +-
src/relay/relay-launch-options.test.ts | 4 +-
src/shared/bundled-ripgrep.ts | 1 -
28 files changed, 635 insertions(+), 90 deletions(-)
create mode 100644 .github/dependabot.yml
create mode 100644 resources/licenses/ripgrep/LICENSE-MIT
create mode 100644 resources/licenses/ripgrep/MUSL-COPYRIGHT
create mode 100644 resources/licenses/ripgrep/PCRE2-LICENCE.md
create mode 100644 resources/licenses/ripgrep/README.md
create mode 100644 resources/licenses/ripgrep/UNLICENSE
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000000..2ba3a32159b8
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+version: 2
+updates:
+ # Why only ripgrep: the bundled rg ships in every artifact and to SSH remotes, and a bump is a
+ # one-line pin change (docs/reference/bundled-ripgrep.md). Other dependencies stay manual.
+ - package-ecosystem: npm
+ directory: /
+ schedule:
+ interval: monthly
+ allow:
+ - dependency-name: '@vscode/ripgrep-universal'
+ open-pull-requests-limit: 1
diff --git a/config/bundled-ripgrep-resources.cjs b/config/bundled-ripgrep-resources.cjs
index a44ff21bb228..41ccdbffc71a 100644
--- a/config/bundled-ripgrep-resources.cjs
+++ b/config/bundled-ripgrep-resources.cjs
@@ -17,11 +17,15 @@ function ripgrepBinaryName(platform) {
return platform.startsWith('win32-') ? 'rg.exe' : 'rg'
}
-const bundledRipgrepExtraResource = {
- from: RIPGREP_PACKAGE_BIN_DIR,
- to: 'ripgrep',
- filter: BUNDLED_RIPGREP_PLATFORMS.map((platform) => `${platform}/**`)
-}
+const bundledRipgrepExtraResources = [
+ {
+ from: RIPGREP_PACKAGE_BIN_DIR,
+ to: 'ripgrep',
+ filter: BUNDLED_RIPGREP_PLATFORMS.map((platform) => `${platform}/**`)
+ },
+ // Why: the binaries statically link PCRE2 (and musl on Linux), whose licenses require the notice.
+ { from: 'resources/licenses/ripgrep', to: 'ripgrep/licenses' }
+]
// Why: codesign would try to sign the Linux/Windows builds; they are inert data on macOS.
const bundledRipgrepMacSignIgnore = ['/ripgrep/(linux|win32)-']
@@ -54,7 +58,7 @@ module.exports = {
BUNDLED_RIPGREP_PLATFORMS,
RIPGREP_PACKAGE_BIN_DIR,
assertBundledRipgrepInstalled,
- bundledRipgrepExtraResource,
+ bundledRipgrepExtraResources,
bundledRipgrepMacSignIgnore,
finalizePackagedRipgrep
}
diff --git a/config/electron-builder.config.cjs b/config/electron-builder.config.cjs
index 2bae1e1f7cc7..84c31376833a 100644
--- a/config/electron-builder.config.cjs
+++ b/config/electron-builder.config.cjs
@@ -21,7 +21,7 @@ const {
const { verifyPackagedPluginResources } = require('./scripts/verify-packaged-plugin-resources.cjs')
const {
assertBundledRipgrepInstalled,
- bundledRipgrepExtraResource,
+ bundledRipgrepExtraResources,
bundledRipgrepMacSignIgnore,
finalizePackagedRipgrep
} = require('./bundled-ripgrep-resources.cjs')
@@ -111,7 +111,7 @@ const emojiShortcodeDatasetResource = {
}
const commonExtraResources = [
relayExtraResource,
- bundledRipgrepExtraResource,
+ ...bundledRipgrepExtraResources,
bundledPluginResources,
skillFreshnessResources,
emojiShortcodeDatasetResource
diff --git a/config/scripts/build-orcad.mjs b/config/scripts/build-orcad.mjs
index 69c12f0ecc95..89b79cddca71 100644
--- a/config/scripts/build-orcad.mjs
+++ b/config/scripts/build-orcad.mjs
@@ -83,6 +83,18 @@ copyFileSync(AGENT_BROWSER_SOURCE, AGENT_BROWSER_OUTPUT)
if (process.platform !== 'win32') {
chmodSync(AGENT_BROWSER_OUTPUT, 0o755)
}
+// Why: orcad has no Electron resourcesPath; the rg resolver looks under its install root instead.
+const RIPGREP_PLATFORM = `${platform()}-${arch()}`
+const RIPGREP_NAME = process.platform === 'win32' ? 'rg.exe' : 'rg'
+const RIPGREP_OUTPUT_DIR = join(OUT_DIR, 'ripgrep', RIPGREP_PLATFORM)
+mkdirSync(RIPGREP_OUTPUT_DIR, { recursive: true })
+copyFileSync(
+ join(ROOT, 'node_modules', '@vscode', 'ripgrep-universal', 'bin', RIPGREP_PLATFORM, RIPGREP_NAME),
+ join(RIPGREP_OUTPUT_DIR, RIPGREP_NAME)
+)
+if (process.platform !== 'win32') {
+ chmodSync(join(RIPGREP_OUTPUT_DIR, RIPGREP_NAME), 0o755)
+}
/** Why one call per child and not one `outdir` build: esbuild mirrors each entry's source
* directory under `outdir`, and both children must land flat beside orcad.js — that is where
diff --git a/config/scripts/verify-linux-glibc-floor.cjs b/config/scripts/verify-linux-glibc-floor.cjs
index 3a138ed894b0..3d4a0ca3c1d0 100644
--- a/config/scripts/verify-linux-glibc-floor.cjs
+++ b/config/scripts/verify-linux-glibc-floor.cjs
@@ -215,10 +215,11 @@ function declaredArchFromPath(filePath) {
return match ? ARCH_BY_TOKEN[match[1].toLowerCase()] : null
}
-function findArchViolation(filePath, targetArch) {
+function findArchViolation(filePath, targetArch, rootDir) {
// A path that names an architecture is judged against that name, so a per-arch vendored package
// is fine while `bin/linux-arm64-.../node-pty.node` holding an x86-64 binary is still caught.
- const declared = declaredArchFromPath(filePath)
+ // Why relative: the arm64 slice's own dir (`linux-arm64-unpacked`) must not declare every file arm64.
+ const declared = declaredArchFromPath(rootDir ? relative(rootDir, filePath) : filePath)
const expectedArch = declared ?? targetArch
const expected = ELF_MACHINE_BY_ARCH[expectedArch]
if (expected === undefined) {
@@ -373,7 +374,15 @@ function readDynamicInfo(filePath, objdumpPath) {
/** Imported (undefined) dynamic symbols from `objdump -T` (fail-closed). */
function readImportedSymbols(filePath, objdumpPath) {
- return parseImportedSymbols(runObjdump(objdumpPath, '-T', filePath))
+ try {
+ return parseImportedSymbols(runObjdump(objdumpPath, '-T', filePath))
+ } catch (error) {
+ // Why: a statically linked binary (bundled ripgrep) has no dynamic symbol table to import from.
+ if (error instanceof Error && error.message.includes('not a dynamic object')) {
+ return new Set()
+ }
+ throw error
+ }
}
/**
@@ -403,7 +412,7 @@ function verifyLinuxGlibcFloor(rootDir, options = {}) {
// Why before the glibc pass: a wrong-architecture binary's symbol versions are valid but
// meaningless, so reporting a floor violation for it would send the reader down the wrong path.
const archOffenders = binaries
- .map((filePath) => ({ filePath, violation: findArchViolation(filePath, targetArch) }))
+ .map((filePath) => ({ filePath, violation: findArchViolation(filePath, targetArch, rootDir) }))
.filter(({ violation }) => violation !== null)
if (archOffenders.length > 0) {
const detail = archOffenders
diff --git a/config/scripts/verify-linux-glibc-floor.test.mjs b/config/scripts/verify-linux-glibc-floor.test.mjs
index d8d82165053f..e2b76b7841f6 100644
--- a/config/scripts/verify-linux-glibc-floor.test.mjs
+++ b/config/scripts/verify-linux-glibc-floor.test.mjs
@@ -1,7 +1,7 @@
import { mkdtemp, mkdir, writeFile, symlink, rm } from 'node:fs/promises'
import { createRequire } from 'node:module'
import { tmpdir } from 'node:os'
-import { join } from 'node:path'
+import { dirname, join } from 'node:path'
import { describe, expect, it } from 'vitest'
const require = createRequire(import.meta.url)
@@ -375,6 +375,17 @@ describe('bundled native binary architecture', () => {
await rm(dir, { recursive: true, force: true })
})
+ // Release arm64 slices live in `linux-arm64-unpacked`; bundled ripgrep ships linux-x64 beside it.
+ it('reads arch tokens only below the slice root', async () => {
+ const root = join(await mkdtemp(join(tmpdir(), 'orca-elf-arch-')), 'linux-arm64-unpacked')
+ const dir = join(root, 'resources', 'ripgrep', 'linux-x64')
+ await mkdir(dir, { recursive: true })
+ const file = join(dir, 'rg')
+ await writeFile(file, elfHeader(ELF_MACHINE_BY_ARCH.x64))
+ expect(findArchViolation(file, 'arm64', root)).toBeNull()
+ await rm(dirname(root), { recursive: true, force: true })
+ })
+
it('flags an x86-64 binary in an arm64 slice', async () => {
const dir = await mkdtemp(join(tmpdir(), 'orca-elf-arch-'))
const file = join(dir, 'pty.node')
diff --git a/docs/reference/bundled-ripgrep.md b/docs/reference/bundled-ripgrep.md
index f7c87df1d4b4..5d2470cb49da 100644
--- a/docs/reference/bundled-ripgrep.md
+++ b/docs/reference/bundled-ripgrep.md
@@ -17,13 +17,17 @@ Explorer name filter, text search, and the paired-server `files.*` RPCs all spaw
- `beforePack` fails when a binary is missing, and `afterPack` verifies all six and sets exec bits.
- macOS `signIgnore` keeps codesign off the Linux/Windows copies, which are inert data there.
- Windows SignPath signs every packaged `.exe`, including both `rg.exe` copies.
+- `Resources/ripgrep/licenses/` carries the ripgrep, PCRE2, and musl notices the static binaries
+ require.
+- Plain-Node `orcad` copies its host binary to `/ripgrep//`.
## Resolution
`src/main/ripgrep/bundled-ripgrep-path.ts` is the only resolver in the main process.
-- It checks packaged `Resources/ripgrep` first.
-- In development and test hosts it then checks `node_modules/@vscode/ripgrep-universal/bin`.
-- As a last resort it returns `rg` on PATH, for a damaged or unpackaged install.
+- Packaged hosts look only in `Resources/ripgrep` or orcad's install root. A missing binary
+ resolves to its expected absolute path, so it fails with ENOENT. A bare `rg` there would let
+ Windows run an `rg.exe` from the repo, which is the spawn cwd.
+- Development and test hosts use `node_modules/@vscode/ripgrep-universal/bin`, then PATH `rg`.
Callers pass `{ wsl: true }` when the spawn is routed into a WSL distro, then spread
`bundledRipgrepWslSpawnOptions(command)` into `wslAwareSpawn`. Inside the distro, a shell
@@ -40,19 +44,25 @@ no fallback. A silent, slower, partial fallback hid exactly these failures befor
## SSH remotes
`src/main/ssh/ssh-relay-ripgrep-install.ts` installs the remote platform's binary at
-`~/.orca-remote/ripgrep/-/rg[.exe]`.
-- The path is keyed on the ripgrep version only, so relay upgrades never re-upload it.
-- It runs after the relay launches, so a first connect is never delayed.
+`~/.orca-remote/ripgrep/-/rg[.exe]`.
+- The path is keyed on a hash of the binary's bytes, so relay upgrades never re-upload it and any
+ change to the shipped binary does.
+- It starts right after the relay launches, ahead of sweep/GC. It never delays connect and
+ becomes available to the first Quick Open as soon as possible.
- The upload lands in a private stage directory and is renamed into place after a size check.
+- A file at the final path counts as installed only when its size matches. A truncated leftover
+ is replaced (on Windows only when not held open).
- The relay is always launched with `--ripgrep-path`. It re-checks the file on each spawn, prefers
it, and falls back to PATH `rg` and then its git/readdir chain. That covers a `noexec` home, a
failed upload, or an older client that launched the relay without the flag.
+- A bundled binary that fails to launch is skipped for 60 s, then retried. Fd/process pressure
+ never counts as failing. Windows antivirus commonly locks a new `rg.exe` briefly.
The relay fallbacks stay: mixed client/relay versions are normal
(`remote-wire-compatibility.md`), and a remote can refuse to execute uploaded binaries.
## Updating ripgrep
-Bump the `@vscode/ripgrep-universal` pin, then set `BUNDLED_RIPGREP_VERSION` in
-`src/shared/bundled-ripgrep.ts` to the `rg --version` it ships. The new value is a new remote cache
-key, so SSH hosts fetch the new binary once.
+Bump the exact `@vscode/ripgrep-universal` pin in `package.json`. Nothing else changes: the SSH
+cache key is the binary's content hash, so remotes fetch the new build on their next deploy.
+Dependabot proposes the bump (`.github/dependabot.yml`).
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5590b9391739..7600806cae3d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8269,7 +8269,7 @@ snapshots:
eventsource: 3.0.7
eventsource-parser: 3.0.8
express: 5.2.1(supports-color@7.2.0)
- express-rate-limit: 8.5.2(express@5.2.1(supports-color@7.2.0))
+ express-rate-limit: 8.5.2(express@5.2.1)
hono: 4.13.7
jose: 6.2.3
json-schema-typed: 8.0.2
@@ -8291,7 +8291,7 @@ snapshots:
eventsource: 3.0.7
eventsource-parser: 3.0.8
express: 5.2.1(supports-color@7.2.0)
- express-rate-limit: 8.5.2(express@5.2.1(supports-color@7.2.0))
+ express-rate-limit: 8.5.2(express@5.2.1)
hono: 4.13.7
jose: 6.2.3
json-schema-typed: 8.0.2
@@ -11605,7 +11605,7 @@ snapshots:
exponential-backoff@3.1.3: {}
- express-rate-limit@8.5.2(express@5.2.1(supports-color@7.2.0)):
+ express-rate-limit@8.5.2(express@5.2.1):
dependencies:
express: 5.2.1(supports-color@7.2.0)
ip-address: 10.4.0
diff --git a/resources/licenses/ripgrep/LICENSE-MIT b/resources/licenses/ripgrep/LICENSE-MIT
new file mode 100644
index 000000000000..3b0a5dc09c1e
--- /dev/null
+++ b/resources/licenses/ripgrep/LICENSE-MIT
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/resources/licenses/ripgrep/MUSL-COPYRIGHT b/resources/licenses/ripgrep/MUSL-COPYRIGHT
new file mode 100644
index 000000000000..2f15edc7a179
--- /dev/null
+++ b/resources/licenses/ripgrep/MUSL-COPYRIGHT
@@ -0,0 +1,193 @@
+musl as a whole is licensed under the following standard MIT license:
+
+----------------------------------------------------------------------
+Copyright © 2005-2020 Rich Felker, et al.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+----------------------------------------------------------------------
+
+Authors/contributors include:
+
+A. Wilcox
+Ada Worcester
+Alex Dowad
+Alex Suykov
+Alexander Monakov
+Andre McCurdy
+Andrew Kelley
+Anthony G. Basile
+Aric Belsito
+Arvid Picciani
+Bartosz Brachaczek
+Benjamin Peterson
+Bobby Bingham
+Boris Brezillon
+Brent Cook
+Chris Spiegel
+Clément Vasseur
+Daniel Micay
+Daniel Sabogal
+Daurnimator
+David Carlier
+David Edelsohn
+Denys Vlasenko
+Dmitry Ivanov
+Dmitry V. Levin
+Drew DeVault
+Emil Renner Berthing
+Fangrui Song
+Felix Fietkau
+Felix Janda
+Gianluca Anzolin
+Hauke Mehrtens
+He X
+Hiltjo Posthuma
+Isaac Dunham
+Jaydeep Patil
+Jens Gustedt
+Jeremy Huntwork
+Jo-Philipp Wich
+Joakim Sindholt
+John Spencer
+Julien Ramseier
+Justin Cormack
+Kaarle Ritvanen
+Khem Raj
+Kylie McClain
+Leah Neukirchen
+Luca Barbato
+Luka Perkov
+Lynn Ochs
+M Farkas-Dyck (Strake)
+Mahesh Bodapati
+Markus Wichmann
+Masanori Ogino
+Michael Clark
+Michael Forney
+Mikhail Kremnyov
+Natanael Copa
+Nicholas J. Kain
+orc
+Pascal Cuoq
+Patrick Oppenlander
+Petr Hosek
+Petr Skocik
+Pierre Carrier
+Reini Urban
+Rich Felker
+Richard Pennington
+Ryan Fairfax
+Samuel Holland
+Segev Finer
+Shiz
+sin
+Solar Designer
+Stefan Kristiansson
+Stefan O'Rear
+Szabolcs Nagy
+Timo Teräs
+Trutz Behn
+Will Dietz
+William Haddon
+William Pitcock
+
+Portions of this software are derived from third-party works licensed
+under terms compatible with the above MIT license:
+
+The TRE regular expression implementation (src/regex/reg* and
+src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
+under a 2-clause BSD license (license text in the source files). The
+included version has been heavily modified by Rich Felker in 2012, in
+the interests of size, simplicity, and namespace cleanliness.
+
+Much of the math library code (src/math/* and src/complex/*) is
+Copyright © 1993,2004 Sun Microsystems or
+Copyright © 2003-2011 David Schultz or
+Copyright © 2003-2009 Steven G. Kargl or
+Copyright © 2003-2009 Bruce D. Evans or
+Copyright © 2008 Stephen L. Moshier or
+Copyright © 2017-2018 Arm Limited
+and labelled as such in comments in the individual source files. All
+have been licensed under extremely permissive terms.
+
+The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
+The Android Open Source Project and is licensed under a two-clause BSD
+license. It was taken from Bionic libc, used on Android.
+
+The AArch64 memcpy and memset code (src/string/aarch64/*) are
+Copyright © 1999-2019, Arm Limited.
+
+The implementation of DES for crypt (src/crypt/crypt_des.c) is
+Copyright © 1994 David Burren. It is licensed under a BSD license.
+
+The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
+originally written by Solar Designer and placed into the public
+domain. The code also comes with a fallback permissive license for use
+in jurisdictions that may not recognize the public domain.
+
+The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
+Lynn Ochs and is licensed under an MIT-style license.
+
+The x86_64 port was written by Nicholas J. Kain and is licensed under
+the standard MIT terms.
+
+The mips and microblaze ports were originally written by Richard
+Pennington for use in the ellcc project. The original code was adapted
+by Rich Felker for build system and code conventions during upstream
+integration. It is licensed under the standard MIT terms.
+
+The mips64 port was contributed by Imagination Technologies and is
+licensed under the standard MIT terms.
+
+The powerpc port was also originally written by Richard Pennington,
+and later supplemented and integrated by John Spencer. It is licensed
+under the standard MIT terms.
+
+All other files which have no copyright comments are original works
+produced specifically for use as part of this library, written either
+by Rich Felker, the main author of the library, or by one or more
+contibutors listed above. Details on authorship of individual files
+can be found in the git version control history of the project. The
+omission of copyright and license comments in each file is in the
+interest of source tree size.
+
+In addition, permission is hereby granted for all public header files
+(include/* and arch/*/bits/*) and crt files intended to be linked into
+applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
+the copyright notice and permission notice otherwise required by the
+license, and to use these files without any requirement of
+attribution. These files include substantial contributions from:
+
+Bobby Bingham
+John Spencer
+Nicholas J. Kain
+Rich Felker
+Richard Pennington
+Stefan Kristiansson
+Szabolcs Nagy
+
+all of whom have explicitly granted such permission.
+
+This file previously contained text expressing a belief that most of
+the files covered by the above exception were sufficiently trivial not
+to be subject to copyright, resulting in confusion over whether it
+negated the permissions granted in the license. In the spirit of
+permissive licensing, and of not having licensing issues being an
+obstacle to adoption, that text has been removed.
diff --git a/resources/licenses/ripgrep/PCRE2-LICENCE.md b/resources/licenses/ripgrep/PCRE2-LICENCE.md
new file mode 100644
index 000000000000..f6fba35db25b
--- /dev/null
+++ b/resources/licenses/ripgrep/PCRE2-LICENCE.md
@@ -0,0 +1,104 @@
+PCRE2 Licence
+=============
+
+| SPDX-License-Identifier: | BSD-3-Clause WITH PCRE2-exception |
+|---------|-------|
+
+PCRE2 is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+Releases 10.00 and above of PCRE2 are distributed under the terms of the "BSD"
+licence, as specified below, with one exemption for certain binary
+redistributions. The documentation for PCRE2, supplied in the "doc" directory,
+is distributed under the same terms as the software itself. The data in the
+testdata directory is not copyrighted and is in the public domain.
+
+The basic library functions are written in C and are freestanding. Also
+included in the distribution is a just-in-time compiler that can be used to
+optimize pattern matching. This is an optional feature that can be omitted when
+the library is built. The just-in-time compiler is separately licensed under the
+"2-clause BSD" licence.
+
+
+COPYRIGHT
+---------
+
+### The basic library functions
+
+ Written by: Philip Hazel
+ Email local part: Philip.Hazel
+ Email domain: gmail.com
+
+ Retired from University of Cambridge Computing Service,
+ Cambridge, England.
+
+ Copyright (c) 1997-2007 University of Cambridge
+ Copyright (c) 2007-2024 Philip Hazel
+ All rights reserved.
+
+### PCRE2 Just-In-Time compilation support
+
+ Written by: Zoltan Herczeg
+ Email local part: hzmester
+ Email domain: freemail.hu
+
+ Copyright (c) 2010-2024 Zoltan Herczeg
+ All rights reserved.
+
+### Stack-less Just-In-Time compiler
+
+ Written by: Zoltan Herczeg
+ Email local part: hzmester
+ Email domain: freemail.hu
+
+ Copyright (c) 2009-2024 Zoltan Herczeg
+ All rights reserved.
+
+The code in the `deps/sljit` directory has its own LICENSE file.
+
+### All other contributions
+
+Many other contributors have participated in the authorship of PCRE2. As PCRE2
+has never required a Contributor Licensing Agreement, or other copyright
+assignment agreement, all contributions have copyright retained by each
+original contributor or their employer.
+
+
+THE "BSD" LICENCE
+-----------------
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notices,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notices, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name of the University of Cambridge nor the names of any
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+EXEMPTION FOR BINARY LIBRARY-LIKE PACKAGES
+------------------------------------------
+
+The second condition in the BSD licence (covering binary redistributions) does
+not apply all the way down a chain of software. If binary package A includes
+PCRE2, it must respect the condition, but if package B is software that
+includes package A, the condition is not imposed on package B unless it uses
+PCRE2 independently.
diff --git a/resources/licenses/ripgrep/README.md b/resources/licenses/ripgrep/README.md
new file mode 100644
index 000000000000..3f456169e99b
--- /dev/null
+++ b/resources/licenses/ripgrep/README.md
@@ -0,0 +1,8 @@
+# Bundled ripgrep notices
+
+Orca ships prebuilt ripgrep (`rg`) binaries from `@vscode/ripgrep-universal` under
+`Resources/ripgrep/`, for local, WSL, and SSH-remote search.
+
+- ripgrep: dual-licensed MIT (`LICENSE-MIT`) or Unlicense (`UNLICENSE`).
+- PCRE2, statically linked into ripgrep's `--pcre2` support: BSD (`PCRE2-LICENCE.md`).
+- musl libc, statically linked into the Linux builds: MIT (`MUSL-COPYRIGHT`).
diff --git a/resources/licenses/ripgrep/UNLICENSE b/resources/licenses/ripgrep/UNLICENSE
new file mode 100644
index 000000000000..68a49daad8ff
--- /dev/null
+++ b/resources/licenses/ripgrep/UNLICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
diff --git a/src/main/ipc/filesystem-list-files.test.ts b/src/main/ipc/filesystem-list-files.test.ts
index 16c316b94679..eb97c81091e8 100644
--- a/src/main/ipc/filesystem-list-files.test.ts
+++ b/src/main/ipc/filesystem-list-files.test.ts
@@ -460,5 +460,22 @@ describe('filesystem-list-files', () => {
expect(spawnMock).toHaveBeenCalledTimes(1)
expect(spawnMock.mock.calls.some((call) => call[0] === 'git')).toBe(false)
})
+
+ it('reports fd pressure as a transient launch failure, not a broken install', async () => {
+ spawnMock.mockImplementation(() => {
+ const child = createMockProcess()
+ Object.defineProperty(child, 'pid', { value: undefined })
+ setTimeout(
+ () => child.emit('error', Object.assign(new Error('EMFILE'), { code: 'EMFILE' })),
+ 0
+ )
+ return child
+ })
+
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the mocked auth and runtime options never read the store.
+ const listing = listQuickOpenFiles('/mock/root', {} as unknown as Store)
+
+ await expect(listing).rejects.toThrow('rg could not start (EMFILE); try again')
+ })
})
})
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index ae84056e8b19..513f43edaf07 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -25,6 +25,7 @@ import {
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
RipgrepUnavailableError
} from '../../shared/ripgrep-process-availability'
@@ -149,11 +150,16 @@ export async function listQuickOpenFiles(
const handleStderrData = (): void => {
/* drain */
}
- const handleError = (): void => {
+ const handleError = (error: NodeJS.ErrnoException): void => {
processErrorObserved = true
// Why: treat spawn errors like an abnormal exit — discard residual
// buffer so a truncated final byte sequence cannot leak as a path.
buf = ''
+ // Why: fd/process pressure is not a broken install; say so instead of blaming the bundled binary.
+ if (isTransientRipgrepSpawnError(error)) {
+ finish(new Error(`rg could not start (${error.code}); try again`))
+ return
+ }
if (isRipgrepUnavailableExit(child, null, null)) {
finish(new RipgrepUnavailableError())
return
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index 927a16b4731c..87c72f435064 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -13,6 +13,7 @@ import {
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess
} from '../../../shared/ripgrep-process-availability'
import { toWindowsWslPath, parseWslPath } from '../../wsl'
@@ -133,8 +134,13 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
const handleStderrData = (): void => {
// Drain stderr so rg cannot block on a full pipe.
}
- const handleError = (): void => {
+ const handleError = (error: NodeJS.ErrnoException): void => {
processErrorObserved = true
+ // Why: fd/process pressure is not a broken install; say so instead of blaming the bundled binary.
+ if (isTransientRipgrepSpawnError(error)) {
+ finish(Promise.reject(new Error(`rg could not start (${error.code}); try again`)))
+ return
+ }
if (child && isRipgrepUnavailableExit(child, null, null)) {
rejectUnavailable()
return
diff --git a/src/main/ripgrep/bundled-ripgrep-path.test.ts b/src/main/ripgrep/bundled-ripgrep-path.test.ts
index 9ff1e2521d3d..1786ee8b36e8 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.test.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.test.ts
@@ -11,10 +11,9 @@ import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { toBundledRipgrepPlatform } from '../../shared/bundled-ripgrep'
-import { execFileSync } from 'node:child_process'
-import { BUNDLED_RIPGREP_VERSION } from '../../shared/bundled-ripgrep'
import {
bundledRipgrepCommand,
+ bundledRipgrepContentKey,
bundledRipgrepWslSpawnOptions,
resetBundledRipgrepPathCacheForTests,
resolveBundledRipgrepPath
@@ -67,13 +66,13 @@ describe('bundled ripgrep path', () => {
expect(toBundledRipgrepPlatform('win32', 'ia32')).toBeNull()
})
- it('keys the remote cache on the version the pinned binary reports', () => {
+ it('keys the remote cache on the shipped bytes', () => {
setResourcesPath(undefined)
- const version = execFileSync(bundledRipgrepCommand(), ['--version'], { encoding: 'utf8' })
+ const platform = toBundledRipgrepPlatform(process.platform, process.arch)!
+ const key = bundledRipgrepContentKey(platform)
- expect(version.split('\n')[0]).toMatch(
- new RegExp(`^ripgrep ${BUNDLED_RIPGREP_VERSION.replaceAll('.', '\\.')}\\b`)
- )
+ expect(key).toMatch(/^[0-9a-f]{16}$/)
+ expect(bundledRipgrepContentKey('win32-x64')).not.toBe(key)
})
it('picks the distro-arch Linux build via wslpath, else the distro rg', () => {
diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts
index b1f993cb1af1..08565beba640 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.ts
@@ -1,4 +1,5 @@
-import { existsSync, realpathSync } from 'node:fs'
+import { createHash } from 'node:crypto'
+import { existsSync, readFileSync, realpathSync } from 'node:fs'
import { join } from 'node:path'
import { getAppEnvironment, hasAppEnvironment } from '../../shared/app-environment'
import { quotePosixShell } from '../../shared/wsl-login-shell-command'
@@ -11,6 +12,7 @@ import {
} from '../../shared/bundled-ripgrep'
const resolvedPaths = new Map()
+const contentKeys = new Map()
function candidatePaths(platform: BundledRipgrepPlatform): string[] {
const binaryName = bundledRipgrepBinaryName(platform)
@@ -20,6 +22,10 @@ function candidatePaths(platform: BundledRipgrepPlatform): string[] {
}
// Why not packaged: a packaged app must never run a binary from whatever checkout it was launched in.
if (hasAppEnvironment() && getAppEnvironment().isPackaged()) {
+ // Why: plain-Node orcad has no resourcesPath; its build copies rg into its own install root.
+ candidates.push(
+ join(getAppEnvironment().getAppPath(), BUNDLED_RIPGREP_RESOURCE_DIR, platform, binaryName)
+ )
return candidates
}
// Why: development and test hosts run from a checkout where only node_modules holds the binaries.
@@ -32,25 +38,52 @@ function candidatePaths(platform: BundledRipgrepPlatform): string[] {
return candidates
}
+function realpathOrSelf(path: string): string {
+ try {
+ return realpathSync(path)
+ } catch {
+ return path
+ }
+}
+
+// Why never throw: the key only gates the SSH upload, which must not break relay deploy.
+function hashBinary(binaryPath: string | null): string | null {
+ if (!binaryPath) {
+ return null
+ }
+ try {
+ return createHash('sha256').update(readFileSync(binaryPath)).digest('hex').slice(0, 16)
+ } catch {
+ return null
+ }
+}
+
/** Absolute path to Orca's own ripgrep for `platform`, or null when this install lacks it. */
export function resolveBundledRipgrepPath(platform: BundledRipgrepPlatform): string | null {
if (!resolvedPaths.has(platform)) {
const found = candidatePaths(platform).find((path) => existsSync(path))
// Why realpath: dev checkouts reach the package through pnpm symlinks, which SSH uploads reject.
- resolvedPaths.set(platform, found ? realpathSync(found) : null)
+ resolvedPaths.set(platform, found ? realpathOrSelf(found) : null)
}
return resolvedPaths.get(platform) ?? null
}
/**
* The rg command for a local spawn: this host's bundled binary, or its Linux build when the
- * spawn is routed into WSL. Falls back to PATH only for a damaged or unpackaged install.
+ * spawn is routed into WSL. Falls back to PATH `rg` only in unpackaged dev/test hosts.
*/
export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
const platform = options.wsl
? toBundledRipgrepPlatform('linux', process.arch)
: toBundledRipgrepPlatform(process.platform, process.arch)
- return (platform && resolveBundledRipgrepPath(platform)) ?? 'rg'
+ const resolved = platform ? resolveBundledRipgrepPath(platform) : null
+ if (resolved || !platform) {
+ return resolved ?? 'rg'
+ }
+ // Why the expected path, not bare 'rg': Windows resolves a bare name in the spawn cwd (the repo)
+ // first, so a damaged packaged install must fail with ENOENT instead of running a planted rg.exe.
+ const isPackaged = hasAppEnvironment() && getAppEnvironment().isPackaged()
+ return isPackaged ? (candidatePaths(platform)[0] ?? 'rg') : 'rg'
}
/**
@@ -68,8 +101,20 @@ export function bundledRipgrepWslSpawnOptions(command: string): { wslShellComman
}
}
+/**
+ * Short content hash of this install's binary for `platform`. Keys the SSH remote cache so any
+ * change to the shipped bytes (a package bump, a rebuild, re-signing) re-uploads without a manual step.
+ */
+export function bundledRipgrepContentKey(platform: BundledRipgrepPlatform): string | null {
+ if (!contentKeys.has(platform)) {
+ contentKeys.set(platform, hashBinary(resolveBundledRipgrepPath(platform)))
+ }
+ return contentKeys.get(platform) ?? null
+}
+
export function resetBundledRipgrepPathCacheForTests(): void {
resolvedPaths.clear()
+ contentKeys.clear()
}
// Why no git/readdir fallback: VS Code ships the same contract — a bundled rg that cannot start
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index ae96a4a78df5..97912fdfe3ed 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -21,6 +21,7 @@ import {
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess
} from '../../shared/ripgrep-process-availability'
import type { ChildProcessHandle } from '../../shared/child-process/process-spec'
@@ -128,8 +129,13 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
const onStderrData = (): void => {
// Drain stderr so rg cannot block on a full pipe.
}
- const onError = (): void => {
+ const onError = (error: NodeJS.ErrnoException): void => {
processErrorObserved = true
+ // Why: fd/process pressure is not a broken install; say so instead of blaming the bundled binary.
+ if (isTransientRipgrepSpawnError(error)) {
+ finish(Promise.reject(new Error(`rg could not start (${error.code}); try again`)))
+ return
+ }
if (child && isRipgrepUnavailableExit(child, null, null)) {
rejectUnavailable()
return
diff --git a/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts b/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
index f909c15b3f53..b94d2102865d 100644
--- a/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
+++ b/src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts
@@ -10,7 +10,7 @@ vi.mock('electron', () => ({ app: { getAppPath: () => process.cwd() } }))
import { SshChannelMultiplexer } from './ssh-channel-multiplexer'
import { SshConnection } from './ssh-connection'
import { deployAndLaunchRelay } from './ssh-relay-deploy'
-import { BUNDLED_RIPGREP_VERSION } from '../../shared/bundled-ripgrep'
+import { bundledRipgrepContentKey } from '../ripgrep/bundled-ripgrep-path'
import type { SshTarget } from '../../shared/ssh-types'
// Why opt-in: needs Docker plus an sshd+node+git image WITHOUT rg (ORCA_REVIEW_SSH_NORG_IMAGE).
@@ -124,8 +124,11 @@ describe.skipIf(!RUN)('SSH relay bundled ripgrep', () => {
it('installs Orca ripgrep on a host without rg and serves Quick Open search with it', async () => {
const active = fixture!
expect(dockerExec(active, 'command -v rg || echo NO_RG')).toBe('NO_RG')
- const platform = `linux-${dockerExec(active, 'uname -m') === 'aarch64' ? 'arm64' : 'x64'}`
- const remoteBinary = `/root/.orca-remote/ripgrep/${BUNDLED_RIPGREP_VERSION}-${platform}/rg`
+ const platform = /^(aarch64|arm64)$/.test(dockerExec(active, 'uname -m'))
+ ? 'linux-arm64'
+ : 'linux-x64'
+ const entry = `${bundledRipgrepContentKey(platform)}-${platform}`
+ const remoteBinary = `/root/.orca-remote/ripgrep/${entry}/rg`
const connection = createConnection(active)
await connection.connect()
try {
@@ -143,9 +146,7 @@ describe.skipIf(!RUN)('SSH relay bundled ripgrep', () => {
expect(dockerExec(active, "ps -eo args | grep '[r]elay.js --detached'")).toContain(
`--ripgrep-path ${remoteBinary}`
)
- expect(
- dockerExec(active, `ls /root/.orca-remote/ripgrep/${BUNDLED_RIPGREP_VERSION}-${platform}`)
- ).toBe('rg')
+ expect(dockerExec(active, `ls /root/.orca-remote/ripgrep/${entry}`)).toBe('rg')
const mux = new SshChannelMultiplexer(deployed.transport)
try {
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index 83af9c9854bc..c272ab8e7bc0 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -53,10 +53,16 @@ vi.mock('./ssh-remote-node-resolution', () => ({
resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
}))
+// Why: this file mocks fs, so the real content hash cannot read a binary.
+vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
+ resolveBundledRipgrepPath: () => null,
+ bundledRipgrepContentKey: () => 'c0ffee0123456789'
+}))
+
// Why: the fire-and-forget ripgrep install would drain the queued exec mocks.
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
- ensureRemoteBundledRipgrep: vi.fn()
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
}))
// Why: the versioned-install modules shell out for install state, locking,
@@ -510,7 +516,7 @@ describe('deployAndLaunchRelay', () => {
expect(launchCommand).toContain(`--grace-time ${DEFAULT_SSH_RELAY_GRACE_PERIOD_SECONDS}`)
expect(launchCommand).toContain(
- "--ripgrep-path '/home/user/.orca-remote/ripgrep/15.0.0-linux-x64/rg'"
+ "--ripgrep-path '/home/user/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'"
)
await vi.waitFor(() =>
expect(ensureRemoteBundledRipgrep).toHaveBeenCalledWith(conn, expect.anything(), '/home/user')
@@ -775,7 +781,7 @@ describe('deployAndLaunchRelay', () => {
)
expect(launchScript).toContain('--endpoint-dir')
expect(launchScript).toContain(
- '--ripgrep-path "C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe"'
+ '--ripgrep-path "C:/Users/me user/.orca-remote/ripgrep/c0ffee0123456789-win32-x64/rg.exe"'
)
expect(launchScript).not.toContain('--pty-source-credit-v1')
expect(launchScript).not.toContain('.pty-source-credit-policy')
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index ec8de5ea31bc..c2d8e8a86ede 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -603,11 +603,16 @@ async function deployAndLaunchRelayAttempt(
}
console.log('[ssh-relay] Relay started successfully')
- void execHostCommand(
- conn,
- hostPlatform,
- recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
- )
+ // Why first: bounded Quick Open search needs rg, so the upload must not queue behind sweep and GC;
+ // the relay re-checks --ripgrep-path per spawn, so it never delays connect either.
+ void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome)
+ .then(() =>
+ execHostCommand(
+ conn,
+ hostPlatform,
+ recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
+ )
+ )
.catch(() => {})
// Why before GC: a superseded relay pins its version dir via the live-socket probe, so the
// sweep has to settle first or GC keeps every orphan's tree forever.
@@ -647,8 +652,6 @@ async function deployAndLaunchRelayAttempt(
})
)
.catch(() => {})
- // Why after launch: the relay re-checks --ripgrep-path per spawn, so the one-time upload never delays connect.
- .then(() => ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome))
return {
transport: launched.transport,
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
index bde1935bafe5..86c0bd4e19c2 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -25,7 +25,8 @@ const { execCommandMock, uploadRelayDirectoryMock, resolveBundledRipgrepPathMock
vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execCommandMock }))
vi.mock('./ssh-relay-install-transfers', () => ({ uploadRelayDirectory: uploadRelayDirectoryMock }))
vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
- resolveBundledRipgrepPath: resolveBundledRipgrepPathMock
+ resolveBundledRipgrepPath: resolveBundledRipgrepPathMock,
+ bundledRipgrepContentKey: () => 'c0ffee0123456789'
}))
import type { SshConnection } from './ssh-connection'
@@ -69,12 +70,12 @@ describe('ensureRemoteBundledRipgrep', () => {
vi.restoreAllMocks()
})
- it('keys the cache on ripgrep version and platform, not the relay version', () => {
+ it('keys the cache on the binary content hash and platform, not the relay version', () => {
expect(remoteRipgrepLayout(LINUX, '/home/me')?.binaryPath).toBe(
- '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'
+ '/home/me/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'
)
expect(remoteRipgrepLayout(WINDOWS, 'C:/Users/me user')?.binaryPath).toBe(
- 'C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe'
+ 'C:/Users/me user/.orca-remote/ripgrep/c0ffee0123456789-win32-x64/rg.exe'
)
})
@@ -86,7 +87,9 @@ describe('ensureRemoteBundledRipgrep', () => {
)
expect(execCommandMock).toHaveBeenCalledTimes(1)
- expect(execScripts()[0]).toContain("-x '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'")
+ expect(execScripts()[0]).toContain(
+ "-x '/home/me/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'"
+ )
expect(uploadRelayDirectoryMock).not.toHaveBeenCalled()
})
@@ -112,7 +115,7 @@ describe('ensureRemoteBundledRipgrep', () => {
expect(promote).toContain('"1234"')
expect(promote).toContain('chmod 755')
expect(promote).toContain(
- `mv -f '${payloadDir}/rg' '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'`
+ `mv -f '${payloadDir}/rg' '/home/me/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'`
)
})
@@ -159,7 +162,7 @@ describe('ensureRemoteBundledRipgrep', () => {
expect(execCommandMock.mock.calls.every(([, , opts]) => opts.wrapCommand === false)).toBe(true)
const [probe, promote] = execScripts()
expect(probe).toContain(
- "Test-Path -LiteralPath 'C:/Users/me user/.orca-remote/ripgrep/15.0.0-win32-x64/rg.exe'"
+ "Test-Path -LiteralPath 'C:/Users/me user/.orca-remote/ripgrep/c0ffee0123456789-win32-x64/rg.exe'"
)
expect(promote).toContain('Move-Item -LiteralPath $src -Destination $bin')
expect(promote).toContain('.Length -eq 1234')
@@ -214,14 +217,15 @@ describe.runIf(process.platform !== 'win32').each(SHELLS)(
vi.restoreAllMocks()
})
- const installed = (): string => join(home, '.orca-remote', 'ripgrep', '15.0.0-linux-x64', 'rg')
+ const installed = (): string =>
+ join(home, '.orca-remote', 'ripgrep', 'c0ffee0123456789-linux-x64', 'rg')
const cacheEntries = (): string[] => readdirSync(join(home, '.orca-remote', 'ripgrep'))
it('installs an executable binary once and leaves no stage behind', async () => {
await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('installed')
expect(statSync(installed()).mode & 0o111).not.toBe(0)
expect(execFileSync(installed(), { encoding: 'utf-8' })).toContain('ripgrep 15.0.0')
- expect(cacheEntries()).toEqual(['15.0.0-linux-x64'])
+ expect(cacheEntries()).toEqual(['c0ffee0123456789-linux-x64'])
await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('present')
expect(uploadRelayDirectoryMock).toHaveBeenCalledTimes(1)
@@ -240,6 +244,14 @@ describe.runIf(process.platform !== 'win32').each(SHELLS)(
expect(cacheEntries()).toEqual([])
})
+ it('replaces a truncated binary left at the installed path', async () => {
+ mkdirSync(dirname(installed()), { recursive: true })
+ writeFileSync(installed(), '#!/bin/sh\n', { mode: 0o755 })
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('installed')
+ expect(execFileSync(installed(), { encoding: 'utf-8' })).toContain('ripgrep 15.0.0')
+ })
+
it('sweeps an abandoned stage older than an hour but keeps a live one', async () => {
const cache = join(home, '.orca-remote', 'ripgrep')
mkdirSync(join(cache, '.upload-stale', 'payload'), { recursive: true })
@@ -248,7 +260,7 @@ describe.runIf(process.platform !== 'win32').each(SHELLS)(
await ensureRemoteBundledRipgrep(connection(), LINUX, home)
- expect(cacheEntries().sort()).toEqual(['.upload-live', '15.0.0-linux-x64'])
+ expect(cacheEntries().sort()).toEqual(['.upload-live', 'c0ffee0123456789-linux-x64'])
})
}
)
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index 0c85a8808502..a81d1c4c536f 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -1,8 +1,8 @@
/**
* Installs Orca's own ripgrep on an SSH host so remote Quick Open and text search do not depend
* on the user having `rg`. The binary lives at
- * `~/.orca-remote/ripgrep/-/rg[.exe]`, a sibling of the
- * `relay-` dirs keyed on the ripgrep version alone, so a relay upgrade never re-uploads it.
+ * `~/.orca-remote/ripgrep/-/rg[.exe]`, a sibling of the
+ * `relay-` dirs keyed on the binary's bytes alone, so a relay upgrade never re-uploads it.
*
* Uploads land in a private `.upload-` stage and are renamed into place only after a size
* check, so an interrupted or concurrent deploy never leaves a truncated binary at the final path.
@@ -32,9 +32,11 @@ import {
type RemoteHostPlatform
} from './ssh-remote-platform'
import { removeRemoteTreeCommand } from './ssh-remote-commands'
-import { resolveBundledRipgrepPath } from '../ripgrep/bundled-ripgrep-path'
import {
- BUNDLED_RIPGREP_VERSION,
+ bundledRipgrepContentKey,
+ resolveBundledRipgrepPath
+} from '../ripgrep/bundled-ripgrep-path'
+import {
bundledRipgrepBinaryName,
toBundledRipgrepPlatform,
type BundledRipgrepPlatform
@@ -62,10 +64,11 @@ export function remoteRipgrepLayout(
remoteHome: string
): RemoteRipgrepLayout | null {
const platform = toBundledRipgrepPlatform(host.os, host.arch)
- if (!platform) {
+ const contentKey = platform ? bundledRipgrepContentKey(platform) : null
+ if (!platform || !contentKey) {
return null
}
- const entryName = `${BUNDLED_RIPGREP_VERSION}-${platform}`
+ const entryName = `${contentKey}-${platform}`
assertSafeRemotePathSegment(entryName, host.pathFlavor)
const cacheDir = joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR, REMOTE_RIPGREP_CACHE_DIR_NAME)
return {
@@ -116,8 +119,9 @@ async function installRemoteRipgrep(
`${RELAY_REMOTE_DIR}/${REMOTE_RIPGREP_CACHE_DIR_NAME}/${stageName}`
)
+ const size = statSync(localBinary).size
// Why one round trip: the warm path (already installed) must cost a single exec.
- const probe = await exec(probeOrStageCommand(host, layout, stageDir, stageNamespace))
+ const probe = await exec(probeOrStageCommand(host, layout, stageDir, stageNamespace, size))
if (probe.includes(PRESENT)) {
return 'present'
}
@@ -139,7 +143,6 @@ async function installRemoteRipgrep(
: undefined
}
)
- const size = statSync(localBinary).size
const result = await exec(promoteCommand(host, layout, stageDir, size))
promoted = true
if (!result.includes(INSTALLED)) {
@@ -165,21 +168,32 @@ function usesOrcaOwnedSftp(conn: SshConnection, host: RemoteHostPlatform): boole
return typeof conn.usesSystemSshTransport === 'function' ? !conn.usesSystemSshTransport() : true
}
+// Why size: the path is content-keyed, so a wrong length can only be a truncated or foreign file.
+function posixInstalledTest(bin: string, bytes: string): string {
+ return `[ -f ${bin} ] && [ -x ${bin} ] && [ "$(wc -c < ${bin} 2>/dev/null | tr -d ' \\t')" = "${bytes}" ]`
+}
+
+function windowsInstalledTest(bin: string, bytes: string): string {
+ return `(Test-Path -LiteralPath ${bin} -PathType Leaf) -and ((Get-Item -LiteralPath ${bin}).Length -eq ${bytes})`
+}
+
export function probeOrStageCommand(
host: RemoteHostPlatform,
layout: RemoteRipgrepLayout,
stageDir: string,
- stageNamespace: RelayUploadStageNamespace
+ stageNamespace: RelayUploadStageNamespace,
+ expectedBytes: number
): string {
+ const bytes = String(Math.trunc(expectedBytes))
if (!isWindowsRemoteHost(host)) {
const bin = shellEscape(layout.binaryPath)
const sweep = `find ${shellEscape(layout.cacheDir)} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
const stage = makeRelayUploadStageDirectoryCommand(stageNamespace, host, stageDir)
- return `if [ -f ${bin} ] && [ -x ${bin} ]; then echo ${PRESENT}; else ${sweep}; ${stage} && echo ${STAGED}; fi`
+ return `if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${sweep}; ${stage} && echo ${STAGED}; fi`
}
return powerShellCommand(
[
- `if (Test-Path -LiteralPath ${powerShellLiteral(layout.binaryPath)} -PathType Leaf) { '${PRESENT}' } else {`,
+ `if (${windowsInstalledTest(powerShellLiteral(layout.binaryPath), bytes)}) { '${PRESENT}' } else {`,
`Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -Filter '${UPLOAD_STAGE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-${STALE_UPLOAD_STAGE_MINUTES}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
`$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(joinRemotePath(host, stageDir, 'payload'))} -ErrorAction Stop`,
`'${STAGED}' }`
@@ -206,7 +220,7 @@ export function promoteCommand(
const bytes = String(Math.trunc(expectedBytes))
return [
`if [ "$(wc -c < ${src} 2>/dev/null | tr -d ' \\t')" = "${bytes}" ] && chmod 755 ${src} && mkdir -p ${shellEscape(remoteDirname(layout.binaryPath, host))} && mv -f ${src} ${bin}; then r=${INSTALLED};`,
- `elif [ -f ${bin} ] && [ -x ${bin} ]; then r=${INSTALLED}; else r=ORCA-RG-FAILED; fi;`,
+ `elif ${posixInstalledTest(bin, bytes)}; then r=${INSTALLED}; else r=ORCA-RG-FAILED; fi;`,
`rm -rf ${shellEscape(stageDir)}; echo "$r"`
].join(' ')
}
@@ -218,11 +232,11 @@ export function promoteCommand(
'try {',
`if ((Get-Item -LiteralPath $src -ErrorAction Stop).Length -eq ${Math.trunc(expectedBytes)}) {`,
`$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(remoteDirname(layout.binaryPath, host))} -ErrorAction Stop`,
- // Why no overwrite: a running relay may hold the installed rg.exe open.
- 'if (-not (Test-Path -LiteralPath $bin -PathType Leaf)) { Move-Item -LiteralPath $src -Destination $bin -ErrorAction Stop }',
+ // Why replace only a wrong-size file: a running relay may hold a good rg.exe open.
+ `if (-not (${windowsInstalledTest('$bin', String(Math.trunc(expectedBytes)))})) { Move-Item -LiteralPath $src -Destination $bin -Force -ErrorAction Stop }`,
`$r = '${INSTALLED}'`,
'}',
- `} catch { if (Test-Path -LiteralPath $bin -PathType Leaf) { $r = '${INSTALLED}' } }`,
+ `} catch { if (${windowsInstalledTest('$bin', String(Math.trunc(expectedBytes)))}) { $r = '${INSTALLED}' } }`,
`finally { Remove-Item -LiteralPath ${powerShellLiteral(stageDir)} -Recurse -Force -ErrorAction SilentlyContinue }`,
'$r'
].join('\n')
diff --git a/src/relay/relay-bundled-ripgrep.test.ts b/src/relay/relay-bundled-ripgrep.test.ts
index 70fca466573a..5f667ad1429b 100644
--- a/src/relay/relay-bundled-ripgrep.test.ts
+++ b/src/relay/relay-bundled-ripgrep.test.ts
@@ -76,6 +76,24 @@ describe('relay bundled ripgrep', () => {
await expect(retryRipgrepOnPathAfterLaunchFailure('rg', dir)).resolves.toBe(false)
})
+ it('backs off the bundled binary after a launch failure, then tries it again', async () => {
+ vi.useFakeTimers()
+ try {
+ await expect(retryRipgrepOnPathAfterLaunchFailure(bundled, dir)).resolves.toBe(true)
+ expect(resolveRelayRipgrepCommand()).toBe('rg')
+ vi.advanceTimersByTime(60_001)
+ expect(resolveRelayRipgrepCommand()).toBe(bundled)
+ } finally {
+ vi.useRealTimers()
+ }
+ })
+
+ it('does not back off on fd or process pressure', async () => {
+ const error = Object.assign(new Error('EMFILE'), { code: 'EMFILE' })
+ await expect(retryRipgrepOnPathAfterLaunchFailure(bundled, dir, error)).resolves.toBe(false)
+ expect(resolveRelayRipgrepCommand()).toBe(bundled)
+ })
+
it('retries a file listing on PATH rg after the bundled binary fails to launch', async () => {
const commands: string[] = []
spawnMock.mockImplementation((command: string) => {
diff --git a/src/relay/relay-bundled-ripgrep.ts b/src/relay/relay-bundled-ripgrep.ts
index b110fca5e16e..38bba6bd174b 100644
--- a/src/relay/relay-bundled-ripgrep.ts
+++ b/src/relay/relay-bundled-ripgrep.ts
@@ -13,16 +13,22 @@ import { relayLogLine } from './relay-diagnostic-log'
export const PATH_RIPGREP_COMMAND = 'rg'
let bundledRipgrepPath: string | null = null
-let bundledRipgrepUnusable = false
+// Why a back-off, not forever: Windows AV often locks a just-installed rg.exe for its first spawns.
+const BUNDLED_RIPGREP_RETRY_MS = 60_000
+let bundledRipgrepUnusableUntil = 0
export function configureRelayBundledRipgrep(path: string | undefined): void {
bundledRipgrepPath = path ? path : null
- bundledRipgrepUnusable = false
+ bundledRipgrepUnusableUntil = 0
}
export function resolveRelayRipgrepCommand(): string {
// Why check existence per spawn: the deploy uploads rg after the relay starts, so it can appear mid-session.
- if (bundledRipgrepPath && !bundledRipgrepUnusable && existsSync(bundledRipgrepPath)) {
+ if (
+ bundledRipgrepPath &&
+ Date.now() >= bundledRipgrepUnusableUntil &&
+ existsSync(bundledRipgrepPath)
+ ) {
return bundledRipgrepPath
}
return PATH_RIPGREP_COMMAND
@@ -30,7 +36,7 @@ export function resolveRelayRipgrepCommand(): string {
/**
* Called when `command` failed to launch. Resolves true when it was the bundled binary and the
- * caller should retry once on PATH `rg`; later spawns then skip the bundled binary.
+ * caller should retry once on PATH `rg`; spawns skip the bundled binary for a back-off window.
*/
export async function retryRipgrepOnPathAfterLaunchFailure(
command: string,
@@ -48,9 +54,9 @@ export async function retryRipgrepOnPathAfterLaunchFailure(
if (!(await isRipgrepSpawnCwdUsable(cwd))) {
return false
}
- // Why only while the file exists: a removed binary is re-checked per spawn, a noexec/EACCES one never works.
- if (existsSync(command) && !bundledRipgrepUnusable) {
- bundledRipgrepUnusable = true
+ // Why only while the file exists: a removed binary is re-checked per spawn anyway.
+ if (existsSync(command) && Date.now() >= bundledRipgrepUnusableUntil) {
+ bundledRipgrepUnusableUntil = Date.now() + BUNDLED_RIPGREP_RETRY_MS
relayLogLine(`[relay] Bundled ripgrep at ${command} failed to launch; using rg from PATH`)
}
return true
diff --git a/src/relay/relay-launch-options.test.ts b/src/relay/relay-launch-options.test.ts
index 23ec375a3ce2..e16d3cad783d 100644
--- a/src/relay/relay-launch-options.test.ts
+++ b/src/relay/relay-launch-options.test.ts
@@ -53,9 +53,9 @@ describe('relay launch options', () => {
'relay.js',
'--detached',
'--ripgrep-path',
- '/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg'
+ '/home/me/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'
]).ripgrepPath
- ).toBe('/home/me/.orca-remote/ripgrep/15.0.0-linux-x64/rg')
+ ).toBe('/home/me/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg')
expect(parseRelayLaunchOptions(['node', 'relay.js', '--detached']).ripgrepPath).toBe(undefined)
})
diff --git a/src/shared/bundled-ripgrep.ts b/src/shared/bundled-ripgrep.ts
index 8b938407890a..da0707d0425a 100644
--- a/src/shared/bundled-ripgrep.ts
+++ b/src/shared/bundled-ripgrep.ts
@@ -5,7 +5,6 @@ import { RELAY_BUILD_PLATFORMS, type RelayBuildPlatform } from './relay-artifact
* WSL, and SSH searches never depend on the user having installed `rg`.
* See docs/reference/bundled-ripgrep.md.
*/
-export const BUNDLED_RIPGREP_VERSION = '15.0.0'
export const BUNDLED_RIPGREP_PLATFORMS: readonly RelayBuildPlatform[] = RELAY_BUILD_PLATFORMS
export type BundledRipgrepPlatform = RelayBuildPlatform
/** Directory under the packaged resources root holding `/rg[.exe]`. */
From 63f4dac3cf8091bdcdcc3f7384bc950ba9fb968d Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 00:10:20 -0700
Subject: [PATCH 03/25] chore(search): drop bundled-ripgrep reference doc;
assert full packaging layout parity
---
.github/dependabot.yml | 2 +-
.gitignore | 1 -
AGENTS.md | 1 -
config/bundled-ripgrep-resources.cjs | 14 ++++--
docs/reference/bundled-ripgrep.md | 68 ----------------------------
src/shared/bundled-ripgrep.test.ts | 13 +++++-
src/shared/bundled-ripgrep.ts | 1 -
7 files changed, 24 insertions(+), 76 deletions(-)
delete mode 100644 docs/reference/bundled-ripgrep.md
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 2ba3a32159b8..681fe94fbb84 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,7 +1,7 @@
version: 2
updates:
# Why only ripgrep: the bundled rg ships in every artifact and to SSH remotes, and a bump is a
- # one-line pin change (docs/reference/bundled-ripgrep.md). Other dependencies stay manual.
+ # one-line pin change (the SSH cache keys on the binary's hash). Other dependencies stay manual.
- package-ecosystem: npm
directory: /
schedule:
diff --git a/.gitignore b/.gitignore
index 4cacef3c21b0..56ecc5854b6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -119,7 +119,6 @@ docs/**
!docs/reference/agent-session-search-query-tuning.md
!docs/reference/agent-session-search-contract.md
!docs/reference/agent-status-store.md
-!docs/reference/bundled-ripgrep.md
!docs/reference/antigravity-readiness-evidence.md
!docs/reference/git-compatibility.md
!docs/reference/headless-linux-server.md
diff --git a/AGENTS.md b/AGENTS.md
index 6fb30790fe13..dad66f4bba83 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -75,7 +75,6 @@ Orca targets macOS, Linux, and Windows. Keep all platform-dependent behavior beh
- **Windows terminal shells**: `--shell` picks the shell a terminal _is_; `--command` is typed into whatever shell the host spawned, so a shell choice routed through `command` silently becomes a child process. See [`docs/reference/windows-terminal-shell-selection.md`](./docs/reference/windows-terminal-shell-selection.md).
- **Windows setup scripts**: the setup/issue-command runner is a `.cmd` batch file unless the script starts with a `#!` line — never derive that from the user's terminal-shell preference, and never launch a `.cmd` runner with a bare `cmd.exe /c` from a Git Bash pane (MSYS rewrites the `/c`). See [`docs/reference/windows-setup-shell.md`](./docs/reference/windows-setup-shell.md).
- **Windows child processes**: start them through `runProcess`/`spawnProcess` in `src/shared/child-process/` — never `child_process` directly. It pins `windowsHide`, refuses `shell: true`, and encodes `.cmd`/`.bat` arguments so neither `CommandLineToArgvW` nor `cmd.exe` mangles them. A ratchet test fails on any new direct import. Recognised npm/pnpm `.cmd` shims are resolved to their real target so the spawn skips `cmd.exe` entirely; see [`docs/reference/windows-cmd-shim-resolution.md`](./docs/reference/windows-cmd-shim-resolution.md) before adding a shim shape or debugging one.
-- **Ripgrep**: Orca bundles `rg` for every platform, WSL, and SSH remotes. Spawn it through `bundledRipgrepCommand` (main) or the relay's resolver, never a bare `'rg'`, and don't add git/readdir fallbacks locally. See [`docs/reference/bundled-ripgrep.md`](./docs/reference/bundled-ripgrep.md).
- **Windows process enumeration**: read the table through `src/main/windows/windows-process-table.ts`, never by forking `powershell.exe`. See [`docs/reference/windows-process-enumeration.md`](./docs/reference/windows-process-enumeration.md).
- **Windows MSYS/Git Bash panes**: their children break away from the per-PTY job unless it is created without `JOB_OBJECT_LIMIT_BREAKAWAY_OK`, and a `conpty.node` built before that fix passes every existing gate. Before changing the per-PTY job or debugging `windows-msys-job.win32.test.ts`, read [`docs/reference/windows-msys-job-breakaway.md`](./docs/reference/windows-msys-job-breakaway.md).
- **Windows daemon-host relocation**: the terminal daemon runs from a copy of the app runtime under `%LOCALAPPDATA%`, which is what survives an auto-update. Before touching that copy, its exe name, or the NSIS uninstall macro, read [`docs/reference/windows-daemon-host-relocation.md`](./docs/reference/windows-daemon-host-relocation.md).
diff --git a/config/bundled-ripgrep-resources.cjs b/config/bundled-ripgrep-resources.cjs
index 41ccdbffc71a..290cd6167687 100644
--- a/config/bundled-ripgrep-resources.cjs
+++ b/config/bundled-ripgrep-resources.cjs
@@ -12,6 +12,7 @@ const BUNDLED_RIPGREP_PLATFORMS = [
'win32-arm64'
]
const RIPGREP_PACKAGE_BIN_DIR = 'node_modules/@vscode/ripgrep-universal/bin'
+const RIPGREP_RESOURCE_DIR = 'ripgrep'
function ripgrepBinaryName(platform) {
return platform.startsWith('win32-') ? 'rg.exe' : 'rg'
@@ -20,11 +21,11 @@ function ripgrepBinaryName(platform) {
const bundledRipgrepExtraResources = [
{
from: RIPGREP_PACKAGE_BIN_DIR,
- to: 'ripgrep',
+ to: RIPGREP_RESOURCE_DIR,
filter: BUNDLED_RIPGREP_PLATFORMS.map((platform) => `${platform}/**`)
},
// Why: the binaries statically link PCRE2 (and musl on Linux), whose licenses require the notice.
- { from: 'resources/licenses/ripgrep', to: 'ripgrep/licenses' }
+ { from: 'resources/licenses/ripgrep', to: `${RIPGREP_RESOURCE_DIR}/licenses` }
]
// Why: codesign would try to sign the Linux/Windows builds; they are inert data on macOS.
@@ -45,7 +46,12 @@ function assertBundledRipgrepInstalled(projectDir = join(__dirname, '..')) {
function finalizePackagedRipgrep(resourcesDir) {
for (const platform of BUNDLED_RIPGREP_PLATFORMS) {
- const binaryPath = join(resourcesDir, 'ripgrep', platform, ripgrepBinaryName(platform))
+ const binaryPath = join(
+ resourcesDir,
+ RIPGREP_RESOURCE_DIR,
+ platform,
+ ripgrepBinaryName(platform)
+ )
if (!existsSync(binaryPath)) {
throw new Error(`Packaged app is missing bundled ripgrep: ${binaryPath}`)
}
@@ -57,6 +63,8 @@ function finalizePackagedRipgrep(resourcesDir) {
module.exports = {
BUNDLED_RIPGREP_PLATFORMS,
RIPGREP_PACKAGE_BIN_DIR,
+ RIPGREP_RESOURCE_DIR,
+ ripgrepBinaryName,
assertBundledRipgrepInstalled,
bundledRipgrepExtraResources,
bundledRipgrepMacSignIgnore,
diff --git a/docs/reference/bundled-ripgrep.md b/docs/reference/bundled-ripgrep.md
deleted file mode 100644
index 5d2470cb49da..000000000000
--- a/docs/reference/bundled-ripgrep.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# Bundled ripgrep
-
-Orca ships its own `rg` and never depends on the user having installed one. Quick Open, the
-Explorer name filter, text search, and the paired-server `files.*` RPCs all spawn it.
-
-## Where the binaries come from
-
-- `@vscode/ripgrep-universal` (exact pin in `package.json`) carries prebuilt ripgrep for every
- platform inside its npm tarball: no install script, no download at install time, SHA-256 checked
- upstream at publish. Linux builds are static musl, so they pass the glibc floor
- (`linux-glibc-compatibility.md`) and run on any distro, including Alpine and WSL.
-- Every desktop artifact packages the six relay platforms (`linux|darwin|win32` × `x64|arm64`)
- under `Resources/ripgrep//rg[.exe]` (`config/bundled-ripgrep-resources.cjs`).
- - The host's own copy serves local search.
- - Windows uses the Linux copy for WSL.
- - SSH deploys upload the remote host's copy.
-- `beforePack` fails when a binary is missing, and `afterPack` verifies all six and sets exec bits.
-- macOS `signIgnore` keeps codesign off the Linux/Windows copies, which are inert data there.
-- Windows SignPath signs every packaged `.exe`, including both `rg.exe` copies.
-- `Resources/ripgrep/licenses/` carries the ripgrep, PCRE2, and musl notices the static binaries
- require.
-- Plain-Node `orcad` copies its host binary to `/ripgrep//`.
-
-## Resolution
-
-`src/main/ripgrep/bundled-ripgrep-path.ts` is the only resolver in the main process.
-- Packaged hosts look only in `Resources/ripgrep` or orcad's install root. A missing binary
- resolves to its expected absolute path, so it fails with ENOENT. A bare `rg` there would let
- Windows run an `rg.exe` from the repo, which is the spawn cwd.
-- Development and test hosts use `node_modules/@vscode/ripgrep-universal/bin`, then PATH `rg`.
-
-Callers pass `{ wsl: true }` when the spawn is routed into a WSL distro, then spread
-`bundledRipgrepWslSpawnOptions(command)` into `wslAwareSpawn`. Inside the distro, a shell
-expression finds the Windows install through `wslpath -u`, which honors custom automount roots.
-- It picks the Linux build for the distro's own `uname -m`. Windows-on-ARM runs x64 Orca beside
- arm64 distros, so the Windows process's architecture is the wrong key.
-- It falls back to the distro's own `rg` when the install drive is not mounted.
-
-There is no local fallback. When the bundled binary cannot start, local listing and search fail
-with a clear error instead of degrading to `git ls-files`/`git grep`. The usual causes are a
-damaged install or security software blocking it. This matches VS Code, which also ships rg with
-no fallback. A silent, slower, partial fallback hid exactly these failures before.
-
-## SSH remotes
-
-`src/main/ssh/ssh-relay-ripgrep-install.ts` installs the remote platform's binary at
-`~/.orca-remote/ripgrep/-/rg[.exe]`.
-- The path is keyed on a hash of the binary's bytes, so relay upgrades never re-upload it and any
- change to the shipped binary does.
-- It starts right after the relay launches, ahead of sweep/GC. It never delays connect and
- becomes available to the first Quick Open as soon as possible.
-- The upload lands in a private stage directory and is renamed into place after a size check.
-- A file at the final path counts as installed only when its size matches. A truncated leftover
- is replaced (on Windows only when not held open).
-- The relay is always launched with `--ripgrep-path`. It re-checks the file on each spawn, prefers
- it, and falls back to PATH `rg` and then its git/readdir chain. That covers a `noexec` home, a
- failed upload, or an older client that launched the relay without the flag.
-- A bundled binary that fails to launch is skipped for 60 s, then retried. Fd/process pressure
- never counts as failing. Windows antivirus commonly locks a new `rg.exe` briefly.
-
-The relay fallbacks stay: mixed client/relay versions are normal
-(`remote-wire-compatibility.md`), and a remote can refuse to execute uploaded binaries.
-
-## Updating ripgrep
-
-Bump the exact `@vscode/ripgrep-universal` pin in `package.json`. Nothing else changes: the SSH
-cache key is the binary's content hash, so remotes fetch the new build on their next deploy.
-Dependabot proposes the bump (`.github/dependabot.yml`).
diff --git a/src/shared/bundled-ripgrep.test.ts b/src/shared/bundled-ripgrep.test.ts
index 40f59ced9f62..6fd64be3ad81 100644
--- a/src/shared/bundled-ripgrep.test.ts
+++ b/src/shared/bundled-ripgrep.test.ts
@@ -1,6 +1,11 @@
import { createRequire } from 'node:module'
import { describe, expect, it } from 'vitest'
-import { BUNDLED_RIPGREP_PACKAGE_BIN_DIR, BUNDLED_RIPGREP_PLATFORMS } from './bundled-ripgrep'
+import {
+ BUNDLED_RIPGREP_PACKAGE_BIN_DIR,
+ BUNDLED_RIPGREP_PLATFORMS,
+ BUNDLED_RIPGREP_RESOURCE_DIR,
+ bundledRipgrepBinaryName
+} from './bundled-ripgrep'
const requireFromRoot = createRequire(`${process.cwd()}/`)
@@ -9,9 +14,15 @@ describe('bundled ripgrep platforms', () => {
const packaging: {
BUNDLED_RIPGREP_PLATFORMS: string[]
RIPGREP_PACKAGE_BIN_DIR: string
+ RIPGREP_RESOURCE_DIR: string
+ ripgrepBinaryName: (platform: string) => string
} = requireFromRoot('./config/bundled-ripgrep-resources.cjs')
expect(packaging.BUNDLED_RIPGREP_PLATFORMS).toEqual([...BUNDLED_RIPGREP_PLATFORMS])
expect(packaging.RIPGREP_PACKAGE_BIN_DIR).toBe(BUNDLED_RIPGREP_PACKAGE_BIN_DIR)
+ expect(packaging.RIPGREP_RESOURCE_DIR).toBe(BUNDLED_RIPGREP_RESOURCE_DIR)
+ for (const platform of BUNDLED_RIPGREP_PLATFORMS) {
+ expect(packaging.ripgrepBinaryName(platform)).toBe(bundledRipgrepBinaryName(platform))
+ }
})
})
diff --git a/src/shared/bundled-ripgrep.ts b/src/shared/bundled-ripgrep.ts
index da0707d0425a..0c10332a2a72 100644
--- a/src/shared/bundled-ripgrep.ts
+++ b/src/shared/bundled-ripgrep.ts
@@ -3,7 +3,6 @@ import { RELAY_BUILD_PLATFORMS, type RelayBuildPlatform } from './relay-artifact
/**
* Orca ships its own ripgrep for every relay platform (from @vscode/ripgrep-universal), so local,
* WSL, and SSH searches never depend on the user having installed `rg`.
- * See docs/reference/bundled-ripgrep.md.
*/
export const BUNDLED_RIPGREP_PLATFORMS: readonly RelayBuildPlatform[] = RELAY_BUILD_PLATFORMS
export type BundledRipgrepPlatform = RelayBuildPlatform
From c5f0f45e2d73b4d139725457c7e558b686853b3c Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 13:19:31 -0700
Subject: [PATCH 04/25] refactor(search): one entry point for spawning the
bundled ripgrep
Local Quick Open, Quick Open path search, the Explorer name filter, and
runtime text search each repeated the same three steps: resolve the bundled
command, spread in the WSL distro, spread in the WSL shell expression. Fold
that into spawnBundledRipgrep so one place owns the rule that a bare 'rg'
must never reach spawn, and simplify the resolver's command/packaged checks.
Restore the AGENTS.md ripgrep rule dropped alongside its reference doc in
63f4dac, and note why the relay's availability probe may spawn a bare 'rg'.
No behaviour change; verified by the existing suites plus a new test that
pins the local, WSL-routed, and distro-routed-but-Windows-output cases.
---
AGENTS.md | 1 +
src/main/ipc/filesystem-list-files.ts | 15 ++---
src/main/ipc/filesystem-search-file-paths.ts | 18 +++---
.../filesystem/filesystem-search-handlers.ts | 15 ++---
src/main/ripgrep/bundled-ripgrep-path.ts | 31 ++++++----
.../ripgrep/bundled-ripgrep-spawn.test.ts | 56 +++++++++++++++++++
src/main/ripgrep/bundled-ripgrep-spawn.ts | 29 ++++++++++
...ile-commands-search-local-runtime-files.ts | 15 ++---
src/shared/ripgrep-process-availability.ts | 3 +
9 files changed, 131 insertions(+), 52 deletions(-)
create mode 100644 src/main/ripgrep/bundled-ripgrep-spawn.test.ts
create mode 100644 src/main/ripgrep/bundled-ripgrep-spawn.ts
diff --git a/AGENTS.md b/AGENTS.md
index dad66f4bba83..8ac5cd365cc3 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -75,6 +75,7 @@ Orca targets macOS, Linux, and Windows. Keep all platform-dependent behavior beh
- **Windows terminal shells**: `--shell` picks the shell a terminal _is_; `--command` is typed into whatever shell the host spawned, so a shell choice routed through `command` silently becomes a child process. See [`docs/reference/windows-terminal-shell-selection.md`](./docs/reference/windows-terminal-shell-selection.md).
- **Windows setup scripts**: the setup/issue-command runner is a `.cmd` batch file unless the script starts with a `#!` line — never derive that from the user's terminal-shell preference, and never launch a `.cmd` runner with a bare `cmd.exe /c` from a Git Bash pane (MSYS rewrites the `/c`). See [`docs/reference/windows-setup-shell.md`](./docs/reference/windows-setup-shell.md).
- **Windows child processes**: start them through `runProcess`/`spawnProcess` in `src/shared/child-process/` — never `child_process` directly. It pins `windowsHide`, refuses `shell: true`, and encodes `.cmd`/`.bat` arguments so neither `CommandLineToArgvW` nor `cmd.exe` mangles them. A ratchet test fails on any new direct import. Recognised npm/pnpm `.cmd` shims are resolved to their real target so the spawn skips `cmd.exe` entirely; see [`docs/reference/windows-cmd-shim-resolution.md`](./docs/reference/windows-cmd-shim-resolution.md) before adding a shim shape or debugging one.
+- **Ripgrep**: Orca bundles `rg` for every platform, WSL, and SSH remotes. Spawn it through `spawnBundledRipgrep` (main) or `resolveRelayRipgrepCommand` (relay), never a bare `'rg'` — Windows resolves a bare name in the spawn cwd before PATH. Don't add git/readdir fallbacks locally; the relay's chain exists only for hosts an upload never reached.
- **Windows process enumeration**: read the table through `src/main/windows/windows-process-table.ts`, never by forking `powershell.exe`. See [`docs/reference/windows-process-enumeration.md`](./docs/reference/windows-process-enumeration.md).
- **Windows MSYS/Git Bash panes**: their children break away from the per-PTY job unless it is created without `JOB_OBJECT_LIMIT_BREAKAWAY_OK`, and a `conpty.node` built before that fix passes every existing gate. Before changing the per-PTY job or debugging `windows-msys-job.win32.test.ts`, read [`docs/reference/windows-msys-job-breakaway.md`](./docs/reference/windows-msys-job-breakaway.md).
- **Windows daemon-host relocation**: the terminal daemon runs from a copy of the app runtime under `%LOCALAPPDATA%`, which is what survives an auto-update. Before touching that copy, its exe name, or the NSIS uninstall macro, read [`docs/reference/windows-daemon-host-relocation.md`](./docs/reference/windows-daemon-host-relocation.md).
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index 513f43edaf07..b128f47d7183 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -2,7 +2,6 @@ import { sep } from 'node:path'
import type { ChildProcess } from 'node:child_process'
import type { Store } from '../persistence'
import { resolveAuthorizedPath } from './filesystem-auth'
-import { wslAwareSpawn } from '../git/runner'
import { parseWslPath, toWindowsWslPath } from '../wsl'
import { getLocalGitOptionsForRegisteredWorktree } from './local-worktree-runtime-options'
import {
@@ -17,11 +16,8 @@ import {
limitQuickOpenFilesBySerializedBytes,
serializedQuickOpenPathBytes
} from '../../shared/quick-open-transport-budget'
-import {
- bundledRipgrepCommand,
- bundledRipgrepUnavailableError,
- bundledRipgrepWslSpawnOptions
-} from '../ripgrep/bundled-ripgrep-path'
+import { bundledRipgrepUnavailableError } from '../ripgrep/bundled-ripgrep-path'
+import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
@@ -76,7 +72,6 @@ export async function listQuickOpenFiles(
})
const primary = rgArgs.primary
const ignoredPass = rgArgs.ignoredPass
- const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
const runRg = (args: string[]): Promise => {
return new Promise((resolve, reject) => {
@@ -125,10 +120,10 @@ export async function listQuickOpenFiles(
return maxResults !== undefined && files.size >= maxResults
}
- const child = wslAwareSpawn(rgCommand, args, {
+ const child = spawnBundledRipgrep(args, {
cwd: authorizedRootPath,
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
stdio: ['ignore', 'pipe', 'pipe']
})
let timer: ReturnType
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index ca0f5c3a1149..994c42038f51 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -1,3 +1,4 @@
+import type { ChildProcess } from 'node:child_process'
import { sep } from 'node:path'
import type { Store } from '../persistence'
import { fileListingCancellationError } from '../../shared/file-listing-cancellation'
@@ -18,16 +19,12 @@ import {
RipgrepLaunchFailureError,
RipgrepUnavailableError
} from '../../shared/ripgrep-process-availability'
-import { wslAwareSpawn } from '../git/runner'
import { parseWslPath, toWindowsWslPath } from '../wsl'
import { resolveAuthorizedPath } from './filesystem-auth'
import { getLocalGitOptionsForRegisteredWorktree } from './local-worktree-runtime-options'
import { QuickOpenSubprocessPathAccumulator } from '../../shared/quick-open-listing-limits'
-import {
- bundledRipgrepCommand,
- bundledRipgrepUnavailableError,
- bundledRipgrepWslSpawnOptions
-} from '../ripgrep/bundled-ripgrep-path'
+import { bundledRipgrepUnavailableError } from '../ripgrep/bundled-ripgrep-path'
+import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
export type QuickOpenFilePathSearchResult = {
paths: string[]
@@ -115,13 +112,12 @@ function scanRipgrepPaths(args: {
let parseablePathCount = 0
let processErrorObserved = false
let unavailableExitObserved = false
- let child: ReturnType
+ let child: ChildProcess
try {
- const rgCommand = bundledRipgrepCommand({ wsl: Boolean(args.wslDistroForOutput) })
- child = wslAwareSpawn(rgCommand, args.args, {
+ child = spawnBundledRipgrep(args.args, {
cwd: args.authorizedRootPath,
- ...(args.localGitOptions.wslDistro ? { wslDistro: args.localGitOptions.wslDistro } : {}),
- ...(args.wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
+ wslDistro: args.localGitOptions.wslDistro,
+ wslDistroForOutput: args.wslDistroForOutput,
stdio: ['ignore', 'pipe', 'pipe']
})
} catch (error) {
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index 87c72f435064..f871456950bc 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -17,7 +17,6 @@ import {
killSpawnedRipgrepProcess
} from '../../../shared/ripgrep-process-availability'
import { toWindowsWslPath, parseWslPath } from '../../wsl'
-import { wslAwareSpawn } from '../../git/runner'
import {
getSshFilesystemProvider,
requireSshFilesystemProvider
@@ -29,11 +28,8 @@ import {
pathMatchesFileNameFilterTokens,
splitFileNameFilterTokens
} from '../../../shared/file-name-filter-tokens'
-import {
- bundledRipgrepCommand,
- bundledRipgrepUnavailableError,
- bundledRipgrepWslSpawnOptions
-} from '../../ripgrep/bundled-ripgrep-path'
+import { bundledRipgrepUnavailableError } from '../../ripgrep/bundled-ripgrep-path'
+import { spawnBundledRipgrep } from '../../ripgrep/bundled-ripgrep-spawn'
import { getLocalGitOptionsForRegisteredWorktree } from '../local-worktree-runtime-options'
import { QuickOpenPathRanker } from '../../../shared/quick-open-path-search'
import type { FilesystemHandlerContext } from './filesystem-handler-context'
@@ -118,11 +114,10 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
}
}
- const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
- const nextChild = wslAwareSpawn(rgCommand, rgArgs, {
+ const nextChild = spawnBundledRipgrep(rgArgs, {
cwd: rootPath,
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
stdio: ['ignore', 'pipe', 'pipe']
})
child = nextChild
diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts
index 08565beba640..705e74322cc0 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.ts
@@ -11,17 +11,24 @@ import {
type BundledRipgrepPlatform
} from '../../shared/bundled-ripgrep'
+/** Only unpackaged dev/test hosts may fall back to this; see bundledRipgrepCommand. */
+const PATH_RIPGREP_COMMAND = 'rg'
+
const resolvedPaths = new Map()
const contentKeys = new Map()
+function isPackagedApp(): boolean {
+ return hasAppEnvironment() && getAppEnvironment().isPackaged()
+}
+
function candidatePaths(platform: BundledRipgrepPlatform): string[] {
const binaryName = bundledRipgrepBinaryName(platform)
const candidates: string[] = []
if (process.resourcesPath) {
candidates.push(join(process.resourcesPath, BUNDLED_RIPGREP_RESOURCE_DIR, platform, binaryName))
}
- // Why not packaged: a packaged app must never run a binary from whatever checkout it was launched in.
- if (hasAppEnvironment() && getAppEnvironment().isPackaged()) {
+ // Why nothing else: a packaged app must never run a binary from whatever checkout it was launched in.
+ if (isPackagedApp()) {
// Why: plain-Node orcad has no resourcesPath; its build copies rg into its own install root.
candidates.push(
join(getAppEnvironment().getAppPath(), BUNDLED_RIPGREP_RESOURCE_DIR, platform, binaryName)
@@ -73,17 +80,19 @@ export function resolveBundledRipgrepPath(platform: BundledRipgrepPlatform): str
* spawn is routed into WSL. Falls back to PATH `rg` only in unpackaged dev/test hosts.
*/
export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
- const platform = options.wsl
- ? toBundledRipgrepPlatform('linux', process.arch)
- : toBundledRipgrepPlatform(process.platform, process.arch)
- const resolved = platform ? resolveBundledRipgrepPath(platform) : null
- if (resolved || !platform) {
- return resolved ?? 'rg'
+ const platform = toBundledRipgrepPlatform(options.wsl ? 'linux' : process.platform, process.arch)
+ if (!platform) {
+ return PATH_RIPGREP_COMMAND
+ }
+ const resolved = resolveBundledRipgrepPath(platform)
+ if (resolved) {
+ return resolved
}
// Why the expected path, not bare 'rg': Windows resolves a bare name in the spawn cwd (the repo)
// first, so a damaged packaged install must fail with ENOENT instead of running a planted rg.exe.
- const isPackaged = hasAppEnvironment() && getAppEnvironment().isPackaged()
- return isPackaged ? (candidatePaths(platform)[0] ?? 'rg') : 'rg'
+ return isPackagedApp()
+ ? (candidatePaths(platform)[0] ?? PATH_RIPGREP_COMMAND)
+ : PATH_RIPGREP_COMMAND
}
/**
@@ -93,7 +102,7 @@ export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
*/
export function bundledRipgrepWslSpawnOptions(command: string): { wslShellCommand?: string } {
const ripgrepRoot = command.replace(/[\\/][^\\/]+[\\/][^\\/]+$/, '')
- if (command === 'rg' || ripgrepRoot === command) {
+ if (command === PATH_RIPGREP_COMMAND || ripgrepRoot === command) {
return {}
}
return {
diff --git a/src/main/ripgrep/bundled-ripgrep-spawn.test.ts b/src/main/ripgrep/bundled-ripgrep-spawn.test.ts
new file mode 100644
index 000000000000..60dd69bce60a
--- /dev/null
+++ b/src/main/ripgrep/bundled-ripgrep-spawn.test.ts
@@ -0,0 +1,56 @@
+import type { ChildProcess } from 'node:child_process'
+import { describe, expect, it, vi } from 'vitest'
+
+const wslAwareSpawnMock =
+ vi.fn<(command: string, args: string[], options: Record) => ChildProcess>()
+
+vi.mock('../git/runner', () => ({ wslAwareSpawn: wslAwareSpawnMock }))
+vi.mock('./bundled-ripgrep-path', () => ({
+ bundledRipgrepCommand: (options?: { wsl?: boolean }) =>
+ options?.wsl ? '/install/ripgrep/linux-x64/rg' : '/install/ripgrep/darwin-arm64/rg',
+ bundledRipgrepWslSpawnOptions: () => ({ wslShellCommand: '' })
+}))
+
+const { spawnBundledRipgrep } = await import('./bundled-ripgrep-spawn')
+
+function spawnOnce(options: Parameters[1]): {
+ command: string
+ options: Record
+} {
+ wslAwareSpawnMock.mockClear()
+ spawnBundledRipgrep(['--files'], options)
+ const [command, , spawnOptions] = wslAwareSpawnMock.mock.calls[0]
+ return { command, options: spawnOptions }
+}
+
+describe('spawnBundledRipgrep', () => {
+ it("spawns this host's bundled binary with no WSL routing for a local workspace", () => {
+ const { command, options } = spawnOnce({ cwd: '/repo' })
+
+ expect(command).toBe('/install/ripgrep/darwin-arm64/rg')
+ expect(options).not.toHaveProperty('wslDistro')
+ expect(options).not.toHaveProperty('wslShellCommand')
+ expect(options.cwd).toBe('/repo')
+ })
+
+ it('routes through the distro and picks the Linux build for a WSL workspace', () => {
+ const { command, options } = spawnOnce({
+ cwd: '\\\\wsl.localhost\\Ubuntu\\repo',
+ wslDistro: 'Ubuntu',
+ wslDistroForOutput: 'Ubuntu'
+ })
+
+ expect(command).toBe('/install/ripgrep/linux-x64/rg')
+ expect(options.wslDistro).toBe('Ubuntu')
+ expect(options.wslShellCommand).toBe('')
+ })
+
+ // Why: only rg running inside the distro emits Linux paths, so only that case rewrites the command.
+ it('keeps the host build when a distro routes the spawn but output stays Windows-side', () => {
+ const { command, options } = spawnOnce({ cwd: 'C:\\repo', wslDistro: 'Ubuntu' })
+
+ expect(command).toBe('/install/ripgrep/darwin-arm64/rg')
+ expect(options.wslDistro).toBe('Ubuntu')
+ expect(options).not.toHaveProperty('wslShellCommand')
+ })
+})
diff --git a/src/main/ripgrep/bundled-ripgrep-spawn.ts b/src/main/ripgrep/bundled-ripgrep-spawn.ts
new file mode 100644
index 000000000000..ec354129042b
--- /dev/null
+++ b/src/main/ripgrep/bundled-ripgrep-spawn.ts
@@ -0,0 +1,29 @@
+import type { ChildProcess, SpawnOptions } from 'node:child_process'
+import { wslAwareSpawn } from '../git/runner'
+import { bundledRipgrepCommand, bundledRipgrepWslSpawnOptions } from './bundled-ripgrep-path'
+
+export type BundledRipgrepSpawnOptions = SpawnOptions & {
+ cwd: string
+ /** Distro whose git options own this workspace; routes the spawn through wsl.exe. */
+ wslDistro?: string
+ /** Set when rg runs inside WSL, so it emits Linux paths the caller translates back. */
+ wslDistroForOutput?: string
+}
+
+/**
+ * The single way Orca spawns ripgrep: its own binary, routed into WSL when the workspace lives
+ * there. Why one entry point: a bare `rg` must never reach spawn, because Windows resolves a bare
+ * name in the spawn cwd — the repo — before PATH.
+ */
+export function spawnBundledRipgrep(
+ args: string[],
+ options: BundledRipgrepSpawnOptions
+): ChildProcess {
+ const { wslDistro, wslDistroForOutput, ...spawnOptions } = options
+ const command = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
+ return wslAwareSpawn(command, args, {
+ ...spawnOptions,
+ ...(wslDistro ? { wslDistro } : {}),
+ ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(command) : {})
+ })
+}
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index 97912fdfe3ed..9172c8d708a5 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -13,11 +13,8 @@ import {
ingestRgJsonLine
} from '../../shared/text-search'
import { parseWslPath, toWindowsWslPath } from '../wsl'
-import {
- bundledRipgrepCommand,
- bundledRipgrepUnavailableError,
- bundledRipgrepWslSpawnOptions
-} from '../ripgrep/bundled-ripgrep-path'
+import { bundledRipgrepUnavailableError } from '../ripgrep/bundled-ripgrep-path'
+import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
@@ -25,7 +22,6 @@ import {
killSpawnedRipgrepProcess
} from '../../shared/ripgrep-process-availability'
import type { ChildProcessHandle } from '../../shared/child-process/process-spec'
-import { wslAwareSpawn } from '../git/runner'
import type { RuntimeFileExplorerPath } from './runtime-file-command-target'
import type { IFilesystemProvider } from '../providers/types'
import { joinWorktreeRelativePath, normalizeRuntimeRelativePath } from './runtime-relative-paths'
@@ -112,11 +108,10 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
}
}
- const rgCommand = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
- const nextChild = wslAwareSpawn(rgCommand, rgArgs, {
+ const nextChild = spawnBundledRipgrep(rgArgs, {
cwd: authorizedRootPath,
- ...(localGitOptions.wslDistro ? { wslDistro: localGitOptions.wslDistro } : {}),
- ...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(rgCommand) : {}),
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
stdio: ['ignore', 'pipe', 'pipe']
})
child = nextChild
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index a7424f42f73d..b0f4e7913f58 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -77,6 +77,9 @@ export async function isRipgrepSpawnCwdUsable(cwd: string): Promise {
}
}
+// Why a bare 'rg' is allowed here, against the rule in AGENTS.md: this asks "does this host have any
+// ripgrep on PATH", which only the relay's git/readdir fallback chain needs. Main-process code has a
+// bundled binary and must resolve it by absolute path instead -- see spawnBundledRipgrep.
function checkRipgrepAvailableWithoutCwd(): Promise {
return new Promise((resolve) => {
let child: ChildProcess
From bffd42767f69d55722217ec4bbdcd34e4ef143e1 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 13:26:58 -0700
Subject: [PATCH 05/25] refactor(search): drop the local install-ripgrep path;
enforce the rg rule
Bundling rg removed the local git/readdir fallback, so nothing can produce
the "install ripgrep on the host running the Quick Open scan" guidance any
more -- only a remote host an upload never reached still reaches the capped
listing. Drop the host parameter, the renderer's local branch and its
translation key, and the relay wrapper that existed only to pass 'remote'.
Add a ratchet test for bare 'rg' spawns, since the AGENTS.md rule alone had
nothing enforcing it. Its one allowlist entry is the relay's PATH probe,
which asks about PATH by definition. Verified the guard catches a planted
offender rather than passing vacuously.
Also stop chaining the remote cleanup sweep behind the ripgrep upload: on a
cold host that is a multi-MB transfer, and stale upload stages and
superseded version dirs were left on the remote for its whole duration. The
two touch different trees, so they now run concurrently.
---
.../bare-ripgrep-spawn-boundary.test.ts | 97 +++++++++++++++++++
src/main/ssh/ssh-relay-deploy.ts | 21 ++--
src/relay/fs-handler-install-rg.ts | 16 ---
src/relay/fs-list-files-fallback-chain.ts | 2 +-
src/renderer/src/components/QuickOpen.tsx | 1 -
...k-open-install-rg-guidance.render.test.tsx | 19 +---
.../quick-open-install-rg-guidance.test.ts | 28 ++----
.../quick-open-install-rg-guidance.tsx | 28 ++----
src/renderer/src/i18n/locales/en.json | 3 +-
src/renderer/src/i18n/locales/es.json | 3 +-
src/renderer/src/i18n/locales/fr.json | 3 +-
src/renderer/src/i18n/locales/ja.json | 3 +-
src/renderer/src/i18n/locales/ko.json | 3 +-
src/renderer/src/i18n/locales/zh.json | 3 +-
.../quick-open-install-rg.test.ts} | 2 +-
src/shared/quick-open-install-rg.ts | 19 ++--
16 files changed, 144 insertions(+), 107 deletions(-)
create mode 100644 src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
delete mode 100644 src/relay/fs-handler-install-rg.ts
rename src/{relay/fs-handler-install-rg.test.ts => shared/quick-open-install-rg.test.ts} (95%)
diff --git a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
new file mode 100644
index 000000000000..8080c236a3e0
--- /dev/null
+++ b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
@@ -0,0 +1,97 @@
+import { readFileSync, readdirSync, statSync } from 'node:fs'
+import { join, relative, resolve } from 'node:path'
+import { describe, expect, it } from 'vitest'
+
+/**
+ * Guard the ripgrep chokepoint at the tree level rather than per call site.
+ *
+ * Orca ships its own `rg` for every platform, so a spawn must name it by absolute path. A bare
+ * `'rg'` is not merely slower: on Windows the spawn cwd is the user's repo, and CreateProcessW
+ * looks there before PATH, so a planted `rg.exe` in a cloned repo would run instead.
+ *
+ * The allowlist only shrinks. Each entry is a deliberate PATH fallback that has to stay.
+ */
+const ALLOWED_BARE_RIPGREP_SPAWNS: readonly string[] = [
+ // The relay-only probe answering "does this host have any rg at all" before it drops to the
+ // git/readdir chain. It asks about PATH by definition, so it cannot take an absolute path.
+ 'src/shared/ripgrep-process-availability.ts'
+]
+
+// A spawn/exec whose command argument is the literal string 'rg' (or "rg").
+const BARE_SPAWN_PATTERN =
+ /\b(?:spawn|spawnSync|exec|execFile|execFileSync|execSync)\w*\(\s*['"]rg['"]/
+
+const SCANNED_EXTENSIONS = ['.ts', '.tsx']
+const IGNORED_DIRECTORIES = new Set([
+ 'node_modules',
+ 'dist',
+ 'out',
+ 'build',
+ '.git',
+ '__fixtures__'
+])
+
+function isTestFile(path: string): boolean {
+ return /\.(?:test|spec)\.tsx?$/.test(path) || path.includes('/__tests__/')
+}
+
+function collectSourceFiles(root: string): string[] {
+ let found: string[] = []
+ let entries: string[]
+ try {
+ entries = readdirSync(root)
+ } catch {
+ return found
+ }
+ for (const entry of entries) {
+ if (IGNORED_DIRECTORIES.has(entry)) {
+ continue
+ }
+ const full = join(root, entry)
+ if (statSync(full).isDirectory()) {
+ found = found.concat(collectSourceFiles(full))
+ continue
+ }
+ if (SCANNED_EXTENSIONS.some((extension) => full.endsWith(extension))) {
+ found.push(full)
+ }
+ }
+ return found
+}
+
+/** Drop comment-only lines so prose about the old idiom is not an offender. */
+function codeText(contents: string): string {
+ return contents
+ .split('\n')
+ .filter((line) => !/^\s*(?:\/\/|\/\*|\*)/.test(line))
+ .join('\n')
+}
+
+describe('bare ripgrep spawn boundary', () => {
+ const repoRoot = resolve(__dirname, '..', '..', '..')
+ const files = collectSourceFiles(join(repoRoot, 'src'))
+ const offenders = files
+ .map((file) => relative(repoRoot, file).split('\\').join('/'))
+ .filter((path) => !isTestFile(path))
+ .filter((path) => BARE_SPAWN_PATTERN.test(codeText(readFileSync(join(repoRoot, path), 'utf8'))))
+
+ it('scans a plausible number of files', () => {
+ // A broken root or extension list would make the guard silently vacuous.
+ expect(files.length).toBeGreaterThan(500)
+ })
+
+ it('has no bare rg spawn outside the allowlist', () => {
+ expect(
+ offenders.filter((path) => !ALLOWED_BARE_RIPGREP_SPAWNS.includes(path)),
+ "New bare 'rg' spawn. Use spawnBundledRipgrep (main) or resolveRelayRipgrepCommand (relay)."
+ ).toEqual([])
+ })
+
+ it('has no stale allowlist entry', () => {
+ // Why this direction too: a migrated file that stays listed hides the next regression there.
+ expect(
+ ALLOWED_BARE_RIPGREP_SPAWNS.filter((path) => !offenders.includes(path)),
+ "Allowlist entry no longer spawns a bare 'rg' -- delete the line."
+ ).toEqual([])
+ })
+})
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index c2d8e8a86ede..c9860eb40fdd 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -603,16 +603,17 @@ async function deployAndLaunchRelayAttempt(
}
console.log('[ssh-relay] Relay started successfully')
- // Why first: bounded Quick Open search needs rg, so the upload must not queue behind sweep and GC;
- // the relay re-checks --ripgrep-path per spawn, so it never delays connect either.
- void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome)
- .then(() =>
- execHostCommand(
- conn,
- hostPlatform,
- recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
- )
- )
+ // Why its own statement rather than the head of the chain below: bounded Quick Open search needs
+ // rg, but on a cold host this is a multi-MB upload, and chaining the sweep behind it would leave
+ // stale stages and superseded version dirs on the remote for its whole duration. The two touch
+ // different trees (`ripgrep/` is owned by no version GC), and neither delays connect.
+ void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome).catch(() => {})
+
+ void execHostCommand(
+ conn,
+ hostPlatform,
+ recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
+ )
.catch(() => {})
// Why before GC: a superseded relay pins its version dir via the live-socket probe, so the
// sweep has to settle first or GC keeps every orphan's tree forever.
diff --git a/src/relay/fs-handler-install-rg.ts b/src/relay/fs-handler-install-rg.ts
deleted file mode 100644
index 5e5eab88aaa3..000000000000
--- a/src/relay/fs-handler-install-rg.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import {
- buildInstallRgMessage as buildSharedInstallRgMessage,
- buildRipgrepRequiredMessage as buildSharedRipgrepRequiredMessage,
- detectInstallCommand,
- detectLinuxInstallCommandFromOsRelease
-} from '../shared/quick-open-install-rg'
-
-export { detectInstallCommand, detectLinuxInstallCommandFromOsRelease }
-
-export function buildInstallRgMessage(cause: unknown): Promise {
- return buildSharedInstallRgMessage(cause, 'remote')
-}
-
-export function buildRipgrepRequiredMessage(): Promise {
- return buildSharedRipgrepRequiredMessage('remote')
-}
diff --git a/src/relay/fs-list-files-fallback-chain.ts b/src/relay/fs-list-files-fallback-chain.ts
index d34344bafa35..d60cfff80d59 100644
--- a/src/relay/fs-list-files-fallback-chain.ts
+++ b/src/relay/fs-list-files-fallback-chain.ts
@@ -7,7 +7,7 @@ import {
throwIfFileListingCancelled
} from '../shared/file-listing-cancellation'
import { isQuickOpenReaddirBudgetError } from '../shared/quick-open-readdir-walk'
-import { buildInstallRgMessage, buildRipgrepRequiredMessage } from './fs-handler-install-rg'
+import { buildInstallRgMessage, buildRipgrepRequiredMessage } from '../shared/quick-open-install-rg'
import { buildRelayCommandEnv } from './relay-command-env'
import { RipgrepUnavailableError } from '../shared/ripgrep-process-availability'
import { QuickOpenPathRanker } from '../shared/quick-open-path-search'
diff --git a/src/renderer/src/components/QuickOpen.tsx b/src/renderer/src/components/QuickOpen.tsx
index f406fab42aba..3cfdf86f1d4b 100644
--- a/src/renderer/src/components/QuickOpen.tsx
+++ b/src/renderer/src/components/QuickOpen.tsx
@@ -153,7 +153,6 @@ function QuickOpenContent({ visible }: { visible: boolean }): React.JSX.Element
return guidance ? (
diff --git a/src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx b/src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx
index 361f1457666e..2a99389f5a16 100644
--- a/src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx
+++ b/src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx
@@ -6,28 +6,17 @@ import { QuickOpenInstallRgGuidance } from './quick-open-install-rg-guidance'
afterEach(cleanup)
describe('QuickOpenInstallRgGuidance', () => {
- it('says the local host, not the remote, for a local scan', () => {
- render(
-
- )
- expect(screen.getByText(/on the host running the Quick Open scan/i)).toBeTruthy()
- expect(screen.queryByText(/on the remote/i)).toBeNull()
- })
-
- it('says the remote for a relay scan', () => {
+ // Why only the remote wording: the local side always has Orca's bundled rg, so this guidance
+ // can only ever describe a remote host that never received the upload.
+ it('names the remote as the host to install ripgrep on', () => {
render(
)
expect(screen.getByText(/on the remote to enable fast/i)).toBeTruthy()
+ expect(screen.queryByText(/on the host running the Quick Open scan/i)).toBeNull()
})
})
diff --git a/src/renderer/src/components/quick-open-install-rg-guidance.test.ts b/src/renderer/src/components/quick-open-install-rg-guidance.test.ts
index 0429563dad73..3638418eb2c9 100644
--- a/src/renderer/src/components/quick-open-install-rg-guidance.test.ts
+++ b/src/renderer/src/components/quick-open-install-rg-guidance.test.ts
@@ -2,27 +2,13 @@ import { describe, expect, it } from 'vitest'
import { parseQuickOpenInstallRgGuidance } from './quick-open-install-rg-guidance'
describe('parseQuickOpenInstallRgGuidance', () => {
- it('parses the local message and reports the local location', () => {
- expect(
- parseQuickOpenInstallRgGuidance(
- 'Quick Open scan too large (File listing timed out). Install ripgrep on the host running the Quick Open scan to enable fast, gitignore-aware listing: brew install ripgrep'
- )
- ).toEqual({
- reason: 'File listing timed out',
- location: 'local',
- command: 'brew install ripgrep',
- guidance: null
- })
- })
-
- it('keeps parsing the legacy remote message and reports the remote location', () => {
+ it('parses the remote message into a copyable command', () => {
expect(
parseQuickOpenInstallRgGuidance(
'Quick Open scan too large (File listing exceeded 10000 files). Install ripgrep on the remote to enable fast, gitignore-aware listing: sudo apt install ripgrep'
)
).toEqual({
reason: 'File listing exceeded 10000 files',
- location: 'remote',
command: 'sudo apt install ripgrep',
guidance: null
})
@@ -31,17 +17,23 @@ describe('parseQuickOpenInstallRgGuidance', () => {
it('renders generic install prose through the guidance path', () => {
expect(
parseQuickOpenInstallRgGuidance(
- 'Quick Open scan too large (File listing timed out). Install ripgrep on the host running the Quick Open scan to enable fast, gitignore-aware listing: install ripgrep via your package manager (e.g. apt/dnf/pacman)'
+ 'Quick Open scan too large (File listing timed out). Install ripgrep on the remote to enable fast, gitignore-aware listing: install ripgrep via your package manager (e.g. apt/dnf/pacman)'
)
).toEqual({
reason: 'File listing timed out',
- location: 'local',
command: null,
guidance: 'install ripgrep via your package manager (e.g. apt/dnf/pacman)'
})
})
- it('returns null for regular errors', () => {
+ // Why: only a remote host can still reach the capped fallback, so the old local wording is
+ // no longer produced anywhere and falls through to plain-text display.
+ it('returns null for the retired local wording and for regular errors', () => {
+ expect(
+ parseQuickOpenInstallRgGuidance(
+ 'Quick Open scan too large (File listing timed out). Install ripgrep on the host running the Quick Open scan to enable fast, gitignore-aware listing: brew install ripgrep'
+ )
+ ).toBeNull()
expect(parseQuickOpenInstallRgGuidance('git ls-files exited with code 128')).toBeNull()
})
})
diff --git a/src/renderer/src/components/quick-open-install-rg-guidance.tsx b/src/renderer/src/components/quick-open-install-rg-guidance.tsx
index a8f396792986..1e58e63675af 100644
--- a/src/renderer/src/components/quick-open-install-rg-guidance.tsx
+++ b/src/renderer/src/components/quick-open-install-rg-guidance.tsx
@@ -5,16 +5,10 @@ import { translate } from '@/i18n/i18n'
export type QuickOpenInstallRgGuidanceParts = {
reason: string
- // Why: the fallback runs on whichever host performs the scan. A local scan
- // must not tell the user to install ripgrep "on the remote"; the location
- // phrase in the message is the only signal for which wording to render.
- location: 'local' | 'remote'
command: string | null
guidance: string | null
}
-const REMOTE_LOCATION_PHRASE = 'on the remote'
-
/**
* Parses the install-ripgrep guidance message produced by the relay's
* buildInstallRgMessage(). Returns the parts needed to render as formatted
@@ -28,22 +22,22 @@ const REMOTE_LOCATION_PHRASE = 'on the remote'
export function parseQuickOpenInstallRgGuidance(
message: string
): QuickOpenInstallRgGuidanceParts | null {
+ // Why only the remote wording: the local side always has Orca's bundled rg, so this fallback --
+ // and therefore this message -- can only come from a remote host an upload never reached.
const match = message.match(
- /^Quick Open scan too large \((.+?)\)\. Install ripgrep (on the remote|on the host running the Quick Open scan) to enable fast, gitignore-aware listing: (.+)$/
+ /^Quick Open scan too large \((.+?)\)\. Install ripgrep on the remote to enable fast, gitignore-aware listing: (.+)$/
)
if (!match) {
return null
}
const reason = match[1]
- const location = match[2] === REMOTE_LOCATION_PHRASE ? 'remote' : 'local'
- const tail = match[3].trim()
+ const tail = match[2].trim()
// Why: on unknown distros the relay emits prose like "install ripgrep via
// your package manager (e.g. apt/dnf/pacman)"; there is no single command
// to copy, so surface it as plain guidance without the code block.
const looksLikeCommand = /^(sudo\s+)?(brew|apt|dnf|pacman|apk)\s/.test(tail)
return {
reason,
- location,
command: looksLikeCommand ? tail : null,
guidance: looksLikeCommand ? null : tail
}
@@ -51,7 +45,6 @@ export function parseQuickOpenInstallRgGuidance(
export function QuickOpenInstallRgGuidance({
reason,
- location,
command,
guidance
}: QuickOpenInstallRgGuidanceParts): React.JSX.Element {
@@ -121,15 +114,10 @@ export function QuickOpenInstallRgGuidance({
{translate('auto.components.QuickOpen.5d80dc39bb', 'ripgrep')}
{' '}
- {location === 'remote'
- ? translate(
- 'auto.components.QuickOpen.1cf8561ab4',
- 'on the remote to enable fast, gitignore-aware listing:'
- )
- : translate(
- 'auto.components.QuickOpen.344f8a48dd',
- 'on the host running the Quick Open scan to enable fast, gitignore-aware listing:'
- )}
+ {translate(
+ 'auto.components.QuickOpen.1cf8561ab4',
+ 'on the remote to enable fast, gitignore-aware listing:'
+ )}
{command ? (
diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json
index bf89d826a7ff..2fd854ffdffb 100644
--- a/src/renderer/src/i18n/locales/en.json
+++ b/src/renderer/src/i18n/locales/en.json
@@ -1947,8 +1947,7 @@
"4725b0e931": "Quick Open scan too large (",
"b227d88520": "{{value0}} files found",
"995be8ea22": "Copy",
- "cf144856dc": "Copied",
- "344f8a48dd": "on the host running the Quick Open scan to enable fast, gitignore-aware listing:"
+ "cf144856dc": "Copied"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "Copy"
diff --git a/src/renderer/src/i18n/locales/es.json b/src/renderer/src/i18n/locales/es.json
index 11c1a3629f42..76502e71d3a8 100644
--- a/src/renderer/src/i18n/locales/es.json
+++ b/src/renderer/src/i18n/locales/es.json
@@ -1596,8 +1596,7 @@
"4725b0e931": "El escaneo de apertura rápida es demasiado grande (",
"b227d88520": "{{value0}} archivos encontrados",
"995be8ea22": "Copiar",
- "cf144856dc": "Copiado",
- "344f8a48dd": "on the host running the Quick Open scan to enable fast, gitignore-aware listing:"
+ "cf144856dc": "Copiado"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "Copiar"
diff --git a/src/renderer/src/i18n/locales/fr.json b/src/renderer/src/i18n/locales/fr.json
index fffd22f627da..b20d8104af2d 100644
--- a/src/renderer/src/i18n/locales/fr.json
+++ b/src/renderer/src/i18n/locales/fr.json
@@ -1734,8 +1734,7 @@
"4725b0e931": "Scan Quick Open trop volumineux (",
"b227d88520": "{{value0}} fichiers trouvés",
"995be8ea22": "Copier",
- "cf144856dc": "Copied",
- "344f8a48dd": "sur l'hôte exécutant le scan Quick Open pour activer un listage rapide respectant .gitignore :"
+ "cf144856dc": "Copied"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "Copier"
diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json
index 6c412084d99c..ea7aa0a0344a 100644
--- a/src/renderer/src/i18n/locales/ja.json
+++ b/src/renderer/src/i18n/locales/ja.json
@@ -1596,8 +1596,7 @@
"4725b0e931": "クイックオープンスキャンが大きすぎます (",
"b227d88520": "{{value0}} ファイルが見つかりました",
"995be8ea22": "コピー",
- "cf144856dc": "コピーしました",
- "344f8a48dd": "をクイックオープンのスキャンを実行するホストで実行すると、gitignore を考慮した高速な一覧表示が有効になります:"
+ "cf144856dc": "コピーしました"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "コピー"
diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json
index 84345b0628b7..12b1b52370a0 100644
--- a/src/renderer/src/i18n/locales/ko.json
+++ b/src/renderer/src/i18n/locales/ko.json
@@ -1601,8 +1601,7 @@
"4725b0e931": "Quick Open 스캔이 너무 큼(",
"b227d88520": "{{value0}} 파일을 찾았습니다.",
"995be8ea22": "복사",
- "cf144856dc": "복사됨",
- "344f8a48dd": "on the host running the Quick Open scan to enable fast, gitignore-aware listing:"
+ "cf144856dc": "복사됨"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "복사"
diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json
index a88b55f476fc..a5018332e8e4 100644
--- a/src/renderer/src/i18n/locales/zh.json
+++ b/src/renderer/src/i18n/locales/zh.json
@@ -1599,8 +1599,7 @@
"4725b0e931": "快速打开扫描太大(",
"b227d88520": "找到 {{value0}} 文件",
"995be8ea22": "复制",
- "cf144856dc": "已复制",
- "344f8a48dd": "在运行 Quick Open 扫描的主机上启用快速、遵循 gitignore 的文件列表:"
+ "cf144856dc": "已复制"
},
"SelectedTextCopyMenu": {
"9b40d7b018": "复制"
diff --git a/src/relay/fs-handler-install-rg.test.ts b/src/shared/quick-open-install-rg.test.ts
similarity index 95%
rename from src/relay/fs-handler-install-rg.test.ts
rename to src/shared/quick-open-install-rg.test.ts
index edc2424c6455..f6a0a39e5f62 100644
--- a/src/relay/fs-handler-install-rg.test.ts
+++ b/src/shared/quick-open-install-rg.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it, vi } from 'vitest'
-import { detectLinuxInstallCommandFromOsRelease } from './fs-handler-install-rg'
+import { detectLinuxInstallCommandFromOsRelease } from './quick-open-install-rg'
describe('detectLinuxInstallCommandFromOsRelease', () => {
it('uses apt for Debian and Ubuntu families', () => {
diff --git a/src/shared/quick-open-install-rg.ts b/src/shared/quick-open-install-rg.ts
index 9bd371148232..ba4215303703 100644
--- a/src/shared/quick-open-install-rg.ts
+++ b/src/shared/quick-open-install-rg.ts
@@ -75,23 +75,16 @@ function readOsReleaseValue(rawValue: string): string {
: trimmed
}
-export async function buildInstallRgMessage(
- cause: unknown,
- host: 'local' | 'remote' = 'local'
-): Promise
{
+// Why remote-only: the local side always has Orca's bundled rg, so only a remote host an upload
+// never reached can still fall back to the capped git/readdir listing these messages explain.
+export async function buildInstallRgMessage(cause: unknown): Promise {
const reason = cause instanceof Error ? cause.message : String(cause)
- const cmd = await detectInstallCommand()
- const location = host === 'local' ? 'on the host running the Quick Open scan' : 'on the remote'
return (
`Quick Open scan too large (${reason}). ` +
- `Install ripgrep ${location} to enable fast, gitignore-aware listing: ${cmd}`
+ `Install ripgrep on the remote to enable fast, gitignore-aware listing: ${await detectInstallCommand()}`
)
}
-export async function buildRipgrepRequiredMessage(
- host: 'local' | 'remote' = 'local'
-): Promise {
- const cmd = await detectInstallCommand()
- const location = host === 'local' ? 'on the host running Quick Open' : 'on the remote'
- return `Quick Open search requires ripgrep ${location} to stay resource-bounded. Install it with: ${cmd}`
+export async function buildRipgrepRequiredMessage(): Promise {
+ return `Quick Open search requires ripgrep on the remote to stay resource-bounded. Install it with: ${await detectInstallCommand()}`
}
From 622b315ab7644f45a399c9644cf2e4d3e7bd3570 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 13:51:23 -0700
Subject: [PATCH 06/25] test(ssh): pin that the cleanup sweep does not wait on
the ripgrep upload
---
.../ssh-relay-deploy-staged-upload.test.ts | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
index 6ff1a94909c8..f28855b360e0 100644
--- a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
@@ -86,6 +86,8 @@ import { execCommand, waitForSentinel } from './ssh-relay-deploy-helpers'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
import { isRelayAlreadyInstalled } from './ssh-relay-versioned-install'
import { acquireInstallLock } from './ssh-relay-install-lock'
+import { ensureRemoteBundledRipgrep } from './ssh-relay-ripgrep-install'
+import { RELAY_UPLOAD_STAGE_POOL_NAME } from './ssh-relay-upload-stage-contract'
import {
RELAY_DEPLOY_TEARDOWN_TIMEOUT_MS,
RELAY_DEPLOY_TIMEOUT_MS
@@ -570,4 +572,31 @@ describe('deployAndLaunchRelay staged uploads', () => {
await deployAndLaunchRelay(conn)
expect(conn.uploadDirectory).toHaveBeenCalledTimes(2)
})
+ // Why: a cold host's rg upload is a multi-MB transfer. While the cleanup sweep was chained
+ // behind it, stale upload stages and superseded version dirs sat on the remote for that whole
+ // duration. A never-settling install stands in for that transfer.
+ it('sweeps stale upload stages without waiting for the ripgrep upload', async () => {
+ const conn = makeMockConnection()
+ vi.mocked(ensureRemoteBundledRipgrep).mockReturnValueOnce(new Promise(() => {}))
+ let socketProbe = 0
+ vi.mocked(execCommand).mockImplementation((_conn, command) => {
+ if (command.includes('uname')) {
+ return Promise.resolve('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
+ }
+ if (command === 'echo $HOME') {
+ return Promise.resolve('/home/user')
+ }
+ if (command.includes('test -S')) {
+ return Promise.resolve(socketProbe++ === 0 ? 'DEAD' : 'READY')
+ }
+ return Promise.resolve('')
+ })
+
+ await deployAndLaunchRelay(conn)
+
+ await vi.waitFor(() => {
+ const commands = vi.mocked(execCommand).mock.calls.map(([, command]) => command)
+ expect(commands.some((command) => command.includes(RELAY_UPLOAD_STAGE_POOL_NAME))).toBe(true)
+ })
+ })
})
From b435f4258389217e6aea9bc18eb806e7a9797533 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 15:40:41 -0700
Subject: [PATCH 07/25] fix(search): derive rg spawn types instead of importing
node:child_process
A type-only import still counts against the child_process ratchet, whose pin
and allowlist only ever shrink. Derive both types from wslAwareSpawn instead.
---
src/main/ipc/filesystem-search-file-paths.ts | 3 +--
src/main/ripgrep/bundled-ripgrep-spawn.ts | 12 +++++++++---
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index 994c42038f51..20094425f32d 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -1,4 +1,3 @@
-import type { ChildProcess } from 'node:child_process'
import { sep } from 'node:path'
import type { Store } from '../persistence'
import { fileListingCancellationError } from '../../shared/file-listing-cancellation'
@@ -112,7 +111,7 @@ function scanRipgrepPaths(args: {
let parseablePathCount = 0
let processErrorObserved = false
let unavailableExitObserved = false
- let child: ChildProcess
+ let child: ReturnType
try {
child = spawnBundledRipgrep(args.args, {
cwd: args.authorizedRootPath,
diff --git a/src/main/ripgrep/bundled-ripgrep-spawn.ts b/src/main/ripgrep/bundled-ripgrep-spawn.ts
index ec354129042b..6701039312d0 100644
--- a/src/main/ripgrep/bundled-ripgrep-spawn.ts
+++ b/src/main/ripgrep/bundled-ripgrep-spawn.ts
@@ -1,8 +1,14 @@
-import type { ChildProcess, SpawnOptions } from 'node:child_process'
import { wslAwareSpawn } from '../git/runner'
import { bundledRipgrepCommand, bundledRipgrepWslSpawnOptions } from './bundled-ripgrep-path'
-export type BundledRipgrepSpawnOptions = SpawnOptions & {
+// Why derived rather than imported from node:child_process: a direct import would land this file
+// on the child_process ratchet's allowlist, which only ever shrinks.
+type WslAwareSpawnOptions = Parameters[2]
+
+export type BundledRipgrepSpawnOptions = Omit<
+ WslAwareSpawnOptions,
+ 'wslDistro' | 'wslShellCommand' | 'useWslLoginShell'
+> & {
cwd: string
/** Distro whose git options own this workspace; routes the spawn through wsl.exe. */
wslDistro?: string
@@ -18,7 +24,7 @@ export type BundledRipgrepSpawnOptions = SpawnOptions & {
export function spawnBundledRipgrep(
args: string[],
options: BundledRipgrepSpawnOptions
-): ChildProcess {
+): ReturnType {
const { wslDistro, wslDistroForOutput, ...spawnOptions } = options
const command = bundledRipgrepCommand({ wsl: Boolean(wslDistroForOutput) })
return wslAwareSpawn(command, args, {
From e14d7eff73759aba7d3ac63252d68f02378fdb28 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 16:30:16 -0700
Subject: [PATCH 08/25] fix(search): surface an unreachable WSL workspace
instead of an empty result
Inside `bash -c`, a failed `cd` exits 1 -- the same code ripgrep uses for "no
matches" -- so a WSL workspace whose directory had gone away reported an empty
listing as a successful scan. main did not have this hole: checkRgAvailable ran
the same `cd` wrapper first and settled on `code === 0`, diverting to the git
fallback that this PR deletes. The WSL wrapper now takes an optional
cwdFailureExitCode; rg passes 97, and all four close handlers reject with a
clear error before the unavailable check can blame the install.
Also from review:
- Bound the fire-and-forget ripgrep upload with deploySignal. The controller
aborts only on the deploy timeout, never on success, so this cancels a
still-running upload when the deploy gives up.
- Run the stale-stage sweep before the installed check rather than inside its
else branch. Once rg was installed every later deploy took the PRESENT path,
so a stage orphaned by a dropped connection was never collected again.
- Note in orcad-remote-deploy.ts why wiring it up needs ripgrep work first:
build-orcad.mjs copies only the build host's rg, and orcad reports
isPackaged() === true, so a remote of another platform would find nothing.
ssh-relay-deploy.test.ts sat at the max-lines cap, so any edit to it failed the
gate. Split the four Windows named-pipe deploys into their own file (926 -> 737
+ 333); both are now well clear of it.
---
ci-shards/unit-assignment.json | 9425 +++++++++++++++++
.../git/command-runner/wsl-aware-spawn.ts | 7 +-
.../command-runner/wsl-command-resolution.ts | 16 +-
src/main/ipc/filesystem-list-files.ts | 9 +
src/main/ipc/filesystem-search-file-paths.ts | 7 +
.../filesystem/filesystem-search-handlers.ts | 10 +-
src/main/ripgrep/bundled-ripgrep-spawn.ts | 6 +
src/main/ripgrep/wsl-missing-cwd-exit.test.ts | 60 +
...ile-commands-search-local-runtime-files.ts | 10 +-
src/main/ssh/orcad-remote-deploy.ts | 6 +
.../ssh/ssh-relay-deploy-windows-pipe.test.ts | 333 +
src/main/ssh/ssh-relay-deploy.test.ts | 196 +-
src/main/ssh/ssh-relay-deploy.ts | 6 +-
src/main/ssh/ssh-relay-ripgrep-install.ts | 7 +-
src/shared/ripgrep-process-availability.ts | 16 +
15 files changed, 9914 insertions(+), 200 deletions(-)
create mode 100644 ci-shards/unit-assignment.json
create mode 100644 src/main/ripgrep/wsl-missing-cwd-exit.test.ts
create mode 100644 src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
diff --git a/ci-shards/unit-assignment.json b/ci-shards/unit-assignment.json
new file mode 100644
index 000000000000..c597d7c9bdbf
--- /dev/null
+++ b/ci-shards/unit-assignment.json
@@ -0,0 +1,9425 @@
+{
+ "sourceSha": "ede2838c0c16735068e29ee3ef2ee03bd5427bbe",
+ "runId": null,
+ "runAttempt": null,
+ "algorithm": "file-lpt-v1",
+ "fallbackMs": 23,
+ "overheadMs": 526,
+ "shards": [
+ {
+ "files": [
+ "config/scripts/assert-github-release-is-draft.test.mjs",
+ "config/scripts/benchmark-sample-summary.test.mjs",
+ "config/scripts/check-ts-nocheck-ratchet.test.mjs",
+ "config/scripts/ci-e2e-shard-selection.test.mjs",
+ "config/scripts/ci-native-toolchain.test.mjs",
+ "config/scripts/dev-channel-base-version.test.mjs",
+ "config/scripts/electron-builder-speech-config.test.mjs",
+ "config/scripts/electron-runtime-floor.test.ts",
+ "config/scripts/headless-serve-shutdown-workflow.test.mjs",
+ "config/scripts/hourly-build-version.test.mjs",
+ "config/scripts/install-node-dependencies-action.test.mjs",
+ "config/scripts/mobile-mirrored-storage-write-path.test.mjs",
+ "config/scripts/mobile-web-app-editable-host-font-size.test.mjs",
+ "config/scripts/mobile-web-app-html-preview-render.test.mjs",
+ "config/scripts/mobile-web-app-screencast-lane-grant.test.mjs",
+ "config/scripts/mobile-web-app-session-webview-consumers.test.mjs",
+ "config/scripts/mobile-web-app-terminal-render-fixture.test.mjs",
+ "config/scripts/mobile-web-source-line-endings.test.mjs",
+ "config/scripts/pr-test-loc-summary.test.mjs",
+ "config/scripts/regenerate-xterm-patches.test.mjs",
+ "config/scripts/release-cut-signpath-slack.test.mjs",
+ "config/scripts/script-module-dependencies.test.mjs",
+ "config/scripts/shared-electron-dist-cache.test.ts",
+ "config/scripts/terminal-ime-engagement-receipt.test.mjs",
+ "config/scripts/verify-packaged-node-pty-job-ownership.test.mjs",
+ "src/cli/agent-context.test.ts",
+ "src/cli/agent-session-search-format.test.ts",
+ "src/cli/automation-owner-conflict-recovery.test.ts",
+ "src/cli/command-suggestion.test.ts",
+ "src/cli/computer-format.test.ts",
+ "src/cli/emulator-logcat-format.test.ts",
+ "src/cli/handlers/computer.test.ts",
+ "src/cli/handlers/orchestration-gate-cli.test.ts",
+ "src/cli/handlers/orchestration-send-receipt-warnings.test.ts",
+ "src/cli/handlers/orchestration-task-create-cli.test.ts",
+ "src/cli/handlers/orchestration-task-list-brief.test.ts",
+ "src/cli/handlers/orchestration-worker-cli.test.ts",
+ "src/cli/index-automation-identifiers.test.ts",
+ "src/cli/index-automation-session-reuse.test.ts",
+ "src/cli/index-local-command-routing-flags.test.ts",
+ "src/cli/index-orchestration.test.ts",
+ "src/cli/linear-format.test.ts",
+ "src/cli/orchestration-mutation-recovery.test.ts",
+ "src/cli/runtime/types.test.ts",
+ "src/cli/specs/bundled-guide-flags.test.ts",
+ "src/cli/terminal-format-draft.test.ts",
+ "src/main/agent-hooks/first-work-folder-rename.test.ts",
+ "src/main/agent-hooks/managed-hook-owner-identity.test.ts",
+ "src/main/agent-hooks/managed-hook-script-refresh-main-thread.test.ts",
+ "src/main/agent-hooks/manual-compact-hook-stream.test.ts",
+ "src/main/agent-hooks/migration-unsupported-pty-state.test.ts",
+ "src/main/agent-hooks/posix-hook-json-stdin-reader.test.ts",
+ "src/main/agent-hooks/server-codex-normalization.test.ts",
+ "src/main/agent-hooks/server-interrupt-inference-guards.test.ts",
+ "src/main/agent-hooks/server-interrupt-inference-validation.test.ts",
+ "src/main/agent-hooks/server-pane-authority.test.ts",
+ "src/main/agent-hooks/server-transport-interference.test.ts",
+ "src/main/agent-launch/agent-launch-executor.test.ts",
+ "src/main/ai-vault-search/session-search-index-generation.test.ts",
+ "src/main/ai-vault-search/session-search-index-pass.test.ts",
+ "src/main/ai-vault-search/session-search-scope-resolution.test.ts",
+ "src/main/ai-vault-search/session-search-synthetic-corpus.test.ts",
+ "src/main/ai-vault/remote-session-content-lines.test.ts",
+ "src/main/ai-vault/session-delete.test.ts",
+ "src/main/ai-vault/session-document-stream-projection.test.ts",
+ "src/main/ai-vault/session-newest-files.test.ts",
+ "src/main/ai-vault/session-scanner-antigravity-source.test.ts",
+ "src/main/ai-vault/session-scanner-codex-title-index.test.ts",
+ "src/main/ai-vault/session-scanner-codex-tool-records.test.ts",
+ "src/main/ai-vault/session-scanner-devin-db.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-coexistence.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-paths.test.ts",
+ "src/main/ai-vault/session-scanner-parse-wsl-stall.test.ts",
+ "src/main/ai-vault/session-scanner-record-budget.test.ts",
+ "src/main/ai-vault/session-scanner-service-restart-policy.test.ts",
+ "src/main/ai-vault/session-transcript-every-agent-capture.test.ts",
+ "src/main/ai-vault/session-transcript-message-content.test.ts",
+ "src/main/ai-vault/structured-session-ownership.test.ts",
+ "src/main/antigravity/hook-service.test.ts",
+ "src/main/app-icon.test.ts",
+ "src/main/automations/automation-dispatch-host-fence.test.ts",
+ "src/main/automations/automation-update-host-retarget.test.ts",
+ "src/main/browser/agent-browser-bridge-automation-visibility.test.ts",
+ "src/main/browser/agent-browser-bridge-navigation.test.ts",
+ "src/main/browser/agent-browser-bridge-pointer-input.test.ts",
+ "src/main/browser/browser-client-download-relay.test.ts",
+ "src/main/browser/browser-client-file-channel-negotiation.test.ts",
+ "src/main/browser/browser-client-page-automation-runtime.test.ts",
+ "src/main/browser/browser-client-page-metadata-transport.test.ts",
+ "src/main/browser/browser-client-page-renderer-runtime.test.ts",
+ "src/main/browser/browser-cookie-import-app-bound-prefix.test.ts",
+ "src/main/browser/browser-cookie-import-write.test.ts",
+ "src/main/browser/browser-host-client-identity.test.ts",
+ "src/main/browser/browser-manager-guest-shortcuts.test.ts",
+ "src/main/browser/browser-manager-viewport-override.test.ts",
+ "src/main/browser/browser-manager-worker-request-user-agent.test.ts",
+ "src/main/browser/browser-network-tunnel-conformance.test.ts",
+ "src/main/browser/browser-page-initiated-tab-budget.test.ts",
+ "src/main/browser/browser-route-guest-popups.test.ts",
+ "src/main/browser/browser-route-identity.test.ts",
+ "src/main/browser/browser-route-partition-storage-lifecycle.test.ts",
+ "src/main/browser/browser-route-prepared-page-rekey.test.ts",
+ "src/main/browser/browser-session-cookie-staging.scoped.test.ts",
+ "src/main/browser/browser-text-insertion.test.ts",
+ "src/main/browser/cdp-client-response-writer.test.ts",
+ "src/main/browser/local-ssh-browser-route.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-runtime.test.ts",
+ "src/main/browser/snapshot-engine.test.ts",
+ "src/main/browser/ssh-browser-network-execution-route.test.ts",
+ "src/main/claude-accounts/claude-account-service-api-parity.test.ts",
+ "src/main/claude-accounts/oauth-refresh.test.ts",
+ "src/main/claude-usage/claude-usage-report-aggregation.test.ts",
+ "src/main/claude/claude-background-task-row-journal.test.ts",
+ "src/main/claude/claude-structured-dispatch-boundary.test.ts",
+ "src/main/claude/claude-structured-option-confirmation.test.ts",
+ "src/main/claude/claude-structured-owner-identity.test.ts",
+ "src/main/claude/claude-structured-permission-mode.test.ts",
+ "src/main/claude/claude-turn-ownership.test.ts",
+ "src/main/cli/appimage-extraction-pruning.test.ts",
+ "src/main/cli/cli-installer-appimage-removal.test.ts",
+ "src/main/cli/packaged-cli-assets.test.ts",
+ "src/main/cli/wsl-cli-registration-operation.test.ts",
+ "src/main/codex-accounts/codex-auth-workspace-identity.test.ts",
+ "src/main/codex-accounts/legacy-shared-auth-migration.test.ts",
+ "src/main/codex-accounts/managed-codex-auth-readiness.test.ts",
+ "src/main/codex-accounts/runtime-home-managed-auth-recovery.test.ts",
+ "src/main/codex-accounts/runtime-home-session-migration-pass.test.ts",
+ "src/main/codex-accounts/sta-4735-unreadable-host-lane-writes.test.ts",
+ "src/main/codex-accounts/wsl-codex-command.test.ts",
+ "src/main/codex-usage/codex-usage-cost-estimate.test.ts",
+ "src/main/codex-usage/store-orca-scope.test.ts",
+ "src/main/codex/codex-hooks-read-denial-followup.test.ts",
+ "src/main/codex/codex-session-backfill-marker.test.ts",
+ "src/main/codex/codex-session-index-heal.test.ts",
+ "src/main/codex/codex-session-migration-recent-exits.test.ts",
+ "src/main/codex/codex-structured-dispatch-boundary.test.ts",
+ "src/main/codex/codex-structured-journal-translation-turn-state.test.ts",
+ "src/main/codex/codex-structured-rewind.test.ts",
+ "src/main/codex/codex-structured-turn-processes.integration.test.ts",
+ "src/main/codex/codex-trust-config-concurrent-launch.test.ts",
+ "src/main/codex/config-toml-trust-key.test.ts",
+ "src/main/codex/config-toml-trust-project.test.ts",
+ "src/main/codex/hook-service-concurrent-launch-install.test.ts",
+ "src/main/codex/hook-trust-promotion.test.ts",
+ "src/main/codex/windows-hook-command.test.ts",
+ "src/main/codex/wsl-codex-session-bridge.test.ts",
+ "src/main/computer/computer-action-verification-normalization.test.ts",
+ "src/main/computer/desktop-script-provider-action-errors.test.ts",
+ "src/main/computer/desktop-script-provider-errors.test.ts",
+ "src/main/computer/desktop-script-provider-paste-validation.test.ts",
+ "src/main/computer/desktop-script-serve-channel.test.ts",
+ "src/main/computer/macos-computer-use-permission-status.test.ts",
+ "src/main/computer/macos-native-provider-socket.test.ts",
+ "src/main/computer/windows-powershell-execution-policy.test.ts",
+ "src/main/crash-reporting/crash-breadcrumb-store-leak.test.ts",
+ "src/main/crash-reporting/crash-report-copy-text.test.ts",
+ "src/main/crash-reporting/crashpad-capture-read-limit.test.ts",
+ "src/main/crash-reporting/process-gone-dedupe.test.ts",
+ "src/main/daemon/daemon-adoption-telemetry-event.test.ts",
+ "src/main/daemon/daemon-checkpoint-session-queue.test.ts",
+ "src/main/daemon/daemon-durable-history-ownership-seed.test.ts",
+ "src/main/daemon/daemon-endpoint-ownership.test.ts",
+ "src/main/daemon/daemon-health.test.ts",
+ "src/main/daemon/daemon-incarnation-evidence.test.ts",
+ "src/main/daemon/daemon-init-child-startup-failure.test.ts",
+ "src/main/daemon/daemon-init-live-session-preservation.test.ts",
+ "src/main/daemon/daemon-init-wedged-daemon-grace.test.ts",
+ "src/main/daemon/daemon-pty-adapter-session-adoption.test.ts",
+ "src/main/daemon/daemon-pty-write-settlement-recovery.test.ts",
+ "src/main/daemon/daemon-reattach-checkpoint-isolation.test.ts",
+ "src/main/daemon/daemon-restore-scrollback-depth.test.ts",
+ "src/main/daemon/daemon-session-scrollback-window.test.ts",
+ "src/main/daemon/daemon-stream-data-batcher.test.ts",
+ "src/main/daemon/daemon-stream-data-split.test.ts",
+ "src/main/daemon/daemon-stream-droppability-lifecycle.test.ts",
+ "src/main/daemon/headless-emulator-restored-osc-links.test.ts",
+ "src/main/daemon/post-ready-flush-gate.test.ts",
+ "src/main/daemon/pty-subprocess-git-credential-guard.test.ts",
+ "src/main/daemon/pty-subprocess.test.ts",
+ "src/main/daemon/session.test.ts",
+ "src/main/daemon/terminal-checkpoint-writer-bounds.test.ts",
+ "src/main/daemon/terminal-history-incremental-restore.test.ts",
+ "src/main/daemon/terminal-history-seed-segments.test.ts",
+ "src/main/daemon/terminal-history-seed-transfer-registry.test.ts",
+ "src/main/daemon/terminal-host-attach-only.test.ts",
+ "src/main/daemon/terminal-host-cheap-tier-ps-scan-volume.test.ts",
+ "src/main/daemon/terminal-host-concurrent-create.test.ts",
+ "src/main/daemon/terminal-host-readiness-reporting.test.ts",
+ "src/main/daemon/terminal-host-session-reaping-leak.test.ts",
+ "src/main/daemon/terminal-snapshot-serialize-roundtrip.test.ts",
+ "src/main/daemon/windows-conpty-warmup.test.ts",
+ "src/main/diagnostics/main-thread-churn-probe.test.ts",
+ "src/main/dock/unread-badge.test.ts",
+ "src/main/emulator/android/android-logcat.test.ts",
+ "src/main/emulator/android/android-sdk-discovery.test.ts",
+ "src/main/emulator/serve-sim-runtime-materializer.test.ts",
+ "src/main/ghostty/mapper-extended.test.ts",
+ "src/main/ghostty/theme-resolution.test.ts",
+ "src/main/git/command-runner/gh-exec-file-deadline.test.ts",
+ "src/main/git/command-runner/git-exec-admission-lifetime.test.ts",
+ "src/main/git/command-runner/git-spawn-admission-lifetime.test.ts",
+ "src/main/git/command-runner/git-stream-admission-lifetime.test.ts",
+ "src/main/git/git-capability-state.test.ts",
+ "src/main/git/git-username.test.ts",
+ "src/main/git/repo-branch-conflict-real-git.test.ts",
+ "src/main/git/repo-remote-drift.test.ts",
+ "src/main/git/runner-command-exec.test.ts",
+ "src/main/git/status-branch-compare-real-ref.test.ts",
+ "src/main/git/status-branch-compare.test.ts",
+ "src/main/git/status-branch-line-total-real-git.test.ts",
+ "src/main/git/status-diff-settled-cache.test.ts",
+ "src/main/git/status-discard-symlink.test.ts",
+ "src/main/git/status-upstream-probe-churn.test.ts",
+ "src/main/git/worktree-common-dir-comparison.test.ts",
+ "src/main/git/worktree-posix-path-case-sensitivity.test.ts",
+ "src/main/git/worktree-sparse-checkout.test.ts",
+ "src/main/github/client-work-item-check-summary.test.ts",
+ "src/main/github/github-api-repository.test.ts",
+ "src/main/github/github-repository-identity.gh-account.test.ts",
+ "src/main/github/github-repository-identity.signed-cache.test.ts",
+ "src/main/github/pr-head-tracking-ref.test.ts",
+ "src/main/github/pr-refresh-coordinator-active-visible-priority.test.ts",
+ "src/main/github/review-head-remote.test.ts",
+ "src/main/gitlab/client-mr-auth-rate-limit.test.ts",
+ "src/main/gitlab/client-work-items.test.ts",
+ "src/main/gitlab/gitlab-known-host-retirement.test.ts",
+ "src/main/hang-watchdog/hang-watchdog-worker-path.test.ts",
+ "src/main/hooks-runner.test.ts",
+ "src/main/host-tree-removal-asar.electron.test.ts",
+ "src/main/ipc/ai-vault-scan-coalescing.test.ts",
+ "src/main/ipc/ai-vault-search-all-hosts-real-index.test.ts",
+ "src/main/ipc/app.test.ts",
+ "src/main/ipc/browser-session-profile-ipc.test.ts",
+ "src/main/ipc/browser.test.ts",
+ "src/main/ipc/created-worktree-root-prune.test.ts",
+ "src/main/ipc/dashboard-payload-validation.test.ts",
+ "src/main/ipc/developer-permissions.test.ts",
+ "src/main/ipc/diagnostics.test.ts",
+ "src/main/ipc/ephemeral-vm-runtime-handler-cleanup.test.ts",
+ "src/main/ipc/ephemeral-vm.test.ts",
+ "src/main/ipc/feedback-image-attachments.test.ts",
+ "src/main/ipc/filesystem-git-commit-dispatch.test.ts",
+ "src/main/ipc/filesystem-import-ssh.test.ts",
+ "src/main/ipc/filesystem-mutations-runtime-upload.test.ts",
+ "src/main/ipc/filesystem-watcher-ignore.test.ts",
+ "src/main/ipc/native-chat.test.ts",
+ "src/main/ipc/notebook.test.ts",
+ "src/main/ipc/parcel-watcher-event-cancellation.test.ts",
+ "src/main/ipc/pet-bundle.test.ts",
+ "src/main/ipc/pet.test.ts",
+ "src/main/ipc/preflight-agent-refresh.test.ts",
+ "src/main/ipc/pty-activation-inventory-scope.test.ts",
+ "src/main/ipc/pty-daemon-controller-teardown.test.ts",
+ "src/main/ipc/pty-daemon-spawn-codex-auth.test.ts",
+ "src/main/ipc/pty-global-renderer-credit.test.ts",
+ "src/main/ipc/pty-ipc-producer-flow-control.test.ts",
+ "src/main/ipc/pty-ssh-undelivered-kill.test.ts",
+ "src/main/ipc/pty/runtime/queried-host-kinds.test.ts",
+ "src/main/ipc/pty/runtime/spawn-preflight-requested-shell.test.ts",
+ "src/main/ipc/remote-workspace-cache.test.ts",
+ "src/main/ipc/remote-workspace-patch-queue.test.ts",
+ "src/main/ipc/remote-workspace-stale-resync.test.ts",
+ "src/main/ipc/repos-add-linked-worktree.test.ts",
+ "src/main/ipc/repos-sparse-presets.test.ts",
+ "src/main/ipc/runtime-environments-status-diagnostics.test.ts",
+ "src/main/ipc/runtime-environments-subscription-routing.test.ts",
+ "src/main/ipc/runtime-subscribe-lifecycle.test.ts",
+ "src/main/ipc/runtime-upload-slice-boundaries.test.ts",
+ "src/main/ipc/ssh-pty-model-admission.test.ts",
+ "src/main/ipc/ssh-pty-source-ack-coalescer.test.ts",
+ "src/main/ipc/ssh-state-broadcast-fanout.test.ts",
+ "src/main/ipc/watched-worktree-catalog-notification.test.ts",
+ "src/main/ipc/workspace-space.test.ts",
+ "src/main/ipc/worktree-base-directory-watcher.test.ts",
+ "src/main/ipc/worktree-git-common-polling.test.ts",
+ "src/main/ipc/worktree-logic-created-agent.test.ts",
+ "src/main/ipc/worktree-push-target-refspec-migration.test.ts",
+ "src/main/ipc/worktree-push-target-setup.test.ts",
+ "src/main/ipc/worktree-watcher-removal-binding.test.ts",
+ "src/main/ipc/worktrees-create-execution-host-routing.test.ts",
+ "src/main/ipc/worktrees-lineage-hydration.test.ts",
+ "src/main/ipc/worktrees-ssh-branch-conflict-suffixing.test.ts",
+ "src/main/ipc/worktrees/listing/detected-provider-listing-meta-index.test.ts",
+ "src/main/ipc/worktrees/listing/detected-worktree-scan-hygiene-gate.test.ts",
+ "src/main/ipc/worktrees/listing/detected-worktree-scan-superseded.test.ts",
+ "src/main/jira/jira-issue-mutations.test.ts",
+ "src/main/keybindings/keybinding-service.test.ts",
+ "src/main/linear/issue-search-summary.test.ts",
+ "src/main/linux-package-install-diagnostic.test.ts",
+ "src/main/local-worktree-removal-recovery.test.ts",
+ "src/main/macos-press-and-hold-default.defaults-domain.test.ts",
+ "src/main/menu/gpu-acceleration-about-panel.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-dispatch-reason-bound.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-epoch-replacement.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-row-schema.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-row-writer.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-claude-root-exit.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-ownership.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-send-idempotency.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-send-settlement.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-send.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-status-feed.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-task-queue.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-turns.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-unanswered-dispatch-release.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-conversation-replacements.test.ts",
+ "src/main/native-chat/native-chat-file-provenance.test.ts",
+ "src/main/native-chat/session-file-resolver-wsl-scan-gate.test.ts",
+ "src/main/native-chat/transcript-fallback-id.test.ts",
+ "src/main/native-chat/transcript-line-decoders-claude-control-bytes.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-gate.test.ts",
+ "src/main/native-chat/wsl-transcript-running-observer.test.ts",
+ "src/main/opencode-usage/scanner-windows-data-directory.test.ts",
+ "src/main/opencode-usage/scanner.test.ts",
+ "src/main/opencode/hook-plugin-message-part-throttle.test.ts",
+ "src/main/opencode/hook-plugin-module-contract.test.ts",
+ "src/main/orca-profiles/profile-artifact-cloud-cleanup.test.ts",
+ "src/main/orca-profiles/profile-cloud-dev-service.test.ts",
+ "src/main/orcad/electron-serve-browser-process.test.ts",
+ "src/main/orcad/node-pty-prebuilt-slot.test.ts",
+ "src/main/orcad/orcad-sidecar-runtime-client.test.ts",
+ "src/main/persistence-cross-host-pane-identity.test.ts",
+ "src/main/persistence-feature-interaction-broadcast.benchmark.test.ts",
+ "src/main/persistence-initial-load.test.ts",
+ "src/main/persistence-ssh-readoption-automation-migration.test.ts",
+ "src/main/persistence-ssh-targets-and-pane-keys.test.ts",
+ "src/main/persistence-worktree-visibility.test.ts",
+ "src/main/persistence/loading-store/worktree-meta-write-normalization.test.ts",
+ "src/main/persistence/tracking-repos/probeable-local-worktree-metadata-candidates.test.ts",
+ "src/main/persistence/tracking-repos/project-host-compatibility.test.ts",
+ "src/main/pi/agent-status-extension-omp-model.test.ts",
+ "src/main/pi/titlebar-extension-overlay-path.test.ts",
+ "src/main/plugins/plugin-audit-log-scaling.test.ts",
+ "src/main/plugins/plugin-enablement.test.ts",
+ "src/main/plugins/plugin-panel-owner-lifecycle.test.ts",
+ "src/main/plugins/plugin-uninstall-log-retention.test.ts",
+ "src/main/plugins/plugin-worker-controller.test.ts",
+ "src/main/plugins/plugin-worker-env.test.ts",
+ "src/main/project-groups/nested-repo-import-target.test.ts",
+ "src/main/project-runtime-git-options.test.ts",
+ "src/main/providers/agent-foreground-process-ps-scan-volume.test.ts",
+ "src/main/providers/agent-foreground-process.test.ts",
+ "src/main/providers/local-pty-default-shell.test.ts",
+ "src/main/providers/local-pty-provider-io-events.test.ts",
+ "src/main/providers/local-pty-provider-spawn-cwd-safety.test.ts",
+ "src/main/providers/local-pty-provider-spawn-env.test.ts",
+ "src/main/providers/ssh-filesystem-doc-preview.test.ts",
+ "src/main/providers/ssh-filesystem-provider-download-folder.test.ts",
+ "src/main/providers/ssh-git-provider-staging.test.ts",
+ "src/main/providers/ssh-pty-provider-spawn.test.ts",
+ "src/main/pty/omp-sqlite-overlay.test.ts",
+ "src/main/pty/overlay-mirror.test.ts",
+ "src/main/pty/posix-pty-foreground-group.test.ts",
+ "src/main/rate-limits/claude-fetcher-cli-fallback.test.ts",
+ "src/main/rate-limits/codex-rate-limit-window-classification.test.ts",
+ "src/main/rate-limits/gemini-bucket-formatting.test.ts",
+ "src/main/rate-limits/hidden-pty-cleanup.test.ts",
+ "src/main/repo-git-remote-identity.test.ts",
+ "src/main/repo-icon-autodetect.test.ts",
+ "src/main/repo-icon-file-detection.test.ts",
+ "src/main/runtime/agent-session-handoff-lease-transitions.test.ts",
+ "src/main/runtime/agent-session-record-store-security.test.ts",
+ "src/main/runtime/agent-session-restart-handoff-adjudication.test.ts",
+ "src/main/runtime/browser-host-client-page-adoption.test.ts",
+ "src/main/runtime/browser-host-file-channel-admission.test.ts",
+ "src/main/runtime/browser-tab-create-caller-navigation.test.ts",
+ "src/main/runtime/client-hosted-page-reconciliation-window.test.ts",
+ "src/main/runtime/fetch-remote-cache.test.ts",
+ "src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts",
+ "src/main/runtime/headless-tab-group-split-layout.test.ts",
+ "src/main/runtime/headless-tab-order-stability.test.ts",
+ "src/main/runtime/mobile-session-terminal-persistence-retirement.test.ts",
+ "src/main/runtime/mobile-session-terminal-retirement.test.ts",
+ "src/main/runtime/multi-client-navigation-isolation.integration.test.ts",
+ "src/main/runtime/orca-runtime-agent-session-operation.test.ts",
+ "src/main/runtime/orca-runtime-browser-screencast-fanout.test.ts",
+ "src/main/runtime/orca-runtime-create-base-prefetch.test.ts",
+ "src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts",
+ "src/main/runtime/orca-runtime-files-search.test.ts",
+ "src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts",
+ "src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts",
+ "src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts",
+ "src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts",
+ "src/main/runtime/orca-runtime-module-size.test.ts",
+ "src/main/runtime/orca-runtime-structured-claude-account-gate.test.ts",
+ "src/main/runtime/orca-runtime-tab-id-collision.test.ts",
+ "src/main/runtime/orchestration/coordinator.test.ts",
+ "src/main/runtime/orchestration/db/decision-gate-lifecycle.test.ts",
+ "src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-release.test.ts",
+ "src/main/runtime/orchestration/db/run-list-cursor.test.ts",
+ "src/main/runtime/orchestration/db/schema/structured-pointer-schema-migration.test.ts",
+ "src/main/runtime/orchestration/federation-acknowledgment-migration.test.ts",
+ "src/main/runtime/orchestration/nested-worker-depth-migration.test.ts",
+ "src/main/runtime/orchestration/orchestration-adopted-run-binding.test.ts",
+ "src/main/runtime/orchestration/orchestration-all-start-versions-migration.test.ts",
+ "src/main/runtime/orchestration/orchestration-creator-authority-performance.test.ts",
+ "src/main/runtime/orchestration/orchestration-derived-delivery.test.ts",
+ "src/main/runtime/orchestration/orchestration-worker-dispatch-db.test.ts",
+ "src/main/runtime/orchestration/structured-mailbox-pointer-delivery.test.ts",
+ "src/main/runtime/orchestration/structured-mailbox-pointer-host.test.ts",
+ "src/main/runtime/orchestration/structured-worker-journal-archive.test.ts",
+ "src/main/runtime/orchestration/worker-attention-context.test.ts",
+ "src/main/runtime/pty-exit-agent-status-reconciliation.test.ts",
+ "src/main/runtime/push/push-agent-state.test.ts",
+ "src/main/runtime/push/push-cleanup-auth-expiry.test.ts",
+ "src/main/runtime/recent-pty-output-retention.test.ts",
+ "src/main/runtime/relay/relay-region-probe-log.test.ts",
+ "src/main/runtime/remote-runtime-close-intent.integration.test.ts",
+ "src/main/runtime/repo-worktree-admin-fingerprint.test.ts",
+ "src/main/runtime/repo-worktree-row-resolution.test.ts",
+ "src/main/runtime/rpc/e2ee-channel.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-terminal-identity.test.ts",
+ "src/main/runtime/rpc/methods/ai-vault.test.ts",
+ "src/main/runtime/rpc/methods/client-ui-pairing-local-fields.test.ts",
+ "src/main/runtime/rpc/methods/client-ui-task-resume-state.test.ts",
+ "src/main/runtime/rpc/methods/files-watch-cancellation.test.ts",
+ "src/main/runtime/rpc/methods/mobile-web-bundle-window-refusals.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-structured-worker-start-failure.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-mode-opacity.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-support-unknown.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-effects.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-start-prompt-budget.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-start-schema.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/gates/gates.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/check-worker-federated-attachment.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/settled-dispatch-mail.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/runs/tasks-dispatch.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/agent-status-producer-census.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-interactive-wait.test.ts",
+ "src/main/runtime/rpc/methods/session-tab-agent-status-projection.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-background-task-capability.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-hold.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-precommit-refusal.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-turn-item-capability.test.ts",
+ "src/main/runtime/rpc/methods/terminal-legacy-stream-id-characterization.test.ts",
+ "src/main/runtime/rpc/methods/terminal-read-screen-cursor.test.ts",
+ "src/main/runtime/rpc/methods/terminal/terminal-inspect-process-params.test.ts",
+ "src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts",
+ "src/main/runtime/rpc/mobile-socket-wiring.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-question-takeover.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-run-routing.test.ts",
+ "src/main/runtime/rpc/runtime-client-capabilities.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-source-range-admission.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-renderer-recovery-output.test.ts",
+ "src/main/runtime/runtime-git-target-execution-host.test.ts",
+ "src/main/runtime/runtime-linear-read-commands.test.ts",
+ "src/main/runtime/runtime-local-create-rearm-ordering.test.ts",
+ "src/main/runtime/runtime-managed-worktree-metadata.test.ts",
+ "src/main/runtime/runtime-mobile-file-path-search.test.ts",
+ "src/main/runtime/runtime-project-host-setup-controller.test.ts",
+ "src/main/runtime/runtime-unregistered-worktree-removal-host-home.test.ts",
+ "src/main/runtime/runtime-worktree-agent-sources.test.ts",
+ "src/main/runtime/runtime-worktree-agent-startup.test.ts",
+ "src/main/runtime/structured-worker-terminal-read.test.ts",
+ "src/main/runtime/terminal-leaf-tab-resolution.test.ts",
+ "src/main/runtime/terminal-list-payload-size.test.ts",
+ "src/main/runtime/terminal-list-stale-leaf-liveness.test.ts",
+ "src/main/runtime/terminal-pty-exit-waiter.test.ts",
+ "src/main/runtime/terminal-subscriber-driven-daemon-attach.test.ts",
+ "src/main/runtime/terminal-wait-tail-window.test.ts",
+ "src/main/runtime/wait-blocked-keyword-carry-retention.test.ts",
+ "src/main/runtime/worktree-ps-degraded-repo-scan.test.ts",
+ "src/main/runtime/worktree-rm-id-selector-path-spelling.test.ts",
+ "src/main/runtime/worktree-teardown-unstopped-pty.test.ts",
+ "src/main/runtime/worktree-terminal-mutation-lock.test.ts",
+ "src/main/server/serve-readiness.test.ts",
+ "src/main/skills/discovery-source-filter-order.test.ts",
+ "src/main/skills/skill-cloud-request.test.ts",
+ "src/main/skills/skill-delete/staging-visibility.test.ts",
+ "src/main/skills/skill-discovery-wsl-plugins.test.ts",
+ "src/main/skills/skill-git-tree-identity.test.ts",
+ "src/main/skills/skill-install-provenance.test.ts",
+ "src/main/skills/skill-install-recovery.test.ts",
+ "src/main/skills/skill-install-service.test.ts",
+ "src/main/skills/skill-placement-copy-drift.test.ts",
+ "src/main/skills/skill-process-contention.integration.test.ts",
+ "src/main/skills/skill-provider-destinations.test.ts",
+ "src/main/skills/skill-runtime-capability.test.ts",
+ "src/main/skills/skill-update-outcome.test.ts",
+ "src/main/skills/skill-wsl-install-transaction.integration.test.ts",
+ "src/main/source-control/hosted-review-creation-eligibility.test.ts",
+ "src/main/source-control/hosted-review-creation.test.ts",
+ "src/main/source-control/repo-default-branch.test.ts",
+ "src/main/source-control/stacked-hosted-review-creation.test.ts",
+ "src/main/speech/model-catalog.test.ts",
+ "src/main/speech/model-manager-download-resume.test.ts",
+ "src/main/ssh/orcad-remote-rollback.test.ts",
+ "src/main/ssh/relay-native-dependency-coverage.test.ts",
+ "src/main/ssh/relay-socket-path-limit.test.ts",
+ "src/main/ssh/ssh-config-parser.test.ts",
+ "src/main/ssh/ssh-connection-channel-open.test.ts",
+ "src/main/ssh/ssh-connection-direct-startup.test.ts",
+ "src/main/ssh/ssh-multi-key-authentication.test.ts",
+ "src/main/ssh/ssh-relay-deploy.test.ts",
+ "src/main/ssh/ssh-relay-endpoint-incumbent.test.ts",
+ "src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts",
+ "src/main/ssh/ssh-relay-offline-node-headers.docker.test.ts",
+ "src/main/ssh/ssh-relay-session-pending-kill-replay.test.ts",
+ "src/main/ssh/ssh-relay-session.test.ts",
+ "src/main/ssh/ssh-relay-upload-stage-commands.test.ts",
+ "src/main/ssh/ssh-relay-versioned-install.test.ts",
+ "src/main/ssh/ssh-remote-cli-terminal-host-scope.test.ts",
+ "src/main/ssh/ssh-remote-linear-activity-output.test.ts",
+ "src/main/ssh/ssh-remote-linear-cli.test.ts",
+ "src/main/ssh/ssh-remote-linear-truncation-output.test.ts",
+ "src/main/ssh/ssh-remote-node-resolution.test.ts",
+ "src/main/ssh/ssh-remote-platform-detection.test.ts",
+ "src/main/ssh/ssh-remote-platform.test.ts",
+ "src/main/ssh/ssh-target-readoption.test.ts",
+ "src/main/ssh/system-ssh-binary.test.ts",
+ "src/main/ssh/system-ssh-sftp-args.test.ts",
+ "src/main/startup/bootstrap-fatal-exit-guard.test.ts",
+ "src/main/startup/cli-launch-redirect.test.ts",
+ "src/main/startup/configure-process-dev-parent-shutdown.test.ts",
+ "src/main/startup/run-electron-vite-dev-web.test.ts",
+ "src/main/startup/serve-mode-argv-cli-redirect-order.test.ts",
+ "src/main/startup/windows-shell-path-restoration.windows.test.ts",
+ "src/main/synthetic-title-visibility.test.ts",
+ "src/main/text-generation/commit-message-text-generation-generated-output.test.ts",
+ "src/main/updater-prerelease-feed-readiness.test.ts",
+ "src/main/updater.check-settlement.test.ts",
+ "src/main/updater.headless-serve-install.test.ts",
+ "src/main/updater.startup-scheduling.test.ts",
+ "src/main/usage-worktree-canonicalizer.test.ts",
+ "src/main/usage/usage-breakdown-scaling.test.ts",
+ "src/main/usage/usage-scan-worker-event-loop.test.ts",
+ "src/main/usage/usage-worktree-refs.test.ts",
+ "src/main/window/clipboard-image-thumbnail.test.ts",
+ "src/main/window/clipboard-remote-file-staging.test.ts",
+ "src/main/window/terminal-tab-close-request-relay.test.ts",
+ "src/main/windows-descendant-exit-verification.test.ts",
+ "src/main/windows/windows-msys-job.win32.test.ts",
+ "src/main/windows/windows-pty-job.test.ts",
+ "src/main/workspace-cleanup-removal-snapshot-prune.test.ts",
+ "src/main/worktree-removal-execution-host-route.test.ts",
+ "src/main/worktree-root-preparation.test.ts",
+ "src/main/wsl-approved-root-race.wsl.test.ts",
+ "src/preload/api/platform-bridge.test.ts",
+ "src/preload/app-restart-checkpoint-routing.test.ts",
+ "src/preload/close-active-tab-payload-admission.test.ts",
+ "src/preload/ssh-authority-forwarding.test.ts",
+ "src/relay/agent-hook-retired-pane-suppression.test.ts",
+ "src/relay/dispatcher-structured-error.test.ts",
+ "src/relay/external-automations-handler.test.ts",
+ "src/relay/fs-handler-stream.test.ts",
+ "src/relay/git-exec-validator.test.ts",
+ "src/relay/git-handler-blob-readers.test.ts",
+ "src/relay/git-handler-branch-cleanup.test.ts",
+ "src/relay/git-handler-push-target.test.ts",
+ "src/relay/git-handler-status-ops.test.ts",
+ "src/relay/git-status-branch-line-total.test.ts",
+ "src/relay/hermes-run-correlation.test.ts",
+ "src/relay/legacy-relay-publication-ledger.test.ts",
+ "src/relay/omp-config-root.test.ts",
+ "src/relay/pty-source-credit-ledger.test.ts",
+ "src/relay/relay-pty-source-cancellation-exit.test.ts",
+ "src/relay/relay-reconnect-listener-credential-gate.test.ts",
+ "src/relay/relay-watch-root-capacity.test.ts",
+ "src/relay/windows-port-scan.win32.test.ts",
+ "src/relay/workspace-space-scan-du-capacity.test.ts",
+ "src/relay/wsl-agent-hook-relay.test.ts",
+ "src/relay/wsl-hook-fs-bridge.test.ts",
+ "src/renderer/src/app-shell/shutdown-checkpoint-restart-lifecycle.test.ts",
+ "src/renderer/src/app-startup-routing.test.ts",
+ "src/renderer/src/assets/rich-markdown-task-list-style.test.ts",
+ "src/renderer/src/components/AgentWorkingSpinner.test.tsx",
+ "src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx",
+ "src/renderer/src/components/NewWorkspaceComposerCard.test.tsx",
+ "src/renderer/src/components/TerminalSearch.test.tsx",
+ "src/renderer/src/components/activity/activity-event-builder.bounded-history.test.ts",
+ "src/renderer/src/components/activity/activity-thread-presentation.test.ts",
+ "src/renderer/src/components/activity/dev-activity-fixture.test.ts",
+ "src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.test.ts",
+ "src/renderer/src/components/artifacts/artifact-display-labels.test.ts",
+ "src/renderer/src/components/automations/AutomationTimeField.test.tsx",
+ "src/renderer/src/components/automations/AutomationsDetailPane.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.create-destination.test.tsx",
+ "src/renderer/src/components/automations/automation-host-list-rows.test.ts",
+ "src/renderer/src/components/automations/automation-legacy-schedule-editing.test.ts",
+ "src/renderer/src/components/automations/automation-run-history-keyboard-navigation.test.ts",
+ "src/renderer/src/components/automations/automation-run-output-snapshot-equivalence.test.ts",
+ "src/renderer/src/components/automations/automation-runs-dashboard-model.test.ts",
+ "src/renderer/src/components/automations/external-automation-scope-keys.test.ts",
+ "src/renderer/src/components/automations/use-automation-list-focus-recovery.test.tsx",
+ "src/renderer/src/components/automations/use-automation-list-search.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-egress-indicator.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/context-menu-positioning.test.ts",
+ "src/renderer/src/components/browser-pane/browser-client-page-retained-registry.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-webview-surface.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-worktree-surface-paintability.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/use-browser-page-viewport-scroll-reporting.test.tsx",
+ "src/renderer/src/components/browser-pane/navigate/browser-address-bar-navigation.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/use-browser-page-reload-actions.test.tsx",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-frame-style.test.ts",
+ "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-document-identity.test.ts",
+ "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-external-link-confirmation.test.ts",
+ "src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.lazy-ref.test.tsx",
+ "src/renderer/src/components/cmd-j/palette-filter-options.test.ts",
+ "src/renderer/src/components/cmd-j/palette-live-status.test.tsx",
+ "src/renderer/src/components/codex-restart-notice-key.test.ts",
+ "src/renderer/src/components/comment-code-context-state.test.ts",
+ "src/renderer/src/components/contextual-tours/ContextualTourOverlay.visibility.test.tsx",
+ "src/renderer/src/components/contextual-tours/contextual-tour-floating-position.test.ts",
+ "src/renderer/src/components/contextual-tours/request-contextual-tour-when-ready.test.ts",
+ "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.option-dead-key.test.tsx",
+ "src/renderer/src/components/dashboard-popout/dashboard-agent-status-patch.test.ts",
+ "src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts",
+ "src/renderer/src/components/dashboard-popout/useDashboardSnapshot.test.tsx",
+ "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts",
+ "src/renderer/src/components/dashboard/useDashboardPopoutBridge.test.tsx",
+ "src/renderer/src/components/editor/ChangesModeView.test.tsx",
+ "src/renderer/src/components/editor/EditorContent.markdown-classification.test.tsx",
+ "src/renderer/src/components/editor/EditorPanelHeaderPath.test.tsx",
+ "src/renderer/src/components/editor/EditorPanelShell.header.test.tsx",
+ "src/renderer/src/components/editor/ExternalFileChangeBanner.test.tsx",
+ "src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts",
+ "src/renderer/src/components/editor/closed-editor-view-state-retention.test.ts",
+ "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-section-cache-match.test.ts",
+ "src/renderer/src/components/editor/combined-diff/scroll-viewport/combined-diff-restore-signal-equivalence.test.tsx",
+ "src/renderer/src/components/editor/diff-editor-whitespace-options.test.ts",
+ "src/renderer/src/components/editor/diff-line-stats.test.ts",
+ "src/renderer/src/components/editor/diff-model-swap-view-state.test.ts",
+ "src/renderer/src/components/editor/editor-autosave.test.ts",
+ "src/renderer/src/components/editor/editor-shortcuts.test.ts",
+ "src/renderer/src/components/editor/export-active-markdown.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-url-transform.test.ts",
+ "src/renderer/src/components/editor/monaco-markdown-doc-link-decorations.offset-scan.test.ts",
+ "src/renderer/src/components/editor/monaco-markdown-selection-annotation.test.ts",
+ "src/renderer/src/components/editor/raw-markdown-html.blank-run.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-auto-focus.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-key-handler.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-paste-handler.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-paste-image.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-source-reconcile.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-tab-key-handler.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-table-keyboard.test.ts",
+ "src/renderer/src/components/editor/use-monaco-editor-decorations.doc-link-refresh.test.tsx",
+ "src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.test.ts",
+ "src/renderer/src/components/emulator-pane/emulator-device-state.test.ts",
+ "src/renderer/src/components/emulator-pane/mobile-emulator-hidden-toast.test.tsx",
+ "src/renderer/src/components/emulator-pane/mobile-emulator-tab-intro-visibility.test.ts",
+ "src/renderer/src/components/error-boundaries/RecoverableRenderErrorBoundary.lazy-chunk.test.tsx",
+ "src/renderer/src/components/error-boundaries/RecoverableRenderErrorBoundary.never-landed-reload.test.tsx",
+ "src/renderer/src/components/feature-wall/AgentCapabilitiesSetupAction.test.ts",
+ "src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx",
+ "src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.test.tsx",
+ "src/renderer/src/components/feature-wall/feature-wall-usage-tracking.test.ts",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.focus.test.tsx",
+ "src/renderer/src/components/floating-terminal/floating-workspace-tab-reorder.test.ts",
+ "src/renderer/src/components/jira-create-adf.test.ts",
+ "src/renderer/src/components/jira-project-picker-filter.test.ts",
+ "src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts",
+ "src/renderer/src/components/linear-issue-project-selector.test.tsx",
+ "src/renderer/src/components/linear-issue-text-save-plan.test.ts",
+ "src/renderer/src/components/linear-issue-workspace-api-parity.test.ts",
+ "src/renderer/src/components/link-actions/LinkActionPopover.test.tsx",
+ "src/renderer/src/components/mobile/mobile-page-stage.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatComposerActions.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.message-rail-windowing.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.turn-indicator.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatTaskList.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-composer-containment.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-composer-scope-cache.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-composer-state.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-live-status.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-message-grouping.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pending-occurrence.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pending.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-session-option-enrichment.test.ts",
+ "src/renderer/src/components/native-chat/structured-agent-question-projection.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-external-attachments.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-messages.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-outbox-admission.test.tsx",
+ "src/renderer/src/components/new-workspace/SetProjectLocationDialog.test.tsx",
+ "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-provider-boundaries.test.ts",
+ "src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx",
+ "src/renderer/src/components/onboarding/FeatureSetupInlineTerminal.test.tsx",
+ "src/renderer/src/components/onboarding/onboarding-feature-setup.test.ts",
+ "src/renderer/src/components/pet/PetOverlay.keyframes.test.tsx",
+ "src/renderer/src/components/pet/PetOverlay.pet-switch.test.tsx",
+ "src/renderer/src/components/pet/PetOverlay.test.ts",
+ "src/renderer/src/components/pet/pet-agent-state.test.ts",
+ "src/renderer/src/components/pet/pet-blob-cache.test.ts",
+ "src/renderer/src/components/pet/pet-overlay-position.test.ts",
+ "src/renderer/src/components/pet/usePetUrl.test.tsx",
+ "src/renderer/src/components/pr-check-counts.test.ts",
+ "src/renderer/src/components/pr-checks-fix-prompt.test.ts",
+ "src/renderer/src/components/pull-request-page-host-boundary.test.ts",
+ "src/renderer/src/components/pull-request-page/files/combined-diff-section-index.test.tsx",
+ "src/renderer/src/components/quick-open-install-rg-guidance.test.ts",
+ "src/renderer/src/components/right-sidebar/AiVaultSessionListBar.test.tsx",
+ "src/renderer/src/components/right-sidebar/ChecksPanel.review-header.test.tsx",
+ "src/renderer/src/components/right-sidebar/CommitArea.generate.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.push-failure-recovery.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-resume-in-chat.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-review-creation.test.ts",
+ "src/renderer/src/components/right-sidebar/commit-failure-dialog-state.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-batch-deletion.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-entries.test.ts",
+ "src/renderer/src/components/right-sidebar/local-workspace-port-sections.test.ts",
+ "src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts",
+ "src/renderer/src/components/right-sidebar/review-cache-entry-selection.test.ts",
+ "src/renderer/src/components/right-sidebar/right-sidebar-activity-visibility.test.ts",
+ "src/renderer/src/components/right-sidebar/right-sidebar-titlebar-drag-regions.render.test.tsx",
+ "src/renderer/src/components/right-sidebar/search-match-open.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control-file-filter.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-hosted-review-creation-eligibility-snapshot.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-primary-action.create-pr-intent.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-primary-action.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control/listing/section-header.test.tsx",
+ "src/renderer/src/components/right-sidebar/useFileExplorerTree.refresh-projection-churn.test.tsx",
+ "src/renderer/src/components/settings/AccountsPane.test.tsx",
+ "src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx",
+ "src/renderer/src/components/settings/BrowserUserAgentSetting.test.tsx",
+ "src/renderer/src/components/settings/GitPane.test.tsx",
+ "src/renderer/src/components/settings/KagiSessionLinkForm.test.ts",
+ "src/renderer/src/components/settings/LinearAgentSkillGuide.test.tsx",
+ "src/renderer/src/components/settings/LocalNetworkConnectionTest.test.tsx",
+ "src/renderer/src/components/settings/MobileEmulatorAgentControlRow.test.tsx",
+ "src/renderer/src/components/settings/PluginConsentDialog.test.tsx",
+ "src/renderer/src/components/settings/PluginMarketplaceSourceDialog.test.tsx",
+ "src/renderer/src/components/settings/PrivacyPane.test.ts",
+ "src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx",
+ "src/renderer/src/components/settings/RuntimeHostAccessForm.test.tsx",
+ "src/renderer/src/components/settings/SettingsFormControls.number-field.test.tsx",
+ "src/renderer/src/components/settings/SettingsSidebar.test.tsx",
+ "src/renderer/src/components/settings/SshTargetForm.test.tsx",
+ "src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts",
+ "src/renderer/src/components/settings/TerminalContrastSetting.test.tsx",
+ "src/renderer/src/components/settings/TerminalPane.pwsh.test.ts",
+ "src/renderer/src/components/settings/agent-default-env-draft.test.ts",
+ "src/renderer/src/components/settings/bitbucket-integration-card.test.tsx",
+ "src/renderer/src/components/settings/cli-install-failure.test.ts",
+ "src/renderer/src/components/settings/cli-source-control-integration-cards.test.tsx",
+ "src/renderer/src/components/settings/codex-session-source-home-control.test.tsx",
+ "src/renderer/src/components/settings/jira-integration-card.test.tsx",
+ "src/renderer/src/components/settings/repository-icon-github.test.ts",
+ "src/renderer/src/components/settings/settings-deep-link-target-watcher.test.ts",
+ "src/renderer/src/components/settings/settings-search-keywords.test.ts",
+ "src/renderer/src/components/settings/sparse-preset-date.test.ts",
+ "src/renderer/src/components/settings/sparse-preset-operation-error.test.ts",
+ "src/renderer/src/components/settings/ssh-target-action-state.test.ts",
+ "src/renderer/src/components/settings/task-source-setup-state.test.ts",
+ "src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts",
+ "src/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeContextMenu.copy-worktree-name.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeOpenInMenu.test.tsx",
+ "src/renderer/src/components/sidebar/active-worktree-focus-after-delete.test.ts",
+ "src/renderer/src/components/sidebar/add-repo-browse-authority.test.ts",
+ "src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts",
+ "src/renderer/src/components/sidebar/delete-worktree-parallel-flow.test.ts",
+ "src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts",
+ "src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts",
+ "src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts",
+ "src/renderer/src/components/sidebar/preserved-branch-batch-toast.test.tsx",
+ "src/renderer/src/components/sidebar/project-header-drag-commit.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-resize-handle.test.ts",
+ "src/renderer/src/components/sidebar/use-add-repo-hosted-controller.test.ts",
+ "src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx",
+ "src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-markdown-isolation.test.ts",
+ "src/renderer/src/components/sidebar/worktree-header-section-boundaries.test.ts",
+ "src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-host-labels.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-pending-creations.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-pinned-host-labels.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-project-groups.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-project-order.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/rows/RepoScanUnavailableIndicator.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/visible-refresh.test.ts",
+ "src/renderer/src/components/sidebar/worktree-manual-order-store-write.test.ts",
+ "src/renderer/src/components/stats/usage-daily-chart.test.tsx",
+ "src/renderer/src/components/status-bar/NativeChatResumeStatusSegment.test.tsx",
+ "src/renderer/src/components/status-bar/codex-status-sign-in.test.tsx",
+ "src/renderer/src/components/status-bar/remote-host-connection-status.test.ts",
+ "src/renderer/src/components/status-bar/resource-manager-worktree-target.test.ts",
+ "src/renderer/src/components/status-bar/usage-provider-settings-target.test.ts",
+ "src/renderer/src/components/status-bar/workspace-space-format.test.ts",
+ "src/renderer/src/components/tab-bar/BrowserTab.test.tsx",
+ "src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBarCreateEntry.search.test.tsx",
+ "src/renderer/src/components/tab-bar/query-token-match.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-forced-search.test.ts",
+ "src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx",
+ "src/renderer/src/components/tab-group/useTabGroupTabCloseCommands.structured-session.test.ts",
+ "src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts",
+ "src/renderer/src/components/task-page-checks-pill.test.ts",
+ "src/renderer/src/components/task-page-github-reviewer-suggestions.test.ts",
+ "src/renderer/src/components/task-page-jira-item-source-context.test.ts",
+ "src/renderer/src/components/task-page-jira-project-selection.test.ts",
+ "src/renderer/src/components/task-page-jira-sort-controls.test.tsx",
+ "src/renderer/src/components/task-page-linear-issue-dialog-popover-scroll.test.ts",
+ "src/renderer/src/components/task-page-task-creation-drafts.test.ts",
+ "src/renderer/src/components/terminal-pane/MobileDriverOverlay.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-completion-replay-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-stamped-turn-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-steady-state-opt-in.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-question-answered-inference.test.ts",
+ "src/renderer/src/components/terminal-pane/hidden-reveal-reconciliation.fuzz.test.ts",
+ "src/renderer/src/components/terminal-pane/osc52-clipboard-default-on-notice.test.ts",
+ "src/renderer/src/components/terminal-pane/paired-reconnect-multi-pane-materialization.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-title-overlay-rects.test.ts",
+ "src/renderer/src/components/terminal-pane/pending-runtime-pane-close.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-delivery-gate.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-restore-fit-overflow.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-post-dispose-restore-termination.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-reattach-mode-reset.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-remote-snapshot-source-grid.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-session-liveness.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-ssh-startup-draft-delivery.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-stalled-hidden-restore.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/reattach-payload-context.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/ssh-session-gone-verdict.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-output-side-effects.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-park-reveal-unverifiable-retry.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-deadline-reattach.test.ts",
+ "src/renderer/src/components/terminal-pane/split-right-white-screen.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-agent-session-fork.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-bracketed-paste.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-clipboard-event-paste.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-ctrl-enter.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-handler.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-composition-transaction-ownership.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-hangul-terminating-digit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-native-text-forwarder.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-korean-enter-commit-order.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-input-quarantine.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-keyboard-pane-resolution.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-keyboard-search-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-layout-overlay-focus.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-host-state-memo.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-executor-default-yield.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-runtime.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-render-desync-frame.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-renderer-policy.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-replay-cursor-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-selection-copy.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-selection-fit-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-snapshot-replay-paint.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-startup-grid-settle.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-title-tracker-parity.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts",
+ "src/renderer/src/components/terminal-pane/xterm-write-buffer-stall.repro.test.ts",
+ "src/renderer/src/components/terminal-workspace-keydown.test.ts",
+ "src/renderer/src/components/terminal/pty-running-work-probe-child-evidence.test.ts",
+ "src/renderer/src/components/ui/scroll-area.test.tsx",
+ "src/renderer/src/components/window-close-request-coordinator.test.ts",
+ "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-browse-state.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal-late-settlement.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-filter-bar.test.tsx",
+ "src/renderer/src/hooks/composer-drop-result.test.ts",
+ "src/renderer/src/hooks/composer-state/full-submit-orchestration.test.ts",
+ "src/renderer/src/hooks/composer-state/multiple-create-reset.test.ts",
+ "src/renderer/src/hooks/direct-ssh-reconnect-tokens.test.ts",
+ "src/renderer/src/hooks/fork-push-warning.test.ts",
+ "src/renderer/src/hooks/ipc-events/browser-request-ipc-bridge.profile-switch.test.ts",
+ "src/renderer/src/hooks/programmatic-scroll-marks.test.ts",
+ "src/renderer/src/hooks/remote-workspace-session-merge-local-survival.test.ts",
+ "src/renderer/src/hooks/remote-workspace-session-merge-parked-scrollback.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-duplicate-tab-repair.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-unplaced-tab-adoption.test.ts",
+ "src/renderer/src/hooks/use-clipboard-text-copy-feedback.test.ts",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.clock-skew.test.ts",
+ "src/renderer/src/hooks/useEditorExternalWatch.test.ts",
+ "src/renderer/src/hooks/useEphemeralVmRecipeOptions.test.tsx",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-batch-projection.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-pane-teardown.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-client-hosted-browser-rows.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-close-routing-floating-guest.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-close-routing-session-tabs.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-lifecycle.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-silent-terminal-adoption.test.ts",
+ "src/renderer/src/hooks/useMacTccAttributionSeveredNotice.test.tsx",
+ "src/renderer/src/hooks/useVirtualizedScrollAnchor.test.ts",
+ "src/renderer/src/i18n/plugin-chrome-allowlist.test.ts",
+ "src/renderer/src/lib/activate-ai-vault-structured-session.test.ts",
+ "src/renderer/src/lib/active-agent-note-send-target-detection.test.ts",
+ "src/renderer/src/lib/agent-hibernation-planner.test.ts",
+ "src/renderer/src/lib/agent-launch-caller-prompt-transport.test.ts",
+ "src/renderer/src/lib/agent-launch-prompt-delivery.test.ts",
+ "src/renderer/src/lib/agent-session-fork-context.test.ts",
+ "src/renderer/src/lib/agent-session-launch-plan.test.ts",
+ "src/renderer/src/lib/agent-status-connection-ownership.test.ts",
+ "src/renderer/src/lib/agent-status-evidence-clock.test.ts",
+ "src/renderer/src/lib/ai-vault-resume-command.resumable-agent.test.ts",
+ "src/renderer/src/lib/ai-vault-tab-title-sync.test.ts",
+ "src/renderer/src/lib/app-menu-selection-actions.test.ts",
+ "src/renderer/src/lib/browser-cookie-import-toast.test.ts",
+ "src/renderer/src/lib/cmd-j-github-url-lookup.test.ts",
+ "src/renderer/src/lib/comment-body-submit-state.test.ts",
+ "src/renderer/src/lib/connection-context.test.ts",
+ "src/renderer/src/lib/diff-comment-compat.test.ts",
+ "src/renderer/src/lib/file-preview.test.ts",
+ "src/renderer/src/lib/fix-checks-agent-launch.test.ts",
+ "src/renderer/src/lib/floating-terminal.test.ts",
+ "src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts",
+ "src/renderer/src/lib/hook-command-delayed-delivery.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts",
+ "src/renderer/src/lib/http-link-routing.test.ts",
+ "src/renderer/src/lib/ios-web-platform.test.ts",
+ "src/renderer/src/lib/launch-agent-background-session-remote.test.ts",
+ "src/renderer/src/lib/launch-agent-session-continuation.test.ts",
+ "src/renderer/src/lib/launch-structured-agent-session.test.ts",
+ "src/renderer/src/lib/launch-work-item-direct-agent-routing.test.ts",
+ "src/renderer/src/lib/launch-work-item-direct.test.ts",
+ "src/renderer/src/lib/lazy-with-retry.test.ts",
+ "src/renderer/src/lib/linear-issue-workspace-attachment.test.ts",
+ "src/renderer/src/lib/monaco-languages/monarch-embed-entry-recursion.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-astro.test.ts",
+ "src/renderer/src/lib/new-workspace.test.ts",
+ "src/renderer/src/lib/orchestration-setup-state.test.ts",
+ "src/renderer/src/lib/orchestration-skill-coverage.test.ts",
+ "src/renderer/src/lib/outside-dismiss-guard.test.ts",
+ "src/renderer/src/lib/palette-match/cmd-j-ranking-contract.test.ts",
+ "src/renderer/src/lib/palette-match/palette-match-core.test.ts",
+ "src/renderer/src/lib/pane-manager/mobile-fit-overrides-hydration.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-divider.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-reveal-repaint.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-queue-retention.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-synchronized-frames.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-delivery-credit.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-ligatures-addon.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset-on-mouseleave.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-render-pause-release-parked-resize.test.ts",
+ "src/renderer/src/lib/pane-manager/xterm-user-scrolling-contract.test.ts",
+ "src/renderer/src/lib/pr-bot-author-overrides.test.ts",
+ "src/renderer/src/lib/pr-comment-reactions.test.ts",
+ "src/renderer/src/lib/project-skill-runtime.test.ts",
+ "src/renderer/src/lib/quick-workspace-agent-selection.test.ts",
+ "src/renderer/src/lib/recent-workspace-tab-rows.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts",
+ "src/renderer/src/lib/running-agent-targets.test.ts",
+ "src/renderer/src/lib/runtime-host-unverifiable-probe-readers.test.ts",
+ "src/renderer/src/lib/session-write-subscriber-allocation.test.ts",
+ "src/renderer/src/lib/setup-runner.test.ts",
+ "src/renderer/src/lib/state-collection-byte-estimate.test.ts",
+ "src/renderer/src/lib/tab-number-shortcuts.test.ts",
+ "src/renderer/src/lib/terminal-quick-command-score-budget.test.ts",
+ "src/renderer/src/lib/terminal-reveal-identity.test.ts",
+ "src/renderer/src/lib/terminal-theme.test.ts",
+ "src/renderer/src/lib/text-control-paste.test.ts",
+ "src/renderer/src/lib/typing-latency/diagnostic-summary.test.ts",
+ "src/renderer/src/lib/updater-beforeunload.test.ts",
+ "src/renderer/src/lib/windows-terminal-capabilities-race.test.ts",
+ "src/renderer/src/lib/workspace-composer-initial-focus.test.ts",
+ "src/renderer/src/lib/workspace-emoji-shortcodes.lazy.test.ts",
+ "src/renderer/src/lib/workspace-port-groups.test.ts",
+ "src/renderer/src/lib/workspace-session-browser-history.test.ts",
+ "src/renderer/src/lib/worktree-activation-created-agent.test.ts",
+ "src/renderer/src/lib/worktree-agent-activation-gate.test.ts",
+ "src/renderer/src/lib/worktree-attachment-label.test.ts",
+ "src/renderer/src/lib/worktree-creation-agent-seeds.test.ts",
+ "src/renderer/src/lib/worktree-runtime-owner.test.ts",
+ "src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-flap-hydration.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-settle-census.test.ts",
+ "src/renderer/src/runtime/local-structured-session-empty-worktree-visibility.test.ts",
+ "src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts",
+ "src/renderer/src/runtime/remote-agent-session-launch.test.ts",
+ "src/renderer/src/runtime/remote-runtime-snapshot-outcome.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts",
+ "src/renderer/src/runtime/remote-server-restart-wait.test.ts",
+ "src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts",
+ "src/renderer/src/runtime/runtime-file-client-download.test.ts",
+ "src/renderer/src/runtime/runtime-git-client-branch-line-total.test.ts",
+ "src/renderer/src/runtime/runtime-hooks-client.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-close.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-status-feed.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-turn-completion-feed.test.ts",
+ "src/renderer/src/runtime/structured-conversation-tab-replacement.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph/mobile-terminal-theme.test.ts",
+ "src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-split-placement.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-terminal-host-authority.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-terminal-workspace-routing.test.ts",
+ "src/renderer/src/runtime/web-session-existing-tab-index.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-browser-tabs.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-layout-groups.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery-host-scope-gate.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts",
+ "src/renderer/src/store/always-mounted-selector-scan-cost.test.ts",
+ "src/renderer/src/store/right-sidebar-route.test.ts",
+ "src/renderer/src/store/slices/activity-cleared-at.test.ts",
+ "src/renderer/src/store/slices/agent-status-ack-cleanup.test.ts",
+ "src/renderer/src/store/slices/agent-status-drop-ipc.test.ts",
+ "src/renderer/src/store/slices/agent-status-retained-leak.test.ts",
+ "src/renderer/src/store/slices/agent-status-runtime-orchestration.test.ts",
+ "src/renderer/src/store/slices/degraded-repo-hydration.test.ts",
+ "src/renderer/src/store/slices/detected-worktree-refresh-leases.test.ts",
+ "src/renderer/src/store/slices/editor-hydration-scaling.test.ts",
+ "src/renderer/src/store/slices/editor-recently-closed-tabs.test.ts",
+ "src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts",
+ "src/renderer/src/store/slices/github-checks.test.ts",
+ "src/renderer/src/store/slices/github-pr-branch-fallback-results.test.ts",
+ "src/renderer/src/store/slices/linear-invalidation.test.ts",
+ "src/renderer/src/store/slices/memory.test.ts",
+ "src/renderer/src/store/slices/native-chat-launch-draft-teardown.test.ts",
+ "src/renderer/src/store/slices/orca-profiles.test.ts",
+ "src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts",
+ "src/renderer/src/store/slices/repo-identity-reconcile.test.ts",
+ "src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts",
+ "src/renderer/src/store/slices/runtime-environment-ssh.test.ts",
+ "src/renderer/src/store/slices/runtime-switch-settings-persistence.test.ts",
+ "src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts",
+ "src/renderer/src/store/slices/store-session-editor-hydration.test.ts",
+ "src/renderer/src/store/slices/store-session-terminal-activity.test.ts",
+ "src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts",
+ "src/renderer/src/store/slices/tabs-pane-layout-operations.test.ts",
+ "src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-batch.test.ts",
+ "src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts",
+ "src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts",
+ "src/renderer/src/store/slices/ui-new-workspace-draft.test.ts",
+ "src/renderer/src/store/slices/ui/ui-slice-surface-actions.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-scan-progress-boundary.test.ts",
+ "src/renderer/src/store/slices/worktree-helpers.test.ts",
+ "src/renderer/src/store/slices/worktrees-create-parent-pick.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-persisted-metadata-fallback.test.ts",
+ "src/renderer/src/store/slices/worktrees-git-identity-branch-title.test.ts",
+ "src/renderer/src/store/slices/worktrees-metadata-persistence.test.ts",
+ "src/renderer/src/store/slices/worktrees-remote-runtime-create.test.ts",
+ "src/renderer/src/store/slices/worktrees-terminal-pr-url-linking.test.ts",
+ "src/renderer/src/store/store-listener-census.test.ts",
+ "src/renderer/src/web/web-clipboard-copy-terminal-selection.test.ts",
+ "src/renderer/src/web/web-preload-api-composition.test.ts",
+ "src/renderer/src/web/web-preload-api-git.test.ts",
+ "src/renderer/src/web/web-preload-api-ui.test.ts",
+ "src/renderer/src/web/web-runtime-client-heartbeat.test.ts",
+ "src/renderer/src/web/web-shell-paths-exist.test.ts",
+ "src/shared/agent-decorative-title-signature.test.ts",
+ "src/shared/agent-hook-listener-claude-compatible-vendors.test.ts",
+ "src/shared/agent-hook-listener-claude-turn-state.test.ts",
+ "src/shared/agent-hook-listener-grok.test.ts",
+ "src/shared/agent-hook-listener-opencode-session-registry.test.ts",
+ "src/shared/agent-hook-listener-transport.test.ts",
+ "src/shared/agent-hook-relay.test.ts",
+ "src/shared/agent-session-provider-handle.test.ts",
+ "src/shared/agent-session-resume.test.ts",
+ "src/shared/agent-session-thread-goal.test.ts",
+ "src/shared/agent-status-legacy-adapter.test.ts",
+ "src/shared/agent-status-store-reopen.test.ts",
+ "src/shared/agent-tab-title.test.ts",
+ "src/shared/antigravity-source-control.test.ts",
+ "src/shared/automation-list-response.test.ts",
+ "src/shared/automation-schedules.test.ts",
+ "src/shared/browser-client-host-protocol.test.ts",
+ "src/shared/browser-cookie-import-sources.test.ts",
+ "src/shared/browser-network-tunnel-protocol.test.ts",
+ "src/shared/browser-screencast-protocol.test.ts",
+ "src/shared/child-process/child-process-import-boundary.test.ts",
+ "src/shared/child-process/close-process-registry.test.ts",
+ "src/shared/child-process/posix-lsof-probe.test.ts",
+ "src/shared/child-process/process-tree-termination.test.ts",
+ "src/shared/codex-subagent-roster.test.ts",
+ "src/shared/commit-message-generation.test.ts",
+ "src/shared/ephemeral-vm-recipe-checkout-mode.test.ts",
+ "src/shared/ephemeral-vm-recipe-process.test.ts",
+ "src/shared/fish-binary-requirement.test.ts",
+ "src/shared/folder-workspace-execution-host.test.ts",
+ "src/shared/generated-code-path.test.ts",
+ "src/shared/git-fetch-head-capability.test.ts",
+ "src/shared/git-rev-list-output.test.ts",
+ "src/shared/git-tracked-pathspecs.test.ts",
+ "src/shared/github/project-roadmap-timeline.test.ts",
+ "src/shared/gitlab-job-log-excerpt.test.ts",
+ "src/shared/handled-wire-discriminant.test.ts",
+ "src/shared/hermes-run-ref-retention.test.ts",
+ "src/shared/host-setting-overrides.test.ts",
+ "src/shared/image-paste-following-text.test.ts",
+ "src/shared/linear/workspace-types.test.ts",
+ "src/shared/managed-agent-command-token.test.ts",
+ "src/shared/manual-repo-order.test.ts",
+ "src/shared/mobile-e2ee-v2-framing.test.ts",
+ "src/shared/muse-session-log.test.ts",
+ "src/shared/native-chat-session-option-commands.test.ts",
+ "src/shared/native-chat-tool-pair-limit.test.ts",
+ "src/shared/native-chat-tool-preview-scan.test.ts",
+ "src/shared/native-chat-unverifiable-turn-status.test.ts",
+ "src/shared/nested-repo-telemetry-schema.test.ts",
+ "src/shared/omp-owner-state-title.test.ts",
+ "src/shared/orchestration-ask-timeout.test.ts",
+ "src/shared/osc-title-scan-tail.test.ts",
+ "src/shared/pane-agent-owner.test.ts",
+ "src/shared/pi-overlay-ui-settings.test.ts",
+ "src/shared/plugins/plugin-consent-fingerprint.test.ts",
+ "src/shared/plugins/plugin-language-pack-artifact.test.ts",
+ "src/shared/plugins/plugin-panel-pong-frame.test.ts",
+ "src/shared/pr-bot-author-overrides.test.ts",
+ "src/shared/preferred-git-remote.test.ts",
+ "src/shared/project-groups.test.ts",
+ "src/shared/project-host-setup-projection.test.ts",
+ "src/shared/quick-open-filter.test.ts",
+ "src/shared/remote-runtime-connect-bound.test.ts",
+ "src/shared/remote-runtime-shared-control-boundary.test.ts",
+ "src/shared/remote-runtime-shared-control-subscription-close.test.ts",
+ "src/shared/remote-runtime-subscription-frame-router.test.ts",
+ "src/shared/remote-runtime-subscription-request.test.ts",
+ "src/shared/remote-workspace-session-projection.test.ts",
+ "src/shared/repo-search-limits.test.ts",
+ "src/shared/repro-13889-claude-quarter-circle-busy-title.test.ts",
+ "src/shared/runtime-host-status-owner.test.ts",
+ "src/shared/secure-file.test.ts",
+ "src/shared/serve-option-validation.test.ts",
+ "src/shared/setup-agent-sequencing.windows.test.ts",
+ "src/shared/skill-bundle-name.test.ts",
+ "src/shared/skill-install-contract.test.ts",
+ "src/shared/source-control-group-order.test.ts",
+ "src/shared/ssh-relay-pty-ownership-proof.test.ts",
+ "src/shared/startup-command-submission.test.ts",
+ "src/shared/string-chunk-compaction.test.ts",
+ "src/shared/structured-native-chat-launch-route.test.ts",
+ "src/shared/telemetry-events-feature-education.test.ts",
+ "src/shared/telemetry-feature-wall-events.test.ts",
+ "src/shared/terminal-bell-detector.test.ts",
+ "src/shared/terminal-kitty-keyboard-tail-retention.test.ts",
+ "src/shared/terminal-mode-2031-final-state.test.ts",
+ "src/shared/terminal-output-side-effects.test.ts",
+ "src/shared/terminal-reply-query-scan.test.ts",
+ "src/shared/terminal-title-classification-memo.test.ts",
+ "src/shared/timer-delay.test.ts",
+ "src/shared/windows-environment-expansion.test.ts",
+ "src/shared/windows-security-descriptor.test.ts",
+ "src/shared/worker-transcript-background-task-text.test.ts",
+ "src/shared/workspace-cleanup-ui-state.test.ts",
+ "src/shared/workspace-session-validation-work.test.ts",
+ "src/shared/workspace-space-compaction.test.ts",
+ "src/shared/workspace-space-entry-traversal.test.ts",
+ "src/shared/worktree-name-suggestion.test.ts",
+ "src/shared/worktree/host-qualified-identity.test.ts",
+ "tests/e2e/completed-worker-retirement-resume.unit.test.ts",
+ "tests/e2e/helpers/headless-paired-runtime-serve-readiness.unit.test.ts",
+ "tests/e2e/helpers/remote-terminal-source-range-contract-fixture.unit.test.ts",
+ "tests/e2e/helpers/streaming-terminal-cleanup.unit.test.ts",
+ "tests/e2e/omp-child-session-recovery.unit.test.ts",
+ "tests/e2e/structured-native-chat-routing-authority.unit.test.ts",
+ "tests/e2e/terminal-perf-presentation.unit.test.ts",
+ "tests/tools/relay-bench/region-probe-replay.test.mjs",
+ "tests/tools/windows-pty-native-capability-smoke/run.test.mjs"
+ ],
+ "durationMs": 851040
+ },
+ {
+ "files": [
+ "config/scripts/audit-localization-coverage.test.mjs",
+ "config/scripts/check-max-lines-ratchet.test.mjs",
+ "config/scripts/ci-shard-assignment.test.mjs",
+ "config/scripts/codex-primary-home-tripwire.test.ts",
+ "config/scripts/computer-use-mouse-button-routing.test.mjs",
+ "config/scripts/daily-e2e-dispatch-contract.test.mjs",
+ "config/scripts/electron-builder-mac-channel-config.test.mjs",
+ "config/scripts/ensure-native-runtime-job-ownership.test.mjs",
+ "config/scripts/generate-runtime-required-english-catalog.test.mjs",
+ "config/scripts/generate-skill-bundle-manifest.test.mjs",
+ "config/scripts/idle-cpu-process-sampling.test.mjs",
+ "config/scripts/live-freeze-bounded-history.test.mjs",
+ "config/scripts/live-remote-bulk-open-freeze-metrics.test.mjs",
+ "config/scripts/locale-ko-frozen-terminal-search-keywords.test.mjs",
+ "config/scripts/locale-ko-key-overrides.test.mjs",
+ "config/scripts/mobile-pairing-qrcode-import-plugin.test.mjs",
+ "config/scripts/mobile-release-shell-switch-workflow.test.mjs",
+ "config/scripts/mobile-web-app-external-link-seam.test.mjs",
+ "config/scripts/mobile-web-app-mermaid-render.test.mjs",
+ "config/scripts/mobile-web-app-session-dictation-capture.test.mjs",
+ "config/scripts/mobile-web-app-source-control-external-links.test.mjs",
+ "config/scripts/mobile-web-app-terminal-render.test.mjs",
+ "config/scripts/mobile-web-terminal-engine-closure.test.mjs",
+ "config/scripts/orca-linear-skill-guidance.test.mjs",
+ "config/scripts/package-electron-runtime-contract.test.mjs",
+ "config/scripts/packaged-node-pty-prebuild-prune.test.mjs",
+ "config/scripts/publish-complete-draft-releases.test.mjs",
+ "config/scripts/replace-cached-nsis-elevate.test.mjs",
+ "config/scripts/skill-recipe-shell.test.mjs",
+ "config/scripts/ssh-browser-e2e-routing.test.mjs",
+ "config/scripts/ssh-localhost-e2e-routing.test.mjs",
+ "config/scripts/verify-dev-channel-packaging.test.mjs",
+ "config/scripts/windows-uninstaller-signing.test.mjs",
+ "config/scripts/workflow-ref-reachability.test.mjs",
+ "src/cli/args-repeatable-flags.test.ts",
+ "src/cli/automation-format.test.ts",
+ "src/cli/browser-storage-empty-value.test.ts",
+ "src/cli/codex-command-classification.test.ts",
+ "src/cli/flags.test.ts",
+ "src/cli/format-recovery.test.ts",
+ "src/cli/handlers/interactive-login-interruption.test.ts",
+ "src/cli/index-automation-target.test.ts",
+ "src/cli/index-environment-commands.test.ts",
+ "src/cli/index-memory-diagnostics.test.ts",
+ "src/cli/index-worktree-create-linear.test.ts",
+ "src/cli/orchestration-dispatch-refusal-format.test.ts",
+ "src/cli/registry-parity.test.ts",
+ "src/cli/retry-request-flag.test.ts",
+ "src/cli/runtime-client.test.ts",
+ "src/cli/terminal-format.test.ts",
+ "src/main/active-view-preference.test.ts",
+ "src/main/agent-hooks/first-work-branch-rename.test.ts",
+ "src/main/agent-hooks/hook-script-outside-orca.test.ts",
+ "src/main/agent-hooks/installer-utils.test.ts",
+ "src/main/agent-hooks/managed-hook-detection-commands.test.ts",
+ "src/main/agent-hooks/managed-hook-stdin-lifecycle.test.ts",
+ "src/main/agent-hooks/managed-hook-timeout.test.ts",
+ "src/main/agent-hooks/manual-compact-status-cleanup.test.ts",
+ "src/main/agent-hooks/server-amp-normalization.test.ts",
+ "src/main/agent-hooks/server-claude-child-permission-lifecycle.test.ts",
+ "src/main/agent-hooks/server-endpoint-file-lifecycle.test.ts",
+ "src/main/agent-hooks/server-escape-navigation-inference.test.ts",
+ "src/main/agent-hooks/server-observation-provenance.test.ts",
+ "src/main/agent-hooks/server-pi-normalization.test.ts",
+ "src/main/agent-hooks/server-replay-evidence-clock.test.ts",
+ "src/main/agent-hooks/terminal-handle-row-identity.test.ts",
+ "src/main/agent-hooks/windows-direct-cmd-hook-command.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-live.integration.test.ts",
+ "src/main/agent-trust-presets.test.ts",
+ "src/main/ai-vault-search/session-search-child-service.test.ts",
+ "src/main/ai-vault-search/session-search-merged-roots.test.ts",
+ "src/main/ai-vault-search/session-search-paging.test.ts",
+ "src/main/ai-vault-search/session-search-row-identity.test.ts",
+ "src/main/ai-vault-search/session-search-scope-service.test.ts",
+ "src/main/ai-vault/remote-session-large-transcripts.test.ts",
+ "src/main/ai-vault/session-parse-cache-devin-upgrade.test.ts",
+ "src/main/ai-vault/session-parse-cache-persistence.test.ts",
+ "src/main/ai-vault/session-scanner-devin-dedup.test.ts",
+ "src/main/ai-vault/session-scanner-discovery-wsl-gate.test.ts",
+ "src/main/ai-vault/session-scanner-index-cache-wsl-stall.test.ts",
+ "src/main/ai-vault/session-scanner-kimi-parser.test.ts",
+ "src/main/ai-vault/session-scanner-parse-cache-agents.test.ts",
+ "src/main/ai-vault/session-scanner-parse-cache.test.ts",
+ "src/main/ai-vault/session-scanner-service-cancellation.test.ts",
+ "src/main/ai-vault/session-scanner-service-client.test.ts",
+ "src/main/ai-vault/session-scanner-service-spawn.test.ts",
+ "src/main/ai-vault/session-sidecar-stat.test.ts",
+ "src/main/ai-vault/session-title-file-reader-wsl-stall.test.ts",
+ "src/main/ai-vault/session-transcript-consumers.test.ts",
+ "src/main/ai-vault/session-transcript-record-budget.test.ts",
+ "src/main/antigravity/windows-hook-payload-delivery.test.ts",
+ "src/main/artifacts/artifact-cloud-recovery.test.ts",
+ "src/main/artifacts/artifact-cloud-service.test.ts",
+ "src/main/automations/automation-workspace-host-attribution.test.ts",
+ "src/main/automations/external-automation-probe-scheduler.test.ts",
+ "src/main/automations/precheck-runner.test.ts",
+ "src/main/automations/service-precheck.test.ts",
+ "src/main/azure-devops/azure-devops-api-request.test.ts",
+ "src/main/bitbucket/repository-ref.test.ts",
+ "src/main/browser/browser-client-host-attach-request.test.ts",
+ "src/main/browser/browser-client-host-command-retention.test.ts",
+ "src/main/browser/browser-cookie-import-clear-atomicity.test.ts",
+ "src/main/browser/browser-cookie-import-partition-reland.electron.test.ts",
+ "src/main/browser/browser-cookie-import-partition.electron.test.ts",
+ "src/main/browser/browser-cookie-import-policy.test.ts",
+ "src/main/browser/browser-cookie-import-replacement.test.ts",
+ "src/main/browser/browser-cookie-validation.test.ts",
+ "src/main/browser/browser-guest-shortcut-forwarding.test.ts",
+ "src/main/browser/browser-manager-guest-policy-profile.test.ts",
+ "src/main/browser/browser-network-tunnel-session-stream-scoped-failure.test.ts",
+ "src/main/browser/browser-process-user-agent.test.ts",
+ "src/main/browser/browser-route-dns-prefetch.electron.test.ts",
+ "src/main/browser/browser-route-partition-migration.test.ts",
+ "src/main/browser/browser-route-partition-stability.test.ts",
+ "src/main/browser/browser-route-partition-storage-retirement.test.ts",
+ "src/main/browser/browser-screencast-stream.test.ts",
+ "src/main/browser/browser-session-cookie-staging.test.ts",
+ "src/main/browser/browser-session-registry.test.ts",
+ "src/main/browser/browser-session-startup.test.ts",
+ "src/main/browser/browser-viewport-user-agent.test.ts",
+ "src/main/browser/cdp-keyboard-us-layout.test.ts",
+ "src/main/browser/doc-preview-grant-registry.test.ts",
+ "src/main/browser/popup-origin-bar-window.test.ts",
+ "src/main/claude-accounts/claude-account-service-add-account.test.ts",
+ "src/main/claude-accounts/claude-login-completion.oracle.test.ts",
+ "src/main/claude-accounts/keychain.test.ts",
+ "src/main/claude-usage/transcript-record-parser-prefilter.test.ts",
+ "src/main/claude/claude-agent-sdk-exit-proof-identity.test.ts",
+ "src/main/claude/claude-background-task-rows.test.ts",
+ "src/main/claude/claude-config-dir-pin.test.ts",
+ "src/main/claude/claude-structured-content-parts.test.ts",
+ "src/main/claude/claude-structured-dispatch-queue-boundary.test.ts",
+ "src/main/claude/claude-structured-prompt-ownership.test.ts",
+ "src/main/claude/claude-structured-session-commands.test.ts",
+ "src/main/claude/claude-turn-resumption.test.ts",
+ "src/main/claude/hook-service.test.ts",
+ "src/main/cli/appimage-extracted-root.test.ts",
+ "src/main/cli/cli-installer.test.ts",
+ "src/main/codex-accounts/legacy-shared-config-compatibility.test.ts",
+ "src/main/codex-accounts/runtime-home-resume-selection-gate.test.ts",
+ "src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts",
+ "src/main/codex-cli/codex-home-process-lock.test.ts",
+ "src/main/codex-cli/command.test.ts",
+ "src/main/codex-usage/codex-usage-long-context-billing.test.ts",
+ "src/main/codex/codex-config-mirror.test.ts",
+ "src/main/codex/codex-hook-legacy-profile-block.test.ts",
+ "src/main/codex/codex-rollout-session-meta.test.ts",
+ "src/main/codex/codex-session-resume-preparation.test.ts",
+ "src/main/codex/codex-structured-dispatch-echo.test.ts",
+ "src/main/codex/codex-structured-journal-compactions.test.ts",
+ "src/main/codex/codex-structured-journal-translation-settlement.test.ts",
+ "src/main/codex/codex-structured-launch-resolution.test.ts",
+ "src/main/codex/codex-structured-prompt-replies.test.ts",
+ "src/main/codex/codex-structured-session-adapter.test.ts",
+ "src/main/codex/codex-structured-session-background-tasks.test.ts",
+ "src/main/codex/codex-structured-session-options.test.ts",
+ "src/main/codex/codex-structured-session-shutdown.test.ts",
+ "src/main/codex/codex-turn-ordinals.test.ts",
+ "src/main/codex/config-settings-promotion.test.ts",
+ "src/main/codex/config-toml-trust-paths.test.ts",
+ "src/main/codex/hook-service-managed-install.test.ts",
+ "src/main/codex/windows-hook-upgrade.test.ts",
+ "src/main/computer/desktop-script-provider-actions.test.ts",
+ "src/main/computer/desktop-script-provider-cache-lifecycle.test.ts",
+ "src/main/computer/desktop-script-provider-cache.test.ts",
+ "src/main/crash-reporting/crash-breadcrumb-renderer-attribution.test.ts",
+ "src/main/crash-reporting/crash-report-store.test.ts",
+ "src/main/crash-reporting/crashpad-capture.test.ts",
+ "src/main/crash-reporting/expected-teardown-state.test.ts",
+ "src/main/crash-reporting/gpu-crash-diagnostics.test.ts",
+ "src/main/crash-reporting/gpu-fallback-restart-prompt.test.ts",
+ "src/main/crash-reporting/minidump-file-source.test.ts",
+ "src/main/cursor/hook-service.test.ts",
+ "src/main/daemon/daemon-errors.test.ts",
+ "src/main/daemon/daemon-file-log.test.ts",
+ "src/main/daemon/daemon-launched-child-identity.test.ts",
+ "src/main/daemon/daemon-server-attachment-lifecycle.test.ts",
+ "src/main/daemon/daemon-server-error-handling.test.ts",
+ "src/main/daemon/daemon-stream-producer-stall-watchdog.test.ts",
+ "src/main/daemon/headless-emulator-wide-char-snapshot.test.ts",
+ "src/main/daemon/hibernation-cold-restore-repro.test.ts",
+ "src/main/daemon/history-manager.test.ts",
+ "src/main/daemon/history-reader.test.ts",
+ "src/main/daemon/node-pty-error-hints.test.ts",
+ "src/main/daemon/pty-session-id.test.ts",
+ "src/main/daemon/session-pending-output.test.ts",
+ "src/main/daemon/session-terminal-control.test.ts",
+ "src/main/daemon/slow-daemon-session-verification.test.ts",
+ "src/main/daemon/terminal-cursor-line-context.test.ts",
+ "src/main/daemon/terminal-host-agent-session.test.ts",
+ "src/main/daemon/terminal-host-process-inspection.test.ts",
+ "src/main/daemon/terminal-host-spawn-input-retention.test.ts",
+ "src/main/devin/hook-config-json.test.ts",
+ "src/main/emulator/android/android-device-inventory.test.ts",
+ "src/main/emulator/android/android-input-mapping.test.ts",
+ "src/main/emulator/android/android-permissions.test.ts",
+ "src/main/emulator/android/scrcpy-server-deploy.test.ts",
+ "src/main/emulator/emulator-session-registry.test.ts",
+ "src/main/fish-history-session.test.ts",
+ "src/main/ghostty/mapper.test.ts",
+ "src/main/git-bash.test.ts",
+ "src/main/git/admission-tier-plumbing.test.ts",
+ "src/main/git/gh-rate-limit-breaker.test.ts",
+ "src/main/git/git-status-read-lease-owner.test.ts",
+ "src/main/git/remote-name-listing.test.ts",
+ "src/main/git/remove-worktree-clean-preflight.test.ts",
+ "src/main/git/repo-ref-maintenance-real-git.test.ts",
+ "src/main/git/repo-username.test.ts",
+ "src/main/git/repo.test.ts",
+ "src/main/git/runner-gh-host-args.test.ts",
+ "src/main/git/runner-gh-rate-limit-breaker.test.ts",
+ "src/main/git/status-branch-line-total-exec-contract.test.ts",
+ "src/main/git/status-conflict-operations.test.ts",
+ "src/main/git/upstream-deferred-fork-remote-real.test.ts",
+ "src/main/git/worktree-add-creation-config.test.ts",
+ "src/main/git/worktree-base-divergence-real-git.test.ts",
+ "src/main/git/worktree-configured-paths-concurrency.test.ts",
+ "src/main/git/worktree-diff-stamp-guest-gitdir.test.ts",
+ "src/main/git/worktree-preparation-cancel-latency.bench.test.ts",
+ "src/main/gitea/pull-request-creation.test.ts",
+ "src/main/github/client-issue-source.test.ts",
+ "src/main/github/client-merge-queue-auto-merge.test.ts",
+ "src/main/github/client-pr-checks.test.ts",
+ "src/main/github/stacked-pr-creation.test.ts",
+ "src/main/gitlab/client-mr-job-ci.test.ts",
+ "src/main/gitlab/client-mr-review-actions.test.ts",
+ "src/main/gitlab/issues.test.ts",
+ "src/main/global-fetch-call-site-audit.test.ts",
+ "src/main/grok/windows-grok-hook-script.test.ts",
+ "src/main/headless-automation-dispatcher-source-boundary.test.ts",
+ "src/main/hooks.test.ts",
+ "src/main/host/deferred-secret-protection-report.test.ts",
+ "src/main/host/secret-protection-report.test.ts",
+ "src/main/ipc/agent-hooks.test.ts",
+ "src/main/ipc/ai-vault-search-all-hosts.test.ts",
+ "src/main/ipc/bounded-warning-dedupe.test.ts",
+ "src/main/ipc/crash-reporting-replay-guard-wedge-burst.test.ts",
+ "src/main/ipc/doc-preview-grant-ipc.test.ts",
+ "src/main/ipc/dropped-path-resolution.test.ts",
+ "src/main/ipc/ephemeral-vm-provision-cancel.test.ts",
+ "src/main/ipc/filesystem-conflict-operation-routing.test.ts",
+ "src/main/ipc/filesystem-import-ssh-path-safety.test.ts",
+ "src/main/ipc/filesystem-markdown-document-listing.test.ts",
+ "src/main/ipc/filesystem-path-containment-unicode-normalization.test.ts",
+ "src/main/ipc/filesystem-search-rg-timeout.test.ts",
+ "src/main/ipc/filesystem-watcher-native-capacity.test.ts",
+ "src/main/ipc/filesystem-watcher-remote-capacity.test.ts",
+ "src/main/ipc/filesystem-watcher-remote-rearm.test.ts",
+ "src/main/ipc/filesystem-watcher.test.ts",
+ "src/main/ipc/folder-repo-git-upgrade.test.ts",
+ "src/main/ipc/macos-keyboard-layout-snapshot.test.ts",
+ "src/main/ipc/notifications-custom-sound.test.ts",
+ "src/main/ipc/parcel-watcher-process-entry.test.ts",
+ "src/main/ipc/parcel-watcher-process.test.ts",
+ "src/main/ipc/pty-agent-session-write-gate.test.ts",
+ "src/main/ipc/pty-controller-owner-recovery.test.ts",
+ "src/main/ipc/pty-dead-owner-respawn.test.ts",
+ "src/main/ipc/pty-hidden-at-spawn-mark.test.ts",
+ "src/main/ipc/pty-login-shell-startup-commands.test.ts",
+ "src/main/ipc/pty-output-batching-drain.test.ts",
+ "src/main/ipc/pty-pane-claim-arbitration.test.ts",
+ "src/main/ipc/pty-renderer-inflight-credit.test.ts",
+ "src/main/ipc/pty-renderer-liveness-guard.test.ts",
+ "src/main/ipc/pty-runtime-hidden-at-spawn-mark.test.ts",
+ "src/main/ipc/pty-runtime-kill-and-exit.test.ts",
+ "src/main/ipc/pty-spawn-env-agent-overlays.test.ts",
+ "src/main/ipc/pty/register-headless-runtime.test.ts",
+ "src/main/ipc/renderer-lifetime-abort.test.ts",
+ "src/main/ipc/repos-local-add-and-project-setup.test.ts",
+ "src/main/ipc/repos-local-clone-lifecycle.test.ts",
+ "src/main/ipc/repos-picker.test.ts",
+ "src/main/ipc/runtime-environment-capability-evidence.test.ts",
+ "src/main/ipc/runtime-environment-status-connection.test.ts",
+ "src/main/ipc/runtime-environments-call-routing.test.ts",
+ "src/main/ipc/runtime-environments-subscription-lifecycle.test.ts",
+ "src/main/ipc/runtime-upload-temp-sweep.test.ts",
+ "src/main/ipc/runtime-watcher-process-pool.test.ts",
+ "src/main/ipc/skill-cloud-ipc-handlers.test.ts",
+ "src/main/ipc/ssh-pty-output-generation-guard.test.ts",
+ "src/main/ipc/ssh-pty-output-intake.test.ts",
+ "src/main/ipc/ssh-pty-source-obligation-coordinator.test.ts",
+ "src/main/ipc/workspace-ports.test.ts",
+ "src/main/ipc/worktree-base-directory-event-filter.test.ts",
+ "src/main/ipc/worktree-metadata-merge.test.ts",
+ "src/main/ipc/worktree-remote-ssh-branch-conflict.test.ts",
+ "src/main/ipc/worktree-symlinks.test.ts",
+ "src/main/ipc/worktrees-issue-command-overrides.test.ts",
+ "src/main/ipc/worktrees-remove-preflight.test.ts",
+ "src/main/ipc/worktrees-ssh-pr-head-fetch.test.ts",
+ "src/main/ipc/worktrees/removal/remove-unregistered-worktree-host-home.test.ts",
+ "src/main/kimi/kimi-runtime-home.test.ts",
+ "src/main/lib/unread-response-body.test.ts",
+ "src/main/line-editor-ready-output-scanner.test.ts",
+ "src/main/linear/issue-context-includes.test.ts",
+ "src/main/linear/issue-context.test.ts",
+ "src/main/linear/issue-relation-write.test.ts",
+ "src/main/linear/mcp-issue-list-pagination.test.ts",
+ "src/main/linear/mcp-issue-list.test.ts",
+ "src/main/local-builds/local-build-compatibility-contract.test.ts",
+ "src/main/local-builds/local-build-feed-server.test.ts",
+ "src/main/macos-press-and-hold-default.test.ts",
+ "src/main/macos-tcc-prompt-watch.test.ts",
+ "src/main/macos-tcc-reset.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-cursor.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-file-format-remnant.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-legacy-import-source-bound.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-reducer.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-store.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-subagent-liveness.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-history-page-scaling.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-dead-generation-settlement.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-host-handoff.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-late-settlement.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-restore.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-resume.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-rewind.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-wedged-profile-migration.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-tui-transcript-close.test.ts",
+ "src/main/native-chat/host-readable-transcript-path.test.ts",
+ "src/main/native-chat/session-file-resolver-wsl.test.ts",
+ "src/main/native-chat/structured-agent-session-create-support.test.ts",
+ "src/main/native-chat/transcript-line-decoders-claude-image-companion.test.ts",
+ "src/main/native-chat/transcript-watch-unsubscribe-race.test.ts",
+ "src/main/native-chat/transcript-watch.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-access.test.ts",
+ "src/main/network/proxy-settings-session.test.ts",
+ "src/main/observability/architecture.test.ts",
+ "src/main/opencode-usage/store.test.ts",
+ "src/main/opencode/hook-plugin-opencode2-setup.test.ts",
+ "src/main/orca-profiles/profile-cloud-auth-config.test.ts",
+ "src/main/orca-profiles/profile-index-store.test.ts",
+ "src/main/orca-profiles/profile-project-transfer.test.ts",
+ "src/main/orcad/electron-serve-provider-selection.test.ts",
+ "src/main/orcad/orcad-push-startup.test.ts",
+ "src/main/persistence-clipboard-selection-migration.test.ts",
+ "src/main/persistence-floating-terminal-trust.test.ts",
+ "src/main/persistence-flush-and-save-scheduling.test.ts",
+ "src/main/persistence-host-admitted-terminal-membership.test.ts",
+ "src/main/persistence-host-partitioned-sessions.test.ts",
+ "src/main/persistence-loading-store-write-risks.test.ts",
+ "src/main/persistence-pane-identity-migration.test.ts",
+ "src/main/persistence-settings-ui-defaults.test.ts",
+ "src/main/persistence-source-control-ai-migration.test.ts",
+ "src/main/persistence-update-repo.test.ts",
+ "src/main/persistence/loading-store/normalize-loaded-project-catalog.test.ts",
+ "src/main/persistence/loading-store/pty-binding-fast-lane.test.ts",
+ "src/main/persistence/loading-store/state-write-round-trip.test.ts",
+ "src/main/pi/agent-status-extension-omp-prefill.test.ts",
+ "src/main/pi/agent-status-extension-source.test.ts",
+ "src/main/plugins/plugin-host-process.test.ts",
+ "src/main/plugins/plugin-host-runtime.test.ts",
+ "src/main/plugins/plugin-kill-list-content-revocation.test.ts",
+ "src/main/plugins/plugin-marketplace-service.test.ts",
+ "src/main/plugins/plugin-startup-budget.test.ts",
+ "src/main/plugins/plugin-storage-store.test.ts",
+ "src/main/plugins/plugin-uninstall-ordering.test.ts",
+ "src/main/ports/port-scan-command-import-boundary.test.ts",
+ "src/main/ports/workspace-port-ownership.test.ts",
+ "src/main/powershell-osc133-bootstrap.test.ts",
+ "src/main/providers/agent-foreground-process-batch.test.ts",
+ "src/main/providers/agent-foreground-process-windows-job-rejection.test.ts",
+ "src/main/providers/local-pty-foreground-inspection-cheap-tier.test.ts",
+ "src/main/providers/local-pty-provider-shell-readiness.test.ts",
+ "src/main/providers/macos-tcc-login-shell.test.ts",
+ "src/main/providers/process-cwd.test.ts",
+ "src/main/providers/provider-dispatch.test.ts",
+ "src/main/providers/ssh-filesystem-provider-watch-waiters.test.ts",
+ "src/main/providers/ssh-git-provider-remote-sync.test.ts",
+ "src/main/providers/ssh-git-provider-status-lease.test.ts",
+ "src/main/providers/ssh-git-provider-status.test.ts",
+ "src/main/providers/ssh-git-provider-upstream-lease.test.ts",
+ "src/main/providers/ssh-pty-notification-rejection-routing.test.ts",
+ "src/main/providers/ssh-pty-provider-claim-incarnation.test.ts",
+ "src/main/providers/ssh-pty-provider-terminal-repair.test.ts",
+ "src/main/providers/ssh-pty-provider.test.ts",
+ "src/main/providers/ssh-pty-reattach-absence-discrimination.test.ts",
+ "src/main/providers/windows-agent-foreground-process-scan-volume.test.ts",
+ "src/main/pty/codex-preflight-profile-path-rewrite.test.ts",
+ "src/main/pty/windows-environment-path.test.ts",
+ "src/main/pty/windows-path-registry-reader.test.ts",
+ "src/main/quit-path-durable-write-blocking.test.ts",
+ "src/main/rate-limits/claude-pty.test.ts",
+ "src/main/rate-limits/codex-fetcher.test.ts",
+ "src/main/rate-limits/kimi-fetcher-wsl-home.test.ts",
+ "src/main/rate-limits/service-account-target-selection.test.ts",
+ "src/main/rate-limits/service-antigravity-usage.test.ts",
+ "src/main/repo-maintenance-idle-gate.test.ts",
+ "src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts",
+ "src/main/runtime/agent-prompt-submission-windows-submit-delay.test.ts",
+ "src/main/runtime/agent-session-launch-env-backfill.test.ts",
+ "src/main/runtime/agent-session-lease-renewal.test.ts",
+ "src/main/runtime/agent-session-record-options.test.ts",
+ "src/main/runtime/agent-session-recovery-capsule.test.ts",
+ "src/main/runtime/agent-session-spawn-token-process-scan.test.ts",
+ "src/main/runtime/antigravity-readiness-transcripts.test.ts",
+ "src/main/runtime/browser-host-command-ledger.test.ts",
+ "src/main/runtime/browser-host-page-reconciliation-preconditions.test.ts",
+ "src/main/runtime/browser-host-page-retirement.test.ts",
+ "src/main/runtime/headless-close-keeps-publication-epoch.test.ts",
+ "src/main/runtime/hidden-output-restored-provider-snapshot.test.ts",
+ "src/main/runtime/mobile-pairing-userdata-path.test.ts",
+ "src/main/runtime/mobile-presence-lock.test.ts",
+ "src/main/runtime/orca-runtime-agent-skill-share.test.ts",
+ "src/main/runtime/orca-runtime-browser-ghost-session-row-close.test.ts",
+ "src/main/runtime/orca-runtime-browser.test.ts",
+ "src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts",
+ "src/main/runtime/orca-runtime-files-rename-authority.test.ts",
+ "src/main/runtime/orca-runtime-git-diff-budget.test.ts",
+ "src/main/runtime/orca-runtime-process-incarnation-liveness.test.ts",
+ "src/main/runtime/orca-runtime-skill-recovery.test.ts",
+ "src/main/runtime/orca-runtime-structured-claude-gate-wiring.test.ts",
+ "src/main/runtime/orca-runtime-structured-native-chat-settings.test.ts",
+ "src/main/runtime/orca-runtime-terminal-cwd.test.ts",
+ "src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts",
+ "src/main/runtime/orca-runtime-terminal-rename-retention.test.ts",
+ "src/main/runtime/orchestration-message-delivery-identity.test.ts",
+ "src/main/runtime/orchestration/db-message-timestamp.test.ts",
+ "src/main/runtime/orchestration/db/dispatch-mailbox-consumer-fencing.test.ts",
+ "src/main/runtime/orchestration/db/lifecycle-transition-boundary.test.ts",
+ "src/main/runtime/orchestration/db/lifecycle-transition.test.ts",
+ "src/main/runtime/orchestration/dispatch-failure-idempotency.test.ts",
+ "src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts",
+ "src/main/runtime/orchestration/mailbox-pointer-eligibility.test.ts",
+ "src/main/runtime/orchestration/orchestration-federated-legacy-probe.test.ts",
+ "src/main/runtime/orchestration/orchestration-mutation-question-db.test.ts",
+ "src/main/runtime/orchestration/orchestration-reset-db.test.ts",
+ "src/main/runtime/orchestration/structured-session-pointer-delivery.test.ts",
+ "src/main/runtime/orchestration/structured-worker-group-addressing.test.ts",
+ "src/main/runtime/orchestration/worker-start-unobserved-prompt-settlement.test.ts",
+ "src/main/runtime/orchestration/worker-terminal-process-liveness.test.ts",
+ "src/main/runtime/orchestration/worker-transcript-remote-read.test.ts",
+ "src/main/runtime/push/desktop-push-service-unreadable-outbox.test.ts",
+ "src/main/runtime/push/push-delivery-policy.test.ts",
+ "src/main/runtime/push/push-gateway-client.test.ts",
+ "src/main/runtime/push/push-preferences.test.ts",
+ "src/main/runtime/push/push-unregister-outbox.test.ts",
+ "src/main/runtime/relay/relay-control-origin.test.ts",
+ "src/main/runtime/relay/relay-control-request-retirement.test.ts",
+ "src/main/runtime/relay/relay-renewal-jitter.test.ts",
+ "src/main/runtime/remote-desktop-driver.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-terminal-prompt.test.ts",
+ "src/main/runtime/rpc/methods/clipboard.test.ts",
+ "src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts",
+ "src/main/runtime/rpc/methods/files.test.ts",
+ "src/main/runtime/rpc/methods/git-diff-transport-budget.test.ts",
+ "src/main/runtime/rpc/methods/mobile-web-bundle.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-structured-worker-session.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-attach-receipt.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-message-targeting.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-folder-placement.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-liveness-verdict.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/recipient-routing.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/runs/migration-behavior.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/manual-dispatch-observation.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-outcome-classification.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-prompt-budget.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-prompt-contract.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/workers-new-worktree.test.ts",
+ "src/main/runtime/rpc/methods/plugins.test.ts",
+ "src/main/runtime/rpc/methods/session-tab-browser-placement-projection.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-inventory-rpc.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session.test.ts",
+ "src/main/runtime/rpc/methods/task-provider-identity.test.ts",
+ "src/main/runtime/rpc/methods/terminal-stream-extraction-characterization.test.ts",
+ "src/main/runtime/rpc/methods/updater.test.ts",
+ "src/main/runtime/rpc/methods/worktree-catalog-snapshot-method.test.ts",
+ "src/main/runtime/rpc/methods/worktree-rm-pty-waiver.test.ts",
+ "src/main/runtime/rpc/mobile-e2ee-v2-key-schedule.test.ts",
+ "src/main/runtime/rpc/orchestration-contract-fence.test.ts",
+ "src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts",
+ "src/main/runtime/rpc/relay-transport.test.ts",
+ "src/main/runtime/rpc/terminal-list-host-scope-transport.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-ack-output-budget.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-round-robin.test.ts",
+ "src/main/runtime/rpc/terminal-output-batching.test.ts",
+ "src/main/runtime/rpc/terminal-provider-snapshot-sequence.test.ts",
+ "src/main/runtime/rpc/terminal-requested-snapshot-unavailability.test.ts",
+ "src/main/runtime/rpc/terminal-stream-byte-length.test.ts",
+ "src/main/runtime/rpc/ws-fallback-port-store.test.ts",
+ "src/main/runtime/runtime-local-worktree-create.test.ts",
+ "src/main/runtime/runtime-project-group-controller-folder-delete.test.ts",
+ "src/main/runtime/runtime-rpc-browser-host-admission.test.ts",
+ "src/main/runtime/runtime-search-line-fragments.test.ts",
+ "src/main/runtime/runtime-skill-install-queries.test.ts",
+ "src/main/runtime/runtime-worktree-selection.test.ts",
+ "src/main/runtime/selected-review-branch.test.ts",
+ "src/main/runtime/structured-agent-session-pty-binding.test.ts",
+ "src/main/runtime/structured-agent-session-runtime-exit.test.ts",
+ "src/main/runtime/structured-agent-session-runtime.test.ts",
+ "src/main/runtime/structured-agent-shell-environment.test.ts",
+ "src/main/runtime/terminal-projection.test.ts",
+ "src/main/runtime/terminal-subscribe-exit-waiter-leak.test.ts",
+ "src/main/runtime/terminal-tail-sentinel-index.test.ts",
+ "src/main/runtime/tui-idle-delivery-and-quiescence.test.ts",
+ "src/main/runtime/windows-drive-listing.test.ts",
+ "src/main/runtime/windows-mobile-firewall.test.ts",
+ "src/main/shell-prompt-readiness-probe.test.ts",
+ "src/main/skills/skill-bundle-creation.test.ts",
+ "src/main/skills/skill-bundle-process-termination-child.test.ts",
+ "src/main/skills/skill-discovery-target.test.ts",
+ "src/main/skills/skill-freshness-eligibility.test.ts",
+ "src/main/skills/skill-install-request-service.test.ts",
+ "src/main/skills/skill-process-termination-child.test.ts",
+ "src/main/skills/skill-remove-transaction.test.ts",
+ "src/main/skills/skill-upload-session-service.test.ts",
+ "src/main/skills/skill-wsl-install-filesystem.test.ts",
+ "src/main/skills/skill-wsl-posix-semantics.integration.test.ts",
+ "src/main/speech/openai-api-key-store.test.ts",
+ "src/main/speech/openai-transcription-client.test.ts",
+ "src/main/speech/speech-model-deletion.test.ts",
+ "src/main/speech/speech-model-download-response.test.ts",
+ "src/main/speech/stt-offline-audio-chunker.test.ts",
+ "src/main/ssh-expired-lease-pane-readoption.test.ts",
+ "src/main/ssh/relay-protocol.test.ts",
+ "src/main/ssh/remote-install-coexistence.test.ts",
+ "src/main/ssh/remote-install-model.test.ts",
+ "src/main/ssh/ssh-connection-file-transfer.test.ts",
+ "src/main/ssh/ssh-connection-host-key-verification.test.ts",
+ "src/main/ssh/ssh-connection-reconnect-ladder.test.ts",
+ "src/main/ssh/ssh-connection-sftp-wire.test.ts",
+ "src/main/ssh/ssh-host-key-decision.test.ts",
+ "src/main/ssh/ssh-multiplexer-transport-writer.test.ts",
+ "src/main/ssh/ssh-relay-deploy-helpers.test.ts",
+ "src/main/ssh/ssh-relay-endpoint-takeover.test.ts",
+ "src/main/ssh/ssh-relay-orphan-abandon-paths.test.ts",
+ "src/main/ssh/ssh-relay-ripgrep-install.test.ts",
+ "src/main/ssh/ssh-relay-session-terminal-error.test.ts",
+ "src/main/ssh/ssh-remote-linear-list-issues.test.ts",
+ "src/main/ssh/ssh-system-fallback.test.ts",
+ "src/main/ssh/system-ssh-dynamic-forward-process.test.ts",
+ "src/main/ssh/system-ssh-forward-process.test.ts",
+ "src/main/ssh/system-ssh-windows-write-capabilities.test.ts",
+ "src/main/startup/branch-rename-hook-structured-session.test.ts",
+ "src/main/startup/dev-instance-identity.test.ts",
+ "src/main/startup/first-window-startup-services.test.ts",
+ "src/main/startup/gpu-fallback-switches.test.ts",
+ "src/main/startup/host-port-bootstrap-wiring.test.ts",
+ "src/main/startup/serve-mode-argv.test.ts",
+ "src/main/startup/serve-options.test.ts",
+ "src/main/startup/serve-signal-handlers.test.ts",
+ "src/main/startup/wsl-cli-reconciliation-startup-barrier.test.ts",
+ "src/main/stats/agent-session-transition-recorder.test.ts",
+ "src/main/stats/collector-async-save.test.ts",
+ "src/main/telemetry/burst-cap.test.ts",
+ "src/main/telemetry/client.test.ts",
+ "src/main/telemetry/onboarding-cohort-classifier.test.ts",
+ "src/main/telemetry/validator-warn-cache.test.ts",
+ "src/main/terminal-history-async-delete.test.ts",
+ "src/main/text-generation/pull-request-context-errors.test.ts",
+ "src/main/updater-lifecycle-diagnostics.test.ts",
+ "src/main/updater.linux-externally-managed.test.ts",
+ "src/main/usage/usage-worktree-resolver.test.ts",
+ "src/main/window/clipboard-dashboard-popout-access.test.ts",
+ "src/main/window/clipboard-ipc-handlers.test.ts",
+ "src/main/window/clipboard-text-write-verify.test.ts",
+ "src/main/window/focus-existing-window.test.ts",
+ "src/main/windows-process-tree-kill.test.ts",
+ "src/main/windows/windows-process-table-native-addon.win32.test.ts",
+ "src/main/workspace-space-analysis-capacity.test.ts",
+ "src/main/workspace-space-analysis-du-timeout.test.ts",
+ "src/main/worktree-create-preparation-wsl-root.test.ts",
+ "src/main/worktree-retirement-discovery.test.ts",
+ "src/main/worktree-trash.test.ts",
+ "src/main/wsl-distro-list-single-flight.test.ts",
+ "src/main/wsl-running-path-filter.test.ts",
+ "src/main/wsl/wsl-invocation-boundary.test.ts",
+ "src/preload/browser-find-subscriptions.test.ts",
+ "src/preload/pty-snapshot-capability-ipc.test.ts",
+ "src/preload/renderer-heap-statistics-reader.test.ts",
+ "src/relay/external-automations-handler-log-path.test.ts",
+ "src/relay/fs-handler-list-files-result-limit.test.ts",
+ "src/relay/fs-handler.test.ts",
+ "src/relay/fs-path-metadata-requests.test.ts",
+ "src/relay/git-handler-branch-diff-equivalence.test.ts",
+ "src/relay/git-handler-staging.test.ts",
+ "src/relay/git-handler-submodule-ops.test.ts",
+ "src/relay/git-handler-termination.test.ts",
+ "src/relay/git-handler.test.ts",
+ "src/relay/git-porcelain-local-parity.test.ts",
+ "src/relay/git-response-stream-ownership.test.ts",
+ "src/relay/omp-fresh-launch-environment.test.ts",
+ "src/relay/plugin-source-limit.test.ts",
+ "src/relay/protocol-handshake.test.ts",
+ "src/relay/pty-handler-attach-replay.test.ts",
+ "src/relay/pty-handler-grace-timer.test.ts",
+ "src/relay/pty-handler-startup-command-delivery.test.ts",
+ "src/renderer/src/app-shell/shutdown-checkpoint-persist.test.ts",
+ "src/renderer/src/assets/terminal-scrollbar-style.test.ts",
+ "src/renderer/src/assets/theme-utility-generation.test.ts",
+ "src/renderer/src/components/TerminalTitlebarTabs.test.tsx",
+ "src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx",
+ "src/renderer/src/components/activity/activity-event-builder-agent-context.test.ts",
+ "src/renderer/src/components/activity/activity-event-builder.host-ownership.test.ts",
+ "src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts",
+ "src/renderer/src/components/activity/activity-thread-virtual-items.test.ts",
+ "src/renderer/src/components/activity/useActivityUnreadCount.test.ts",
+ "src/renderer/src/components/artifacts/ArtifactPublishButton.test.tsx",
+ "src/renderer/src/components/artifacts/artifact-list-search.test.ts",
+ "src/renderer/src/components/automations/AutomationHostFilterNotice.test.tsx",
+ "src/renderer/src/components/automations/AutomationsListPanel.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.escape-precedence.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.notice-recovery.test.tsx",
+ "src/renderer/src/components/automations/automation-host-cache-health.test.ts",
+ "src/renderer/src/components/automations/automation-host-recovery.test.ts",
+ "src/renderer/src/components/automations/automation-list-keyboard-navigation.test.ts",
+ "src/renderer/src/components/automations/automation-list-view-sort.test.ts",
+ "src/renderer/src/components/automations/automation-usage-model.test.ts",
+ "src/renderer/src/components/automations/use-selected-automation-run-history.test.tsx",
+ "src/renderer/src/components/browser-favicon.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.markup.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/GrabConfirmationSheet.test.ts",
+ "src/renderer/src/components/browser-pane/annotate/useMarkupEditor.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.webview-preferences.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-workspace-pane.adoption-chrome.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/use-browser-page-chrome-focus.test.tsx",
+ "src/renderer/src/components/browser-pane/browser-client-page-metadata-publisher.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-guest-eviction-veto.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-guest-retention-site-census.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-guest-recovery.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-system-resume.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/use-browser-page-slot-viewport.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/use-webview-drag-passthrough-active.test.tsx",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-restart-scheduler.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-status.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-stream-activation.test.ts",
+ "src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.test.ts",
+ "src/renderer/src/components/cmd-j/palette-activation-focus-routing.test.ts",
+ "src/renderer/src/components/connect-dialog-outside-dismiss.test.tsx",
+ "src/renderer/src/components/contextual-tours/ContextualTourControl.test.ts",
+ "src/renderer/src/components/dashboard-popout/AgentKanbanCard.test.tsx",
+ "src/renderer/src/components/dashboard-popout/preview-terminal-right-click-paste.test.ts",
+ "src/renderer/src/components/dashboard-popout/preview-terminal-snapshot-replay.test.ts",
+ "src/renderer/src/components/dashboard/agent-finished-timestamp.test.ts",
+ "src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts",
+ "src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts",
+ "src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts",
+ "src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts",
+ "src/renderer/src/components/dictation/dictation-stopped-sessions.test.ts",
+ "src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx",
+ "src/renderer/src/components/diff-comments/diff-comment-popover-outside-click.test.tsx",
+ "src/renderer/src/components/editor/ConflictComponents.test.tsx",
+ "src/renderer/src/components/editor/IpynbRendering.test.tsx",
+ "src/renderer/src/components/editor/MonacoEditor.content-owner.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-row-drag.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-windowing.test.tsx",
+ "src/renderer/src/components/editor/diff-navigation-context.test.tsx",
+ "src/renderer/src/components/editor/editor-cmd-save-target.test.ts",
+ "src/renderer/src/components/editor/editor-header.test.ts",
+ "src/renderer/src/components/editor/editor-labels.test.ts",
+ "src/renderer/src/components/editor/ipynb-ansi.test.ts",
+ "src/renderer/src/components/editor/line-copy-path.test.ts",
+ "src/renderer/src/components/editor/markdown-artifact-upload.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-local-images.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-search.test.ts",
+ "src/renderer/src/components/editor/markdown-rich-mode.test.ts",
+ "src/renderer/src/components/editor/markdown-table-of-contents.test.ts",
+ "src/renderer/src/components/editor/markdown-toc-visibility-gate.test.ts",
+ "src/renderer/src/components/editor/monaco-content-sync.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-extension.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-large-text-paste.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-paragraph.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-terminal-path-paste.test.ts",
+ "src/renderer/src/components/editor/selection-copy.test.ts",
+ "src/renderer/src/components/editor/use-rich-markdown-table-control-target.test.tsx",
+ "src/renderer/src/components/emulator-pane/MobileEmulatorTabIntroCallout.test.tsx",
+ "src/renderer/src/components/error-boundaries/react-185-bystander-attribution.test.tsx",
+ "src/renderer/src/components/feature-tips/VoiceDictationFeatureTipVisual.test.tsx",
+ "src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts",
+ "src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts",
+ "src/renderer/src/components/feature-wall/browser-animated-visual-sequence.test.ts",
+ "src/renderer/src/components/file-path-cursor-tooltip.test.ts",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.shortcuts.test.tsx",
+ "src/renderer/src/components/github-item-dialog-source-boundary.test.ts",
+ "src/renderer/src/components/github-project/ProjectRoadmap.test.tsx",
+ "src/renderer/src/components/github-project/ProjectViewStates.test.tsx",
+ "src/renderer/src/components/github/github-work-item-label-filter.test.ts",
+ "src/renderer/src/components/linear-issue-view-storage.test.ts",
+ "src/renderer/src/components/linear-project-presentation.test.ts",
+ "src/renderer/src/components/mobile/MobilePage.test.tsx",
+ "src/renderer/src/components/mobile/NetworkInterfacePicker.test.tsx",
+ "src/renderer/src/components/mobile/use-mobile-page-paired-devices.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatAutocompleteMenus.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatInteractiveCard.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.turn-fold.test.tsx",
+ "src/renderer/src/components/native-chat/StructuredAgentSessionHandoffChrome.test.tsx",
+ "src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.test.tsx",
+ "src/renderer/src/components/native-chat/background-task-roster.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-composer-autogrow.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-composer-composition.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-composer-workspace-file-drop.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-draft-cache.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-file-link.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-launch-session-options.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-noise.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-retire-persisted-model.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-row-height-estimate.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-runtime-send-launch-draft.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-stop-layering.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-task-list-state.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-turn-diffs.test.ts",
+ "src/renderer/src/components/native-chat/structured-agent-session-outbox-storage.test.ts",
+ "src/renderer/src/components/native-chat/structured-session-takeover-report.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-paste.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-launch-draft-adoption.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-session-options.test.ts",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-prompt-cancel.test.tsx",
+ "src/renderer/src/components/new-workspace/smart-workspace-command-value.test.ts",
+ "src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx",
+ "src/renderer/src/components/pet/pet-overlay-visibility.test.ts",
+ "src/renderer/src/components/pet/usePetPointerInteraction.test.ts",
+ "src/renderer/src/components/provider-check-classification-parity.test.ts",
+ "src/renderer/src/components/pull-request-page/cache/file-content.test.ts",
+ "src/renderer/src/components/repo/NestedRepoChecklist.test.tsx",
+ "src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts",
+ "src/renderer/src/components/right-sidebar/AiVaultShowMoreSessionsRow.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerNameFilter.test.tsx",
+ "src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx",
+ "src/renderer/src/components/right-sidebar/HostedReviewActions.draft.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.commit-failure-recovery.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControl.pr-generation-records.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControl.resolve-conflicts-prompt.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-view-defaults.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-empty-state.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-git-status-effects.test.tsx",
+ "src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-deferred-dir-toggle.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-dir-load-tracker.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-runtime-owner-boundary.test.ts",
+ "src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts",
+ "src/renderer/src/components/right-sidebar/right-panel-comment-focus-timers.test.ts",
+ "src/renderer/src/components/right-sidebar/right-sidebar-effective-tab.test.ts",
+ "src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-branch-section-heading.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control-commit-eligibility.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control-dropdown-items.create-pr-intent.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-too-many-changes-banner.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/listing/use-file-projection-work.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/notes/use-diff-comment-notes.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/review/use-action-model.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-persisted-ai-vault-view-options.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-source-control-branch-compare.test.tsx",
+ "src/renderer/src/components/right-sidebar/useFileExplorerVisibleRowProjection.test.ts",
+ "src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx",
+ "src/renderer/src/components/settings/CodexLoginLinkNotice.test.tsx",
+ "src/renderer/src/components/settings/DeveloperPermissionsPane.test.tsx",
+ "src/renderer/src/components/settings/GhosttyImportModal.test.ts",
+ "src/renderer/src/components/settings/MobilePairingQrSection.test.tsx",
+ "src/renderer/src/components/settings/OrcaAccountSettingsPane.test.tsx",
+ "src/renderer/src/components/settings/PluginInstallDialog.test.tsx",
+ "src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx",
+ "src/renderer/src/components/settings/RepositorySourceControlAiSection.test.ts",
+ "src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx",
+ "src/renderer/src/components/settings/ShareSkillsSettingsPane.test.tsx",
+ "src/renderer/src/components/settings/SshTargetCard.test.tsx",
+ "src/renderer/src/components/settings/TaskSourceShowInTasksStep.test.tsx",
+ "src/renderer/src/components/settings/TaskSourceSimpleSetup.test.tsx",
+ "src/renderer/src/components/settings/TasksPane.test.tsx",
+ "src/renderer/src/components/settings/browser-cookie-import-label.test.ts",
+ "src/renderer/src/components/settings/codex-config-sync-warning.test.ts",
+ "src/renderer/src/components/settings/general-editor-search.test.ts",
+ "src/renderer/src/components/settings/integrations-pane-status.test.ts",
+ "src/renderer/src/components/settings/linear-agent-skill-install-cta.test.tsx",
+ "src/renderer/src/components/settings/provider-account-visibility.test.ts",
+ "src/renderer/src/components/settings/repository-source-control-ai-global-ux.test.ts",
+ "src/renderer/src/components/settings/use-debounced-settings-text-draft.test.ts",
+ "src/renderer/src/components/settings/worktree-symlink-path-filter.test.ts",
+ "src/renderer/src/components/sidebar/AddRepoDialog.default-checkout.test.ts",
+ "src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx",
+ "src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.test.tsx",
+ "src/renderer/src/components/sidebar/NewExternalWorktreesInboxLine.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardAgents.send-target.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeDeveloperMenu.test.tsx",
+ "src/renderer/src/components/sidebar/add-remote-host-ssh-actions.test.ts",
+ "src/renderer/src/components/sidebar/clone-defaults.test.ts",
+ "src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.test.ts",
+ "src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts",
+ "src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx",
+ "src/renderer/src/components/sidebar/hovered-workspace-delete.test.ts",
+ "src/renderer/src/components/sidebar/imported-worktrees-card-actions.test.ts",
+ "src/renderer/src/components/sidebar/project-header-action-selector-lockstep.test.ts",
+ "src/renderer/src/components/sidebar/project-header-drag.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-empty-state-gate.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-filter-state.test.ts",
+ "src/renderer/src/components/sidebar/smart-attention.test.ts",
+ "src/renderer/src/components/sidebar/ssh-target-duplicate.test.ts",
+ "src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx",
+ "src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts",
+ "src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-send-target-inputs.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-title-display.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-host-collision.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/drag/pointer-flush.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/listing/pending-worktree-creation-keys.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/rows/FolderPathStatusIndicator.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/rows/option-dom-host-collision.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/scroll-adjustment.test.ts",
+ "src/renderer/src/components/sidebar/worktree-manual-order-catalog.test.ts",
+ "src/renderer/src/components/sidebar/worktree-multi-selection.test.ts",
+ "src/renderer/src/components/sidebar/worktree-review-helpers.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-sidebar-drop-preview.test.ts",
+ "src/renderer/src/components/skills/SkillInstallWorkspaceCombobox.test.tsx",
+ "src/renderer/src/components/skills/SkillShareDialog.test.tsx",
+ "src/renderer/src/components/status-bar/PortsStatusSegment.render-stability.test.tsx",
+ "src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx",
+ "src/renderer/src/components/status-bar/UpdateStatusSegment.test.tsx",
+ "src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts",
+ "src/renderer/src/components/status-bar/resource-session-kill-confirmation.test.ts",
+ "src/renderer/src/components/status-bar/resource-session-navigation.test.ts",
+ "src/renderer/src/components/status-bar/usage-roster-formatting.test.ts",
+ "src/renderer/src/components/status-bar/workspace-space-manager-source-boundary.test.ts",
+ "src/renderer/src/components/tab-bar/QuickLaunchButton.test.ts",
+ "src/renderer/src/components/tab-bar/TabBar.worktree-write-gate.windows.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBarCreateEntry.tab-results.test.tsx",
+ "src/renderer/src/components/tab-bar/windows-shell-menu-visibility.test.ts",
+ "src/renderer/src/components/tab-group/RetainedPaneHost.test.tsx",
+ "src/renderer/src/components/tab-group/tab-drag-pointer.test.ts",
+ "src/renderer/src/components/task-page-github-issue-creation.test.ts",
+ "src/renderer/src/components/task-page-initial-selection-scaling.test.tsx",
+ "src/renderer/src/components/task-page-jira-load-state.test.ts",
+ "src/renderer/src/components/task-page-linear-issue-empty-state.test.ts",
+ "src/renderer/src/components/task-page-linear-team-selection.test.ts",
+ "src/renderer/src/components/task-page-localized-options.test.ts",
+ "src/renderer/src/components/task-page-mutation-page-allocation.test.ts",
+ "src/renderer/src/components/task-source-provider-availability.test.ts",
+ "src/renderer/src/components/terminal-pane/RunningTerminalCloseDialog.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-done-quiet-window.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-stamped-turn-boundary.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-hook-terminal-lifecycle.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-process-inspection-round.test.ts",
+ "src/renderer/src/components/terminal-pane/git-bash-console-capacity.test.ts",
+ "src/renderer/src/components/terminal-pane/issue-21762-tracking-mode-middle-click-double-paste.repro.test.ts",
+ "src/renderer/src/components/terminal-pane/layout-serialization.test.ts",
+ "src/renderer/src/components/terminal-pane/osc52-clipboard.test.ts",
+ "src/renderer/src/components/terminal-pane/pending-split-close.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-deliberate-sleep-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-direct-ssh-reattach-retry.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-foreground-write-path.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-spawn-left-pane-unbound.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-visibility-resume-size.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/pane-pty-layout-binding.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-side-effect-pending-census.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-size-reconcile.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-handler-suspension.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-desktop-viewport-claim.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-hidden-output-restore-unavailable-banner.repro.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-query-reply-immediate.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-end-verdict.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-absence-evidence.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-pane-handle-resolution.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-sticky-replacement-policy.test.ts",
+ "src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-capability-replies.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-captured-input-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-command-lifecycle.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ctrl-arrow-conpty.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-cancelled-preedit-visibility.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-composition-deduplication.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-trailing-preedit-occlusion.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-keyboard-event-handlers-focus.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-layout-duplicate-pty-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-click-behavior.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-osc-url-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-pty-mouse-suppression.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-option-kitty-release.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-host-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-watcher-registry.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-multiline-policy.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-process-exit-restart.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-shortcut-select-all.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-startup-timing-scheduler.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-url-link-hit-testing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-visibility-resume.test.ts",
+ "src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/use-terminal-park-mount-intent.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/useTerminalFontZoom.test.ts",
+ "src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts",
+ "src/renderer/src/components/terminal-search-long-wrapped-line.test.ts",
+ "src/renderer/src/components/terminal/background-terminal-worktree-mount.test.ts",
+ "src/renderer/src/components/terminal/initial-terminal-wiring.test.ts",
+ "src/renderer/src/components/terminal/tab-type-cycle.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts",
+ "src/renderer/src/components/terminal/use-terminal-provider-snapshot-capability.test.tsx",
+ "src/renderer/src/components/use-terminal-window-lifecycle.lazy-ref.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-facet-rows.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal-snapshot-batch.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-filter.test.ts",
+ "src/renderer/src/hooks/automations-changed-event-attribution.test.ts",
+ "src/renderer/src/hooks/composer-state/attachment-drop-failure.test.tsx",
+ "src/renderer/src/hooks/direct-ssh-runtime-wake-isolation.test.tsx",
+ "src/renderer/src/hooks/ipc-events/normalize-agent-status-event.test.ts",
+ "src/renderer/src/hooks/ipc-events/terminal-ui-routing-ipc-bridge-split.test.ts",
+ "src/renderer/src/hooks/mobile-terminal-reveal-tab-adoption.test.ts",
+ "src/renderer/src/hooks/modal-return-focus-action.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-fresh-client-tab-seeding.test.ts",
+ "src/renderer/src/hooks/use-palette-search-evaluation-context.test.ts",
+ "src/renderer/src/hooks/useActiveProjectSkillRuntime.test.tsx",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.focus-group.test.ts",
+ "src/renderer/src/hooks/useComposerState-decisions.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-hook-titles.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-replay.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-close-routing-browser-pages.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-new-workspace-shortcut.test.ts",
+ "src/renderer/src/hooks/usePrimarySelectionPaste.test.tsx",
+ "src/renderer/src/i18n/locale-english-regression.test.ts",
+ "src/renderer/src/i18n/pseudo-localization.test.ts",
+ "src/renderer/src/lazy-modal-mount-state.test.ts",
+ "src/renderer/src/lib/activate-ai-vault-structured-session-reveal.test.ts",
+ "src/renderer/src/lib/agent-launch-caller-routing.test.ts",
+ "src/renderer/src/lib/agent-paste-draft-readiness-budget.test.ts",
+ "src/renderer/src/lib/agent-picker-search.test.ts",
+ "src/renderer/src/lib/agent-send-title-status.test.ts",
+ "src/renderer/src/lib/agent-skill-cli-prerequisite.test.ts",
+ "src/renderer/src/lib/agent-status-worktree-attribution.test.ts",
+ "src/renderer/src/lib/agent-tab-shortcuts.test.ts",
+ "src/renderer/src/lib/app-menu-paste.test.ts",
+ "src/renderer/src/lib/automation-terminal-ownership.test.ts",
+ "src/renderer/src/lib/browser-history-match.performance.test.ts",
+ "src/renderer/src/lib/browser-history-match.test.ts",
+ "src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts",
+ "src/renderer/src/lib/codex-pane-restart-eligibility.test.ts",
+ "src/renderer/src/lib/document-theme.test.ts",
+ "src/renderer/src/lib/editor-font-zoom.test.ts",
+ "src/renderer/src/lib/find-query-bounds.test.ts",
+ "src/renderer/src/lib/focus-terminal-tab-surface.test.ts",
+ "src/renderer/src/lib/i18n-jsx-spacing-guard.test.ts",
+ "src/renderer/src/lib/jira-source-host.test.ts",
+ "src/renderer/src/lib/keyboard-layout/detect-option-as-alt.test.ts",
+ "src/renderer/src/lib/keyboard-layout/option-key-location-state.test.ts",
+ "src/renderer/src/lib/launch-work-item-direct-messages.test.ts",
+ "src/renderer/src/lib/launch-worktree-background-terminals.test.ts",
+ "src/renderer/src/lib/lazy-chunk-recovery-reload.test.ts",
+ "src/renderer/src/lib/linear-issue-workspace-open.test.ts",
+ "src/renderer/src/lib/linear-linked-work-item.test.ts",
+ "src/renderer/src/lib/local-preflight-context-cache.test.ts",
+ "src/renderer/src/lib/local-preflight-context.test.ts",
+ "src/renderer/src/lib/monaco-delayer-cancellation-guard.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-jsonl.test.ts",
+ "src/renderer/src/lib/palette-match/palette-phrase-placement.test.ts",
+ "src/renderer/src/lib/palette-repo-resolution.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-dom-creation.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-manager-registry.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-pointer-focus.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-mouse-wheel.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-backlog-cap.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-tree-equalization-scaling.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-foreground-repair-convergence.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset-on-write.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-scroll-intent-input-resync.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-structural-replay-coordinator.test.ts",
+ "src/renderer/src/lib/pane-manager/xterm-instance-disposed.test.ts",
+ "src/renderer/src/lib/provisioned-root-create-options.test.ts",
+ "src/renderer/src/lib/react-renderer-root.test.ts",
+ "src/renderer/src/lib/resolved-worktree-execution-host.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts",
+ "src/renderer/src/lib/runtime-session-mirror-unverifiable-host.test.ts",
+ "src/renderer/src/lib/session-write-subscriber-deferred-persist.test.ts",
+ "src/renderer/src/lib/smart-github-submit.test.ts",
+ "src/renderer/src/lib/source-control-launch-agent-selection.test.ts",
+ "src/renderer/src/lib/terminal-links.test.ts",
+ "src/renderer/src/lib/terminal-quick-command-search.test.ts",
+ "src/renderer/src/lib/terminal-tab-for-pty-id.test.ts",
+ "src/renderer/src/lib/titlebar-worktree-history-controls.test.ts",
+ "src/renderer/src/lib/ui-zoom.test.ts",
+ "src/renderer/src/lib/use-tab-agent-remote-pty-selector.test.ts",
+ "src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts",
+ "src/renderer/src/lib/window-label-formatter.test.ts",
+ "src/renderer/src/lib/work-item-lookup-text.test.ts",
+ "src/renderer/src/lib/workspace-create-error-format.test.ts",
+ "src/renderer/src/lib/workspace-file-drag.test.ts",
+ "src/renderer/src/lib/workspace-session-host-persistence.test.ts",
+ "src/renderer/src/lib/workspace-session-patch.test.ts",
+ "src/renderer/src/lib/workspace-session-staged-browser-tabs.test.ts",
+ "src/renderer/src/lib/worktree-activation-default-tabs.test.ts",
+ "src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts",
+ "src/renderer/src/lib/worktree-runtime-owner-index.detected.test.ts",
+ "src/renderer/src/lib/worktree-status.test.ts",
+ "src/renderer/src/lib/worktree-visit-recency.test.ts",
+ "src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-hydration-drain.test.ts",
+ "src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts",
+ "src/renderer/src/runtime/remote-runtime-session-tabs-inflight.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-snapshot-kitty-flags.test.ts",
+ "src/renderer/src/runtime/remote-server-parity.test.ts",
+ "src/renderer/src/runtime/restored-client-hosted-browser-host-restart-attach.test.ts",
+ "src/renderer/src/runtime/runtime-file-client-search-listing.test.ts",
+ "src/renderer/src/runtime/runtime-file-search-bounds.test.ts",
+ "src/renderer/src/runtime/runtime-rpc-result.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-client.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-terminal-registration-ownership.test.ts",
+ "src/renderer/src/runtime/web-runtime-browser-materialization.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-staging.test.ts",
+ "src/renderer/src/runtime/web-runtime-session.test.ts",
+ "src/renderer/src/runtime/web-runtime-terminal-identity.test.ts",
+ "src/renderer/src/runtime/web-session-browser-placement.test.ts",
+ "src/renderer/src/runtime/web-session-intent-owner.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-client-owned-placement.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-html-preview-focus.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-unverifiable-host.test.tsx",
+ "src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx",
+ "src/renderer/src/runtime/web-session-tabs-sync.test.ts",
+ "src/renderer/src/ssh/ssh-connect-ui-timeout.test.ts",
+ "src/renderer/src/store/slices/agent-status-freshness-cache.test.ts",
+ "src/renderer/src/store/slices/agent-status-observation-neutrality.test.ts",
+ "src/renderer/src/store/slices/agent-status-quit-capture-resumable-agents.test.ts",
+ "src/renderer/src/store/slices/agent-status-session-boundary-done.test.ts",
+ "src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts",
+ "src/renderer/src/store/slices/editor-markdown-link-activation.test.ts",
+ "src/renderer/src/store/slices/editor-right-sidebar-state.test.ts",
+ "src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-index.test.ts",
+ "src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts",
+ "src/renderer/src/store/slices/github-checks-cache.test.ts",
+ "src/renderer/src/store/slices/github-project-row-owner.test.ts",
+ "src/renderer/src/store/slices/github-worktree-refresh-if-stale.test.ts",
+ "src/renderer/src/store/slices/linear-scoped-collection-cache.test.ts",
+ "src/renderer/src/store/slices/new-issue-draft.test.ts",
+ "src/renderer/src/store/slices/new-markdown.test.ts",
+ "src/renderer/src/store/slices/persisted-ui-write-baseline.test.ts",
+ "src/renderer/src/store/slices/preflight.test.ts",
+ "src/renderer/src/store/slices/repos-add-races.test.ts",
+ "src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts",
+ "src/renderer/src/store/slices/repos-all-hosts.test.ts",
+ "src/renderer/src/store/slices/repos-update-serialization.test.ts",
+ "src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts",
+ "src/renderer/src/store/slices/ssh.test.ts",
+ "src/renderer/src/store/slices/store-session-workspace-hydration.test.ts",
+ "src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts",
+ "src/renderer/src/store/slices/terminals-hydration.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-enrichment-performance.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-wrong-host-removal-guard.test.ts",
+ "src/renderer/src/store/slices/worktree-meta-update-application.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-remote-lineage.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-removal-purge.test.ts",
+ "src/renderer/src/store/slices/worktrees-pending-creation-state.test.ts",
+ "src/renderer/src/store/slices/worktrees-runtime-connection-generation-fence.test.ts",
+ "src/renderer/src/store/slices/worktrees-workspace-selection-state.test.ts",
+ "src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts",
+ "src/renderer/src/store/slices/worktrees/teardown/host-qualified-removal-refusal.test.ts",
+ "src/renderer/src/store/terminals/restored-relay-session-identity.test.ts",
+ "src/renderer/src/store/terminals/terminal-shutdown-guards-identity.test.ts",
+ "src/renderer/src/store/terminals/terminal-shutdown-map-identity.test.ts",
+ "src/shared/absolute-dir-override.test.ts",
+ "src/shared/agent-feature-install-commands.test.ts",
+ "src/shared/agent-hook-listener-antigravity.test.ts",
+ "src/shared/agent-hook-listener-pi-compatible.test.ts",
+ "src/shared/agent-hook-listener-relay-dependency.test.ts",
+ "src/shared/agent-hook-listener/providers/muse-events.test.ts",
+ "src/shared/agent-hook-listener/transcript-reader.test.ts",
+ "src/shared/agent-hook-spool-read.test.ts",
+ "src/shared/agent-process-recognition.test.ts",
+ "src/shared/agent-resume-argv-drop.test.ts",
+ "src/shared/agent-session-journal-schemas.test.ts",
+ "src/shared/agent-session-option-catalog-grok.test.ts",
+ "src/shared/agent-session-turn-record.test.ts",
+ "src/shared/agent-startup-plan-inputs.test.ts",
+ "src/shared/agent-status-legacy-ingress-ratchet.test.ts",
+ "src/shared/agent-status-osc-scan-budget.test.ts",
+ "src/shared/agent-status-osc-split-frame-scan-budget.test.ts",
+ "src/shared/agent-status-store.test.ts",
+ "src/shared/agent-title-evidence.test.ts",
+ "src/shared/ai-vault-scan-error-message.test.ts",
+ "src/shared/automation-cron-dialect.test.ts",
+ "src/shared/automation-list-scope.test.ts",
+ "src/shared/automation-owner-key.test.ts",
+ "src/shared/check-job-log-tail-slice.test.ts",
+ "src/shared/child-process/retryable-process-exit-proof.test.ts",
+ "src/shared/child-process/run-process.test.ts",
+ "src/shared/child-process/windows-cmd-shim-resolution.win32.test.ts",
+ "src/shared/cli-argument-boundary.test.ts",
+ "src/shared/clipboard-image.test.ts",
+ "src/shared/codex-reset-credit-attempt-ledger.test.ts",
+ "src/shared/combined-diff-file-tree-width.test.ts",
+ "src/shared/command-token-scanner.test.ts",
+ "src/shared/commit-message-plan.test.ts",
+ "src/shared/emoji-shortcode-catalog.lazy.test.ts",
+ "src/shared/ephemeral-vm-recipe-repo-url.test.ts",
+ "src/shared/git-branch-cleanup.test.ts",
+ "src/shared/git-branch-line-total-soft-deadline.test.ts",
+ "src/shared/git-capability-cache.test.ts",
+ "src/shared/git-push-target-validation.test.ts",
+ "src/shared/git-status-branch-line-total-cache.test.ts",
+ "src/shared/github/account-binding.test.ts",
+ "src/shared/github/pull-request-merge-methods.test.ts",
+ "src/shared/grok-model-list-probe.test.ts",
+ "src/shared/hosted-review-creation-providers.test.ts",
+ "src/shared/hosted-review-refs.test.ts",
+ "src/shared/keybindings-conflicts.test.ts",
+ "src/shared/local-account-runtime.test.ts",
+ "src/shared/local-build-compatibility.test.ts",
+ "src/shared/mobile-file-directory-limit.test.ts",
+ "src/shared/mobile-pairing-connection-mode.test.ts",
+ "src/shared/mobile-pairing-custom-address.test.ts",
+ "src/shared/mobile-relay-phone-protocol.test.ts",
+ "src/shared/modifier-double-tap-detector.test.ts",
+ "src/shared/native-chat-activity-tail-line.test.ts",
+ "src/shared/native-chat-ask-fifo.test.ts",
+ "src/shared/native-chat-session-option-defaults.test.ts",
+ "src/shared/native-chat-tool-run-outcome.test.ts",
+ "src/shared/nested-worker-depth.test.ts",
+ "src/shared/omp-source-control-discovery.test.ts",
+ "src/shared/opencode-permission-status.test.ts",
+ "src/shared/pairing-address-auto-selection.test.ts",
+ "src/shared/pane-agent-identity-surface-inventory.test.ts",
+ "src/shared/pi-agent-kind.test.ts",
+ "src/shared/plugins/plugin-panel-shell.test.ts",
+ "src/shared/pr-comment-groups.test.ts",
+ "src/shared/process-output-field-scanner.test.ts",
+ "src/shared/process-table-snapshot.test.ts",
+ "src/shared/project-catalog-row-normalization.test.ts",
+ "src/shared/project-identity-succession.test.ts",
+ "src/shared/pty-delivery-diagnostics.test.ts",
+ "src/shared/pull-request-generation.test.ts",
+ "src/shared/raster-image-base64-preview.test.ts",
+ "src/shared/remote-runtime-shared-control-connection.test.ts",
+ "src/shared/remote-runtime-subscription-connect-bound.test.ts",
+ "src/shared/remote-runtime-tailscale-hint.test.ts",
+ "src/shared/repo-badge-color.test.ts",
+ "src/shared/repo-ref-maintenance.test.ts",
+ "src/shared/repro-8478-opencode-native-title-icon.test.ts",
+ "src/shared/resolved-worktree-lineage.test.ts",
+ "src/shared/runtime-rpc-call-queue.test.ts",
+ "src/shared/secure-file-coarse-ctime.test.ts",
+ "src/shared/sha256.test.ts",
+ "src/shared/source-control-ai-action-variables.test.ts",
+ "src/shared/source-scan/source-tree-scan.test.ts",
+ "src/shared/stable-pane-id.test.ts",
+ "src/shared/status-bar-usage-mode.test.ts",
+ "src/shared/structured-agent-session-live-turn.test.ts",
+ "src/shared/structured-agent-session-mutation.test.ts",
+ "src/shared/tab-title-resolution.test.ts",
+ "src/shared/terminal-color-scheme-protocol.test.ts",
+ "src/shared/terminal-kitty-keyboard-mode-tracker.test.ts",
+ "src/shared/terminal-osc133-carry-retention.test.ts",
+ "src/shared/terminal-partial-escape-tail-ground-scan.test.ts",
+ "src/shared/terminal-quick-commands.test.ts",
+ "src/shared/terminal-scrollback-policy.test.ts",
+ "src/shared/terminal-zero-dimensions-diagnostic.test.ts",
+ "src/shared/tui-agent-config.test.ts",
+ "src/shared/ui-locale.test.ts",
+ "src/shared/updated-at-order.test.ts",
+ "src/shared/workspace-linked-item-equality.test.ts",
+ "src/shared/workspace-session-schema.sleeping-agent.test.ts",
+ "src/shared/workspace-session-schema.test.ts",
+ "src/shared/worktree-execution-host-resolution.test.ts",
+ "src/shared/worktree/id.test.ts",
+ "src/shared/worktree/ownership-worktree-base-path.test.ts",
+ "tests/e2e/omp-retired-host-renderer.unit.test.ts",
+ "tests/e2e/remote-agent-completion-authority.unit.test.ts",
+ "tests/tools/omp-close-lifecycle.test.mjs",
+ "tests/tools/relay-bench/phone-e2ee-desktop-parity.test.mjs"
+ ],
+ "durationMs": 851040
+ },
+ {
+ "files": [
+ "config/scripts/agent-status-hot-path-benchmark.test.ts",
+ "config/scripts/build-mobile-web-app-bundle.test.mjs",
+ "config/scripts/check-root-directory-entries.test.mjs",
+ "config/scripts/check-terminal-perf-report-budgets.test.mjs",
+ "config/scripts/codex-index-heal-contract-workflow.test.mjs",
+ "config/scripts/dev-cli-terminal-wrapper.test.mjs",
+ "config/scripts/electron-builder-config.test.mjs",
+ "config/scripts/electron-vite-output-contract.test.ts",
+ "config/scripts/ephemeral-vm-runtime-store-cross-version.test.ts",
+ "config/scripts/generate-terminal-perf-html-report.test.mjs",
+ "config/scripts/git-binary-compatibility-workflow.test.mjs",
+ "config/scripts/hang-watchdog-process-metrics.test.mjs",
+ "config/scripts/latest-stable-release.test.mjs",
+ "config/scripts/live-remote-freeze-rpc.test.mjs",
+ "config/scripts/locale-count-fragment-separator.test.mjs",
+ "config/scripts/locale-translation-policy.es-pr.test.mjs",
+ "config/scripts/locale-translation-policy.test.mjs",
+ "config/scripts/localization-package-contract.test.mjs",
+ "config/scripts/mobile-set-native-props-web-siblings.test.mjs",
+ "config/scripts/mobile-web-app-external-navigation-grant.test.mjs",
+ "config/scripts/mobile-web-app-page-closure-families.test.mjs",
+ "config/scripts/mobile-web-app-session-external-links.test.mjs",
+ "config/scripts/mobile-web-app-source-control-keyboard.test.mjs",
+ "config/scripts/mobile-web-app-web-overrides.test.mjs",
+ "config/scripts/node-old-space-limit.test.mjs",
+ "config/scripts/orchestration-skill-guidance.test.mjs",
+ "config/scripts/oxc-cli-invocation.test.mjs",
+ "config/scripts/rebuild-native-deps-node-pty.test.mjs",
+ "config/scripts/reclaim-dev-electron-bundles.test.ts",
+ "config/scripts/verify-packaged-mobile-web-bundle.test.mjs",
+ "config/scripts/windows-process-tree-patch-contract.test.mjs",
+ "src/cli/command-suggestion-budget.test.ts",
+ "src/cli/handlers/account.test.ts",
+ "src/cli/handlers/agent-hooks.test.ts",
+ "src/cli/handlers/automation-destination-fencing.test.ts",
+ "src/cli/handlers/automation-owner-fencing.test.ts",
+ "src/cli/handlers/orchestration-lifecycle-json-rejection.test.ts",
+ "src/cli/handlers/orchestration-module-boundaries.test.ts",
+ "src/cli/handlers/search.test.ts",
+ "src/cli/index-omitted-host-scope-selectors.test.ts",
+ "src/cli/index-project-setup.test.ts",
+ "src/cli/index-terminal-list-host-scope.test.ts",
+ "src/cli/index-worktree-selector-resolution.test.ts",
+ "src/cli/index-worktree-set.test.ts",
+ "src/cli/quote-stripped-json-flag.test.ts",
+ "src/cli/runtime/serve-signal-exit-diagnostic.test.ts",
+ "src/cli/runtime/status.test.ts",
+ "src/cli/specs/computer.test.ts",
+ "src/main/active-view-persistence-boundary.test.ts",
+ "src/main/agent-awake-service-platform-assertions.test.ts",
+ "src/main/agent-hooks/branch-rename-failure-output.test.ts",
+ "src/main/agent-hooks/managed-hook-runtime.test.ts",
+ "src/main/agent-hooks/managed-toml-ownership.test.ts",
+ "src/main/agent-hooks/opencode-message-part-flood-bench.test.ts",
+ "src/main/agent-hooks/remote-hook-service-installers.test.ts",
+ "src/main/agent-hooks/server-claude-permission-visibility.test.ts",
+ "src/main/agent-hooks/server-cursor-normalization.test.ts",
+ "src/main/agent-hooks/server-grok-background-status.test.ts",
+ "src/main/agent-hooks/server-grok-discovery.test.ts",
+ "src/main/agent-hooks/server-interrupt-inference-resurrection.test.ts",
+ "src/main/agent-hooks/server-start-failure-lifecycle.test.ts",
+ "src/main/agent-hooks/windows-hook-payload-delivery.test.ts",
+ "src/main/agent-hooks/windows-powershell-hook-launcher.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-manager.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-reattach.test.ts",
+ "src/main/ai-vault-search/session-search-file-id.test.ts",
+ "src/main/ai-vault-search/session-search-file-write.test.ts",
+ "src/main/ai-vault-search/session-search-message-rows.test.ts",
+ "src/main/ai-vault-search/session-search-native-chat-indexing.test.ts",
+ "src/main/ai-vault-search/session-search-query-planner.test.ts",
+ "src/main/ai-vault-search/session-search-read-decision.test.ts",
+ "src/main/ai-vault-search/session-search-row-filter.test.ts",
+ "src/main/ai-vault-search/session-search-service-registry.test.ts",
+ "src/main/ai-vault-search/session-search-sidebar-parity.test.ts",
+ "src/main/ai-vault-search/session-search-typo-scope.test.ts",
+ "src/main/ai-vault/remote-session-scanner-muse.test.ts",
+ "src/main/ai-vault/session-delete-target.test.ts",
+ "src/main/ai-vault/session-first-user-prompt-read.test.ts",
+ "src/main/ai-vault/session-list-result-validation.test.ts",
+ "src/main/ai-vault/session-scan-cutoff.test.ts",
+ "src/main/ai-vault/session-scanner-claude-subagents.test.ts",
+ "src/main/ai-vault/session-scanner-claude-unicode-scope.test.ts",
+ "src/main/ai-vault/session-scanner-codex-fast-path.test.ts",
+ "src/main/ai-vault/session-scanner-muse.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-parser.test.ts",
+ "src/main/ai-vault/session-scanner-recoverable-empty.test.ts",
+ "src/main/ai-vault/session-scanner-service-entry.test.ts",
+ "src/main/ai-vault/session-scanner-service-root-request.test.ts",
+ "src/main/ai-vault/ssh-session-list.test.ts",
+ "src/main/appkit-scene-mutation.test.ts",
+ "src/main/artifacts/artifact-cloud-config.test.ts",
+ "src/main/artifacts/artifact-share-record-store.test.ts",
+ "src/main/automations/automation-owner-fencing.test.ts",
+ "src/main/automations/automation-zero-grace-tick-latency.test.ts",
+ "src/main/automations/hermes-cron-output.test.ts",
+ "src/main/azure-devops/repository-ref.test.ts",
+ "src/main/bitbucket/client.test.ts",
+ "src/main/bitbucket/credential-connection.test.ts",
+ "src/main/browser/agent-browser-bridge-mouse-input.test.ts",
+ "src/main/browser/browser-clicked-link-routing.test.ts",
+ "src/main/browser/browser-client-page-unavailability.test.ts",
+ "src/main/browser/browser-cookie-import-scope.test.ts",
+ "src/main/browser/browser-cookie-import-validated-partition.electron.test.ts",
+ "src/main/browser/browser-cookie-import.comet.test.ts",
+ "src/main/browser/browser-cookie-public-suffix-scope.test.ts",
+ "src/main/browser/browser-download-destination.test.ts",
+ "src/main/browser/browser-execution-host-storage-identity.test.ts",
+ "src/main/browser/browser-google-auth-ua.test.ts",
+ "src/main/browser/browser-manager-annotation-bridge.test.ts",
+ "src/main/browser/browser-route-session-registry.test.ts",
+ "src/main/browser/browser-screencast-dialog-settlement.test.ts",
+ "src/main/browser/browser-session-ua-wire-identity.electron.test.ts",
+ "src/main/browser/cdp-bridge-state.test.ts",
+ "src/main/browser/cdp-print-to-pdf.test.ts",
+ "src/main/browser/doc-preview-file-reader.test.ts",
+ "src/main/browser/doc-preview-protocol.test.ts",
+ "src/main/browser/electron-probe-display-launch.test.ts",
+ "src/main/browser/local-ssh-browser-partition-identity.test.ts",
+ "src/main/browser/paired-runtime-browser-host-reconciliation-negotiation.test.ts",
+ "src/main/browser/snapshot-engine-iframe-sessions.test.ts",
+ "src/main/claude-accounts/live-pty-gate.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-snapshot-validation.test.ts",
+ "src/main/claude-usage/claude-model-pricing.test.ts",
+ "src/main/claude/claude-agent-sdk-import-boundary.test.ts",
+ "src/main/claude/claude-background-task-resume.test.ts",
+ "src/main/claude/claude-background-task-terminal-frames.test.ts",
+ "src/main/claude/claude-command-lifecycle-frames.test.ts",
+ "src/main/claude/claude-descendant-escalation-boundary.test.ts",
+ "src/main/claude/claude-stream-json-connection-close.test.ts",
+ "src/main/claude/claude-streamed-text-checkpoints.test.ts",
+ "src/main/claude/claude-structured-history-window.test.ts",
+ "src/main/claude/claude-structured-location-support.test.ts",
+ "src/main/claude/claude-structured-real-cli.test.ts",
+ "src/main/claude/claude-transcript-rewind-proof.test.ts",
+ "src/main/cli/cli-command-privileged-transaction.test.ts",
+ "src/main/cli/legacy-appimage-cli-wrapper.test.ts",
+ "src/main/cli/wsl-cli-installer.test.ts",
+ "src/main/codex-accounts/runtime-home-retained-auth-provenance.test.ts",
+ "src/main/codex-accounts/service-account-selection-and-removal.test.ts",
+ "src/main/codex-accounts/service-reset-credit-target-routing.test.ts",
+ "src/main/codex-usage/scanner-attribution-memo.test.ts",
+ "src/main/codex-usage/store-persistence.test.ts",
+ "src/main/codex/codex-app-server-connection.test.ts",
+ "src/main/codex/codex-background-command-tracker.test.ts",
+ "src/main/codex/codex-pane-launch-account.test.ts",
+ "src/main/codex/codex-requested-close-turn-timing.test.ts",
+ "src/main/codex/codex-server-request-disposition.test.ts",
+ "src/main/codex/codex-structured-fast-mode.test.ts",
+ "src/main/codex/codex-structured-journal-goal-admission.test.ts",
+ "src/main/codex/codex-structured-journal-goal-rows.test.ts",
+ "src/main/codex/codex-structured-location-support.test.ts",
+ "src/main/codex/codex-structured-prompt-items.test.ts",
+ "src/main/codex/codex-subagent-roster.test.ts",
+ "src/main/codex/codex-trust-grant-host.test.ts",
+ "src/main/codex/codex-user-hook-trust-rebase-client.test.ts",
+ "src/main/codex/codex-user-hook-trust-rebase.test.ts",
+ "src/main/codex/config-settings-baseline-upgrade.test.ts",
+ "src/main/codex/config-toml-trust-hook-upsert.test.ts",
+ "src/main/codex/hook-service-trust-grant.test.ts",
+ "src/main/codex/sta-4737-unreadable-is-not-absent.test.ts",
+ "src/main/computer/desktop-script-runtime-host.test.ts",
+ "src/main/computer/desktop-script-runtime-host.win32.test.ts",
+ "src/main/computer/macos-native-provider-paste-validation.test.ts",
+ "src/main/crash-reporting/crash-breadcrumb-store-orphan-cleanup.test.ts",
+ "src/main/crash-reporting/gpu-crash-fallback-field-sessions.test.ts",
+ "src/main/crash-reporting/gpu-fallback-engagement.test.ts",
+ "src/main/crash-reporting/gpu-fallback-recovered-launch.test.ts",
+ "src/main/daemon/bash-prompt-command-composition.test.ts",
+ "src/main/daemon/daemon-bundle-staleness.test.ts",
+ "src/main/daemon/daemon-cgroup-scope.test.ts",
+ "src/main/daemon/daemon-endpoint-windows.test.ts",
+ "src/main/daemon/daemon-foreground-confirmation-protocol.test.ts",
+ "src/main/daemon/daemon-idle-shutdown.test.ts",
+ "src/main/daemon/daemon-init-endpoint-adoption.test.ts",
+ "src/main/daemon/daemon-init-provider-installation.test.ts",
+ "src/main/daemon/daemon-launched-child-spawn.test.ts",
+ "src/main/daemon/daemon-pty-adapter-daemon-recovery.test.ts",
+ "src/main/daemon/daemon-pty-router-history-handoff.test.ts",
+ "src/main/daemon/hangul-cell-width-agreement.test.ts",
+ "src/main/daemon/headless-emulator-snapshot-cost.bench.test.ts",
+ "src/main/daemon/headless-osc-link-ranges.test.ts",
+ "src/main/daemon/ndjson.test.ts",
+ "src/main/daemon/terminal-history-permissions.test.ts",
+ "src/main/daemon/terminal-host-process-inspection-cheap-tier.test.ts",
+ "src/main/daemon/terminal-mouse-tail-retention.test.ts",
+ "src/main/daemon/terminal-session-teardown.test.ts",
+ "src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts",
+ "src/main/destination-serialized-local-rename.test.ts",
+ "src/main/emulator/android/avd-manager.test.ts",
+ "src/main/emulator/android/uiautomator-tree.test.ts",
+ "src/main/emulator/emulator-availability.test.ts",
+ "src/main/emulator/emulator-gesture-sender.test.ts",
+ "src/main/emulator/emulator-start-lease-registry.test.ts",
+ "src/main/emulator/mjpeg-frame-parser.test.ts",
+ "src/main/emulator/serve-sim-execution.test.ts",
+ "src/main/ephemeral-vm-runtime-service.test.ts",
+ "src/main/ephemeral-vm-runtime-ssh-cleanup.test.ts",
+ "src/main/git/add-sparse-worktree.test.ts",
+ "src/main/git/canonical-repo-key.test.ts",
+ "src/main/git/coalesced-probe.test.ts",
+ "src/main/git/command-runner/git-admission-storm-measurement.test.ts",
+ "src/main/git/fork-remote-stale-branch-refspec.test.ts",
+ "src/main/git/git-upstream-status-read-owner.test.ts",
+ "src/main/git/huge-folder-ignore.test.ts",
+ "src/main/git/remote-ref-probe-cache.test.ts",
+ "src/main/git/repo-branch-conflict-batched-probe.test.ts",
+ "src/main/git/repo-remote-drift-real.test.ts",
+ "src/main/git/runner-gh-account-binding.test.ts",
+ "src/main/git/runner-wsl-direct-read.test.ts",
+ "src/main/git/runner-wsl-read-routing.test.ts",
+ "src/main/git/runner.test.ts",
+ "src/main/git/source-control/bulk-pathspec-command-line-budget.test.ts",
+ "src/main/git/status-discard-and-bulk-staging.test.ts",
+ "src/main/git/status-line-stats-host-paths.test.ts",
+ "src/main/git/worktree-diff-stamp-host-paths.test.ts",
+ "src/main/git/worktree-removal-large-tree.bench.test.ts",
+ "src/main/git/worktree-sparse-state-host-paths.test.ts",
+ "src/main/gitea/client.test.ts",
+ "src/main/gitea/repository-ref.test.ts",
+ "src/main/github/gh-utils-concurrency.test.ts",
+ "src/main/github/work-item-search-fallback-environment.test.ts",
+ "src/main/gitlab/client-mr-branch-lookup.test.ts",
+ "src/main/gitlab/mappers.test.ts",
+ "src/main/gitlab/merge-request-creation.test.ts",
+ "src/main/gitlab/project-ref-parser.test.ts",
+ "src/main/grok/hook-service.test.ts",
+ "src/main/grok/windows-hook-launcher-chain.test.ts",
+ "src/main/ipc/agent-pane-authority-ownership.test.ts",
+ "src/main/ipc/ai-vault-search-merged-cursor.test.ts",
+ "src/main/ipc/automations-external-scope.test.ts",
+ "src/main/ipc/cli-appimage-stale-registration.test.ts",
+ "src/main/ipc/codex-config-sync.test.ts",
+ "src/main/ipc/ephemeral-vm-provisioned-root-ref.test.ts",
+ "src/main/ipc/feedback.test.ts",
+ "src/main/ipc/filesystem-branch-compare-diff.test.ts",
+ "src/main/ipc/filesystem-mutations.test.ts",
+ "src/main/ipc/filesystem-path-containment-remote-enoent.test.ts",
+ "src/main/ipc/filesystem-pull-request-field-generation.test.ts",
+ "src/main/ipc/filesystem-runtime-upload-staging.test.ts",
+ "src/main/ipc/filesystem-watcher-local-events.test.ts",
+ "src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts",
+ "src/main/ipc/github-issue-source-preference.test.ts",
+ "src/main/ipc/github-pr-refresh-routing.test.ts",
+ "src/main/ipc/github-ssh-connection-routing.test.ts",
+ "src/main/ipc/github-star-telemetry.test.ts",
+ "src/main/ipc/notifications-delivery-gating.test.ts",
+ "src/main/ipc/orca-profiles.test.ts",
+ "src/main/ipc/parcel-watcher-child-launch.test.ts",
+ "src/main/ipc/parcel-watcher-child-registry.test.ts",
+ "src/main/ipc/plugin-marketplaces.test.ts",
+ "src/main/ipc/preflight-agent-detection.test.ts",
+ "src/main/ipc/pty-daemon-spawn-wsl-runtime.test.ts",
+ "src/main/ipc/pty-dispatcher-handshake-osc-answers.test.ts",
+ "src/main/ipc/pty-encoding.test.ts",
+ "src/main/ipc/pty-pane-materialization-race.test.ts",
+ "src/main/ipc/pty-restore-record-seeding.test.ts",
+ "src/main/ipc/pty-spawn-runtime-handle-binding.test.ts",
+ "src/main/ipc/pty-spawn-timing.test.ts",
+ "src/main/ipc/pty/ipc/spawn-push-target-materialization-real-git.test.ts",
+ "src/main/ipc/register-core-handlers/register-core-handlers.test.ts",
+ "src/main/ipc/repos-remote-base-ref-queries.test.ts",
+ "src/main/ipc/repos-remote-git-username.test.ts",
+ "src/main/ipc/repos-remote.test.ts",
+ "src/main/ipc/repos/repo-creation-git-availability.test.ts",
+ "src/main/ipc/runtime-environment-request-connections.test.ts",
+ "src/main/ipc/runtime-watcher-pending-assignment.test.ts",
+ "src/main/ipc/runtime.test.ts",
+ "src/main/ipc/skill-ipc-main-window.test.ts",
+ "src/main/ipc/speech.test.ts",
+ "src/main/ipc/ssh-pty-closed-generation-ranges.test.ts",
+ "src/main/ipc/ssh-pty-source-obligation-ledger.test.ts",
+ "src/main/ipc/terminal-render-desync-evidence.test.ts",
+ "src/main/ipc/workspace-create-error-classifier.test.ts",
+ "src/main/ipc/worktree-base-directory-change-collector.test.ts",
+ "src/main/ipc/worktree-base-directory-poller.test.ts",
+ "src/main/ipc/worktree-base-directory-watch-targets.test.ts",
+ "src/main/ipc/worktree-include-copy-budget.test.ts",
+ "src/main/ipc/worktree-logic-wsl.test.ts",
+ "src/main/ipc/worktree-push-target-remote-scan.test.ts",
+ "src/main/ipc/worktrees-local-create-flow.test.ts",
+ "src/main/ipc/worktrees-setup-launch-sparse-checkout.test.ts",
+ "src/main/ipc/worktrees/removal/worktree-archive-hook.test.ts",
+ "src/main/jira/attachment-image-cache-generation.test.ts",
+ "src/main/jira/jira-issue-summary-timeout.test.ts",
+ "src/main/kimi/kimi-hook-config-toml.test.ts",
+ "src/main/linear/client.test.ts",
+ "src/main/linear/issues.test.ts",
+ "src/main/linux-package-update-recovery.test.ts",
+ "src/main/local-builds/local-build-candidate.test.ts",
+ "src/main/local-downloaded-folder-promotion.test.ts",
+ "src/main/local-worktree-path-presence.test.ts",
+ "src/main/macos-tcc-prompt-notice.test.ts",
+ "src/main/main-process-tree-kill-gate.test.ts",
+ "src/main/memory/collector-windows-sweep.test.ts",
+ "src/main/memory/memory-snapshot-buckets.test.ts",
+ "src/main/memory/process-memory-metric.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-handle-ownership.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-restart-reconciliation.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-store-close.test.ts",
+ "src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts",
+ "src/main/native-chat/agent-session-wire/provider-turn-activity-routing.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-command-publication.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-grouped-prompt.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-owner-close.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-hold-resume-race.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-processless-reservation.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-provider-restore.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-read-restore.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-recovery-resolution.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-teardown.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-reveal.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-settled-attach-retry.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-stale-turn-verdict.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-rewind-claude-proof.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-tui-transcript-ownership.test.ts",
+ "src/main/native-chat/transcript-line-decoders.omp.test.ts",
+ "src/main/native-chat/transcript-reader-wsl-stall.test.ts",
+ "src/main/native-chat/transcript-stream-lines.test.ts",
+ "src/main/native-chat/transcript-tail-reader-wsl-gate.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-route.test.ts",
+ "src/main/observability/local-file-sink.test.ts",
+ "src/main/opencode/hook-service.test.ts",
+ "src/main/opencode/opencode-client-sweep.test.ts",
+ "src/main/orca-profiles/profile-cloud-auth-status.test.ts",
+ "src/main/orca-profiles/profile-project-presence.test.ts",
+ "src/main/orcad/orcad-app-paths.test.ts",
+ "src/main/persistence-load-repair-durability.test.ts",
+ "src/main/persistence-loading-store-extraction.test.ts",
+ "src/main/persistence-pty-binding-reconciliation.test.ts",
+ "src/main/persistence-remote-session-startup.test.ts",
+ "src/main/persistence-single-serialize.test.ts",
+ "src/main/persistence-ssh-lease-tombstone-retention.test.ts",
+ "src/main/persistence-terminal-option-key-migration.test.ts",
+ "src/main/persistence-workspace-pinned-automation-fence.test.ts",
+ "src/main/persistence-worktree-card-properties.test.ts",
+ "src/main/persistence/loading-store/pty-binding-span.test.ts",
+ "src/main/persistence/loading-store/store-prune-gate-signals.test.ts",
+ "src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts",
+ "src/main/pi/agent-status-input-redaction.test.ts",
+ "src/main/pi/agent-status-ui-prompt.test.ts",
+ "src/main/plugins/plugin-install-trust.test.ts",
+ "src/main/plugins/plugin-service-reconciliation.test.ts",
+ "src/main/plugins/plugin-worker-output-buffer.test.ts",
+ "src/main/plugins/plugin-worker-output-retention.test.ts",
+ "src/main/ports/ssh-advertised-url-enrichment.test.ts",
+ "src/main/project-groups/nested-repo-discovery.test.ts",
+ "src/main/providers/agent-foreground-process-remote-evidence.test.ts",
+ "src/main/providers/local-pty-provider-shutdown.test.ts",
+ "src/main/providers/local-pty-provider-windows-shell-launch.test.ts",
+ "src/main/providers/local-pty-shell-ready-marker-scan.test.ts",
+ "src/main/providers/local-pty-shell-startup-command.node-pty.test.ts",
+ "src/main/providers/local-pty-utils-windows-fallback.test.ts",
+ "src/main/providers/pty-process-inspection.test.ts",
+ "src/main/providers/ssh-git-dispatch.test.ts",
+ "src/main/providers/ssh-git-provider-exec.test.ts",
+ "src/main/providers/ssh-pty-inspect-observation-identity.test.ts",
+ "src/main/providers/ssh-pty-notification-routing.test.ts",
+ "src/main/providers/ssh-pty-source-delivery-ledger.test.ts",
+ "src/main/providers/terminal-path-existence-batch.integration.test.ts",
+ "src/main/providers/windows-conpty-wide-char-duplication.node-pty.test.ts",
+ "src/main/providers/windows-console-attached-processes.test.ts",
+ "src/main/providers/windows-shell-fallback-chain.test.ts",
+ "src/main/pty/codex-shell-launch-preflight.test.ts",
+ "src/main/pty/legacy-terminal-windows-tombstone.test.ts",
+ "src/main/pwsh.test.ts",
+ "src/main/rate-limits/claude-usage-error-classification.test.ts",
+ "src/main/rate-limits/codex-auth-presence.test.ts",
+ "src/main/rate-limits/codex-fetcher-probe-shutdown.test.ts",
+ "src/main/rate-limits/kimi-fetcher.test.ts",
+ "src/main/rate-limits/service-live-claude-usage.test.ts",
+ "src/main/remote-worktree-history-cleanup.test.ts",
+ "src/main/repo-git-username-enrichment.test.ts",
+ "src/main/ripgrep/bundled-ripgrep-path.test.ts",
+ "src/main/runtime/agent-prompt-submission-runtime.test.ts",
+ "src/main/runtime/agent-session-backup-recovery.test.ts",
+ "src/main/runtime/agent-session-process-identity-probe-windows-batch.test.ts",
+ "src/main/runtime/agent-session-surface-release-transition.test.ts",
+ "src/main/runtime/browser-client-download-transfers.test.ts",
+ "src/main/runtime/browser-host-client-page-creation.test.ts",
+ "src/main/runtime/browser-host-lease-fenced-page-release.test.ts",
+ "src/main/runtime/browser-host-lease-placement-retirement.test.ts",
+ "src/main/runtime/browser-host-page-reconciliation-orchestration.test.ts",
+ "src/main/runtime/browser-screencast-remote-viewer-retention.test.ts",
+ "src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts",
+ "src/main/runtime/client-hosted-browser-row-projection.test.ts",
+ "src/main/runtime/fit-override-integration.test.ts",
+ "src/main/runtime/headless-hydration-ownership.test.ts",
+ "src/main/runtime/mobile-subscribe-integration.test.ts",
+ "src/main/runtime/orca-runtime-exact-worker-provider-session.test.ts",
+ "src/main/runtime/orca-runtime-files-watch-host-scope.test.ts",
+ "src/main/runtime/orca-runtime-git.test.ts",
+ "src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts",
+ "src/main/runtime/orca-runtime-terminal-create-idempotency.test.ts",
+ "src/main/runtime/orca-runtime-worktree-change-invalidation.test.ts",
+ "src/main/runtime/orchestration-mailbox-notification-consistency.test.ts",
+ "src/main/runtime/orchestration-mailbox-pty-write-gate.test.ts",
+ "src/main/runtime/orchestration-mailbox-transport-settlement.test.ts",
+ "src/main/runtime/orchestration/adopted-structured-pointer-delivery.test.ts",
+ "src/main/runtime/orchestration/cli-command.test.ts",
+ "src/main/runtime/orchestration/coordinator-decision-gates.test.ts",
+ "src/main/runtime/orchestration/coordinator-drift-probe-coalescing.test.ts",
+ "src/main/runtime/orchestration/db-empty-dispatch-shortcircuit.benchmark.test.ts",
+ "src/main/runtime/orchestration/db/attempt-outcome-projection.test.ts",
+ "src/main/runtime/orchestration/db/hot-path-statement-compilation.test.ts",
+ "src/main/runtime/orchestration/federation-ack-checkpoints.test.ts",
+ "src/main/runtime/orchestration/lifecycle-caller-edges.test.ts",
+ "src/main/runtime/orchestration/lifecycle-reconciliation.test.ts",
+ "src/main/runtime/orchestration/mailbox-pointer-release-query.test.ts",
+ "src/main/runtime/orchestration/message-batch-atomicity.test.ts",
+ "src/main/runtime/orchestration/orchestration-db-retention-pagination.test.ts",
+ "src/main/runtime/orchestration/preamble.test.ts",
+ "src/main/runtime/orchestration/worker-output-archive.test.ts",
+ "src/main/runtime/paired-close-retirement-proof-publication-order.test.ts",
+ "src/main/runtime/push/push-device-registration-persistence.test.ts",
+ "src/main/runtime/push/push-gateway-session.test.ts",
+ "src/main/runtime/push/push-host-proof-vector.test.ts",
+ "src/main/runtime/recent-pty-output-buffer.test.ts",
+ "src/main/runtime/relay/desktop-relay-service-broker-liveness.test.ts",
+ "src/main/runtime/relay/desktop-relay-service.test.ts",
+ "src/main/runtime/relay/relay-auth-host-close-reason.test.ts",
+ "src/main/runtime/relay/relay-control-close-reason.test.ts",
+ "src/main/runtime/relay/relay-control-timeout-classification.test.ts",
+ "src/main/runtime/relay/relay-region-refresh.test.ts",
+ "src/main/runtime/remote-server-updater.test.ts",
+ "src/main/runtime/rpc/errors.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch.test.ts",
+ "src/main/runtime/rpc/methods/agent-skill-sharing-capability-grant.test.ts",
+ "src/main/runtime/rpc/methods/browser-network-tunnel.test.ts",
+ "src/main/runtime/rpc/methods/client-ui.test.ts",
+ "src/main/runtime/rpc/methods/github-pr-refresh-reason.test.ts",
+ "src/main/runtime/rpc/methods/linear-agent-project-access.test.ts",
+ "src/main/runtime/rpc/methods/native-chat.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-dispatch-error-codes.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-release-incarnation-fallback.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-start-mode-selection.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-worker-start-receipt.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-agent-launch.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-output.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send-dispatch-authority.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send-group.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/context-only-dispatch-retry.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-observation.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-output.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-budgets.test.ts",
+ "src/main/runtime/rpc/methods/paired-caller-host-id.test.ts",
+ "src/main/runtime/rpc/methods/repo.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-move-validation.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-structured-restore.test.ts",
+ "src/main/runtime/rpc/methods/skills.test.ts",
+ "src/main/runtime/rpc/methods/terminal-create-idempotency.test.ts",
+ "src/main/runtime/rpc/methods/terminal/terminal-output-batcher.test.ts",
+ "src/main/runtime/rpc/methods/worktree-github-pr-suppression.test.ts",
+ "src/main/runtime/rpc/methods/worktree.test.ts",
+ "src/main/runtime/rpc/mobile-e2ee-outbound-memory-budget.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-compatibility-dispatcher.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-takeover-current-authority.test.ts",
+ "src/main/runtime/rpc/terminal-lease-stale-handle-survival.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-end-verdict.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-escape-tail.test.ts",
+ "src/main/runtime/rpc/terminal-output-frame-source-ranges.test.ts",
+ "src/main/runtime/rpc/terminal-send.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-mount-replay.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-reconnect-rebind.test.ts",
+ "src/main/runtime/rpc/ws-transport-accept-order.test.ts",
+ "src/main/runtime/runtime-binary-message-router.test.ts",
+ "src/main/runtime/runtime-folder-workspace.test.ts",
+ "src/main/runtime/runtime-local-worktree-terminal-startup.test.ts",
+ "src/main/runtime/runtime-remote-managed-worktree-create.test.ts",
+ "src/main/runtime/runtime-rpc-device-revocation.test.ts",
+ "src/main/runtime/runtime-rpc-pairing-offer.test.ts",
+ "src/main/runtime/runtime-terminal-spawn-push-target-materialization.test.ts",
+ "src/main/runtime/runtime-worktree-ps-summaries.test.ts",
+ "src/main/runtime/structured-claude-auth-policy-wiring.test.ts",
+ "src/main/runtime/terminal-close-observed-exit.test.ts",
+ "src/main/runtime/terminal-pane-recovery-liveness-gate.test.ts",
+ "src/main/runtime/terminal-tail-buffer.test.ts",
+ "src/main/runtime/terminal-tail-whitespace.test.ts",
+ "src/main/runtime/terminal-wait-results.test.ts",
+ "src/main/runtime/tui-idle-evidence.test.ts",
+ "src/main/runtime/worktree-scan-execution-host-routing.test.ts",
+ "src/main/runtime/worktree-teardown.test.ts",
+ "src/main/shell-startup-output-scanner.test.ts",
+ "src/main/skills/discovery.test.ts",
+ "src/main/skills/skill-bundle-install-service.test.ts",
+ "src/main/skills/skill-bundle-process-termination.integration.test.ts",
+ "src/main/skills/skill-cloud-grant-installation.test.ts",
+ "src/main/skills/skill-delete/wsl-enumeration-protocol.test.ts",
+ "src/main/skills/skill-freshness-inventory.test.ts",
+ "src/main/skills/skill-install-transaction.test.ts",
+ "src/main/skills/skill-plugin-cache-scan.test.ts",
+ "src/main/skills/skill-process-termination.integration.test.ts",
+ "src/main/skills/skill-update-registration.test.ts",
+ "src/main/skills/skill-update-run.test.ts",
+ "src/main/skills/skill-wsl-provider-detection.test.ts",
+ "src/main/source-control/hosted-review-execution-host-routing.test.ts",
+ "src/main/speech/model-manager-progress-callback.test.ts",
+ "src/main/speech/stt-worker-model-config.test.ts",
+ "src/main/speech/stt-worker.test.ts",
+ "src/main/sqlite/sqlite-read-failure.test.ts",
+ "src/main/sqlite/sync-database.test.ts",
+ "src/main/ssh/relay-protocol-backpressure.test.ts",
+ "src/main/ssh/ssh-config-loader-regression.test.ts",
+ "src/main/ssh/ssh-connection-gssapi-fallback.test.ts",
+ "src/main/ssh/ssh-connection-sftp-namespace.test.ts",
+ "src/main/ssh/ssh-connection-system-transport.test.ts",
+ "src/main/ssh/ssh-file-stream-inactivity-deadline.test.ts",
+ "src/main/ssh/ssh-filesystem-stream-retention.test.ts",
+ "src/main/ssh/ssh-host-key-store.test.ts",
+ "src/main/ssh/ssh-host-key-verifier.test.ts",
+ "src/main/ssh/ssh-pending-pty-kill-replay.test.ts",
+ "src/main/ssh/ssh-provider-authority.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-install-staged-upload.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-install.test.ts",
+ "src/main/ssh/ssh-relay-node-pty-repair.test.ts",
+ "src/main/ssh/ssh-relay-session-incarnation.test.ts",
+ "src/main/ssh/ssh-relay-session-recovery-durability.test.ts",
+ "src/main/ssh/ssh-relay-upload-cancel.docker.test.ts",
+ "src/main/ssh/ssh-request-outcome-verdict.test.ts",
+ "src/main/ssh/vscode-ssh-authority.test.ts",
+ "src/main/star-nag/service-direct-star.test.ts",
+ "src/main/startup/configure-process.test.ts",
+ "src/main/startup/dev-education-suppression.test.ts",
+ "src/main/startup/gpu-fallback-marker.test.ts",
+ "src/main/startup/legacy-worker-renderer-recovery.test.ts",
+ "src/main/startup/main-process-error-guards.test.ts",
+ "src/main/startup/secret-protection-report-deferral-wiring.test.ts",
+ "src/main/startup/single-instance-lock-exit.electron.test.ts",
+ "src/main/startup/single-instance-lock-headless-exit.test.ts",
+ "src/main/startup/windows-install-dir-acl-probe.test.ts",
+ "src/main/synthetic-title-frame-routing.test.ts",
+ "src/main/text-generation/commit-message-text-generation-cancellation.test.ts",
+ "src/main/text-generation/commit-message-text-generation-remote-execution.test.ts",
+ "src/main/text-generation/omp-model-discovery-policy.test.ts",
+ "src/main/tray/system-tray.test.ts",
+ "src/main/update-install-exit-watchdog.test.ts",
+ "src/main/updater-events.test.ts",
+ "src/main/updater.check-preflight.test.ts",
+ "src/main/updater.fallback.test.ts",
+ "src/main/updater.install-failure-cause.test.ts",
+ "src/main/updater.prerelease-fallback.test.ts",
+ "src/main/usage-worktree-metadata.test.ts",
+ "src/main/usage/usage-provider-store-lifecycle.test.ts",
+ "src/main/warp-themes/parser.test.ts",
+ "src/main/window/clipboard-runtime-owned-ssh-paste.test.ts",
+ "src/main/window/dashboard-popout-window.test.ts",
+ "src/main/window/history-gc-worktree-ids.test.ts",
+ "src/main/window/macos-app-activation.test.ts",
+ "src/main/window/session-tab-close-request-relay.test.ts",
+ "src/main/windows/windows-command-line-recovery-health.test.ts",
+ "src/main/windows/windows-pty-job.win32.test.ts",
+ "src/main/workspace-space-analysis-snapshot.test.ts",
+ "src/main/workspace-space-analysis.test.ts",
+ "src/main/worktree-create-timing.test.ts",
+ "src/main/worktree-retirement-discovery-wsl.test.ts",
+ "src/main/wsl-unc-delete.wsl.test.ts",
+ "src/preload/browser-window-close.test.ts",
+ "src/preload/renderer-restart-wiring.test.ts",
+ "src/preload/runtime-environment-subscriptions.test.ts",
+ "src/preload/updater-package-recovery.test.ts",
+ "src/relay/agent-hook-server-codex-subagent-transcript.test.ts",
+ "src/relay/context.test.ts",
+ "src/relay/dispatcher-writer-admission.test.ts",
+ "src/relay/external-automation-provider-catalog.test.ts",
+ "src/relay/fs-handler-file-range.test.ts",
+ "src/relay/fs-list-files-scan-coordinator.test.ts",
+ "src/relay/git-branch-delete-refusal-parity.test.ts",
+ "src/relay/git-handler-working-tree-changes.test.ts",
+ "src/relay/git-handler-worktree-clean.test.ts",
+ "src/relay/git-handler-worktree-git-capabilities.test.ts",
+ "src/relay/git-push-target-local-parity.test.ts",
+ "src/relay/plugin-overlay.test.ts",
+ "src/relay/preflight-handler.test.ts",
+ "src/relay/pty-handler-dispose-lifecycle.test.ts",
+ "src/relay/pty-handler-immediate-descendants.test.ts",
+ "src/relay/pty-handler-revive.test.ts",
+ "src/relay/relay-daemon-fatal-reap.test.ts",
+ "src/relay/relay-diagnostic-log.test.ts",
+ "src/relay/relay-pty-consumer-owner-displacement.test.ts",
+ "src/relay/relay-pty-source-recovery-interleavings.test.ts",
+ "src/renderer/src/app-shell/window-visibility-actions-selector.test.ts",
+ "src/renderer/src/assets/worktree-card-active-style.test.ts",
+ "src/renderer/src/attention/agent-attention-policy.test.ts",
+ "src/renderer/src/components/AgentStateDot.test.ts",
+ "src/renderer/src/components/NewWorkspaceComposerCard.set-location-warm.test.tsx",
+ "src/renderer/src/components/QuickOpen.mount-gating.test.tsx",
+ "src/renderer/src/components/SelectedTextCopyMenu.test.tsx",
+ "src/renderer/src/components/WorktreeBaseFallbackDialog.test.tsx",
+ "src/renderer/src/components/activity/ActivityPrototypePage.filter-focus-shortcut.test.ts",
+ "src/renderer/src/components/activity/activity-clear-completed.test.ts",
+ "src/renderer/src/components/activity/activity-thread-actions.test.ts",
+ "src/renderer/src/components/activity/activity-thread-list-pane.virtualization.test.tsx",
+ "src/renderer/src/components/agent/AgentSettingsDialog.test.tsx",
+ "src/renderer/src/components/artifacts/artifact-published-link-client.test.ts",
+ "src/renderer/src/components/automations/AutomationListEmptyView.test.tsx",
+ "src/renderer/src/components/automations/AutomationSchedulePicker.render.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.cross-authority-actions.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.run-visibility.test.tsx",
+ "src/renderer/src/components/automations/automation-detail-tab-navigation.test.ts",
+ "src/renderer/src/components/automations/automation-host-catalog-source.test.ts",
+ "src/renderer/src/components/automations/automation-host-client.test.ts",
+ "src/renderer/src/components/automations/automation-host-invalidation-window-events.test.ts",
+ "src/renderer/src/components/automations/automation-list-view.test.ts",
+ "src/renderer/src/components/automations/automation-project-groups.test.ts",
+ "src/renderer/src/components/automations/automation-run-context.test.ts",
+ "src/renderer/src/components/automations/automation-run-output-snapshot.test.ts",
+ "src/renderer/src/components/automations/external-automation-display.test.ts",
+ "src/renderer/src/components/automations/external-automation-run-table-state.test.ts",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.drag-focus.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.popup-notices.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/markup-shape-render.test.ts",
+ "src/renderer/src/components/browser-pane/annotate/use-browser-page-annotation-send.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/ssh-routed-browser-page-gate.test.tsx",
+ "src/renderer/src/components/browser-pane/host-guest/browser-guest-paint-retention.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-keyboard.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/webview-registry.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-pane.chrome-chords.test.tsx",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-errors.test.ts",
+ "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-webview-attach.test.ts",
+ "src/renderer/src/components/cmd-j/palette-duplicate-key-ghost-rows.test.tsx",
+ "src/renderer/src/components/cmd-j/palette-filter.test.ts",
+ "src/renderer/src/components/cmd-j/palette-list-entry-render-keys.test.ts",
+ "src/renderer/src/components/confirmation-dialog.test.tsx",
+ "src/renderer/src/components/contextual-tours/use-contextual-tour.test.ts",
+ "src/renderer/src/components/crash-report/use-crash-report-copy.test.tsx",
+ "src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts",
+ "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.cache.test.ts",
+ "src/renderer/src/components/dashboard/dashboard-card-labels.test.ts",
+ "src/renderer/src/components/dashboard/useAgentBucketCounts.test.tsx",
+ "src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts",
+ "src/renderer/src/components/dictation/dictation-meter-store.test.tsx",
+ "src/renderer/src/components/diff-comments/diff-comment-drag-auto-scroll.test.ts",
+ "src/renderer/src/components/diff-comments/useDiffCommentDecorator.commentable-lines.test.tsx",
+ "src/renderer/src/components/editor/EditorPanelHeader.test.tsx",
+ "src/renderer/src/components/editor/MarkdownPreview.link-routing.interaction.test.tsx",
+ "src/renderer/src/components/editor/MarkdownPreview.test.ts",
+ "src/renderer/src/components/editor/MarkdownPreviewBody.test.tsx",
+ "src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx",
+ "src/renderer/src/components/editor/RichMarkdownSearchBar.ime-enter.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/remember-view/use-combined-diff-view-restore.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/resolve-changes/use-combined-diff-section-index-map.test.tsx",
+ "src/renderer/src/components/editor/diff-editor-word-wrap-options.test.ts",
+ "src/renderer/src/components/editor/editor-panel-diff-reload.test.ts",
+ "src/renderer/src/components/editor/image-viewer-zoom.test.ts",
+ "src/renderer/src/components/editor/markdown-export-html.test.ts",
+ "src/renderer/src/components/editor/markdown-frontmatter.test.ts",
+ "src/renderer/src/components/editor/markdown-heading-slug.test.ts",
+ "src/renderer/src/components/editor/markdown-rich-comment-scan.test.ts",
+ "src/renderer/src/components/editor/monaco-context-menu-paste.test.ts",
+ "src/renderer/src/components/editor/monaco-large-text-paste.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-commands.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-context-command-routing.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-cut.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-empty-paragraph-delete.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-image-insert.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-inline-image-paragraph.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-inline-source-tokenization.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-toc-heading-target.test.ts",
+ "src/renderer/src/components/editor/useDiffViewerLargeDiffLifecycle.test.tsx",
+ "src/renderer/src/components/editor/useEditorPanelContentState.test.tsx",
+ "src/renderer/src/components/editor/useIpynbCellExecution.test.tsx",
+ "src/renderer/src/components/editor/useMarkdownDocuments.test.ts",
+ "src/renderer/src/components/editor/useRichMarkdownReviewController.open-guard.test.ts",
+ "src/renderer/src/components/editor/useRichMarkdownSearch.reuse.test.tsx",
+ "src/renderer/src/components/feature-tips/feature-tip-telemetry.test.ts",
+ "src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts",
+ "src/renderer/src/components/feature-wall/feature-wall-shortcut-labels.test.tsx",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.markdown-editor.test.tsx",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tab-lifecycle.test.tsx",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalWindowControls.test.tsx",
+ "src/renderer/src/components/floating-terminal/floating-terminal-panel-inputs.test.ts",
+ "src/renderer/src/components/github-body-draft-state.test.ts",
+ "src/renderer/src/components/github-project/group-sort.test.ts",
+ "src/renderer/src/components/github-project/project-picker-browse-cache.test.ts",
+ "src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts",
+ "src/renderer/src/components/landing-preflight-unverifiable-host.test.tsx",
+ "src/renderer/src/components/linear-issue-workspace-text.test.ts",
+ "src/renderer/src/components/mobile/MobileHero.test.tsx",
+ "src/renderer/src/components/mobile/WindowsFirewallNotice.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatComposer.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.turn-history.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageRail.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatResolutionReceipt.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-availability.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-font-scale.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-layout-actions.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-message-rail-items.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pagination.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-send-eligibility.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-structured-send-composition-clear.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-task-list-history.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-working-suppression.test.ts",
+ "src/renderer/src/components/native-chat/structured-attention-dispatch.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-app-menu-selection.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-attachments.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-catalog.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-hook-status.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-live-session.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-transcript-window.options.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-prompt-state.test.tsx",
+ "src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx",
+ "src/renderer/src/components/onboarding/use-onboarding-flow.test.ts",
+ "src/renderer/src/components/pull-request-page/mentions/query.test.ts",
+ "src/renderer/src/components/pull-request-page/presentation/state-badge.test.ts",
+ "src/renderer/src/components/quick-open-file-list-host-name-filter.react.test.tsx",
+ "src/renderer/src/components/quick-open-search.test.ts",
+ "src/renderer/src/components/right-sidebar/ActionButton.test.tsx",
+ "src/renderer/src/components/right-sidebar/AiVaultSessionSubagents.test.tsx",
+ "src/renderer/src/components/right-sidebar/AiVaultVirtualRow.test.tsx",
+ "src/renderer/src/components/right-sidebar/ChecksPanel.updated-at-metadata.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerVirtualRowsAddProject.test.tsx",
+ "src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx",
+ "src/renderer/src/components/right-sidebar/GitHistoryPanel.test.tsx",
+ "src/renderer/src/components/right-sidebar/PluginPanel.test.tsx",
+ "src/renderer/src/components/right-sidebar/PullRequestComposer.generate-tooltip.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.remote-action-errors.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-scan-issue-state.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-display.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-log-open.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-entry-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx",
+ "src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-breadcrumb.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-directory-listing.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-refresh-concurrency.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-watch-refresh-scheduler.test.ts",
+ "src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts",
+ "src/renderer/src/components/right-sidebar/github-pr-link-modal.test.ts",
+ "src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts",
+ "src/renderer/src/components/right-sidebar/right-sidebar-primary-action-layout.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-active-open-file-keys.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-create-pr-intent-state.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-launch-agent-args-applicability.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts",
+ "src/renderer/src/components/right-sidebar/use-ai-vault-search-focus-request.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts",
+ "src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.repo-default.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileExplorerRowDrag.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx",
+ "src/renderer/src/components/right-sidebar/useFileExplorerWatch.test.ts",
+ "src/renderer/src/components/settings/AutomationsSettingsPane.test.tsx",
+ "src/renderer/src/components/settings/HiddenExperimentalGroup.test.tsx",
+ "src/renderer/src/components/settings/MobilePairingConnectionOptions.test.tsx",
+ "src/renderer/src/components/settings/MobilePaneAddressSearch.test.tsx",
+ "src/renderer/src/components/settings/NativeChatExperimentalSetting.test.tsx",
+ "src/renderer/src/components/settings/NativeChatSupportedAgents.test.tsx",
+ "src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts",
+ "src/renderer/src/components/settings/TerminalTccAttributionNotice.test.tsx",
+ "src/renderer/src/components/settings/general-preview-tab-search.test.ts",
+ "src/renderer/src/components/settings/host-scoped-setting-scope.test.ts",
+ "src/renderer/src/components/settings/osc52-clipboard-copy.test.ts",
+ "src/renderer/src/components/settings/repository-source-control-ai-persist-queue.test.ts",
+ "src/renderer/src/components/settings/settings-setup-guide-progress.test.ts",
+ "src/renderer/src/components/settings/use-mac-captured-digit-chords.test.ts",
+ "src/renderer/src/components/settings/use-repository-hook-settings-draft.test.tsx",
+ "src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx",
+ "src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx",
+ "src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx",
+ "src/renderer/src/components/sidebar/AgentDashboardSidebarHost.test.tsx",
+ "src/renderer/src/components/sidebar/OrcaYamlTrustDialog.test.tsx",
+ "src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts",
+ "src/renderer/src/components/sidebar/SidebarSettingsHelpMenu.test.tsx",
+ "src/renderer/src/components/sidebar/StatusIndicator.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardAgents.expansion-remount.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeContextMenu.react185-bystander.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.editor-lifecycle.test.tsx",
+ "src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts",
+ "src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts",
+ "src/renderer/src/components/sidebar/folder-workspace-linked-startup-plan.test.ts",
+ "src/renderer/src/components/sidebar/linear-agent-skill-setup-reminders.test.ts",
+ "src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx",
+ "src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx",
+ "src/renderer/src/components/sidebar/project-filter-reveal.test.ts",
+ "src/renderer/src/components/sidebar/project-header-color.test.ts",
+ "src/renderer/src/components/sidebar/project-header-drag-start.test.ts",
+ "src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-workspace-option-items.test.ts",
+ "src/renderer/src/components/sidebar/useCreateProjectDefaults.test.ts",
+ "src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts",
+ "src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts",
+ "src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts",
+ "src/renderer/src/components/sidebar/worktree-delete-position-scaling.test.ts",
+ "src/renderer/src/components/sidebar/worktree-drag-units.test.ts",
+ "src/renderer/src/components/sidebar/worktree-keyboard-cycle.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-lineage-nesting.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-section-label-disambiguation.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/drag/row-state.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/active-descendant-option.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.test.ts",
+ "src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts",
+ "src/renderer/src/components/sidebar/worktree-scroll-to-current-button.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sidebar-drag-autoscroll.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sidebar-reveal-scroll-settle.test.ts",
+ "src/renderer/src/components/skills/SkillFreshnessUpdateDialog.test.tsx",
+ "src/renderer/src/components/skills/SkillsPage.test.tsx",
+ "src/renderer/src/components/skills/skill-bundle-name.test.ts",
+ "src/renderer/src/components/skills/skill-bundle-retry-selection.test.ts",
+ "src/renderer/src/components/skills/skill-freshness-skipped-reason.test.ts",
+ "src/renderer/src/components/star-nag/StarNagAgentValueMomentObserver.test.tsx",
+ "src/renderer/src/components/star-nag/StarNagToastHost.test.tsx",
+ "src/renderer/src/components/stats/UsageTrackingPaneShell.test.tsx",
+ "src/renderer/src/components/status-bar/SkillUpdateStatusSegment.test.tsx",
+ "src/renderer/src/components/status-bar/icons.test.tsx",
+ "src/renderer/src/components/status-bar/resource-usage-folder-merge.test.ts",
+ "src/renderer/src/components/status-bar/resource-usage-open-slices.test.ts",
+ "src/renderer/src/components/status-bar/ssh-status-segment-copy.test.ts",
+ "src/renderer/src/components/status-bar/status-bar-copy-localization.test.tsx",
+ "src/renderer/src/components/status-bar/usage-roster-row-state.test.ts",
+ "src/renderer/src/components/tab-bar/SortableTabContextMenu.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBar.windows-shell-remote-runtime.test.ts",
+ "src/renderer/src/components/tab-bar/TabBar.windows-shell-ssh-host.test.ts",
+ "src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.test.tsx",
+ "src/renderer/src/components/tab-bar/drop-indicator.test.ts",
+ "src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts",
+ "src/renderer/src/components/tab-bar/use-open-tab-search.test.ts",
+ "src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts",
+ "src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts",
+ "src/renderer/src/components/tab-group/TabGroupSplitLayout.drag.test.tsx",
+ "src/renderer/src/components/tab-group/tab-drop-zone.test.ts",
+ "src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts",
+ "src/renderer/src/components/task-page-gitlab-task-filters.test.ts",
+ "src/renderer/src/components/task-page-linear-issue-request.test.ts",
+ "src/renderer/src/components/task-page-list-chrome-visibility.test.ts",
+ "src/renderer/src/components/task-page-source-switch-boundary.test.ts",
+ "src/renderer/src/components/terminal-pane/cache-timer-seeding.test.ts",
+ "src/renderer/src/components/terminal-pane/command-code-done-settle.test.ts",
+ "src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts",
+ "src/renderer/src/components/terminal-pane/keyboard-handlers-ime-composing-chord.test.tsx",
+ "src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-buffer-serializer.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-deferred-ssh-passphrase.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hibernation-wake.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-backlog-snapshot.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-mode-2031-subscriptions.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-pi-synchronized-input.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/reattach-success-settle.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-shutdown-output-queue.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-eager-buffer-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-pi-spinner.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-execution-host-pty.test.ts",
+ "src/renderer/src/components/terminal-pane/replay-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/repro-8299-shift-space-input-source.test.ts",
+ "src/renderer/src/components/terminal-pane/ssh-reconnect-model-paint-gate.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-appearance.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-copy-rejection-handling.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-dead-session-reconcile.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-upload-report.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-candidate-key-release-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-substituted-text-commit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-adversarial.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-linux-native-trace-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-click-fallback.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-missing-file-open.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-split-completion.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-split-request-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-split-writer-paths.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-watcher-sleep-preserved-exit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pty-paste-writer.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-replay-application-continuity.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-restore-sgr-latch.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-shortcut-policy.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-startup-timing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-worktree-path-link.test.ts",
+ "src/renderer/src/components/terminal-pane/use-mobile-overlay-ticks.perf.test.tsx",
+ "src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-sync-fit-registration.test.ts",
+ "src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.test.ts",
+ "src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx",
+ "src/renderer/src/components/terminal/initial-terminal-structured-launch.test.tsx",
+ "src/renderer/src/components/terminal/initial-terminal.test.ts",
+ "src/renderer/src/components/ui/color-picker.test.tsx",
+ "src/renderer/src/components/unexpected-signout/unexpected-signout-visibility.test.ts",
+ "src/renderer/src/components/use-github-task-search-commit.test.ts",
+ "src/renderer/src/components/workspace-cleanup/WorkspaceCleanupDialog.stale-while-revalidate.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-active-facets.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-confirm-remove.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-dialog-notices.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-git-evidence.test.ts",
+ "src/renderer/src/components/workspace-emoji/useWorkspaceEmojiShortcodeInput.test.tsx",
+ "src/renderer/src/components/workspace-surface-projection.test.ts",
+ "src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts",
+ "src/renderer/src/hooks/composer-state/branch-start-point-actions.test.ts",
+ "src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts",
+ "src/renderer/src/hooks/ipc-events/direct-ssh-hydration-target-metadata.test.ts",
+ "src/renderer/src/hooks/ipc-events/updater-status-ipc-bridge.test.ts",
+ "src/renderer/src/hooks/legacy-worker-terminal-recovery-event.test.ts",
+ "src/renderer/src/hooks/remote-workspace-target-sync.test.ts",
+ "src/renderer/src/hooks/ssh-reconnect-pane-retry.test.ts",
+ "src/renderer/src/hooks/useAppMenuPaste.test.tsx",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.mixed-workspace.test.ts",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.test.ts",
+ "src/renderer/src/hooks/useAutomationDispatchEvents.test.ts",
+ "src/renderer/src/hooks/useDetectedAgents.test.tsx",
+ "src/renderer/src/hooks/useIpcEvents-agent-dashboard-shortcut.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-browser-tab-create.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-cli-worktree-activation.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-session-tab-close-request.test.ts",
+ "src/renderer/src/hooks/useLinearProviderConnected.test.tsx",
+ "src/renderer/src/i18n/runtime-required-catalog.test.ts",
+ "src/renderer/src/i18n/smart-workspace-jira-locales.test.ts",
+ "src/renderer/src/lib/activate-tab-and-focus-pane.test.ts",
+ "src/renderer/src/lib/agent-background-session-launch-host.test.ts",
+ "src/renderer/src/lib/agent-catalog-links.test.ts",
+ "src/renderer/src/lib/agent-paste-draft.test.ts",
+ "src/renderer/src/lib/agent-status-count.test.ts",
+ "src/renderer/src/lib/agent-trust-preflight.test.ts",
+ "src/renderer/src/lib/automation-session-observer.test.ts",
+ "src/renderer/src/lib/automation-session-reuse.test.ts",
+ "src/renderer/src/lib/browser-palette-search.test.ts",
+ "src/renderer/src/lib/browser-workspace-tab-activation.test.ts",
+ "src/renderer/src/lib/codex-session-restart-route-recheck.test.ts",
+ "src/renderer/src/lib/codex-session-restart-shell-flap.test.ts",
+ "src/renderer/src/lib/codex-stale-pane-account-identity.test.ts",
+ "src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts",
+ "src/renderer/src/lib/ensure-simulator-tab.test.ts",
+ "src/renderer/src/lib/ephemeral-vm-workspace-target.integration.test.ts",
+ "src/renderer/src/lib/execute-open-editor-path-move.test.ts",
+ "src/renderer/src/lib/file-preview-action-visibility.test.tsx",
+ "src/renderer/src/lib/github-work-item-workspace-attachment.test.ts",
+ "src/renderer/src/lib/ipc-error.test.ts",
+ "src/renderer/src/lib/keyboard-layout/input-source-id.test.ts",
+ "src/renderer/src/lib/language-detect.test.ts",
+ "src/renderer/src/lib/launch-agent-background-session.test.ts",
+ "src/renderer/src/lib/linked-work-item-context.test.ts",
+ "src/renderer/src/lib/list-row-interaction.test.ts",
+ "src/renderer/src/lib/manual-terminal-worktree-parking.test.ts",
+ "src/renderer/src/lib/markdown-comment-blocks.test.ts",
+ "src/renderer/src/lib/monaco-languages/monarch-upstream-mdx-recursion.test.ts",
+ "src/renderer/src/lib/monaco-languages/textmate-language-registration.test.ts",
+ "src/renderer/src/lib/monaco-peek-preview-options.test.ts",
+ "src/renderer/src/lib/new-workspace-enter-guard.test.ts",
+ "src/renderer/src/lib/palette-match/match-field-allocation.test.ts",
+ "src/renderer/src/lib/palette-match/palette-match-performance.test.ts",
+ "src/renderer/src/lib/palette-type-alias-match.test.ts",
+ "src/renderer/src/lib/pane-agent-evidence.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-queue-chunks.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-ack-credit.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-foreground-refresh.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-tree-ops.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-webgl-context-recovery.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-complex-script.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-ime-candidate-anchor.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-link-provider-guard.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-scroll-intent-structural-transitions.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-windows-ctrl-alt-chord-classification.test.ts",
+ "src/renderer/src/lib/pane-manager/windows-pty-compatibility.test.ts",
+ "src/renderer/src/lib/pane-manager/xterm-write-callback-guard.test.ts",
+ "src/renderer/src/lib/react-commit-cascade-install-order.test.ts",
+ "src/renderer/src/lib/renderer-app-platform.test.ts",
+ "src/renderer/src/lib/repo-display-labels.test.ts",
+ "src/renderer/src/lib/repo-runtime-owner.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-remote-compat.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-replay.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session.test.ts",
+ "src/renderer/src/lib/simulator-tab-palette-activation.test.ts",
+ "src/renderer/src/lib/source-control-remote-error.test.ts",
+ "src/renderer/src/lib/sparse-preset-draft.test.ts",
+ "src/renderer/src/lib/ssh-failed-target-sleeping-agent-resume.test.ts",
+ "src/renderer/src/lib/ssh-mutation-expectation.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-prompt.test.ts",
+ "src/renderer/src/lib/typing-latency/sample-window.test.ts",
+ "src/renderer/src/lib/unread-badge-count.test.ts",
+ "src/renderer/src/lib/wake-sleeping-agents-in-background.test.ts",
+ "src/renderer/src/lib/worker-terminal-takeover-report.test.ts",
+ "src/renderer/src/lib/workspace-activation-path-gate.test.ts",
+ "src/renderer/src/lib/workspace-browser-tab-open.test.ts",
+ "src/renderer/src/lib/workspace-session-closed-tab-tombstones.test.ts",
+ "src/renderer/src/lib/workspace-session-editor-drafts.test.ts",
+ "src/renderer/src/lib/workspace-session-hydration-keys.test.ts",
+ "src/renderer/src/lib/workspace-tab-agent-metadata.test.ts",
+ "src/renderer/src/lib/worktree-activation-emptied-workspace-reseed.test.ts",
+ "src/renderer/src/lib/worktree-activation-surface-caller-wiring.test.ts",
+ "src/renderer/src/lib/worktree-display-name-order.test.ts",
+ "src/renderer/src/lib/worktree-draft-startup-view-mode.test.ts",
+ "src/renderer/src/lib/worktree-reactivation-runtime-owned-resume-deferral.test.ts",
+ "src/renderer/src/lib/worktree-sort-order-host-split.test.ts",
+ "src/renderer/src/runtime/agent-session-operation-id.test.ts",
+ "src/renderer/src/runtime/client-hosted-browser-close-intents.test.ts",
+ "src/renderer/src/runtime/mobile-markdown-bridge.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-frame-drop-resync.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-parse-backpressure.test.ts",
+ "src/renderer/src/runtime/runtime-file-client-mutation-ownership.test.ts",
+ "src/renderer/src/runtime/runtime-file-import-pairing-revision.test.ts",
+ "src/renderer/src/runtime/runtime-git-client-merge.test.ts",
+ "src/renderer/src/runtime/runtime-host-connection-state.test.ts",
+ "src/renderer/src/runtime/runtime-host-contact-parity.test.ts",
+ "src/renderer/src/runtime/runtime-server-directory-browser.test.ts",
+ "src/renderer/src/runtime/runtime-skills-delete-client.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts",
+ "src/renderer/src/runtime/web-runtime-wake-terminal-respawn.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-late-merged-predecessor-lockout.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-diff-focus-steal.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-snapshot-batch.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync/mirrored-agent-tab-label.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery-topology-fence.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts",
+ "src/renderer/src/ssh/ssh-connect-in-flight.test.ts",
+ "src/renderer/src/startup/ssh-startup-reconnect.test.ts",
+ "src/renderer/src/startup/startup-ssh-connection-restore.test.ts",
+ "src/renderer/src/store/folder-workspaces/folder-workspace-catalog.test.ts",
+ "src/renderer/src/store/project-host-setup-selector.test.ts",
+ "src/renderer/src/store/repos/safe-auto-fork-sync.test.ts",
+ "src/renderer/src/store/slices/agent-hibernation-live-anchor-e2e.test.ts",
+ "src/renderer/src/store/slices/agent-pane-authority.test.ts",
+ "src/renderer/src/store/slices/agent-status-ssh-connection-clear.test.ts",
+ "src/renderer/src/store/slices/agent-status.test.ts",
+ "src/renderer/src/store/slices/browser-cleanup-close.test.ts",
+ "src/renderer/src/store/slices/browser-page-conversion.test.ts",
+ "src/renderer/src/store/slices/browser-workspace-doc-location.test.ts",
+ "src/renderer/src/store/slices/editor-rekey-open-files.test.ts",
+ "src/renderer/src/store/slices/github-pr-refresh-host-guard.test.ts",
+ "src/renderer/src/store/slices/github-project-view-tables.test.ts",
+ "src/renderer/src/store/slices/github-refresh-sweep.test.ts",
+ "src/renderer/src/store/slices/github-review-thread-actions.test.ts",
+ "src/renderer/src/store/slices/github-work-items-pagination.test.ts",
+ "src/renderer/src/store/slices/github-work-items-query-bounds.test.ts",
+ "src/renderer/src/store/slices/hosted-review-cache-race.test.ts",
+ "src/renderer/src/store/slices/orca-profiles-auth-actions-connect-overlap.test.ts",
+ "src/renderer/src/store/slices/orca-profiles-auth-actions.test.ts",
+ "src/renderer/src/store/slices/pane-foreground-agent.test.ts",
+ "src/renderer/src/store/slices/pinned-tab-close-confirm.test.ts",
+ "src/renderer/src/store/slices/rate-limits.test.ts",
+ "src/renderer/src/store/slices/readopted-ssh-worktree-rows.test.ts",
+ "src/renderer/src/store/slices/repos-host-identity-routing.test.ts",
+ "src/renderer/src/store/slices/repos-manual-order-hydration.test.ts",
+ "src/renderer/src/store/slices/repos-paired-runtime-add.test.ts",
+ "src/renderer/src/store/slices/repos-runtime-project-groups.test.ts",
+ "src/renderer/src/store/slices/repos-selected-owner-routing.test.ts",
+ "src/renderer/src/store/slices/sparse-presets.test.ts",
+ "src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts",
+ "src/renderer/src/store/slices/tabs-hydration.test.ts",
+ "src/renderer/src/store/slices/terminal-helpers.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts",
+ "src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts",
+ "src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts",
+ "src/renderer/src/store/slices/ui-notice-dismissals.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-refresh-coalescing.test.ts",
+ "src/renderer/src/store/slices/worktrees-git-identity-review-clear-persistence.test.ts",
+ "src/renderer/src/store/slices/worktrees-runtime-host-metadata-retirement.test.ts",
+ "src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.test.ts",
+ "src/renderer/src/store/slices/worktrees/session/worktree-identity-rename-row-worktree-ids.test.ts",
+ "src/renderer/src/store/terminals/terminal-pane-expansion-write-bailout.test.tsx",
+ "src/renderer/src/store/worktree-host-collision-index.test.ts",
+ "src/renderer/src/store/worktree-visibility-defaults-by-host.test.ts",
+ "src/renderer/src/web/web-preload-updater-package-recovery.test.ts",
+ "src/renderer/src/web/web-runtime-client-export-parity.test.ts",
+ "src/shared/agent-hook-listener-codex-approval-ownership.test.ts",
+ "src/shared/agent-hook-listener-hermes-codex-droid.test.ts",
+ "src/shared/agent-hook-listener-interactive-prompts.test.ts",
+ "src/shared/agent-hook-listener-session-replacement.test.ts",
+ "src/shared/agent-hook-listener-startless-child-lifecycle.test.ts",
+ "src/shared/agent-hook-transport-interference.test.ts",
+ "src/shared/agent-image-paste.test.ts",
+ "src/shared/agent-session-definitive-refusal.test.ts",
+ "src/shared/agent-skill-sharing-contract.test.ts",
+ "src/shared/agent-status-child-work-admission-collision.test.ts",
+ "src/shared/agent-status-run-alias-index.test.ts",
+ "src/shared/agent-status-subject.test.ts",
+ "src/shared/app-version.test.ts",
+ "src/shared/automation-cron-input-validation.test.ts",
+ "src/shared/automation-run-retention.test.ts",
+ "src/shared/browser-network-capabilities.test.ts",
+ "src/shared/browser-url.test.ts",
+ "src/shared/child-process/windows-command-line.win32.test.ts",
+ "src/shared/child-process/windows-console-visibility.test.ts",
+ "src/shared/claude-agent-teams-tmux-compat.test.ts",
+ "src/shared/command-code-output-status.test.ts",
+ "src/shared/command-code-turn-boundary.test.ts",
+ "src/shared/contextual-tours.test.ts",
+ "src/shared/emulator-touch-frame.test.ts",
+ "src/shared/ephemeral-vm-runtime-feature-sorting.test.ts",
+ "src/shared/export-let-function-initializer-ban.test.ts",
+ "src/shared/external-worktree-inbox.test.ts",
+ "src/shared/feature-interactions.test.ts",
+ "src/shared/feature-tips.test.ts",
+ "src/shared/git-exec-mutation.test.ts",
+ "src/shared/git-fork-sync.test.ts",
+ "src/shared/git-history-ref-display.test.ts",
+ "src/shared/git-status-limit.test.ts",
+ "src/shared/github/owner-slug.test.ts",
+ "src/shared/gitlab-job-trace-check-details.test.ts",
+ "src/shared/growing-byte-buffer.test.ts",
+ "src/shared/harness-injected-user-turns.test.ts",
+ "src/shared/hook-command-source-policy.test.ts",
+ "src/shared/keybindings-default-bindings.test.ts",
+ "src/shared/keybindings-double-tap.test.ts",
+ "src/shared/keybindings-parse-cache.test.ts",
+ "src/shared/linear/inline-media.test.ts",
+ "src/shared/map-settled-with-concurrency.test.ts",
+ "src/shared/markdown-document-listing-limits.test.ts",
+ "src/shared/markdown-toc-panel-width.test.ts",
+ "src/shared/native-chat-ask-row.test.ts",
+ "src/shared/native-chat-ask.test.ts",
+ "src/shared/native-chat-command-envelope.test.ts",
+ "src/shared/native-chat-edit-normalize.test.ts",
+ "src/shared/native-chat-href-routing.test.ts",
+ "src/shared/native-chat-session-option-snapshot.test.ts",
+ "src/shared/native-chat-session-option-state.test.ts",
+ "src/shared/native-chat-tool-run-sentence.test.ts",
+ "src/shared/native-chat-tool-summary.test.ts",
+ "src/shared/new-workspace/work-item-lookup-text.test.ts",
+ "src/shared/opencode-launch-command.test.ts",
+ "src/shared/orca-yaml-alias-bounds.test.ts",
+ "src/shared/orchestration-fleet-attention.test.ts",
+ "src/shared/plugins/plugin-hostile-fixture.test.ts",
+ "src/shared/plugins/plugin-vm-recipe-artifact.test.ts",
+ "src/shared/posix-wait-status.test.ts",
+ "src/shared/pr-check-status.test.ts",
+ "src/shared/pty-liveness-verdict.test.ts",
+ "src/shared/pty-startup-reply-echo-shapes.test.ts",
+ "src/shared/quick-open-directory-reader.test.ts",
+ "src/shared/quick-open-expansion-paths.test.ts",
+ "src/shared/rate-limit-reset-format.test.ts",
+ "src/shared/remote-runtime-client-error-classification.test.ts",
+ "src/shared/remote-runtime-outbound-admission.test.ts",
+ "src/shared/repo-icon.test.ts",
+ "src/shared/repro-7732-gitlab-job-id-dropped.test.ts",
+ "src/shared/runtime-listing-host-scope.test.ts",
+ "src/shared/search-match-count.test.ts",
+ "src/shared/search-subprocess-lines.test.ts",
+ "src/shared/secure-path-hardening-cache.test.ts",
+ "src/shared/setup-runner-command.test.ts",
+ "src/shared/source-control-ai-policy-regression.test.ts",
+ "src/shared/source-control-ai-recipe-save.test.ts",
+ "src/shared/source-scan/source-tree-walk.test.ts",
+ "src/shared/structured-agent-session-composer.test.ts",
+ "src/shared/subprocess-stdin-write.test.ts",
+ "src/shared/telemetry-events.test.ts",
+ "src/shared/telemetry-orca-cli-feature-tip.test.ts",
+ "src/shared/terminal-exit-cause.test.ts",
+ "src/shared/terminal-file-url-target.test.ts",
+ "src/shared/terminal-fonts.test.ts",
+ "src/shared/terminal-query-reply.test.ts",
+ "src/shared/terminal-startup-cwd.test.ts",
+ "src/shared/terminal-stream-protocol.test.ts",
+ "src/shared/tui-agent-startup-copilot-resume.test.ts",
+ "src/shared/utf8-byte-limits.test.ts",
+ "src/shared/windows-console-input.test.ts",
+ "src/shared/windows-lane-tree-removal-boundary.test.ts",
+ "src/shared/windows-terminal-shell.test.ts",
+ "src/shared/worktree-scan-failure.test.ts",
+ "src/shared/worktree/identity.test.ts",
+ "src/shared/worktree/ownership-configured-base-visibility.test.ts",
+ "src/shared/worktree/retired-name-cache.test.ts",
+ "src/shared/worktree/retired-name-registry.test.ts",
+ "tests/e2e/alternate-screen-fixture-script.unit.test.ts",
+ "tests/e2e/helpers/client-hosted-browser-fixture.unit.test.ts",
+ "tests/e2e/omp-risk-remote-review.unit.test.ts",
+ "tests/e2e/session-tabs-decorative-title-fanout.unit.test.ts",
+ "tests/e2e/session-tabs-rich-status-boundaries.unit.test.ts",
+ "tests/tools/omp-config-root-local-shell.test.mjs"
+ ],
+ "durationMs": 851040
+ },
+ {
+ "files": [
+ "config/scripts/build-native-for-platform.test.mjs",
+ "config/scripts/check-runtime-electron-ratchet.test.mjs",
+ "config/scripts/client-hosted-browser-package-coverage.test.mjs",
+ "config/scripts/counterbalanced-benchmark-schedule.test.mjs",
+ "config/scripts/daily-build-version.test.mjs",
+ "config/scripts/electron-builder-markdown-associations.test.mjs",
+ "config/scripts/electron-builder-runtime-resources.test.mjs",
+ "config/scripts/headless-serve-shutdown-matrix.test.mjs",
+ "config/scripts/linux-package-maintainer-scripts.test.mjs",
+ "config/scripts/locale-translation-policy.es-round5.test.mjs",
+ "config/scripts/locale-translation-policy.ja-relocalization.test.mjs",
+ "config/scripts/locale-translation-policy.ja-round5.test.mjs",
+ "config/scripts/mac-build-compatibility.test.mjs",
+ "config/scripts/macos-computer-helper-owner-loss-group-recovery.test.mjs",
+ "config/scripts/macos-tcc-prompt-localization.test.mjs",
+ "config/scripts/mobile-web-app-agent-history-render.test.mjs",
+ "config/scripts/mobile-web-app-files-external-links.test.mjs",
+ "config/scripts/mobile-web-app-page-grant-call-sites.test.mjs",
+ "config/scripts/mobile-web-app-session-media-picker.test.mjs",
+ "config/scripts/mobile-web-app-source-control-render.test.mjs",
+ "config/scripts/mobile-web-bundle-manifest.test.mjs",
+ "config/scripts/orcad-operations-restart-safety.test.mjs",
+ "config/scripts/package-electron-install-owner.test.mjs",
+ "config/scripts/packaged-hang-watchdog-worker-contract.test.mjs",
+ "config/scripts/pnpm-cli-invocation.test.mjs",
+ "config/scripts/pr-code-change-scope.test.mjs",
+ "config/scripts/pr-e2e-native-only-routing.test.mjs",
+ "config/scripts/pty-transcript-secret-scan.test.mjs",
+ "config/scripts/quadratic-buffer-concat-plugin.test.mjs",
+ "config/scripts/rebuild-native-deps.test.mjs",
+ "config/scripts/relay-artifact-manifest.test.mjs",
+ "config/scripts/release-rc-history.test.mjs",
+ "config/scripts/sort-comparator-performance-plugin.test.mjs",
+ "config/scripts/verify-cli-bin.test.mjs",
+ "config/scripts/windows-bin-spawn-predicate.test.mjs",
+ "config/scripts/windows-signing-workflow-contract.test.mjs",
+ "src/cli/execution-host-flag.test.ts",
+ "src/cli/handlers/computer-action-routing.test.ts",
+ "src/cli/handlers/computer-action-validation.test.ts",
+ "src/cli/handlers/orchestration-windows-ask-cli.test.ts",
+ "src/cli/handlers/skill-sharing.test.ts",
+ "src/cli/index-vm-recipe-doctor.test.ts",
+ "src/cli/runtime/runtime-access-denied.test.ts",
+ "src/cli/runtime/websocket-transport-error.test.ts",
+ "src/cli/skills-reference-selector.test.ts",
+ "src/main/agent-hooks/ended-process-reconciliation.test.ts",
+ "src/main/agent-hooks/install-telemetry.test.ts",
+ "src/main/agent-hooks/server-claude-normalization.test.ts",
+ "src/main/agent-hooks/server-claude-statusline.test.ts",
+ "src/main/agent-hooks/server-codex-subagent-transcript.test.ts",
+ "src/main/agent-hooks/server-gemini-normalization.test.ts",
+ "src/main/agent-hooks/server-last-status-hydrate-confirmation.test.ts",
+ "src/main/agent-hooks/server-last-status-hydrate-validation.test.ts",
+ "src/main/agent-hooks/server-last-status-restored-children.test.ts",
+ "src/main/agent-hooks/server-muse-session-log-poll.test.ts",
+ "src/main/agent-hooks/server-opencode-normalization.test.ts",
+ "src/main/agent-hooks/server-relay-listener-replay.test.ts",
+ "src/main/agent-hooks/server-reminted-pane-key.test.ts",
+ "src/main/agent-hooks/server-status-listener-fanout.test.ts",
+ "src/main/agent-hooks/server.claude-interactive-question.test.ts",
+ "src/main/agent-hooks/wsl-guest-plugin-install.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-launch.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-recovery.test.ts",
+ "src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts",
+ "src/main/ai-vault-search/session-search-content-hash.test.ts",
+ "src/main/ai-vault-search/session-search-host-registration.test.ts",
+ "src/main/ai-vault-search/session-search-identifier-split.test.ts",
+ "src/main/ai-vault-search/session-search-index-writer.test.ts",
+ "src/main/ai-vault-search/session-search-retention-policy.test.ts",
+ "src/main/ai-vault-search/session-search-service.test.ts",
+ "src/main/ai-vault/codex-session-collection.test.ts",
+ "src/main/ai-vault/remote-session-scan-batching.test.ts",
+ "src/main/ai-vault/remote-session-scanner-sources.test.ts",
+ "src/main/ai-vault/session-list-results.test.ts",
+ "src/main/ai-vault/session-scanner-agent-root-overrides.test.ts",
+ "src/main/ai-vault/session-scanner-codex-dual-root.test.ts",
+ "src/main/ai-vault/session-scanner-codex-parser.test.ts",
+ "src/main/ai-vault/session-scanner-cursor-chat-meta.test.ts",
+ "src/main/ai-vault/session-scanner-fs-import-guard.test.ts",
+ "src/main/ai-vault/session-scanner-omp-subagent-prune.test.ts",
+ "src/main/ai-vault/session-scanner-omp-title.test.ts",
+ "src/main/ai-vault/session-scanner-service-root-response.test.ts",
+ "src/main/artifacts/artifact-cloud-service-races.test.ts",
+ "src/main/artifacts/artifact-recovery-directory-fsync.test.ts",
+ "src/main/asar-transparent-fs.test.ts",
+ "src/main/automations/dispatch-refusal.test.ts",
+ "src/main/automations/external-job-run-sorting.test.ts",
+ "src/main/automations/run-target-resolution.test.ts",
+ "src/main/browser/agent-browser-bridge-command-transport.test.ts",
+ "src/main/browser/agent-browser-bridge-session-lifecycle.test.ts",
+ "src/main/browser/agent-browser-bridge-tab-routing.test.ts",
+ "src/main/browser/agent-browser-bridge-text-input.test.ts",
+ "src/main/browser/browser-client-host-reconciliation-command-order.test.ts",
+ "src/main/browser/browser-client-page-command-executor-fencing.test.ts",
+ "src/main/browser/browser-client-page-renderer-bridge.test.ts",
+ "src/main/browser/browser-client-upload-staging.test.ts",
+ "src/main/browser/browser-cookie-clear-preserve.test.ts",
+ "src/main/browser/browser-grab-payload.test.ts",
+ "src/main/browser/browser-identity-mode-record.test.ts",
+ "src/main/browser/browser-manager-grab-mode.test.ts",
+ "src/main/browser/browser-network-tunnel-outbound-memory-budget.test.ts",
+ "src/main/browser/browser-route-h3-egress.electron.test.ts",
+ "src/main/browser/browser-route-partition-binding-capacity.test.ts",
+ "src/main/browser/browser-route-partition-storage-runtime.test.ts",
+ "src/main/browser/browser-route-webcontents-registry.test.ts",
+ "src/main/browser/browser-session-partition-proxy-install.test.ts",
+ "src/main/browser/browser-session-registry-identity.persistence.test.ts",
+ "src/main/browser/browser-webauthn-account-picker.test.ts",
+ "src/main/browser/browser-webauthn-profile-delete.test.ts",
+ "src/main/browser/cdp-bridge-integration.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-identity-wiring.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host.test.ts",
+ "src/main/browser/paired-runtime-browser-host-command-admission.test.ts",
+ "src/main/browser/wsl-browser-network-execution-route.test.ts",
+ "src/main/browser/wsl-browser-network-relay-launch.test.ts",
+ "src/main/claude-accounts/claude-account-service-config-dir-capture.test.ts",
+ "src/main/claude-accounts/claude-account-service-reauth-rollback.test.ts",
+ "src/main/claude-accounts/claude-structured-auth-policy.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-keychain-snapshots.test.ts",
+ "src/main/claude-usage/scanner.test.ts",
+ "src/main/claude-usage/worktree-attribution-scaling.test.ts",
+ "src/main/claude/claude-background-task-turn-resumption.test.ts",
+ "src/main/claude/claude-stream-json-connection.test.ts",
+ "src/main/claude/claude-structured-control-actions.test.ts",
+ "src/main/claude/claude-structured-journal-prompt-retry.test.ts",
+ "src/main/claude/claude-structured-journal-translation-turn-timing.test.ts",
+ "src/main/claude/claude-structured-prompt-items.test.ts",
+ "src/main/claude/claude-structured-session-close.test.ts",
+ "src/main/claude/claude-structured-session-reading-control.test.ts",
+ "src/main/claude/claude-subagent-group-row.test.ts",
+ "src/main/claude/claude-subagent-id-aliases.test.ts",
+ "src/main/claude/claude-tui-resume-launch.test.ts",
+ "src/main/claude/claude-tui-resume-proof.test.ts",
+ "src/main/cli/linux-bare-orca-dispatcher.test.ts",
+ "src/main/cli/native-cli-powershell-argv-boundary.test.ts",
+ "src/main/cli/orca-cli-child-path.test.ts",
+ "src/main/cli/wsl-cli-registration-registry.test.ts",
+ "src/main/codex-accounts/runtime-home-legacy-migration.test.ts",
+ "src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts",
+ "src/main/codex-accounts/runtime-home-wsl-system-default.test.ts",
+ "src/main/codex-accounts/service-add-account-from-home.test.ts",
+ "src/main/codex-accounts/service-wsl-accounts.test.ts",
+ "src/main/codex-usage/scanner-incremental-append.test.ts",
+ "src/main/codex/codex-config-settings-removal.test.ts",
+ "src/main/codex/codex-resume-process-proof.test.ts",
+ "src/main/codex/codex-session-bridge.test.ts",
+ "src/main/codex/codex-session-index-heal-state.test.ts",
+ "src/main/codex/codex-structured-child-environment.test.ts",
+ "src/main/codex/codex-structured-journal-goal-revision.test.ts",
+ "src/main/codex/codex-structured-session-adapter-lifecycle.test.ts",
+ "src/main/codex/codex-subagent-execution-projection.test.ts",
+ "src/main/codex/codex-subagent-executions.test.ts",
+ "src/main/codex/codex-trust-grant-main-thread-boundary.test.ts",
+ "src/main/codex/codex-tui-rollout-proof.test.ts",
+ "src/main/codex/config-toml-trust-api-parity.test.ts",
+ "src/main/codex/hook-service-legacy-cleanup.test.ts",
+ "src/main/codex/sta-4735-hook-trust-provenance-overwrite.test.ts",
+ "src/main/command-code/hook-service.test.ts",
+ "src/main/computer/computer-provider-unavailable-message.test.ts",
+ "src/main/computer/desktop-script-provider-runtime-host-routing.test.ts",
+ "src/main/computer/macos-native-provider-line-buffer.test.ts",
+ "src/main/crash-reporting/crash-breadcrumb-store.test.ts",
+ "src/main/crash-reporting/minidump-crash-signature.test.ts",
+ "src/main/crash-reporting/process-gone-killed-one-ordering.test.ts",
+ "src/main/crash-reporting/renderer-recovery-circuit-breaker.test.ts",
+ "src/main/daemon/client.test.ts",
+ "src/main/daemon/cold-restore-payload-cache.test.ts",
+ "src/main/daemon/daemon-client-stream-keepalive.test.ts",
+ "src/main/daemon/daemon-endpoint-publish.test.ts",
+ "src/main/daemon/daemon-entry-path-layouts.test.ts",
+ "src/main/daemon/daemon-host-relocation.test.ts",
+ "src/main/daemon/daemon-lifecycle-event.test.ts",
+ "src/main/daemon/daemon-mac-code-identity.test.ts",
+ "src/main/daemon/daemon-pty-adapter-inventory-respawn.test.ts",
+ "src/main/daemon/daemon-pty-adapter-protocol-compatibility.test.ts",
+ "src/main/daemon/daemon-pty-adapter-steady-state-compat.test.ts",
+ "src/main/daemon/daemon-pty-adapter.test.ts",
+ "src/main/daemon/daemon-pty-router.test.ts",
+ "src/main/daemon/daemon-tcc-attribution-main-thread.test.ts",
+ "src/main/daemon/degraded-daemon-pty-provider.test.ts",
+ "src/main/daemon/issue-6814-daemon-failure-classification.test.ts",
+ "src/main/daemon/node-pty-windows-input-error.win32.test.ts",
+ "src/main/daemon/pty-subprocess-wsl-launch.test.ts",
+ "src/main/daemon/repro-12101-mouse-tracking-survives-agent-death.test.ts",
+ "src/main/daemon/terminal-checkpoint-serializer.test.ts",
+ "src/main/daemon/terminal-host-non-agent-foreground.test.ts",
+ "src/main/daemon/terminal-host-startup.test.ts",
+ "src/main/daemon/terminal-host-teardown-recreate.test.ts",
+ "src/main/emulator/android/scrcpy-stream-session.test.ts",
+ "src/main/emulator/android/scrcpy-video-frame-parser.test.ts",
+ "src/main/emulator/serve-sim-ax-normalization.test.ts",
+ "src/main/emulator/serve-sim-helper-processes.test.ts",
+ "src/main/git/command-runner/hosted-cli-deadline-log.test.ts",
+ "src/main/git/commit.test.ts",
+ "src/main/git/fetch-error-classification.test.ts",
+ "src/main/git/local-repo-ref-maintenance.test.ts",
+ "src/main/git/pack-refs-lock-ownership.test.ts",
+ "src/main/git/remove-worktree-branch-cleanup.test.ts",
+ "src/main/git/repo-branch-conflict.test.ts",
+ "src/main/git/repo-default-base-timeout.test.ts",
+ "src/main/git/repo-search-ref-compat.test.ts",
+ "src/main/git/runner-wsl-linked-gitdir-windows.test.ts",
+ "src/main/git/runner-wsl-login-shell-capture.test.ts",
+ "src/main/git/settled-diff-cache-bounds.test.ts",
+ "src/main/git/status-conflict-overlap.bench.test.ts",
+ "src/main/git/status-submodule-path-cache.test.ts",
+ "src/main/git/status-upstream-ref.test.ts",
+ "src/main/git/status-wsl-pathspecs.test.ts",
+ "src/main/git/status.test.ts",
+ "src/main/git/upstream.test.ts",
+ "src/main/git/worktree-add-local-base-suggestion.test.ts",
+ "src/main/git/worktree-base-divergence.test.ts",
+ "src/main/git/worktree-created-description-real-git.test.ts",
+ "src/main/git/worktree-list-porcelain.test.ts",
+ "src/main/git/worktree-listing-sparse-distro.test.ts",
+ "src/main/git/worktree-separate-git-dir.test.ts",
+ "src/main/git/worktree-shared-directories.test.ts",
+ "src/main/gitea/pull-request-mappers.test.ts",
+ "src/main/github/client-merged-pr-visibility.test.ts",
+ "src/main/github/client-pr-fallback-number.test.ts",
+ "src/main/github/client-pr-local-runtime.test.ts",
+ "src/main/github/pr-refresh-coordinator-alias-coalescing.test.ts",
+ "src/main/github/pr-refresh-coordinator-rate-limit-budget.test.ts",
+ "src/main/github/pr-review-comment-lines.test.ts",
+ "src/main/github/work-item-details.test.ts",
+ "src/main/github/work-item-search-freshness.test.ts",
+ "src/main/grok/grok-hook-config-file.test.ts",
+ "src/main/grok/grok-hook-stdin-no-eof.test.ts",
+ "src/main/hang-watchdog/hang-watchdog-detection-loop.test.ts",
+ "src/main/i18n/main-i18n-lazy-locale.test.ts",
+ "src/main/ipc/ai-vault-search.test.ts",
+ "src/main/ipc/browser-tab-registration-wait.test.ts",
+ "src/main/ipc/cli.test.ts",
+ "src/main/ipc/command-path-resolver.test.ts",
+ "src/main/ipc/computer-use-permissions.test.ts",
+ "src/main/ipc/filesystem-allowed-roots.test.ts",
+ "src/main/ipc/filesystem-download-transfers.test.ts",
+ "src/main/ipc/filesystem-list-files.test.ts",
+ "src/main/ipc/filesystem-watcher-remote-batch.test.ts",
+ "src/main/ipc/filesystem-watcher-remote-cancellation.test.ts",
+ "src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts",
+ "src/main/ipc/floating-workspace-directory.test.ts",
+ "src/main/ipc/keybindings.test.ts",
+ "src/main/ipc/local-worktree-runtime-options.test.ts",
+ "src/main/ipc/minimax-credentials.test.ts",
+ "src/main/ipc/native-chat-subscribe-lifecycle.test.ts",
+ "src/main/ipc/orca-profile-auth-handlers.test.ts",
+ "src/main/ipc/parcel-watcher-crash-fuse.test.ts",
+ "src/main/ipc/parcel-watcher-root-path-rewrite.test.ts",
+ "src/main/ipc/parcel-watcher-supervisor-capacity-wait.test.ts",
+ "src/main/ipc/parcel-watcher-unsubscribe-timeout.test.ts",
+ "src/main/ipc/pty-applied-size-reporting.test.ts",
+ "src/main/ipc/pty-controller-spawn-admission.test.ts",
+ "src/main/ipc/pty-daemon-spawn-session-identity.test.ts",
+ "src/main/ipc/pty-ipc-hidden-delivery-gate.test.ts",
+ "src/main/ipc/pty-output-drain-rounds.test.ts",
+ "src/main/ipc/pty-pending-data-drain-queue-differential.test.ts",
+ "src/main/ipc/pty-restored-appimage-cli-shim-refresh.test.ts",
+ "src/main/ipc/pty-session-liveness-and-ownership.test.ts",
+ "src/main/ipc/pty-spawn-cwd-fallback.test.ts",
+ "src/main/ipc/pty-spawn-env-codex-home-routing.test.ts",
+ "src/main/ipc/pty-startup-swap-window-presence.test.ts",
+ "src/main/ipc/pty-windows-shell-selection.test.ts",
+ "src/main/ipc/pty-write-ipc-validation.test.ts",
+ "src/main/ipc/pty/configured-terminal-shell-args.test.ts",
+ "src/main/ipc/pty/delivery/attached-pty-size.test.ts",
+ "src/main/ipc/pty/runtime/spawn-commit-pty-size.test.ts",
+ "src/main/ipc/repos-remote-client-events.test.ts",
+ "src/main/ipc/runtime-agent-launch-capability.test.ts",
+ "src/main/ipc/runtime-environment-removal-storage.test.ts",
+ "src/main/ipc/runtime-environments-pairing.test.ts",
+ "src/main/ipc/settings.test.ts",
+ "src/main/ipc/shallow-watch-delivery-probe.test.ts",
+ "src/main/ipc/ssh-active-relay-sessions.test.ts",
+ "src/main/ipc/ssh-browse.test.ts",
+ "src/main/ipc/ssh-passphrase.test.ts",
+ "src/main/ipc/ssh-pty-remote-source-range-consumers.test.ts",
+ "src/main/ipc/ssh-terminate-sessions.test.ts",
+ "src/main/ipc/terminal-preview-output-stream.test.ts",
+ "src/main/ipc/terminal-preview.test.ts",
+ "src/main/ipc/ui.test.ts",
+ "src/main/ipc/worktree-folder-rename-target.test.ts",
+ "src/main/ipc/worktree-git-status-ref-watch.test.ts",
+ "src/main/ipc/worktree-logic.test.ts",
+ "src/main/ipc/worktree-push-target-reconciliation-real-git.test.ts",
+ "src/main/ipc/worktree-remote-push-target-materialization.test.ts",
+ "src/main/ipc/worktrees-local-base-ref-resolution.test.ts",
+ "src/main/ipc/worktrees-orphan-directory-cleanup.test.ts",
+ "src/main/ipc/worktrees-ssh-create-base-prefetch.test.ts",
+ "src/main/ipc/worktrees-ssh-fork-push-target-remote.test.ts",
+ "src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts",
+ "src/main/issue-command-ignore.test.ts",
+ "src/main/jira/client.test.ts",
+ "src/main/linear/projects.test.ts",
+ "src/main/linux-lid-sleep-assertion.test.ts",
+ "src/main/memory/hydrate-local-pty-registry.test.ts",
+ "src/main/mimo/hook-service.test.ts",
+ "src/main/muse-usage/scanner.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-crash-boundary.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-streaming-replay.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-delta-coalescer-protected.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-history-page.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-journal-recovery.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-adapter-router.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-eviction.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-options.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-reverse.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-host-handoff-stop.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-host-runtime-state.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-live-tui-restart-survival.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-settlement-retry.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-subscribers.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-teardown-handoff-drain.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-wire-admission.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-tui-transcript-teardown.test.ts",
+ "src/main/native-chat/host-readable-transcript-path-fs-gate.test.ts",
+ "src/main/native-chat/session-file-resolver.test.ts",
+ "src/main/native-chat/structured-agent-session-history-adoption.test.ts",
+ "src/main/native-chat/transcript-line-decoders.grok.test.ts",
+ "src/main/native-chat/transcript-reader-codex-history-mode.test.ts",
+ "src/main/native-chat/transcript-tail-reader-cancellation.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-process-client.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-process-operations.test.ts",
+ "src/main/native-chat/wsl-transcript-fs-route-quarantine.test.ts",
+ "src/main/network/macos-system-resolver-health.test.ts",
+ "src/main/network/macos-tailscale-dns-diagnostic.test.ts",
+ "src/main/notifications/desktop-away-state.test.ts",
+ "src/main/observability/bundle.test.ts",
+ "src/main/observability/redactor-environment-lines.test.ts",
+ "src/main/observability/redactor.test.ts",
+ "src/main/opencode/hook-plugin-child-attention.test.ts",
+ "src/main/opencode/opencode-session-binder.test.ts",
+ "src/main/orca-profiles/profile-cloud-pkce.test.ts",
+ "src/main/orca-profiles/profile-cloud-service.test.ts",
+ "src/main/orca-profiles/profile-project-state-file.test.ts",
+ "src/main/orcad/node-pty-precondition.test.ts",
+ "src/main/orcad/orcad-daemon-supervision.test.ts",
+ "src/main/own-chromium-tree-kill-guard.test.ts",
+ "src/main/persistence-native-chat-tab-view-mode.test.ts",
+ "src/main/persistence-protected-secret-fail-closed.test.ts",
+ "src/main/persistence-split-pane-incarnation.test.ts",
+ "src/main/persistence-ssh-remote-pty-binding-replay.test.ts",
+ "src/main/persistence-workspace-repin-automation-owner.test.ts",
+ "src/main/persistence-workspace-session-scrollback.test.ts",
+ "src/main/persistence-worktree-meta-and-folder-workspaces.test.ts",
+ "src/main/persistence-worktree-name-retirement.test.ts",
+ "src/main/persistence/loading-store/terminal-tab-pty-ownership.test.ts",
+ "src/main/persistence/tracking-repos/missing-local-worktree-metadata-pruning.test.ts",
+ "src/main/pi/omp-model-command-source.test.ts",
+ "src/main/pi/titlebar-extension-source.test.ts",
+ "src/main/plugins/plugin-command-registry.test.ts",
+ "src/main/plugins/plugin-panel-controller.test.ts",
+ "src/main/plugins/plugin-worker-supervision.integration.test.ts",
+ "src/main/ports/advertised-url-retention.test.ts",
+ "src/main/ports/local-workspace-port-scanner.test.ts",
+ "src/main/project-groups/folder-workspace-path-status.test.ts",
+ "src/main/providers/agent-foreground-process-pi.test.ts",
+ "src/main/providers/agent-foreground-process-real-rows.test.ts",
+ "src/main/providers/local-pty-provider-session-inventory.test.ts",
+ "src/main/providers/local-pty-shell-ready-startup-command.test.ts",
+ "src/main/providers/posix-pane-foreground-fingerprint.test.ts",
+ "src/main/providers/pty-process-list-admission.test.ts",
+ "src/main/providers/ssh-filesystem-download.test.ts",
+ "src/main/providers/ssh-filesystem-provider-capabilities.test.ts",
+ "src/main/providers/ssh-filesystem-provider-stream.test.ts",
+ "src/main/providers/ssh-filesystem-provider.test.ts",
+ "src/main/providers/ssh-git-provider-api.test.ts",
+ "src/main/providers/windows-shell-preflight-runtime.windows.test.ts",
+ "src/main/pty/appimage-terminal-env.test.ts",
+ "src/main/pty/legacy-terminal-shim-dir.test.ts",
+ "src/main/pty/posix-pty-process-groups.test.ts",
+ "src/main/pty/windows-environment-path-main-loop.test.ts",
+ "src/main/pty/windows-path-registry-fallback.test.ts",
+ "src/main/rate-limits/codex-fetcher-process-contract.test.ts",
+ "src/main/rate-limits/codex-fetcher-pty-settle.test.ts",
+ "src/main/rate-limits/codex-fetcher-runtime-pairing.test.ts",
+ "src/main/rate-limits/codex-probe-termination.test.ts",
+ "src/main/rate-limits/initial-account-rate-limit-target.test.ts",
+ "src/main/rate-limits/minimax/minimax-request-context.test.ts",
+ "src/main/rate-limits/opencode-go-usage-fetcher.test.ts",
+ "src/main/rate-limits/service-window-activation.test.ts",
+ "src/main/refused-tree-kill-root-termination.test.ts",
+ "src/main/ripgrep/bundled-ripgrep-spawn.test.ts",
+ "src/main/runtime/agent-prompt-request-correlation.test.ts",
+ "src/main/runtime/agent-session-claim-identity.test.ts",
+ "src/main/runtime/agent-session-resume-args.test.ts",
+ "src/main/runtime/agent-startup-input-assembly-census.test.ts",
+ "src/main/runtime/automation-change-publication.test.ts",
+ "src/main/runtime/browser-host-lease-registry.test.ts",
+ "src/main/runtime/browser-host-page-placement-replacement.test.ts",
+ "src/main/runtime/browser-tab-create-publication.test.ts",
+ "src/main/runtime/claude-structured-session-integration.test.ts",
+ "src/main/runtime/client-hosted-browser-row-publication.test.ts",
+ "src/main/runtime/decorative-title-fact-emission.test.ts",
+ "src/main/runtime/folder-workspace-pty-identity.test.ts",
+ "src/main/runtime/graph-sync-payload-partition.test.ts",
+ "src/main/runtime/headless-placeholder-graph-surface-standing.test.ts",
+ "src/main/runtime/headless-terminal-split-layout.test.ts",
+ "src/main/runtime/mobile-pairing-qr.test.ts",
+ "src/main/runtime/mobile-session-tabs-agent-status-heartbeat.test.ts",
+ "src/main/runtime/orca-runtime-browser-client-hosted.test.ts",
+ "src/main/runtime/orchestration-cli-subprocess.test.ts",
+ "src/main/runtime/orchestration-mailbox-cold-park-idle.test.ts",
+ "src/main/runtime/orchestration-mailbox-detached-routing.test.ts",
+ "src/main/runtime/orchestration-mailbox-routing-races.test.ts",
+ "src/main/runtime/orchestration-worker-workspace-resolution.test.ts",
+ "src/main/runtime/orchestration/coordinator-escalation-triage.test.ts",
+ "src/main/runtime/orchestration/db-heartbeat-straggler-guard.test.ts",
+ "src/main/runtime/orchestration/db-task-create-readiness.test.ts",
+ "src/main/runtime/orchestration/db.test.ts",
+ "src/main/runtime/orchestration/db/dispatch-context/dispatch-capability.test.ts",
+ "src/main/runtime/orchestration/db/federated-worker-report-outcome.test.ts",
+ "src/main/runtime/orchestration/db/legacy-question-identity.test.ts",
+ "src/main/runtime/orchestration/db/row-column-lists.test.ts",
+ "src/main/runtime/orchestration/db/schema/federated-home-run-migration.test.ts",
+ "src/main/runtime/orchestration/dispatch-creator-identity-migration.test.ts",
+ "src/main/runtime/orchestration/orchestration-db-permissions.test.ts",
+ "src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.test.ts",
+ "src/main/runtime/orchestration/structured-pointer-operation-id.test.ts",
+ "src/main/runtime/orchestration/task-deps-flag.test.ts",
+ "src/main/runtime/orchestration/worker-output-archive-bounding.test.ts",
+ "src/main/runtime/proven-absent-leaf-pty-verdicts.test.ts",
+ "src/main/runtime/relay/relay-auth-coordinator-recovery.test.ts",
+ "src/main/runtime/relay/relay-auth-coordinator.test.ts",
+ "src/main/runtime/relay/relay-demand-ledger.test.ts",
+ "src/main/runtime/relay/relay-host-proof.test.ts",
+ "src/main/runtime/relay/relay-http-client.test.ts",
+ "src/main/runtime/rpc/core-typed-method-contract.test.ts",
+ "src/main/runtime/rpc/dispatcher-browser-client-automation.test.ts",
+ "src/main/runtime/rpc/dispatcher-computer-errors.test.ts",
+ "src/main/runtime/rpc/dispatcher-feature-interactions.test.ts",
+ "src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts",
+ "src/main/runtime/rpc/methods/ai-vault-search.test.ts",
+ "src/main/runtime/rpc/methods/client-native-chat-settings.test.ts",
+ "src/main/runtime/rpc/methods/files-watch-cleanup.test.ts",
+ "src/main/runtime/rpc/methods/host-capabilities.test.ts",
+ "src/main/runtime/rpc/methods/hosted-review.test.ts",
+ "src/main/runtime/rpc/methods/linear-agent-access.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-structured-worker-lifecycle.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-release-reap-fixed.func.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/cli-runtime-boundary.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-release-safety.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-control-mail.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/check-superseded-terminal.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/check-worker-consumer-fencing.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-read-projection.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-inventory.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-ownership-guard.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/workers-recovery.test.ts",
+ "src/main/runtime/rpc/methods/pairing.test.ts",
+ "src/main/runtime/rpc/methods/project-host-setup-self-host-stamp.test.ts",
+ "src/main/runtime/rpc/methods/structured-worker-stop-receipt.test.ts",
+ "src/main/runtime/rpc/methods/terminal/terminal-snapshot-json-byte-budget.test.ts",
+ "src/main/runtime/rpc/methods/workspace-ports.test.ts",
+ "src/main/runtime/rpc/methods/worktree-create-args.test.ts",
+ "src/main/runtime/rpc/methods/worktree-create-navigation.test.ts",
+ "src/main/runtime/rpc/methods/worktree-missing-terminal-teardown.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-takeover-delivery.test.ts",
+ "src/main/runtime/rpc/orchestration-mutation-executor.test.ts",
+ "src/main/runtime/rpc/terminal-agent-prompt-send.test.ts",
+ "src/main/runtime/rpc/terminal-agent-send-guard.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-output-pause-and-viewport.test.ts",
+ "src/main/runtime/rpc/terminal-prompt-delivery-receipt.test.ts",
+ "src/main/runtime/rpc/terminal-send-agent-session-lease.test.ts",
+ "src/main/runtime/rpc/terminal-source-range-ledger.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-ownership.test.ts",
+ "src/main/runtime/rpc/unix-socket-transport.test.ts",
+ "src/main/runtime/runtime-browser-client-page-adoption.test.ts",
+ "src/main/runtime/runtime-browser-network-execution-host.test.ts",
+ "src/main/runtime/runtime-git-execution-host-ownership.test.ts",
+ "src/main/runtime/runtime-mobile-agent-status-builder.test.ts",
+ "src/main/runtime/runtime-remove-project-host-scope.test.ts",
+ "src/main/runtime/runtime-resolved-worktree-cache.test.ts",
+ "src/main/runtime/runtime-rpc-pairing-mode-persistence.test.ts",
+ "src/main/runtime/runtime-rpc-terminal-list.test.ts",
+ "src/main/runtime/runtime-rpc-websocket-bind-host.test.ts",
+ "src/main/runtime/runtime-rpc-websocket-long-poll-caps.test.ts",
+ "src/main/runtime/runtime-skill-install-authority.test.ts",
+ "src/main/runtime/runtime-terminal-orphan-topology-validation.test.ts",
+ "src/main/runtime/structured-agent-session-integration.test.ts",
+ "src/main/runtime/structured-worker-authority.test.ts",
+ "src/main/runtime/structured-worker-mail-routing.test.ts",
+ "src/main/runtime/structured-worker-terminal-refusal.test.ts",
+ "src/main/runtime/terminal-close-slow-agent-exit.test.ts",
+ "src/main/runtime/tui-idle-name-only-real-pty.integration.test.ts",
+ "src/main/runtime/worktree-path-selector-wsl-posix.test.ts",
+ "src/main/shell-startup-identity-scanner.test.ts",
+ "src/main/skills/skill-delete/roots.test.ts",
+ "src/main/skills/skill-package-download.test.ts",
+ "src/main/skills/skill-remote-error-category-parity.test.ts",
+ "src/main/skills/skill-scan-coalescer.test.ts",
+ "src/main/skills/skill-upload-process-restart-child.test.ts",
+ "src/main/skills/skill-upload-session-admission-regression.test.ts",
+ "src/main/source-control/hosted-review-azure-devops.integration.test.ts",
+ "src/main/source-control/hosted-review-creation-gitlab-self-hosted.test.ts",
+ "src/main/source-control/pull-request-linked-issue.test.ts",
+ "src/main/ssh/orcad-activation-gate.test.ts",
+ "src/main/ssh/orcad-activation-record.test.ts",
+ "src/main/ssh/orcad-remote-gc.test.ts",
+ "src/main/ssh/orcad-state-snapshot.test.ts",
+ "src/main/ssh/sftp-namespace-resolution.test.ts",
+ "src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts",
+ "src/main/ssh/ssh-connection-github-probe.test.ts",
+ "src/main/ssh/ssh-known-hosts.test.ts",
+ "src/main/ssh/ssh-multi-factor-authentication.test.ts",
+ "src/main/ssh/ssh-orphan-relay-pty-sweep.test.ts",
+ "src/main/ssh/ssh-port-scanner.test.ts",
+ "src/main/ssh/ssh-pty-consumer-session.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-cache-shell.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts",
+ "src/main/ssh/ssh-relay-session-model-migration.test.ts",
+ "src/main/ssh/ssh-relay-session-reconnect-incarnation.test.ts",
+ "src/main/ssh/ssh-relay-superseded-endpoints.test.ts",
+ "src/main/ssh/ssh-remote-commands.test.ts",
+ "src/main/ssh/ssh-remote-linear-relation-write.test.ts",
+ "src/main/ssh/ssh-remote-windows-command-line-limit.test.ts",
+ "src/main/ssh/ssh-session-limit-error.test.ts",
+ "src/main/star-nag/service-prompt-moments.test.ts",
+ "src/main/startup/desktop-startup-ordering.test.ts",
+ "src/main/startup/ensure-virtual-display.test.ts",
+ "src/main/startup/headless-pty-hydration-ordering.test.ts",
+ "src/main/startup/hydrate-shell-path.windows.test.ts",
+ "src/main/startup/main-window-structured-status-filter.test.ts",
+ "src/main/startup/os-opened-markdown-files.test.ts",
+ "src/main/startup/secure-dns-census.test.ts",
+ "src/main/startup/single-instance-lock.test.ts",
+ "src/main/startup/skill-share-deep-link-state.test.ts",
+ "src/main/startup/windows-install-dir-acl-startup-wiring.test.ts",
+ "src/main/synthetic-title-spinner.test.ts",
+ "src/main/system-fonts.test.ts",
+ "src/main/telemetry/validator.test.ts",
+ "src/main/text-generation/agent-failure-output.test.ts",
+ "src/main/text-generation/commit-message-text-generation-local-subprocess.test.ts",
+ "src/main/text-generation/commit-message-text-generation-model-discovery.test.ts",
+ "src/main/text-generation/pull-request-context.test.ts",
+ "src/main/updater-nudge.test.ts",
+ "src/main/updater-release-api-token.test.ts",
+ "src/main/updater-test-module-loader.test.ts",
+ "src/main/updater.linux-root-package-install.test.ts",
+ "src/main/updater.publishing-window-feed.test.ts",
+ "src/main/warp-themes/parser-runner.test.ts",
+ "src/main/warp-themes/theme-file-scanner.test.ts",
+ "src/main/window/clipboard-remote-file-cleanup.bench.test.ts",
+ "src/main/window/createMainWindow-close-confirmation.test.ts",
+ "src/main/window/createMainWindow-startup-reveal.test.ts",
+ "src/main/window/foreground-activation-policy.test.ts",
+ "src/main/window/main-window-visibility.test.ts",
+ "src/main/window/mobile-markdown-request-relay.test.ts",
+ "src/main/worker-thread-request-queue.test.ts",
+ "src/main/worktree-create-execution-host-route.test.ts",
+ "src/main/worktree-create-preparation-claim.test.ts",
+ "src/main/worktree-removal-repo-owner.test.ts",
+ "src/main/wsl/wsl-executable-path.win32.test.ts",
+ "src/main/wsl/wsl-runner.test.ts",
+ "src/relay/agent-exec-handler-windows.test.ts",
+ "src/relay/ai-vault-handler.test.ts",
+ "src/relay/dispatcher-capacity-degradation.test.ts",
+ "src/relay/dispatcher-client-writer.test.ts",
+ "src/relay/dispatcher-notification-ownership.test.ts",
+ "src/relay/fs-search-line-fragments.test.ts",
+ "src/relay/fs-stream-pty-echo-backpressure.integration.test.ts",
+ "src/relay/git-handler-branch-compare.test.ts",
+ "src/relay/git-handler-diff-read-coalescing.test.ts",
+ "src/relay/git-handler-fork-remote-exec.test.ts",
+ "src/relay/git-handler-worktree-list-authority.test.ts",
+ "src/relay/git-handler-worktree-ops.test.ts",
+ "src/relay/git-response-pty-echo-backpressure.integration.test.ts",
+ "src/relay/git-stdout-stream.test.ts",
+ "src/relay/plugin-overlay-env.test.ts",
+ "src/relay/port-scan-handler.test.ts",
+ "src/relay/pty-handler-shell-resolution.test.ts",
+ "src/relay/pty-handler-source-publication.test.ts",
+ "src/relay/pty-handler-spawn-admission.test.ts",
+ "src/relay/pty-handler-spawn-environment.test.ts",
+ "src/relay/pty-shell-utils-process-cycles.test.ts",
+ "src/relay/relay-grace-branch.test.ts",
+ "src/relay/relay-pty-source-recovery-completion.test.ts",
+ "src/relay/relay-watcher-event-emitter.test.ts",
+ "src/relay/relay-watcher-pending-setup-waiters.test.ts",
+ "src/relay/skill-install-handler.test.ts",
+ "src/relay/skill-upload-multi-relay.integration.test.ts",
+ "src/relay/subprocess-tree-termination.test.ts",
+ "src/relay/windows-port-scan.test.ts",
+ "src/relay/workspace-space-scan.test.ts",
+ "src/renderer/src/app-shell/app-command-handlers-workspace-delete.test.ts",
+ "src/renderer/src/app-shell/app-root-surface-settings.test.tsx",
+ "src/renderer/src/app-shell/remote-workspace-unplaced-upload-suppression.test.tsx",
+ "src/renderer/src/components/NativeChatResumeOnRestartModal.test.tsx",
+ "src/renderer/src/components/NewWorkspaceComposerCard.set-location.test.tsx",
+ "src/renderer/src/components/TerminalWorkbenchContainer.test.tsx",
+ "src/renderer/src/components/UpdateCard.error-card.test.tsx",
+ "src/renderer/src/components/WorktreeJumpPalette.mount-gating.test.tsx",
+ "src/renderer/src/components/activity/activity-portal-churn-budget.test.ts",
+ "src/renderer/src/components/activity/activity-terminal-portal.test.tsx",
+ "src/renderer/src/components/activity/activity-thread-grouping.status-order.test.ts",
+ "src/renderer/src/components/activity/activity-thread-hover-card.test.tsx",
+ "src/renderer/src/components/activity/useActivityUnreadCount.freshness.test.tsx",
+ "src/renderer/src/components/artifacts/artifact-publish-flow.test.ts",
+ "src/renderer/src/components/automations/AutomationListHostGroups.test.tsx",
+ "src/renderer/src/components/automations/automation-host-cache.test.ts",
+ "src/renderer/src/components/automations/automation-host-detail-display.test.ts",
+ "src/renderer/src/components/automations/automation-host-diagnostics.test.ts",
+ "src/renderer/src/components/automations/automation-host-health.test.ts",
+ "src/renderer/src/components/automations/automation-host-status-descriptors.test.ts",
+ "src/renderer/src/components/automations/automation-list-search-rows.test.ts",
+ "src/renderer/src/components/automations/automation-run-view-state.test.ts",
+ "src/renderer/src/components/automations/automation-scoped-list-client.test.ts",
+ "src/renderer/src/components/automations/automation-setup-decision.test.ts",
+ "src/renderer/src/components/automations/external-automation-source-availability.test.ts",
+ "src/renderer/src/components/automations/use-automation-runs-dashboard.test.tsx",
+ "src/renderer/src/components/browser-cookie-import-google-disclosure.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.download-notices.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.failure-remount.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/markup-drawing-model.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.remote-link-routing.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-expansion.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-workspace-pane.retention-props.test.tsx",
+ "src/renderer/src/components/browser-pane/browser-client-page-position-driver.test.ts",
+ "src/renderer/src/components/browser-pane/browser-reopen-on-server.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-automation-visibility.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-focus.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts",
+ "src/renderer/src/components/browser-webauthn-account-dialog.test.tsx",
+ "src/renderer/src/components/cmd-j/palette-section-render-cap.test.ts",
+ "src/renderer/src/components/cmd-j/quick-action-context.test.ts",
+ "src/renderer/src/components/comment-reply-target-state.test.ts",
+ "src/renderer/src/components/confirmation-dialog-refresh-boundary.test.ts",
+ "src/renderer/src/components/contextual-tours/ContextualTourOverlay.remeasure.test.tsx",
+ "src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts",
+ "src/renderer/src/components/contextual-tours/contextual-tour-overlay-measurement.test.ts",
+ "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.clipboard-routes.test.tsx",
+ "src/renderer/src/components/dashboard-popout/DashboardPopoutRoot.test.tsx",
+ "src/renderer/src/components/dashboard-popout/agent-board-filtering.test.ts",
+ "src/renderer/src/components/dashboard-popout/terminal-preview-unavailable-message.test.ts",
+ "src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.test.tsx",
+ "src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts",
+ "src/renderer/src/components/dashboard/dashboard-card-terminal-input.test.ts",
+ "src/renderer/src/components/dashboard/launch-dashboard-agent.test.ts",
+ "src/renderer/src/components/dictation/dictation-audio-meter.test.ts",
+ "src/renderer/src/components/dictation/dictation-insertion-target.test.ts",
+ "src/renderer/src/components/diff-comments/diff-comment-line-range.test.ts",
+ "src/renderer/src/components/editor/EditorContent.monaco-lifecycle.test.tsx",
+ "src/renderer/src/components/editor/EditorPanel.markdown-classification-memoization.test.tsx",
+ "src/renderer/src/components/editor/MarkdownTableOfContentsPanel.test.tsx",
+ "src/renderer/src/components/editor/NotesSendMenu.test.tsx",
+ "src/renderer/src/components/editor/RichMarkdownLinkBubble.render.test.tsx",
+ "src/renderer/src/components/editor/check-annotation-open.test.ts",
+ "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-section-scaling.test.tsx",
+ "src/renderer/src/components/editor/conflict-review-file-tree-windowing.test.tsx",
+ "src/renderer/src/components/editor/csv-parse.test.ts",
+ "src/renderer/src/components/editor/diff-section-layout.test.ts",
+ "src/renderer/src/components/editor/editor-panel-render-model.test.ts",
+ "src/renderer/src/components/editor/file-editor-word-wrap-options.test.ts",
+ "src/renderer/src/components/editor/ipynb-code-cell-lines.test.ts",
+ "src/renderer/src/components/editor/local-log-tail-decoder.test.ts",
+ "src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts",
+ "src/renderer/src/components/editor/markdown-internal-links.test.ts",
+ "src/renderer/src/components/editor/markdown-render-mode.test.ts",
+ "src/renderer/src/components/editor/markdown-rich-line-scan.test.ts",
+ "src/renderer/src/components/editor/markdown-rich-size-limit.test.ts",
+ "src/renderer/src/components/editor/mermaid-config.test.ts",
+ "src/renderer/src/components/editor/monaco-markdown-doc-link-decorations.test.ts",
+ "src/renderer/src/components/editor/pdf-view-position.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-list-continuation.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-literal-serialization.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-lowlight-cache.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-normalize.test.ts",
+ "src/renderer/src/components/emulator-pane/emulator-device-frame.input.test.tsx",
+ "src/renderer/src/components/emulator-pane/emulator-keyboard-paste.test.ts",
+ "src/renderer/src/components/emulator-pane/emulator-screen-gesture.test.ts",
+ "src/renderer/src/components/feature-tips/CliSkillSetupTerminal.test.tsx",
+ "src/renderer/src/components/feature-tips/feature-tip-cli-install-action.test.ts",
+ "src/renderer/src/components/feature-wall/feature-wall-animation-visibility.test.tsx",
+ "src/renderer/src/components/feature-wall/use-feature-wall-completion.test.ts",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.empty-state.test.tsx",
+ "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.test.ts",
+ "src/renderer/src/components/github-enterprise-slug-routing-boundary.test.ts",
+ "src/renderer/src/components/github-project/GhAuthErrorHelp.test.ts",
+ "src/renderer/src/components/github-project/github-project-picker-filter.test.ts",
+ "src/renderer/src/components/github-project/project-row-filtering.test.ts",
+ "src/renderer/src/components/github/github-markdown-image-url.test.ts",
+ "src/renderer/src/components/github/repro-8784-ghe-avatar-fallback.test.ts",
+ "src/renderer/src/components/hover-reveal-touch-action-visibility.test.ts",
+ "src/renderer/src/components/landing-preflight-runtime-boundary.test.ts",
+ "src/renderer/src/components/native-chat-resume-on-restart-grouping.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatImageAttachmentPreview.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageTimestamp.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatPromptEditor.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatStructuredSession.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatSubagentRun.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-autoscroll.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-dismiss-key.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-leaf-routing.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-message-list-projection.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pane-file-drop.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-pty-session-options.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-session-assembler.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-shared-copy-matches-catalog.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-web-link-actions.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-working-status-shared-clock.test.tsx",
+ "src/renderer/src/components/native-chat/structured-agent-session-message-projection.test.ts",
+ "src/renderer/src/components/native-chat/structured-attention-surface.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-context-menu.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-live-session-pending.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.test.ts",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-provisional.test.tsx",
+ "src/renderer/src/components/new-workspace/ProjectComboboxRow.test.tsx",
+ "src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx",
+ "src/renderer/src/components/onboarding/AgentStep.test.tsx",
+ "src/renderer/src/components/onboarding/OnboardingInlineCommandTerminal.test.ts",
+ "src/renderer/src/components/orca-profiles/OrcaProfileSignOutConfirmDialog.test.tsx",
+ "src/renderer/src/components/pet/PetOverlay.frame-durations.test.tsx",
+ "src/renderer/src/components/ports/WorkspacePortScanner.test.tsx",
+ "src/renderer/src/components/quick-open-file-list.react.test.tsx",
+ "src/renderer/src/components/repo/CreateFromPicker.test.tsx",
+ "src/renderer/src/components/right-sidebar/SessionRowTrailingActions.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts",
+ "src/renderer/src/components/right-sidebar/active-checks-status.test.ts",
+ "src/renderer/src/components/right-sidebar/activity-bar-overflow.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-scope-state.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-search-scope-identity.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-publication-gate.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.test.ts",
+ "src/renderer/src/components/right-sidebar/branch-line-total-request-gate.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-hosted-review-click-routing.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-review-lookup-authority.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-create-review.test.tsx",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-manual-refresh.test.tsx",
+ "src/renderer/src/components/right-sidebar/file-explorer-drag-scroll-marker.test.tsx",
+ "src/renderer/src/components/right-sidebar/file-explorer-name-filter-projection.test.ts",
+ "src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comment-presentation.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx",
+ "src/renderer/src/components/right-sidebar/right-sidebar-titlebar-drag-regions.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control-primary-action-tooltip.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-push-recovery.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-split-open.test.ts",
+ "src/renderer/src/components/right-sidebar/use-ai-vault-search.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.test.ts",
+ "src/renderer/src/components/right-sidebar/use-source-control-ai.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx",
+ "src/renderer/src/components/settings/BranchPrefixFeedback.test.tsx",
+ "src/renderer/src/components/settings/BrowserSshWorkspaceRoutingSetting.test.tsx",
+ "src/renderer/src/components/settings/CliSection.test.tsx",
+ "src/renderer/src/components/settings/CliSkillRuntimeSetup.test.tsx",
+ "src/renderer/src/components/settings/CloudVmSetupGuide.test.tsx",
+ "src/renderer/src/components/settings/EditorWordWrapSetting.test.tsx",
+ "src/renderer/src/components/settings/OpenInMenuSetting.test.ts",
+ "src/renderer/src/components/settings/RemoteServerUpdateDialog.test.tsx",
+ "src/renderer/src/components/settings/RuntimePairingUrlGenerator.test.tsx",
+ "src/renderer/src/components/settings/TaskSourceLinearSetup.test.tsx",
+ "src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx",
+ "src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx",
+ "src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts",
+ "src/renderer/src/components/settings/mobile-network-interface-selection.test.ts",
+ "src/renderer/src/components/settings/provider-account-scope.test.ts",
+ "src/renderer/src/components/settings/provider-rate-limit-scope-panels.test.tsx",
+ "src/renderer/src/components/settings/repository-hook-settings-draft.test.ts",
+ "src/renderer/src/components/settings/runtime-server-row-unverifiable-host.test.tsx",
+ "src/renderer/src/components/settings/shortcut-binding-list-mutations.test.ts",
+ "src/renderer/src/components/settings/shortcut-recording-state.test.ts",
+ "src/renderer/src/components/settings/ssh-target-draft.test.ts",
+ "src/renderer/src/components/settings/task-tracker-integration-cards.test.tsx",
+ "src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx",
+ "src/renderer/src/components/sidebar/ImportedWorktreesVisibilityLine.test.tsx",
+ "src/renderer/src/components/sidebar/MarkdownImageLightbox.test.tsx",
+ "src/renderer/src/components/sidebar/ProjectGroupDeleteDialog.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarWorkspaceFilterSection.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx",
+ "src/renderer/src/components/sidebar/delete-worktree-toast.test.ts",
+ "src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts",
+ "src/renderer/src/components/sidebar/project-group-header-dom.test.ts",
+ "src/renderer/src/components/sidebar/project-group-header-drop.test.ts",
+ "src/renderer/src/components/sidebar/project-header-drop.test.ts",
+ "src/renderer/src/components/sidebar/prompt-cache-countdown-clock.test.ts",
+ "src/renderer/src/components/sidebar/remote-file-browser-helpers.test.ts",
+ "src/renderer/src/components/sidebar/use-feedback-image-drop.test.tsx",
+ "src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx",
+ "src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts",
+ "src/renderer/src/components/sidebar/useRenderedSetupScriptPromptState.test.ts",
+ "src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts",
+ "src/renderer/src/components/sidebar/worktree-delete-host-qualification.test.ts",
+ "src/renderer/src/components/sidebar/worktree-filter-visibility.test.ts",
+ "src/renderer/src/components/sidebar/worktree-lineage-projection.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/grouping/build-rows.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/render-row-lookup.folder-workspace.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/use-selection-host-collision.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-meta-updates.test.ts",
+ "src/renderer/src/components/sidebar/worktree-name-suggestions.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sidebar-pointer-drag-dom.test.ts",
+ "src/renderer/src/components/sidebar/worktree-subagent-child-rows.test.ts",
+ "src/renderer/src/components/sidebar/worktree-visibility-source-provenance.test.ts",
+ "src/renderer/src/components/skills/SkillInstallManagementDialog.test.tsx",
+ "src/renderer/src/components/skills/skill-description-length.test.ts",
+ "src/renderer/src/components/skills/skill-install-provider-groups.test.ts",
+ "src/renderer/src/components/skills/skill-install-workspace-choices.test.ts",
+ "src/renderer/src/components/skills/skill-package-checklist-items.test.ts",
+ "src/renderer/src/components/skills/skill-share-selection.test.ts",
+ "src/renderer/src/components/stats/usage-overview-model.test.ts",
+ "src/renderer/src/components/status-bar/RuntimeHostStatusRow.test.tsx",
+ "src/renderer/src/components/status-bar/resource-session-classification-parity.test.ts",
+ "src/renderer/src/components/status-bar/usage-error-copy.test.ts",
+ "src/renderer/src/components/status-bar/use-resource-session-inventory.test.tsx",
+ "src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx",
+ "src/renderer/src/components/status-bar/workspace-space-presentation.test.ts",
+ "src/renderer/src/components/tab-bar/client-hosted-browser-row-strip-placement.test.ts",
+ "src/renderer/src/components/tab-bar/group-tab-order.test.ts",
+ "src/renderer/src/components/tab-bar/tab-agent-launch-options.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-file-matches.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-menu-options.test.ts",
+ "src/renderer/src/components/tab-group/TabGroupSplitLayout.test.ts",
+ "src/renderer/src/components/tab-group/TabPaneColumnSplitDragOverlay.test.tsx",
+ "src/renderer/src/components/tab-group/tab-group-body-anchor.test.ts",
+ "src/renderer/src/components/tab-group/useTabGroupCreationCommands.local-shell.test.ts",
+ "src/renderer/src/components/task-page-github-resume-cache.test.ts",
+ "src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts",
+ "src/renderer/src/components/task-page-new-issue-draft.test.ts",
+ "src/renderer/src/components/task-page-pagination-page-numbers.test.ts",
+ "src/renderer/src/components/task-page-repo-source-divergence.test.ts",
+ "src/renderer/src/components/terminal-pane/TerminalSshReconnectOverlay.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-interrupt-inference.test.ts",
+ "src/renderer/src/components/terminal-pane/command-code-output-ownership.test.ts",
+ "src/renderer/src/components/terminal-pane/desktop-fit-fallback.test.ts",
+ "src/renderer/src/components/terminal-pane/direct-ssh-hidden-output-restore-unavailable-banner.test.ts",
+ "src/renderer/src/components/terminal-pane/paired-parking-unverifiable-host.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-foreground-inspect-observation-identity.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-repaint.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-queued-startup-consume.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-windows-cjk-repaint.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/foreground-renderer-risk-scan-tail.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/unbound-pane-spawn-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-dispatcher-push-reattach.test.ts",
+ "src/renderer/src/components/terminal-pane/regular-terminal-focus-ownership.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-outage-toast-flood-and-stuck-reconnect.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-handoff.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-outcome-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-resubscribe-failure-recovery-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts",
+ "src/renderer/src/components/terminal-pane/repro-8832-url-next-line.test.ts",
+ "src/renderer/src/components/terminal-pane/session-restored-banner-pane-state.test.tsx",
+ "src/renderer/src/components/terminal-pane/shell-ready-marker-scan.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-capped-buffer-retention.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-context-menu-dismiss.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-fit-restore.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-handle-copy.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-http-url-extraction.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-deferred-chord.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-won-composition-order.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-action-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-file-open-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-provider-batching.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-remote-runtime-ssh-open.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-worktree-root-activation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-wsl-path-mapping.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-listener-order-parity.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-store-subscription-budget.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parser-handler-guard.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-target-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-remote-runtime-recovery-ui-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-shortcut-ctrl-arrow.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-user-input-signal.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-webgl-atlas-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/title-agent-identity.test.ts",
+ "src/renderer/src/components/terminal-pane/use-system-prefers-dark.test.ts",
+ "src/renderer/src/components/terminal-pane/xterm-bypass-policy-ios.test.ts",
+ "src/renderer/src/components/unexpected-signout/unexpected-signout-card.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-row-order.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-deletion-phases.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-controls.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-flat-list.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-scanned-host-confirmation-removal.test.tsx",
+ "src/renderer/src/components/workspace-emoji/WorkspaceEmojiSuggestionPopover.test.tsx",
+ "src/renderer/src/components/worktree-jump-palette-quick-action-availability.test.tsx",
+ "src/renderer/src/components/worktree-jump-palette-source-context-boundary.test.ts",
+ "src/renderer/src/hooks/composer-branch-selection.test.ts",
+ "src/renderer/src/hooks/composer-state/composer-name-source-selection.test.ts",
+ "src/renderer/src/hooks/composer-state/draft-target-sync.test.ts",
+ "src/renderer/src/hooks/composer-state/quick-creation-request.test.ts",
+ "src/renderer/src/hooks/direct-ssh-state-routing.test.ts",
+ "src/renderer/src/hooks/remote-workspace-session-merge-closed-terminal-tombstone.test.ts",
+ "src/renderer/src/hooks/runtime-client-events-sync.test.ts",
+ "src/renderer/src/hooks/unpaired-device-auth-notification.test.ts",
+ "src/renderer/src/hooks/use-now.test.ts",
+ "src/renderer/src/hooks/use-task-page-github-work-item-mutation-host.test.ts",
+ "src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.away.test.ts",
+ "src/renderer/src/hooks/useAutoAckViewedAgent.floating-panel.test.ts",
+ "src/renderer/src/hooks/useComposerState-host-context-boundaries.test.ts",
+ "src/renderer/src/hooks/useGlobalFileDrop.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-turn-completion.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-browser-navigation.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-updater-status.test.ts",
+ "src/renderer/src/hooks/useResetCountdownClock.test.ts",
+ "src/renderer/src/hooks/useSidebarResize.test.ts",
+ "src/renderer/src/i18n/intl-locale.test.ts",
+ "src/renderer/src/i18n/lazy-locale.test.ts",
+ "src/renderer/src/i18n/technical-literal-catalog-values.test.ts",
+ "src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts",
+ "src/renderer/src/lib/active-agent-note-send-explicit-target.test.ts",
+ "src/renderer/src/lib/agent-hibernation-visibility.test.ts",
+ "src/renderer/src/lib/agent-launch-routing.test.ts",
+ "src/renderer/src/lib/agent-paste-draft-submit-retry.test.ts",
+ "src/renderer/src/lib/agent-status-epoch-clock.test.ts",
+ "src/renderer/src/lib/ai-vault-omp-cold-resume.test.ts",
+ "src/renderer/src/lib/ai-vault-resume-command.drop-repin.test.ts",
+ "src/renderer/src/lib/cmd-j-linear-issue-intent.test.ts",
+ "src/renderer/src/lib/cmd-j-section-leadership.test.ts",
+ "src/renderer/src/lib/codex-stale-pane-sweep.test.ts",
+ "src/renderer/src/lib/create-untitled-markdown.test.ts",
+ "src/renderer/src/lib/doc-preview-grants.test.ts",
+ "src/renderer/src/lib/editor-file-operation-owner.test.ts",
+ "src/renderer/src/lib/ephemeral-vm-worktree-creation.test.ts",
+ "src/renderer/src/lib/external-editor-open-capability.test.ts",
+ "src/renderer/src/lib/feedback-image-attachments.test.ts",
+ "src/renderer/src/lib/foreground-terminal-tabs.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-drain.test.ts",
+ "src/renderer/src/lib/ime-composition-keyboard-event.test.ts",
+ "src/renderer/src/lib/large-text-control-paste.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab.test.ts",
+ "src/renderer/src/lib/launch-ai-vault-session.test.ts",
+ "src/renderer/src/lib/linear-agent-skill-update-command.test.ts",
+ "src/renderer/src/lib/mobile-terminal-tab-mount.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-nim.test.ts",
+ "src/renderer/src/lib/native-chat-launch-draft-mirrorability.test.ts",
+ "src/renderer/src/lib/nested-repo-selected-paths.test.ts",
+ "src/renderer/src/lib/new-workspace-ssh-gate.test.ts",
+ "src/renderer/src/lib/non-secure-context-crypto.repro.test.ts",
+ "src/renderer/src/lib/open-mobile-emulator-tab.test.ts",
+ "src/renderer/src/lib/open-tab-occupant-agent.test.ts",
+ "src/renderer/src/lib/pane-manager/browser-mobile-driver-state.test.ts",
+ "src/renderer/src/lib/pane-manager/mobile-fit-overrides.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-fit.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-key-resolution.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-render-pause-release.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-webgl-auto-policy.test.ts",
+ "src/renderer/src/lib/primary-selection-paste.test.ts",
+ "src/renderer/src/lib/project-clone-url-prefill.test.ts",
+ "src/renderer/src/lib/project-host-setup-options.test.ts",
+ "src/renderer/src/lib/remap-open-editor-tabs-for-path-change.test.ts",
+ "src/renderer/src/lib/renderer-memory-profile.test.ts",
+ "src/renderer/src/lib/repo-search.test.ts",
+ "src/renderer/src/lib/repo-slug-cache.test.ts",
+ "src/renderer/src/lib/runtime-session-mirror-targets.test.ts",
+ "src/renderer/src/lib/runtime-workspace-file-route.test.ts",
+ "src/renderer/src/lib/settled-worker-wake-policy.test.ts",
+ "src/renderer/src/lib/skill-freshness-display-status.test.ts",
+ "src/renderer/src/lib/structured-agent-launch-no-terminal-fallback.test.ts",
+ "src/renderer/src/lib/structured-agent-session-tab-activation.test.ts",
+ "src/renderer/src/lib/terminal-input-activity-coalescing.test.ts",
+ "src/renderer/src/lib/text-control-paste-ownership.test.ts",
+ "src/renderer/src/lib/tui-agent-startup.test.ts",
+ "src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx",
+ "src/renderer/src/lib/use-tab-agent-pi-identity.test.ts",
+ "src/renderer/src/lib/wake-sleeping-agents-live-done.test.ts",
+ "src/renderer/src/lib/workspace-session-liveness.test.ts",
+ "src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts",
+ "src/renderer/src/lib/workspace-tab-palette-activation.test.ts",
+ "src/renderer/src/lib/workspace-tab-palette-search.test.ts",
+ "src/renderer/src/lib/worktree-activation-structured-chat-surface.test.ts",
+ "src/renderer/src/lib/worktree-activation-web-runtime.test.ts",
+ "src/renderer/src/lib/worktree-creation-agent-seeding.test.ts",
+ "src/renderer/src/lib/worktree-creation-flow-dedupe.test.ts",
+ "src/renderer/src/lib/worktree-creation-surface.test.ts",
+ "src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts",
+ "src/renderer/src/lib/worktree-palette-review-match.test.ts",
+ "src/renderer/src/lib/worktree-reactivation-tab-forkbomb.test.ts",
+ "src/renderer/src/runtime/local-structured-session-tabs-sync/retired-epoch-repair.test.ts",
+ "src/renderer/src/runtime/mobile-markdown-bridge-save-guards.test.ts",
+ "src/renderer/src/runtime/native-chat-launch-draft-runtime-resolution.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-end-verdict.test.ts",
+ "src/renderer/src/runtime/runtime-environment-ssh-state.test.ts",
+ "src/renderer/src/runtime/runtime-git-client.test.ts",
+ "src/renderer/src/runtime/runtime-jira-client.test.ts",
+ "src/renderer/src/runtime/runtime-path-existence-batch.test.ts",
+ "src/renderer/src/runtime/runtime-provider-search-bounds.test.ts",
+ "src/renderer/src/runtime/runtime-rpc-client.test.ts",
+ "src/renderer/src/runtime/runtime-skills-client.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-status-feed-lifecycle.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-browser.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts",
+ "src/renderer/src/runtime/web-runtime-browser-tab-staging-hosting-intent.test.ts",
+ "src/renderer/src/runtime/web-session-open-files-batch-equivalence.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-publisher-identity-lineage.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-terminal-bootstrap.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery.test.ts",
+ "src/renderer/src/runtime/worktree-create-base.test.ts",
+ "src/renderer/src/ssh/ssh-connect-verb.test.ts",
+ "src/renderer/src/store/pinned-tab-close-guard.test.ts",
+ "src/renderer/src/store/plugin-language-packs.test.ts",
+ "src/renderer/src/store/slices/agent-generated-tab-title.test.ts",
+ "src/renderer/src/store/slices/agent-status-freshness-scheduler.test.ts",
+ "src/renderer/src/store/slices/agent-status-provider-session.test.ts",
+ "src/renderer/src/store/slices/agent-status-reminted-pane-key.test.ts",
+ "src/renderer/src/store/slices/agent-status-worktree-purge-leak.test.ts",
+ "src/renderer/src/store/slices/browser-workspace-host-ownership.test.ts",
+ "src/renderer/src/store/slices/direct-ssh-terminal-retry.test.ts",
+ "src/renderer/src/store/slices/editor-branch-diff-snapshots.test.ts",
+ "src/renderer/src/store/slices/editor-branch-line-total.test.ts",
+ "src/renderer/src/store/slices/editor-git-status-reconciliation.test.ts",
+ "src/renderer/src/store/slices/editor-rich-markdown-size-override.test.ts",
+ "src/renderer/src/store/slices/editor/file-ids/hydrated-editor-projections.test.ts",
+ "src/renderer/src/store/slices/editor/git/git-status-reconciliation.perf.test.ts",
+ "src/renderer/src/store/slices/generation-records-worktree-removal-leak.test.ts",
+ "src/renderer/src/store/slices/github-pr-branch-linked-pr-divergence.test.ts",
+ "src/renderer/src/store/slices/hosted-review-cache.test.ts",
+ "src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts",
+ "src/renderer/src/store/slices/remote-server-updates.integration.test.ts",
+ "src/renderer/src/store/slices/repos-module-lifetime-coordinators.test.ts",
+ "src/renderer/src/store/slices/repos-nested-import-refresh-failures.test.ts",
+ "src/renderer/src/store/slices/repos-project-groups-delete.test.ts",
+ "src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts",
+ "src/renderer/src/store/slices/runtime-host-status-entry-parity.test.ts",
+ "src/renderer/src/store/slices/runtime-status-first-publication.test.ts",
+ "src/renderer/src/store/slices/runtime-status-refresh-diagnostics.test.ts",
+ "src/renderer/src/store/slices/runtime-status-restored-browser-host-attach.test.ts",
+ "src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts",
+ "src/renderer/src/store/slices/tabs-empty-split-activation.test.ts",
+ "src/renderer/src/store/slices/tabs-label-and-pin-state.test.ts",
+ "src/renderer/src/store/slices/tabs/tab-selection-contract.test.ts",
+ "src/renderer/src/store/slices/terminal-input-activity-store-write.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-recovery-remount.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-retirement-store.test.ts",
+ "src/renderer/src/store/slices/ui-hydration-workspace-cleanup-browse.test.ts",
+ "src/renderer/src/store/slices/worktree-sleep-intent-lifecycle.test.ts",
+ "src/renderer/src/store/slices/worktrees-removal-state-cleanup.test.ts",
+ "src/renderer/src/store/slices/worktrees/session/worktree-no-op-notifications.test.ts",
+ "src/renderer/src/store/terminals/workspace-terminal-placeholders.test.ts",
+ "src/renderer/src/store/worktree-diff-comments-selector.test.ts",
+ "src/renderer/src/web/web-preload-api-keybindings.test.ts",
+ "src/renderer/src/web/web-runtime-client-file-watch-replay.test.ts",
+ "src/renderer/src/web/web-runtime-connection-frame-router.test.ts",
+ "src/renderer/src/web/web-runtime-status-owner.test.ts",
+ "src/renderer/src/web/web-viewport-shell.test.ts",
+ "src/shared/agent-cli-flag-detection.test.ts",
+ "src/shared/agent-cli-install-dir-fallback.test.ts",
+ "src/shared/agent-hook-endpoint-file.test.ts",
+ "src/shared/agent-hook-listener-extraction-characterization.test.ts",
+ "src/shared/agent-hook-listener-roster-retention.test.ts",
+ "src/shared/agent-kind.test.ts",
+ "src/shared/agent-launch-operation.test.ts",
+ "src/shared/agent-status-child-work-admission.test.ts",
+ "src/shared/agent-status-observation.test.ts",
+ "src/shared/agent-status-run-capability.test.ts",
+ "src/shared/agent-status-transport-envelope.test.ts",
+ "src/shared/agent-title-decoration.test.ts",
+ "src/shared/agent-title-identity-characterization.test.ts",
+ "src/shared/ai-vault-session-depth.test.ts",
+ "src/shared/automation-schedule-drift.test.ts",
+ "src/shared/branch-prefix.test.ts",
+ "src/shared/browser-client-host-reconciliation-protocol.test.ts",
+ "src/shared/cheap-process-table-snapshot.test.ts",
+ "src/shared/child-process/windows-cmd-shim-resolution.test.ts",
+ "src/shared/child-process/windows-command-line.test.ts",
+ "src/shared/claude-background-task-kind.test.ts",
+ "src/shared/claude-statusline-rate-limits.test.ts",
+ "src/shared/cli-runtime-pairing-boundary.test.ts",
+ "src/shared/codex-reset-credit-scope.test.ts",
+ "src/shared/commit-message-agent-spec.test.ts",
+ "src/shared/commit-message-prompt.test.ts",
+ "src/shared/computer-use-error-recovery.test.ts",
+ "src/shared/draft-paste-ready-scanner.test.ts",
+ "src/shared/feature-education-telemetry.test.ts",
+ "src/shared/file-link-location.test.ts",
+ "src/shared/foreground-process-selection.test.ts",
+ "src/shared/git-diff-transport-budget.test.ts",
+ "src/shared/git-history-graph.test.ts",
+ "src/shared/git-merge-tree-capability.test.ts",
+ "src/shared/git-status-line-stat-inputs.test.ts",
+ "src/shared/git-upstream-status.test.ts",
+ "src/shared/grok-session-paths.test.ts",
+ "src/shared/hermes-session-run-index.test.ts",
+ "src/shared/hosted-review-github.test.ts",
+ "src/shared/image-data-uri.test.ts",
+ "src/shared/macos-symbolic-hotkeys.test.ts",
+ "src/shared/mobile-push-contract.test.ts",
+ "src/shared/mobile-relay-close-codes.test.ts",
+ "src/shared/native-chat-agent-profiles.test.ts",
+ "src/shared/native-chat-agent-support.test.ts",
+ "src/shared/native-chat-background-task-row.test.ts",
+ "src/shared/native-chat-streaming.test.ts",
+ "src/shared/native-chat-subagent-summary.test.ts",
+ "src/shared/native-chat-tool-attribution-allocation.test.ts",
+ "src/shared/native-chat-turn-fold.test.ts",
+ "src/shared/native-chat-turn-status.test.ts",
+ "src/shared/nested-repo-telemetry.test.ts",
+ "src/shared/network/server-share-address.test.ts",
+ "src/shared/new-workspace/smart-workspace-url-source-results.test.ts",
+ "src/shared/new-workspace/workspace-source.test.ts",
+ "src/shared/omp-pi-semantic-title-preservation.test.ts",
+ "src/shared/onboarding-tour-telemetry-events.test.ts",
+ "src/shared/orchestration-timing-budgets.test.ts",
+ "src/shared/osc-title-scan-tail-retention.test.ts",
+ "src/shared/plugins/plugin-kill-list.test.ts",
+ "src/shared/plugins/plugin-panel-message-budget-traversal.test.ts",
+ "src/shared/powershell-native-argument.test.ts",
+ "src/shared/pr-check-severity-order.test.ts",
+ "src/shared/pr-comment-audience.test.ts",
+ "src/shared/quick-open-filter.renderer-safety.test.ts",
+ "src/shared/quick-open-listing-limits.test.ts",
+ "src/shared/remote-foreground-evidence.test.ts",
+ "src/shared/remote-pairing-address.test.ts",
+ "src/shared/remote-rpc-content-budget.test.ts",
+ "src/shared/remote-runtime-memory-limits.test.ts",
+ "src/shared/remote-runtime-request-websocket.test.ts",
+ "src/shared/remote-runtime-shared-control-retired-request-ids.test.ts",
+ "src/shared/remote-runtime-shared-control-standing-intent.test.ts",
+ "src/shared/ripgrep-process-availability.test.ts",
+ "src/shared/rpc-contract/agent-launch-params.test.ts",
+ "src/shared/runtime-client-export-parity.test.ts",
+ "src/shared/runtime-workspace-file-owner.test.ts",
+ "src/shared/setup-script-shebang.test.ts",
+ "src/shared/skill-bundle-install-contract.test.ts",
+ "src/shared/skill-delete-contract.test.ts",
+ "src/shared/source-control-create-review-intent.test.ts",
+ "src/shared/structured-agent-session-agent-status.test.ts",
+ "src/shared/structured-agent-session-create.test.ts",
+ "src/shared/structured-agent-session-reducer.test.ts",
+ "src/shared/structured-agent-session-turn-timing.test.ts",
+ "src/shared/terminal-composer-draft.test.ts",
+ "src/shared/terminal-input.test.ts",
+ "src/shared/terminal-line-height-settings.test.ts",
+ "src/shared/terminal-osc-color-reply.test.ts",
+ "src/shared/terminal-selection-gutter.test.ts",
+ "src/shared/terminal-title-agent-type.test.ts",
+ "src/shared/test-code-path.test.ts",
+ "src/shared/ui-language.test.ts",
+ "src/shared/updater-windows-signature-check.test.ts",
+ "src/shared/windows-cmd-runner-delayed-launch.test.ts",
+ "src/shared/workspace-session-tab-focus-schema.test.ts",
+ "src/shared/workspace-session-terminal-schema.test.ts",
+ "src/shared/worktree/archive-failure-blocking-capability.test.ts",
+ "src/shared/worktree/base-ref.test.ts",
+ "src/shared/worktree/removal-fence-error.test.ts",
+ "src/shared/wsl-exec-mode-separator.test.ts",
+ "tests/e2e/helpers/electron-launch-args.unit.test.ts",
+ "tests/e2e/helpers/fake-agent-command-override.unit.test.ts",
+ "tests/e2e/paced-terminal-typing.unit.test.ts",
+ "tests/e2e/terminal-split-activation-latency-report.unit.test.ts",
+ "tests/tools/omp-config-root-relay-shell.test.mjs",
+ "tests/tools/windows-pty-native-capability-smoke/packaged-node-pty-capability-oracle.test.mjs"
+ ],
+ "durationMs": 851040
+ },
+ {
+ "files": [
+ "config/scripts/casting-code-quality.test.mjs",
+ "config/scripts/check-changed-code-quality.test.mjs",
+ "config/scripts/dev-channel-windows-workflow-contract.test.mjs",
+ "config/scripts/dev-electron-bundle-cache.test.ts",
+ "config/scripts/lag-probe-failures.test.mjs",
+ "config/scripts/locale-repair-catalog-missing-leaves.test.mjs",
+ "config/scripts/mobile-web-app-browser-pane-render.test.mjs",
+ "config/scripts/mobile-web-app-files-render.test.mjs",
+ "config/scripts/mobile-web-app-push-subsystem-closure.test.mjs",
+ "config/scripts/mobile-web-app-session-render.test.mjs",
+ "config/scripts/mobile-web-app-source-control-text-inputs.test.mjs",
+ "config/scripts/mobile-web-bundle-packaging-workflow-contract.test.mjs",
+ "config/scripts/oxlint-cli-invocation.test.mjs",
+ "config/scripts/pr-e2e-pane-close-routing.test.mjs",
+ "config/scripts/relay-asset-line-ending-pin.test.mjs",
+ "config/scripts/release-cut-token-permissions.test.mjs",
+ "config/scripts/release-e2e-dispatch-contract.test.mjs",
+ "config/scripts/release-mac-build-workflow-dispatch.test.mjs",
+ "config/scripts/run-terminal-scale-perf-report-gate.test.mjs",
+ "config/scripts/skill-critical-guidance.test.mjs",
+ "config/scripts/skill-update-roundtrip-workflow.test.mjs",
+ "config/scripts/terminal-ime-e2e-workflow.test.mjs",
+ "config/scripts/verify-linux-glibc-floor.test.mjs",
+ "config/scripts/windows-pe-machine.test.mjs",
+ "config/scripts/windows-pty-native-capability-workflow.test.mjs",
+ "src/cli/args.test.ts",
+ "src/cli/browser.test.ts",
+ "src/cli/cli-version.test.ts",
+ "src/cli/format.test.ts",
+ "src/cli/host-selector-alternatives.test.ts",
+ "src/cli/index-automation-schedule.test.ts",
+ "src/cli/index-automation-source-context.test.ts",
+ "src/cli/orchestration-structured-session-no-identity.test.ts",
+ "src/cli/runtime/transport.test.ts",
+ "src/cli/search-command-arguments.test.ts",
+ "src/cli/serve-electron-flag-parity.test.ts",
+ "src/cli/specs/orchestration.test.ts",
+ "src/main/agent-hooks/managed-hook-local-filesystem.test.ts",
+ "src/main/agent-hooks/server-ai-vault-liveness.test.ts",
+ "src/main/agent-hooks/server-authority-evidence.test.ts",
+ "src/main/agent-hooks/server-droid-normalization.test.ts",
+ "src/main/agent-hooks/server-last-status-write.test.ts",
+ "src/main/agent-hooks/server-omp-retired-ingress.test.ts",
+ "src/main/agent-hooks/windows-hook-post-interpreter.test.ts",
+ "src/main/ai-vault-search/session-search-cwd-key.test.ts",
+ "src/main/ai-vault-search/session-search-hit-ranking.test.ts",
+ "src/main/ai-vault-search/session-search-indexer.test.ts",
+ "src/main/ai-vault-search/session-search-instance.test.ts",
+ "src/main/ai-vault-search/session-search-scan-roots.test.ts",
+ "src/main/ai-vault-search/session-search-snippet-marks.test.ts",
+ "src/main/ai-vault-search/session-search-store-scope-catalog.test.ts",
+ "src/main/ai-vault/local-log-tail-reader.test.ts",
+ "src/main/ai-vault/remote-session-scanner-omp-subagents.test.ts",
+ "src/main/ai-vault/remote-session-stream-lifecycle.test.ts",
+ "src/main/ai-vault/session-scanner-background.test.ts",
+ "src/main/ai-vault/session-scanner-claude-cwd-drift.test.ts",
+ "src/main/ai-vault/session-scanner-claude-subagent-prune.test.ts",
+ "src/main/ai-vault/session-scanner-claude-title.test.ts",
+ "src/main/ai-vault/session-scanner-codex-workers.test.ts",
+ "src/main/ai-vault/session-scanner-directory-reader.test.ts",
+ "src/main/ai-vault/session-scanner-graph-parsers.test.ts",
+ "src/main/ai-vault/session-scanner-jsonl-reader.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sources-wsl-stall.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-open.test.ts",
+ "src/main/ai-vault/session-scanner-roots.test.ts",
+ "src/main/ai-vault/session-scanner-service-search-roots.test.ts",
+ "src/main/ai-vault/session-scanner-worker-client.test.ts",
+ "src/main/automations/automation-ssh-readoption-migration.test.ts",
+ "src/main/automations/dispatch-tokens.test.ts",
+ "src/main/automations/external-automation-manager-cache.test.ts",
+ "src/main/automations/retained-run-reconciliation.test.ts",
+ "src/main/browser/agent-browser-orphan-sweep.test.ts",
+ "src/main/browser/browser-client-page-reconciliation-adapters.test.ts",
+ "src/main/browser/browser-client-page-renderer-lifecycle.electron.test.ts",
+ "src/main/browser/browser-cookie-clear-store.test.ts",
+ "src/main/browser/browser-cookie-import-plan-writes.test.ts",
+ "src/main/browser/browser-cookie-import-route-partition-staging.test.ts",
+ "src/main/browser/browser-guest-wheel-zoom-scroll.test.ts",
+ "src/main/browser/browser-identity-mode-store.test.ts",
+ "src/main/browser/browser-manager-grab-capture.test.ts",
+ "src/main/browser/browser-manager-guest-visibility.test.ts",
+ "src/main/browser/browser-network-tunnel-session.test.ts",
+ "src/main/browser/browser-route-webrtc-egress.electron.test.ts",
+ "src/main/browser/browser-screencast-snapshot-scaling.test.ts",
+ "src/main/browser/browser-session-registry-import-boundary.test.ts",
+ "src/main/browser/browser-session-registry.persistence.test.ts",
+ "src/main/browser/browser-webauthn-access.test.ts",
+ "src/main/browser/cdp-ws-proxy.test.ts",
+ "src/main/browser/chromium-cookie-snapshot.test.ts",
+ "src/main/browser/doc-preview-download-block-notice.test.ts",
+ "src/main/browser/electron-debugger-lease.test.ts",
+ "src/main/claude-accounts/claude-account-service-login-process.test.ts",
+ "src/main/claude-accounts/claude-windows-interactive-login.test.ts",
+ "src/main/claude-accounts/keychain-config-directory-aliases.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-launch-refresh.test.ts",
+ "src/main/claude-accounts/windows-command-invocation.test.ts",
+ "src/main/claude-usage/scanner-scan.test.ts",
+ "src/main/claude-usage/store.test.ts",
+ "src/main/claude/claude-agent-sdk-control-requests.test.ts",
+ "src/main/claude/claude-agent-sdk-process-spawn.test.ts",
+ "src/main/claude/claude-history-window-source-budget.test.ts",
+ "src/main/claude/claude-structured-dispatch.test.ts",
+ "src/main/claude/claude-structured-effort-reporting.test.ts",
+ "src/main/claude/claude-structured-journal-translation-background-tasks.test.ts",
+ "src/main/claude/claude-structured-session-recovery.test.ts",
+ "src/main/claude/claude-subagent-roster.test.ts",
+ "src/main/claude/claude-subagent-task-frames.test.ts",
+ "src/main/claude/claude-transcript-branch-graph.test.ts",
+ "src/main/claude/statusline-script.test.ts",
+ "src/main/cli/appimage-registration-lock.test.ts",
+ "src/main/cli/cli-installer-appimage-ownership.test.ts",
+ "src/main/cli/cli-privileged-processes.test.ts",
+ "src/main/cli/windows-launcher-asset.test.ts",
+ "src/main/cli/wsl-cli-powershell-boundary.test.ts",
+ "src/main/codex-accounts/codex-credential-absence-grace.test.ts",
+ "src/main/codex-accounts/codex-login-auth-url.test.ts",
+ "src/main/codex-accounts/fs-utils.test.ts",
+ "src/main/codex-accounts/legacy-wsl-runtime-auth-drain-rollback-script.test.ts",
+ "src/main/codex-accounts/runtime-home-system-resource-materialization.test.ts",
+ "src/main/codex-accounts/service-login-process-teardown.test.ts",
+ "src/main/codex-accounts/service-reauthenticate-activation.test.ts",
+ "src/main/codex-accounts/service-system-default-identity.test.ts",
+ "src/main/codex-accounts/service.test.ts",
+ "src/main/codex-usage/scanner-large-directory.test.ts",
+ "src/main/codex-usage/scanner-paths.test.ts",
+ "src/main/codex/codex-ai-vault-session-resume.test.ts",
+ "src/main/codex/codex-app-server-capability-cache.test.ts",
+ "src/main/codex/codex-app-server-process-teardown.test.ts",
+ "src/main/codex/codex-background-task-tracker.test.ts",
+ "src/main/codex/codex-index-heal-binary-contract.test.ts",
+ "src/main/codex/codex-session-backfill.test.ts",
+ "src/main/codex/codex-session-migration-scheduler.test.ts",
+ "src/main/codex/codex-session-resume-wrong-account.test.ts",
+ "src/main/codex/codex-session-source-home.test.ts",
+ "src/main/codex/codex-stale-pane-accounts.test.ts",
+ "src/main/codex/codex-structured-permission-policy.test.ts",
+ "src/main/codex/codex-structured-session-close.test.ts",
+ "src/main/codex/codex-structured-thread-open.test.ts",
+ "src/main/codex/codex-trust-config-rollback.test.ts",
+ "src/main/codex/codex-trust-grant-ledger.test.ts",
+ "src/main/codex/config-plugin-registration-promotion.test.ts",
+ "src/main/codex/hook-service-runtime-trust-repair.test.ts",
+ "src/main/computer/desktop-script-provider-client.test.ts",
+ "src/main/computer/macos-native-provider-process-reaping.test.ts",
+ "src/main/crash-reporting/gpu-crash-fallback-decision.test.ts",
+ "src/main/crash-reporting/process-gone-classification.test.ts",
+ "src/main/daemon/daemon-audit-eligibility-event.test.ts",
+ "src/main/daemon/daemon-client-notify-settlement.test.ts",
+ "src/main/daemon/daemon-entry.test.ts",
+ "src/main/daemon/daemon-folder-access-mismatch.test.ts",
+ "src/main/daemon/daemon-health-endpoint-entry.test.ts",
+ "src/main/daemon/daemon-init-replacement-reporting.test.ts",
+ "src/main/daemon/daemon-main.test.ts",
+ "src/main/daemon/daemon-ready-identity.test.ts",
+ "src/main/daemon/daemon-scope-death-watch.test.ts",
+ "src/main/daemon/daemon-self-retirement-respawn.test.ts",
+ "src/main/daemon/daemon-server-async-spawn-cancellation.test.ts",
+ "src/main/daemon/daemon-shutdown-final-checkpoint-caller-deadline.test.ts",
+ "src/main/daemon/daemon-stream-droppable-membership.test.ts",
+ "src/main/daemon/history-manager-disabled-sessions-leak.test.ts",
+ "src/main/daemon/history-reader-memory.test.ts",
+ "src/main/daemon/pty-subprocess-env-retention.test.ts",
+ "src/main/daemon/pty-subprocess-io-failure-cleanup.test.ts",
+ "src/main/daemon/pty-subprocess-managed-agent-env.test.ts",
+ "src/main/daemon/pty-subprocess-windows-shell-launch.test.ts",
+ "src/main/daemon/startup-device-attributes-responder.test.ts",
+ "src/main/daemon/terminal-history-restorable-retention.test.ts",
+ "src/main/daemon/terminal-shell-lifecycle-scanner.test.ts",
+ "src/main/daemon/terminal-shell-recovery-barrier.test.ts",
+ "src/main/durable-file-write.test.ts",
+ "src/main/emulator/backends/ios-emulator-backend.test.ts",
+ "src/main/emulator/mjpeg-frame-stream.test.ts",
+ "src/main/emulator/scrcpy-video-registry.test.ts",
+ "src/main/folder-upgrade-worktree-path.test.ts",
+ "src/main/ghostty/parser.test.ts",
+ "src/main/git/command-runner/wsl-host-failure.test.ts",
+ "src/main/git/hosted-remote-url.test.ts",
+ "src/main/git/porcelain-v1-records.test.ts",
+ "src/main/git/remote-url-probe.test.ts",
+ "src/main/git/remote.test.ts",
+ "src/main/git/repo-default-remote.test.ts",
+ "src/main/git/runner-wsl-gh-fallback.test.ts",
+ "src/main/git/runner-wsl-linked-gitdir-timeout.test.ts",
+ "src/main/git/status-diff.test.ts",
+ "src/main/git/status-porcelain-parser.test.ts",
+ "src/main/git/status-symlink-probe-budget.test.ts",
+ "src/main/git/status-upstream-negative-cache.test.ts",
+ "src/main/git/worktree-add-local-base-refresh.test.ts",
+ "src/main/git/worktree-add-timeout-override.test.ts",
+ "src/main/git/worktree-create-admission-tier.test.ts",
+ "src/main/git/worktree-git-capabilities.test.ts",
+ "src/main/git/worktree-mutation-route-invalidation.test.ts",
+ "src/main/git/worktree-porcelain-parsing.test.ts",
+ "src/main/git/worktree-scan-cache-annotation-reuse.test.ts",
+ "src/main/git/worktree-scan-cache-sharing.test.ts",
+ "src/main/github/auth-diagnose.test.ts",
+ "src/main/github/client-create-pr.test.ts",
+ "src/main/github/client-pr-check-details.test.ts",
+ "src/main/github/client-pr-conflict-summary.test.ts",
+ "src/main/github/client-pr-linked-lookup.test.ts",
+ "src/main/github/client-ssh-provider-execution-boundary.test.ts",
+ "src/main/github/client-stack-merge-guard.test.ts",
+ "src/main/github/comment-reactions.test.ts",
+ "src/main/github/conflict-summary.test.ts",
+ "src/main/github/github-pr-stack.test.ts",
+ "src/main/github/pr-refresh-coordinator-refresh-events.test.ts",
+ "src/main/github/pr-refresh-coordinator-visible-follow-up.test.ts",
+ "src/main/github/pr-start-point-compare-base.test.ts",
+ "src/main/github/project-view.test.ts",
+ "src/main/github/project-view/project-field-mutations.test.ts",
+ "src/main/github/project-view/repository-field-options.test.ts",
+ "src/main/github/rate-limit.test.ts",
+ "src/main/github/work-item-search-isolation.test.ts",
+ "src/main/gitlab/gl-utils.test.ts",
+ "src/main/hook-archive-timeout-observation.test.ts",
+ "src/main/host/electron-secret-store.test.ts",
+ "src/main/ipc/crash-reporting-renderer-error-report-attribution.test.ts",
+ "src/main/ipc/created-worktree-reconciliation.test.ts",
+ "src/main/ipc/dashboard-popout.test.ts",
+ "src/main/ipc/desktop-renderer-runtime-capabilities.test.ts",
+ "src/main/ipc/filesystem-watcher-canonical-root-paths.test.ts",
+ "src/main/ipc/filesystem-watcher-dormant-rearm.test.ts",
+ "src/main/ipc/filesystem-watcher-event-batch.test.ts",
+ "src/main/ipc/filesystem-watcher-large-batch.test.ts",
+ "src/main/ipc/github-repo-access-guards.test.ts",
+ "src/main/ipc/gitlab.test.ts",
+ "src/main/ipc/hosted-review.test.ts",
+ "src/main/ipc/local-network-connection-test.test.ts",
+ "src/main/ipc/notifications-mobile-fanout.test.ts",
+ "src/main/ipc/orca-profile-org-members-handlers.test.ts",
+ "src/main/ipc/parcel-watcher-entry-path.test.ts",
+ "src/main/ipc/plugins.test.ts",
+ "src/main/ipc/preflight-remote-ssh.test.ts",
+ "src/main/ipc/preflight-wsl-agent-detection.test.ts",
+ "src/main/ipc/pty-daemon-ssh-lease-lifecycle.test.ts",
+ "src/main/ipc/pty-listener-teardown-and-orphans.test.ts",
+ "src/main/ipc/pty-pane-reservation-settlement.test.ts",
+ "src/main/ipc/pty-pending-data-drain-queue.test.ts",
+ "src/main/ipc/pty-pending-projection-admissions.test.ts",
+ "src/main/ipc/pty-persisted-incarnation-repair.test.ts",
+ "src/main/ipc/pty-ssh-stop-verdict.test.ts",
+ "src/main/ipc/pty-startup-barrier-and-listing.test.ts",
+ "src/main/ipc/pty/daemon-late-exit.test.ts",
+ "src/main/ipc/pty/ipc/spawn-reattach-size-cache.test.ts",
+ "src/main/ipc/rate-limits.test.ts",
+ "src/main/ipc/remote-watcher-event-batch.test.ts",
+ "src/main/ipc/runtime-environment-diagnostics-broadcast.test.ts",
+ "src/main/ipc/runtime-environment-status-recovery.test.ts",
+ "src/main/ipc/runtime-environment-support-routing.test.ts",
+ "src/main/ipc/skill-cloud-install-ipc-schemas.test.ts",
+ "src/main/ipc/ssh-handler-reregistration.test.ts",
+ "src/main/ipc/ssh-host-partition-session-export.test.ts",
+ "src/main/ipc/ssh-pty-consumer-identity.test.ts",
+ "src/main/ipc/ssh-relay-reset-resume.test.ts",
+ "src/main/ipc/ssh.test.ts",
+ "src/main/ipc/usage-provider-handlers.test.ts",
+ "src/main/ipc/watcher-removal-gate.test.ts",
+ "src/main/ipc/workspace-cleanup-execution-host-routing.test.ts",
+ "src/main/ipc/workspace-cleanup-local-git-routing.test.ts",
+ "src/main/ipc/worktree-git-common-watch.test.ts",
+ "src/main/ipc/worktree-push-target-cleanup.test.ts",
+ "src/main/ipc/worktree-push-target-refspec-real-git.test.ts",
+ "src/main/ipc/worktrees-delete-pty-teardown.test.ts",
+ "src/main/ipc/worktrees-remove-archive-hooks.test.ts",
+ "src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts",
+ "src/main/jira/adf-markdown.test.ts",
+ "src/main/jira/attachment-images.test.ts",
+ "src/main/kimi/hook-service.test.ts",
+ "src/main/linear/issue-context-client.test.ts",
+ "src/main/memory/collector.test.ts",
+ "src/main/memory/host-memory.test.ts",
+ "src/main/minimax/minimax-api-key-store.test.ts",
+ "src/main/muse-usage/snapshot-rollups.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-empty-delta-retention.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-acquisition-options.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-adapter.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-operation-guard.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-journal-handles.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-launch-env.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-launch-send-after-create.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-lease-renewer.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-recovery-exits.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-reconcile.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-status-ownership.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-surface-lifetime.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-rewind-journal-body.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-tui-transcript-catchup.test.ts",
+ "src/main/native-chat/claude-structured-managed-account-support.test.ts",
+ "src/main/native-chat/transcript-watch-resolve-poll.test.ts",
+ "src/main/native-chat/transcript-watch-wsl-exact-path.test.ts",
+ "src/main/native-chat/transcript-window-tool-attribution.test.ts",
+ "src/main/network/electron-proxy-request-guard.test.ts",
+ "src/main/network/proxy-settings.test.ts",
+ "src/main/notifications/announced-notification-registry.test.ts",
+ "src/main/observability/diagnostic-upload-http.test.ts",
+ "src/main/observability/tracer.test.ts",
+ "src/main/opencode-usage/scanner-wsl-gate.test.ts",
+ "src/main/opencode/opencode-data-directory.test.ts",
+ "src/main/orca-profiles/profile-cloud-client.test.ts",
+ "src/main/orca-profiles/profile-cloud-org-members-client.test.ts",
+ "src/main/orca-profiles/profile-cloud-org-members-service.test.ts",
+ "src/main/orca-profiles/profile-cloud-refresh-replay-guard.test.ts",
+ "src/main/orcad/electron-sidecar-method-routing.test.ts",
+ "src/main/orcad/orcad-health.test.ts",
+ "src/main/persistence-deregistered-repo-residue.test.ts",
+ "src/main/persistence-folder-workspace-notes.test.ts",
+ "src/main/persistence-layout-binding-recovery.test.ts",
+ "src/main/persistence-proxy-secret-recovery.test.ts",
+ "src/main/persistence-repo-lifecycle.test.ts",
+ "src/main/persistence-ssh-remote-pty-leases.test.ts",
+ "src/main/persistence-worktree-lineage-and-backups.test.ts",
+ "src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.test.ts",
+ "src/main/persistence/loading-store/normalize-loaded-global-settings.test.ts",
+ "src/main/persistence/loading-store/persisted-state-redundancy.test.ts",
+ "src/main/persistence/runtime-authored-workspace-session-fields.test.ts",
+ "src/main/persistence/tracking-repos/local-worktree-metadata-batch-pruning.bench.test.ts",
+ "src/main/pi/omp-session-status-owner.test.ts",
+ "src/main/plugins/plugin-atomic-file-write.test.ts",
+ "src/main/plugins/plugin-dev-watcher.test.ts",
+ "src/main/plugins/plugin-install.test.ts",
+ "src/main/plugins/plugin-marketplace-installer.test.ts",
+ "src/main/plugins/plugin-private-marketplace.integration.test.ts",
+ "src/main/ports/port-scan-command-client.test.ts",
+ "src/main/powershell-osc133-bootstrap-windows-clm.test.ts",
+ "src/main/protected-secret-persistence.test.ts",
+ "src/main/providers/execution-host-provider-dispatch.test.ts",
+ "src/main/providers/local-pty-provider-foreground-process.test.ts",
+ "src/main/providers/pty-default-cwd.test.ts",
+ "src/main/providers/ssh-filesystem-provider-range.test.ts",
+ "src/main/providers/ssh-filesystem-watch-notifications.test.ts",
+ "src/main/providers/ssh-git-provider-diff.test.ts",
+ "src/main/providers/ssh-git-provider-worktree.test.ts",
+ "src/main/providers/ssh-pty-live-source-restore-respawn.test.ts",
+ "src/main/providers/ssh-pty-provider-exit-race.test.ts",
+ "src/main/providers/ssh-pty-write.test.ts",
+ "src/main/providers/windows-powershell.test.ts",
+ "src/main/providers/working-directory-validation-retention.test.ts",
+ "src/main/providers/working-directory-validation.test.ts",
+ "src/main/proxy-guarded-fetch-call-site-audit.test.ts",
+ "src/main/pty-descendant-termination.test.ts",
+ "src/main/pty/build-mode-env.test.ts",
+ "src/main/rate-limits/antigravity-usage-mirror.test.ts",
+ "src/main/rate-limits/claude-fetcher-fable-usage.test.ts",
+ "src/main/rate-limits/claude-oauth-usage-error.test.ts",
+ "src/main/rate-limits/codex-pty-rate-limit-probe.test.ts",
+ "src/main/rate-limits/grok-auth.test.ts",
+ "src/main/rate-limits/service-minimax-usage.test.ts",
+ "src/main/repo-git-remote-identity-enrichment.test.ts",
+ "src/main/runtime/acknowledged-terminal-tab-retirement.test.ts",
+ "src/main/runtime/agent-prompt-submission-verification.test.ts",
+ "src/main/runtime/agent-session-eviction-settlement-latch.test.ts",
+ "src/main/runtime/agent-session-orphan-child-reaper.test.ts",
+ "src/main/runtime/agent-session-record-conversation-name.test.ts",
+ "src/main/runtime/agent-session-record-unsupported-schema.test.ts",
+ "src/main/runtime/agent-terminal-startup-prompt.test.ts",
+ "src/main/runtime/browser-host-page-placement.test.ts",
+ "src/main/runtime/browser-screencast-driver-scope.test.ts",
+ "src/main/runtime/client-hosted-browser-page-persistence.test.ts",
+ "src/main/runtime/client-session-tab-selection.test.ts",
+ "src/main/runtime/graph-sync-deletion-fence.test.ts",
+ "src/main/runtime/headless-seed-ownership.test.ts",
+ "src/main/runtime/headless-terminal-query-reply-policy.test.ts",
+ "src/main/runtime/linear-save-issue.test.ts",
+ "src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts",
+ "src/main/runtime/orca-runtime-git-branch-diff.test.ts",
+ "src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts",
+ "src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts",
+ "src/main/runtime/orca-runtime-structured-tui-tab-binding.test.ts",
+ "src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts",
+ "src/main/runtime/orca-runtime-terminal-split-authority.test.ts",
+ "src/main/runtime/orchestration-codex-completion-title.test.ts",
+ "src/main/runtime/orchestration-codex-real-pty.integration.test.ts",
+ "src/main/runtime/orchestration-dispatch-mailbox-delivery.test.ts",
+ "src/main/runtime/orchestration-mailbox-crash-recovery.test.ts",
+ "src/main/runtime/orchestration-mailbox-pointer-cli-command.test.ts",
+ "src/main/runtime/orchestration/db-stopping-worker-task-guard.test.ts",
+ "src/main/runtime/orchestration/db/dispatch-row-writer-boundary.test.ts",
+ "src/main/runtime/orchestration/db/federation/federated-dispatch-observation-fence.test.ts",
+ "src/main/runtime/orchestration/db/lifecycle-rejection-marker.test.ts",
+ "src/main/runtime/orchestration/federation-acknowledgment-integrity.test.ts",
+ "src/main/runtime/orchestration/federation-terminal-recovery.test.ts",
+ "src/main/runtime/orchestration/orchestration-run-delivery-db.test.ts",
+ "src/main/runtime/orchestration/r1-identity-migration.test.ts",
+ "src/main/runtime/orchestration/settled-question-threads-migration.test.ts",
+ "src/main/runtime/orchestration/worker-provider-session.test.ts",
+ "src/main/runtime/orchestration/worker-transcript-payload.test.ts",
+ "src/main/runtime/orchestration/worker-transcript-read.test.ts",
+ "src/main/runtime/pty-exit-per-pty-map-reaper-ratchet.test.ts",
+ "src/main/runtime/pty-inventory-lifecycle-admission.test.ts",
+ "src/main/runtime/push/push-outcome-counters.test.ts",
+ "src/main/runtime/push/push-policy-pipeline.integration.test.ts",
+ "src/main/runtime/push/push-unpair-persistence.test.ts",
+ "src/main/runtime/relay/mobile-relay-e2ee.integration.test.ts",
+ "src/main/runtime/relay/relay-control-client.test.ts",
+ "src/main/runtime/remote-browser-screencast-frame-admission.test.ts",
+ "src/main/runtime/rpc/dispatcher-request-parsing.test.ts",
+ "src/main/runtime/rpc/e2ee-channel-v2.test.ts",
+ "src/main/runtime/rpc/e2ee-integration.test.ts",
+ "src/main/runtime/rpc/methods/agent-hooks.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-floating-workspace.test.ts",
+ "src/main/runtime/rpc/methods/browser-client-page-metadata.test.ts",
+ "src/main/runtime/rpc/methods/browser-identity-rpc.test.ts",
+ "src/main/runtime/rpc/methods/computer.test.ts",
+ "src/main/runtime/rpc/methods/files-list-all-page-size.test.ts",
+ "src/main/runtime/rpc/methods/git.test.ts",
+ "src/main/runtime/rpc/methods/notification-reconnect-cooldown.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-structured-worker-abandon.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-structured-worker-redrive.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-start-mode.test.ts",
+ "src/main/runtime/rpc/methods/orchestration-worker-start-receipt-wording.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send-invalid-type.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send-receipt-plumbing.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/manual-dispatch-release.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-archive.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-capability.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-liveness-verdict.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-custody-at-creation.test.ts",
+ "src/main/runtime/rpc/methods/session-tab-agent-capability-mutations.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-unsubscribe.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-adoption-replay.test.ts",
+ "src/main/runtime/rpc/methods/terminal-manifest-characterization.test.ts",
+ "src/main/runtime/rpc/methods/worktree-rm-host-qualification.test.ts",
+ "src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts",
+ "src/main/runtime/rpc/orchestration-commit-notify-characterization.test.ts",
+ "src/main/runtime/rpc/orchestration-current-authority-precedence.test.ts",
+ "src/main/runtime/rpc/orchestration-mutation-ledger.test.ts",
+ "src/main/runtime/rpc/remote-runtime-server-heartbeat-missed-probe-tolerance.test.ts",
+ "src/main/runtime/rpc/runtime-close-attribution.test.ts",
+ "src/main/runtime/rpc/terminal-geometry-stale-handle.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-desktop-resize-routing.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-subscribe-slot-recovery.test.ts",
+ "src/main/runtime/rpc/terminal-output-frame-chunks-equivalence.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-relay-drop-lease-survival.test.ts",
+ "src/main/runtime/rpc/worktree-catalog-snapshot.test.ts",
+ "src/main/runtime/rpc/ws-transport-static-web.test.ts",
+ "src/main/runtime/rpc/ws-transport-transient-packet-loss.test.ts",
+ "src/main/runtime/rpc/ws-transport.test.ts",
+ "src/main/runtime/runtime-browser-client-page-creation.test.ts",
+ "src/main/runtime/runtime-browser-client-page-restored-recovery.test.ts",
+ "src/main/runtime/runtime-browser-page-registry.test.ts",
+ "src/main/runtime/runtime-client-settings-minimax-projection.test.ts",
+ "src/main/runtime/runtime-file-target-connection-field-ratchet.test.ts",
+ "src/main/runtime/runtime-git-sync-commands.test.ts",
+ "src/main/runtime/runtime-managed-worktree-metadata-sweep.test.ts",
+ "src/main/runtime/runtime-metadata-ownership-watch.test.ts",
+ "src/main/runtime/runtime-repository-issue-command.test.ts",
+ "src/main/runtime/runtime-rpc-mobile-native-chat-settings.test.ts",
+ "src/main/runtime/runtime-rpc-orchestration-db-migration.test.ts",
+ "src/main/runtime/runtime-rpc-relay-pairing.test.ts",
+ "src/main/runtime/settled-worker-process-replacement.test.ts",
+ "src/main/runtime/structured-agent-session-rollback-compatibility.test.ts",
+ "src/main/runtime/structured-conversation-tab-replacement.test.ts",
+ "src/main/runtime/structured-worker-hook-attestation.test.ts",
+ "src/main/runtime/structured-worker-identity.test.ts",
+ "src/main/runtime/terminal-identity-probe.test.ts",
+ "src/main/runtime/terminal-list-surface-lost-orphan.test.ts",
+ "src/main/runtime/terminal-model-query-authority.test.ts",
+ "src/main/runtime/terminal-retirement-proof-publication.test.ts",
+ "src/main/runtime/terminal-send-stale-leaf-liveness.test.ts",
+ "src/main/runtime/unreadable-secret-store-preservation.win32.test.ts",
+ "src/main/runtime/wait-blocked-check-state.test.ts",
+ "src/main/serve-update-handoff.app-environment.test.ts",
+ "src/main/skills/claude-plugin-skill-sources-wsl.test.ts",
+ "src/main/skills/skill-bundle-observability-summary.test.ts",
+ "src/main/skills/skill-delete/plan.test.ts",
+ "src/main/skills/skill-delete/recovery.test.ts",
+ "src/main/skills/skill-discovery-source-filter.test.ts",
+ "src/main/skills/skill-package-creation.test.ts",
+ "src/main/skills/skill-package-tar.test.ts",
+ "src/main/skills/skill-root-file-walk.test.ts",
+ "src/main/skills/skill-upload-process-restart.integration.test.ts",
+ "src/main/source-control/forge-provider.test.ts",
+ "src/main/source-control/hosted-review-base-ref-suffix.test.ts",
+ "src/main/source-control/hosted-review-branch-cache.test.ts",
+ "src/main/source-control/hosted-review.test.ts",
+ "src/main/speech/stt-service.test.ts",
+ "src/main/ssh/orcad-remote-launch.test.ts",
+ "src/main/ssh/orcad-update-plan.test.ts",
+ "src/main/ssh/removed-ssh-target-tombstone-retention.test.ts",
+ "src/main/ssh/sftp-upload.test.ts",
+ "src/main/ssh/ssh-channel-multiplexer-settlement.test.ts",
+ "src/main/ssh/ssh-connection-generation.test.ts",
+ "src/main/ssh/ssh-connection-manager-registry.test.ts",
+ "src/main/ssh/ssh-connection-store.test.ts",
+ "src/main/ssh/ssh-file-transfer-abort.test.ts",
+ "src/main/ssh/ssh-git-response-stream-reader.test.ts",
+ "src/main/ssh/ssh-multiplexer-writer-retention.test.ts",
+ "src/main/ssh/ssh-orphan-sweep-pane-state-verdicts.test.ts",
+ "src/main/ssh/ssh-relay-session-agent-hooks.integration.test.ts",
+ "src/main/ssh/ssh-security-key-identity.test.ts",
+ "src/main/ssh/ssh-system-transport.integration.test.ts",
+ "src/main/star-nag/service-force-show-races.test.ts",
+ "src/main/star-nag/service-threshold-prompt.test.ts",
+ "src/main/startup/browser-process-user-agent-ordering.test.ts",
+ "src/main/startup/os-opened-markdown-delivery.test.ts",
+ "src/main/startup/os-opened-markdown-wiring.test.ts",
+ "src/main/startup/startup-diagnostics.test.ts",
+ "src/main/startup/windows-desktop-shell-path-startup.test.ts",
+ "src/main/stats/stats-title-detection-independence.test.ts",
+ "src/main/telemetry/cohort-classifier.test.ts",
+ "src/main/telemetry/onboarding-feature-setup-validator.test.ts",
+ "src/main/text-generation/commit-message-agent-environment.test.ts",
+ "src/main/text-generation/commit-message-text-generation-branch-name.test.ts",
+ "src/main/text-generation/commit-message-text-generation-linked-issue.test.ts",
+ "src/main/text-generation/commit-message-text-generation-settings.test.ts",
+ "src/main/tray/tray-dev-badge.test.ts",
+ "src/main/updater-linux-package-recovery-actions.test.ts",
+ "src/main/updater-release-build-cache.test.ts",
+ "src/main/updater-release-builds.test.ts",
+ "src/main/updater.build-channel-selection.test.ts",
+ "src/main/updater.check-failure.test.ts",
+ "src/main/updater.quit-and-install.test.ts",
+ "src/main/win32-utils.test.ts",
+ "src/main/window/clipboard-remote-file-staging-fs.test.ts",
+ "src/main/window/createMainWindow-recovery-reload-watchdog.test.ts",
+ "src/main/window/createMainWindow-terminal-focus-shortcuts.test.ts",
+ "src/main/window/createMainWindow.test.ts",
+ "src/main/window/editable-context-menu.test.ts",
+ "src/main/window/renderer-document-navigation.test.ts",
+ "src/main/window/renderer-publication-throttle.test.ts",
+ "src/main/window/window-close-decision.test.ts",
+ "src/main/workspace-snapshot-pruning.bench.test.ts",
+ "src/main/worktree-create-preparation-cancellation.test.ts",
+ "src/main/worktree-removal-authority.test.ts",
+ "src/main/worktree-retirement-backfill-stall.test.ts",
+ "src/main/worktree-retirement-namespace.test.ts",
+ "src/main/wsl-distro-list-output.test.ts",
+ "src/main/wsl-unc-delete-symlink-repro.test.ts",
+ "src/main/wsl/wsl-runner.wsl.test.ts",
+ "src/main/wsl/wsl-w1-w3-contract.test.ts",
+ "src/preload/browser-client-page-renderer-requests.test.ts",
+ "src/relay/dispatcher.test.ts",
+ "src/relay/fs-path-metadata-symlink-concurrency.test.ts",
+ "src/relay/git-handler-branch-diff.test.ts",
+ "src/relay/git-handler-remote-sync.test.ts",
+ "src/relay/git-handler-worktree-paths.test.ts",
+ "src/relay/git-handler-worktree-provisioning.test.ts",
+ "src/relay/git-working-file-read.test.ts",
+ "src/relay/hermes-run-history.test.ts",
+ "src/relay/integration.test.ts",
+ "src/relay/pty-handler-output-drain-differential.test.ts",
+ "src/relay/pty-shell-utils.test.ts",
+ "src/relay/pty-source-credit-scheduler.test.ts",
+ "src/relay/relay-bundled-ripgrep.test.ts",
+ "src/relay/relay-command-env.test.ts",
+ "src/relay/relay-filesystem-watch-registry.test.ts",
+ "src/relay/relay-pty-source-recovery-window.test.ts",
+ "src/relay/relay-pty-source-send-scheduler.test.ts",
+ "src/relay/relay-pty-source-superseded-activation.test.ts",
+ "src/relay/remote-cli-stdin.test.ts",
+ "src/relay/subprocess.test.ts",
+ "src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.test.ts",
+ "src/renderer/src/app-shell/workspace-view-cross-client-sync.test.tsx",
+ "src/renderer/src/components/NewWorkspaceComposerCard.start-from.test.tsx",
+ "src/renderer/src/components/StarNagCard.test.tsx",
+ "src/renderer/src/components/activity/activity-portal-readiness-subscription-churn.react185.test.tsx",
+ "src/renderer/src/components/activity/activity-thread-grouping.search-cache.test.ts",
+ "src/renderer/src/components/activity/event-time-clock-refresh.test.tsx",
+ "src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsx",
+ "src/renderer/src/components/artifacts/ArtifactCollection.test.tsx",
+ "src/renderer/src/components/automations/AutomationDetail.host.test.tsx",
+ "src/renderer/src/components/automations/AutomationListLocalRows.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.strict-mode-save-visibility.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPageBreadcrumb.test.tsx",
+ "src/renderer/src/components/automations/ExternalAutomationManagers.test.tsx",
+ "src/renderer/src/components/automations/automation-create-destination.test.ts",
+ "src/renderer/src/components/automations/automation-host-catalog-order.test.ts",
+ "src/renderer/src/components/automations/automation-host-filter-resolution.test.ts",
+ "src/renderer/src/components/automations/automation-host-invalidation.test.ts",
+ "src/renderer/src/components/automations/automation-host-scheduler.test.ts",
+ "src/renderer/src/components/automations/automation-list-focus-recovery.test.ts",
+ "src/renderer/src/components/automations/automation-list-search.test.ts",
+ "src/renderer/src/components/automations/automation-write-invalidation.test.ts",
+ "src/renderer/src/components/automations/external-automation-scope-gating.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.render-ipc.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-detected-browsers-summary.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-page-zoom-indicator.test.tsx",
+ "src/renderer/src/components/browser-pane/browser-download-destination-toast.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/browser-page-url-display.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-paintability.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-zoom.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/browser-reload-action.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.test.ts",
+ "src/renderer/src/components/contextual-tours/contextual-tour-step-actions.test.ts",
+ "src/renderer/src/components/crash-report/crash-report-submit-notice.test.ts",
+ "src/renderer/src/components/dashboard-popout/preview-terminal-ime-bridge-kitty-bytes.test.ts",
+ "src/renderer/src/components/dashboard/dashboard-card-context.test.ts",
+ "src/renderer/src/components/dashboard/use-agent-row-conversation-name.test.ts",
+ "src/renderer/src/components/dashboard/useRetainedAgents.test.ts",
+ "src/renderer/src/components/dictation/DictationIndicator.localization.test.ts",
+ "src/renderer/src/components/dictation/dictation-final-segments.test.ts",
+ "src/renderer/src/components/diff-comments/DiffCommentCard.resize.test.tsx",
+ "src/renderer/src/components/diff-comments/diff-comment-popover-position.test.ts",
+ "src/renderer/src/components/diff-comments/diff-comment-range-drag.test.ts",
+ "src/renderer/src/components/editor/CheckRunCopyButton.test.tsx",
+ "src/renderer/src/components/editor/EditorPanelMarkdownActionsMenu.test.tsx",
+ "src/renderer/src/components/editor/MarkdownPreview.toc-visibility-gate.test.tsx",
+ "src/renderer/src/components/editor/closed-editor-model-lifetime.test.ts",
+ "src/renderer/src/components/editor/combined-diff-on-demand-load.test.ts",
+ "src/renderer/src/components/editor/combined-diff/browse-files/use-combined-diff-file-tree-resize.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-section-connection.test.ts",
+ "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-entries.test.ts",
+ "src/renderer/src/components/editor/details-markdown-html.test.ts",
+ "src/renderer/src/components/editor/diff-editor-hide-unchanged-options.test.ts",
+ "src/renderer/src/components/editor/editor-panel-draft-selector.test.ts",
+ "src/renderer/src/components/editor/editor-restored-tab-conflict-scan.test.ts",
+ "src/renderer/src/components/editor/ipynb-parse.test.ts",
+ "src/renderer/src/components/editor/large-diff-render-limit.test.ts",
+ "src/renderer/src/components/editor/markdown-doc-links.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-annotation-shortcut.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-controls.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-links.test.ts",
+ "src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts",
+ "src/renderer/src/components/editor/markdown-toc-collapse-state.test.ts",
+ "src/renderer/src/components/editor/monaco-reveal-range.test.ts",
+ "src/renderer/src/components/editor/pending-editor-focus-request.test.ts",
+ "src/renderer/src/components/editor/position-stable-node-view-update.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-editor-config.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-lowlight.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-review-rail-benchmark.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-table-actions.test.ts",
+ "src/renderer/src/components/editor/useEditorCmdSaveRequest.test.tsx",
+ "src/renderer/src/components/editor/useEditorPanelExternalContentEvents.test.tsx",
+ "src/renderer/src/components/editor/useEditorPanelFileLoadRetry.test.tsx",
+ "src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx",
+ "src/renderer/src/components/editor/useRichMarkdownEditorInstance.integration.test.tsx",
+ "src/renderer/src/components/emulator-pane/emulator-screen-stream-content.test.tsx",
+ "src/renderer/src/components/feature-interaction-writer-boundaries.test.ts",
+ "src/renderer/src/components/feature-tips/CmdJPaletteTipDialog.test.tsx",
+ "src/renderer/src/components/feature-wall/KeepAwakeCard.test.tsx",
+ "src/renderer/src/components/feature-wall/feature-wall-rail-navigation.test.ts",
+ "src/renderer/src/components/feature-wall/use-feature-wall-tour-telemetry.test.ts",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalOrchestrationDialog.freshness.test.tsx",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.bounds.test.tsx",
+ "src/renderer/src/components/floating-terminal/FloatingTerminalToggleButton.test.tsx",
+ "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.test.ts",
+ "src/renderer/src/components/floating-terminal/terminal-pane-handle-registry.test.ts",
+ "src/renderer/src/components/github-item-dialog/inspect-pull-request/pr-files-combined-diff-section-index.test.tsx",
+ "src/renderer/src/components/github-link-copy-state.test.ts",
+ "src/renderer/src/components/github-project/project-dialog-state.test.ts",
+ "src/renderer/src/components/github/pr-file-content-size.test.ts",
+ "src/renderer/src/components/landing-preflight-dismissal.test.ts",
+ "src/renderer/src/components/landing-preflight-issues.test.ts",
+ "src/renderer/src/components/linear-issue-attribute-filter-coverage-agreement.test.ts",
+ "src/renderer/src/components/linear-issue-workspace-detail-state.test.tsx",
+ "src/renderer/src/components/maintenance/update-card/update-card-error-model.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatApprovalCard.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.stream-render.perf.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.windowing.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatQuestionCard.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatThreadGoalBanner.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-image-paste.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pinned-rows.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-preassembled-session-parity.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-resolved-path-ownership.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-scrape-fallback.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-typing-redirect.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-view-state.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-keydown.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-composer-submit.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-live-session-visibility.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-skills.test.ts",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-thread-goal.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session.test.tsx",
+ "src/renderer/src/components/network/CustomAddressDialog.test.tsx",
+ "src/renderer/src/components/new-workspace/SmartWorkspaceNameField.ime-enter.test.tsx",
+ "src/renderer/src/components/new-workspace/smart-workspace-localized-options.test.ts",
+ "src/renderer/src/components/onboarding/NotificationStep.test.tsx",
+ "src/renderer/src/components/onboarding/agent-picked-payload.test.ts",
+ "src/renderer/src/components/onboarding/onboarding-dismiss-target.test.ts",
+ "src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx",
+ "src/renderer/src/components/repo/repo-icon.emoji-centering.test.tsx",
+ "src/renderer/src/components/right-sidebar/AiVaultPanel.legacy-filter.test.tsx",
+ "src/renderer/src/components/right-sidebar/CommitArea.chevron-spinner.test.tsx",
+ "src/renderer/src/components/right-sidebar/CommitArea.primary-icons.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerRow.actions.test.tsx",
+ "src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-first-prompt-card.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-search-session.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-identity.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-review.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel/panel-content-rendering.test.tsx",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-check-and-review-actions.test.tsx",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-generation.test.tsx",
+ "src/renderer/src/components/right-sidebar/commit-failure-summary.test.ts",
+ "src/renderer/src/components/right-sidebar/diff-comments-clear-dialog-state.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-dir-toggle-timing.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-paths.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts",
+ "src/renderer/src/components/right-sidebar/gitlab-mr-merge-state.test.ts",
+ "src/renderer/src/components/right-sidebar/right-sidebar-width.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-manual-review-url.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-section-order.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control/commit/discard-all-failure-description.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/listing/use-store-actions.store-subscriptions.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-file-explorer-name-filter.runtime-listing.test.tsx",
+ "src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx",
+ "src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts",
+ "src/renderer/src/components/settings/AgentSkillSetupPanel.freshness.test.tsx",
+ "src/renderer/src/components/settings/AgentsPane.test.tsx",
+ "src/renderer/src/components/settings/BrowserClientHostedRemoteSetting.test.tsx",
+ "src/renderer/src/components/settings/BrowserPane.test.ts",
+ "src/renderer/src/components/settings/BrowserUseSkillStep.test.tsx",
+ "src/renderer/src/components/settings/CommitMessageAiPane.test.tsx",
+ "src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.test.tsx",
+ "src/renderer/src/components/settings/GeneralRemoteServerUpdates.test.tsx",
+ "src/renderer/src/components/settings/GitPane.test.ts",
+ "src/renderer/src/components/settings/LinearAgentSkillNotes.test.tsx",
+ "src/renderer/src/components/settings/OrchestrationPane.test.tsx",
+ "src/renderer/src/components/settings/PluginKeybindingConsentPreview.test.ts",
+ "src/renderer/src/components/settings/PluginMarketplaceBrowser.test.tsx",
+ "src/renderer/src/components/settings/RepositoryGitHubAccountSection.test.tsx",
+ "src/renderer/src/components/settings/RepositoryPane.test.ts",
+ "src/renderer/src/components/settings/RepositoryPaneDraftInput.test.tsx",
+ "src/renderer/src/components/settings/SettingsFormControls.segmented-control.test.tsx",
+ "src/renderer/src/components/settings/ShortcutCommandBlock.test.tsx",
+ "src/renderer/src/components/settings/VoiceSpeechModelSection.test.tsx",
+ "src/renderer/src/components/settings/agent-availability-settings.test.ts",
+ "src/renderer/src/components/settings/browser-link-routing-localization.test.ts",
+ "src/renderer/src/components/settings/browser-search.test.ts",
+ "src/renderer/src/components/settings/mobile-pane-search.test.ts",
+ "src/renderer/src/components/settings/session-search-computer-rollup.test.ts",
+ "src/renderer/src/components/settings/settings-setup-guide-progress-hook.test.tsx",
+ "src/renderer/src/components/settings/ssh-target-remove.test.ts",
+ "src/renderer/src/components/settings/terminal-preview-content.test.ts",
+ "src/renderer/src/components/settings/terminal-search.test.ts",
+ "src/renderer/src/components/settings/useGhosttyImport.test.ts",
+ "src/renderer/src/components/settings/useWarpThemeImport.test.ts",
+ "src/renderer/src/components/sidebar/AutoRenameFailedDialog.test.tsx",
+ "src/renderer/src/components/sidebar/CacheTimer.test.tsx",
+ "src/renderer/src/components/sidebar/CommentMarkdown.github-attachment-image.test.tsx",
+ "src/renderer/src/components/sidebar/CommentMarkdown.link-click.test.tsx",
+ "src/renderer/src/components/sidebar/CommentMarkdown.test.tsx",
+ "src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx",
+ "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.update-command.test.tsx",
+ "src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx",
+ "src/renderer/src/components/sidebar/RemoteFileBrowser.paste.test.tsx",
+ "src/renderer/src/components/sidebar/SetupGuideSidebarEntry.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarHeader.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardSshHostControl.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts",
+ "src/renderer/src/components/sidebar/delete-worktree-flow.test.ts",
+ "src/renderer/src/components/sidebar/host-header-drag.test.tsx",
+ "src/renderer/src/components/sidebar/host-header-menu-items.test.ts",
+ "src/renderer/src/components/sidebar/host-section-order.test.ts",
+ "src/renderer/src/components/sidebar/mobile-sidebar-onboarding-badge.test.ts",
+ "src/renderer/src/components/sidebar/project-added-default-checkout.test.ts",
+ "src/renderer/src/components/sidebar/project-group-header-drag.test.ts",
+ "src/renderer/src/components/sidebar/project-order-manual-default-notice-visibility.test.ts",
+ "src/renderer/src/components/sidebar/remote-file-browser-drive-paths.test.ts",
+ "src/renderer/src/components/sidebar/repo-header-create-state.test.ts",
+ "src/renderer/src/components/sidebar/stale-agent-row-unverifiable.test.ts",
+ "src/renderer/src/components/sidebar/use-worktree-sleep-state.test.tsx",
+ "src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts",
+ "src/renderer/src/components/sidebar/workspace-kanban-filtered-drop-index.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-agent-ack-inputs.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-card-details-hover-state.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-lineage-toggle-handler-cache.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/grouping/host-labels.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/use-keyboard.host-identity.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts",
+ "src/renderer/src/components/sidebar/worktree-unambiguous-id-index.test.ts",
+ "src/renderer/src/components/skills/SkillInstallAgentPicker.test.tsx",
+ "src/renderer/src/components/skills/skill-agent-filter.test.ts",
+ "src/renderer/src/components/skills/skill-freshness-grouping.test.ts",
+ "src/renderer/src/components/skills/skill-package-install-risk.test.ts",
+ "src/renderer/src/components/skills/skill-share-link.test.ts",
+ "src/renderer/src/components/stats/GrokUsagePane.test.tsx",
+ "src/renderer/src/components/stats/UsageBreakdownSection.test.tsx",
+ "src/renderer/src/components/status-bar/CaffeinateStatusSegment.localization.test.tsx",
+ "src/renderer/src/components/status-bar/PortsStatusSegment.host-routing.test.tsx",
+ "src/renderer/src/components/status-bar/ResourceUsageStatusSegment.session-polling.test.ts",
+ "src/renderer/src/components/status-bar/resource-session-inventory.test.ts",
+ "src/renderer/src/components/status-bar/status-bar-provider-menu-focus.test.tsx",
+ "src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts",
+ "src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx",
+ "src/renderer/src/components/status-bar/workspace-space-layout.test.ts",
+ "src/renderer/src/components/tab-bar/EditorFileTab.test.tsx",
+ "src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx",
+ "src/renderer/src/components/tab-bar/SortableTab.rename-shortcut.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBar.client-hosted-row-active-state.test.ts",
+ "src/renderer/src/components/tab-bar/TabBar.worktree-write-gate.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx",
+ "src/renderer/src/components/tab-bar/open-tab-entry-dedupe.test.ts",
+ "src/renderer/src/components/tab-bar/reconcile-order.test.ts",
+ "src/renderer/src/components/tab-bar/tab-bar-item-surface.client-hosted-active-state.test.tsx",
+ "src/renderer/src/components/tab-bar/tab-strip-content-resize-observers.test.ts",
+ "src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts",
+ "src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts",
+ "src/renderer/src/components/tab-group/tab-insertion.test.ts",
+ "src/renderer/src/components/task-page-jira-grouping.test.ts",
+ "src/renderer/src/components/task-page-pr-check-summary.test.ts",
+ "src/renderer/src/components/task-page-workspace-composer-boundary.test.ts",
+ "src/renderer/src/components/task-source-context-summary.test.ts",
+ "src/renderer/src/components/terminal-pane/TerminalAgentSessionForkDialog.test.tsx",
+ "src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-dispose-leak.test.ts",
+ "src/renderer/src/components/terminal-pane/codex-backfill-error-detector.test.ts",
+ "src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts",
+ "src/renderer/src/components/terminal-pane/deferred-reattach-live-data-queue.test.ts",
+ "src/renderer/src/components/terminal-pane/expand-collapse.test.ts",
+ "src/renderer/src/components/terminal-pane/hidden-output-restore-scheduler.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-helpers.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-atlas-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-split-cwd-resolution.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/foreground-output-budgets.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-model-restore-channel.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-size-reassertion.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-detach-attach-handoff.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-error-surface-dismissal.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-snapshot-source-grid.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-expired-pane-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-surface-replacement.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-split-leaf-activation.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stream-reconnect.test.ts",
+ "src/renderer/src/components/terminal-pane/restored-snapshot-coverage.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-alternate-screen-parse.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-clipboard-selection-text.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-cursor-appearance-precedence.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-internal-handler.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-shell.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-eviction-exempt-tabs.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-handle-links.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-composer-placeholder-mask.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-forwarder-space-claim.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-input-context-refresh.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-composition-cancel.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-resumed-preedit-visibility.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-input-host-platform.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit-coexistence.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-activation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-provider-link-detection.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-native-copy-gutter.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-recovery-unsettled-fallback.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-render-desync-weight-probe.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-shortcut-option-compose.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-tab-agent-type-index.test.ts",
+ "src/renderer/src/components/terminal-pane/use-manual-terminal-worktree-parking.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-active-pty-reporting.test.ts",
+ "src/renderer/src/components/terminal-pane/xterm-bypass-policy-interrupt.test.ts",
+ "src/renderer/src/components/terminal-pane/xterm-bypass-policy-non-mac.test.ts",
+ "src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx",
+ "src/renderer/src/components/terminal-search-safe-find.test.ts",
+ "src/renderer/src/components/terminal-workspace-surface-ids.test.tsx",
+ "src/renderer/src/components/terminal/active-terminal-repair.test.ts",
+ "src/renderer/src/components/terminal/running-terminal-close-guard.test.ts",
+ "src/renderer/src/components/terminal/split-group-mount.test.ts",
+ "src/renderer/src/components/terminal/terminal-close-confirm-keyboard-vs-mouse.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-actions-structured-session.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts",
+ "src/renderer/src/components/terminal/use-worktree-files.test.tsx",
+ "src/renderer/src/components/terminal/window-close-running-work.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-settlement.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-timeout-recovery.test.ts",
+ "src/renderer/src/hooks/composer-drop-owner.test.ts",
+ "src/renderer/src/hooks/composer-state/full-creation-execution.test.ts",
+ "src/renderer/src/hooks/direct-ssh-host-hydration.test.ts",
+ "src/renderer/src/hooks/direct-ssh-reconnect-rollout.test.ts",
+ "src/renderer/src/hooks/direct-ssh-worktree-refresh-scheduler.test.ts",
+ "src/renderer/src/hooks/ipc-events/agent-status-pending-retry-gate.test.ts",
+ "src/renderer/src/hooks/ipc-events/browser-automation-bootstrap-lease.test.ts",
+ "src/renderer/src/hooks/ipc-events/os-markdown-file-open-bridge.test.ts",
+ "src/renderer/src/hooks/use-audio-capture.capture-loss.test.ts",
+ "src/renderer/src/hooks/useComposerState-host-retarget.test.ts",
+ "src/renderer/src/hooks/useComposerState.integration.test.ts",
+ "src/renderer/src/hooks/useEditorExternalWatch-targets.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-connection-attribution.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-cmd-j-digit-chord.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-rate-limit-hydration.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-repos-changed-catalogs.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-ssh-disconnect-cleanup.test.ts",
+ "src/renderer/src/hooks/useMetadataListRequest.test.tsx",
+ "src/renderer/src/hooks/useRetiredWorktreeNames.test.ts",
+ "src/renderer/src/hooks/useSettingsNavigationMetadata.language-switch.test.tsx",
+ "src/renderer/src/hooks/useUnreadDockBadge.test.ts",
+ "src/renderer/src/hooks/viewport-size-change-listener.test.ts",
+ "src/renderer/src/hooks/zoom-routing.test.ts",
+ "src/renderer/src/i18n/ko-ui-semantic-mistranslations.test.ts",
+ "src/renderer/src/i18n/weekday-names.test.ts",
+ "src/renderer/src/i18n/worktree-visibility-locales.test.ts",
+ "src/renderer/src/lib/agent-skill-nav-install-status.test.ts",
+ "src/renderer/src/lib/agent-status-terminal-title.test.ts",
+ "src/renderer/src/lib/ai-vault-resume-target.test.ts",
+ "src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts",
+ "src/renderer/src/lib/app-command-dispatch.test.ts",
+ "src/renderer/src/lib/browser-page-palette-activation.test.ts",
+ "src/renderer/src/lib/client-creation-action-policy.test.ts",
+ "src/renderer/src/lib/codex-session-restart.test.ts",
+ "src/renderer/src/lib/composer-issue-command.test.ts",
+ "src/renderer/src/lib/crash-diagnostics.test.ts",
+ "src/renderer/src/lib/ensure-hooks-confirmed.test.ts",
+ "src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts",
+ "src/renderer/src/lib/file-search-selection.test.ts",
+ "src/renderer/src/lib/file-type-icons.test.ts",
+ "src/renderer/src/lib/gitlab-links.test.ts",
+ "src/renderer/src/lib/hook-command-delayed-delivery-perf.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-landed-handle.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-placement.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts",
+ "src/renderer/src/lib/lazy-with-retry.never-landed-reload.test.ts",
+ "src/renderer/src/lib/linear-issue-context-snapshot.test.ts",
+ "src/renderer/src/lib/linked-work-item-provider.test.ts",
+ "src/renderer/src/lib/locale-text-collators.test.ts",
+ "src/renderer/src/lib/migration-unsupported-agent-entry.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-svelte.test.ts",
+ "src/renderer/src/lib/monaco-languages/textmate-token-provider.test.ts",
+ "src/renderer/src/lib/new-workspace-composer-repo.test.ts",
+ "src/renderer/src/lib/onboarding-project-checklist.test.ts",
+ "src/renderer/src/lib/orca-yaml-trust-prompt-slot-eviction.test.ts",
+ "src/renderer/src/lib/palette-match/palette-ranking.test.ts",
+ "src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts",
+ "src/renderer/src/lib/pane-manager/mobile-driver-state.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-cursor-blink-suspension.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-divider-stray-touch.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-overlay-focus.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-pty-resize-hold.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-throughput.bench.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-canvas-dpr-repair.test.ts",
+ "src/renderer/src/lib/parked-terminal-host-hydration.test.ts",
+ "src/renderer/src/lib/path-head-elision.test.ts",
+ "src/renderer/src/lib/primary-selection.test.ts",
+ "src/renderer/src/lib/react-error-boundary-reporting.test.ts",
+ "src/renderer/src/lib/repo-slug-index.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts",
+ "src/renderer/src/lib/right-sidebar-visibility.test.ts",
+ "src/renderer/src/lib/run-quick-command-in-new-tab.test.ts",
+ "src/renderer/src/lib/screen-submit-shortcut.test.ts",
+ "src/renderer/src/lib/setup-script-prompt.test.ts",
+ "src/renderer/src/lib/shutdown-checkpoint-guard.test.ts",
+ "src/renderer/src/lib/simulator-launch-coordination.test.ts",
+ "src/renderer/src/lib/simulator-palette-search.test.ts",
+ "src/renderer/src/lib/sleeping-agent-session-launch-windows-quoting.test.ts",
+ "src/renderer/src/lib/source-control-generation-plan.test.ts",
+ "src/renderer/src/lib/structured-agent-launch-settlement.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-cancellation.test.ts",
+ "src/renderer/src/lib/tab-has-live-pty.test.ts",
+ "src/renderer/src/lib/terminal-links-redos.test.ts",
+ "src/renderer/src/lib/typing-latency/diagnostic-lifecycle.test.ts",
+ "src/renderer/src/lib/use-tab-agent-process-signals.test.ts",
+ "src/renderer/src/lib/window-visibility-timeout-poller.test.ts",
+ "src/renderer/src/lib/windows-terminal-capability-reprobe.test.ts",
+ "src/renderer/src/lib/workspace-activation-terminal-focus.test.ts",
+ "src/renderer/src/lib/workspace-session-host-contention.test.ts",
+ "src/renderer/src/lib/workspace-session-persistence-gate.test.ts",
+ "src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts",
+ "src/renderer/src/lib/workspace-tab-palette-results.test.ts",
+ "src/renderer/src/lib/worktree-activation-agent-startup.test.ts",
+ "src/renderer/src/lib/worktree-activation-empty-remote.test.ts",
+ "src/renderer/src/lib/worktree-activation-issue-command.test.ts",
+ "src/renderer/src/lib/worktree-agent-activation-seam.test.ts",
+ "src/renderer/src/lib/worktree-default-display-name.test.ts",
+ "src/renderer/src/lib/worktree-git-identity-display.test.ts",
+ "src/renderer/src/lib/worktree-operation-generation.test.ts",
+ "src/renderer/src/lib/worktree-palette-comment-snippet.test.ts",
+ "src/renderer/src/lib/worktree-palette-search.test.ts",
+ "src/renderer/src/runtime/close-mirrored-editor-tab.test.ts",
+ "src/renderer/src/runtime/local-session-tab-close-owner.test.ts",
+ "src/renderer/src/runtime/local-structured-session-reveal-visibility.test.ts",
+ "src/renderer/src/runtime/remote-host-file-delete-repro.test.ts",
+ "src/renderer/src/runtime/remote-host-file-open-repro.test.ts",
+ "src/renderer/src/runtime/runtime-file-client-watch.test.ts",
+ "src/renderer/src/runtime/runtime-path-existence-error-parity.test.ts",
+ "src/renderer/src/runtime/runtime-repo-client.test.ts",
+ "src/renderer/src/runtime/runtime-worktree-selector.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-payload-partition.test.ts",
+ "src/renderer/src/runtime/use-remote-runtime-recovery-triggers.test.ts",
+ "src/renderer/src/runtime/use-worktree-runtime-target.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-tab-move.test.ts",
+ "src/renderer/src/runtime/web-session-focus-intent-visible-tab.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-removed-frame-retires-live-publisher.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-restored-browser-rows.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-staged-browser-authority.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-window-visibility.test.tsx",
+ "src/renderer/src/runtime/web-session-tabs-sync/tracking-lifecycle.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-inventory-retry.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-mixed-version.test.ts",
+ "src/renderer/src/startup/active-workspace-ssh-targets.test.ts",
+ "src/renderer/src/store/plugin-panels.test.ts",
+ "src/renderer/src/store/react-commit-cascade-write-probe.test.ts",
+ "src/renderer/src/store/slices/agent-status-live-map-leak.test.ts",
+ "src/renderer/src/store/slices/browser-session-profiles.test.ts",
+ "src/renderer/src/store/slices/detected-agents-environment-prune-leak.test.ts",
+ "src/renderer/src/store/slices/diffComments.test.ts",
+ "src/renderer/src/store/slices/editor-read-only-tabs.test.ts",
+ "src/renderer/src/store/slices/github-issue-source-indicator-suppression.test.ts",
+ "src/renderer/src/store/slices/github-pr-branch-direct-refresh-scope.test.ts",
+ "src/renderer/src/store/slices/github-pr-refresh-hosted-review-cache-leak.test.ts",
+ "src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts",
+ "src/renderer/src/store/slices/github-provider-request-concurrency.test.ts",
+ "src/renderer/src/store/slices/github-repo-lookup-index.test.ts",
+ "src/renderer/src/store/slices/jira.test.ts",
+ "src/renderer/src/store/slices/linear-credential-error-recovery.test.ts",
+ "src/renderer/src/store/slices/project-group-removal-targets.test.ts",
+ "src/renderer/src/store/slices/purge-stale-runtime-host-ownership.test.ts",
+ "src/renderer/src/store/slices/recently-closed-tabs.test.ts",
+ "src/renderer/src/store/slices/repos-all-hosts-generation.test.ts",
+ "src/renderer/src/store/slices/repos-project-groups.test.ts",
+ "src/renderer/src/store/slices/repos-project-runtime.test.ts",
+ "src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts",
+ "src/renderer/src/store/slices/runtime-status-catalog-identity.test.ts",
+ "src/renderer/src/store/slices/runtime-status-reconnect-connection-generation.test.ts",
+ "src/renderer/src/store/slices/stale-runtime-host-rows.test.ts",
+ "src/renderer/src/store/slices/store-active-worktree-tab-close.test.ts",
+ "src/renderer/src/store/slices/store-session-cascades.test.ts",
+ "src/renderer/src/store/slices/store-sleep-exact-runtime-stop.test.ts",
+ "src/renderer/src/store/slices/store-sleep-runtime-convergence.test.ts",
+ "src/renderer/src/store/slices/store-worktree-removal-cascade.test.ts",
+ "src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts",
+ "src/renderer/src/store/slices/tabs-unread-and-focus.test.ts",
+ "src/renderer/src/store/slices/task-creation-drafts.test.ts",
+ "src/renderer/src/store/slices/terminal-pane-detach-agent-identity.test.ts",
+ "src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts",
+ "src/renderer/src/store/slices/terminal-startup-command-retention.test.ts",
+ "src/renderer/src/store/slices/ui-contextual-tours.test.ts",
+ "src/renderer/src/store/slices/ui-hydration-view-layout.test.ts",
+ "src/renderer/src/store/slices/usage-web-client-fallback.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-wrong-host-removal.test.ts",
+ "src/renderer/src/store/slices/workspace-space.test.ts",
+ "src/renderer/src/store/slices/worktree-terminal-removal-teardown.test.ts",
+ "src/renderer/src/store/slices/worktree-visibility-owner-settings.test.ts",
+ "src/renderer/src/store/slices/worktrees-activity-persistence.test.ts",
+ "src/renderer/src/store/slices/worktrees-linked-review-push-target.test.ts",
+ "src/renderer/src/store/slices/worktrees/teardown/remove-worktree-map-identity.test.ts",
+ "src/renderer/src/store/terminals/structured-chat-tab-rename.test.ts",
+ "src/renderer/src/store/terminals/terminal-no-op-subscriber.test.ts",
+ "src/renderer/src/web/web-preload-api-agent-providers.test.ts",
+ "src/renderer/src/web/web-preload-api-runtime-environment.test.ts",
+ "src/renderer/src/web/web-workspace-session.test.ts",
+ "src/shared/agent-hook-listener-grok-completion.test.ts",
+ "src/shared/agent-hook-request-body-memory.test.ts",
+ "src/shared/agent-hook-status-cache.test.ts",
+ "src/shared/agent-launch-remote.test.ts",
+ "src/shared/agent-lead-status-fold.test.ts",
+ "src/shared/agent-model-probe-spec.test.ts",
+ "src/shared/agent-row-conversation-name.test.ts",
+ "src/shared/agent-skill-sharing-gate.test.ts",
+ "src/shared/agent-status-child-work-lifetime.test.ts",
+ "src/shared/agent-status-run.test.ts",
+ "src/shared/agent-status-types.test.ts",
+ "src/shared/agent-title-agy-gemini-collision.test.ts",
+ "src/shared/agent-tui-input-clear.test.ts",
+ "src/shared/ai-vault-session-filters.test.ts",
+ "src/shared/ai-vault-types.test.ts",
+ "src/shared/automation-execution-target.test.ts",
+ "src/shared/bounded-map.test.ts",
+ "src/shared/browser-client-automation-protocol.test.ts",
+ "src/shared/bundled-ripgrep.test.ts",
+ "src/shared/claude-model-list-probe.test.ts",
+ "src/shared/client-environment-info.test.ts",
+ "src/shared/codex-auth-errors.test.ts",
+ "src/shared/codex-startup-delivery.test.ts",
+ "src/shared/codex-subagent-rollout-lifecycle.test.ts",
+ "src/shared/command-code-output-retention.test.ts",
+ "src/shared/computer-awake-mode.test.ts",
+ "src/shared/constants.test.ts",
+ "src/shared/ephemeral-setup-terminal-worktree-id.test.ts",
+ "src/shared/event-loop-yield.test.ts",
+ "src/shared/feature-wall-tour-depth.test.ts",
+ "src/shared/foreground-process-ancestry-parity.test.ts",
+ "src/shared/foreground-wrapper-agent.test.ts",
+ "src/shared/git-clone-failure-message.test.ts",
+ "src/shared/git-configured-branch-target.test.ts",
+ "src/shared/git-fetch-head-lock-key-derivation.test.ts",
+ "src/shared/git-remote-identity.test.ts",
+ "src/shared/git-status-upstream-ref.test.ts",
+ "src/shared/git-uncommitted-line-stats.test.ts",
+ "src/shared/git-worktree-operation-lock.test.ts",
+ "src/shared/github/work-items-query-bounds.test.ts",
+ "src/shared/hermes-startup-query.windows.test.ts",
+ "src/shared/in-flight-promise-dedupe.test.ts",
+ "src/shared/jira-issue-url.test.ts",
+ "src/shared/keybindings-digit-index.test.ts",
+ "src/shared/mobile-relay-mint-failure.test.ts",
+ "src/shared/model-id-label.test.ts",
+ "src/shared/native-chat-shell-environment.test.ts",
+ "src/shared/native-chat-task-list.test.ts",
+ "src/shared/native-chat-tool-identity.test.ts",
+ "src/shared/native-chat-turn-activity.test.ts",
+ "src/shared/network/manual-address.test.ts",
+ "src/shared/new-workspace/worktree-create-retry-policy.test.ts",
+ "src/shared/node-bounded-json-stringify.test.ts",
+ "src/shared/node-file-content-equality.test.ts",
+ "src/shared/node-markdown-document-discovery.test.ts",
+ "src/shared/nvm-default-alias.test.ts",
+ "src/shared/omp-draft-launch-shell.test.ts",
+ "src/shared/orchestration-dispatch-refusal-contract.test.ts",
+ "src/shared/orchestration-fleet-projection.test.ts",
+ "src/shared/pairing-local-ui-fields.test.ts",
+ "src/shared/pane-agent-identity-adapter.test.ts",
+ "src/shared/pane-agent-identity-title-corpus.test.ts",
+ "src/shared/pr-comment-time.test.ts",
+ "src/shared/pty-owner-backend.test.ts",
+ "src/shared/pty-startup-ingress-kitty.test.ts",
+ "src/shared/pty-startup-ingress.test.ts",
+ "src/shared/published-pane-agent-identity.test.ts",
+ "src/shared/quick-open-readdir-walk.test.ts",
+ "src/shared/quick-open-transport-budget.test.ts",
+ "src/shared/rate-limit-types.test.ts",
+ "src/shared/relay-frame-buffer.test.ts",
+ "src/shared/remote-runtime-request-frames.test.ts",
+ "src/shared/remote-runtime-shared-control-keepalive-refresh.test.ts",
+ "src/shared/rpc-contract/terminal-create-shell-param.test.ts",
+ "src/shared/runtime-environment-store.test.ts",
+ "src/shared/runtime-navigation.test.ts",
+ "src/shared/secret-store.test.ts",
+ "src/shared/setup-script-telemetry-events.test.ts",
+ "src/shared/setup-script-telemetry.test.ts",
+ "src/shared/skill-install-failure.test.ts",
+ "src/shared/skill-package-manifest.test.ts",
+ "src/shared/source-control-ai.test.ts",
+ "src/shared/source-control-push-failure.test.ts",
+ "src/shared/ssh-pending-pty-kill.test.ts",
+ "src/shared/structured-agent-session-item-retention.test.ts",
+ "src/shared/structured-agent-session-option-codec.test.ts",
+ "src/shared/terminal-escape-introducer.test.ts",
+ "src/shared/terminal-mode-reset-profiles.test.ts",
+ "src/shared/terminal-stream-json-byte-length.test.ts",
+ "src/shared/terminal-title-classification-corpus.test.ts",
+ "src/shared/terminal-view-attributes.test.ts",
+ "src/shared/tui-agent-permissions.test.ts",
+ "src/shared/ui-zoom-level.test.ts",
+ "src/shared/usage-percentage-display-change-notice.test.ts",
+ "src/shared/usage-percentage-display.test.ts",
+ "src/shared/window-shortcut-policy.test.ts",
+ "src/shared/windows-long-path-git-args.test.ts",
+ "src/shared/workspace-session-salvage-equivalence.test.ts",
+ "src/shared/workspace-session-salvage.test.ts",
+ "src/shared/workspace-session-terminal-tab-close.test.ts",
+ "src/shared/worktree/removal-force-classification.test.ts",
+ "src/shared/worktree/sort-order-update.test.ts",
+ "tests/e2e/accumulated-workspace-state-builder.unit.test.ts",
+ "tests/e2e/helpers/alt-screen-frame.unit.test.ts",
+ "tests/e2e/helpers/electron-crashpad-cleanup.unit.test.ts",
+ "tests/e2e/helpers/paired-client-runtime-environment.unit.test.ts",
+ "tests/e2e/orca-restart-navigation.unit.test.ts",
+ "tests/e2e/paired-runtime-rejected-input-remount.unit.test.ts",
+ "tests/e2e/runtime-graph-publication-probe.unit.test.ts",
+ "tests/e2e/terminal-foreground-confirmation.unit.test.ts",
+ "tests/tools/omp-relay-close-lifecycle.test.mjs",
+ "tests/tools/relay-bench/relay-bench-state-file.test.mjs",
+ "tests/tools/relay-bench/relay-phone-connect-bench.test.mjs"
+ ],
+ "durationMs": 850511
+ },
+ {
+ "files": [
+ "config/scripts/app-store-performance-plugin.test.mjs",
+ "config/scripts/benchmark-artifact-comparison.test.mjs",
+ "config/scripts/check-react-doctor-changed.test.mjs",
+ "config/scripts/check-readme-local-links.test.mjs",
+ "config/scripts/check-reliability-gates.test.mjs",
+ "config/scripts/computer-e2e-workflow.test.mjs",
+ "config/scripts/create-draft-release.test.mjs",
+ "config/scripts/dev-electron-bundle-identity.test.ts",
+ "config/scripts/electron-builder-native-rebuild.test.mjs",
+ "config/scripts/happy-dom-offscreen-canvas.test.ts",
+ "config/scripts/locale-brand-prefilter.test.mjs",
+ "config/scripts/locale-translation-policy-ko-round5.test.mjs",
+ "config/scripts/locale-translation-policy.zh-round5.test.mjs",
+ "config/scripts/mobile-web-app-browser-pane-text-inputs.test.mjs",
+ "config/scripts/mobile-web-app-frame-budget-sweep.test.ts",
+ "config/scripts/mobile-web-app-render.test.mjs",
+ "config/scripts/mobile-web-app-session-terminal-closure.test.mjs",
+ "config/scripts/mobile-web-app-tasks-external-links.test.mjs",
+ "config/scripts/mobile-web-bundle-serializer-parity.test.mjs",
+ "config/scripts/node-pty-windows-pty-teardown-patch.test.mjs",
+ "config/scripts/orca-dev-bin.test.mjs",
+ "config/scripts/packaged-source-map-prune.test.mjs",
+ "config/scripts/pr-e2e-gate-contract.test.mjs",
+ "config/scripts/rebuild-native-deps-windows-process-tree.test.mjs",
+ "config/scripts/renderer-scrollbar-style-plugin.test.mjs",
+ "config/scripts/resolve-7za-path.test.mjs",
+ "config/scripts/run-codex-real-account-validation.test.ts",
+ "config/scripts/run-internal-dev-setup.test.mjs",
+ "config/scripts/shebang-script-line-ending-pin.test.mjs",
+ "config/scripts/skill-description-length.test.mjs",
+ "config/scripts/skills-cli-package-workflow.test.mjs",
+ "config/scripts/verify-localization-catalog.test.mjs",
+ "config/scripts/verify-localization-extraction.test.mjs",
+ "config/scripts/verify-wsl-e2e-participation.test.mjs",
+ "config/scripts/windows-cmd-shim-spawn-boundary.test.mjs",
+ "config/scripts/windows-signing-gate-toolset.test.mjs",
+ "config/scripts/workflow-ref-mirror-case-safety.test.mjs",
+ "config/scripts/xterm-image-lifecycle-contract.test.mjs",
+ "config/scripts/xterm-webgl-runtime-contract.test.mjs",
+ "src/cli/cli-command-name-parity.test.ts",
+ "src/cli/handlers/artifacts.test.ts",
+ "src/cli/handlers/linear.test.ts",
+ "src/cli/handlers/orchestration-check-identity.test.ts",
+ "src/cli/handlers/orchestration-timeout-cli.test.ts",
+ "src/cli/handlers/orchestration/worker-list-run-scope.test.ts",
+ "src/cli/index-terminal-commands.test.ts",
+ "src/cli/index-worktree-create-agent.test.ts",
+ "src/cli/index-worktree-create-parent.test.ts",
+ "src/cli/main-module-bundle-parity.test.ts",
+ "src/cli/runtime/client-recovery.test.ts",
+ "src/cli/shell-command-quote.test.ts",
+ "src/cli/specs/search.test.ts",
+ "src/cli/worktree-selector-wsl-posix-path.test.ts",
+ "src/main/active-view-preference-sync-flush-veto.test.ts",
+ "src/main/agent-auth-restart-preservation.test.ts",
+ "src/main/agent-hooks/restored-subagent-liveness-sweep.test.ts",
+ "src/main/agent-hooks/server-copilot-normalization.test.ts",
+ "src/main/agent-hooks/server-hook-http-ingest.test.ts",
+ "src/main/agent-hooks/server-ingest-remote.test.ts",
+ "src/main/agent-hooks/server-ingest-structured-status.test.ts",
+ "src/main/agent-hooks/server-omp-retirement-ack.test.ts",
+ "src/main/agent-hooks/server-opencode-lifecycle.test.ts",
+ "src/main/agent-hooks/server-prompt-sent-telemetry.test.ts",
+ "src/main/agent-hooks/server-retired-pane-new-turn.test.ts",
+ "src/main/ai-vault-search/session-search-directory-listings.test.ts",
+ "src/main/ai-vault-search/session-search-engine.test.ts",
+ "src/main/ai-vault-search/session-search-lifecycle-matrix.test.ts",
+ "src/main/ai-vault-search/session-search-live-transcript.test.ts",
+ "src/main/ai-vault-search/session-search-opencode-index.test.ts",
+ "src/main/ai-vault-search/session-search-typo-policy.test.ts",
+ "src/main/ai-vault-search/session-search-write-lifetime.test.ts",
+ "src/main/ai-vault/ai-vault-scan-cancellation.test.ts",
+ "src/main/ai-vault/codex-session-root-dedup.test.ts",
+ "src/main/ai-vault/remote-session-parse-cache.test.ts",
+ "src/main/ai-vault/runtime-session-search-call.test.ts",
+ "src/main/ai-vault/session-scanner-antigravity-parser.test.ts",
+ "src/main/ai-vault/session-scanner-cline-parser.test.ts",
+ "src/main/ai-vault/session-scanner-codex-non-user-origin.test.ts",
+ "src/main/ai-vault/session-scanner-grok-user-text.test.ts",
+ "src/main/ai-vault/session-scanner-injected-title.test.ts",
+ "src/main/ai-vault/session-scanner-omp-subagent-transcripts.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.test.ts",
+ "src/main/ai-vault/session-scanner-parser-stream-cleanup.test.ts",
+ "src/main/ai-vault/session-scanner-service-env.test.ts",
+ "src/main/ai-vault/session-scanner-service-search.test.ts",
+ "src/main/ai-vault/session-scanner.test.ts",
+ "src/main/app-relaunch.test.ts",
+ "src/main/appimage-runtime-identity.test.ts",
+ "src/main/artifacts/artifact-create-intent-store.test.ts",
+ "src/main/automations/automation-owner-migration.test.ts",
+ "src/main/automations/external-manager-scoped.test.ts",
+ "src/main/automations/headless-workspace-create.test.ts",
+ "src/main/automations/refused-manual-run.test.ts",
+ "src/main/azure-devops/client.test.ts",
+ "src/main/bitbucket/status-no-decrypt.test.ts",
+ "src/main/browser/browser-client-download-routing.test.ts",
+ "src/main/browser/browser-client-file-channel-reconnect.test.ts",
+ "src/main/browser/browser-client-host-published-url-wiring.test.ts",
+ "src/main/browser/browser-client-route-cookie-import.test.ts",
+ "src/main/browser/browser-cookie-import-partition-rollback.electron.test.ts",
+ "src/main/browser/browser-cookie-import-partition-success.electron.test.ts",
+ "src/main/browser/browser-cookie-import.test.ts",
+ "src/main/browser/browser-cookie-registrable-family.test.ts",
+ "src/main/browser/browser-host-lease-reconnect-delay.test.ts",
+ "src/main/browser/browser-manager-destroyed-guest-downloads.test.ts",
+ "src/main/browser/browser-manager-viewport-partial-failure.test.ts",
+ "src/main/browser/browser-route-partition-binding-store.test.ts",
+ "src/main/browser/browser-screencast-lifecycle.test.ts",
+ "src/main/browser/browser-session-ua-cloudflare-live.electron.test.ts",
+ "src/main/browser/cdp-ws-proxy-focus-replay.test.ts",
+ "src/main/browser/client-route-cookie-import-source-store.test.ts",
+ "src/main/browser/doc-preview-failure-notice.test.ts",
+ "src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts",
+ "src/main/browser/paired-runtime-browser-host-lease.test.ts",
+ "src/main/browser/paired-runtime-browser-network-route.test.ts",
+ "src/main/browser/remote-browser-socks-buffering.test.ts",
+ "src/main/claude-accounts/claude-duplicate-account.test.ts",
+ "src/main/claude-accounts/runtime-auth-path-materialization.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-account-switching.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-materialization.test.ts",
+ "src/main/claude-usage/scanner-large-directory.test.ts",
+ "src/main/claude/claude-agent-sdk-contract-pins.test.ts",
+ "src/main/claude/claude-agent-sdk-root-kill-fallback.test.ts",
+ "src/main/claude/claude-provisional-row-corrections.test.ts",
+ "src/main/claude/claude-slash-command-catalog.test.ts",
+ "src/main/claude/claude-structured-journal-translation-subagents.test.ts",
+ "src/main/claude/claude-structured-launch-resolution.test.ts",
+ "src/main/claude/claude-structured-model-confirmation.test.ts",
+ "src/main/claude/claude-structured-options.test.ts",
+ "src/main/claude/claude-structured-provider-fallback.test.ts",
+ "src/main/claude/claude-transcript-branch-streaming.test.ts",
+ "src/main/claude/compact-status-registration.test.ts",
+ "src/main/cli/appimage-payload-removal.reentrancy.test.ts",
+ "src/main/cli/appimage-payload-removal.test.ts",
+ "src/main/cli/appimage-stable-launcher.test.ts",
+ "src/main/cli/linux-terminal-orca-cli-shim.test.ts",
+ "src/main/cli/windows-user-path-registry.test.ts",
+ "src/main/codex-accounts/codex-account-identity-api-key-guard.test.ts",
+ "src/main/codex-accounts/codex-windows-interactive-login.test.ts",
+ "src/main/codex-accounts/legacy-wsl-runtime-auth-drain-apply-script.test.ts",
+ "src/main/codex-accounts/legacy-wsl-runtime-auth-drain.test.ts",
+ "src/main/codex-accounts/runtime-home-per-account-homes.test.ts",
+ "src/main/codex-accounts/runtime-home-system-default-snapshot.test.ts",
+ "src/main/codex-accounts/runtime-home-wsl-managed-accounts.test.ts",
+ "src/main/codex-accounts/runtime-home-wsl-session-bridge.test.ts",
+ "src/main/codex-accounts/runtime-selection.test.ts",
+ "src/main/codex-accounts/service-account-add-login.test.ts",
+ "src/main/codex-accounts/service-managed-home-removal-retries.test.ts",
+ "src/main/codex-accounts/service-reset-credit-durability.test.ts",
+ "src/main/codex-accounts/sta-4734-login-rollback-deletes-authenticated-home.test.ts",
+ "src/main/codex/codex-account-session-bridge.test.ts",
+ "src/main/codex/codex-app-server-posix-supervisor.test.ts",
+ "src/main/codex/codex-app-server-session.test.ts",
+ "src/main/codex/codex-goal-journal-rows.test.ts",
+ "src/main/codex/codex-home-paths.test.ts",
+ "src/main/codex/codex-hook-trust-grant.test.ts",
+ "src/main/codex/codex-legacy-session-resume.test.ts",
+ "src/main/codex/codex-prompt-registry-retention.test.ts",
+ "src/main/codex/codex-session-resume-home.test.ts",
+ "src/main/codex/codex-structured-acquisition-exit-proof.test.ts",
+ "src/main/codex/codex-structured-journal-goal-resume.test.ts",
+ "src/main/codex/codex-structured-journal-translation-subagents.test.ts",
+ "src/main/codex/codex-structured-prompt-ownership.test.ts",
+ "src/main/codex/codex-trust-grant-telemetry.test.ts",
+ "src/main/codex/config-toml-hook-trust-scaling.test.ts",
+ "src/main/codex/config-toml-trust-hook-read.test.ts",
+ "src/main/computer/computer-provider-lifecycle.test.ts",
+ "src/main/computer/macos-computer-use-permissions.test.ts",
+ "src/main/computer/macos-native-provider-reaping.integration.test.ts",
+ "src/main/crash-reporting/process-gone-diagnostics.test.ts",
+ "src/main/crash-reporting/process-gone-recorder.test.ts",
+ "src/main/daemon/agent-startup-prompt-latency.node-pty.test.ts",
+ "src/main/daemon/daemon-background-transient-facts.test.ts",
+ "src/main/daemon/daemon-client-rpc-request.test.ts",
+ "src/main/daemon/daemon-folder-access-probe-script.test.ts",
+ "src/main/daemon/daemon-incarnation-evidence-main-thread.test.ts",
+ "src/main/daemon/daemon-init-packaged-bundle-staleness.test.ts",
+ "src/main/daemon/daemon-pid-file-parse.test.ts",
+ "src/main/daemon/daemon-pty-adapter-cold-restore-reanchor.test.ts",
+ "src/main/daemon/daemon-pty-adapter-concurrent-recovery.test.ts",
+ "src/main/daemon/daemon-shared-owner-incarnation-retention.test.ts",
+ "src/main/daemon/daemon-tcc-attribution.test.ts",
+ "src/main/daemon/daemon-transport-attachment-release.test.ts",
+ "src/main/daemon/headless-emulator-unicode-width.test.ts",
+ "src/main/daemon/headless-emulator-wide-char-repaint.test.ts",
+ "src/main/daemon/pty-subprocess-foreground-degraded-scan.test.ts",
+ "src/main/daemon/repro-7329-remote-snapshot-corruption.test.ts",
+ "src/main/daemon/session-ingest-throughput.bench.test.ts",
+ "src/main/daemon/terminal-history-large-checkpoint-cold-restore.test.ts",
+ "src/main/daemon/terminal-history-seed-chunks.test.ts",
+ "src/main/daemon/terminal-history-session-tombstone-retry.test.ts",
+ "src/main/daemon/terminal-host-cwd-readability.test.ts",
+ "src/main/daemon/terminal-host-wsl-context.test.ts",
+ "src/main/devin/hook-service.test.ts",
+ "src/main/droid/hook-service.test.ts",
+ "src/main/emulator/serve-sim-detached-session.test.ts",
+ "src/main/ghostty/discovery.test.ts",
+ "src/main/git/branch-rename.test.ts",
+ "src/main/git/command-runner/git-operation-executor.test.ts",
+ "src/main/git/exact-ref-probe.test.ts",
+ "src/main/git/remove-worktree.test.ts",
+ "src/main/git/repo-api-parity.test.ts",
+ "src/main/git/runner-windows-host-environment.test.ts",
+ "src/main/git/source-control/wsl-tracked-pathspec-banner.test.ts",
+ "src/main/git/status-cquoted-paths.test.ts",
+ "src/main/git/status-pathspec-literals.test.ts",
+ "src/main/git/status-read-coalescing.test.ts",
+ "src/main/git/status-shared-symlinks.test.ts",
+ "src/main/git/worktree-base-ref-probe.test.ts",
+ "src/main/git/worktree-create-git-executor-real-git.test.ts",
+ "src/main/git/worktree-deferred-removal-real-git.test.ts",
+ "src/main/git/worktree-graph-listing.test.ts",
+ "src/main/git/worktree-list-paths.test.ts",
+ "src/main/git/worktree-listing-created-sparse-distro.test.ts",
+ "src/main/git/worktree-move.test.ts",
+ "src/main/git/worktree-preparation-base-oid.test.ts",
+ "src/main/git/worktree-symlink-detection.test.ts",
+ "src/main/git/wsl-direct-git-read-commands.test.ts",
+ "src/main/github/client-file-viewed.test.ts",
+ "src/main/github/client-tracked-upstream-fork-owner.test.ts",
+ "src/main/github/client-work-items.test.ts",
+ "src/main/github/gh-account-token.test.ts",
+ "src/main/github/github-enterprise-repository.test.ts",
+ "src/main/github/github-repository-identity.ssh-host-alias.test.ts",
+ "src/main/github/pr-refresh-coordinator-active-burst-pacing.test.ts",
+ "src/main/github/work-item-details-api-parity.test.ts",
+ "src/main/github/work-item-details-pr-files.test.ts",
+ "src/main/github/work-item-search-pagination.test.ts",
+ "src/main/gitlab/client-mr-listing.test.ts",
+ "src/main/gitlab/client.test.ts",
+ "src/main/gitlab/mappers-workitem.test.ts",
+ "src/main/grok-accounts/status.test.ts",
+ "src/main/grok/grok-hook-owners.test.ts",
+ "src/main/hook-termination-real-process.test.ts",
+ "src/main/ipc/ai-vault.test.ts",
+ "src/main/ipc/crash-reporting-renderer-breadcrumbs.test.ts",
+ "src/main/ipc/emulator-stream-listener-cleanup.test.ts",
+ "src/main/ipc/filesystem-commit-message-generation.test.ts",
+ "src/main/ipc/filesystem-commit-message-model-discovery.test.ts",
+ "src/main/ipc/filesystem-import-ssh-ops.test.ts",
+ "src/main/ipc/git-status-upstream-ref-watch-request.test.ts",
+ "src/main/ipc/linear.test.ts",
+ "src/main/ipc/local-log-tail-lifetime.test.ts",
+ "src/main/ipc/mobile.test.ts",
+ "src/main/ipc/notifications-permission-onboarding.test.ts",
+ "src/main/ipc/parcel-watcher-disconnect-termination.test.ts",
+ "src/main/ipc/parcel-watcher-event-delivery.test.ts",
+ "src/main/ipc/parcel-watcher-shallow-subscription.test.ts",
+ "src/main/ipc/preflight-wsl-command.test.ts",
+ "src/main/ipc/pty-cumulative-ack-accounting.test.ts",
+ "src/main/ipc/pty-daemon-spawn-agent-home-env.test.ts",
+ "src/main/ipc/pty-delivery-health-heal.test.ts",
+ "src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts",
+ "src/main/ipc/pty-producer-flow-control.test.ts",
+ "src/main/ipc/pty-renderer-send-failure-recovery.test.ts",
+ "src/main/ipc/pty-runtime-ssh-binding-persistence.test.ts",
+ "src/main/ipc/pty-spawn-env-codex-resume-provenance.test.ts",
+ "src/main/ipc/pty-startup-barrier-ordering.test.ts",
+ "src/main/ipc/pty/host-env/omp-launch-environment.test.ts",
+ "src/main/ipc/pty/pane/stable-pane-relay-absence-respawn.test.ts",
+ "src/main/ipc/readdir-error-diagnostics.test.ts",
+ "src/main/ipc/remote-workspace.test.ts",
+ "src/main/ipc/renderer-shutdown-checkpoint.test.ts",
+ "src/main/ipc/repos-create.test.ts",
+ "src/main/ipc/repos/remote-repo-registration.test.ts",
+ "src/main/ipc/runtime-environment-transport-generation.test.ts",
+ "src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts",
+ "src/main/ipc/runtime-environments-subscription-teardown.test.ts",
+ "src/main/ipc/ssh-disconnect-cancellation.test.ts",
+ "src/main/ipc/ssh-pty-output-exit-deadline.test.ts",
+ "src/main/ipc/ssh-pty-source-ack-session-contract.test.ts",
+ "src/main/ipc/workspace-cleanup-broad-scan.test.ts",
+ "src/main/ipc/worktree-head-identity-reader-incremental.test.ts",
+ "src/main/ipc/worktree-head-identity-refresh.test.ts",
+ "src/main/ipc/worktree-symlink-reconciliation.real.test.ts",
+ "src/main/ipc/worktrees-create-metadata-persistence.test.ts",
+ "src/main/ipc/worktrees-existing-branch-checkout.test.ts",
+ "src/main/ipc/worktrees-ssh-base-ref-resolution.test.ts",
+ "src/main/ipc/worktrees-ssh-local-base-refresh.test.ts",
+ "src/main/ipc/worktrees-ssh-provider-authority.test.ts",
+ "src/main/ipc/worktrees-ssh-setup-launch.test.ts",
+ "src/main/ipc/worktrees-wsl-runtime-routing.test.ts",
+ "src/main/ipc/worktrees/listing/register-sparse-checkout-cache-invalidation.test.ts",
+ "src/main/jira/issues.test.ts",
+ "src/main/jira/jira-search-abort.test.ts",
+ "src/main/keybindings/keybinding-file.test.ts",
+ "src/main/linear/issue-context-current.test.ts",
+ "src/main/linear/issue-context-relations.test.ts",
+ "src/main/linear/issue-list-filter.test.ts",
+ "src/main/linear/linear-workspace-registry.test.ts",
+ "src/main/linear/teams.test.ts",
+ "src/main/menu/register-app-menu.test.ts",
+ "src/main/muse/hook-config-json.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-legacy-import.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-history-byte-accounting.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-history-page-grouping-parity.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-forget-status.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-flow-runner.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-handoff.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-holds.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-operation-settlement.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-proven-dead-retry.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-readable-restorer.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-restore-gate.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-status-reentry.test.ts",
+ "src/main/native-chat/session-file-resolver-codex-roots.test.ts",
+ "src/main/native-chat/transcript-line-decoders-codex-skill-context.test.ts",
+ "src/main/native-chat/transcript-read-cache-refusal-recovery.test.ts",
+ "src/main/native-chat/transcript-read-cache-wsl-stall.test.ts",
+ "src/main/native-chat/transcript-turn-lifecycle.test.ts",
+ "src/main/native-chat/transcript-watch-unflushed-settle.test.ts",
+ "src/main/native-chat/transcript-watch-wsl-stall.test.ts",
+ "src/main/notifications/notification-delivery-service.test.ts",
+ "src/main/orca-profiles/profile-cloud-service-auth-retry.test.ts",
+ "src/main/orca-profiles/profile-cloud-service-connect-overlap.test.ts",
+ "src/main/orca-profiles/profile-cloud-service-refresh.test.ts",
+ "src/main/orca-profiles/profile-project-session-field-disposition.test.ts",
+ "src/main/orca-profiles/profile-project-session-state.test.ts",
+ "src/main/orcad/external-chromium-browser-session.test.ts",
+ "src/main/orcad/main-preflight-order.test.ts",
+ "src/main/orcad/native-host-abi.test.ts",
+ "src/main/orcad/orcad-native-preflight.test.ts",
+ "src/main/persistence-pty-binding-leaf-tab-resolution.test.ts",
+ "src/main/persistence-right-sidebar-tab.test.ts",
+ "src/main/persistence-settings-update.test.ts",
+ "src/main/persistence-ssh-lease-reattach-reclaim.test.ts",
+ "src/main/persistence/restoring-sessions/session-owner-fields.test.ts",
+ "src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts",
+ "src/main/pi/agent-status-omp-approval-forwarding.test.ts",
+ "src/main/pi/omp-transcript-metadata.test.ts",
+ "src/main/plugins/plugin-audit-log.test.ts",
+ "src/main/plugins/plugin-content-safety.test.ts",
+ "src/main/plugins/plugin-host-methods.test.ts",
+ "src/main/plugins/plugin-kill-list-service.test.ts",
+ "src/main/project-groups/nested-repo-discovery-queue.test.ts",
+ "src/main/providers/local-pty-utils.test.ts",
+ "src/main/providers/pty-repaint-wide-char-buffer.node-pty.test.ts",
+ "src/main/providers/ssh-filesystem-dispatch.test.ts",
+ "src/main/providers/ssh-git-provider-commit-message.test.ts",
+ "src/main/providers/ssh-git-worktree-list-dedupe.test.ts",
+ "src/main/providers/ssh-pty-relay-absence-verdict.test.ts",
+ "src/main/providers/ssh-worktree-catalog-authority.test.ts",
+ "src/main/providers/stable-foreground-process.test.ts",
+ "src/main/providers/windows-cached-agent-revalidation.test.ts",
+ "src/main/providers/windows-foreground-process-inspection-cost.test.ts",
+ "src/main/providers/windows-foreground-process-rows.test.ts",
+ "src/main/provisioned-root-ssh-adoption.test.ts",
+ "src/main/pty-descendant-exit-verification.test.ts",
+ "src/main/pty/conda-activation-env.test.ts",
+ "src/main/pty/node-pty-master-fd-retirement.test.ts",
+ "src/main/pty/node-pty-self-exit-pseudoconsole-close.test.ts",
+ "src/main/pty/posix-pty-process-groups.integration.test.ts",
+ "src/main/pty/wsl-orca-env.test.ts",
+ "src/main/rate-limits/claude-usage-refresh-plan.test.ts",
+ "src/main/rate-limits/codex-fetcher-rpc-exit-diagnostics.test.ts",
+ "src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts",
+ "src/main/rate-limits/grok-fetcher.test.ts",
+ "src/main/repo-icon-source-href.test.ts",
+ "src/main/runtime/agent-prompt-line-settle.test.ts",
+ "src/main/runtime/agent-prompt-receipt-correlation.test.ts",
+ "src/main/runtime/agent-session-process-identity-probe.test.ts",
+ "src/main/runtime/agent-session-pty-write-enforcement.test.ts",
+ "src/main/runtime/agent-session-recovery-publish-fault.test.ts",
+ "src/main/runtime/agent-session-reservation-admission.test.ts",
+ "src/main/runtime/antigravity-terminal-readiness.test.ts",
+ "src/main/runtime/browser-host-capability-selection.test.ts",
+ "src/main/runtime/browser-host-command-ledger-capacity.test.ts",
+ "src/main/runtime/browser-host-page-reconciliation-executor.test.ts",
+ "src/main/runtime/browser-host-page-reconciliation-plan.test.ts",
+ "src/main/runtime/claude-agent-teams-shim-env.test.ts",
+ "src/main/runtime/client-hosted-browser-row-hydration-census.test.ts",
+ "src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts",
+ "src/main/runtime/host-terminal-close-persistence-durability.test.ts",
+ "src/main/runtime/leaf-pty-verdict-expiry.test.ts",
+ "src/main/runtime/managed-worktree-create-execution-host.test.ts",
+ "src/main/runtime/mobile-agent-status-permission-renewal.test.ts",
+ "src/main/runtime/mobile-notification-dismissal-read-failure.test.ts",
+ "src/main/runtime/mobile-notification-replay.test.ts",
+ "src/main/runtime/mobile-session-tabs-churn-coalescing.test.ts",
+ "src/main/runtime/mobile-session-terminal-retirement-proof.test.ts",
+ "src/main/runtime/orca-runtime-structured-agent-session-create-intent.test.ts",
+ "src/main/runtime/orca-runtime-tail-wait-memo.test.ts",
+ "src/main/runtime/orca-runtime-terminal-retirement.test.ts",
+ "src/main/runtime/orchestration-mailbox-filtered-waiters.test.ts",
+ "src/main/runtime/orchestration/coordinator-stale-base-flag.test.ts",
+ "src/main/runtime/orchestration/db-task-dispatch-lifecycle-guards.test.ts",
+ "src/main/runtime/orchestration/db/dispatch-depth.test.ts",
+ "src/main/runtime/orchestration/db/messages/mailbox-consumer-lifecycle-fencing.test.ts",
+ "src/main/runtime/orchestration/db/writer-run-required.test.ts",
+ "src/main/runtime/orchestration/groups.test.ts",
+ "src/main/runtime/orchestration/mailbox-pointer-stage.test.ts",
+ "src/main/runtime/orchestration/mutation-receipt-capacity.test.ts",
+ "src/main/runtime/orchestration/orchestration-version-skew-migration.test.ts",
+ "src/main/runtime/pty-inventory-lifecycle-scope.test.ts",
+ "src/main/runtime/pty-inventory-liveness-verdict.test.ts",
+ "src/main/runtime/pty-inventory-partial-relay-liveness.test.ts",
+ "src/main/runtime/public-ssh-state.test.ts",
+ "src/main/runtime/push/push-dispatcher.test.ts",
+ "src/main/runtime/push/push-registration-rpc.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-pane-reservation.test.ts",
+ "src/main/runtime/rpc/methods/agent-session.test.ts",
+ "src/main/runtime/rpc/methods/artifact-sharing-capability-grant.test.ts",
+ "src/main/runtime/rpc/methods/artifacts.test.ts",
+ "src/main/runtime/rpc/methods/browser-client-host.test.ts",
+ "src/main/runtime/rpc/methods/browser-tab-create-schema.test.ts",
+ "src/main/runtime/rpc/methods/computer-actions.test.ts",
+ "src/main/runtime/rpc/methods/files-base64-padding.test.ts",
+ "src/main/runtime/rpc/methods/files-path-search.test.ts",
+ "src/main/runtime/rpc/methods/files-preview-transport-budget.test.ts",
+ "src/main/runtime/rpc/methods/files-terminal-path-resolution.test.ts",
+ "src/main/runtime/rpc/methods/linear.test.ts",
+ "src/main/runtime/rpc/methods/native-chat-rpc-block-sanitize.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-lifecycle-settlement.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/check-delivery-history.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/runs/runs.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/composed-workers.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/fleet-status-terminal-identity.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/legacy-dispatch-projection.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/self-dispatch-nesting-depth.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/structured-worker-launch-seed-options.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-list-run-scope-rpc.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts",
+ "src/main/runtime/rpc/methods/preflight.test.ts",
+ "src/main/runtime/rpc/methods/session-tab-browser-placement-mutations.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs.test.ts",
+ "src/main/runtime/rpc/methods/worktree-schemas.test.ts",
+ "src/main/runtime/rpc/mobile-clipboard-image-provenance.test.ts",
+ "src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts",
+ "src/main/runtime/rpc/orchestration-11745-regression-verification.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-coordinator-race.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-ack-overflow-recovery.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-flow-control.bench.test.ts",
+ "src/main/runtime/runtime-browser-client-automation.test.ts",
+ "src/main/runtime/runtime-client-settings-terminal-copy-projection.test.ts",
+ "src/main/runtime/runtime-extraction-regressions.test.ts",
+ "src/main/runtime/runtime-git-api-contract.test.ts",
+ "src/main/runtime/runtime-git-command-target.test.ts",
+ "src/main/runtime/runtime-git-conflict-operation-routing.test.ts",
+ "src/main/runtime/runtime-git-status-admission.test.ts",
+ "src/main/runtime/runtime-graph-reload-lifecycle.test.ts",
+ "src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts",
+ "src/main/runtime/runtime-rpc-mobile-terminal-streaming.test.ts",
+ "src/main/runtime/runtime-rpc-mobile-unknown-method-scope-refusal.test.ts",
+ "src/main/runtime/runtime-rpc-request-authorization.test.ts",
+ "src/main/runtime/runtime-worktree-agent-rows-structured.test.ts",
+ "src/main/runtime/runtime-worktree-structured-agent-rows-liveness.test.ts",
+ "src/main/runtime/saved-structured-agent-session-restoration.test.ts",
+ "src/main/runtime/structured-agent-session-integration-replay.test.ts",
+ "src/main/runtime/structured-tui-process-identity.test.ts",
+ "src/main/runtime/structured-worker-agent-presence.test.ts",
+ "src/main/runtime/terminal-interactive-wait-visibility.test.ts",
+ "src/main/runtime/terminal-list-execution-host-scope.test.ts",
+ "src/main/runtime/terminal-orphan-owner.test.ts",
+ "src/main/runtime/terminal-query-responder.test.ts",
+ "src/main/runtime/terminal-restore-record-seed.test.ts",
+ "src/main/runtime/terminal-retirement-proof-emitted-frame.test.ts",
+ "src/main/runtime/terminal-vertical-control-scan.test.ts",
+ "src/main/runtime/windows-default-route-interfaces.test.ts",
+ "src/main/runtime/workspace-session-worktree-id.test.ts",
+ "src/main/runtime/worktree-list-host-scope.test.ts",
+ "src/main/runtime/worktree-ps-host-scope.test.ts",
+ "src/main/skills/skill-bundle-artifacts.test.ts",
+ "src/main/skills/skill-bundle-ssh-relay-service.test.ts",
+ "src/main/skills/skill-cloud-direct-upload.test.ts",
+ "src/main/skills/skill-cloud-install-target.test.ts",
+ "src/main/skills/skill-delete/service.test.ts",
+ "src/main/skills/skill-discovery-concurrency.test.ts",
+ "src/main/skills/skill-discovery-wsl-alias-sharing.test.ts",
+ "src/main/skills/skill-install-discovery-verification.test.ts",
+ "src/main/skills/skill-install-lock.test.ts",
+ "src/main/skills/skill-operation-observability.test.ts",
+ "src/main/skills/skill-package-identity.test.ts",
+ "src/main/skills/skill-placement-alias-repair.test.ts",
+ "src/main/skills/skill-placement-reconciliation.test.ts",
+ "src/main/skills/skill-placement-transaction.test.ts",
+ "src/main/skills/skill-remote-install-cancellation.test.ts",
+ "src/main/skills/skill-share-preparation-service.test.ts",
+ "src/main/skills/skill-windows-rename-contention.integration.test.ts",
+ "src/main/source-control/hosted-review-gitea.integration.test.ts",
+ "src/main/speech/model-manager-windows-path.test.ts",
+ "src/main/ssh/relay-socket-path-limit-shell.integration.test.ts",
+ "src/main/ssh/sftp-stream-late-error.test.ts",
+ "src/main/ssh/ssh-agent-identity-filter.test.ts",
+ "src/main/ssh/ssh-channel-multiplexer.test.ts",
+ "src/main/ssh/ssh-config-alias-claim.test.ts",
+ "src/main/ssh/ssh-config-parser-host-patterns.test.ts",
+ "src/main/ssh/ssh-connection-manager.test.ts",
+ "src/main/ssh/ssh-connection.test.ts",
+ "src/main/ssh/ssh-control-socket.test.ts",
+ "src/main/ssh/ssh-g-config-resolution.test.ts",
+ "src/main/ssh/ssh-known-hosts-source.test.ts",
+ "src/main/ssh/ssh-pty-consumer-recovery.test.ts",
+ "src/main/ssh/ssh-pty-retired-source-deliveries.test.ts",
+ "src/main/ssh/ssh-reconnect-ladder.test.ts",
+ "src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts",
+ "src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts",
+ "src/main/ssh/ssh-relay-deploy-staged-upload.test.ts",
+ "src/main/ssh/ssh-relay-gc-retry.test.ts",
+ "src/main/ssh/ssh-relay-native-deps-cache.test.ts",
+ "src/main/ssh/ssh-relay-sentinel-copy-budget.test.ts",
+ "src/main/ssh/ssh-relay-session-rejected-delivery.test.ts",
+ "src/main/ssh/ssh-relay-sftp-namespace-install.test.ts",
+ "src/main/ssh/ssh-remote-orchestration-compatibility.test.ts",
+ "src/main/ssh/system-ssh-windows-upload.test.ts",
+ "src/main/startup/login-shell-environment-cache.test.ts",
+ "src/main/startup/pre-gone-crash-sampling-wiring.test.ts",
+ "src/main/startup/renderer-heap-headroom.test.ts",
+ "src/main/startup/windows-shell-path-hydration.test.ts",
+ "src/main/startup/windows-user-data-acl.test.ts",
+ "src/main/system-power-lifecycle.test.ts",
+ "src/main/telemetry/classify-error.test.ts",
+ "src/main/telemetry/client-lifecycle.test.ts",
+ "src/main/text-generation/commit-message-command-backslash-mode.test.ts",
+ "src/main/tray/tray-attention-icon.test.ts",
+ "src/main/updater.mac-install.test.ts",
+ "src/main/usage/highest-usage-key.test.ts",
+ "src/main/warp-themes/discovery.test.ts",
+ "src/main/warp-themes/index.test.ts",
+ "src/main/warp-themes/manual-warp-theme-files.test.ts",
+ "src/main/win32-utils-async-acl.test.ts",
+ "src/main/window/attach-main-window-services.test.ts",
+ "src/main/window/clipboard-file-copy.test.ts",
+ "src/main/window/clipboard-remote-file-copy.test.ts",
+ "src/main/window/createMainWindow-renderer-crash-recovery.test.ts",
+ "src/main/window/createMainWindow-tray-minimize-close.test.ts",
+ "src/main/window/main-window-webview-security.test.ts",
+ "src/main/window/runtime-renderer-notification-sender.test.ts",
+ "src/main/windows-live-tree-kill.win32.test.ts",
+ "src/main/windows/windows-process-table.test.ts",
+ "src/main/workspace-space-repo-scan.test.ts",
+ "src/main/worktree-archive-hook-cannot-run.test.ts",
+ "src/main/worktree-create-base-prefetch.test.ts",
+ "src/main/worktree-create-preparation.test.ts",
+ "src/main/worktree-metadata-ownership.test.ts",
+ "src/main/worktree-retirement-backfill-scan.test.ts",
+ "src/main/wsl-availability-missing-kernel.test.ts",
+ "src/main/wsl-fish-history-cleanup.test.ts",
+ "src/main/wsl.test.ts",
+ "src/main/wsl/wsl-probe-failure-semantics.test.ts",
+ "src/preload/doc-preview-link-interception.test.ts",
+ "src/preload/renderer-process-memory-reader.test.ts",
+ "src/relay/agent-exec-handler.test.ts",
+ "src/relay/agent-status-store-relay-context.test.ts",
+ "src/relay/dispatcher-silent-client-reaper.test.ts",
+ "src/relay/fs-handler-file-range-dispatch.test.ts",
+ "src/relay/fs-handler-list-files-ignored.test.ts",
+ "src/relay/fs-handler-readdir-fallback.test.ts",
+ "src/relay/fs-list-files-cancel.integration.test.ts",
+ "src/relay/git-handler-submodule-status-cancellation.test.ts",
+ "src/relay/git-status-upstream-negative-cache.test.ts",
+ "src/relay/managed-hook-installer.test.ts",
+ "src/relay/pty-handler-output-streaming.test.ts",
+ "src/relay/pty-handler-spawn-cwd.test.ts",
+ "src/relay/pty-shell-launch.test.ts",
+ "src/relay/relay-hot-path-operation-counts.test.ts",
+ "src/relay/relay-launch-options.test.ts",
+ "src/relay/relay-pty-source-exit-publication.test.ts",
+ "src/relay/remote-cli-env.test.ts",
+ "src/relay/remote-cli-timeout.test.ts",
+ "src/relay/retired-pane-surfaces.test.ts",
+ "src/relay/rotating-log-writer.test.ts",
+ "src/relay/ssh-pty-consumer-session-adapter.test.ts",
+ "src/relay/terminal-history.test.ts",
+ "src/renderer/src/app-shell/startup-actions-selector.test.ts",
+ "src/renderer/src/components/UpdateCard.test.ts",
+ "src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx",
+ "src/renderer/src/components/WorktreeJumpPalette.recent-tabs.behavior.test.tsx",
+ "src/renderer/src/components/WorktreeJumpPalette.recent-tabs.test.tsx",
+ "src/renderer/src/components/activity/ActivityPrototypePage.test.ts",
+ "src/renderer/src/components/activity/ActivityThreadOptionsMenu.test.tsx",
+ "src/renderer/src/components/activity/activity-clear-completed-hmr.test.ts",
+ "src/renderer/src/components/activity/activity-portal-readiness-loop.react185.test.tsx",
+ "src/renderer/src/components/activity/activity-thread-list-pane-collapsible.test.tsx",
+ "src/renderer/src/components/activity/use-activity-thread-action-bindings.test.tsx",
+ "src/renderer/src/components/agent/agent-combobox-command-state.test.ts",
+ "src/renderer/src/components/automations/AutomationDestinationField.test.tsx",
+ "src/renderer/src/components/automations/AutomationHostBadges.test.tsx",
+ "src/renderer/src/components/automations/automation-authority-identity.test.ts",
+ "src/renderer/src/components/automations/automation-host-picker-groups.test.ts",
+ "src/renderer/src/components/automations/automation-list-empty-state.test.ts",
+ "src/renderer/src/components/automations/automation-list-row-identity.test.ts",
+ "src/renderer/src/components/automations/automation-run-open-target.test.ts",
+ "src/renderer/src/components/automations/automation-target-availability.test.ts",
+ "src/renderer/src/components/automations/use-automation-host-catalog-readoption.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.dead-guest.test.tsx",
+ "src/renderer/src/components/browser-pane/ReopenBrowserPageOnServerButton.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/browser-page-annotation-tray.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/markup-screenshot-compose.test.ts",
+ "src/renderer/src/components/browser-pane/annotate/use-markup-draw-hint.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-deferred-lifecycle.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-import-hint-visibility.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/use-browser-page-find-shortcuts.test.tsx",
+ "src/renderer/src/components/browser-pane/browser-client-page-metadata-route-census.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/browser-artifact-upload.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/browser-favicon-url.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-guest-worktree-retention.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-viewport.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-webview.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/browser-page-download-activity.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/chromium-error-page-poll-visibility.test.ts",
+ "src/renderer/src/components/browser-pane/restored-client-hosted-recovery-window.test.tsx",
+ "src/renderer/src/components/browser-pane/workspace-doc/workspace-doc-page-pane.test.tsx",
+ "src/renderer/src/components/cmd-j/palette-query-tokens.test.ts",
+ "src/renderer/src/components/cmd-j/palette-results.test.ts",
+ "src/renderer/src/components/codex-restart-chip.test.tsx",
+ "src/renderer/src/components/contextual-tours/ContextualTourOverlay.test.tsx",
+ "src/renderer/src/components/dashboard-popout/AgentKanbanBoard.test.tsx",
+ "src/renderer/src/components/dashboard-popout/AgentTerminalDialog.test.tsx",
+ "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.test.tsx",
+ "src/renderer/src/components/dashboard-popout/preview-terminal-shortcuts.test.ts",
+ "src/renderer/src/components/dashboard/agent-dashboard-performance-isolation.test.ts",
+ "src/renderer/src/components/diff-comments/diff-comment-zone-mouse-events.test.ts",
+ "src/renderer/src/components/diff-comments/useDiffCommentDecorator.range-selection.test.tsx",
+ "src/renderer/src/components/editor/EditorContent.test.tsx",
+ "src/renderer/src/components/editor/ExternalFileChangeCompareDialog.test.tsx",
+ "src/renderer/src/components/editor/RichMarkdownErrorBoundary.lazy-chunk.test.tsx",
+ "src/renderer/src/components/editor/RichMarkdownSlashMenu.test.tsx",
+ "src/renderer/src/components/editor/check-annotation-path.test.ts",
+ "src/renderer/src/components/editor/check-run-clipboard-text.test.ts",
+ "src/renderer/src/components/editor/check-run-details-tab.test.ts",
+ "src/renderer/src/components/editor/closed-editor-model-reentrancy.test.ts",
+ "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-collapsed-work.test.tsx",
+ "src/renderer/src/components/editor/diff-monaco-model-disposal.test.ts",
+ "src/renderer/src/components/editor/diff-section-preview.test.ts",
+ "src/renderer/src/components/editor/editor-content-dirty-state.test.ts",
+ "src/renderer/src/components/editor/editor-file-save-attempt.test.ts",
+ "src/renderer/src/components/editor/editor-header-file-rename.test.ts",
+ "src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts",
+ "src/renderer/src/components/editor/editor-self-write-registry.test.ts",
+ "src/renderer/src/components/editor/markdown-reference-link-normalization.test.ts",
+ "src/renderer/src/components/editor/monaco-codebase-search.test.ts",
+ "src/renderer/src/components/editor/monaco-content-sync.undo-history.test.ts",
+ "src/renderer/src/components/editor/monaco-find-options.test.ts",
+ "src/renderer/src/components/editor/pdf-js-document-options.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-doc-link.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-local-image.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-range-bounds.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-review-text-ranges.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-search-matches-cache.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-search.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-table-control-layout.test.ts",
+ "src/renderer/src/components/editor/useEditorPanelHostUnresolvedContentState.test.tsx",
+ "src/renderer/src/components/editor/useIpynbDocumentEditing.test.tsx",
+ "src/renderer/src/components/emulator-pane/use-emulator-pane-session.test.tsx",
+ "src/renderer/src/components/emulator-pane/use-mobile-emulator-tab-intro-actions.test.tsx",
+ "src/renderer/src/components/feature-tips/CmdJPaletteFeatureTipVisual.test.tsx",
+ "src/renderer/src/components/feature-wall/feature-wall-setup-checklist-localized-copy.test.ts",
+ "src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx",
+ "src/renderer/src/components/github-checks-tab-state.test.ts",
+ "src/renderer/src/components/github-project/project-picker-input.test.ts",
+ "src/renderer/src/components/github-project/project-visible-table-cache.test.ts",
+ "src/renderer/src/components/linear-issue-workspace-header.test.ts",
+ "src/renderer/src/components/linear-scope-selector.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatBackgroundTaskRun.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatBackgroundTasksStatus.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageRow.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatStructuredSession.transport-probe.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatToolRun.ask-row.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatToolRun.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatTranscriptChrome.test.tsx",
+ "src/renderer/src/components/native-chat/StructuredAgentSessionPaneOverlayLayer.test.tsx",
+ "src/renderer/src/components/native-chat/claude-model-switch-confirmation.test.ts",
+ "src/renderer/src/components/native-chat/claude-terminal-session-options.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-composer-drop-scope.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-incremental-assembler.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-interactive-prompt.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-runtime-send.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-send.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-session-option-labels.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-shortcut.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-thread-goal-rows.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-file-link-click.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-interactive-send.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-retained-session.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-session-option-command.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-skills.react.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-structured-composer-send.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-read.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-transport.test.tsx",
+ "src/renderer/src/components/new-workspace/ProjectCombobox.dialog-handoff.test.tsx",
+ "src/renderer/src/components/new-workspace/ProjectCombobox.test.tsx",
+ "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-source-boundaries.test.ts",
+ "src/renderer/src/components/new-workspace/smart-workspace-source-results.test.ts",
+ "src/renderer/src/components/onboarding/OnboardingInlineCommandTerminal.command-finished.test.tsx",
+ "src/renderer/src/components/onboarding/ThemeStep.test.ts",
+ "src/renderer/src/components/onboarding/onboarding-folder-agent-startup.test.ts",
+ "src/renderer/src/components/pet/PetOverlay.pointer-interaction.test.tsx",
+ "src/renderer/src/components/pet/sprite-animation-css.test.ts",
+ "src/renderer/src/components/pull-request-page/mentions/options.test.ts",
+ "src/renderer/src/components/repo/repo-icon.test.tsx",
+ "src/renderer/src/components/right-sidebar/AiVaultPanelHeader.focus.test.tsx",
+ "src/renderer/src/components/right-sidebar/AiVaultSessionRow.test.tsx",
+ "src/renderer/src/components/right-sidebar/CommitArea.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerToolbar.test.tsx",
+ "src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.commit-drafts.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControl.hosted-review-header-link.test.tsx",
+ "src/renderer/src/components/right-sidebar/activity-bar-buttons.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-continuation.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-resume-in-chat-launch.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-inline-input-outside-click.test.tsx",
+ "src/renderer/src/components/right-sidebar/file-explorer-keyboard-navigation.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-reset.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-row-projection.test.ts",
+ "src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts",
+ "src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts",
+ "src/renderer/src/components/right-sidebar/right-panel-comment-composer.ime-enter.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control-actions.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-commit-message-rows.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-create-review-blocked-action.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-tree.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control/commit/source-control-entry-failure-toast.test.ts",
+ "src/renderer/src/components/right-sidebar/status-display.test.ts",
+ "src/renderer/src/components/right-sidebar/use-file-explorer-name-filter.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileExplorerHandlers.test.ts",
+ "src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts",
+ "src/renderer/src/components/right-sidebar/useHostedReviewStackParent.test.tsx",
+ "src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts",
+ "src/renderer/src/components/settings/AdvancedPane.test.tsx",
+ "src/renderer/src/components/settings/AppearancePane.test.tsx",
+ "src/renderer/src/components/settings/CliSection.install-failure.test.tsx",
+ "src/renderer/src/components/settings/FloatingWorkspacePane.test.tsx",
+ "src/renderer/src/components/settings/GeneralPane.test.ts",
+ "src/renderer/src/components/settings/NotificationsPane.test.tsx",
+ "src/renderer/src/components/settings/SessionHistoryComputerRow.test.tsx",
+ "src/renderer/src/components/settings/Settings.load-performance.test.ts",
+ "src/renderer/src/components/settings/SourceControlActionRepoOverrideNote.test.tsx",
+ "src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx",
+ "src/renderer/src/components/settings/developer-permissions-search.test.ts",
+ "src/renderer/src/components/settings/plugin-install-source.test.ts",
+ "src/renderer/src/components/settings/settings-project-list.test.ts",
+ "src/renderer/src/components/settings/ssh-target-save-payload.test.ts",
+ "src/renderer/src/components/settings/use-session-search-status.test.tsx",
+ "src/renderer/src/components/setup-guide/SetupGuideModal.mount-gating.test.tsx",
+ "src/renderer/src/components/shared/kill-all-terminal-surfaces.test.ts",
+ "src/renderer/src/components/shared/useDaemonActions.test.tsx",
+ "src/renderer/src/components/sidebar/AddRepoCreateStep.test.tsx",
+ "src/renderer/src/components/sidebar/DeleteWorktreeDialog.host-context-boundary.test.ts",
+ "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.reminder-toast.test.tsx",
+ "src/renderer/src/components/sidebar/ProjectHeaderActions.test.tsx",
+ "src/renderer/src/components/sidebar/RemoveFolderDialog.test.tsx",
+ "src/renderer/src/components/sidebar/Sidebar.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarNav.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.mount-gating.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardMeta.interaction.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardPorts.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeList.empty-project-rows.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx",
+ "src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts",
+ "src/renderer/src/components/sidebar/host-rename-remove.test.ts",
+ "src/renderer/src/components/sidebar/linear-agent-skill-runtime.shell-override.test.ts",
+ "src/renderer/src/components/sidebar/pinned-section-worktrees.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-project-drop.test.ts",
+ "src/renderer/src/components/sidebar/sleep-worktree-flow.test.ts",
+ "src/renderer/src/components/sidebar/truncated-sidebar-label.test.tsx",
+ "src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts",
+ "src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.test.ts",
+ "src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts",
+ "src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts",
+ "src/renderer/src/components/sidebar/useWorkspaceBoardPanel.test.tsx",
+ "src/renderer/src/components/sidebar/visible-worktrees.test.ts",
+ "src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts",
+ "src/renderer/src/components/sidebar/workspace-kanban-search.test.ts",
+ "src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts",
+ "src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts",
+ "src/renderer/src/components/sidebar/workspace-status.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-compact-agent-row.stable-message.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/rows/indentation.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sidebar-reveal.test.ts",
+ "src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts",
+ "src/renderer/src/components/skills/SkillFreshnessStatusPill.test.tsx",
+ "src/renderer/src/components/skills/skill-delete-copy.test.ts",
+ "src/renderer/src/components/skills/skill-package-digest.test.ts",
+ "src/renderer/src/components/skills/skill-share-preview-summary.test.ts",
+ "src/renderer/src/components/skills/skill-source-inventory.test.ts",
+ "src/renderer/src/components/source-control/SourceControlActionVariableChips.test.tsx",
+ "src/renderer/src/components/status-bar/PetStatusSegment.layout.test.ts",
+ "src/renderer/src/components/status-bar/codex-restart-status-summary.test.ts",
+ "src/renderer/src/components/status-bar/ports-status-popover-rows.test.tsx",
+ "src/renderer/src/components/status-bar/resource-manager-terminal-copy.test.ts",
+ "src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts",
+ "src/renderer/src/components/status-bar/workspace-space-breakdown-list.test.tsx",
+ "src/renderer/src/components/tab-bar/ClientHostedBrowserTabRows.test.tsx",
+ "src/renderer/src/components/tab-bar/EditorFileTabContextMenu.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBar.context-menu.test.ts",
+ "src/renderer/src/components/tab-bar/TabBarCreateEntry.history.test.tsx",
+ "src/renderer/src/components/tab-bar/TabBarQuickCommandsMenu.keyboard.test.ts",
+ "src/renderer/src/components/tab-bar/editor-tab-local-open-guard.test.ts",
+ "src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.test.ts",
+ "src/renderer/src/components/tab-bar/open-tab-search.test.ts",
+ "src/renderer/src/components/tab-bar/recent-tab-switching.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-classifier.runtime-listing.test.tsx",
+ "src/renderer/src/components/tab-bar/tab-create-entry-history-placement.test.ts",
+ "src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts",
+ "src/renderer/src/components/tab-group/tab-drag-retained-guest-passthrough.test.tsx",
+ "src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts",
+ "src/renderer/src/components/task-page-cache-selectors.test.ts",
+ "src/renderer/src/components/task-page-empty-state.test.ts",
+ "src/renderer/src/components/task-page-github-dialog-state-authority.test.ts",
+ "src/renderer/src/components/task-page-github-status-actions.test.ts",
+ "src/renderer/src/components/task-page-github-task-kind.test.ts",
+ "src/renderer/src/components/task-page-github-work-item-mutations.test.ts",
+ "src/renderer/src/components/task-page-jira-sorting.test.ts",
+ "src/renderer/src/components/terminal-pane/CloseTerminalDialog.test.tsx",
+ "src/renderer/src/components/terminal-pane/PinnedTabCloseDialog.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-attention-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-poll-interval.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts",
+ "src/renderer/src/components/terminal-pane/focused-pane-rim-flash.test.ts",
+ "src/renderer/src/components/terminal-pane/issue-4631-terminal-hover-link-provider.repro.test.ts",
+ "src/renderer/src/components/terminal-pane/keyboard-handlers.test.ts",
+ "src/renderer/src/components/terminal-pane/manual-terminal-worktree-park-eligibility.test.ts",
+ "src/renderer/src/components/terminal-pane/merge-captured-leaf-state.test.ts",
+ "src/renderer/src/components/terminal-pane/mobile-driver-overlay-focus.test.ts",
+ "src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.test.ts",
+ "src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-backlog-reconciliation.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-query-snapshot-restore.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-snapshot-live-overlap.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-snapshot-resize-signals.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hidden-tui-snapshot-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-renderer-risk-repaint.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-replay-payload-handling.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/reattach-result-handler-park-reveal-verdict.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-dispatcher-delivery-interest.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-reattach-admission.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-hidden-output-restore-outcomes.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-connect-failure-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-attach-subscription.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-session-launch.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-fallback.test.ts",
+ "src/renderer/src/components/terminal-pane/shutdown-buffer-captures.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-clipboard-paste.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-image-path.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-write-failure.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-hidden-restore-scrollback.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-http-link-activation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-http-link-source-owner.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-composition-route.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-composition-tracker.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-deferred-newline.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit-device-trace.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-open-hints.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-osc-file-targets.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-linkifier-click-priming.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-notification-state.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-hook-order-parity.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-park-verdict-flip-telemetry.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-tab-eviction-exemption.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers-batch-sync.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-operation-order.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-restored-viewport.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-url-link-click.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-webgl-diagnostics-breadcrumbs.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-file-drop.test.ts",
+ "src/renderer/src/components/terminal-pane/use-visible-terminal-tab-claim.test.ts",
+ "src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx",
+ "src/renderer/src/components/terminal-search-decoration-leak.test.ts",
+ "src/renderer/src/components/terminal/activation-deferred-tab-admission.test.ts",
+ "src/renderer/src/components/terminal/background-terminal-worktree-visibility.test.ts",
+ "src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts",
+ "src/renderer/src/components/terminal/terminal-close-copy-kind.test.ts",
+ "src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts",
+ "src/renderer/src/components/terminal/terminal-provider-snapshot-capability-resettlement.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-actions.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-bulk-actions.test.ts",
+ "src/renderer/src/components/ui/repo-multi-combobox.test.ts",
+ "src/renderer/src/components/virtualized-list.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-candidates.test.ts",
+ "src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts",
+ "src/renderer/src/hooks/agent-hook-completion-notifications.test.ts",
+ "src/renderer/src/hooks/agent-hook-completion-store-sync.test.ts",
+ "src/renderer/src/hooks/composer-state/composer-drop-listener.test.ts",
+ "src/renderer/src/hooks/installed-agent-skill-runtime-eviction.test.ts",
+ "src/renderer/src/hooks/ipc-tab-switch-group-order-hydration.test.ts",
+ "src/renderer/src/hooks/ipc-tab-switch.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-local-tab-survival.test.ts",
+ "src/renderer/src/hooks/shortcut-label-cache.test.tsx",
+ "src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts",
+ "src/renderer/src/hooks/useEditorExternalWatch-subscriptions.test.tsx",
+ "src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts",
+ "src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-queue-ordering.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts",
+ "src/renderer/src/hooks/useMacosTccPromptNotice.test.tsx",
+ "src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx",
+ "src/renderer/src/hooks/useVirtualizedScrollAnchor.marks-restore-signal.test.ts",
+ "src/renderer/src/hooks/worktree-head-identity-apply.test.ts",
+ "src/renderer/src/i18n/I18nProvider.test.tsx",
+ "src/renderer/src/i18n/integration-card-status-localization.test.ts",
+ "src/renderer/src/i18n/settings-status-label-localization.test.ts",
+ "src/renderer/src/lazy-use-ref-ratchet.test.ts",
+ "src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts",
+ "src/renderer/src/lib/active-view-persist.test.ts",
+ "src/renderer/src/lib/agent-draft-readiness.test.ts",
+ "src/renderer/src/lib/agent-followup-delivery.test.ts",
+ "src/renderer/src/lib/agent-launch-caller-permissions.test.ts",
+ "src/renderer/src/lib/agent-launch-route-input.test.ts",
+ "src/renderer/src/lib/agent-resume-launch-target.test.ts",
+ "src/renderer/src/lib/ai-vault-resume-shell.test.ts",
+ "src/renderer/src/lib/ai-vault-session-drag.test.ts",
+ "src/renderer/src/lib/browser-palette-page-entries.test.ts",
+ "src/renderer/src/lib/codex-account-display-label.test.ts",
+ "src/renderer/src/lib/comment-body-line-count.test.ts",
+ "src/renderer/src/lib/composer-submit-cancellation.test.ts",
+ "src/renderer/src/lib/direct-ssh-reconnect-product-telemetry.test.ts",
+ "src/renderer/src/lib/direct-ssh-target-scope.test.ts",
+ "src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts",
+ "src/renderer/src/lib/finished-agent-resume-resurrection.test.ts",
+ "src/renderer/src/lib/floating-workspace-tour-interaction-snapshot.test.ts",
+ "src/renderer/src/lib/folder-workspace-path-status.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts",
+ "src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts",
+ "src/renderer/src/lib/http-link-destinations.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-cwd.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts",
+ "src/renderer/src/lib/lazy-with-retry.right-sidebar-syntax-error.test.ts",
+ "src/renderer/src/lib/left-sidebar-appearance.test.ts",
+ "src/renderer/src/lib/local-path-open-guard.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-shell-markdown-aliases.test.ts",
+ "src/renderer/src/lib/native-chat-transcript-readability.test.ts",
+ "src/renderer/src/lib/notes-send-agent-targets.test.ts",
+ "src/renderer/src/lib/open-markdown-in-floating-workspace.test.ts",
+ "src/renderer/src/lib/pane-manager/client-hosted-browser-row-state.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-container-listener-lifecycle.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-divider-capture-loss.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-inline-image-recovery.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-lifecycle.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-scroll.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-split-close.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-foreground-render-settle.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-ime-anchor.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-scroll-intent.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-webgl-hidden-retention.test.ts",
+ "src/renderer/src/lib/pending-worktree-creation.test.ts",
+ "src/renderer/src/lib/pi-session-resume-wake.test.ts",
+ "src/renderer/src/lib/project-host-workspace-target.test.ts",
+ "src/renderer/src/lib/react-commit-cascade-observer.react185.test.tsx",
+ "src/renderer/src/lib/resume-stale-structured-agent-session.test.ts",
+ "src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts",
+ "src/renderer/src/lib/source-control-agent-action-plan.test.ts",
+ "src/renderer/src/lib/source-control-launch-platform.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-resume-identity.test.ts",
+ "src/renderer/src/lib/terminal-pane-title-sanitization.test.ts",
+ "src/renderer/src/lib/titlebar-left-chrome.test.ts",
+ "src/renderer/src/lib/typing-latency/echo-instrumentation.test.ts",
+ "src/renderer/src/lib/use-tab-agent.test.ts",
+ "src/renderer/src/lib/workspace-doc-address-input.test.ts",
+ "src/renderer/src/lib/workspace-emoji-shortcodes.test.ts",
+ "src/renderer/src/lib/workspace-session-host-split.test.ts",
+ "src/renderer/src/lib/workspace-session.test.ts",
+ "src/renderer/src/lib/workspace-tab-palette-activation.store.test.ts",
+ "src/renderer/src/lib/worktree-activation-automation-filter.test.ts",
+ "src/renderer/src/lib/worktree-activation-pty-inventory.test.ts",
+ "src/renderer/src/lib/worktree-activation-setup-script.test.ts",
+ "src/renderer/src/lib/worktree-activity-state.test.ts",
+ "src/renderer/src/lib/worktree-creation-chat-setup.test.ts",
+ "src/renderer/src/lib/worktree-creation-flow-agent-trust-preflight.test.ts",
+ "src/renderer/src/lib/worktree-creation-flow-stranded-surface.test.ts",
+ "src/renderer/src/lib/worktree-creation-flow.test.ts",
+ "src/renderer/src/lib/worktree-jump-navigation.test.ts",
+ "src/renderer/src/lib/worktree-palette-create-action.test.ts",
+ "src/renderer/src/lib/worktree-palette-task-url-match.test.ts",
+ "src/renderer/src/lib/worktree-runtime-owner-index.detected-perf.test.ts",
+ "src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts",
+ "src/renderer/src/runtime/agent-resume-host-authority-capability.test.ts",
+ "src/renderer/src/runtime/browser-workspace-tab-close-census.test.ts",
+ "src/renderer/src/runtime/client-hosted-browser-row-close.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-empty-inventory-settle.test.ts",
+ "src/renderer/src/runtime/remote-runtime-terminal-stale-stream-frames.test.ts",
+ "src/renderer/src/runtime/restored-client-hosted-browser-host-attach.test.ts",
+ "src/renderer/src/runtime/runtime-path-existence-pairing.test.ts",
+ "src/renderer/src/runtime/runtime-repo-search-bounds.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-staged-hosting-intent.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-placement-staleness.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-tab-props.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-terminal-legacy-create.test.ts",
+ "src/renderer/src/runtime/web-session-structured-tab-focus.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-editor-tabs.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-emptied-workspace-tombstone.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-recovery-ledger.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-handle-events.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery-regressions.test.ts",
+ "src/renderer/src/store/active-terminal-chrome-selector.test.ts",
+ "src/renderer/src/store/github/refresh-event-noop-notification.test.ts",
+ "src/renderer/src/store/projects/project-catalog-null-field-ingest.test.ts",
+ "src/renderer/src/store/projects/project-wsl-filesystem-boundary-advisory.test.ts",
+ "src/renderer/src/store/running-terminal-close-confirm.test.ts",
+ "src/renderer/src/store/slices/agent-status-drop.test.ts",
+ "src/renderer/src/store/slices/agent-status-pr-refresh-handoff.test.ts",
+ "src/renderer/src/store/slices/agent-status-quit-capture.test.ts",
+ "src/renderer/src/store/slices/browser-remote-tab-creation.test.ts",
+ "src/renderer/src/store/slices/browser.test.ts",
+ "src/renderer/src/store/slices/codex-restart-notice-lifecycle.test.ts",
+ "src/renderer/src/store/slices/detected-agents.test.ts",
+ "src/renderer/src/store/slices/direct-ssh-pane-detach-ledger.test.ts",
+ "src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts",
+ "src/renderer/src/store/slices/editor-check-details-tabs.test.ts",
+ "src/renderer/src/store/slices/editor-state-worktree-purge-leak.test.ts",
+ "src/renderer/src/store/slices/github-branch-mismatched-linked-pr.test.ts",
+ "src/renderer/src/store/slices/github-pr-checks-fetch.test.ts",
+ "src/renderer/src/store/slices/github-pr-refresh-sequences-leak.test.ts",
+ "src/renderer/src/store/slices/github-project-request-coordination.test.ts",
+ "src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts",
+ "src/renderer/src/store/slices/repos-project-group-create-race.test.ts",
+ "src/renderer/src/store/slices/repos-project-groups-owner-routing.test.ts",
+ "src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts",
+ "src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts",
+ "src/renderer/src/store/slices/runtime-status-skill-cache-eviction.test.ts",
+ "src/renderer/src/store/slices/runtime-status-snapshot.test.ts",
+ "src/renderer/src/store/slices/settings-owner-hydration-write-fence.test.ts",
+ "src/renderer/src/store/slices/settings.test.ts",
+ "src/renderer/src/store/slices/store-active-worktree-split-groups.test.ts",
+ "src/renderer/src/store/slices/store-create-tab-id-hint.test.ts",
+ "src/renderer/src/store/slices/store-sleep-agent-status-retention.test.ts",
+ "src/renderer/src/store/slices/store-sleep-shutdown-order.test.ts",
+ "src/renderer/src/store/slices/tab-group-reference-repair.test.ts",
+ "src/renderer/src/store/slices/tab-group-state.test.ts",
+ "src/renderer/src/store/slices/tab-view-mode.test.ts",
+ "src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-owner-index.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-title-batch.test.ts",
+ "src/renderer/src/store/slices/terminals-explicit-empty-hydration.test.ts",
+ "src/renderer/src/store/slices/ui-agent-send-target.test.ts",
+ "src/renderer/src/store/slices/ui-feature-interactions.test.ts",
+ "src/renderer/src/store/slices/ui-page-navigation.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-browse.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-cache-hydration.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-host-qualified-list-state.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-local-evidence-invariants.test.ts",
+ "src/renderer/src/store/slices/worktree-catalog-reconciliation.test.ts",
+ "src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts",
+ "src/renderer/src/store/slices/worktrees-create-base-status.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts",
+ "src/renderer/src/store/slices/worktrees-lineage-state.test.ts",
+ "src/renderer/src/store/slices/worktrees/metadata/worktree-meta-persist.test.ts",
+ "src/renderer/src/store/slices/worktrees/teardown/worktree-teardown-array-identity.test.ts",
+ "src/renderer/src/store/terminals/terminal-tab-close-map-identity.test.ts",
+ "src/renderer/src/web/preload-api/web-ai-vault-search-compat.test.ts",
+ "src/renderer/src/web/web-preload-api-settings.test.ts",
+ "src/renderer/src/web/web-preload-api-ssh.test.ts",
+ "src/renderer/src/web/web-runtime-connection-heartbeat-unsendable-probe.test.ts",
+ "src/shared/agent-hook-listener-command-code-transcript.test.ts",
+ "src/shared/agent-hook-listener-omp-approval-ownership.test.ts",
+ "src/shared/agent-notification-id.test.ts",
+ "src/shared/agent-prompt-injection.test.ts",
+ "src/shared/agent-session-conversation-name.test.ts",
+ "src/shared/agent-session-fence-mint-boundary.test.ts",
+ "src/shared/agent-session-mutation-envelope.test.ts",
+ "src/shared/agent-status-child-work-liveness.test.ts",
+ "src/shared/agent-status-serving-readiness.test.ts",
+ "src/shared/agent-terminal-status-equivalence.test.ts",
+ "src/shared/ai-vault-resume-preparation.test.ts",
+ "src/shared/ai-vault-search-contract.test.ts",
+ "src/shared/artifact-sharing-gate.test.ts",
+ "src/shared/automation-owner-precondition.test.ts",
+ "src/shared/base-ref-search-result.test.ts",
+ "src/shared/check-job-log-byte-cap.test.ts",
+ "src/shared/child-process/run-process-termination-failure.test.ts",
+ "src/shared/claude-background-task-status.test.ts",
+ "src/shared/claude-subagent-roster.test.ts",
+ "src/shared/claude-subagent-row-lifecycle.test.ts",
+ "src/shared/clipboard-text.test.ts",
+ "src/shared/codex-subagent-transcript.test.ts",
+ "src/shared/commit-message-omp.test.ts",
+ "src/shared/computer-use-key-spec.test.ts",
+ "src/shared/daemon-adoption-telemetry.test.ts",
+ "src/shared/doc-preview-scheme.test.ts",
+ "src/shared/execution-host-registry.test.ts",
+ "src/shared/file-name-sort.test.ts",
+ "src/shared/git-config-snapshot-runner.test.ts",
+ "src/shared/git-discard-path-safety.test.ts",
+ "src/shared/git-history-message-allocation.test.ts",
+ "src/shared/git-status-conflict-entries.test.ts",
+ "src/shared/github/api-availability.test.ts",
+ "src/shared/github/project-identity.test.ts",
+ "src/shared/github/pull-request-for-branch-outcome.test.ts",
+ "src/shared/issue-link-input.test.ts",
+ "src/shared/keybindings-keyboard-layout.test.ts",
+ "src/shared/keybindings-parsing.test.ts",
+ "src/shared/mobile-web-bundle/bundle-range-rpc-contract.test.ts",
+ "src/shared/native-chat-image-transcript-markers.test.ts",
+ "src/shared/native-chat-slash-commands.omp.test.ts",
+ "src/shared/native-chat-tool-activity.test.ts",
+ "src/shared/native-chat-transcript-retention.test.ts",
+ "src/shared/native-chat-types.test.ts",
+ "src/shared/native-file-drop.test.ts",
+ "src/shared/network-proxy.test.ts",
+ "src/shared/node-bounded-file-reader.test.ts",
+ "src/shared/node-pty-spawn-helper.test.ts",
+ "src/shared/node-source-copy-content-equality.test.ts",
+ "src/shared/omp-draft-launch-windows.test.ts",
+ "src/shared/open-in-applications.test.ts",
+ "src/shared/orchestration-rpc-contract.test.ts",
+ "src/shared/own-retained-string.test.ts",
+ "src/shared/pane-agent-identity-resolver.test.ts",
+ "src/shared/pane-key-alias.test.ts",
+ "src/shared/plugins/plugin-consent-request.test.ts",
+ "src/shared/plugins/plugin-manifest.test.ts",
+ "src/shared/plugins/plugin-marketplace.test.ts",
+ "src/shared/protocol-compat.test.ts",
+ "src/shared/pty-consumer-session.test.ts",
+ "src/shared/pty-startup-ingress-live-query-reply.test.ts",
+ "src/shared/quick-open-readdir-memory.test.ts",
+ "src/shared/raster-image-preview-limits.test.ts",
+ "src/shared/reconnect-jitter.test.ts",
+ "src/shared/release-channel.test.ts",
+ "src/shared/remote-runtime-shared-control-reconnect.test.ts",
+ "src/shared/remote-runtime-shared-control-socket-generation.test.ts",
+ "src/shared/review-head-tracking-ref.test.ts",
+ "src/shared/runtime-rpc-call-queue-retention.test.ts",
+ "src/shared/runtime-workspace-window-availability.test.ts",
+ "src/shared/setup-script-package-manager-suggestion.test.ts",
+ "src/shared/shell-process-readiness.test.ts",
+ "src/shared/skill-path-containment.test.ts",
+ "src/shared/skills-cli-agent-keys.test.ts",
+ "src/shared/source-control-ai-action-recipes.test.ts",
+ "src/shared/source-control-recovery-agent-command.test.ts",
+ "src/shared/structured-agent-session-options.test.ts",
+ "src/shared/structured-agent-session-send-disposition.test.ts",
+ "src/shared/synthetic-agent-title.test.ts",
+ "src/shared/terminal-partial-escape-tail.test.ts",
+ "src/shared/text-search.test.ts",
+ "src/shared/tui-agent-launch-defaults.test.ts",
+ "src/shared/tui-agent-selection.test.ts",
+ "src/shared/vscode-remote-ssh-launcher.test.ts",
+ "src/shared/worker-terminal-host-scope.test.ts",
+ "src/shared/workspace-cleanup-browse-state-persistence.test.ts",
+ "src/shared/workspace-doc-history.test.ts",
+ "src/shared/workspace-linked-item-source-context.test.ts",
+ "src/shared/workspace-name.test.ts",
+ "src/shared/workspace-session-partition-owner.test.ts",
+ "src/shared/workspace-space-scan-budget.test.ts",
+ "src/shared/worktree/card-properties.test.ts",
+ "src/shared/worktree/ownership.test.ts",
+ "src/shared/worktree/submodule-removal.test.ts",
+ "src/shared/wsl-login-shell-command.test.ts",
+ "src/shared/zod-salvage-absence.test.ts",
+ "tests/e2e/e2e-worker-env-isolation.unit.test.ts",
+ "tests/e2e/helpers/electron-process-shutdown.unit.test.ts",
+ "tests/e2e/helpers/fake-agent-paste-end-scanner.unit.test.ts",
+ "tests/e2e/helpers/nested-runtime-proxy-jump-fixture.unit.test.ts",
+ "tests/e2e/host-guest-paint-retention-remote-viewer.unit.test.ts",
+ "tests/e2e/orchestration-run-pagination.unit.test.ts",
+ "tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts",
+ "tests/tools/win-update-e2e/app-driver.test.mjs",
+ "tests/tools/windows-pty-native-capability-smoke/packaged-node-pty-capability-probe.test.mjs"
+ ],
+ "durationMs": 850511
+ },
+ {
+ "files": [
+ "config/scripts/adhoc-build-version.test.mjs",
+ "config/scripts/build-windows-cli-launcher.test.mjs",
+ "config/scripts/ci-dependency-download-cache.test.mjs",
+ "config/scripts/computer-use-smoke.test.mjs",
+ "config/scripts/computer-use-windows-horizontal-scroll.test.mjs",
+ "config/scripts/generate-bundled-skill-guides.test.mjs",
+ "config/scripts/git-pull-request-diff-base.test.mjs",
+ "config/scripts/happy-dom-mutation-observer-retention.test.ts",
+ "config/scripts/hourly-preflight-workflow.test.mjs",
+ "config/scripts/install-electron-package-binary.test.mjs",
+ "config/scripts/live-remote-status-watchdog.test.mjs",
+ "config/scripts/locale-generic-ui-terms.test.mjs",
+ "config/scripts/macos-computer-helper-owner-loss-processes.test.mjs",
+ "config/scripts/mobile-web-app-clipboard-image-resize-render.test.mjs",
+ "config/scripts/mobile-web-app-handoff-grants-render.test.mjs",
+ "config/scripts/mobile-web-app-rich-markdown-render.test.mjs",
+ "config/scripts/mobile-web-app-session-terminal-init.test.mjs",
+ "config/scripts/mobile-web-app-tasks-render.test.mjs",
+ "config/scripts/mobile-web-page-route-hop-coverage.test.mjs",
+ "config/scripts/node-pty-console-list-agent-patch.test.mjs",
+ "config/scripts/node-pty-master-cloexec-patch.test.mjs",
+ "config/scripts/orca-cli-skill-guidance.test.mjs",
+ "config/scripts/orchestration-guide-command-contract.test.mjs",
+ "config/scripts/plain-node-entry-guard.test.ts",
+ "config/scripts/pr-workflow-lint-parity.test.mjs",
+ "config/scripts/release-blocker-fixes.test.mjs",
+ "config/scripts/run-linux-packaged-node-pty-floor-smoke.test.mjs",
+ "config/scripts/run-typecheck-projects-in-parallel.test.mjs",
+ "config/scripts/skill-sharing-release-workflow.test.mjs",
+ "config/scripts/static-appimage-package-contract.test.mjs",
+ "config/scripts/telemetry-bundle-constant-patterns.test.mjs",
+ "config/scripts/trim-windows-icon-source.test.mjs",
+ "config/scripts/verify-packaged-plugin-resources.test.mjs",
+ "config/scripts/verify-release-required-assets.test.mjs",
+ "config/scripts/websocket-server-loopback-bind.test.ts",
+ "config/scripts/wsl-e2e-lane-contract.test.mjs",
+ "config/scripts/xterm-image-memory-contract.test.mjs",
+ "src/cli/handlers/computer-state-formatting.test.ts",
+ "src/cli/handlers/core.test.ts",
+ "src/cli/handlers/emulator.test.ts",
+ "src/cli/handlers/file-absolute-paths.test.ts",
+ "src/cli/handlers/file.test.ts",
+ "src/cli/handlers/orchestration-caller-identity-cli.test.ts",
+ "src/cli/handlers/orchestration-legacy-read-only.test.ts",
+ "src/cli/handlers/orchestration-lifecycle-rejection.test.ts",
+ "src/cli/handlers/orchestration-run-cli.test.ts",
+ "src/cli/handlers/orchestration-timeout.test.ts",
+ "src/cli/handlers/orchestration/worker-output.test.ts",
+ "src/cli/handlers/terminal.test.ts",
+ "src/cli/index.test.ts",
+ "src/cli/orchestration-structured-sender-identity.test.ts",
+ "src/cli/runtime-client-deferral.test.ts",
+ "src/cli/runtime/launch.test.ts",
+ "src/cli/runtime/transport-framing.test.ts",
+ "src/cli/runtime/websocket-transport.test.ts",
+ "src/cli/skill-guide-cli-parity.test.ts",
+ "src/cli/skills.test.ts",
+ "src/cli/specs/account.test.ts",
+ "src/cli/terminal-list-host-scope-format.test.ts",
+ "src/cli/terminal-read-screen.test.ts",
+ "src/main/agent-hooks/grok-replay-guard.test.ts",
+ "src/main/agent-hooks/local-agent-cli-presence.test.ts",
+ "src/main/agent-hooks/managed-hook-script-refresh.test.ts",
+ "src/main/agent-hooks/server-closed-tab-suppression.test.ts",
+ "src/main/agent-hooks/server-last-status-lead-boundary.test.ts",
+ "src/main/agent-hooks/server-opencode-binder.test.ts",
+ "src/main/ai-vault-search/session-search-index-consumer.test.ts",
+ "src/main/ai-vault-search/session-search-root-refresh.test.ts",
+ "src/main/ai-vault-search/session-search-schema.test.ts",
+ "src/main/ai-vault/ai-vault-scan-coordinator.test.ts",
+ "src/main/ai-vault/cached-session-list-wsl-probe.test.ts",
+ "src/main/ai-vault/cached-session-list.test.ts",
+ "src/main/ai-vault/remote-session-sidecar-observation.test.ts",
+ "src/main/ai-vault/session-document-stream-boundaries.test.ts",
+ "src/main/ai-vault/session-scanner-core-parser-wsl-stall.test.ts",
+ "src/main/ai-vault/session-scanner-cutoff.test.ts",
+ "src/main/ai-vault/session-scanner-dedup-batches.test.ts",
+ "src/main/ai-vault/session-scanner-devin-parser.test.ts",
+ "src/main/ai-vault/session-scanner-first-user-prompt.test.ts",
+ "src/main/ai-vault/session-scanner-grok-parser.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-bounds.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite-worker-spawn.test.ts",
+ "src/main/ai-vault/session-scanner-opencode2-message.test.ts",
+ "src/main/ai-vault/session-scanner-service-entry-path.test.ts",
+ "src/main/ai-vault/session-scanner-timeline.test.ts",
+ "src/main/ai-vault/session-scanner-values.test.ts",
+ "src/main/ai-vault/session-title-file-reader.test.ts",
+ "src/main/automations/automation-run-terminal-surface.test.ts",
+ "src/main/automations/automation-run-writer.test.ts",
+ "src/main/automations/external-automation-owner-guard.test.ts",
+ "src/main/automations/run-completion-watcher.test.ts",
+ "src/main/automations/schedule-drift-report.test.ts",
+ "src/main/automations/service.test.ts",
+ "src/main/azure-devops/pull-request-creation.test.ts",
+ "src/main/bitbucket/credential-store.test.ts",
+ "src/main/bitbucket/pull-request-creation.test.ts",
+ "src/main/browser/agent-browser-process-environment.test.ts",
+ "src/main/browser/browser-client-host-authority-replacement.test.ts",
+ "src/main/browser/browser-client-host-id.test.ts",
+ "src/main/browser/browser-client-host-placement-preparation.test.ts",
+ "src/main/browser/browser-client-page-command-executor.test.ts",
+ "src/main/browser/browser-client-page-execution-host-supersession.test.ts",
+ "src/main/browser/browser-cookie-import-concurrency.test.ts",
+ "src/main/browser/browser-cookie-import-google-exclusion.test.ts",
+ "src/main/browser/browser-cookie-import-partition-fidelity.test.ts",
+ "src/main/browser/browser-cookie-import-replace-partition-rollback.electron.test.ts",
+ "src/main/browser/browser-cookie-samesite.electron.test.ts",
+ "src/main/browser/browser-manager-auth-user-agent.test.ts",
+ "src/main/browser/browser-manager-client-hosted-downloads.test.ts",
+ "src/main/browser/browser-manager-destroyed-guest.test.ts",
+ "src/main/browser/browser-manager-grab-shortcuts.test.ts",
+ "src/main/browser/browser-manager-load-failure-replay.test.ts",
+ "src/main/browser/browser-manager-popup-routing.test.ts",
+ "src/main/browser/browser-network-deferred-socket.test.ts",
+ "src/main/browser/browser-network-tunnel-client-memory-budget.test.ts",
+ "src/main/browser/browser-network-tunnel-client.test.ts",
+ "src/main/browser/browser-session-proxy.test.ts",
+ "src/main/browser/browser-session-ua-wire-identity-cross-context.electron.test.ts",
+ "src/main/browser/cdp-screenshot.test.ts",
+ "src/main/browser/execution-route-socket-duplex.test.ts",
+ "src/main/browser/local-ssh-browser-partitions.probe-cache.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-composition.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-route-identity.test.ts",
+ "src/main/browser/remote-browser-socks-server.test.ts",
+ "src/main/claude-accounts/claude-account-service-account-selection.test.ts",
+ "src/main/claude-accounts/claude-account-service-credential-capture.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-readback-identity.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-wsl-runtime.test.ts",
+ "src/main/claude-accounts/runtime-paths.test.ts",
+ "src/main/claude-accounts/runtime-selection.test.ts",
+ "src/main/claude/claude-agent-sdk-exit-proof.test.ts",
+ "src/main/claude/claude-agent-sdk-user-message-queue.test.ts",
+ "src/main/claude/claude-session-end-hook-capability.test.ts",
+ "src/main/claude/claude-structured-compaction.test.ts",
+ "src/main/claude/claude-structured-dispatch-admission.test.ts",
+ "src/main/claude/claude-structured-journal-translation.plan.test.ts",
+ "src/main/claude/claude-structured-journal-translation.test.ts",
+ "src/main/claude/claude-structured-rewind.test.ts",
+ "src/main/claude/claude-structured-session-acquisition-processless.test.ts",
+ "src/main/claude/claude-tui-exit.test.ts",
+ "src/main/claude/claude-tui-resume-real-binary.integration.test.ts",
+ "src/main/cli/cli-installer-command-conflicts.test.ts",
+ "src/main/cli/cli-installer-macos-command-path.test.ts",
+ "src/main/cli/cli-installer-windows-path.test.ts",
+ "src/main/cli/wsl-cli-registration-reconciliation.test.ts",
+ "src/main/codex-accounts/host-codex-managed-home-ownership.test.ts",
+ "src/main/codex-accounts/runtime-home-real-home-lane-routing.test.ts",
+ "src/main/codex-accounts/service-abandoned-login-supersede.test.ts",
+ "src/main/codex-accounts/service-reset-credit-home-ownership.test.ts",
+ "src/main/codex-accounts/sta-4422-transient-ownership-error.test.ts",
+ "src/main/codex-usage/scanner.test.ts",
+ "src/main/codex-usage/store-snapshot.benchmark.test.ts",
+ "src/main/codex/codex-app-server-teardown.integration.test.ts",
+ "src/main/codex/codex-model-provider-config.test.ts",
+ "src/main/codex/codex-pane-account-registry-mutations.test.ts",
+ "src/main/codex/codex-persistent-command-retention.test.ts",
+ "src/main/codex/codex-real-home-path.test.ts",
+ "src/main/codex/codex-session-backfill-scan-dates.test.ts",
+ "src/main/codex/codex-session-resume-windows.test.ts",
+ "src/main/codex/codex-state-db-backfill-recovery.test.ts",
+ "src/main/codex/codex-structured-thread-goal.test.ts",
+ "src/main/codex/codex-wsl-hook-install-plan.test.ts",
+ "src/main/codex/config-sync-stall.test.ts",
+ "src/main/codex/config-toml-trust-hook-removal.test.ts",
+ "src/main/codex/managed-home-shell-preflight.test.ts",
+ "src/main/codex/retained-codex-hook-state.test.ts",
+ "src/main/computer/desktop-script-provider-bridge.test.ts",
+ "src/main/computer/macos-native-provider-client.test.ts",
+ "src/main/computer/macos-native-provider-startup-cleanup.test.ts",
+ "src/main/copilot/hook-service.test.ts",
+ "src/main/crash-reporting/process-gone-sibling-correlation.test.ts",
+ "src/main/crash-reporting/suppressed-process-gone-breadcrumb.test.ts",
+ "src/main/daemon/daemon-authenticated-client-activity.test.ts",
+ "src/main/daemon/daemon-folder-access-probe.test.ts",
+ "src/main/daemon/daemon-init-restart-sequence.test.ts",
+ "src/main/daemon/daemon-native-pty-exception.test.ts",
+ "src/main/daemon/daemon-preflight-client-replacement.test.ts",
+ "src/main/daemon/daemon-process-inspection.test.ts",
+ "src/main/daemon/daemon-protocol-version.test.ts",
+ "src/main/daemon/daemon-pty-adapter-history-checkpoints.test.ts",
+ "src/main/daemon/daemon-pty-adapter-history-recovery.test.ts",
+ "src/main/daemon/daemon-pty-startup-delivery.test.ts",
+ "src/main/daemon/daemon-pty-upgrade-adoption.test.ts",
+ "src/main/daemon/daemon-server-kill-attribution.test.ts",
+ "src/main/daemon/daemon-stream-backpressure-socket.test.ts",
+ "src/main/daemon/headless-emulator.test.ts",
+ "src/main/daemon/macos-login-session-death-watch.test.ts",
+ "src/main/daemon/osc7-file-uri.test.ts",
+ "src/main/daemon/session-producer-pause.test.ts",
+ "src/main/daemon/session-shell-recovery.test.ts",
+ "src/main/daemon/terminal-host-pty-owner-backend.test.ts",
+ "src/main/daemon/terminal-snapshot-osc8-roundtrip.test.ts",
+ "src/main/daemon/wsl-cold-restore-cwd.test.ts",
+ "src/main/durable-file-write-syscall-proof.test.ts",
+ "src/main/emulator/android/adb-devices.test.ts",
+ "src/main/emulator/backends/android-emulator-backend.test.ts",
+ "src/main/emulator/simctl-simulator-devices.test.ts",
+ "src/main/gemini/hook-service.test.ts",
+ "src/main/ghostty/theme-import.test.ts",
+ "src/main/git/command-runner/git-command-timeout.test.ts",
+ "src/main/git/command-runner/git-subprocess-admission.test.ts",
+ "src/main/git/command-runner/spawned-command-tree-kill.test.ts",
+ "src/main/git/repo-clone-path.test.ts",
+ "src/main/git/status-branch-line-total-relay-parity.test.ts",
+ "src/main/git/status-submodule.test.ts",
+ "src/main/git/worktree-create-preparation-real-wsl.test.ts",
+ "src/main/git/worktree-remove-branch-deletion.test.ts",
+ "src/main/git/worktree-sparse-checkout-cache.test.ts",
+ "src/main/git/wsl-linked-worktree-git-route-invalidation.test.ts",
+ "src/main/git/wsl-process-group-termination.test.ts",
+ "src/main/github/client-pr-branch-discovery.test.ts",
+ "src/main/github/client-pr-comment-reactions.test.ts",
+ "src/main/github/client-pr-state.test.ts",
+ "src/main/github/client-rate-limit-block.test.ts",
+ "src/main/github/client-work-items-query-paging.test.ts",
+ "src/main/github/default-branch-stale-pr.test.ts",
+ "src/main/github/gh-capability-state.test.ts",
+ "src/main/github/gh-utils.test.ts",
+ "src/main/github/issues.test.ts",
+ "src/main/github/pr-refresh-queue-growth-bound.test.ts",
+ "src/main/github/pr-refresh-validation-backoff.test.ts",
+ "src/main/github/pr-start-point.test.ts",
+ "src/main/github/work-item-details-concurrency.test.ts",
+ "src/main/github/work-item-search-semantics.test.ts",
+ "src/main/gitlab/gitlab-known-host-probe-wsl-fallback.test.ts",
+ "src/main/hang-watchdog/main-thread-hang-telemetry.test.ts",
+ "src/main/hang-watchdog/main-thread-hang-watchdog-entry.test.ts",
+ "src/main/hang-watchdog/main-thread-hang-watchdog.test.ts",
+ "src/main/hermes/hook-service.test.ts",
+ "src/main/hooks-archive-exit-observation.test.ts",
+ "src/main/hooks-orca-yaml-parsing.test.ts",
+ "src/main/ipc/browser-preview-tool-authorization.test.ts",
+ "src/main/ipc/crash-reporting.test.ts",
+ "src/main/ipc/filesystem-import.test.ts",
+ "src/main/ipc/filesystem-list-files-handler-name-filter.test.ts",
+ "src/main/ipc/filesystem-watcher-real.test.ts",
+ "src/main/ipc/filesystem-watcher-removal-deadline.test.ts",
+ "src/main/ipc/filesystem-watcher-terminal-resync.test.ts",
+ "src/main/ipc/filesystem.test.ts",
+ "src/main/ipc/github-ipc-channel-parity.test.ts",
+ "src/main/ipc/github-work-item-args.test.ts",
+ "src/main/ipc/local-log-tail.test.ts",
+ "src/main/ipc/markdown-documents.test.ts",
+ "src/main/ipc/notifications-message-formatting.test.ts",
+ "src/main/ipc/notifications-retention-lifecycle.test.ts",
+ "src/main/ipc/notifications-subject-retirement.test.ts",
+ "src/main/ipc/preflight-agent-detection-no-subprocess.test.ts",
+ "src/main/ipc/preflight-command-exec.test.ts",
+ "src/main/ipc/pty-codex-account-attribution.test.ts",
+ "src/main/ipc/pty-controller-process-inventory.test.ts",
+ "src/main/ipc/pty-wsl-cwd-validation.test.ts",
+ "src/main/ipc/pty/ipc/spawn-options-terminal-shell-args.test.ts",
+ "src/main/ipc/pty/ipc/spawn-push-target-materialization.test.ts",
+ "src/main/ipc/pty/ipc/write-input-chunk-yield.test.ts",
+ "src/main/ipc/remote-workspace-snapshot-normalization.test.ts",
+ "src/main/ipc/repos-nested-import.test.ts",
+ "src/main/ipc/repos-nested-scan.test.ts",
+ "src/main/ipc/runtime-environment-browser-client-host-handler.test.ts",
+ "src/main/ipc/runtime-environment-federated-read-routing.test.ts",
+ "src/main/ipc/runtime-environment-revision-guard.test.ts",
+ "src/main/ipc/runtime-import-limits.test.ts",
+ "src/main/ipc/skill-install-management-ipc-handlers.test.ts",
+ "src/main/ipc/ssh-pty-legacy-projection.test.ts",
+ "src/main/ipc/ssh-pty-model-admission-generation-scope.test.ts",
+ "src/main/ipc/ssh-target-registry.test.ts",
+ "src/main/ipc/telemetry.test.ts",
+ "src/main/ipc/terminal-startup-color-query-replies.test.ts",
+ "src/main/ipc/workspace-cleanup-activity.test.ts",
+ "src/main/ipc/workspace-cleanup.test.ts",
+ "src/main/ipc/worktree-base-directory-poller-marker-fanout.test.ts",
+ "src/main/ipc/worktree-head-identity-reader-concurrency.test.ts",
+ "src/main/ipc/worktree-head-identity-reader.test.ts",
+ "src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts",
+ "src/main/ipc/worktrees-forget-local.test.ts",
+ "src/main/ipc/worktrees-preserved-branch-fork-remote.test.ts",
+ "src/main/ipc/worktrees-windows.test.ts",
+ "src/main/jira/attachment-image-cache.test.ts",
+ "src/main/linear/issue-context-errors.test.ts",
+ "src/main/linear/mappers.test.ts",
+ "src/main/linux-update-package-type.test.ts",
+ "src/main/local-worktree-filesystem-wsl-banner.wsl.test.ts",
+ "src/main/local-worktree-filesystem.test.ts",
+ "src/main/macos-system-sleep-assertion.test.ts",
+ "src/main/muse/hook-service.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-database.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-item-identity.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-retired-provider-exit-copy-ratchet.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-adopted-import.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-event-sink.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-option-settlement.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-prompt-cancel.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-refusal-retry.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-thread-goal.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-conversation-command-admission.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-session-compaction.test.ts",
+ "src/main/native-chat/subagent-entry-id-bounds.test.ts",
+ "src/main/native-chat/transcript-read-cache.test.ts",
+ "src/main/native-chat/transcript-reader.test.ts",
+ "src/main/native-chat/transcript-watch-engine-wsl-lifecycle.test.ts",
+ "src/main/native-chat/transcript-watch-error.test.ts",
+ "src/main/native-chat/transcript-watch-liveness.test.ts",
+ "src/main/opencode-usage/cache-read-reproduction.test.ts",
+ "src/main/opencode/hook-plugin-fail-open-ownership.test.ts",
+ "src/main/opencode/hook-plugin-lifecycle-delivery.test.ts",
+ "src/main/orca-profiles/profile-cloud-service-sign-out-connect-race.test.ts",
+ "src/main/orca-profiles/profile-cloud-session-mutation.test.ts",
+ "src/main/orca-profiles/profile-cloud-session-refresh.test.ts",
+ "src/main/orca-profiles/profile-ui-scope.test.ts",
+ "src/main/orcad/orcad-bind-address.test.ts",
+ "src/main/orcad/orcad-browser-provider.test.ts",
+ "src/main/orcad/orcad-forked-child-paths.test.ts",
+ "src/main/orcad/orcad-instance-lock.test.ts",
+ "src/main/orcad/orcad-launch-contract.test.ts",
+ "src/main/persistence-automations.test.ts",
+ "src/main/persistence-cohort-and-identity-migration.test.ts",
+ "src/main/persistence-duplicate-repo-id-host-scope.test.ts",
+ "src/main/persistence-protected-secret-write-race.test.ts",
+ "src/main/persistence-ui-state.test.ts",
+ "src/main/persistence/loading-store/metadata-lineage-batch-pruning.test.ts",
+ "src/main/persistence/loading-store/workspace-session-partitions.test.ts",
+ "src/main/persistence/loading-store/worktree-meta-alias-projection.test.ts",
+ "src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts",
+ "src/main/persistence/restoring-sessions/pane-key-remapping.test.ts",
+ "src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts",
+ "src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts",
+ "src/main/pi/agent-status-completion-delivery.test.ts",
+ "src/main/pi/prefill-extension-source.test.ts",
+ "src/main/plugins/plugin-bundled-bootstrap.test.ts",
+ "src/main/plugins/plugin-content-pack-registry.test.ts",
+ "src/main/plugins/plugin-discovery.test.ts",
+ "src/main/plugins/plugin-language-pack-registry.test.ts",
+ "src/main/plugins/plugin-launch-content.test.ts",
+ "src/main/plugins/plugin-marketplace-store.test.ts",
+ "src/main/plugins/plugin-panel-navigation-guard.test.ts",
+ "src/main/plugins/plugin-secrets-store.test.ts",
+ "src/main/plugins/plugin-worker-manager.test.ts",
+ "src/main/ports/port-scan-command-execution.test.ts",
+ "src/main/project-groups/nested-repo-scan-rules.test.ts",
+ "src/main/providers/macos-login-session-pty-probe.test.ts",
+ "src/main/providers/settled-pty-writer-census.test.ts",
+ "src/main/providers/ssh-git-provider-merge.test.ts",
+ "src/main/providers/ssh-pty-provider-agent-session-create-operation.test.ts",
+ "src/main/providers/ssh-pty-provider-process-events.test.ts",
+ "src/main/providers/windows-pty-job-membership.test.ts",
+ "src/main/providers/windows-shell-args.test.ts",
+ "src/main/pty-descendant-termination-job-coverage.test.ts",
+ "src/main/pty/shell-startup-env.test.ts",
+ "src/main/pty/terminal-color-env.test.ts",
+ "src/main/pty/windows-path-registry-change.test.ts",
+ "src/main/quit-teardown-deadline.test.ts",
+ "src/main/rate-limits/auth-filesystem-operation-retention.test.ts",
+ "src/main/rate-limits/claude-fetcher-keychain-credentials.test.ts",
+ "src/main/rate-limits/codex-fetcher-auth-errors.test.ts",
+ "src/main/rate-limits/codex-fetcher-backend.test.ts",
+ "src/main/rate-limits/codex-fetcher-session-supplement.test.ts",
+ "src/main/rate-limits/codex-pty-status-parser.test.ts",
+ "src/main/rate-limits/codex-rpc-rate-limit-probe.test.ts",
+ "src/main/rate-limits/service-inactive-account-previews.test.ts",
+ "src/main/rate-limits/service-refresh-orchestration.test.ts",
+ "src/main/runtime/agent-prompt-submission-runtime-hook-and-generation.test.ts",
+ "src/main/runtime/agent-session-spawn-token-readback.test.ts",
+ "src/main/runtime/agent-session-unreadable-record-salvage.test.ts",
+ "src/main/runtime/browser-dialog-settlement.test.ts",
+ "src/main/runtime/browser-execution-host-key-resolution.test.ts",
+ "src/main/runtime/browser-network-tunnel-paired-runtime.integration.test.ts",
+ "src/main/runtime/browser-screencast-driver-attribution.test.ts",
+ "src/main/runtime/browser-screencast-ghost-subscriber-eviction.test.ts",
+ "src/main/runtime/browser-session-tab-selection-snapshot.test.ts",
+ "src/main/runtime/cli-terminal-create-host-session-binding.test.ts",
+ "src/main/runtime/client-hosted-browser-row-push.integration.test.ts",
+ "src/main/runtime/external-worktree-paired-client-discovery.integration.test.ts",
+ "src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts",
+ "src/main/runtime/mobile-session-tab-close-refusal-message.test.ts",
+ "src/main/runtime/mobile-session-tabs-notify-coalescer.test.ts",
+ "src/main/runtime/opencode-finished-session-authority.test.ts",
+ "src/main/runtime/orca-runtime-files-watch.test.ts",
+ "src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts",
+ "src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts",
+ "src/main/runtime/orca-runtime-path-candidate-history.test.ts",
+ "src/main/runtime/orca-runtime-structured-session-restore.test.ts",
+ "src/main/runtime/orca-runtime-structured-status-sink-wiring.test.ts",
+ "src/main/runtime/orca-runtime-test-fragment-coverage.test.ts",
+ "src/main/runtime/orchestration-compatibility-authority.test.ts",
+ "src/main/runtime/orchestration/db-messages.test.ts",
+ "src/main/runtime/orchestration/db-task-dispatch-invariant.test.ts",
+ "src/main/runtime/orchestration/db/schema/derived-delivery-migration.test.ts",
+ "src/main/runtime/orchestration/federation-lifecycle-settlement.test.ts",
+ "src/main/runtime/orchestration/formatter.test.ts",
+ "src/main/runtime/orchestration/orchestration-legacy-coordinator-authority-db.test.ts",
+ "src/main/runtime/orchestration/orchestration-legacy-question-migration-db.test.ts",
+ "src/main/runtime/orchestration/orchestration-peer-capability-cache.test.ts",
+ "src/main/runtime/orchestration/run-coordinator-handle-migration.test.ts",
+ "src/main/runtime/orchestration/structured-worker-direct-mailbox-target.test.ts",
+ "src/main/runtime/orchestration/worker-output-cursor.test.ts",
+ "src/main/runtime/pairing-endpoint.test.ts",
+ "src/main/runtime/pty-recorded-surface-topology.test.ts",
+ "src/main/runtime/push/push-registration-races.test.ts",
+ "src/main/runtime/relay/relay-region-correction.test.ts",
+ "src/main/runtime/relay/relay-revoke-outbox.test.ts",
+ "src/main/runtime/relay/relay-session-broker.test.ts",
+ "src/main/runtime/rpc/methods/accounts.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-replay.test.ts",
+ "src/main/runtime/rpc/methods/automation-scoped-list-methods.test.ts",
+ "src/main/runtime/rpc/methods/automations.test.ts",
+ "src/main/runtime/rpc/methods/browser.test.ts",
+ "src/main/runtime/rpc/methods/client-events.test.ts",
+ "src/main/runtime/rpc/methods/jira.test.ts",
+ "src/main/runtime/rpc/methods/mobile-web-bundle-range.test.ts",
+ "src/main/runtime/rpc/methods/notification-preferences.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-fleet-snapshot.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation-setup.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/send-unbound-terminals.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/antigravity-worker-lifecycle.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/fleet-status-observed-identity.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-list-pagination.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-liveness-verdict.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-mobile-report.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-recovery.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-turn-observation.test.ts",
+ "src/main/runtime/rpc/methods/repo-badge-color.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-schemas.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-admission.test.ts",
+ "src/main/runtime/rpc/methods/structured-worker-tab-retirement.test.ts",
+ "src/main/runtime/rpc/methods/worktree-retired-names.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-fence-jurisdiction.test.ts",
+ "src/main/runtime/rpc/orchestration-mutation-request-show.test.ts",
+ "src/main/runtime/rpc/orchestration-task-dispatch-invariant.test.ts",
+ "src/main/runtime/rpc/remote-runtime-server-heartbeat.test.ts",
+ "src/main/runtime/rpc/runtime-close-attribution-topology.test.ts",
+ "src/main/runtime/rpc/schemas.test.ts",
+ "src/main/runtime/rpc/streaming.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-blank-mount.test.ts",
+ "src/main/runtime/runtime-browser-client-page-recovery.test.ts",
+ "src/main/runtime/runtime-file-path-existence.test.ts",
+ "src/main/runtime/runtime-git-branch-compare-admission.test.ts",
+ "src/main/runtime/runtime-git-generation-admission.test.ts",
+ "src/main/runtime/runtime-managed-worktree-queries.test.ts",
+ "src/main/runtime/runtime-remote-fetch-ref-maintenance.test.ts",
+ "src/main/runtime/runtime-rpc-startup-failure.test.ts",
+ "src/main/runtime/runtime-rpc-worktree-queries.test.ts",
+ "src/main/runtime/runtime-server-git-availability.test.ts",
+ "src/main/runtime/runtime-skill-install-commands.test.ts",
+ "src/main/runtime/runtime-terminal-idle-polls.test.ts",
+ "src/main/runtime/structured-agent-session-close.test.ts",
+ "src/main/runtime/structured-agent-session-support-probe.test.ts",
+ "src/main/runtime/structured-session-worktree-teardown.test.ts",
+ "src/main/runtime/structured-tui-idle-evidence.test.ts",
+ "src/main/runtime/structured-tui-recovery-claim-match.test.ts",
+ "src/main/runtime/structured-worker-child-identity-env.test.ts",
+ "src/main/runtime/terminal-mobile-subscribe-tab-mount.test.ts",
+ "src/main/runtime/terminal-shell-override-host-support.test.ts",
+ "src/main/runtime/terminal-wait-detection.test.ts",
+ "src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts",
+ "src/main/serve-update-handoff.test.ts",
+ "src/main/shell-wrapper-content-address.test.ts",
+ "src/main/shell-wrapper-generated-file-snapshot.test.ts",
+ "src/main/sidecar-snapshot-file.test.ts",
+ "src/main/skills/claude-plugin-skill-sources.test.ts",
+ "src/main/skills/skill-candidate-concurrency.test.ts",
+ "src/main/skills/skill-discovery-wsl-bash-filter.test.ts",
+ "src/main/skills/skill-freshness-inventory-limits.test.ts",
+ "src/main/skills/skill-install-management-service.test.ts",
+ "src/main/skills/skill-remote-install-service.test.ts",
+ "src/main/skills/skill-ssh-relay-service.test.ts",
+ "src/main/skills/skill-windows-workspace.integration.test.ts",
+ "src/main/source-control/hosted-review-bitbucket.integration.test.ts",
+ "src/main/source-control/hosted-review-creation-shared-symlinks.test.ts",
+ "src/main/ssh-reattach-pane-cardinality.test.ts",
+ "src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts",
+ "src/main/ssh/ssh-config-host-picker.test.ts",
+ "src/main/ssh/ssh-config-loader.test.ts",
+ "src/main/ssh/ssh-config-resolver.test.ts",
+ "src/main/ssh/ssh-connect-attempt-cancellation.test.ts",
+ "src/main/ssh/ssh-connection-auth-fallback.test.ts",
+ "src/main/ssh/ssh-connection-utils.test.ts",
+ "src/main/ssh/ssh-git-stream-idle-timer.test.ts",
+ "src/main/ssh/ssh-owner-recovery-retry.test.ts",
+ "src/main/ssh/ssh-posix-command-wrapper.test.ts",
+ "src/main/ssh/ssh-pty-recovery-retention-budget.test.ts",
+ "src/main/ssh/ssh-reconnect-error-classification.test.ts",
+ "src/main/ssh/ssh-relay-cross-version-isolation.test.ts",
+ "src/main/ssh/ssh-relay-endpoint-incumbent-shell.integration.test.ts",
+ "src/main/ssh/ssh-relay-incumbent-process.test.ts",
+ "src/main/ssh/ssh-relay-install-namespace.test.ts",
+ "src/main/ssh/ssh-relay-node-headers.test.ts",
+ "src/main/ssh/ssh-relay-session-data-delivery.test.ts",
+ "src/main/ssh/ssh-relay-session-orphan-sweep.test.ts",
+ "src/main/ssh/ssh-relay-session-recovery-races.test.ts",
+ "src/main/ssh/ssh-remote-linear-save-issue.test.ts",
+ "src/main/ssh/ssh-remote-node-toolchain-probe.test.ts",
+ "src/main/ssh/ssh-remote-orca-cli.test.ts",
+ "src/main/ssh/system-ssh-sftp-path.test.ts",
+ "src/main/startup/hydrate-shell-path.test.ts",
+ "src/main/startup/login-shell-environment.test.ts",
+ "src/main/startup/main-process-ready-identity-write.test.ts",
+ "src/main/startup/main-process-ready-phase-ordering.test.ts",
+ "src/main/startup/run-electron-vite-dev.test.ts",
+ "src/main/startup/serve-desktop-activation.test.ts",
+ "src/main/startup/windows-install-dir-acl-recovery.test.ts",
+ "src/main/startup/windows-shell-path-ownership.test.ts",
+ "src/main/telemetry/consent.test.ts",
+ "src/main/telemetry/install-id.test.ts",
+ "src/main/terminal-history-gc-fs-call-count.test.ts",
+ "src/main/terminal-history-tombstone-retry.test.ts",
+ "src/main/updater.nudge-campaign.test.ts",
+ "src/main/usage/jsonl-line-offsets.test.ts",
+ "src/main/usage/usage-calendar-range.test.ts",
+ "src/main/window/clipboard-windows-image-file.test.ts",
+ "src/main/window/createMainWindow-markdown-editor-focus.test.ts",
+ "src/main/window/createMainWindow-system-resume-relay.test.ts",
+ "src/main/window/history-gc-profile-worktree-ids.test.ts",
+ "src/main/window/macos-tahoe-release.test.ts",
+ "src/main/window/privileged-window-navigation.test.ts",
+ "src/main/window/renderer-recovery-reload-watchdog.test.ts",
+ "src/main/windows-registry-addon.test.ts",
+ "src/main/workspace-cleanup-scan-snapshot.test.ts",
+ "src/main/workspace-space-scan-control.test.ts",
+ "src/main/worktree-create-base.test.ts",
+ "src/main/worktree-lineage-pruning.test.ts",
+ "src/main/worktree-name-retirement.test.ts",
+ "src/main/worktree-prunable-git-file.test.ts",
+ "src/main/wsl-bash-command.test.ts",
+ "src/main/wsl-interop-spawn-directory.test.ts",
+ "src/preload/usage-provider-api.test.ts",
+ "src/relay/agent-hook-integration.test.ts",
+ "src/relay/agent-hook-server.test.ts",
+ "src/relay/ai-vault-service-client.test.ts",
+ "src/relay/dispatcher-client-close-cause.test.ts",
+ "src/relay/dispatcher-frame-guard-regressions.test.ts",
+ "src/relay/dispatcher-json-payload.test.ts",
+ "src/relay/dispatcher-per-connection-state-baseline.test.ts",
+ "src/relay/dispatcher-timeout.test.ts",
+ "src/relay/fs-list-files-large-response.integration.test.ts",
+ "src/relay/git-handler-check-ignore.test.ts",
+ "src/relay/git-handler-file-diff.test.ts",
+ "src/relay/git-handler-worktree-inspection.test.ts",
+ "src/relay/git-handler-worktree-list.test.ts",
+ "src/relay/node-pty-binding-survey.test.ts",
+ "src/relay/node-pty-unavailable-diagnosis.test.ts",
+ "src/relay/protocol-json-payload.test.ts",
+ "src/relay/pty-handler-inventory-process-evidence.test.ts",
+ "src/relay/pty-handler-retired-pane-surface.test.ts",
+ "src/relay/pty-handler-windows-child-process-evidence.test.ts",
+ "src/relay/relay-endpoint-credential-publication.test.ts",
+ "src/relay/relay-handshake-roundtrip.test.ts",
+ "src/relay/relay-primary-channel.test.ts",
+ "src/relay/relay-pty-publication-admission.test.ts",
+ "src/relay/relay-pty-source-publication.test.ts",
+ "src/relay/relay-watcher-parent-removal.test.ts",
+ "src/relay/relay-watcher-setup-wait.test.ts",
+ "src/relay/remote-artifact-cli-input.test.ts",
+ "src/relay/ssh-pty-source-credit-adapter.test.ts",
+ "src/relay/workspace-session-handler.test.ts",
+ "src/renderer/src/app-shell/use-document-appearance.test.tsx",
+ "src/renderer/src/assets/mobile-page-qr-layout.test.ts",
+ "src/renderer/src/assets/terminal-container-geometry.test.ts",
+ "src/renderer/src/components/WorktreeJumpPalette.test.tsx",
+ "src/renderer/src/components/activity/ActivityPrototypePage.thread-grouping.test.ts",
+ "src/renderer/src/components/activity/activity-event-builder.live-cap.test.ts",
+ "src/renderer/src/components/activity/activity-portal-thread-reconciliation.test.ts",
+ "src/renderer/src/components/activity/activity-terminal-portal-publication-loop.react185.test.tsx",
+ "src/renderer/src/components/agent/AgentCombobox.test.tsx",
+ "src/renderer/src/components/artifacts/artifact-list-windowing.test.tsx",
+ "src/renderer/src/components/automations/AutomationDetail.test.tsx",
+ "src/renderer/src/components/automations/AutomationListSearchField.test.tsx",
+ "src/renderer/src/components/automations/AutomationListTableHeader.test.tsx",
+ "src/renderer/src/components/automations/AutomationOwnerConflictNotice.test.tsx",
+ "src/renderer/src/components/automations/AutomationPromptDisclosure.test.tsx",
+ "src/renderer/src/components/automations/AutomationRunHistory.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.refresh-selection.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.save-visibility.test.tsx",
+ "src/renderer/src/components/automations/automation-captured-owner.test.ts",
+ "src/renderer/src/components/automations/automation-create-projects.test.ts",
+ "src/renderer/src/components/automations/automation-host-catalog.test.ts",
+ "src/renderer/src/components/automations/automation-host-orphan-entry.test.ts",
+ "src/renderer/src/components/automations/automation-run-completion-evidence.test.ts",
+ "src/renderer/src/components/automations/automation-source-display.test.ts",
+ "src/renderer/src/components/automations/hermes-cron-output-parse.test.ts",
+ "src/renderer/src/components/automations/use-automation-host-catalog.test.tsx",
+ "src/renderer/src/components/automations/use-external-automation-scope-retention.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/useMarkupPointerHandlers.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserAddressBar.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserFind.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-navigation-control-row.test.tsx",
+ "src/renderer/src/components/browser-pane/assemble-chrome/browser-pane-page-selection.test.ts",
+ "src/renderer/src/components/browser-pane/browser-client-page-renderer-installation.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/browser-annotation-geometry.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/browser-overlay-shortcut-target.test.ts",
+ "src/renderer/src/components/browser-pane/describe-page/live-browser-url-registry.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-evicted-guest-recovery.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-registration-ownership.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/browser-load-failure-overlay.test.tsx",
+ "src/renderer/src/components/browser-pane/navigate/browser-webview-load-failure.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/chromium-error-page-polling.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-pane.address-bar.test.tsx",
+ "src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.failure-message.test.tsx",
+ "src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx",
+ "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-document-actions.test.ts",
+ "src/renderer/src/components/cmd-j/palette-filter-option-list.test.ts",
+ "src/renderer/src/components/cmd-j/palette-session-age.test.ts",
+ "src/renderer/src/components/cmd-j/plugin-quick-actions.test.ts",
+ "src/renderer/src/components/confirmation-skip-preference.test.ts",
+ "src/renderer/src/components/contextual-tours/ContextualTourOverlaySurface.localization.test.tsx",
+ "src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx",
+ "src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts",
+ "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts",
+ "src/renderer/src/components/dashboard/useAgentBucketCounts.gate.test.ts",
+ "src/renderer/src/components/dictation/DictationIndicator.test.tsx",
+ "src/renderer/src/components/editor/EditorEditFileSurface.monaco-containment.test.tsx",
+ "src/renderer/src/components/editor/LargeDiffLoadPrompt.test.tsx",
+ "src/renderer/src/components/editor/RichMarkdownLinkBubble.test.ts",
+ "src/renderer/src/components/editor/RichMarkdownTableControls.test.tsx",
+ "src/renderer/src/components/editor/check-job-step-status.test.ts",
+ "src/renderer/src/components/editor/closed-editor-model-registry.test.ts",
+ "src/renderer/src/components/editor/closed-editor-tab-cache-sweep.test.ts",
+ "src/renderer/src/components/editor/closed-editor-tab-disposal.test.ts",
+ "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-render.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree.test.ts",
+ "src/renderer/src/components/editor/combined-diff/browse-files/use-combined-diff-tree-navigation.test.ts",
+ "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-load-scheduler.test.ts",
+ "src/renderer/src/components/editor/combined-diff/scroll-viewport/combined-diff-scrollbar-drag.test.ts",
+ "src/renderer/src/components/editor/diff-editor-shift-wheel-scroll.test.ts",
+ "src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts",
+ "src/renderer/src/components/editor/editor-external-watch-path-index.test.ts",
+ "src/renderer/src/components/editor/editor-model-uri.test.ts",
+ "src/renderer/src/components/editor/markdown-dirty-state.test.ts",
+ "src/renderer/src/components/editor/markdown-doc-completions.test.ts",
+ "src/renderer/src/components/editor/markdown-export-extract.test.ts",
+ "src/renderer/src/components/editor/markdown-preview-search-crash.test.tsx",
+ "src/renderer/src/components/editor/markdown-rich-mode-eligibility-cache.test.ts",
+ "src/renderer/src/components/editor/markdown-round-trip.test.ts",
+ "src/renderer/src/components/editor/monaco-conflict-decorations.test.ts",
+ "src/renderer/src/components/editor/monaco-programmatic-sync.test.ts",
+ "src/renderer/src/components/editor/pdf-scale-preference-storage.test.ts",
+ "src/renderer/src/components/editor/pdf-scale-preference.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-image-insert-code-block.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-link-clipboard.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-link-shortcut.test.ts",
+ "src/renderer/src/components/editor/setup-contextual-copy.test.ts",
+ "src/renderer/src/components/editor/untitled-file-rename-path.test.ts",
+ "src/renderer/src/components/editor/useEditorPanelRemoteSiblingContentState.test.tsx",
+ "src/renderer/src/components/editor/useLocalLogTail.test.tsx",
+ "src/renderer/src/components/editor/useMarkdownDocuments.navigation.test.ts",
+ "src/renderer/src/components/editor/useRichMarkdownPendingFocus.test.ts",
+ "src/renderer/src/components/emulator-pane/mobile-emulator-agent-setup-visibility.test.ts",
+ "src/renderer/src/components/feature-tips/VoiceDictationTipDialog.test.tsx",
+ "src/renderer/src/components/feature-wall/FullDiskAccessSetupPrompt.test.ts",
+ "src/renderer/src/components/feature-wall/use-integration-connection-status.test.ts",
+ "src/renderer/src/components/feature-wall/workbench-terminal-storyboard-sequence.test.ts",
+ "src/renderer/src/components/github-pr-reviewer-display.test.ts",
+ "src/renderer/src/components/github/PRFilterPickers.test.ts",
+ "src/renderer/src/components/github/github-mention-option-filter.test.ts",
+ "src/renderer/src/components/github/github-user-avatar.test.tsx",
+ "src/renderer/src/components/github/pr-comment-code-context.test.ts",
+ "src/renderer/src/components/github/use-image-input.test.ts",
+ "src/renderer/src/components/linear-project-search-query.test.ts",
+ "src/renderer/src/components/linear-project-view-surfaces.test.tsx",
+ "src/renderer/src/components/mobile/MobilePageToolbar.test.tsx",
+ "src/renderer/src/components/mobile/use-mobile-pairing-address-preference.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatCodeBlock.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatSessionOptionPickers.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatStructuredSessionDelivery.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatToolRun.identity.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatView.test.tsx",
+ "src/renderer/src/components/native-chat/StructuredAgentSessionAttentionBridge.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-assembler-merge-parity.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-composer-reveal-focus.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-diff.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-launch-default-adoption.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-launch-draft-resolution.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pty-retired-model.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-session-transport.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-split-shortcut.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-tool-summary.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-transcript-slots.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-view-file-drop.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-message-rail.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-picker-command-dispatch.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-send-lifecycle.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-turn-timing.test.tsx",
+ "src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.test.tsx",
+ "src/renderer/src/components/onboarding/OnboardingFlow.test.tsx",
+ "src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts",
+ "src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts",
+ "src/renderer/src/components/pr-comments-resolution-prompt.test.ts",
+ "src/renderer/src/components/right-sidebar/AiVaultPanelSearch.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.test.tsx",
+ "src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.row-handlers.test.tsx",
+ "src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.commit-generation-records.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-host-scope.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-path-actions.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx",
+ "src/renderer/src/components/right-sidebar/check-details-resize.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-polling.test.tsx",
+ "src/renderer/src/components/right-sidebar/coalesced-poll-runner.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-selection.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-stale-dir-cache.test.ts",
+ "src/renderer/src/components/right-sidebar/git-status-refresh-scheduler.test.ts",
+ "src/renderer/src/components/right-sidebar/plugin-panel-bridge-host.test.ts",
+ "src/renderer/src/components/right-sidebar/plugin-panel-watchdog-visibility.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comment-snapshotted-thread-resolver.test.ts",
+ "src/renderer/src/components/right-sidebar/search-rows.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-huge-repo-warning-dismissals.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control/commit/source-control-entry-mutation-failures.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/review/suppressed-github-pr.test.ts",
+ "src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-installed-plugin-route-reconciliation.test.tsx",
+ "src/renderer/src/components/right-sidebar/useFileExplorerKeys.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileExplorerVisibleRowProjection.debounce.test.tsx",
+ "src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts",
+ "src/renderer/src/components/settings/DiffShowWhitespaceSetting.test.tsx",
+ "src/renderer/src/components/settings/EphemeralVmsPane.test.tsx",
+ "src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.test.tsx",
+ "src/renderer/src/components/settings/MobilePane.test.tsx",
+ "src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx",
+ "src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx",
+ "src/renderer/src/components/settings/QuickCommandsPane.test.ts",
+ "src/renderer/src/components/settings/RepositoryForkSyncSection.test.tsx",
+ "src/renderer/src/components/settings/RepositoryHooksSection.test.ts",
+ "src/renderer/src/components/settings/RepositoryIconEmojiPicker.test.tsx",
+ "src/renderer/src/components/settings/SessionHistorySettingsPane.test.tsx",
+ "src/renderer/src/components/settings/SettingsFormControls.font-autocomplete.test.tsx",
+ "src/renderer/src/components/settings/TaskSourceProviderCard.test.tsx",
+ "src/renderer/src/components/settings/accounts-search.test.ts",
+ "src/renderer/src/components/settings/appearance-search.test.ts",
+ "src/renderer/src/components/settings/codex-account-auth-warning.test.ts",
+ "src/renderer/src/components/settings/mobile-pairing-device-polling.test.ts",
+ "src/renderer/src/components/settings/setting-ownership.test.ts",
+ "src/renderer/src/components/settings/settings-search.test.ts",
+ "src/renderer/src/components/settings/shortcut-groups.test.ts",
+ "src/renderer/src/components/setup-guide/use-setup-guide-progress.test.ts",
+ "src/renderer/src/components/shared/MacFolderAccessFixDialog.test.tsx",
+ "src/renderer/src/components/sidebar/AddRemoteHostDialog.config-picker.test.tsx",
+ "src/renderer/src/components/sidebar/AddRepoHostSelector.test.tsx",
+ "src/renderer/src/components/sidebar/AddRepoStartSteps.test.tsx",
+ "src/renderer/src/components/sidebar/FilterToggleRow.test.tsx",
+ "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx",
+ "src/renderer/src/components/sidebar/NoticeHostGlyph.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarFeedbackDialog.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardMeta.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCardStatusSlot.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeContextMenu.delete-shortcut.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeList.group-headers.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.begin-editing.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.test.tsx",
+ "src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts",
+ "src/renderer/src/components/sidebar/create-project-defaults.test.ts",
+ "src/renderer/src/components/sidebar/host-section-rows.test.ts",
+ "src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts",
+ "src/renderer/src/components/sidebar/prompt-cache-timer-selection.test.ts",
+ "src/renderer/src/components/sidebar/sleep-worktree-activation-race.test.ts",
+ "src/renderer/src/components/sidebar/ssh-host-remove-resolution.test.ts",
+ "src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.test.tsx",
+ "src/renderer/src/components/sidebar/use-workspace-reveal-body-redirect.test.tsx",
+ "src/renderer/src/components/sidebar/use-workspace-status-drop.test.ts",
+ "src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts",
+ "src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx",
+ "src/renderer/src/components/sidebar/workspace-kanban-area-selection.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-host-attribution.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-agent-summary.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-dom-events.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts",
+ "src/renderer/src/components/sidebar/worktree-delete-request.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-imported-worktrees.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-nested-project-groups.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-project-host-setups.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/use-row-removal-animation.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sidebar-drag-geometry.test.ts",
+ "src/renderer/src/components/sidebar/worktree-sort-label-ordering.test.ts",
+ "src/renderer/src/components/skills/SkillInstallTargetFields.test.tsx",
+ "src/renderer/src/components/skills/skill-delete-selection.test.ts",
+ "src/renderer/src/components/skills/skill-install-progress-state.test.tsx",
+ "src/renderer/src/components/skills/skill-share-package-selection.test.ts",
+ "src/renderer/src/components/status-bar/UsagePercentageDisplayChangeNotice.test.tsx",
+ "src/renderer/src/components/status-bar/UsageRosterPanel.test.tsx",
+ "src/renderer/src/components/status-bar/inline-usage-bars.test.tsx",
+ "src/renderer/src/components/status-bar/provider-account-sync-key.test.ts",
+ "src/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsx",
+ "src/renderer/src/components/status-bar/resource-memory-metric-copy.test.ts",
+ "src/renderer/src/components/status-bar/resource-session-bindings.test.ts",
+ "src/renderer/src/components/status-bar/status-bar-context-menu-policy.test.ts",
+ "src/renderer/src/components/status-bar/tooltip.test.ts",
+ "src/renderer/src/components/tab-bar/TabBarQuickCommandItem.test.tsx",
+ "src/renderer/src/components/tab-bar/middle-button-default-guard.test.ts",
+ "src/renderer/src/components/tab-bar/open-tab-search-retention.test.ts",
+ "src/renderer/src/components/tab-bar/open-tab-selection-routing.test.ts",
+ "src/renderer/src/components/tab-bar/tab-context-menu-consistency.test.tsx",
+ "src/renderer/src/components/tab-bar/tab-create-entry-action.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-classifier.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts",
+ "src/renderer/src/components/tab-bar/tab-create-entry-url-classification.test.ts",
+ "src/renderer/src/components/tab-bar/tab-strip-overflow-navigation.test.ts",
+ "src/renderer/src/components/tab-group/useTabGroupTabCloseCommands.test.tsx",
+ "src/renderer/src/components/task-page-default-repo-selection.test.ts",
+ "src/renderer/src/components/task-page-github-status-state.test.ts",
+ "src/renderer/src/components/task-page-github-work-item-filter-membership.test.ts",
+ "src/renderer/src/components/task-page-github-work-item-status.test.ts",
+ "src/renderer/src/components/task-page-linear-in-orca-issues.test.ts",
+ "src/renderer/src/components/task-page-linear-issue-grouping.test.ts",
+ "src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts",
+ "src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.test.tsx",
+ "src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.react185.test.tsx",
+ "src/renderer/src/components/terminal-pane/TerminalProcessExitOverlay.test.tsx",
+ "src/renderer/src/components/terminal-pane/codex-detached-pane-restart.test.ts",
+ "src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts",
+ "src/renderer/src/components/terminal-pane/expand-collapse-render-stability.test.ts",
+ "src/renderer/src/components/terminal-pane/hard-wrapped-terminal-http-links.test.ts",
+ "src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts",
+ "src/renderer/src/components/terminal-pane/mobile-driver-overlay-collapse.test.ts",
+ "src/renderer/src/components/terminal-pane/mobile-driver-overlay-visibility.test.ts",
+ "src/renderer/src/components/terminal-pane/pane-agent-session-id.test.ts",
+ "src/renderer/src/components/terminal-pane/parked-terminal-command-status.test.ts",
+ "src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-direct-ssh-spawn-retry.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-fresh-spawn-guards.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-parked-ssh-snapshot.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-restored-baseline-shortfall.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-setup-split-spawn.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-visible-pane-output-pause-latch.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/direct-ssh-reattach-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/reattach-payload-ssh-reconnect-model-paint.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection/write-pty-output-to-xterm-startup-callback.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-pre-handler-buffer-warn-eviction.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-shutdown-data-suspension.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-shutdown-exit-deferral.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-recycled-pty-incarnation.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-snapshot-escape-tail.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-coalescing.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stale-handle-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/resolve-split-cwd.test.ts",
+ "src/renderer/src/components/terminal-pane/ssh-pane-connect-gate.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-recheck-deadlines.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx",
+ "src/renderer/src/components/terminal-pane/terminal-drop-runtime-owner.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-error-remote-closed-localization.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-hangul-syllable-flush.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-macos-keybinding-dict-trace.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-preedit-cell-grid.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-transaction-events.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-jis-yen-input.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-kitty-csi-u-encoding.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-output-visibility.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-watcher-sole-newborn-exit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-programmatic-text-paste.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-render-desync-sentinel.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-windows-shift-enter.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-visibility-resume.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-window-focus-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-scroll-visibility-memory.test.ts",
+ "src/renderer/src/components/terminal-pane/useSessionRestoredBannerDismiss.test.tsx",
+ "src/renderer/src/components/terminal-pane/wrapped-terminal-link-ranges.test.ts",
+ "src/renderer/src/components/terminal-scrollback-decoration-eviction.test.ts",
+ "src/renderer/src/components/terminal/terminal-close-incarnation.test.ts",
+ "src/renderer/src/components/terminal/terminal-provider-snapshot-capability.test.ts",
+ "src/renderer/src/components/ui/slider.test.tsx",
+ "src/renderer/src/components/use-worktree-jump-palette-browser-ownership.test.ts",
+ "src/renderer/src/components/workspace-cleanup/WorkspaceCleanupDialog.mount-gating.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-list.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-row-data.test.ts",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-row.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-sort.test.ts",
+ "src/renderer/src/components/worktree-creation/WorktreeCreationPanel.test.tsx",
+ "src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts",
+ "src/renderer/src/hooks/agent-hook-completion-notifications-import.test.ts",
+ "src/renderer/src/hooks/automation-agent-status-entry-change.test.ts",
+ "src/renderer/src/hooks/composer-native-file-drop.test.ts",
+ "src/renderer/src/hooks/composer-state/provider-runtime-sync.test.ts",
+ "src/renderer/src/hooks/direct-ssh-reconnect-coordinator.test.ts",
+ "src/renderer/src/hooks/installed-agent-skill-verdict.test.ts",
+ "src/renderer/src/hooks/ipc-events/browser-state-open-link-profile.test.ts",
+ "src/renderer/src/hooks/ipc-events/runtime-reconnect-host-status.test.ts",
+ "src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts",
+ "src/renderer/src/hooks/metadata-request-cache.test.ts",
+ "src/renderer/src/hooks/remote-workspace-deferred-placement-retry.test.ts",
+ "src/renderer/src/hooks/remote-workspace-session-merge-close-tombstones.test.ts",
+ "src/renderer/src/hooks/useInstalledAgentSkills.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-browser-certificate-failure.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-close-routing-active-browser-tab.test.ts",
+ "src/renderer/src/hooks/useIssueMetadata.test.tsx",
+ "src/renderer/src/hooks/useModalReturnFocus.test.tsx",
+ "src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts",
+ "src/renderer/src/hooks/useSkillFreshness.test.tsx",
+ "src/renderer/src/hooks/useWindowsTerminalCapabilityOwnerKey.test.tsx",
+ "src/renderer/src/i18n/ja-technical-literal-mistranslations.test.ts",
+ "src/renderer/src/i18n/native-chat-locales.test.ts",
+ "src/renderer/src/lib/agent-hibernation-confirmation.test.ts",
+ "src/renderer/src/lib/agent-hibernation-output-activity.test.ts",
+ "src/renderer/src/lib/agent-hibernation-pane-age.test.ts",
+ "src/renderer/src/lib/agent-launch-caller-placement.test.ts",
+ "src/renderer/src/lib/agent-launch-routing-caller-census.test.ts",
+ "src/renderer/src/lib/agent-row-primary-text.test.ts",
+ "src/renderer/src/lib/agent-startup-delayed-delivery-perf.test.ts",
+ "src/renderer/src/lib/agent-status.test.ts",
+ "src/renderer/src/lib/ai-vault-session-resume-preparation.test.ts",
+ "src/renderer/src/lib/browser-uuid.test.ts",
+ "src/renderer/src/lib/codex-pane-selection-lane.test.ts",
+ "src/renderer/src/lib/diff-comments-format.test.ts",
+ "src/renderer/src/lib/editable-target.test.ts",
+ "src/renderer/src/lib/feature-education-telemetry.test.ts",
+ "src/renderer/src/lib/floating-workspace-terminal-actions.test.ts",
+ "src/renderer/src/lib/github-links.test.ts",
+ "src/renderer/src/lib/github-source-runtime-context.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-subscription-lifetime.test.ts",
+ "src/renderer/src/lib/keyboard-layout/layout-base-character.test.ts",
+ "src/renderer/src/lib/keyboard-layout/option-as-alt-probe.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-structured.test.ts",
+ "src/renderer/src/lib/linear-board-drag-payload.test.ts",
+ "src/renderer/src/lib/markdown-document-templates.test.ts",
+ "src/renderer/src/lib/markdown-review-note-copy.test.ts",
+ "src/renderer/src/lib/monaco-diff-editor-disposal.test.ts",
+ "src/renderer/src/lib/monaco-setup-steps.test.ts",
+ "src/renderer/src/lib/new-workspace-create-gates.test.ts",
+ "src/renderer/src/lib/order-empty-query-worktrees.test.ts",
+ "src/renderer/src/lib/pane-manager/focus-follows-mouse.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-fit-resize-observer.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-initial-fit-lifecycle.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-inline-images.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-split-scroll.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-tree-equalization-parity.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-webgl-refresh-lifecycle.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-webgl-renderer.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-write-pipeline-health.test.ts",
+ "src/renderer/src/lib/passive-macos-app-data-access.test.ts",
+ "src/renderer/src/lib/paste-payload-metadata.test.ts",
+ "src/renderer/src/lib/pr-comment-action-state.test.ts",
+ "src/renderer/src/lib/react-commit-cascade-telemetry.test.ts",
+ "src/renderer/src/lib/renderer-agent-status-observation-ingress.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-direct-ssh-hydration-gap.test.ts",
+ "src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts",
+ "src/renderer/src/lib/script-textarea-rows.test.ts",
+ "src/renderer/src/lib/sidebar-worktree-activation.test.ts",
+ "src/renderer/src/lib/simulator-pane-shutdown-scheduler.test.ts",
+ "src/renderer/src/lib/startup-ui-hydration.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch-reload.test.ts",
+ "src/renderer/src/lib/tab-agent-identity-decision-table.test.ts",
+ "src/renderer/src/lib/tab-agent-status-index.test.ts",
+ "src/renderer/src/lib/terminal-file-uri-link.test.ts",
+ "src/renderer/src/lib/terminal-quick-command-project-scope.test.ts",
+ "src/renderer/src/lib/terminal-shortcut-capture-notification.test.tsx",
+ "src/renderer/src/lib/update-check-click-options.test.ts",
+ "src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts",
+ "src/renderer/src/lib/visible-overlay.test.ts",
+ "src/renderer/src/lib/web-client-location.test.ts",
+ "src/renderer/src/lib/workspace-port-host-availability.test.ts",
+ "src/renderer/src/lib/workspace-port-scan-publish.test.ts",
+ "src/renderer/src/lib/worktree-activation-reveal.test.ts",
+ "src/renderer/src/lib/worktree-agent-structured-inventory.test.ts",
+ "src/renderer/src/lib/worktree-creation-structured-session.test.ts",
+ "src/renderer/src/lib/worktree-operation-route.test.ts",
+ "src/renderer/src/lib/worktree-palette-runtime-owner-identity.test.ts",
+ "src/renderer/src/lib/worktree-runtime-owner-index.test.ts",
+ "src/renderer/src/lib/worktree-sort-order-persistence.test.ts",
+ "src/renderer/src/renderer-node-builtin-boundary.test.ts",
+ "src/renderer/src/runtime/agent-session-keyboard-capability.test.ts",
+ "src/renderer/src/runtime/browser-workspace-tab-close-plan.test.ts",
+ "src/renderer/src/runtime/browser-workspace-tab-close.test.ts",
+ "src/renderer/src/runtime/focus-runtime-terminal-surface-chat-view.test.ts",
+ "src/renderer/src/runtime/gitlab-job-trace-client.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-settle-receipt-frames.test.tsx",
+ "src/renderer/src/runtime/host-session-snapshot-authority-client-hosted.test.ts",
+ "src/renderer/src/runtime/local-runtime-capabilities.test.ts",
+ "src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts",
+ "src/renderer/src/runtime/remote-server-install-failure-probe.test.ts",
+ "src/renderer/src/runtime/runtime-path-existence-queue-pairing.test.ts",
+ "src/renderer/src/runtime/runtime-provider-accounts-client.test.ts",
+ "src/renderer/src/runtime/runtime-rpc-client-pairing-revision.test.ts",
+ "src/renderer/src/runtime/runtime-terminal-inspection.test.ts",
+ "src/renderer/src/runtime/runtime-terminal-stream.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-failure.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-staged-focus.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-client-owned-page-content.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-initial-terminal-relaunch.test.tsx",
+ "src/renderer/src/runtime/web-session-tabs-sync-layout-duplicate-groups.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-absence-across-republication.test.ts",
+ "src/renderer/src/runtime/window-visibility-subscription-parking.test.ts",
+ "src/renderer/src/ssh/ssh-connection-recoverability.test.ts",
+ "src/renderer/src/store/selectors.test.ts",
+ "src/renderer/src/store/slices/active-tab-owner-worktree.test.ts",
+ "src/renderer/src/store/slices/agent-status-live-freshness-request.test.ts",
+ "src/renderer/src/store/slices/agent-status-manual-sleep-capture.test.ts",
+ "src/renderer/src/store/slices/agent-status-tool-assistant-fields.test.ts",
+ "src/renderer/src/store/slices/browser-remote-page-lifecycle.test.ts",
+ "src/renderer/src/store/slices/bulk-worktree-purge-terminal-maps-leak.test.ts",
+ "src/renderer/src/store/slices/dictation-model-state-stabilisation.test.ts",
+ "src/renderer/src/store/slices/editor-close-file-cleanup.test.ts",
+ "src/renderer/src/store/slices/editor-open-diff.test.ts",
+ "src/renderer/src/store/slices/editor-preview-tab-setting.test.ts",
+ "src/renderer/src/store/slices/editor-remote-branch-actions.test.ts",
+ "src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts",
+ "src/renderer/src/store/slices/github-issue-state-machine.test.ts",
+ "src/renderer/src/store/slices/github-pr-branch-hosted-review-cache.test.ts",
+ "src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts",
+ "src/renderer/src/store/slices/github-work-item-cache-identity.test.ts",
+ "src/renderer/src/store/slices/github-work-items-error-envelope.test.ts",
+ "src/renderer/src/store/slices/hosted-review.test.ts",
+ "src/renderer/src/store/slices/linear-issue-cache-refresh.test.ts",
+ "src/renderer/src/store/slices/repo-owner-cache-identity.test.ts",
+ "src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts",
+ "src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts",
+ "src/renderer/src/store/slices/repos-ephemeral-vm-cleanup-retention.test.ts",
+ "src/renderer/src/store/slices/repos-project-host-capability.test.ts",
+ "src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts",
+ "src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts",
+ "src/renderer/src/store/slices/repos.runtime-fallback.test.ts",
+ "src/renderer/src/store/slices/repos.test.ts",
+ "src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts",
+ "src/renderer/src/store/slices/runtime-status.test.ts",
+ "src/renderer/src/store/slices/settings-search-state.test.ts",
+ "src/renderer/src/store/slices/ssh-target-cleanup.test.ts",
+ "src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts",
+ "src/renderer/src/store/slices/tabs-model-reconciliation.test.ts",
+ "src/renderer/src/store/slices/tabs/tabs-reconciliation-batch-identity.test.ts",
+ "src/renderer/src/store/slices/ui-hydration-workspace-preferences.test.ts",
+ "src/renderer/src/store/slices/usage-snapshot-refresh.benchmark.test.ts",
+ "src/renderer/src/store/slices/workspace-document-title-refresh.test.ts",
+ "src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts",
+ "src/renderer/src/store/slices/worktree-nav-history.test.ts",
+ "src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts",
+ "src/renderer/src/store/slices/worktrees-hydration-purge.test.ts",
+ "src/renderer/src/store/slices/worktrees-purge-terminal-state.test.ts",
+ "src/renderer/src/store/slices/worktrees-unread-state.test.ts",
+ "src/renderer/src/store/slices/worktrees/listing/detected-worktree-unavailable-reason.test.ts",
+ "src/renderer/src/store/terminals/terminal-tab-close-tombstone.test.ts",
+ "src/renderer/src/store/terminals/terminal-workspace-routing.scale.test.ts",
+ "src/renderer/src/web/preload-api/web-gitlab-api.test.ts",
+ "src/renderer/src/web/web-file-mutation-methods.test.ts",
+ "src/renderer/src/web/web-preload-api-clipboard.test.ts",
+ "src/renderer/src/web/web-preload-api-workspace-catalog.test.ts",
+ "src/renderer/src/web/web-runtime-client.test.ts",
+ "src/shared/agent-detection.test.ts",
+ "src/shared/agent-hook-listener-opencode-reattribution.test.ts",
+ "src/shared/agent-resume-launch-command.test.ts",
+ "src/shared/agent-scratch-worktrees.test.ts",
+ "src/shared/agent-session-journal-producer.test.ts",
+ "src/shared/agent-session-lease-adjudication.test.ts",
+ "src/shared/agent-session-operation-ledger.test.ts",
+ "src/shared/agent-session-option-catalog.test.ts",
+ "src/shared/agent-session-pty-write-admission.test.ts",
+ "src/shared/agent-status-child-work-projection.test.ts",
+ "src/shared/agent-status-store-bounds.test.ts",
+ "src/shared/ai-vault-search-scope-contract.test.ts",
+ "src/shared/automation-host-filter.test.ts",
+ "src/shared/automation-usage-summary.test.ts",
+ "src/shared/binary-file-extensions.test.ts",
+ "src/shared/branch-name-from-work.test.ts",
+ "src/shared/browser-client-host-id-argument.test.ts",
+ "src/shared/browser-network-tunnel-stream-framing.test.ts",
+ "src/shared/check-job-log-retention.test.ts",
+ "src/shared/claimed-agent-pty-owner.test.ts",
+ "src/shared/closed-terminal-tab-tombstones.test.ts",
+ "src/shared/codex-subagent-poll-scheduler.test.ts",
+ "src/shared/crash-reporting.test.ts",
+ "src/shared/cross-platform-path-guards.test.ts",
+ "src/shared/cross-platform-path.test.ts",
+ "src/shared/doc-preview-file-access.test.ts",
+ "src/shared/draft-paste-ready-scanner-grok-trace-replay.test.ts",
+ "src/shared/ephemeral-vm-recipe-doctor.test.ts",
+ "src/shared/ephemeral-vm-recipes.test.ts",
+ "src/shared/ephemeral-vm-runtime-store-rollback.test.ts",
+ "src/shared/ephemeral-vm-runtime-store.test.ts",
+ "src/shared/folder-workspace-worktree.test.ts",
+ "src/shared/folder-workspaces.test.ts",
+ "src/shared/git-branch-line-total.test.ts",
+ "src/shared/git-cquoted-path.test.ts",
+ "src/shared/git-metadata-path.test.ts",
+ "src/shared/git-remote-url-index.test.ts",
+ "src/shared/git-status-line-stats-cache.test.ts",
+ "src/shared/github/pull-request-auto-merge-availability.test.ts",
+ "src/shared/github/repository-identity-key.test.ts",
+ "src/shared/json-text-structure-limit.test.ts",
+ "src/shared/keybindings-terminal-context.test.ts",
+ "src/shared/keybindings-unassigned-actions.test.ts",
+ "src/shared/linear/issue-view-resume-state.test.ts",
+ "src/shared/localhost-worktree-labels.test.ts",
+ "src/shared/loose-ref-count.test.ts",
+ "src/shared/map-with-concurrency.test.ts",
+ "src/shared/mcp-config.test.ts",
+ "src/shared/mobile-relay-pairing-offer.test.ts",
+ "src/shared/mobile-web-bundle/bundle-rpc-contract.test.ts",
+ "src/shared/native-chat-slash-commands.test.ts",
+ "src/shared/native-chat-tool-icon.test.ts",
+ "src/shared/native-chat-tool-pairing.test.ts",
+ "src/shared/new-workspace-dialog-repo.test.ts",
+ "src/shared/node-bounded-file-reader-sync.test.ts",
+ "src/shared/node-readable-text.test.ts",
+ "src/shared/omp-fresh-launch-shell.test.ts",
+ "src/shared/orchestration-check-output.test.ts",
+ "src/shared/orchestration-compatibility-evidence.test.ts",
+ "src/shared/orchestration-task-display.test.ts",
+ "src/shared/physical-exit-tracker.test.ts",
+ "src/shared/plugins/plugin-content-pack-contributions.test.ts",
+ "src/shared/plugins/plugin-install-lockfile.test.ts",
+ "src/shared/plugins/plugin-panel-call-admission.test.ts",
+ "src/shared/plugins/plugin-path-safety.test.ts",
+ "src/shared/pty-slave-line-discipline-echo.test.ts",
+ "src/shared/quick-open-fuzzy-scan.test.ts",
+ "src/shared/quick-open-git-directory-collapse.test.ts",
+ "src/shared/raster-image-dimensions.test.ts",
+ "src/shared/react-update-depth-attribution.test.ts",
+ "src/shared/relay-optional-artifacts.test.ts",
+ "src/shared/remote-runtime-request-response-router.test.ts",
+ "src/shared/remote-runtime-socket-liveness.test.ts",
+ "src/shared/require-tui-agent-config.test.ts",
+ "src/shared/secure-path-windows-acl.win32.test.ts",
+ "src/shared/setup-agent-sequencing.test.ts",
+ "src/shared/setup-script-imports.test.ts",
+ "src/shared/skill-deletion-eligibility.test.ts",
+ "src/shared/source-control-ai-actions.test.ts",
+ "src/shared/source-control-primary-action-decision.test.ts",
+ "src/shared/ssh-pty-id.test.ts",
+ "src/shared/ssh-retained-payload-admission.test.ts",
+ "src/shared/ssh-types.test.ts",
+ "src/shared/structural-value-equality.test.ts",
+ "src/shared/structured-agent-session-projection.test.ts",
+ "src/shared/structured-agent-session-status-tool-line.test.ts",
+ "src/shared/task-providers.test.ts",
+ "src/shared/task-query.test.ts",
+ "src/shared/telemetry-common-props.test.ts",
+ "src/shared/terminal-partial-escape-tail.fuzz.test.ts",
+ "src/shared/tui-agent-prompt-transport.test.ts",
+ "src/shared/tui-agent-startup-session-options.test.ts",
+ "src/shared/window-shortcut-policy-agent-dashboard.test.ts",
+ "src/shared/windows-command-line-budget.test.ts",
+ "src/shared/workspace-cleanup-applied-filters.test.ts",
+ "src/shared/workspace-cleanup.test.ts",
+ "src/shared/workspace-session-browser-history.test.ts",
+ "src/shared/workspace-session-terminal-buffers.test.ts",
+ "src/shared/worktree/create-preparation.test.ts",
+ "src/shared/worktree/github-pr-suppression.test.ts",
+ "src/shared/worktree/visibility-sources.test.ts",
+ "tests/e2e/folder-upgrade-identity-persistence.unit.test.ts",
+ "tests/e2e/global-teardown.unit.test.ts",
+ "tests/e2e/helpers/electron-home-isolation.unit.test.ts",
+ "tests/e2e/helpers/electron-main-evaluate-retry.unit.test.ts",
+ "tests/e2e/helpers/golden-source-control.unit.test.ts",
+ "tests/e2e/helpers/remote-skill-cloud-fixture.unit.test.ts",
+ "tests/e2e/remote-terminal-tab-retirement.unit.test.ts",
+ "tests/e2e/ssh-codex-replay-reply-probe.unit.test.ts",
+ "tests/e2e/structured-agent-session-read-owner.unit.test.ts",
+ "tests/tools/relay-bench/relay-bench-invocation.test.mjs"
+ ],
+ "durationMs": 851039
+ },
+ {
+ "files": [
+ "config/scripts/build-linux-local.test.mjs",
+ "config/scripts/build-mac-local.test.mjs",
+ "config/scripts/build-orcad-prebuilds.test.mjs",
+ "config/scripts/computer-use-modifier-safety.test.mjs",
+ "config/scripts/computer-use-skill-guidance.test.mjs",
+ "config/scripts/ensure-native-runtime.test.mjs",
+ "config/scripts/lint-staged-worktree-backup.test.mjs",
+ "config/scripts/locale-translation-policy.zh-status-bar-usage.test.mjs",
+ "config/scripts/mobile-launch-contract-workflow.test.mjs",
+ "config/scripts/mobile-web-app-drawer-render.test.mjs",
+ "config/scripts/mobile-web-app-haptics-seam.test.mjs",
+ "config/scripts/mobile-web-app-route-manifest.test.mjs",
+ "config/scripts/mobile-web-app-session-text-inputs.test.mjs",
+ "config/scripts/mobile-web-app-terminal-live-input-render.test.mjs",
+ "config/scripts/mobile-web-page-routes.test.mjs",
+ "config/scripts/packaged-browser-lane-contract.test.mjs",
+ "config/scripts/patched-dependencies-frozen-install.test.mjs",
+ "config/scripts/pr-workflow-parallelism.test.mjs",
+ "config/scripts/project-renderer-web-client.test.mjs",
+ "config/scripts/release-cut-sourcemap-publish.test.mjs",
+ "config/scripts/renderer-boot-graph.test.mjs",
+ "config/scripts/script-entry-detection.test.mjs",
+ "config/scripts/space-sharing-copy.test.ts",
+ "config/scripts/summarize-terminal-perf-report.test.mjs",
+ "config/scripts/terminal-perf-report-annotations.test.mjs",
+ "config/scripts/verify-packaged-browser-participation.test.mjs",
+ "config/scripts/verify-packaged-daemon-entry.test.mjs",
+ "config/scripts/verify-skills-cli-runtime.test.mjs",
+ "config/scripts/verify-windows-inner-signature.test.mjs",
+ "config/scripts/win-crash-survival-e2e.test.mjs",
+ "config/scripts/win32-test-lane-registration.test.mjs",
+ "config/scripts/windows-process-tree-gyp-path.test.mjs",
+ "config/scripts/windows-process-tree-gyp-rebuild.test.mjs",
+ "config/scripts/xterm-image-resize-contract.test.mjs",
+ "src/cli/base64-payload-byte-count.test.ts",
+ "src/cli/browser-cookie-credentials-empty-value.test.ts",
+ "src/cli/handler-group-manifest.test.ts",
+ "src/cli/handlers/orchestration-federated-legacy-settlement.test.ts",
+ "src/cli/handlers/orchestration-migration.test.ts",
+ "src/cli/handlers/orchestration-request-show-cli.test.ts",
+ "src/cli/handlers/orchestration-worker-show-wait-cli.test.ts",
+ "src/cli/handlers/orchestration.test.ts",
+ "src/cli/index-device-commands.test.ts",
+ "src/cli/index-serve-command.test.ts",
+ "src/cli/index-worktree-create-target.test.ts",
+ "src/cli/runtime/client-timeout-policy.test.ts",
+ "src/cli/runtime/envelope-schema.test.ts",
+ "src/cli/runtime/environments.test.ts",
+ "src/cli/runtime/orchestration-recovery-command.test.ts",
+ "src/cli/specs/skills.test.ts",
+ "src/cli/vocabulary-policy.test.ts",
+ "src/main/agent-awake-service.test.ts",
+ "src/main/agent-hooks/hook-status-session-tabs-republish.test.ts",
+ "src/main/agent-hooks/installer-utils-remote.test.ts",
+ "src/main/agent-hooks/managed-agent-hook-controls.test.ts",
+ "src/main/agent-hooks/managed-hook-command-contract.test.ts",
+ "src/main/agent-hooks/managed-hook-install-lock.test.ts",
+ "src/main/agent-hooks/server-ingest-terminal-status.test.ts",
+ "src/main/agent-hooks/server-structured-canonical-status.test.ts",
+ "src/main/agent-hooks/spool.test.ts",
+ "src/main/agent-state-file-reader.test.ts",
+ "src/main/ai-vault-search/session-search-deleted-sources.test.ts",
+ "src/main/ai-vault-search/session-search-fts5-contract.test.ts",
+ "src/main/ai-vault-search/session-search-orphan-rows.test.ts",
+ "src/main/ai-vault-search/session-search-retention-delete.test.ts",
+ "src/main/ai-vault-search/session-search-scope-entry-points.test.ts",
+ "src/main/ai-vault-search/session-search-store-is-memory.test.ts",
+ "src/main/ai-vault/claude-project-dir-encoding.test.ts",
+ "src/main/ai-vault/omp-session-root.test.ts",
+ "src/main/ai-vault/remote-session-scanner.test.ts",
+ "src/main/ai-vault/runtime-session-scanner.test.ts",
+ "src/main/ai-vault/session-document-stream-parity.test.ts",
+ "src/main/ai-vault/session-scanner-devin-contention.test.ts",
+ "src/main/ai-vault/session-scanner-kimi-index-cache.test.ts",
+ "src/main/ai-vault/session-scanner-omp-subagent-listing.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sources.test.ts",
+ "src/main/ai-vault/session-scanner-opencode-sqlite.test.ts",
+ "src/main/ai-vault/session-scanner-opencode2-sqlite.test.ts",
+ "src/main/ai-vault/session-scanner-preview-window-truncation.test.ts",
+ "src/main/ai-vault/session-scanner-scope.test.ts",
+ "src/main/ai-vault/session-scanner-unlimited-dedup.test.ts",
+ "src/main/amp/hook-service.test.ts",
+ "src/main/automations/automation-skip-coalescing.test.ts",
+ "src/main/automations/external-manager.test.ts",
+ "src/main/automations/runtime-terminal-run-observer.test.ts",
+ "src/main/azure-devops/pull-request-mappers.test.ts",
+ "src/main/bitbucket/pull-request-mappers.test.ts",
+ "src/main/browser/agent-browser-bridge-keypress-input.test.ts",
+ "src/main/browser/agent-browser-session-reset.test.ts",
+ "src/main/browser/browser-certificate-trust-controller.test.ts",
+ "src/main/browser/browser-client-host-command-dispatcher.test.ts",
+ "src/main/browser/browser-client-network-route-registry.test.ts",
+ "src/main/browser/browser-client-page-command-integration.test.ts",
+ "src/main/browser/browser-client-page-inventory.test.ts",
+ "src/main/browser/browser-client-page-published-url.test.ts",
+ "src/main/browser/browser-client-page-upload-routing.test.ts",
+ "src/main/browser/browser-client-route-cookie-import-partition-parity.test.ts",
+ "src/main/browser/browser-client-upload-command.test.ts",
+ "src/main/browser/browser-client-upload-transfer.test.ts",
+ "src/main/browser/browser-cookie-clear-store-lifecycle.test.ts",
+ "src/main/browser/browser-cookie-import-undecryptable.test.ts",
+ "src/main/browser/browser-cookie-import.helium.test.ts",
+ "src/main/browser/browser-cookie-source-partition.test.ts",
+ "src/main/browser/browser-manager-downloads.test.ts",
+ "src/main/browser/browser-manager-grab-selection.test.ts",
+ "src/main/browser/browser-manager-guest-lifecycle.test.ts",
+ "src/main/browser/browser-manager-popup-child.test.ts",
+ "src/main/browser/browser-manager-viewport-ownership.test.ts",
+ "src/main/browser/browser-network-execution-route.test.ts",
+ "src/main/browser/browser-network-tunnel-session-aggregate-memory.test.ts",
+ "src/main/browser/browser-route-persisted-worker-egress.electron.test.ts",
+ "src/main/browser/browser-route-tcp-egress.electron.test.ts",
+ "src/main/browser/browser-session-partition-policies.test.ts",
+ "src/main/browser/browser-session-user-agent-migration-inspection.test.ts",
+ "src/main/browser/doc-preview-guest-policy.test.ts",
+ "src/main/browser/grab-guest-script.test.ts",
+ "src/main/browser/offscreen-browser-backend-lifecycle.test.ts",
+ "src/main/browser/offscreen-browser-backend.web-preferences.test.ts",
+ "src/main/browser/paired-runtime-browser-client-host-registry.test.ts",
+ "src/main/browser/system-ssh-socks-client-socket.test.ts",
+ "src/main/claude-accounts/runtime-auth-service-deselect-restore.test.ts",
+ "src/main/claude/claude-background-task-retention.test.ts",
+ "src/main/claude/claude-background-task-tracker.test.ts",
+ "src/main/claude/claude-child-process-environment.test.ts",
+ "src/main/claude/claude-session-end-install.test.ts",
+ "src/main/claude/claude-structured-auth-parity.test.ts",
+ "src/main/claude/claude-structured-dispatch-content.test.ts",
+ "src/main/claude/claude-structured-inbound-control.test.ts",
+ "src/main/claude/claude-structured-model-preflight.test.ts",
+ "src/main/claude/claude-structured-session-adapter-turns.test.ts",
+ "src/main/claude/claude-structured-session-adapter.test.ts",
+ "src/main/claude/claude-turn-outcome.test.ts",
+ "src/main/cli/cli-command-installation-races.test.ts",
+ "src/main/cli/keyed-promise-queue.test.ts",
+ "src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts",
+ "src/main/codex-accounts/runtime-home-system-default-mirror-readback.test.ts",
+ "src/main/codex-accounts/service-quota-refresh-decoupling.test.ts",
+ "src/main/codex-usage/codex-rollout-resume-state.test.ts",
+ "src/main/codex-usage/store-automation-usage.test.ts",
+ "src/main/codex-usage/store-model-pricing.test.ts",
+ "src/main/codex/codex-app-server-client.test.ts",
+ "src/main/codex/codex-notice-item-translation.test.ts",
+ "src/main/codex/codex-real-home-hook-install.test.ts",
+ "src/main/codex/codex-state-db.test.ts",
+ "src/main/codex/codex-structured-dispatch-admission.test.ts",
+ "src/main/codex/codex-structured-item-translation.test.ts",
+ "src/main/codex/codex-structured-journal-translation-streams.test.ts",
+ "src/main/codex/codex-structured-journal-translation-turn-lifecycle.test.ts",
+ "src/main/codex/codex-structured-journal-translation.test.ts",
+ "src/main/codex/codex-structured-owner-identity.test.ts",
+ "src/main/codex/codex-structured-session-cancel.test.ts",
+ "src/main/codex/codex-tool-identity-translation.test.ts",
+ "src/main/codex/codex-trust-config-mutation-queue.test.ts",
+ "src/main/codex/codex-tui-resume-real-binary.integration.test.ts",
+ "src/main/codex/config-toml-trust-hash.test.ts",
+ "src/main/codex/hook-service-user-hook-mirroring.test.ts",
+ "src/main/codex/hook-service-wsl-runtime.test.ts",
+ "src/main/codex/sta-4823-shared-state-survives-a-failed-read.test.ts",
+ "src/main/computer/computer-sidecar-diagnostics.test.ts",
+ "src/main/computer/sidecar-client.test.ts",
+ "src/main/computer/sidecar-provider-reaping.integration.test.ts",
+ "src/main/crash-reporting/durable-crash-breadcrumb.test.ts",
+ "src/main/crash-reporting/main-process-lifecycle-identity.test.ts",
+ "src/main/crash-reporting/pre-gone-host-memory.test.ts",
+ "src/main/crash-reporting/self-initiated-tree-kill-log.test.ts",
+ "src/main/daemon/daemon-folder-access-reset.test.ts",
+ "src/main/daemon/daemon-health-socket-cleanup.test.ts",
+ "src/main/daemon/daemon-init-child-readiness.test.ts",
+ "src/main/daemon/daemon-pty-adapter-cold-restore-seed.test.ts",
+ "src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts",
+ "src/main/daemon/daemon-respawn-throttle.test.ts",
+ "src/main/daemon/daemon-server-attach-only.test.ts",
+ "src/main/daemon/daemon-server.test.ts",
+ "src/main/daemon/daemon-session-owner-resolution.test.ts",
+ "src/main/daemon/daemon-spawner.test.ts",
+ "src/main/daemon/daemon-stream-backpressure.test.ts",
+ "src/main/daemon/headless-emulator-fidelity.fuzz.test.ts",
+ "src/main/daemon/osc7-uri-extraction.test.ts",
+ "src/main/daemon/pty-subprocess-cwd-cancel-identity.test.ts",
+ "src/main/daemon/pty-subprocess-env-inheritance.test.ts",
+ "src/main/daemon/pty-subprocess-foreground-identity.test.ts",
+ "src/main/daemon/pty-subprocess-foreground-scan-cadence.test.ts",
+ "src/main/daemon/pty-subprocess-handle-lifecycle.test.ts",
+ "src/main/daemon/pty-subprocess-io-failure-native.test.ts",
+ "src/main/daemon/reattach-snapshot.test.ts",
+ "src/main/daemon/shell-ready-bash-wrapper.test.ts",
+ "src/main/daemon/terminal-descendant-shutdown.test.ts",
+ "src/main/daemon/terminal-history-log.test.ts",
+ "src/main/daemon/terminal-host.test.ts",
+ "src/main/daemon/terminal-snapshot-color-parity.test.ts",
+ "src/main/emulator/android/android-app-control.test.ts",
+ "src/main/emulator/android/android-capability-operations.test.ts",
+ "src/main/emulator/android/android-input-commands.test.ts",
+ "src/main/emulator/emulator-bridge.test.ts",
+ "src/main/emulator/serve-sim-accessibility-tree.test.ts",
+ "src/main/ephemeral-vm-recipe-runner.test.ts",
+ "src/main/ephemeral-vm-resume-integrity.test.ts",
+ "src/main/external-editor-launch.test.ts",
+ "src/main/ghostty/index.test.ts",
+ "src/main/git/check-ignored-paths.test.ts",
+ "src/main/git/command-runner/gh-spawn-boundary.test.ts",
+ "src/main/git/command-runner/git-admission-output-parity.test.ts",
+ "src/main/git/command-runner/git-admission-span.test.ts",
+ "src/main/git/command-runner/git-command-timeout-behavior.test.ts",
+ "src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts",
+ "src/main/git/commit-object-ref.test.ts",
+ "src/main/git/fork-remote-refspec.test.ts",
+ "src/main/git/repo-detection.test.ts",
+ "src/main/git/source-control/resolve-git-dir.test.ts",
+ "src/main/git/worktree-create-preparation-real-git.test.ts",
+ "src/main/git/worktree-created-disk-witness.test.ts",
+ "src/main/git/worktree-include-file.test.ts",
+ "src/main/git/wsl-linked-worktree-git-routing.test.ts",
+ "src/main/github/client-issue-origin-preference.test.ts",
+ "src/main/github/client-pr-push-target.test.ts",
+ "src/main/github/client-starred.test.ts",
+ "src/main/github/client-tracked-upstream-snapshot.test.ts",
+ "src/main/github/github-api-repository-validation.test.ts",
+ "src/main/github/github-remote-identity-parsing.test.ts",
+ "src/main/github/github-repository-identity.fork-owner-repo.test.ts",
+ "src/main/github/pr-refresh-error-classification.test.ts",
+ "src/main/github/project-view-host-auth.test.ts",
+ "src/main/github/project-view/mutations.test.ts",
+ "src/main/github/project-view/project-view-table.test.ts",
+ "src/main/github/work-item-details-enterprise-host.test.ts",
+ "src/main/github/work-item-details-file-viewed.test.ts",
+ "src/main/gitlab/gitlab-known-host-probe.test.ts",
+ "src/main/gitlab/mr-head-tracking-ref.test.ts",
+ "src/main/gitlab/work-item-details.test.ts",
+ "src/main/grok/grok-hook-remnant-removal.test.ts",
+ "src/main/hang-watchdog/hang-detection-marker.test.ts",
+ "src/main/hooks-effective-hook-resolution.test.ts",
+ "src/main/hooks-issue-command.test.ts",
+ "src/main/hooks-setup-runner-script.test.ts",
+ "src/main/ipc/agent-pane-retirement-ipc.test.ts",
+ "src/main/ipc/browser-client-page-metadata-ipc.test.ts",
+ "src/main/ipc/deferred-emoji-shortcode-dataset.test.ts",
+ "src/main/ipc/filesystem-auth.test.ts",
+ "src/main/ipc/filesystem-git-status-staging.test.ts",
+ "src/main/ipc/filesystem-list-files-name-filter.test.ts",
+ "src/main/ipc/filesystem-search-file-paths.test.ts",
+ "src/main/ipc/filesystem-watcher-wsl.test.ts",
+ "src/main/ipc/github-wsl-runtime-routing.test.ts",
+ "src/main/ipc/gitlab-repo-access.test.ts",
+ "src/main/ipc/jira-cancellable-requests.test.ts",
+ "src/main/ipc/macos-keyboard-layout-change-notifications.test.ts",
+ "src/main/ipc/parcel-watcher-supervisor-capacity.test.ts",
+ "src/main/ipc/preflight-host-cli-status.test.ts",
+ "src/main/ipc/preflight-windows-path-refresh.repro.test.ts",
+ "src/main/ipc/pty-buffer-snapshot-dispatch.test.ts",
+ "src/main/ipc/pty-controller-ownership-routing.test.ts",
+ "src/main/ipc/pty-hidden-delivery-gate.test.ts",
+ "src/main/ipc/pty-management.test.ts",
+ "src/main/ipc/pty-pending-output-cap.test.ts",
+ "src/main/ipc/pty-renderer-lifecycle-delivery-reset.test.ts",
+ "src/main/ipc/pty-serializer-settlement-mapping.test.ts",
+ "src/main/ipc/pty-spawn-codex-home-unavailable.test.ts",
+ "src/main/ipc/pty-spawn-env-terminal-basics.test.ts",
+ "src/main/ipc/pty/ipc/spawn-commit-ssh-lease-cardinality.test.ts",
+ "src/main/ipc/pty/pane/launch-authority.test.ts",
+ "src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts",
+ "src/main/ipc/pty/pty-spawn-shell-override-parity.test.ts",
+ "src/main/ipc/renderer-terminal-serializer-readiness.test.ts",
+ "src/main/ipc/repos-execution-host-catalog.test.ts",
+ "src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts",
+ "src/main/ipc/runtime-environments-capability-cache.test.ts",
+ "src/main/ipc/runtime-upload-file-stream.test.ts",
+ "src/main/ipc/shell.test.ts",
+ "src/main/ipc/skill-install-progress-ipc.test.ts",
+ "src/main/ipc/skills.test.ts",
+ "src/main/ipc/source-control-ai-linked-issue.test.ts",
+ "src/main/ipc/ssh-app-shutdown.test.ts",
+ "src/main/ipc/ssh-pty-output-model-migration.test.ts",
+ "src/main/ipc/terminal-git-credential-guard.test.ts",
+ "src/main/ipc/tui-agent-detection-commands.test.ts",
+ "src/main/ipc/watcher-event-root-path-rewrite.test.ts",
+ "src/main/ipc/workspace-cleanup-snapshot-ipc.test.ts",
+ "src/main/ipc/worktree-create-lineage.test.ts",
+ "src/main/ipc/worktree-path-deduplication.test.ts",
+ "src/main/ipc/worktree-push-target-reconciliation.test.ts",
+ "src/main/ipc/worktrees-detected-scan-cache.test.ts",
+ "src/main/ipc/worktrees-discovery-metadata-backfill.test.ts",
+ "src/main/ipc/worktrees-listing-fallback-rows.test.ts",
+ "src/main/ipc/worktrees-removal-recovery.test.ts",
+ "src/main/ipc/worktrees-remove-host-disambiguation.test.ts",
+ "src/main/ipc/worktrees/listing/detected-provider-listing-overtaken-scan.test.ts",
+ "src/main/ipc/worktrees/listing/detected-scan-failure-authority.test.ts",
+ "src/main/linear/issue-context-inline-media.test.ts",
+ "src/main/linux-package-install-command.test.ts",
+ "src/main/local-worktree-metadata-prune-gate.test.ts",
+ "src/main/local-worktree-removal-recovery-live.test.ts",
+ "src/main/localhost-worktree-label-proxy.test.ts",
+ "src/main/macos-full-disk-access-status.test.ts",
+ "src/main/memory/windows-process-sample-parsing.test.ts",
+ "src/main/minimax/minimax-cookie-store.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-corruption-repair.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-dispatch-observation.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-row-schema-version.test.ts",
+ "src/main/native-chat/agent-session-journal/journal-store-schema.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-delta-coalescer.test.ts",
+ "src/main/native-chat/agent-session-wire/agent-session-history-forward-read-budget.test.ts",
+ "src/main/native-chat/agent-session-wire/provider-frame-activity.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-attach-reconciliation.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-claude-options-round-trip.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-close-retry.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-host.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-continuation.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-restart-status-publication.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-agent-session-turn-completion-feed.test.ts",
+ "src/main/native-chat/agent-session-wire/structured-conversation-command.test.ts",
+ "src/main/native-chat/agent-session-wire/unhandled-provider-frame.test.ts",
+ "src/main/native-chat/session-file-resolver-claude-roots.test.ts",
+ "src/main/native-chat/transcript-interruption-message.test.ts",
+ "src/main/native-chat/wsl-codex-session-path-scan.test.ts",
+ "src/main/observability/instrumentation.test.ts",
+ "src/main/observability/local-file-sink-memory.test.ts",
+ "src/main/opencode-usage/opencode2-session-usage.test.ts",
+ "src/main/opencode/hook-plugin-background-child-completion.test.ts",
+ "src/main/orca-profiles/profile-cloud-session-store.test.ts",
+ "src/main/orcad/electron-sidecar-tab-registry.test.ts",
+ "src/main/orcad/external-chromium-browser-process.integration.test.ts",
+ "src/main/orcad/orcad-bundle-native-load-order.test.ts",
+ "src/main/persistence-async-write-syscalls.test.ts",
+ "src/main/persistence-host-partitioned-ssh-pty-bindings.test.ts",
+ "src/main/persistence-ssh-pending-pty-kill.test.ts",
+ "src/main/persistence-workspace-status-workflow.test.ts",
+ "src/main/persistence-worktree-deletion-fencing.test.ts",
+ "src/main/persistence/applying-settings/settings-update-terminal-contrast.test.ts",
+ "src/main/persistence/applying-settings/terminal-settings-migrations.test.ts",
+ "src/main/persistence/loading-store/secret-sentinel-substitution.test.ts",
+ "src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts",
+ "src/main/persistence/restoring-sessions/pane-alias-normalization-scaling.test.ts",
+ "src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts",
+ "src/main/persistence/scheduling-automations/automation-run-operations.test.ts",
+ "src/main/persistence/tracking-repos/local-worktree-metadata-scan-expectation.test.ts",
+ "src/main/persistence/tracking-repos/worktree-metadata-normalization.test.ts",
+ "src/main/pi/agent-status-extension-nested-run-settlement.test.ts",
+ "src/main/pi/agent-status-extension-omp-lifecycle.test.ts",
+ "src/main/pi/agent-status-owner-recovery.test.ts",
+ "src/main/pi/titlebar-extension-service.test.ts",
+ "src/main/plugins/plugin-bundled-bootstrap-coordinator.test.ts",
+ "src/main/plugins/plugin-host-conformance.test.ts",
+ "src/main/plugins/plugin-list-projection.test.ts",
+ "src/main/plugins/plugin-panel-sessions.test.ts",
+ "src/main/plugins/plugin-service-integrity.test.ts",
+ "src/main/plugins/plugin-uninstall-lifecycle.test.ts",
+ "src/main/plugins/plugin-vm-recipe-registry.test.ts",
+ "src/main/ports/advertised-url-watcher-pid-validation.test.ts",
+ "src/main/ports/advertised-url-watcher.test.ts",
+ "src/main/project-groups/nested-repo-import.test.ts",
+ "src/main/providers/local-pty-child-process-verdict.test.ts",
+ "src/main/providers/local-pty-provider-spawn-session.test.ts",
+ "src/main/providers/local-pty-shell-ready-wrapper-generation.test.ts",
+ "src/main/providers/ssh-pty-provider-reattach-incarnation.test.ts",
+ "src/main/providers/windows-powershell-executable.test.ts",
+ "src/main/pty/codex-home-wsl-env.test.ts",
+ "src/main/quit-teardown-agent-browser-daemons.test.ts",
+ "src/main/quit-teardown-start-gate.test.ts",
+ "src/main/rate-limits/account-runtime-target-sync.test.ts",
+ "src/main/rate-limits/auth-filesystem-operation.test.ts",
+ "src/main/rate-limits/claude-fetcher-managed-account-usage.test.ts",
+ "src/main/rate-limits/gemini-usage-fetcher.test.ts",
+ "src/main/rate-limits/minimax/minimax-fetcher.test.ts",
+ "src/main/rate-limits/opencode-go-status-parsing.test.ts",
+ "src/main/remote-agent-trust-presets.test.ts",
+ "src/main/repo-worktrees.test.ts",
+ "src/main/runtime/agent-session-conversation-name-store.test.ts",
+ "src/main/runtime/agent-session-launch-env-admission.test.ts",
+ "src/main/runtime/agent-session-operation-admission.test.ts",
+ "src/main/runtime/agent-session-provider-handle-transition.test.ts",
+ "src/main/runtime/agent-session-pty-write-gate.test.ts",
+ "src/main/runtime/agent-session-record-store.test.ts",
+ "src/main/runtime/agent-terminal-launch-trust-host.test.ts",
+ "src/main/runtime/browser-host-client-page-adoption-grants.test.ts",
+ "src/main/runtime/browser-host-lease-download-transfer-cleanup.test.ts",
+ "src/main/runtime/claude-agent-teams-pty-exit-leak.test.ts",
+ "src/main/runtime/claude-agent-teams-service.test.ts",
+ "src/main/runtime/exit-provenance-audit.test.ts",
+ "src/main/runtime/expired-ssh-lease-pane-candidacy.test.ts",
+ "src/main/runtime/file-watcher-host.test.ts",
+ "src/main/runtime/headless-terminal-dispose-write-ordering.test.ts",
+ "src/main/runtime/missing-worktree-terminal-reconciliation.test.ts",
+ "src/main/runtime/mobile-notification-dismissal-store.test.ts",
+ "src/main/runtime/mobile-rpc-allowlist.test.ts",
+ "src/main/runtime/muse-readiness-transcript.test.ts",
+ "src/main/runtime/orca-runtime-automations.test.ts",
+ "src/main/runtime/orca-runtime-browser-headless.test.ts",
+ "src/main/runtime/orca-runtime-files-preview-budget.test.ts",
+ "src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts",
+ "src/main/runtime/orca-runtime-files-ssh-rearm.test.ts",
+ "src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts",
+ "src/main/runtime/orca-runtime-terminal-close-continuity.test.ts",
+ "src/main/runtime/orca-runtime.test.ts",
+ "src/main/runtime/orchestration-messages-fake-parity.test.ts",
+ "src/main/runtime/orchestration-structured-chat-lease.test.ts",
+ "src/main/runtime/orchestration/coordinator-dispatch-unobserved-prompt.test.ts",
+ "src/main/runtime/orchestration/db-task-dispatch-races.test.ts",
+ "src/main/runtime/orchestration/db-undelivered-mailboxes.test.ts",
+ "src/main/runtime/orchestration/db/pane-key-match.test.ts",
+ "src/main/runtime/orchestration/dispatch-consumer-generation-migration.test.ts",
+ "src/main/runtime/orchestration/federation-sync.test.ts",
+ "src/main/runtime/orchestration/mailbox-pointer-submit.test.ts",
+ "src/main/runtime/orchestration/orchestration-delivery-consumption.test.ts",
+ "src/main/runtime/orchestration/orchestration-legacy-storage-db.test.ts",
+ "src/main/runtime/orchestration/orchestration-run-list-compatibility.test.ts",
+ "src/main/runtime/orchestration/setup-completion-signal.test.ts",
+ "src/main/runtime/pty-shell-ownership-mirror.test.ts",
+ "src/main/runtime/pty-transcript-prune-wait-cache.test.ts",
+ "src/main/runtime/pty-waiver-source-invariant.test.ts",
+ "src/main/runtime/push/desktop-push-service.test.ts",
+ "src/main/runtime/push/push-host-proof.test.ts",
+ "src/main/runtime/quarter-circle-title-send-authorization.test.ts",
+ "src/main/runtime/queued-terminal-graph-exit.test.ts",
+ "src/main/runtime/relay/relay-region-preference.test.ts",
+ "src/main/runtime/remote-agent-session-host-authority.integration.test.ts",
+ "src/main/runtime/remote-runtime-request-connection.integration.test.ts",
+ "src/main/runtime/renderer-browser-session-reconciliation.test.ts",
+ "src/main/runtime/repo-icon-fork-backfill.test.ts",
+ "src/main/runtime/repo-worktree-resolution-scan.test.ts",
+ "src/main/runtime/retained-tail-redraw-window.equivalence.test.ts",
+ "src/main/runtime/rpc/e2ee-crypto.test.ts",
+ "src/main/runtime/rpc/methods/agent-launch-structured-prompt.test.ts",
+ "src/main/runtime/rpc/methods/browser-client-host-attach-adoption.test.ts",
+ "src/main/runtime/rpc/methods/browser-client-host-reconciliation.test.ts",
+ "src/main/runtime/rpc/methods/diagnostics.test.ts",
+ "src/main/runtime/rpc/methods/files-doc-preview.test.ts",
+ "src/main/runtime/rpc/methods/github.test.ts",
+ "src/main/runtime/rpc/methods/gitlab.test.ts",
+ "src/main/runtime/rpc/methods/mobile-web-bundle-read-concurrency.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federated-transport-safety.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/federation/federation.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/gates/gate-run-authorization.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/ask.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/messaging/check.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/runs/run-receipt.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.test.ts",
+ "src/main/runtime/rpc/methods/orchestration/worker/worker-start-terminal-target.test.ts",
+ "src/main/runtime/rpc/methods/runtime-client-capabilities.test.ts",
+ "src/main/runtime/rpc/methods/session-tabs-inventory-census-race.test.ts",
+ "src/main/runtime/rpc/methods/speech.test.ts",
+ "src/main/runtime/rpc/methods/ssh.test.ts",
+ "src/main/runtime/rpc/methods/structured-agent-session-policy.test.ts",
+ "src/main/runtime/rpc/methods/structured-worker-read-cursor.test.ts",
+ "src/main/runtime/rpc/methods/terminal-navigation.test.ts",
+ "src/main/runtime/rpc/orchestration-legacy-takeover-dispatcher.test.ts",
+ "src/main/runtime/rpc/orchestration-mutation-request-show-legacy.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-input-write-rejection.test.ts",
+ "src/main/runtime/rpc/terminal-multiplex-resync-replay-trim.test.ts",
+ "src/main/runtime/rpc/terminal-opencode-send-guard.integration.test.ts",
+ "src/main/runtime/rpc/terminal-send-launch-draft-resolution.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-buffer.test.ts",
+ "src/main/runtime/rpc/terminal-subscribe-lease-only.test.ts",
+ "src/main/runtime/rpc/unpaired-device-auth-throttle.test.ts",
+ "src/main/runtime/runtime-file-target-execution-host.test.ts",
+ "src/main/runtime/runtime-folder-worktree-create.test.ts",
+ "src/main/runtime/runtime-hook-agent-row-selection.test.ts",
+ "src/main/runtime/runtime-local-worktree-materialization.test.ts",
+ "src/main/runtime/runtime-metadata.test.ts",
+ "src/main/runtime/runtime-owned-terminal-publication-lineage.test.ts",
+ "src/main/runtime/runtime-rpc-long-poll-transport.test.ts",
+ "src/main/runtime/runtime-rpc-mobile-method-allowlist.test.ts",
+ "src/main/runtime/runtime-session-search-settings.test.ts",
+ "src/main/runtime/runtime-socket-sweep.test.ts",
+ "src/main/runtime/session-tabs-inventory-publication.test.ts",
+ "src/main/runtime/structured-tui-exit-proof.test.ts",
+ "src/main/runtime/structured-worker-takeover-pane-key.test.ts",
+ "src/main/runtime/terminal-ansi-pending-retention.test.ts",
+ "src/main/runtime/terminal-focus-navigation-coalescer.test.ts",
+ "src/main/runtime/terminal-orphan-topology.test.ts",
+ "src/main/runtime/terminal-tail-row-retention.test.ts",
+ "src/main/runtime/terminal-wait-name-only-idle.test.ts",
+ "src/main/runtime/windows-firewall-remote-scope.test.ts",
+ "src/main/runtime/workspace-session-membership-scaling.test.ts",
+ "src/main/runtime/worktree-launch-host-repo.test.ts",
+ "src/main/server/serve-stdout-boundary.test.ts",
+ "src/main/skills/agent-skill-selection.test.ts",
+ "src/main/skills/discovery-filter-sharing.test.ts",
+ "src/main/skills/skill-client-mediated-transfer-cancellation.test.ts",
+ "src/main/skills/skill-client-mediated-transfer.test.ts",
+ "src/main/skills/skill-cloud-service.test.ts",
+ "src/main/skills/skill-discovery-order.test.ts",
+ "src/main/skills/skill-discovery-wsl-script-roundtrip.test.ts",
+ "src/main/skills/skill-discovery-wsl.test.ts",
+ "src/main/skills/skill-install-destinations.test.ts",
+ "src/main/skills/skill-install-lock-release.test.ts",
+ "src/main/skills/skill-package-deterministic-gzip.test.ts",
+ "src/main/skills/skill-process-contention-child.test.ts",
+ "src/main/skills/skill-provider-runtime-roots.test.ts",
+ "src/main/skills/skill-transaction-startup-recovery.test.ts",
+ "src/main/skills/skill-update-convergence.test.ts",
+ "src/main/skills/skill-wsl-delete.integration.test.ts",
+ "src/main/source-control/hosted-review-dirty-preflight-wsl-paths.test.ts",
+ "src/main/speech/model-manager-download-error.test.ts",
+ "src/main/speech/model-manager-stream-cleanup.test.ts",
+ "src/main/speech/model-manager.test.ts",
+ "src/main/ssh/orcad-remote-deploy.test.ts",
+ "src/main/ssh/orcad-remote-shell-commands.integration.test.ts",
+ "src/main/ssh/ssh-connection-host-key-store-wiring.test.ts",
+ "src/main/ssh/ssh-port-forward.test.ts",
+ "src/main/ssh/ssh-proxy-command.test.ts",
+ "src/main/ssh/ssh-relay-build-toolchain.test.ts",
+ "src/main/ssh/ssh-relay-install-lock.test.ts",
+ "src/main/ssh/ssh-relay-live-connect.test.ts",
+ "src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts",
+ "src/main/ssh/ssh-relay-reset.test.ts",
+ "src/main/ssh/ssh-relay-session-managed-hooks.test.ts",
+ "src/main/ssh/ssh-relay-session-relay-loss.test.ts",
+ "src/main/ssh/ssh-remote-cli-dispatch-refusal-passthrough.test.ts",
+ "src/main/ssh/ssh-remote-cli-format.test.ts",
+ "src/main/ssh/ssh-remote-cli-host-passthrough.test.ts",
+ "src/main/ssh/ssh-remote-cli-launcher.test.ts",
+ "src/main/ssh/ssh-remote-orchestration-send.test.ts",
+ "src/main/ssh/ssh-remote-powershell.test.ts",
+ "src/main/ssh/ssh-target-id-migration.test.ts",
+ "src/main/star-nag/service-outcome-telemetry.test.ts",
+ "src/main/startup/gpu-lifecycle-install-dir-acl-guard.test.ts",
+ "src/main/startup/serve-desktop-activation-wiring.test.ts",
+ "src/main/startup/window-all-closed-quit-policy.test.ts",
+ "src/main/startup/windows-install-dir-acl-repair.win32.test.ts",
+ "src/main/startup/windows-install-dir-package-acl-repair.test.ts",
+ "src/main/system-resume-broadcast.test.ts",
+ "src/main/terminal-history-gc.test.ts",
+ "src/main/terminal-history.test.ts",
+ "src/main/text-generation/commit-message-text-generation-failure-sanitization.test.ts",
+ "src/main/text-generation/commit-message-text-generation-regression.test.ts",
+ "src/main/updater-changelog.test.ts",
+ "src/main/updater-prerelease-feed.test.ts",
+ "src/main/updater-test-harness.leaked-timers.test.ts",
+ "src/main/usage/usage-scan-worker-client.test.ts",
+ "src/main/window/clipboard-image-temp-file.test.ts",
+ "src/main/window/createMainWindow-zoom-and-tab-switch-shortcuts.test.ts",
+ "src/main/window/renderer-recovery-prompt.test.ts",
+ "src/main/window/updater-package-recovery-ipc.test.ts",
+ "src/main/windows-pty-root-identity.test.ts",
+ "src/main/windows/windows-host-job.win32.test.ts",
+ "src/main/windows/windows-process-table-cim-scan.test.ts",
+ "src/main/windows/windows-process-tree-command-line-patch.test.ts",
+ "src/main/worktree-create-candidates.test.ts",
+ "src/main/worktree-identity-persistence.test.ts",
+ "src/main/worktree-removal-home-guard.test.ts",
+ "src/main/worktree-removal-safety.test.ts",
+ "src/main/worktree-removal-session-partition-fencing.test.ts",
+ "src/main/wsl-running-distros.test.ts",
+ "src/main/wsl-unc-delete.test.ts",
+ "src/main/wsl/wsl-guest-environment.test.ts",
+ "src/relay/agent-hook-envelope-publication.test.ts",
+ "src/relay/ai-vault-service-restart-policy.test.ts",
+ "src/relay/ai-vault-service-spawn.test.ts",
+ "src/relay/dispatcher-rpc-cancel-id-coercion.test.ts",
+ "src/relay/fs-handler-doc-preview.test.ts",
+ "src/relay/fs-handler-git-search.test.ts",
+ "src/relay/fs-handler-list-files-cancel.test.ts",
+ "src/relay/fs-handler-ripgrep-fallback.test.ts",
+ "src/relay/git-handler-pull-reconciliation.test.ts",
+ "src/relay/git-handler-submodule-cache-invalidation.test.ts",
+ "src/relay/git-handler-utils.test.ts",
+ "src/relay/protocol-backpressure.test.ts",
+ "src/relay/pty-handler-ownership-attestation.test.ts",
+ "src/relay/pty-handler-resize-stale-pty.test.ts",
+ "src/relay/pty-handler-shutdown-signals.test.ts",
+ "src/relay/pty-replay-buffer-equivalence.test.ts",
+ "src/relay/pty-source-sent-boundaries.test.ts",
+ "src/relay/relay-oversized-notification-survival.test.ts",
+ "src/relay/relay-pty-source-restore-retry.test.ts",
+ "src/relay/relay-watcher-frame-chunking.test.ts",
+ "src/relay/session-search-transport.test.ts",
+ "src/relay/terminal-history-wsl.test.ts",
+ "src/relay/workspace-snapshot-publication.test.ts",
+ "src/relay/wsl-install-plugins-handler.test.ts",
+ "src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts",
+ "src/renderer/src/components/StateIndicatorTooltip.test.tsx",
+ "src/renderer/src/components/activity/activity-portal-readiness-decay.react185.test.tsx",
+ "src/renderer/src/components/activity/activity-portal-readiness-oscillation.test.ts",
+ "src/renderer/src/components/activity/activity-scope-filter.test.ts",
+ "src/renderer/src/components/activity/activity-thread-child-agent.test.ts",
+ "src/renderer/src/components/artifacts/ArtifactPreview.test.tsx",
+ "src/renderer/src/components/artifacts/ArtifactsPage.test.tsx",
+ "src/renderer/src/components/automations/AutomationEditorPromptEditor.test.tsx",
+ "src/renderer/src/components/automations/AutomationRunsDashboardSurface.test.tsx",
+ "src/renderer/src/components/automations/AutomationRunsTable.test.tsx",
+ "src/renderer/src/components/automations/AutomationSchedulePicker.test.ts",
+ "src/renderer/src/components/automations/AutomationsDetailPane.run-count.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.external-scope.test.tsx",
+ "src/renderer/src/components/automations/AutomationsPage.test.tsx",
+ "src/renderer/src/components/automations/automation-editor-prompt-options.test.ts",
+ "src/renderer/src/components/automations/automation-external-target-match.test.ts",
+ "src/renderer/src/components/automations/automation-host-cache-controller.test.ts",
+ "src/renderer/src/components/automations/automation-host-catalog-generation.test.ts",
+ "src/renderer/src/components/automations/automation-host-scale-gates.test.ts",
+ "src/renderer/src/components/automations/automation-list-last-run.test.ts",
+ "src/renderer/src/components/automations/external-automation-list-entries.test.ts",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.chrome-parity.test.tsx",
+ "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/BrowserAnnotationSendMenuContent.test.tsx",
+ "src/renderer/src/components/browser-pane/annotate/browser-annotation-output.test.ts",
+ "src/renderer/src/components/browser-pane/annotate/useGrabMode.test.ts",
+ "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPaneOverlayLayer.test.tsx",
+ "src/renderer/src/components/browser-pane/browser-client-page-retained-drag-passthrough.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-guest-page-id-identity.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/browser-page-favicon-retention.test.ts",
+ "src/renderer/src/components/browser-pane/host-guest/use-browser-page-keyboard-shortcuts.split.test.tsx",
+ "src/renderer/src/components/browser-pane/navigate/browser-download-progress.test.ts",
+ "src/renderer/src/components/browser-pane/navigate/browser-notices.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-keyboard.test.ts",
+ "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-input-model.test.ts",
+ "src/renderer/src/components/cmd-j/palette-focus-restore-target.test.ts",
+ "src/renderer/src/components/cmd-j/palette-host-badge.test.ts",
+ "src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts",
+ "src/renderer/src/components/cmd-j/worktree-palette-cache-inputs.test.ts",
+ "src/renderer/src/components/contextual-tours/workspace-creation-tour-handoff.test.ts",
+ "src/renderer/src/components/crash-report/CrashReportDialogSurface.overflow.test.tsx",
+ "src/renderer/src/components/dashboard-popout/DashboardHostBadge.test.tsx",
+ "src/renderer/src/components/dashboard-popout/preview-grid-claim.test.ts",
+ "src/renderer/src/components/dashboard/AgentDashboardDrawer.test.tsx",
+ "src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts",
+ "src/renderer/src/components/dictation/microphone-devices.test.ts",
+ "src/renderer/src/components/diff-comments/useDiffCommentDecorator.model-lifecycle.test.tsx",
+ "src/renderer/src/components/editor/CheckRunDetailsPanel.copy.test.tsx",
+ "src/renderer/src/components/editor/EditorFileLoadErrorView.test.tsx",
+ "src/renderer/src/components/editor/ImageViewer.test.tsx",
+ "src/renderer/src/components/editor/MonacoEditor.font-family.test.tsx",
+ "src/renderer/src/components/editor/closed-editor-model-shell.test.tsx",
+ "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-initial-section-load.test.ts",
+ "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-section-load-state.test.ts",
+ "src/renderer/src/components/editor/combined-diff/review-controls/combined-diff-commit-message.test.ts",
+ "src/renderer/src/components/editor/diff-editor-line-number-options.test.ts",
+ "src/renderer/src/components/editor/diff-viewer-large-diff-save-action.test.ts",
+ "src/renderer/src/components/editor/editor-autosave-controller.test.ts",
+ "src/renderer/src/components/editor/editor-path-display.test.ts",
+ "src/renderer/src/components/editor/editor-path-move-inflight.test.ts",
+ "src/renderer/src/components/editor/markdown-document-list-request.test.ts",
+ "src/renderer/src/components/editor/monaco-auto-height.test.ts",
+ "src/renderer/src/components/editor/monaco-find-widget.test.ts",
+ "src/renderer/src/components/editor/monaco-view-state-persistence.test.ts",
+ "src/renderer/src/components/editor/raw-markdown-comment-scan.test.ts",
+ "src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-code-block-languages.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-details-keyboard.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-editor-click-routing.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-list-tokenizers.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-review-rail-blocks.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-serialization-commit.test.ts",
+ "src/renderer/src/components/editor/rich-markdown-slash-command-filter.test.ts",
+ "src/renderer/src/components/editor/use-rich-markdown-table-context-menu.test.tsx",
+ "src/renderer/src/components/editor/useLinkBubble.test.tsx",
+ "src/renderer/src/components/editor/useLocalImageSrc.test.ts",
+ "src/renderer/src/components/editor/useRichMarkdownEditorInstance.test.tsx",
+ "src/renderer/src/components/editor/useRichMarkdownSearch.test.tsx",
+ "src/renderer/src/components/emulator-pane/emulator-device-frame-layout.test.ts",
+ "src/renderer/src/components/emulator-pane/emulator-device-frame-visibility.test.tsx",
+ "src/renderer/src/components/emulator-pane/mobile-emulator-agent-setup-cli-state.test.ts",
+ "src/renderer/src/components/feature-wall/ConnectIntegrationsList.test.tsx",
+ "src/renderer/src/components/floating-terminal/floating-terminal-panel-view-state.test.ts",
+ "src/renderer/src/components/github-pr-merge-state.test.ts",
+ "src/renderer/src/components/github-project/project-view-wrapper-source-context-boundary.test.ts",
+ "src/renderer/src/components/github/github-work-item-assignee-filter.test.ts",
+ "src/renderer/src/components/linear-api-key-dialog-state.test.ts",
+ "src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx",
+ "src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts",
+ "src/renderer/src/components/linear-issue-text-draft-state.test.ts",
+ "src/renderer/src/components/mobile/paired-mobile-devices.test.ts",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.growth-windowing.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.provider-frame.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.task-list-frames.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.tool-stream-cost.test.tsx",
+ "src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx",
+ "src/renderer/src/components/native-chat/native-chat-active-rail-item.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-http-link-source-owner.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-image-runtime-context.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-launch-draft-send.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-tab-agent-entry.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-tool-fold.test.ts",
+ "src/renderer/src/components/native-chat/native-chat-typing-indicator.test.ts",
+ "src/renderer/src/components/native-chat/omp-model-switch-capability.test.ts",
+ "src/renderer/src/components/native-chat/structured-agent-session-read-transport.test.ts",
+ "src/renderer/src/components/native-chat/use-native-chat-link-actions.test.tsx",
+ "src/renderer/src/components/native-chat/use-native-chat-transcript-scroll.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-hold.test.tsx",
+ "src/renderer/src/components/native-chat/use-structured-agent-session-outbox.test.tsx",
+ "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-repo-slug-routing.test.ts",
+ "src/renderer/src/components/new-workspace/base-ref-picker-visibility.test.ts",
+ "src/renderer/src/components/new-workspace/project-combobox-matching.test.ts",
+ "src/renderer/src/components/new-workspace/smart-workspace-source-popover-focus.test.ts",
+ "src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts",
+ "src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.test.ts",
+ "src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx",
+ "src/renderer/src/components/quick-open-file-list.test.ts",
+ "src/renderer/src/components/right-sidebar/AiVaultSearchEvidence.test.tsx",
+ "src/renderer/src/components/right-sidebar/PortsPanel.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.host-context-boundary.test.ts",
+ "src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx",
+ "src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx",
+ "src/renderer/src/components/right-sidebar/ai-vault-original-pane-index.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-deletability.test.ts",
+ "src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx",
+ "src/renderer/src/components/right-sidebar/checks-panel-async-result-key.test.ts",
+ "src/renderer/src/components/right-sidebar/checks-panel/gitlab-review-client.test.ts",
+ "src/renderer/src/components/right-sidebar/create-review-draft-title.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-inline-rename-flow.test.tsx",
+ "src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts",
+ "src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.test.ts",
+ "src/renderer/src/components/right-sidebar/file-search-include-pattern.test.ts",
+ "src/renderer/src/components/right-sidebar/git-status-push-signal-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/git-status-refresh.test.ts",
+ "src/renderer/src/components/right-sidebar/plugin-panel-activity-items.test.ts",
+ "src/renderer/src/components/right-sidebar/plugin-panel-watchdog.test.ts",
+ "src/renderer/src/components/right-sidebar/pr-comment-ack-summary.test.ts",
+ "src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-created-review-link.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-dropdown-items.test.ts",
+ "src/renderer/src/components/right-sidebar/source-control-entry-context-menu.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/listing/section-action-buttons.test.tsx",
+ "src/renderer/src/components/right-sidebar/source-control/review/use-hosted-review-state.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-plugin-panel-theme-revision.test.tsx",
+ "src/renderer/src/components/right-sidebar/use-source-control-git-history.test.tsx",
+ "src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.test.ts",
+ "src/renderer/src/components/right-sidebar/useFileExplorerDragDrop.test.ts",
+ "src/renderer/src/components/settings/AdvancedNetworkSettingsSection.interaction.test.tsx",
+ "src/renderer/src/components/settings/ArtifactsSettingsPane.test.tsx",
+ "src/renderer/src/components/settings/EphemeralVmRuntimesSection.test.tsx",
+ "src/renderer/src/components/settings/ExperimentalPane.test.tsx",
+ "src/renderer/src/components/settings/GeneralUpdateSettingsSection.test.tsx",
+ "src/renderer/src/components/settings/GrokAccountsSection.test.tsx",
+ "src/renderer/src/components/settings/LinearAgentSkillPane.test.tsx",
+ "src/renderer/src/components/settings/MobilePairingSetupSection.test.tsx",
+ "src/renderer/src/components/settings/OrchestrationSkillAgentCoverage.test.tsx",
+ "src/renderer/src/components/settings/PluginSettingsRow.test.tsx",
+ "src/renderer/src/components/settings/QuickCommandsList.test.tsx",
+ "src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx",
+ "src/renderer/src/components/settings/RuntimePairingGeneratorForm.test.tsx",
+ "src/renderer/src/components/settings/SettingsConstants.test.ts",
+ "src/renderer/src/components/settings/ShortcutFilterRail.test.ts",
+ "src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx",
+ "src/renderer/src/components/settings/VoiceMicrophoneSetting.test.tsx",
+ "src/renderer/src/components/settings/VoicePane.test.tsx",
+ "src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx",
+ "src/renderer/src/components/settings/agent-skill-installed-command-callers.test.ts",
+ "src/renderer/src/components/settings/appearance-interface-summary.test.ts",
+ "src/renderer/src/components/settings/appearance-status-bar-search.test.ts",
+ "src/renderer/src/components/settings/appearance-usage-percentage-search.test.ts",
+ "src/renderer/src/components/settings/browser-session-host-selection.test.ts",
+ "src/renderer/src/components/settings/native-chat-experimental-search-entry.test.ts",
+ "src/renderer/src/components/settings/repository-host-setup-options.test.ts",
+ "src/renderer/src/components/settings/settings-form-option-filter.test.ts",
+ "src/renderer/src/components/settings/shortcut-definition-catalog.test.ts",
+ "src/renderer/src/components/settings/shortcut-row-visibility.test.ts",
+ "src/renderer/src/components/setup-guide/use-setup-guide-telemetry.test.ts",
+ "src/renderer/src/components/sidebar/LocalGitToolchainScanBanner.test.tsx",
+ "src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx",
+ "src/renderer/src/components/sidebar/SetupScriptPromptCardShell.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.test.tsx",
+ "src/renderer/src/components/sidebar/SidebarToolbar.test.tsx",
+ "src/renderer/src/components/sidebar/WorkspaceKanbanCard.host-identity.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeCard.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx",
+ "src/renderer/src/components/sidebar/WorktreeList.folder-workspace-rows.test.ts",
+ "src/renderer/src/components/sidebar/WorktreeVisibilityHelpPopover.test.tsx",
+ "src/renderer/src/components/sidebar/delete-worktree-failure-toast.test.tsx",
+ "src/renderer/src/components/sidebar/host-section-folder-workspace-counts.test.ts",
+ "src/renderer/src/components/sidebar/natural-worktree-ids.test.ts",
+ "src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts",
+ "src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts",
+ "src/renderer/src/components/sidebar/sidebar-host-options.test.ts",
+ "src/renderer/src/components/sidebar/smart-sort.test.ts",
+ "src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.test.ts",
+ "src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.test.ts",
+ "src/renderer/src/components/sidebar/use-workspace-kanban-drawer-lingering.test.tsx",
+ "src/renderer/src/components/sidebar/use-worktree-activity-statuses.test.ts",
+ "src/renderer/src/components/sidebar/workspace-kanban-virtual-lane-layout.test.ts",
+ "src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts",
+ "src/renderer/src/components/sidebar/worktree-card-jira-issue-display.test.ts",
+ "src/renderer/src/components/sidebar/worktree-context-menu-delete-intent.test.ts",
+ "src/renderer/src/components/sidebar/worktree-lineage-expansion.performance.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list-groups-notice-host-labels.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/grouping/build-rows.folder-workspace-lanes.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/grouping/imported-rows.test.ts",
+ "src/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-requests.test.tsx",
+ "src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.ts",
+ "src/renderer/src/components/sidebar/worktree-manual-order.test.ts",
+ "src/renderer/src/components/sidebar/worktree-unnest.test.ts",
+ "src/renderer/src/components/skills/SkillFreshnessNudge.test.tsx",
+ "src/renderer/src/components/skills/SkillInstallDialog.test.tsx",
+ "src/renderer/src/components/skills/SkillSharedLinkRow.test.tsx",
+ "src/renderer/src/components/skills/skills-filter.test.ts",
+ "src/renderer/src/components/stats/CodexUsagePane.test.tsx",
+ "src/renderer/src/components/status-bar/SshStatusSegment.test.ts",
+ "src/renderer/src/components/status-bar/resource-usage-space-scan-ready.test.ts",
+ "src/renderer/src/components/status-bar/status-bar-agent-gating.test.ts",
+ "src/renderer/src/components/status-bar/usage-percentage-label.test.ts",
+ "src/renderer/src/components/status-bar/workspace-space-delete-host-routing.test.ts",
+ "src/renderer/src/components/tab-bar/TabBar.windows-shell-launch.test.ts",
+ "src/renderer/src/components/tab-bar/TabBarCreateEntryRow.test.tsx",
+ "src/renderer/src/components/tab-bar/TabStripScrollIndicator.test.tsx",
+ "src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts",
+ "src/renderer/src/components/tab-bar/tab-strip-pointer-activation.test.tsx",
+ "src/renderer/src/components/tab-bar/tab-strip-scroll-metrics.test.ts",
+ "src/renderer/src/components/tab-bar/windows-shell-launch.test.ts",
+ "src/renderer/src/components/tab-group/tab-drag-pointer-sensor.test.ts",
+ "src/renderer/src/components/tab-group/useTabDragSplit.test.ts",
+ "src/renderer/src/components/task-drawer-source-boundary.test.ts",
+ "src/renderer/src/components/task-page-github-list-scroll-restore.test.ts",
+ "src/renderer/src/components/task-page-jira-cache-selectors.test.ts",
+ "src/renderer/src/components/task-page-jira-create-fields.test.ts",
+ "src/renderer/src/components/task-page-repo-source-context.test.ts",
+ "src/renderer/src/components/task-page-task-source-host-availability.test.ts",
+ "src/renderer/src/components/task-page-work-item-pagination.test.ts",
+ "src/renderer/src/components/terminal-pane/SessionRestoredBanner.test.tsx",
+ "src/renderer/src/components/terminal-pane/TerminalContextMenu.test.tsx",
+ "src/renderer/src/components/terminal-pane/TerminalRemoteRuntimeReconnectBanner.test.tsx",
+ "src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts",
+ "src/renderer/src/components/terminal-pane/agent-process-inspection-queue-rejection-containment.test.ts",
+ "src/renderer/src/components/terminal-pane/edge-wrapped-terminal-http-links.test.ts",
+ "src/renderer/src/components/terminal-pane/keyboard-handlers-ime-enter-keyup.test.tsx",
+ "src/renderer/src/components/terminal-pane/keyboard-handlers-ime.test.tsx",
+ "src/renderer/src/components/terminal-pane/mouse-hide-while-typing.test.ts",
+ "src/renderer/src/components/terminal-pane/osc52-clipboard-toast.test.ts",
+ "src/renderer/src/components/terminal-pane/override-affected-panes.test.ts",
+ "src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts",
+ "src/renderer/src/components/terminal-pane/parse-osc7.test.ts",
+ "src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-daemon-snapshot-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-reattach-binding.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-dispatcher-delivery-resync.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-dispatcher-pi-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-preconnect-input-buffer.test.ts",
+ "src/renderer/src/components/terminal-pane/pty-transport-pi-coalesce.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-batching.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-latched-pane-retention.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-recovery-state.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-pending-host-surface-attach.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-snapshot-replay.test.ts",
+ "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-web-mirror-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/renderer-owned-agent-status-registry.test.ts",
+ "src/renderer/src/components/terminal-pane/ssh-reattach-model-restore.test.ts",
+ "src/renderer/src/components/terminal-pane/stale-document-visibility.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cjk-cursor-cell-placement.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-cursor-inactive-style.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-drop-path-writer.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-file-link-actions.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-freeze-report.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-consumed-key-commit.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-midline-preedit-tail.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-ime-xterm-windows-resumed-preedit-trace.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-inline-image-da1.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-link-pointer-gesture.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-non-latin-control-chord.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pane-close-identity.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-parked-pane-candidates.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-coordinator.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-paste-payload-metadata.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-path-existence-batch.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-pty-ack-gate.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts",
+ "src/renderer/src/components/terminal-pane/terminal-runtime-host-link-routing.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-paste-events.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts",
+ "src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts",
+ "src/renderer/src/components/terminal-pane/xterm-bypass-policy.test.ts",
+ "src/renderer/src/components/terminal/terminal-tab-actions-kill-all.test.ts",
+ "src/renderer/src/components/terminal/unsaved-close-queue.test.ts",
+ "src/renderer/src/components/ui/popover-wheel-scroll.test.tsx",
+ "src/renderer/src/components/ui/switch.test.tsx",
+ "src/renderer/src/components/use-task-creation-draft-retention.test.ts",
+ "src/renderer/src/components/use-terminal-create-actions.test.tsx",
+ "src/renderer/src/components/use-terminal-editor-close-foundation.window-close.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-git-evidence.test.tsx",
+ "src/renderer/src/components/workspace-cleanup/workspace-cleanup-sort-header.test.tsx",
+ "src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx",
+ "src/renderer/src/components/worktree-jump-palette-primitives.test.tsx",
+ "src/renderer/src/components/worktree-jump-palette-status-inputs.test.ts",
+ "src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts",
+ "src/renderer/src/hooks/automation-dispatch-unverifiable-loss.test.ts",
+ "src/renderer/src/hooks/composer-drop-failure-toast.test.ts",
+ "src/renderer/src/hooks/composer-state/full-creation-structured-launch.test.ts",
+ "src/renderer/src/hooks/installed-agent-skill-discovery-cache.test.ts",
+ "src/renderer/src/hooks/installed-agent-skill-discovery.test.ts",
+ "src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts",
+ "src/renderer/src/hooks/ipc-events/direct-ssh-hydration-fanout.test.ts",
+ "src/renderer/src/hooks/ipc-events/orca-profile-auth-ipc-bridge.test.ts",
+ "src/renderer/src/hooks/macos-tcc-prompt-notice-subscription.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-apply-deferred-session-write.test.ts",
+ "src/renderer/src/hooks/remote-workspace-snapshot-arrival-coordinator.test.ts",
+ "src/renderer/src/hooks/runtime-project-refresh-scheduler.test.ts",
+ "src/renderer/src/hooks/structured-session-completion-focus.test.ts",
+ "src/renderer/src/hooks/use-window-stream-visibility.test.ts",
+ "src/renderer/src/hooks/useAgentDetectionTarget.test.ts",
+ "src/renderer/src/hooks/useAppMenuSelectionActions.test.tsx",
+ "src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts",
+ "src/renderer/src/hooks/useGitHubSlugMetadata.test.tsx",
+ "src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts",
+ "src/renderer/src/hooks/useIpcEvents-runtime-environment-selectors.test.ts",
+ "src/renderer/src/hooks/usePrimarySelectionPaste.terminal-native-paste.test.tsx",
+ "src/renderer/src/hooks/useVirtualizedScrollAnchor.listener-deps.test.ts",
+ "src/renderer/src/hooks/worktree-change-refresh-queue.test.ts",
+ "src/renderer/src/i18n/no-top-level-translate.test.ts",
+ "src/renderer/src/i18n/relative-time-format.test.ts",
+ "src/renderer/src/lib/active-agent-note-send-focused-session.test.ts",
+ "src/renderer/src/lib/activity-thread-display.test.ts",
+ "src/renderer/src/lib/agent-hibernation-coordinator.test.ts",
+ "src/renderer/src/lib/agent-hibernation-runtime-liveness-race.test.ts",
+ "src/renderer/src/lib/agent-launch-caller-profile-census.test.ts",
+ "src/renderer/src/lib/agent-launch-route-connection-fallback.test.ts",
+ "src/renderer/src/lib/agent-ready-wait.test.ts",
+ "src/renderer/src/lib/agent-row-tool-preview.test.ts",
+ "src/renderer/src/lib/ai-vault-resume-command.test.ts",
+ "src/renderer/src/lib/app-font-family.test.ts",
+ "src/renderer/src/lib/browser-page-conversion-history.test.ts",
+ "src/renderer/src/lib/desktop-window-chrome.test.ts",
+ "src/renderer/src/lib/ephemeral-vm-failed-create-cleanup.test.ts",
+ "src/renderer/src/lib/ephemeral-vm-runtime-cleanup.test.ts",
+ "src/renderer/src/lib/file-search-result-owner.test.ts",
+ "src/renderer/src/lib/flatten-retained-slice.test.ts",
+ "src/renderer/src/lib/github-pr-start-point.test.ts",
+ "src/renderer/src/lib/github-work-item-source-lookup.test.ts",
+ "src/renderer/src/lib/host-mirror-handle-gap-teardown.test.ts",
+ "src/renderer/src/lib/http-link-modifier-routing.test.ts",
+ "src/renderer/src/lib/launch-agent-in-new-tab-web-runtime.test.ts",
+ "src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts",
+ "src/renderer/src/lib/launch-work-item-direct-agent.test.ts",
+ "src/renderer/src/lib/linear-issue-url-lookup.test.ts",
+ "src/renderer/src/lib/markdown-review-notes.test.ts",
+ "src/renderer/src/lib/monaco-languages/register-vue.test.ts",
+ "src/renderer/src/lib/monospace-font-family.test.ts",
+ "src/renderer/src/lib/native-chat-initial-view-mode.test.ts",
+ "src/renderer/src/lib/new-workspace-project-options.test.ts",
+ "src/renderer/src/lib/orca-hook-trust.test.ts",
+ "src/renderer/src/lib/pane-manager/browser-remote-viewer-state.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-metric-options-deferral.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-reveal-fit.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-gpu-acceleration.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-disposed-writes.test.ts",
+ "src/renderer/src/lib/pane-manager/pane-tree-reparent-frame.test.ts",
+ "src/renderer/src/lib/pane-manager/terminal-arabic-shaping-joiner.test.ts",
+ "src/renderer/src/lib/path.test.ts",
+ "src/renderer/src/lib/pi-live-session-no-duplicate-tab.test.ts",
+ "src/renderer/src/lib/plugin-command-execution.test.ts",
+ "src/renderer/src/lib/plugin-command-keybindings.test.ts",
+ "src/renderer/src/lib/project-host-clone-url.test.ts",
+ "src/renderer/src/lib/react-commit-cascade-observer.test.ts",
+ "src/renderer/src/lib/react-commit-cascade-store-write-samples.test.ts",
+ "src/renderer/src/lib/react-grab-dev-gate.test.ts",
+ "src/renderer/src/lib/resume-sleeping-agent-session-execution-host-scope.test.ts",
+ "src/renderer/src/lib/scroll-cache.test.ts",
+ "src/renderer/src/lib/session-write-subscriber.test.ts",
+ "src/renderer/src/lib/sha256.test.ts",
+ "src/renderer/src/lib/ssh-background-startup-delivery.test.ts",
+ "src/renderer/src/lib/structured-agent-session-launch.test.ts",
+ "src/renderer/src/lib/structured-agent-startup-label-census.test.ts",
+ "src/renderer/src/lib/tab-agent.test.ts",
+ "src/renderer/src/lib/terminal-contrast-correction.test.ts",
+ "src/renderer/src/lib/terminal-worktree-route.test.ts",
+ "src/renderer/src/lib/typing-latency/input-events.test.ts",
+ "src/renderer/src/lib/typing-latency/input-source.test.ts",
+ "src/renderer/src/lib/use-tab-agent-retained-identity.test.ts",
+ "src/renderer/src/lib/window-visibility-interval.test.ts",
+ "src/renderer/src/lib/windows-terminal-capabilities.test.ts",
+ "src/renderer/src/lib/work-item-link-query-bounds.test.ts",
+ "src/renderer/src/lib/workspace-port-scan-debounce.test.ts",
+ "src/renderer/src/lib/workspace-session-relevant-fields.test.ts",
+ "src/renderer/src/lib/workspace-terminal-host-authority.test.ts",
+ "src/renderer/src/lib/worktree-palette-multi-keyword.test.ts",
+ "src/renderer/src/lib/worktree-status.interrupted.test.ts",
+ "src/renderer/src/runtime/antigravity-generation-compatibility.test.ts",
+ "src/renderer/src/runtime/browser-client-host-identity.test.ts",
+ "src/renderer/src/runtime/client-hosted-browser-close-intent-replay.test.ts",
+ "src/renderer/src/runtime/github-check-details-timeout.test.ts",
+ "src/renderer/src/runtime/host-session-mirror-hydration-frame-ordering.test.tsx",
+ "src/renderer/src/runtime/local-structured-session-retired-epoch-repair.test.ts",
+ "src/renderer/src/runtime/local-structured-session-tabs-host-isolation.test.ts",
+ "src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts",
+ "src/renderer/src/runtime/remote-server-update-coordinator.test.ts",
+ "src/renderer/src/runtime/remote-terminal-stream-watchdog.test.ts",
+ "src/renderer/src/runtime/runtime-client-events.test.ts",
+ "src/renderer/src/runtime/runtime-file-client-external-import.test.ts",
+ "src/renderer/src/runtime/runtime-file-client.test.ts",
+ "src/renderer/src/runtime/runtime-git-client-api-contract.test.ts",
+ "src/renderer/src/runtime/runtime-jira-payload-stream.test.ts",
+ "src/renderer/src/runtime/runtime-linear-client.test.ts",
+ "src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts",
+ "src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts",
+ "src/renderer/src/runtime/web-runtime-browser-capability-cleanup.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-client-placement.test.ts",
+ "src/renderer/src/runtime/web-runtime-session-browser-create-focus.test.ts",
+ "src/renderer/src/runtime/web-session-close-intent.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-host-restart-browser-rows.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-mirrored-draft-close.test.ts",
+ "src/renderer/src/runtime/web-session-tabs-sync-staged-browser-adoption.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption-regressions.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.test.ts",
+ "src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.test.ts",
+ "src/renderer/src/store/copy-on-write-record.test.ts",
+ "src/renderer/src/store/slices/agent-status-batch.test.ts",
+ "src/renderer/src/store/slices/agent-status-pane-keyed-records.test.ts",
+ "src/renderer/src/store/slices/agent-status-retention-prefix-sweep.test.ts",
+ "src/renderer/src/store/slices/ambiguous-owner-warning-worktree-removal-leak.test.ts",
+ "src/renderer/src/store/slices/browser-page-close-intent-recording.test.ts",
+ "src/renderer/src/store/slices/browser-session-host-selection.test.ts",
+ "src/renderer/src/store/slices/browser-webview-cleanup.test.ts",
+ "src/renderer/src/store/slices/cmd-j-create-actions.test.ts",
+ "src/renderer/src/store/slices/editor-markdown-view-state.test.ts",
+ "src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts",
+ "src/renderer/src/store/slices/editor-tab-placement.test.ts",
+ "src/renderer/src/store/slices/editor/actions/markdown-preview-actions.test.ts",
+ "src/renderer/src/store/slices/empty-update-notifications.test.ts",
+ "src/renderer/src/store/slices/github-cache-eviction-and-bounds.test.ts",
+ "src/renderer/src/store/slices/github-pr-branch-coordinator-events.test.ts",
+ "src/renderer/src/store/slices/github-pr-comments.test.ts",
+ "src/renderer/src/store/slices/github-work-items-runtime-routing.test.ts",
+ "src/renderer/src/store/slices/linear-source-context-cache-scope.test.ts",
+ "src/renderer/src/store/slices/linear.test.ts",
+ "src/renderer/src/store/slices/local-detected-agent-state.test.ts",
+ "src/renderer/src/store/slices/repo-reorder-host-split.test.ts",
+ "src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts",
+ "src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts",
+ "src/renderer/src/store/slices/repos-refresh-identity.test.ts",
+ "src/renderer/src/store/slices/repos-runtime-visibility-defaults.test.ts",
+ "src/renderer/src/store/slices/repos-stale-fetch.test.ts",
+ "src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts",
+ "src/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.ts",
+ "src/renderer/src/store/slices/store-active-worktree-selection.test.ts",
+ "src/renderer/src/store/slices/store-active-worktree-terminal-creation.test.ts",
+ "src/renderer/src/store/slices/store-session-browser-hydration.test.ts",
+ "src/renderer/src/store/slices/store-sleep-pane-hibernation.test.ts",
+ "src/renderer/src/store/slices/tab-worktree-orphan-map-purge-leak.test.ts",
+ "src/renderer/src/store/slices/tabs-session-hydration.test.ts",
+ "src/renderer/src/store/slices/terminal-orphan-helpers.test.ts",
+ "src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts",
+ "src/renderer/src/store/slices/terminal-pane-retirement-ownership.test.ts",
+ "src/renderer/src/store/slices/terminal-tab-retirement.test.ts",
+ "src/renderer/src/store/slices/ui-acknowledge-agents-clock-skew.test.ts",
+ "src/renderer/src/store/slices/ui-modal-slot-dismissal.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-removal-preflight.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-scan-progress.test.ts",
+ "src/renderer/src/store/slices/workspace-cleanup-unverified-removal-consent.test.ts",
+ "src/renderer/src/store/slices/worktree-by-id-index.test.ts",
+ "src/renderer/src/store/slices/worktree-visibility-settings-write.test.ts",
+ "src/renderer/src/store/slices/worktrees-fetch-listing-merge.test.ts",
+ "src/renderer/src/store/slices/worktrees-identity-migration.test.ts",
+ "src/renderer/src/store/slices/worktrees-remote-runtime-removal.test.ts",
+ "src/renderer/src/store/slices/worktrees/teardown/record-key-omission.test.ts",
+ "src/renderer/src/store/store-identity-churn-probe.test.ts",
+ "src/renderer/src/web/web-clipboard-copy-fallback.test.ts",
+ "src/renderer/src/web/web-pairing.test.ts",
+ "src/renderer/src/web/web-preload-api-filesystem.test.ts",
+ "src/renderer/src/web/web-preload-api-github.test.ts",
+ "src/renderer/src/web/web-preload-api-gitlab.test.ts",
+ "src/renderer/src/web/web-preload-api-runtime-calls.test.ts",
+ "src/renderer/src/web/web-runtime-client-timeout-budget.test.ts",
+ "src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts",
+ "src/shared/add-repo-existing-workspaces-telemetry.test.ts",
+ "src/shared/agent-hook-endpoint-temp-cleanup.test.ts",
+ "src/shared/agent-hook-listener-claude-subagents.test.ts",
+ "src/shared/agent-hook-listener-opencode-session-correlation.test.ts",
+ "src/shared/agent-session-option-catalog-omp.test.ts",
+ "src/shared/agent-session-question-answer.test.ts",
+ "src/shared/agent-status-child-work.test.ts",
+ "src/shared/agent-status-osc-pending-retention.test.ts",
+ "src/shared/agent-status-osc.test.ts",
+ "src/shared/agent-status-store-byte-budget.test.ts",
+ "src/shared/ai-vault-resume-command.test.ts",
+ "src/shared/ai-vault-search-query-operators.test.ts",
+ "src/shared/ai-vault-search-settings.test.ts",
+ "src/shared/automation-legacy-list-partition.test.ts",
+ "src/shared/automation-run-identity.test.ts",
+ "src/shared/browser-client-hosting-eligibility.test.ts",
+ "src/shared/browser-grab-types.test.ts",
+ "src/shared/child-process/bounded-output-sink.test.ts",
+ "src/shared/cli-workspace-provenance.test.ts",
+ "src/shared/cloud-service-url.test.ts",
+ "src/shared/codex-pet-sprite-defaults.test.ts",
+ "src/shared/direct-ssh-reconnect-telemetry-schema.test.ts",
+ "src/shared/emulator-keyboard-frame.test.ts",
+ "src/shared/execution-host.test.ts",
+ "src/shared/external-automation-jobs-file.test.ts",
+ "src/shared/filesystem-directory-listing-limit.test.ts",
+ "src/shared/git-binary-compatibility.test.ts",
+ "src/shared/git-branch-compare-head.test.ts",
+ "src/shared/git-check-ignore-stdio.test.ts",
+ "src/shared/git-fetch-head-lock.test.ts",
+ "src/shared/git-history.test.ts",
+ "src/shared/git-remote-error.test.ts",
+ "src/shared/github/project-ref-input.test.ts",
+ "src/shared/gitlab-pipeline-checks.test.ts",
+ "src/shared/gitlab-projects.test.ts",
+ "src/shared/host-balanced-listing-scaling.test.ts",
+ "src/shared/hosted-review-ready-capabilities.test.ts",
+ "src/shared/linear/issue-attribute-filter.test.ts",
+ "src/shared/linear/links.test.ts",
+ "src/shared/linux-proc-port-scan-limits.test.ts",
+ "src/shared/mobile-e2ee-v2-contract.test.ts",
+ "src/shared/mobile-markdown-document.test.ts",
+ "src/shared/mobile-web-bundle/manifest-contract.test.ts",
+ "src/shared/native-chat-stream-unsubscribe.test.ts",
+ "src/shared/native-chat-tool-preview-prefix.test.ts",
+ "src/shared/nul-delimited-fields.test.ts",
+ "src/shared/omp-fresh-launch.test.ts",
+ "src/shared/opencode-terminal-title.test.ts",
+ "src/shared/orca-yaml-bounds.test.ts",
+ "src/shared/orchestration-fleet-evidence-clock.test.ts",
+ "src/shared/orchestration-task-summary.test.ts",
+ "src/shared/osc52-clipboard-settings.test.ts",
+ "src/shared/pairing.test.ts",
+ "src/shared/pane-agent-identity-inventory.test.ts",
+ "src/shared/pi-state-title-marker.test.ts",
+ "src/shared/plugins/plugin-demo-fixture.test.ts",
+ "src/shared/plugins/plugin-panel-message-budget.test.ts",
+ "src/shared/priority-semaphore.test.ts",
+ "src/shared/project-execution-runtime.test.ts",
+ "src/shared/promise-settlement-waiters.test.ts",
+ "src/shared/quick-open-install-rg.test.ts",
+ "src/shared/relay-version-marker.test.ts",
+ "src/shared/remote-pairing-verification.test.ts",
+ "src/shared/remote-runtime-client.test.ts",
+ "src/shared/remote-runtime-request-connection-stale.test.ts",
+ "src/shared/remote-runtime-request-connection.test.ts",
+ "src/shared/remote-runtime-shared-control-subscriptions.test.ts",
+ "src/shared/remote-runtime-transport-error-agreement.test.ts",
+ "src/shared/renderer-restart-preparation.test.ts",
+ "src/shared/retired-pty-incarnations.test.ts",
+ "src/shared/secure-file-fsync-flags.test.ts",
+ "src/shared/secure-path-hardening-retry-budget.test.ts",
+ "src/shared/session-tab-placement.test.ts",
+ "src/shared/shell-foreground-snapshot.test.ts",
+ "src/shared/skill-metadata.test.ts",
+ "src/shared/ssh-target-generation.test.ts",
+ "src/shared/structured-agent-session-coalescer.test.ts",
+ "src/shared/structured-agent-session-option-picks.test.ts",
+ "src/shared/structured-agent-session-turn-timing-retention.test.ts",
+ "src/shared/structured-agent-turn-clock-anchor.test.ts",
+ "src/shared/tailnet-address.test.ts",
+ "src/shared/task-source-context.test.ts",
+ "src/shared/terminal-custom-themes.test.ts",
+ "src/shared/terminal-github-pr-link-detector.test.ts",
+ "src/shared/terminal-wait-blocked-reason-legacy-alias.test.ts",
+ "src/shared/tui-agent-startup-hermes.test.ts",
+ "src/shared/tui-agent-startup-shell.test.ts",
+ "src/shared/tui-agent-startup.test.ts",
+ "src/shared/windows-interactive-login-spawn.test.ts",
+ "src/shared/windows-transient-lock-removal.test.ts",
+ "src/shared/worker-transcript-text-scaling.test.ts",
+ "src/shared/workspace-session-schema-field-coverage.test.ts",
+ "src/shared/workspace-statuses.test.ts",
+ "src/shared/worktree/host-context-labels.test.ts",
+ "src/shared/ws-outbound-backpressure-queue.test.ts",
+ "src/shared/wsl-paths.test.ts",
+ "tests/e2e/github-work-item-search-burst.unit.test.ts",
+ "tests/e2e/helpers/git-status-retry-barrier.unit.test.ts",
+ "tests/e2e/helpers/paired-client-window-reveal.unit.test.ts",
+ "tests/e2e/helpers/ssh-port-forward-snapshot-barrier.unit.test.ts",
+ "tests/e2e/host-cold-park-remote-subscriber.unit.test.ts",
+ "tests/e2e/restored-terminal-input-readiness.unit.test.ts",
+ "tests/e2e/session-tabs-empty-inventory-daemon-oracle.unit.test.ts",
+ "tests/e2e/sustained-agent-typing-load-scripts.unit.test.ts",
+ "tests/e2e/terminal-probe-input-sequence.unit.test.ts",
+ "tests/e2e/terminal-split-activation-latency-artifact.unit.test.ts"
+ ],
+ "durationMs": 851039
+ }
+ ],
+ "baselineSha256": "f9b9fe1e2c9d715586559833fb058a2a92b7d663ea0932dc2d8c4fa51eea7b84",
+ "selectedShard": 6
+}
diff --git a/src/main/git/command-runner/wsl-aware-spawn.ts b/src/main/git/command-runner/wsl-aware-spawn.ts
index 7cdb25971dfa..ff87c4bee5dd 100644
--- a/src/main/git/command-runner/wsl-aware-spawn.ts
+++ b/src/main/git/command-runner/wsl-aware-spawn.ts
@@ -14,12 +14,15 @@ export function wslAwareSpawn(
wslDistro?: string
useWslLoginShell?: boolean
wslShellCommand?: string
+ cwdFailureExitCode?: number
}
): ChildProcess {
- const { wslDistro, useWslLoginShell, wslShellCommand, ...spawnOptions } = options
+ const { wslDistro, useWslLoginShell, wslShellCommand, cwdFailureExitCode, ...spawnOptions } =
+ options
const resolved = resolveCommand(command, args, options.cwd, wslDistro, {
useWslLoginShell,
- wslShellCommand
+ wslShellCommand,
+ ...(cwdFailureExitCode === undefined ? {} : { cwdFailureExitCode })
})
const spawnStartedAt = performance.now()
const child = spawn(resolved.binary, resolved.args, {
diff --git a/src/main/git/command-runner/wsl-command-resolution.ts b/src/main/git/command-runner/wsl-command-resolution.ts
index 5e24c1bb39b4..cb5d9de41f43 100644
--- a/src/main/git/command-runner/wsl-command-resolution.ts
+++ b/src/main/git/command-runner/wsl-command-resolution.ts
@@ -69,6 +69,12 @@ export function resolveCommand(
terminationBarrier?: boolean
/** Pre-quoted shell expression that names the program inside WSL, replacing `command`. */
wslShellCommand?: string
+ /**
+ * Exit with this code when the `cd` fails, instead of letting `&&` swallow it as the shell's
+ * own exit 1. Why: ripgrep also exits 1 for "no matches", so an unreachable workspace would
+ * otherwise be indistinguishable from an empty result.
+ */
+ cwdFailureExitCode?: number
} = {}
): ResolvedCommand {
if (process.platform !== 'win32') {
@@ -92,9 +98,13 @@ export function resolveCommand(
const escapedArgs = translatedArgs.map(quotePosixShell)
// Why: prepend `cd &&` for a UNC cwd; skip it when only a distro override was given (global gh needs no cwd).
const linuxCwd = cwdWsl?.linuxPath ?? (cwd && wslDistroOverride ? translateArgForWsl(cwd) : null)
- const shellCmd = linuxCwd
- ? `cd ${quotePosixShell(linuxCwd)} && ${localePrefix}${escapedCommand} ${escapedArgs.join(' ')}`
- : `${localePrefix}${escapedCommand} ${escapedArgs.join(' ')}`
+ const invocation = `${localePrefix}${escapedCommand} ${escapedArgs.join(' ')}`
+ const enterCwd = linuxCwd
+ ? options.cwdFailureExitCode === undefined
+ ? `cd ${quotePosixShell(linuxCwd)} && `
+ : `cd ${quotePosixShell(linuxCwd)} || exit ${Math.trunc(options.cwdFailureExitCode)}; `
+ : ''
+ const shellCmd = `${enterCwd}${invocation}`
if (command === 'git' && options.wslGitReadEnvironment) {
const optionalLocks = options.env?.GIT_OPTIONAL_LOCKS
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index b128f47d7183..4e51fac79437 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -21,8 +21,10 @@ import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ isRipgrepMissingCwdExit,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
+ ripgrepMissingCwdError,
RipgrepUnavailableError
} from '../../shared/ripgrep-process-availability'
import { fileListingCancellationError } from '../../shared/file-listing-cancellation'
@@ -162,6 +164,13 @@ export async function listQuickOpenFiles(
finish(new Error('rg failed to start'))
}
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
+ // Why first: this code is above rg's own 0/1/2, so the unavailable check would otherwise
+ // read an unreachable workspace as a broken install and tell the user to reinstall Orca.
+ if (isRipgrepMissingCwdExit(code)) {
+ buf = ''
+ finish(ripgrepMissingCwdError(authorizedRootPath))
+ return
+ }
if (
isRipgrepUnavailableExit(child, code, signal, {
classifyNativeLauncherExit: true
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index 20094425f32d..d4349c39a3fa 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -13,8 +13,10 @@ import { isQuickOpenQueryTooLarge, QuickOpenPathRanker } from '../../shared/quic
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ isRipgrepMissingCwdExit,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
+ ripgrepMissingCwdError,
RipgrepLaunchFailureError,
RipgrepUnavailableError
} from '../../shared/ripgrep-process-availability'
@@ -203,6 +205,11 @@ function scanRipgrepPaths(args: {
finish(new RipgrepUnavailableError())
return
}
+ if (isRipgrepMissingCwdExit(code)) {
+ pathAccumulator.clear()
+ finish(ripgrepMissingCwdError(args.authorizedRootPath))
+ return
+ }
if (signal) {
finish(new Error(`rg killed by ${signal}`))
return
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index f871456950bc..2508937ba656 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -12,9 +12,11 @@ import {
} from '../../../shared/text-search'
import {
absorbPendingRipgrepSpawnError,
+ isRipgrepMissingCwdExit,
isRipgrepUnavailableExit,
isTransientRipgrepSpawnError,
- killSpawnedRipgrepProcess
+ killSpawnedRipgrepProcess,
+ ripgrepMissingCwdError
} from '../../../shared/ripgrep-process-availability'
import { toWindowsWslPath, parseWslPath } from '../../wsl'
import {
@@ -143,6 +145,12 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
resolveOnce()
}
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
+ // Why first: this code is above rg's own 0/1/2, so the unavailable check would otherwise
+ // read an unreachable workspace as a broken install and tell the user to reinstall Orca.
+ if (isRipgrepMissingCwdExit(code)) {
+ finish(Promise.reject(ripgrepMissingCwdError(rootPath)))
+ return
+ }
if (
child &&
isRipgrepUnavailableExit(child, code, signal, {
diff --git a/src/main/ripgrep/bundled-ripgrep-spawn.ts b/src/main/ripgrep/bundled-ripgrep-spawn.ts
index 6701039312d0..5d3132fcc118 100644
--- a/src/main/ripgrep/bundled-ripgrep-spawn.ts
+++ b/src/main/ripgrep/bundled-ripgrep-spawn.ts
@@ -1,5 +1,6 @@
import { wslAwareSpawn } from '../git/runner'
import { bundledRipgrepCommand, bundledRipgrepWslSpawnOptions } from './bundled-ripgrep-path'
+import { RIPGREP_MISSING_CWD_EXIT_CODE } from '../../shared/ripgrep-process-availability'
// Why derived rather than imported from node:child_process: a direct import would land this file
// on the child_process ratchet's allowlist, which only ever shrinks.
@@ -30,6 +31,11 @@ export function spawnBundledRipgrep(
return wslAwareSpawn(command, args, {
...spawnOptions,
...(wslDistro ? { wslDistro } : {}),
+ // Why only when routed into WSL: a native spawn reports an unusable cwd as a spawn error,
+ // but inside `bash -c` a failed `cd` is just exit 1 -- the same code rg uses for "no matches".
+ ...(wslDistro || wslDistroForOutput
+ ? { cwdFailureExitCode: RIPGREP_MISSING_CWD_EXIT_CODE }
+ : {}),
...(wslDistroForOutput ? bundledRipgrepWslSpawnOptions(command) : {})
})
}
diff --git a/src/main/ripgrep/wsl-missing-cwd-exit.test.ts b/src/main/ripgrep/wsl-missing-cwd-exit.test.ts
new file mode 100644
index 000000000000..d64381753d51
--- /dev/null
+++ b/src/main/ripgrep/wsl-missing-cwd-exit.test.ts
@@ -0,0 +1,60 @@
+import { execFile } from 'node:child_process'
+import { promisify } from 'node:util'
+import { describe, expect, it, onTestFinished } from 'vitest'
+import { resolveCommand } from '../git/command-runner/wsl-command-resolution'
+import {
+ isRipgrepMissingCwdExit,
+ RIPGREP_MISSING_CWD_EXIT_CODE
+} from '../../shared/ripgrep-process-availability'
+
+const execFileAsync = promisify(execFile)
+
+async function shellExitCode(script: string): Promise {
+ try {
+ await execFileAsync('bash', ['-c', script])
+ return 0
+ } catch (error) {
+ const code: unknown = error instanceof Error ? Reflect.get(error, 'code') : undefined
+ return typeof code === 'number' ? code : -1
+ }
+}
+
+describe('WSL missing-cwd exit code', () => {
+ // Why a real shell: the whole point is that `cd x && cmd` collapses into the shell's exit 1,
+ // which is also ripgrep's "no matches". Asserting on a mock would not prove the distinction.
+ it('is indistinguishable from "no matches" without the guard, and distinct with it', async () => {
+ expect(await shellExitCode('cd /definitely/not/here && echo hi')).toBe(1)
+ expect(
+ await shellExitCode(
+ `cd /definitely/not/here || exit ${RIPGREP_MISSING_CWD_EXIT_CODE}; echo hi`
+ )
+ ).toBe(RIPGREP_MISSING_CWD_EXIT_CODE)
+ })
+
+ it('is above the exit codes ripgrep itself uses', () => {
+ for (const ripgrepCode of [0, 1, 2]) {
+ expect(isRipgrepMissingCwdExit(ripgrepCode)).toBe(false)
+ }
+ expect(isRipgrepMissingCwdExit(RIPGREP_MISSING_CWD_EXIT_CODE)).toBe(true)
+ expect(isRipgrepMissingCwdExit(null)).toBe(false)
+ })
+
+ // Why stub the platform: WSL routing is win32-only, so on any other host resolveCommand would
+ // return early and the assertions below would silently test nothing.
+ it('emits the guard only when asked', () => {
+ const original = process.platform
+ Object.defineProperty(process, 'platform', { configurable: true, value: 'win32' })
+ onTestFinished(() => {
+ Object.defineProperty(process, 'platform', { configurable: true, value: original })
+ })
+ const cwd = '\\\\wsl.localhost\\Ubuntu\\home\\me\\repo'
+ const plain = resolveCommand('rg', ['--files'], cwd, 'Ubuntu')
+ const guarded = resolveCommand('rg', ['--files'], cwd, 'Ubuntu', {
+ cwdFailureExitCode: RIPGREP_MISSING_CWD_EXIT_CODE
+ })
+
+ expect(plain.args.at(-1)).toContain("&& 'rg'")
+ expect(guarded.args.at(-1)).toContain(`|| exit ${RIPGREP_MISSING_CWD_EXIT_CODE};`)
+ expect(guarded.args.at(-1)).not.toContain("&& 'rg'")
+ })
+})
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index 9172c8d708a5..9d6d25238149 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -17,9 +17,11 @@ import { bundledRipgrepUnavailableError } from '../ripgrep/bundled-ripgrep-path'
import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
+ isRipgrepMissingCwdExit,
isRipgrepUnavailableExit,
isTransientRipgrepSpawnError,
- killSpawnedRipgrepProcess
+ killSpawnedRipgrepProcess,
+ ripgrepMissingCwdError
} from '../../shared/ripgrep-process-availability'
import type { ChildProcessHandle } from '../../shared/child-process/process-spec'
import type { RuntimeFileExplorerPath } from './runtime-file-command-target'
@@ -138,6 +140,12 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
resolveOnce()
}
const onClose = (code: number | null, signal: NodeJS.Signals | null): void => {
+ // Why first: this code is above rg's own 0/1/2, so the unavailable check would otherwise
+ // read an unreachable workspace as a broken install and tell the user to reinstall Orca.
+ if (isRipgrepMissingCwdExit(code)) {
+ finish(Promise.reject(ripgrepMissingCwdError(authorizedRootPath)))
+ return
+ }
if (
child &&
isRipgrepUnavailableExit(child, code, signal, {
diff --git a/src/main/ssh/orcad-remote-deploy.ts b/src/main/ssh/orcad-remote-deploy.ts
index 878e327c4527..c6803d4ef6b4 100644
--- a/src/main/ssh/orcad-remote-deploy.ts
+++ b/src/main/ssh/orcad-remote-deploy.ts
@@ -125,6 +125,12 @@ async function installOrcadBundle(
) {
return
}
+ // Why this needs ripgrep work before it goes live: `build-orcad.mjs` copies only the BUILD
+ // host's rg into `out/orcad/ripgrep//`, and this upload carries that directory
+ // verbatim. orcad reports isPackaged() === true, so its rg resolver takes the packaged branch
+ // and returns an absolute path under its own install root with no PATH fallback -- on a remote
+ // of a different platform that path does not exist and every search fails. Call
+ // `ensureRemoteBundledRipgrep` here (as the relay deploy does), or ship all six platforms.
await uploadRelayDirectory(options.conn, options.localOrcadDir, remoteDir, options.host, {
signal: options.signal
})
diff --git a/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
new file mode 100644
index 000000000000..0b62763c501a
--- /dev/null
+++ b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
@@ -0,0 +1,333 @@
+// Windows named-pipe endpoint deploys, split out of ssh-relay-deploy.test.ts: that file sits at
+// the max-lines cap, and these four share only the deploy harness with the rest of it.
+import { beforeEach, describe, expect, it, vi } from 'vitest'
+import type * as RelayRipgrepInstallModule from './ssh-relay-ripgrep-install'
+
+vi.mock('electron', () => ({
+ app: { getAppPath: () => '/mock/app' }
+}))
+
+// Why: deployAndLaunchRelay now reads `${localRelayDir}/.version` upfront
+// (per docs/ssh-relay-versioned-install-dirs.md). The fs mock must report
+// the local relay package as existing AND return a content-hashed version
+// string so readLocalFullVersion succeeds.
+vi.mock('fs', () => ({
+ existsSync: vi.fn().mockReturnValue(true),
+ readFileSync: vi.fn().mockReturnValue('0.1.0+abcdef012345')
+}))
+
+vi.mock('./relay-protocol', () => ({
+ RELAY_VERSION: '0.1.0',
+ RELAY_REMOTE_DIR: '.orca-remote',
+ parseUnameToRelayPlatform: vi.fn((os: string, arch: string) => {
+ const normalizedOs = os.toLowerCase()
+ const normalizedArch = arch.toLowerCase()
+ const relayArch = normalizedArch === 'arm64' || normalizedArch === 'aarch64' ? 'arm64' : 'x64'
+ if (normalizedOs === 'windows' || normalizedOs === 'win32') {
+ return `win32-${relayArch}`
+ }
+ if (normalizedOs === 'darwin') {
+ return `darwin-${relayArch}`
+ }
+ if (normalizedOs === 'linux') {
+ return `linux-${relayArch}`
+ }
+ return null
+ }),
+ RELAY_SENTINEL: 'ORCA-RELAY v0.1.0 READY\n',
+ RELAY_SENTINEL_TIMEOUT_MS: 10_000
+}))
+
+vi.mock('./ssh-relay-deploy-helpers', () => ({
+ uploadDirectory: vi.fn().mockResolvedValue(undefined),
+ waitForSentinel: vi.fn().mockResolvedValue({
+ write: vi.fn(),
+ onData: vi.fn(),
+ onClose: vi.fn()
+ }),
+ isUnconfirmedSshCommandTermination: (error: unknown) =>
+ error instanceof Error &&
+ (error as Error & { sshChannelCloseConfirmed?: boolean }).sshChannelCloseConfirmed === false,
+ execCommand: vi.fn().mockResolvedValue('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
+}))
+
+vi.mock('./ssh-remote-node-resolution', () => ({
+ resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
+}))
+
+// Why: this file mocks fs, so the real content hash cannot read a binary.
+vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
+ resolveBundledRipgrepPath: () => null,
+ bundledRipgrepContentKey: () => 'c0ffee0123456789'
+}))
+
+// Why: the fire-and-forget ripgrep install would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
+ ...(await importOriginal()),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+}))
+
+// Why: the versioned-install modules shell out for install state, locking,
+// and GC. Stub them so deploy tests need no real SSH connection.
+vi.mock('./ssh-relay-versioned-install', () => ({
+ readLocalFullVersion: vi.fn().mockReturnValue('0.1.0+abcdef012345'),
+ computeRemoteRelayDir: (home: string, v: string) => `${home}/.orca-remote/relay-${v}`,
+ isRelayAlreadyInstalled: vi.fn().mockResolvedValue(true),
+ finalizeInstall: vi.fn().mockResolvedValue(undefined),
+ abandonInstall: vi.fn().mockResolvedValue(undefined),
+ gcOldRelayVersions: vi.fn().mockResolvedValue(undefined)
+}))
+
+vi.mock('./ssh-relay-install-lock', () => ({
+ acquireInstallLock: vi.fn().mockResolvedValue(undefined),
+ RELAY_INSTALL_LOCK_NAME: '.install-lock'
+}))
+
+vi.mock('./ssh-relay-repair-lock', () => ({
+ tryAcquireRelayRepairLock: vi.fn().mockResolvedValue('acquired')
+}))
+
+vi.mock('./ssh-connection-utils', () => ({
+ shellEscape: (s: string) => `'${s}'`,
+ createSshOperationAbortError: () =>
+ Object.assign(new Error('SSH operation was cancelled'), {
+ name: 'AbortError'
+ })
+}))
+
+import { deployAndLaunchRelay } from './ssh-relay-deploy'
+import { execCommand, waitForSentinel } from './ssh-relay-deploy-helpers'
+import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
+import { isRelayAlreadyInstalled } from './ssh-relay-versioned-install'
+import { acquireInstallLock } from './ssh-relay-install-lock'
+import type { SshConnection } from './ssh-connection'
+
+function decodePowerShellCommand(command: string): string | null {
+ const match = command.match(/-EncodedCommand\s+([A-Za-z0-9+/=]+)/)
+ return match ? Buffer.from(match[1], 'base64').toString('utf16le') : null
+}
+
+const extractWindowsSockPath = (script: string): string =>
+ /--sock-path\s+'([^']+)'/.exec(script)?.[1] ?? ''
+
+const extractWindowsMarkerPath = (script: string): string =>
+ /-LiteralPath\s+'([^']*\.windows-active-pipe[^']*)'/.exec(script)?.[1] ?? ''
+
+function makeMockConnection(): SshConnection {
+ return {
+ canRunConcurrentExecCommands: vi.fn().mockReturnValue(true),
+ exec: vi.fn().mockResolvedValue({
+ on: vi.fn(),
+ stderr: { on: vi.fn() },
+ stdin: {},
+ stdout: { on: vi.fn() },
+ close: vi.fn()
+ }),
+ writeFile: vi.fn().mockResolvedValue(undefined),
+ sftp: vi.fn().mockResolvedValue({
+ mkdir: vi.fn((_p: string, cb: (err: Error | null) => void) => cb(null)),
+ createWriteStream: vi.fn().mockReturnValue({
+ on: vi.fn((_event: string, cb: () => void) => {
+ if (_event === 'close') {
+ setTimeout(cb, 0)
+ }
+ }),
+ end: vi.fn()
+ }),
+ end: vi.fn()
+ })
+ } as unknown as SshConnection
+}
+
+describe('deployAndLaunchRelay on Windows remotes', () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ vi.mocked(execCommand).mockReset().mockResolvedValue('__ORCA_REMOTE_PLATFORM__ Linux x86_64')
+ vi.mocked(waitForSentinel).mockReset().mockResolvedValue({
+ write: vi.fn(),
+ onData: vi.fn(),
+ onClose: vi.fn()
+ })
+ vi.mocked(resolveRemoteNodePath).mockReset().mockResolvedValue('/usr/bin/node')
+ vi.mocked(isRelayAlreadyInstalled).mockReset().mockResolvedValue(true)
+ vi.mocked(acquireInstallLock).mockReset().mockResolvedValue(undefined)
+ })
+
+ it('launches Windows remotes via a named pipe endpoint', async () => {
+ const conn = makeMockConnection()
+ const mockExecCommand = vi.mocked(execCommand)
+ vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
+ mockExecCommand
+ .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
+ .mockResolvedValueOnce('C:\\Users\\me user') // remote home
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
+ .mockResolvedValueOnce('') // no persisted active pipe
+ .mockResolvedValueOnce('WAITING') // named pipe probe
+ .mockResolvedValueOnce('') // WMI relay launch
+ .mockResolvedValueOnce('READY') // named pipe poll
+ .mockResolvedValueOnce('') // persist active pipe marker
+
+ const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
+
+ expect(result.platform).toBe('win32-x64')
+ expect(result.remoteHome).toBe('C:/Users/me user')
+ expect(result.sockPath).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
+ const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
+ expect(execCommands).toHaveLength(1)
+ expect(execCommands[0]).toContain('powershell.exe')
+ const decodedScripts = mockExecCommand.mock.calls
+ .map(([, command]) => decodePowerShellCommand(command))
+ .filter((script): script is string => script !== null)
+ const launchScript = decodedScripts.find((script) => script.includes('Invoke-CimMethod')) ?? ''
+ expect(launchScript).toContain(
+ '"C:/Users/me user/.orca-remote/relay-0.1.0+abcdef012345/relay.js"'
+ )
+ expect(launchScript).toContain(
+ '"C:/Users/me user/.orca-remote/relay-0.1.0+abcdef012345/agent-hooks/orca-relay-'
+ )
+ expect(launchScript).toContain('--endpoint-dir')
+ expect(launchScript).toContain(
+ '--ripgrep-path "C:/Users/me user/.orca-remote/ripgrep/c0ffee0123456789-win32-x64/rg.exe"'
+ )
+ expect(launchScript).not.toContain('--pty-source-credit-v1')
+ expect(launchScript).not.toContain('.pty-source-credit-policy')
+ expect(launchScript).not.toContain('\\\\.\\pipe\\agent-hooks')
+ const waitScript = decodedScripts.find((script) => script.includes('deadline=Date.now()')) ?? ''
+ expect(waitScript).toContain('setTimeout(attempt,intervalMs)')
+ const windowsLaunchCalls = mockExecCommand.mock.calls.filter(([, command]) => {
+ const script = decodePowerShellCommand(command)
+ return (
+ script?.includes('.windows-active-pipe') ||
+ script?.includes('Invoke-CimMethod') ||
+ script?.includes('deadline=Date.now()')
+ )
+ })
+ expect(windowsLaunchCalls.length).toBeGreaterThan(0)
+ expect(
+ windowsLaunchCalls.every(([, , options]) => options?.signal instanceof AbortSignal)
+ ).toBe(true)
+ expect(vi.mocked(conn.exec).mock.calls[0]?.[1]?.signal).toBeInstanceOf(AbortSignal)
+ expect(vi.mocked(waitForSentinel).mock.calls[0]?.[1]).toBeInstanceOf(AbortSignal)
+ })
+
+ it('relaunches Windows remotes on a fallback pipe when reconnecting the occupied pipe fails', async () => {
+ const conn = makeMockConnection()
+ const mockExecCommand = vi.mocked(execCommand)
+ vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
+ vi.mocked(waitForSentinel)
+ .mockRejectedValueOnce(new Error('stale daemon handshake failed'))
+ .mockResolvedValueOnce({
+ write: vi.fn(),
+ onData: vi.fn(),
+ onClose: vi.fn()
+ })
+ mockExecCommand
+ .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
+ .mockResolvedValueOnce('C:\\Users\\me user') // remote home
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
+ .mockResolvedValueOnce('') // no persisted active pipe yet
+ .mockResolvedValueOnce('READY') // existing named pipe probe
+ .mockResolvedValueOnce('WAITING') // deterministic fallback pipe is not already running
+ .mockResolvedValueOnce('') // WMI relay launch on fallback pipe
+ .mockResolvedValueOnce('READY') // fallback pipe poll
+ .mockResolvedValueOnce('') // persist fallback active pipe marker
+
+ const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
+
+ const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
+ expect(execCommands).toHaveLength(2)
+ const firstConnectScript = decodePowerShellCommand(execCommands[0]) ?? ''
+ const secondConnectScript = decodePowerShellCommand(execCommands[1]) ?? ''
+ const primaryPipe = extractWindowsSockPath(firstConnectScript)
+ const fallbackPipe = extractWindowsSockPath(secondConnectScript)
+ expect(primaryPipe).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
+ expect(fallbackPipe).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
+ expect(fallbackPipe).not.toBe(primaryPipe)
+ expect(result.sockPath).toBe(fallbackPipe)
+
+ const launchScript =
+ mockExecCommand.mock.calls
+ .map(([, command]) => decodePowerShellCommand(command))
+ .find((script) => script?.includes('Invoke-CimMethod')) ?? ''
+ expect(launchScript).toContain(fallbackPipe)
+ expect(launchScript).not.toContain(primaryPipe)
+
+ const markerWriteScript =
+ mockExecCommand.mock.calls
+ .map(([, command]) => decodePowerShellCommand(command))
+ .find(
+ (script) => script?.includes('Set-Content') && script.includes('.windows-active-pipe')
+ ) ?? ''
+ expect(markerWriteScript).toContain(fallbackPipe)
+ expect(markerWriteScript).not.toContain(primaryPipe)
+ })
+
+ it('prefers a persisted Windows fallback pipe on later reconnects', async () => {
+ const conn = makeMockConnection()
+ const mockExecCommand = vi.mocked(execCommand)
+ const persistedPipe = '\\\\.\\pipe\\orca-relay-1234567890abcdef1234'
+ vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
+ mockExecCommand
+ .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
+ .mockResolvedValueOnce('C:\\Users\\me user') // remote home
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
+ .mockResolvedValueOnce(`${persistedPipe}\n`) // persisted active pipe marker
+ .mockResolvedValueOnce('READY') // persisted named pipe probe
+ .mockResolvedValueOnce('') // refresh active pipe marker
+
+ const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
+
+ const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
+ expect(execCommands).toHaveLength(1)
+ const connectScript = decodePowerShellCommand(execCommands[0]) ?? ''
+ expect(extractWindowsSockPath(connectScript)).toBe(persistedPipe)
+ expect(result.sockPath).toBe(persistedPipe)
+
+ const decodedExecScripts = mockExecCommand.mock.calls
+ .map(([, command]) => decodePowerShellCommand(command))
+ .filter((script): script is string => script !== null)
+ expect(decodedExecScripts.some((script) => script.includes('Invoke-CimMethod'))).toBe(false)
+ })
+
+ it('scopes persisted Windows active pipe markers by relay target', async () => {
+ const connA = makeMockConnection()
+ const connB = makeMockConnection()
+ const mockExecCommand = vi.mocked(execCommand)
+ vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
+ mockExecCommand
+ .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe A
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64')
+ .mockResolvedValueOnce('C:\\Users\\me user')
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
+ .mockResolvedValueOnce('') // no persisted active pipe A
+ .mockResolvedValueOnce('WAITING')
+ .mockResolvedValueOnce('')
+ .mockResolvedValueOnce('READY')
+ .mockResolvedValueOnce('') // persist active pipe A
+ .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe B
+ .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64')
+ .mockResolvedValueOnce('C:\\Users\\me user')
+ .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
+ .mockResolvedValueOnce('') // no persisted active pipe B
+ .mockResolvedValueOnce('WAITING')
+ .mockResolvedValueOnce('')
+ .mockResolvedValueOnce('READY')
+ .mockResolvedValueOnce('') // persist active pipe B
+
+ await deployAndLaunchRelay(connA, undefined, 300, 'target-a')
+ await deployAndLaunchRelay(connB, undefined, 300, 'target-b')
+
+ const markerPaths = mockExecCommand.mock.calls
+ .map(([, command]) => decodePowerShellCommand(command))
+ .filter((script): script is string => Boolean(script?.includes('Get-Content')))
+ .map(extractWindowsMarkerPath)
+
+ expect(markerPaths).toHaveLength(2)
+ expect(markerPaths[0]).toContain('.windows-active-pipe-relay-')
+ expect(markerPaths[1]).toContain('.windows-active-pipe-relay-')
+ expect(markerPaths[0]).not.toBe(markerPaths[1])
+ })
+})
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index c272ab8e7bc0..d7bc91e361ae 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -107,17 +107,6 @@ import {
MAX_SSH_RELAY_GRACE_PERIOD_SECONDS
} from '../../shared/ssh-types'
-function decodePowerShellCommand(command: string): string | null {
- const match = command.match(/-EncodedCommand\s+([A-Za-z0-9+/=]+)/)
- return match ? Buffer.from(match[1], 'base64').toString('utf16le') : null
-}
-
-const extractWindowsSockPath = (script: string): string =>
- /--sock-path\s+'([^']+)'/.exec(script)?.[1] ?? ''
-
-const extractWindowsMarkerPath = (script: string): string =>
- /-LiteralPath\s+'([^']*\.windows-active-pipe[^']*)'/.exec(script)?.[1] ?? ''
-
function makeMockConnection(): SshConnection {
return {
canRunConcurrentExecCommands: vi.fn().mockReturnValue(true),
@@ -519,7 +508,12 @@ describe('deployAndLaunchRelay', () => {
"--ripgrep-path '/home/user/.orca-remote/ripgrep/c0ffee0123456789-linux-x64/rg'"
)
await vi.waitFor(() =>
- expect(ensureRemoteBundledRipgrep).toHaveBeenCalledWith(conn, expect.anything(), '/home/user')
+ expect(ensureRemoteBundledRipgrep).toHaveBeenCalledWith(
+ conn,
+ expect.anything(),
+ '/home/user',
+ expect.objectContaining({ signal: expect.anything() })
+ )
)
expect(launchCommand).not.toContain('--pty-source-credit-v1')
expect(launchCommand).not.toContain('.pty-source-credit-policy')
@@ -745,182 +739,4 @@ describe('deployAndLaunchRelay', () => {
expect(launchB).toContain('--sock-path')
expect(launchA).not.toEqual(launchB)
})
-
- it('launches Windows remotes via a named pipe endpoint', async () => {
- const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
- mockExecCommand
- .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
- .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
- .mockResolvedValueOnce('C:\\Users\\me user') // remote home
- .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
- .mockResolvedValueOnce('') // no persisted active pipe
- .mockResolvedValueOnce('WAITING') // named pipe probe
- .mockResolvedValueOnce('') // WMI relay launch
- .mockResolvedValueOnce('READY') // named pipe poll
- .mockResolvedValueOnce('') // persist active pipe marker
-
- const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
-
- expect(result.platform).toBe('win32-x64')
- expect(result.remoteHome).toBe('C:/Users/me user')
- expect(result.sockPath).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
- const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
- expect(execCommands).toHaveLength(1)
- expect(execCommands[0]).toContain('powershell.exe')
- const decodedScripts = mockExecCommand.mock.calls
- .map(([, command]) => decodePowerShellCommand(command))
- .filter((script): script is string => script !== null)
- const launchScript = decodedScripts.find((script) => script.includes('Invoke-CimMethod')) ?? ''
- expect(launchScript).toContain(
- '"C:/Users/me user/.orca-remote/relay-0.1.0+abcdef012345/relay.js"'
- )
- expect(launchScript).toContain(
- '"C:/Users/me user/.orca-remote/relay-0.1.0+abcdef012345/agent-hooks/orca-relay-'
- )
- expect(launchScript).toContain('--endpoint-dir')
- expect(launchScript).toContain(
- '--ripgrep-path "C:/Users/me user/.orca-remote/ripgrep/c0ffee0123456789-win32-x64/rg.exe"'
- )
- expect(launchScript).not.toContain('--pty-source-credit-v1')
- expect(launchScript).not.toContain('.pty-source-credit-policy')
- expect(launchScript).not.toContain('\\\\.\\pipe\\agent-hooks')
- const waitScript = decodedScripts.find((script) => script.includes('deadline=Date.now()')) ?? ''
- expect(waitScript).toContain('setTimeout(attempt,intervalMs)')
- const windowsLaunchCalls = mockExecCommand.mock.calls.filter(([, command]) => {
- const script = decodePowerShellCommand(command)
- return (
- script?.includes('.windows-active-pipe') ||
- script?.includes('Invoke-CimMethod') ||
- script?.includes('deadline=Date.now()')
- )
- })
- expect(windowsLaunchCalls.length).toBeGreaterThan(0)
- expect(
- windowsLaunchCalls.every(([, , options]) => options?.signal instanceof AbortSignal)
- ).toBe(true)
- expect(vi.mocked(conn.exec).mock.calls[0]?.[1]?.signal).toBeInstanceOf(AbortSignal)
- expect(vi.mocked(waitForSentinel).mock.calls[0]?.[1]).toBeInstanceOf(AbortSignal)
- })
-
- it('relaunches Windows remotes on a fallback pipe when reconnecting the occupied pipe fails', async () => {
- const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
- vi.mocked(waitForSentinel)
- .mockRejectedValueOnce(new Error('stale daemon handshake failed'))
- .mockResolvedValueOnce({
- write: vi.fn(),
- onData: vi.fn(),
- onClose: vi.fn()
- })
- mockExecCommand
- .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
- .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
- .mockResolvedValueOnce('C:\\Users\\me user') // remote home
- .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
- .mockResolvedValueOnce('') // no persisted active pipe yet
- .mockResolvedValueOnce('READY') // existing named pipe probe
- .mockResolvedValueOnce('WAITING') // deterministic fallback pipe is not already running
- .mockResolvedValueOnce('') // WMI relay launch on fallback pipe
- .mockResolvedValueOnce('READY') // fallback pipe poll
- .mockResolvedValueOnce('') // persist fallback active pipe marker
-
- const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
-
- const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
- expect(execCommands).toHaveLength(2)
- const firstConnectScript = decodePowerShellCommand(execCommands[0]) ?? ''
- const secondConnectScript = decodePowerShellCommand(execCommands[1]) ?? ''
- const primaryPipe = extractWindowsSockPath(firstConnectScript)
- const fallbackPipe = extractWindowsSockPath(secondConnectScript)
- expect(primaryPipe).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
- expect(fallbackPipe).toMatch(/^\\\\\.\\pipe\\orca-relay-[0-9a-f]{20}$/)
- expect(fallbackPipe).not.toBe(primaryPipe)
- expect(result.sockPath).toBe(fallbackPipe)
-
- const launchScript =
- mockExecCommand.mock.calls
- .map(([, command]) => decodePowerShellCommand(command))
- .find((script) => script?.includes('Invoke-CimMethod')) ?? ''
- expect(launchScript).toContain(fallbackPipe)
- expect(launchScript).not.toContain(primaryPipe)
-
- const markerWriteScript =
- mockExecCommand.mock.calls
- .map(([, command]) => decodePowerShellCommand(command))
- .find(
- (script) => script?.includes('Set-Content') && script.includes('.windows-active-pipe')
- ) ?? ''
- expect(markerWriteScript).toContain(fallbackPipe)
- expect(markerWriteScript).not.toContain(primaryPipe)
- })
-
- it('prefers a persisted Windows fallback pipe on later reconnects', async () => {
- const conn = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- const persistedPipe = '\\\\.\\pipe\\orca-relay-1234567890abcdef1234'
- vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
- mockExecCommand
- .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe
- .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64') // tagged PowerShell platform probe
- .mockResolvedValueOnce('C:\\Users\\me user') // remote home
- .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK') // native deps probe
- .mockResolvedValueOnce(`${persistedPipe}\n`) // persisted active pipe marker
- .mockResolvedValueOnce('READY') // persisted named pipe probe
- .mockResolvedValueOnce('') // refresh active pipe marker
-
- const result = await deployAndLaunchRelay(conn, undefined, 300, 'target-a')
-
- const execCommands = vi.mocked(conn.exec).mock.calls.map(([cmd]) => cmd as string)
- expect(execCommands).toHaveLength(1)
- const connectScript = decodePowerShellCommand(execCommands[0]) ?? ''
- expect(extractWindowsSockPath(connectScript)).toBe(persistedPipe)
- expect(result.sockPath).toBe(persistedPipe)
-
- const decodedExecScripts = mockExecCommand.mock.calls
- .map(([, command]) => decodePowerShellCommand(command))
- .filter((script): script is string => script !== null)
- expect(decodedExecScripts.some((script) => script.includes('Invoke-CimMethod'))).toBe(false)
- })
-
- it('scopes persisted Windows active pipe markers by relay target', async () => {
- const connA = makeMockConnection()
- const connB = makeMockConnection()
- const mockExecCommand = vi.mocked(execCommand)
- vi.mocked(resolveRemoteNodePath).mockResolvedValue('C:/Program Files/nodejs/node.exe')
- mockExecCommand
- .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe A
- .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64')
- .mockResolvedValueOnce('C:\\Users\\me user')
- .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- .mockResolvedValueOnce('') // no persisted active pipe A
- .mockResolvedValueOnce('WAITING')
- .mockResolvedValueOnce('')
- .mockResolvedValueOnce('READY')
- .mockResolvedValueOnce('') // persist active pipe A
- .mockRejectedValueOnce(new Error('uname not found')) // tagged POSIX platform probe B
- .mockResolvedValueOnce('__ORCA_REMOTE_PLATFORM__ Windows X64')
- .mockResolvedValueOnce('C:\\Users\\me user')
- .mockResolvedValueOnce('ORCA-NATIVE-DEPS-OK')
- .mockResolvedValueOnce('') // no persisted active pipe B
- .mockResolvedValueOnce('WAITING')
- .mockResolvedValueOnce('')
- .mockResolvedValueOnce('READY')
- .mockResolvedValueOnce('') // persist active pipe B
-
- await deployAndLaunchRelay(connA, undefined, 300, 'target-a')
- await deployAndLaunchRelay(connB, undefined, 300, 'target-b')
-
- const markerPaths = mockExecCommand.mock.calls
- .map(([, command]) => decodePowerShellCommand(command))
- .filter((script): script is string => Boolean(script?.includes('Get-Content')))
- .map(extractWindowsMarkerPath)
-
- expect(markerPaths).toHaveLength(2)
- expect(markerPaths[0]).toContain('.windows-active-pipe-relay-')
- expect(markerPaths[1]).toContain('.windows-active-pipe-relay-')
- expect(markerPaths[0]).not.toBe(markerPaths[1])
- })
})
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index c9860eb40fdd..2a331db55f5f 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -607,7 +607,11 @@ async function deployAndLaunchRelayAttempt(
// rg, but on a cold host this is a multi-MB upload, and chaining the sweep behind it would leave
// stale stages and superseded version dirs on the remote for its whole duration. The two touch
// different trees (`ripgrep/` is owned by no version GC), and neither delays connect.
- void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome).catch(() => {})
+ // Why deploySignal is safe on a fire-and-forget call: the controller aborts only on the deploy
+ // timeout, never on success, so this cancels a still-running upload when the deploy gives up.
+ void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, {
+ signal: deploySignal
+ }).catch(() => {})
void execHostCommand(
conn,
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index a81d1c4c536f..cdbc5b534269 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -189,12 +189,15 @@ export function probeOrStageCommand(
const bin = shellEscape(layout.binaryPath)
const sweep = `find ${shellEscape(layout.cacheDir)} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
const stage = makeRelayUploadStageDirectoryCommand(stageNamespace, host, stageDir)
- return `if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${sweep}; ${stage} && echo ${STAGED}; fi`
+ // Why the sweep runs before the branch, not inside the else: once rg is installed every later
+ // deploy takes the PRESENT path, so a stage orphaned by a dropped connection would never be
+ // collected. It stays one exec round trip either way.
+ return `${sweep}; if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${stage} && echo ${STAGED}; fi`
}
return powerShellCommand(
[
- `if (${windowsInstalledTest(powerShellLiteral(layout.binaryPath), bytes)}) { '${PRESENT}' } else {`,
`Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -Filter '${UPLOAD_STAGE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-${STALE_UPLOAD_STAGE_MINUTES}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
+ `if (${windowsInstalledTest(powerShellLiteral(layout.binaryPath), bytes)}) { '${PRESENT}' } else {`,
`$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(joinRemotePath(host, stageDir, 'payload'))} -ErrorAction Stop`,
`'${STAGED}' }`
].join('\n')
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index b0f4e7913f58..6c1bd95ccdd1 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -133,6 +133,22 @@ export async function isRipgrepUnavailableAfterLaunchFailure(cwd: string): Promi
return !(await checkRipgrepAvailableWithoutCwd())
}
+/**
+ * Exit code the WSL wrapper uses when it cannot enter the search root. Why a dedicated code:
+ * ripgrep exits 1 for "no matches", so without this an unreachable workspace would report an
+ * empty listing as a successful scan. Picked above ripgrep's own 0/1/2 and clear of the shell's
+ * 126/127 and 128+signal range.
+ */
+export const RIPGREP_MISSING_CWD_EXIT_CODE = 97
+
+export function isRipgrepMissingCwdExit(code: number | null): boolean {
+ return code === RIPGREP_MISSING_CWD_EXIT_CODE
+}
+
+export function ripgrepMissingCwdError(cwd: string): Error {
+ return new Error(`Search root is not reachable: ${cwd}`)
+}
+
export function isRipgrepUnavailableExit(
child: ChildProcess,
code: number | null,
From 5d2152f3e94040e3aa70f0870d512521a6686f43 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 16:40:18 -0700
Subject: [PATCH 09/25] fix(search): name the unreachable root in every
handler, not three of four
Round-two review caught that the missing-cwd branch in scanRipgrepPaths sat
AFTER isRipgrepUnavailableExit, which classifies any code above 2 as a broken
install -- so for exit 97 it was dead code and Quick Open still told the user to
reinstall Orca. Reordered; all four handlers now check it first.
Also from review:
- A vanished workspace makes spawn fail with ENOENT, which read as a damaged
install on every local path. Confirm the cwd with isRipgrepSpawnCwdUsable --
the guard the relay already applies -- before blaming the binary. The async
continuation re-checks `resolved`, because finish() drops its argument once
settled and the rejected promise would otherwise go unhandled.
- bundledRipgrepCommand returned a bare 'rg' for an arch outside the bundled
set, bypassing the guard that exists so Windows cannot resolve a bare name
against the repo cwd. A packaged app now always names an absolute path.
Drop ci-shards/unit-assignment.json, a 9,425-line CI artifact swept in from
reproducing a shard locally, and gitignore the directory that produced it.
The "rg genuinely cannot start" test pointed at a synthetic /repo, which the
new guard correctly reports as unreachable; it now resolves to a real root so
it still tests what its name says.
---
.gitignore | 3 +
ci-shards/unit-assignment.json | 9425 -----------------
src/main/ipc/filesystem-list-files.ts | 9 +-
.../ipc/filesystem-search-file-paths.test.ts | 3 +
src/main/ipc/filesystem-search-file-paths.ts | 29 +-
.../filesystem/filesystem-search-handlers.ts | 16 +-
src/main/ripgrep/bundled-ripgrep-path.ts | 20 +-
...ile-commands-search-local-runtime-files.ts | 18 +-
src/shared/bundled-ripgrep.ts | 3 +-
9 files changed, 78 insertions(+), 9448 deletions(-)
delete mode 100644 ci-shards/unit-assignment.json
diff --git a/.gitignore b/.gitignore
index 6799b25607b4..5e05c6d30507 100644
--- a/.gitignore
+++ b/.gitignore
@@ -197,3 +197,6 @@ tests/e2e/.cross-version-checkouts/
# Generated by config/scripts/sync-anti-slop-plugin.mjs from the pinned oxlint-plugin-anti-slop
.anti-slop-plugin/
+
+# Generated by the CI unit-test sequencer (and by reproducing a shard locally).
+ci-shards/
diff --git a/ci-shards/unit-assignment.json b/ci-shards/unit-assignment.json
deleted file mode 100644
index c597d7c9bdbf..000000000000
--- a/ci-shards/unit-assignment.json
+++ /dev/null
@@ -1,9425 +0,0 @@
-{
- "sourceSha": "ede2838c0c16735068e29ee3ef2ee03bd5427bbe",
- "runId": null,
- "runAttempt": null,
- "algorithm": "file-lpt-v1",
- "fallbackMs": 23,
- "overheadMs": 526,
- "shards": [
- {
- "files": [
- "config/scripts/assert-github-release-is-draft.test.mjs",
- "config/scripts/benchmark-sample-summary.test.mjs",
- "config/scripts/check-ts-nocheck-ratchet.test.mjs",
- "config/scripts/ci-e2e-shard-selection.test.mjs",
- "config/scripts/ci-native-toolchain.test.mjs",
- "config/scripts/dev-channel-base-version.test.mjs",
- "config/scripts/electron-builder-speech-config.test.mjs",
- "config/scripts/electron-runtime-floor.test.ts",
- "config/scripts/headless-serve-shutdown-workflow.test.mjs",
- "config/scripts/hourly-build-version.test.mjs",
- "config/scripts/install-node-dependencies-action.test.mjs",
- "config/scripts/mobile-mirrored-storage-write-path.test.mjs",
- "config/scripts/mobile-web-app-editable-host-font-size.test.mjs",
- "config/scripts/mobile-web-app-html-preview-render.test.mjs",
- "config/scripts/mobile-web-app-screencast-lane-grant.test.mjs",
- "config/scripts/mobile-web-app-session-webview-consumers.test.mjs",
- "config/scripts/mobile-web-app-terminal-render-fixture.test.mjs",
- "config/scripts/mobile-web-source-line-endings.test.mjs",
- "config/scripts/pr-test-loc-summary.test.mjs",
- "config/scripts/regenerate-xterm-patches.test.mjs",
- "config/scripts/release-cut-signpath-slack.test.mjs",
- "config/scripts/script-module-dependencies.test.mjs",
- "config/scripts/shared-electron-dist-cache.test.ts",
- "config/scripts/terminal-ime-engagement-receipt.test.mjs",
- "config/scripts/verify-packaged-node-pty-job-ownership.test.mjs",
- "src/cli/agent-context.test.ts",
- "src/cli/agent-session-search-format.test.ts",
- "src/cli/automation-owner-conflict-recovery.test.ts",
- "src/cli/command-suggestion.test.ts",
- "src/cli/computer-format.test.ts",
- "src/cli/emulator-logcat-format.test.ts",
- "src/cli/handlers/computer.test.ts",
- "src/cli/handlers/orchestration-gate-cli.test.ts",
- "src/cli/handlers/orchestration-send-receipt-warnings.test.ts",
- "src/cli/handlers/orchestration-task-create-cli.test.ts",
- "src/cli/handlers/orchestration-task-list-brief.test.ts",
- "src/cli/handlers/orchestration-worker-cli.test.ts",
- "src/cli/index-automation-identifiers.test.ts",
- "src/cli/index-automation-session-reuse.test.ts",
- "src/cli/index-local-command-routing-flags.test.ts",
- "src/cli/index-orchestration.test.ts",
- "src/cli/linear-format.test.ts",
- "src/cli/orchestration-mutation-recovery.test.ts",
- "src/cli/runtime/types.test.ts",
- "src/cli/specs/bundled-guide-flags.test.ts",
- "src/cli/terminal-format-draft.test.ts",
- "src/main/agent-hooks/first-work-folder-rename.test.ts",
- "src/main/agent-hooks/managed-hook-owner-identity.test.ts",
- "src/main/agent-hooks/managed-hook-script-refresh-main-thread.test.ts",
- "src/main/agent-hooks/manual-compact-hook-stream.test.ts",
- "src/main/agent-hooks/migration-unsupported-pty-state.test.ts",
- "src/main/agent-hooks/posix-hook-json-stdin-reader.test.ts",
- "src/main/agent-hooks/server-codex-normalization.test.ts",
- "src/main/agent-hooks/server-interrupt-inference-guards.test.ts",
- "src/main/agent-hooks/server-interrupt-inference-validation.test.ts",
- "src/main/agent-hooks/server-pane-authority.test.ts",
- "src/main/agent-hooks/server-transport-interference.test.ts",
- "src/main/agent-launch/agent-launch-executor.test.ts",
- "src/main/ai-vault-search/session-search-index-generation.test.ts",
- "src/main/ai-vault-search/session-search-index-pass.test.ts",
- "src/main/ai-vault-search/session-search-scope-resolution.test.ts",
- "src/main/ai-vault-search/session-search-synthetic-corpus.test.ts",
- "src/main/ai-vault/remote-session-content-lines.test.ts",
- "src/main/ai-vault/session-delete.test.ts",
- "src/main/ai-vault/session-document-stream-projection.test.ts",
- "src/main/ai-vault/session-newest-files.test.ts",
- "src/main/ai-vault/session-scanner-antigravity-source.test.ts",
- "src/main/ai-vault/session-scanner-codex-title-index.test.ts",
- "src/main/ai-vault/session-scanner-codex-tool-records.test.ts",
- "src/main/ai-vault/session-scanner-devin-db.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-coexistence.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-paths.test.ts",
- "src/main/ai-vault/session-scanner-parse-wsl-stall.test.ts",
- "src/main/ai-vault/session-scanner-record-budget.test.ts",
- "src/main/ai-vault/session-scanner-service-restart-policy.test.ts",
- "src/main/ai-vault/session-transcript-every-agent-capture.test.ts",
- "src/main/ai-vault/session-transcript-message-content.test.ts",
- "src/main/ai-vault/structured-session-ownership.test.ts",
- "src/main/antigravity/hook-service.test.ts",
- "src/main/app-icon.test.ts",
- "src/main/automations/automation-dispatch-host-fence.test.ts",
- "src/main/automations/automation-update-host-retarget.test.ts",
- "src/main/browser/agent-browser-bridge-automation-visibility.test.ts",
- "src/main/browser/agent-browser-bridge-navigation.test.ts",
- "src/main/browser/agent-browser-bridge-pointer-input.test.ts",
- "src/main/browser/browser-client-download-relay.test.ts",
- "src/main/browser/browser-client-file-channel-negotiation.test.ts",
- "src/main/browser/browser-client-page-automation-runtime.test.ts",
- "src/main/browser/browser-client-page-metadata-transport.test.ts",
- "src/main/browser/browser-client-page-renderer-runtime.test.ts",
- "src/main/browser/browser-cookie-import-app-bound-prefix.test.ts",
- "src/main/browser/browser-cookie-import-write.test.ts",
- "src/main/browser/browser-host-client-identity.test.ts",
- "src/main/browser/browser-manager-guest-shortcuts.test.ts",
- "src/main/browser/browser-manager-viewport-override.test.ts",
- "src/main/browser/browser-manager-worker-request-user-agent.test.ts",
- "src/main/browser/browser-network-tunnel-conformance.test.ts",
- "src/main/browser/browser-page-initiated-tab-budget.test.ts",
- "src/main/browser/browser-route-guest-popups.test.ts",
- "src/main/browser/browser-route-identity.test.ts",
- "src/main/browser/browser-route-partition-storage-lifecycle.test.ts",
- "src/main/browser/browser-route-prepared-page-rekey.test.ts",
- "src/main/browser/browser-session-cookie-staging.scoped.test.ts",
- "src/main/browser/browser-text-insertion.test.ts",
- "src/main/browser/cdp-client-response-writer.test.ts",
- "src/main/browser/local-ssh-browser-route.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-runtime.test.ts",
- "src/main/browser/snapshot-engine.test.ts",
- "src/main/browser/ssh-browser-network-execution-route.test.ts",
- "src/main/claude-accounts/claude-account-service-api-parity.test.ts",
- "src/main/claude-accounts/oauth-refresh.test.ts",
- "src/main/claude-usage/claude-usage-report-aggregation.test.ts",
- "src/main/claude/claude-background-task-row-journal.test.ts",
- "src/main/claude/claude-structured-dispatch-boundary.test.ts",
- "src/main/claude/claude-structured-option-confirmation.test.ts",
- "src/main/claude/claude-structured-owner-identity.test.ts",
- "src/main/claude/claude-structured-permission-mode.test.ts",
- "src/main/claude/claude-turn-ownership.test.ts",
- "src/main/cli/appimage-extraction-pruning.test.ts",
- "src/main/cli/cli-installer-appimage-removal.test.ts",
- "src/main/cli/packaged-cli-assets.test.ts",
- "src/main/cli/wsl-cli-registration-operation.test.ts",
- "src/main/codex-accounts/codex-auth-workspace-identity.test.ts",
- "src/main/codex-accounts/legacy-shared-auth-migration.test.ts",
- "src/main/codex-accounts/managed-codex-auth-readiness.test.ts",
- "src/main/codex-accounts/runtime-home-managed-auth-recovery.test.ts",
- "src/main/codex-accounts/runtime-home-session-migration-pass.test.ts",
- "src/main/codex-accounts/sta-4735-unreadable-host-lane-writes.test.ts",
- "src/main/codex-accounts/wsl-codex-command.test.ts",
- "src/main/codex-usage/codex-usage-cost-estimate.test.ts",
- "src/main/codex-usage/store-orca-scope.test.ts",
- "src/main/codex/codex-hooks-read-denial-followup.test.ts",
- "src/main/codex/codex-session-backfill-marker.test.ts",
- "src/main/codex/codex-session-index-heal.test.ts",
- "src/main/codex/codex-session-migration-recent-exits.test.ts",
- "src/main/codex/codex-structured-dispatch-boundary.test.ts",
- "src/main/codex/codex-structured-journal-translation-turn-state.test.ts",
- "src/main/codex/codex-structured-rewind.test.ts",
- "src/main/codex/codex-structured-turn-processes.integration.test.ts",
- "src/main/codex/codex-trust-config-concurrent-launch.test.ts",
- "src/main/codex/config-toml-trust-key.test.ts",
- "src/main/codex/config-toml-trust-project.test.ts",
- "src/main/codex/hook-service-concurrent-launch-install.test.ts",
- "src/main/codex/hook-trust-promotion.test.ts",
- "src/main/codex/windows-hook-command.test.ts",
- "src/main/codex/wsl-codex-session-bridge.test.ts",
- "src/main/computer/computer-action-verification-normalization.test.ts",
- "src/main/computer/desktop-script-provider-action-errors.test.ts",
- "src/main/computer/desktop-script-provider-errors.test.ts",
- "src/main/computer/desktop-script-provider-paste-validation.test.ts",
- "src/main/computer/desktop-script-serve-channel.test.ts",
- "src/main/computer/macos-computer-use-permission-status.test.ts",
- "src/main/computer/macos-native-provider-socket.test.ts",
- "src/main/computer/windows-powershell-execution-policy.test.ts",
- "src/main/crash-reporting/crash-breadcrumb-store-leak.test.ts",
- "src/main/crash-reporting/crash-report-copy-text.test.ts",
- "src/main/crash-reporting/crashpad-capture-read-limit.test.ts",
- "src/main/crash-reporting/process-gone-dedupe.test.ts",
- "src/main/daemon/daemon-adoption-telemetry-event.test.ts",
- "src/main/daemon/daemon-checkpoint-session-queue.test.ts",
- "src/main/daemon/daemon-durable-history-ownership-seed.test.ts",
- "src/main/daemon/daemon-endpoint-ownership.test.ts",
- "src/main/daemon/daemon-health.test.ts",
- "src/main/daemon/daemon-incarnation-evidence.test.ts",
- "src/main/daemon/daemon-init-child-startup-failure.test.ts",
- "src/main/daemon/daemon-init-live-session-preservation.test.ts",
- "src/main/daemon/daemon-init-wedged-daemon-grace.test.ts",
- "src/main/daemon/daemon-pty-adapter-session-adoption.test.ts",
- "src/main/daemon/daemon-pty-write-settlement-recovery.test.ts",
- "src/main/daemon/daemon-reattach-checkpoint-isolation.test.ts",
- "src/main/daemon/daemon-restore-scrollback-depth.test.ts",
- "src/main/daemon/daemon-session-scrollback-window.test.ts",
- "src/main/daemon/daemon-stream-data-batcher.test.ts",
- "src/main/daemon/daemon-stream-data-split.test.ts",
- "src/main/daemon/daemon-stream-droppability-lifecycle.test.ts",
- "src/main/daemon/headless-emulator-restored-osc-links.test.ts",
- "src/main/daemon/post-ready-flush-gate.test.ts",
- "src/main/daemon/pty-subprocess-git-credential-guard.test.ts",
- "src/main/daemon/pty-subprocess.test.ts",
- "src/main/daemon/session.test.ts",
- "src/main/daemon/terminal-checkpoint-writer-bounds.test.ts",
- "src/main/daemon/terminal-history-incremental-restore.test.ts",
- "src/main/daemon/terminal-history-seed-segments.test.ts",
- "src/main/daemon/terminal-history-seed-transfer-registry.test.ts",
- "src/main/daemon/terminal-host-attach-only.test.ts",
- "src/main/daemon/terminal-host-cheap-tier-ps-scan-volume.test.ts",
- "src/main/daemon/terminal-host-concurrent-create.test.ts",
- "src/main/daemon/terminal-host-readiness-reporting.test.ts",
- "src/main/daemon/terminal-host-session-reaping-leak.test.ts",
- "src/main/daemon/terminal-snapshot-serialize-roundtrip.test.ts",
- "src/main/daemon/windows-conpty-warmup.test.ts",
- "src/main/diagnostics/main-thread-churn-probe.test.ts",
- "src/main/dock/unread-badge.test.ts",
- "src/main/emulator/android/android-logcat.test.ts",
- "src/main/emulator/android/android-sdk-discovery.test.ts",
- "src/main/emulator/serve-sim-runtime-materializer.test.ts",
- "src/main/ghostty/mapper-extended.test.ts",
- "src/main/ghostty/theme-resolution.test.ts",
- "src/main/git/command-runner/gh-exec-file-deadline.test.ts",
- "src/main/git/command-runner/git-exec-admission-lifetime.test.ts",
- "src/main/git/command-runner/git-spawn-admission-lifetime.test.ts",
- "src/main/git/command-runner/git-stream-admission-lifetime.test.ts",
- "src/main/git/git-capability-state.test.ts",
- "src/main/git/git-username.test.ts",
- "src/main/git/repo-branch-conflict-real-git.test.ts",
- "src/main/git/repo-remote-drift.test.ts",
- "src/main/git/runner-command-exec.test.ts",
- "src/main/git/status-branch-compare-real-ref.test.ts",
- "src/main/git/status-branch-compare.test.ts",
- "src/main/git/status-branch-line-total-real-git.test.ts",
- "src/main/git/status-diff-settled-cache.test.ts",
- "src/main/git/status-discard-symlink.test.ts",
- "src/main/git/status-upstream-probe-churn.test.ts",
- "src/main/git/worktree-common-dir-comparison.test.ts",
- "src/main/git/worktree-posix-path-case-sensitivity.test.ts",
- "src/main/git/worktree-sparse-checkout.test.ts",
- "src/main/github/client-work-item-check-summary.test.ts",
- "src/main/github/github-api-repository.test.ts",
- "src/main/github/github-repository-identity.gh-account.test.ts",
- "src/main/github/github-repository-identity.signed-cache.test.ts",
- "src/main/github/pr-head-tracking-ref.test.ts",
- "src/main/github/pr-refresh-coordinator-active-visible-priority.test.ts",
- "src/main/github/review-head-remote.test.ts",
- "src/main/gitlab/client-mr-auth-rate-limit.test.ts",
- "src/main/gitlab/client-work-items.test.ts",
- "src/main/gitlab/gitlab-known-host-retirement.test.ts",
- "src/main/hang-watchdog/hang-watchdog-worker-path.test.ts",
- "src/main/hooks-runner.test.ts",
- "src/main/host-tree-removal-asar.electron.test.ts",
- "src/main/ipc/ai-vault-scan-coalescing.test.ts",
- "src/main/ipc/ai-vault-search-all-hosts-real-index.test.ts",
- "src/main/ipc/app.test.ts",
- "src/main/ipc/browser-session-profile-ipc.test.ts",
- "src/main/ipc/browser.test.ts",
- "src/main/ipc/created-worktree-root-prune.test.ts",
- "src/main/ipc/dashboard-payload-validation.test.ts",
- "src/main/ipc/developer-permissions.test.ts",
- "src/main/ipc/diagnostics.test.ts",
- "src/main/ipc/ephemeral-vm-runtime-handler-cleanup.test.ts",
- "src/main/ipc/ephemeral-vm.test.ts",
- "src/main/ipc/feedback-image-attachments.test.ts",
- "src/main/ipc/filesystem-git-commit-dispatch.test.ts",
- "src/main/ipc/filesystem-import-ssh.test.ts",
- "src/main/ipc/filesystem-mutations-runtime-upload.test.ts",
- "src/main/ipc/filesystem-watcher-ignore.test.ts",
- "src/main/ipc/native-chat.test.ts",
- "src/main/ipc/notebook.test.ts",
- "src/main/ipc/parcel-watcher-event-cancellation.test.ts",
- "src/main/ipc/pet-bundle.test.ts",
- "src/main/ipc/pet.test.ts",
- "src/main/ipc/preflight-agent-refresh.test.ts",
- "src/main/ipc/pty-activation-inventory-scope.test.ts",
- "src/main/ipc/pty-daemon-controller-teardown.test.ts",
- "src/main/ipc/pty-daemon-spawn-codex-auth.test.ts",
- "src/main/ipc/pty-global-renderer-credit.test.ts",
- "src/main/ipc/pty-ipc-producer-flow-control.test.ts",
- "src/main/ipc/pty-ssh-undelivered-kill.test.ts",
- "src/main/ipc/pty/runtime/queried-host-kinds.test.ts",
- "src/main/ipc/pty/runtime/spawn-preflight-requested-shell.test.ts",
- "src/main/ipc/remote-workspace-cache.test.ts",
- "src/main/ipc/remote-workspace-patch-queue.test.ts",
- "src/main/ipc/remote-workspace-stale-resync.test.ts",
- "src/main/ipc/repos-add-linked-worktree.test.ts",
- "src/main/ipc/repos-sparse-presets.test.ts",
- "src/main/ipc/runtime-environments-status-diagnostics.test.ts",
- "src/main/ipc/runtime-environments-subscription-routing.test.ts",
- "src/main/ipc/runtime-subscribe-lifecycle.test.ts",
- "src/main/ipc/runtime-upload-slice-boundaries.test.ts",
- "src/main/ipc/ssh-pty-model-admission.test.ts",
- "src/main/ipc/ssh-pty-source-ack-coalescer.test.ts",
- "src/main/ipc/ssh-state-broadcast-fanout.test.ts",
- "src/main/ipc/watched-worktree-catalog-notification.test.ts",
- "src/main/ipc/workspace-space.test.ts",
- "src/main/ipc/worktree-base-directory-watcher.test.ts",
- "src/main/ipc/worktree-git-common-polling.test.ts",
- "src/main/ipc/worktree-logic-created-agent.test.ts",
- "src/main/ipc/worktree-push-target-refspec-migration.test.ts",
- "src/main/ipc/worktree-push-target-setup.test.ts",
- "src/main/ipc/worktree-watcher-removal-binding.test.ts",
- "src/main/ipc/worktrees-create-execution-host-routing.test.ts",
- "src/main/ipc/worktrees-lineage-hydration.test.ts",
- "src/main/ipc/worktrees-ssh-branch-conflict-suffixing.test.ts",
- "src/main/ipc/worktrees/listing/detected-provider-listing-meta-index.test.ts",
- "src/main/ipc/worktrees/listing/detected-worktree-scan-hygiene-gate.test.ts",
- "src/main/ipc/worktrees/listing/detected-worktree-scan-superseded.test.ts",
- "src/main/jira/jira-issue-mutations.test.ts",
- "src/main/keybindings/keybinding-service.test.ts",
- "src/main/linear/issue-search-summary.test.ts",
- "src/main/linux-package-install-diagnostic.test.ts",
- "src/main/local-worktree-removal-recovery.test.ts",
- "src/main/macos-press-and-hold-default.defaults-domain.test.ts",
- "src/main/menu/gpu-acceleration-about-panel.test.ts",
- "src/main/native-chat/agent-session-journal/journal-dispatch-reason-bound.test.ts",
- "src/main/native-chat/agent-session-journal/journal-epoch-replacement.test.ts",
- "src/main/native-chat/agent-session-journal/journal-row-schema.test.ts",
- "src/main/native-chat/agent-session-journal/journal-row-writer.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-claude-root-exit.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-ownership.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-send-idempotency.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-send-settlement.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-send.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-status-feed.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-task-queue.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-turns.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-unanswered-dispatch-release.test.ts",
- "src/main/native-chat/agent-session-wire/structured-conversation-replacements.test.ts",
- "src/main/native-chat/native-chat-file-provenance.test.ts",
- "src/main/native-chat/session-file-resolver-wsl-scan-gate.test.ts",
- "src/main/native-chat/transcript-fallback-id.test.ts",
- "src/main/native-chat/transcript-line-decoders-claude-control-bytes.test.ts",
- "src/main/native-chat/wsl-transcript-fs-gate.test.ts",
- "src/main/native-chat/wsl-transcript-running-observer.test.ts",
- "src/main/opencode-usage/scanner-windows-data-directory.test.ts",
- "src/main/opencode-usage/scanner.test.ts",
- "src/main/opencode/hook-plugin-message-part-throttle.test.ts",
- "src/main/opencode/hook-plugin-module-contract.test.ts",
- "src/main/orca-profiles/profile-artifact-cloud-cleanup.test.ts",
- "src/main/orca-profiles/profile-cloud-dev-service.test.ts",
- "src/main/orcad/electron-serve-browser-process.test.ts",
- "src/main/orcad/node-pty-prebuilt-slot.test.ts",
- "src/main/orcad/orcad-sidecar-runtime-client.test.ts",
- "src/main/persistence-cross-host-pane-identity.test.ts",
- "src/main/persistence-feature-interaction-broadcast.benchmark.test.ts",
- "src/main/persistence-initial-load.test.ts",
- "src/main/persistence-ssh-readoption-automation-migration.test.ts",
- "src/main/persistence-ssh-targets-and-pane-keys.test.ts",
- "src/main/persistence-worktree-visibility.test.ts",
- "src/main/persistence/loading-store/worktree-meta-write-normalization.test.ts",
- "src/main/persistence/tracking-repos/probeable-local-worktree-metadata-candidates.test.ts",
- "src/main/persistence/tracking-repos/project-host-compatibility.test.ts",
- "src/main/pi/agent-status-extension-omp-model.test.ts",
- "src/main/pi/titlebar-extension-overlay-path.test.ts",
- "src/main/plugins/plugin-audit-log-scaling.test.ts",
- "src/main/plugins/plugin-enablement.test.ts",
- "src/main/plugins/plugin-panel-owner-lifecycle.test.ts",
- "src/main/plugins/plugin-uninstall-log-retention.test.ts",
- "src/main/plugins/plugin-worker-controller.test.ts",
- "src/main/plugins/plugin-worker-env.test.ts",
- "src/main/project-groups/nested-repo-import-target.test.ts",
- "src/main/project-runtime-git-options.test.ts",
- "src/main/providers/agent-foreground-process-ps-scan-volume.test.ts",
- "src/main/providers/agent-foreground-process.test.ts",
- "src/main/providers/local-pty-default-shell.test.ts",
- "src/main/providers/local-pty-provider-io-events.test.ts",
- "src/main/providers/local-pty-provider-spawn-cwd-safety.test.ts",
- "src/main/providers/local-pty-provider-spawn-env.test.ts",
- "src/main/providers/ssh-filesystem-doc-preview.test.ts",
- "src/main/providers/ssh-filesystem-provider-download-folder.test.ts",
- "src/main/providers/ssh-git-provider-staging.test.ts",
- "src/main/providers/ssh-pty-provider-spawn.test.ts",
- "src/main/pty/omp-sqlite-overlay.test.ts",
- "src/main/pty/overlay-mirror.test.ts",
- "src/main/pty/posix-pty-foreground-group.test.ts",
- "src/main/rate-limits/claude-fetcher-cli-fallback.test.ts",
- "src/main/rate-limits/codex-rate-limit-window-classification.test.ts",
- "src/main/rate-limits/gemini-bucket-formatting.test.ts",
- "src/main/rate-limits/hidden-pty-cleanup.test.ts",
- "src/main/repo-git-remote-identity.test.ts",
- "src/main/repo-icon-autodetect.test.ts",
- "src/main/repo-icon-file-detection.test.ts",
- "src/main/runtime/agent-session-handoff-lease-transitions.test.ts",
- "src/main/runtime/agent-session-record-store-security.test.ts",
- "src/main/runtime/agent-session-restart-handoff-adjudication.test.ts",
- "src/main/runtime/browser-host-client-page-adoption.test.ts",
- "src/main/runtime/browser-host-file-channel-admission.test.ts",
- "src/main/runtime/browser-tab-create-caller-navigation.test.ts",
- "src/main/runtime/client-hosted-page-reconciliation-window.test.ts",
- "src/main/runtime/fetch-remote-cache.test.ts",
- "src/main/runtime/graph-sync-live-daemon-pty-tab-preservation.test.ts",
- "src/main/runtime/headless-tab-group-split-layout.test.ts",
- "src/main/runtime/headless-tab-order-stability.test.ts",
- "src/main/runtime/mobile-session-terminal-persistence-retirement.test.ts",
- "src/main/runtime/mobile-session-terminal-retirement.test.ts",
- "src/main/runtime/multi-client-navigation-isolation.integration.test.ts",
- "src/main/runtime/orca-runtime-agent-session-operation.test.ts",
- "src/main/runtime/orca-runtime-browser-screencast-fanout.test.ts",
- "src/main/runtime/orca-runtime-create-base-prefetch.test.ts",
- "src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts",
- "src/main/runtime/orca-runtime-files-search.test.ts",
- "src/main/runtime/orca-runtime-files-terminal-artifact-grants.test.ts",
- "src/main/runtime/orca-runtime-files-terminal-artifact-io.test.ts",
- "src/main/runtime/orca-runtime-files-terminal-artifact-swap-detection.test.ts",
- "src/main/runtime/orca-runtime-files-terminal-path-resolution.test.ts",
- "src/main/runtime/orca-runtime-module-size.test.ts",
- "src/main/runtime/orca-runtime-structured-claude-account-gate.test.ts",
- "src/main/runtime/orca-runtime-tab-id-collision.test.ts",
- "src/main/runtime/orchestration/coordinator.test.ts",
- "src/main/runtime/orchestration/db/decision-gate-lifecycle.test.ts",
- "src/main/runtime/orchestration/db/federation/remote-dispatch-attachment-release.test.ts",
- "src/main/runtime/orchestration/db/run-list-cursor.test.ts",
- "src/main/runtime/orchestration/db/schema/structured-pointer-schema-migration.test.ts",
- "src/main/runtime/orchestration/federation-acknowledgment-migration.test.ts",
- "src/main/runtime/orchestration/nested-worker-depth-migration.test.ts",
- "src/main/runtime/orchestration/orchestration-adopted-run-binding.test.ts",
- "src/main/runtime/orchestration/orchestration-all-start-versions-migration.test.ts",
- "src/main/runtime/orchestration/orchestration-creator-authority-performance.test.ts",
- "src/main/runtime/orchestration/orchestration-derived-delivery.test.ts",
- "src/main/runtime/orchestration/orchestration-worker-dispatch-db.test.ts",
- "src/main/runtime/orchestration/structured-mailbox-pointer-delivery.test.ts",
- "src/main/runtime/orchestration/structured-mailbox-pointer-host.test.ts",
- "src/main/runtime/orchestration/structured-worker-journal-archive.test.ts",
- "src/main/runtime/orchestration/worker-attention-context.test.ts",
- "src/main/runtime/pty-exit-agent-status-reconciliation.test.ts",
- "src/main/runtime/push/push-agent-state.test.ts",
- "src/main/runtime/push/push-cleanup-auth-expiry.test.ts",
- "src/main/runtime/recent-pty-output-retention.test.ts",
- "src/main/runtime/relay/relay-region-probe-log.test.ts",
- "src/main/runtime/remote-runtime-close-intent.integration.test.ts",
- "src/main/runtime/repo-worktree-admin-fingerprint.test.ts",
- "src/main/runtime/repo-worktree-row-resolution.test.ts",
- "src/main/runtime/rpc/e2ee-channel.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-terminal-identity.test.ts",
- "src/main/runtime/rpc/methods/ai-vault.test.ts",
- "src/main/runtime/rpc/methods/client-ui-pairing-local-fields.test.ts",
- "src/main/runtime/rpc/methods/client-ui-task-resume-state.test.ts",
- "src/main/runtime/rpc/methods/files-watch-cancellation.test.ts",
- "src/main/runtime/rpc/methods/mobile-web-bundle-window-refusals.test.ts",
- "src/main/runtime/rpc/methods/orchestration-structured-worker-start-failure.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-mode-opacity.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-support-unknown.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-effects.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-start-prompt-budget.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-start-schema.test.ts",
- "src/main/runtime/rpc/methods/orchestration/gates/gates.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/check-worker-federated-attachment.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/settled-dispatch-mail.test.ts",
- "src/main/runtime/rpc/methods/orchestration/runs/tasks-dispatch.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/agent-status-producer-census.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-interactive-wait.test.ts",
- "src/main/runtime/rpc/methods/session-tab-agent-status-projection.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-background-task-capability.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-hold.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-precommit-refusal.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-turn-item-capability.test.ts",
- "src/main/runtime/rpc/methods/terminal-legacy-stream-id-characterization.test.ts",
- "src/main/runtime/rpc/methods/terminal-read-screen-cursor.test.ts",
- "src/main/runtime/rpc/methods/terminal/terminal-inspect-process-params.test.ts",
- "src/main/runtime/rpc/methods/workspace-cleanup-ui-schema.test.ts",
- "src/main/runtime/rpc/mobile-socket-wiring.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-question-takeover.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-run-routing.test.ts",
- "src/main/runtime/rpc/runtime-client-capabilities.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-pty-wait-capacity.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-source-range-admission.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-renderer-recovery-output.test.ts",
- "src/main/runtime/runtime-git-target-execution-host.test.ts",
- "src/main/runtime/runtime-linear-read-commands.test.ts",
- "src/main/runtime/runtime-local-create-rearm-ordering.test.ts",
- "src/main/runtime/runtime-managed-worktree-metadata.test.ts",
- "src/main/runtime/runtime-mobile-file-path-search.test.ts",
- "src/main/runtime/runtime-project-host-setup-controller.test.ts",
- "src/main/runtime/runtime-unregistered-worktree-removal-host-home.test.ts",
- "src/main/runtime/runtime-worktree-agent-sources.test.ts",
- "src/main/runtime/runtime-worktree-agent-startup.test.ts",
- "src/main/runtime/structured-worker-terminal-read.test.ts",
- "src/main/runtime/terminal-leaf-tab-resolution.test.ts",
- "src/main/runtime/terminal-list-payload-size.test.ts",
- "src/main/runtime/terminal-list-stale-leaf-liveness.test.ts",
- "src/main/runtime/terminal-pty-exit-waiter.test.ts",
- "src/main/runtime/terminal-subscriber-driven-daemon-attach.test.ts",
- "src/main/runtime/terminal-wait-tail-window.test.ts",
- "src/main/runtime/wait-blocked-keyword-carry-retention.test.ts",
- "src/main/runtime/worktree-ps-degraded-repo-scan.test.ts",
- "src/main/runtime/worktree-rm-id-selector-path-spelling.test.ts",
- "src/main/runtime/worktree-teardown-unstopped-pty.test.ts",
- "src/main/runtime/worktree-terminal-mutation-lock.test.ts",
- "src/main/server/serve-readiness.test.ts",
- "src/main/skills/discovery-source-filter-order.test.ts",
- "src/main/skills/skill-cloud-request.test.ts",
- "src/main/skills/skill-delete/staging-visibility.test.ts",
- "src/main/skills/skill-discovery-wsl-plugins.test.ts",
- "src/main/skills/skill-git-tree-identity.test.ts",
- "src/main/skills/skill-install-provenance.test.ts",
- "src/main/skills/skill-install-recovery.test.ts",
- "src/main/skills/skill-install-service.test.ts",
- "src/main/skills/skill-placement-copy-drift.test.ts",
- "src/main/skills/skill-process-contention.integration.test.ts",
- "src/main/skills/skill-provider-destinations.test.ts",
- "src/main/skills/skill-runtime-capability.test.ts",
- "src/main/skills/skill-update-outcome.test.ts",
- "src/main/skills/skill-wsl-install-transaction.integration.test.ts",
- "src/main/source-control/hosted-review-creation-eligibility.test.ts",
- "src/main/source-control/hosted-review-creation.test.ts",
- "src/main/source-control/repo-default-branch.test.ts",
- "src/main/source-control/stacked-hosted-review-creation.test.ts",
- "src/main/speech/model-catalog.test.ts",
- "src/main/speech/model-manager-download-resume.test.ts",
- "src/main/ssh/orcad-remote-rollback.test.ts",
- "src/main/ssh/relay-native-dependency-coverage.test.ts",
- "src/main/ssh/relay-socket-path-limit.test.ts",
- "src/main/ssh/ssh-config-parser.test.ts",
- "src/main/ssh/ssh-connection-channel-open.test.ts",
- "src/main/ssh/ssh-connection-direct-startup.test.ts",
- "src/main/ssh/ssh-multi-key-authentication.test.ts",
- "src/main/ssh/ssh-relay-deploy.test.ts",
- "src/main/ssh/ssh-relay-endpoint-incumbent.test.ts",
- "src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts",
- "src/main/ssh/ssh-relay-offline-node-headers.docker.test.ts",
- "src/main/ssh/ssh-relay-session-pending-kill-replay.test.ts",
- "src/main/ssh/ssh-relay-session.test.ts",
- "src/main/ssh/ssh-relay-upload-stage-commands.test.ts",
- "src/main/ssh/ssh-relay-versioned-install.test.ts",
- "src/main/ssh/ssh-remote-cli-terminal-host-scope.test.ts",
- "src/main/ssh/ssh-remote-linear-activity-output.test.ts",
- "src/main/ssh/ssh-remote-linear-cli.test.ts",
- "src/main/ssh/ssh-remote-linear-truncation-output.test.ts",
- "src/main/ssh/ssh-remote-node-resolution.test.ts",
- "src/main/ssh/ssh-remote-platform-detection.test.ts",
- "src/main/ssh/ssh-remote-platform.test.ts",
- "src/main/ssh/ssh-target-readoption.test.ts",
- "src/main/ssh/system-ssh-binary.test.ts",
- "src/main/ssh/system-ssh-sftp-args.test.ts",
- "src/main/startup/bootstrap-fatal-exit-guard.test.ts",
- "src/main/startup/cli-launch-redirect.test.ts",
- "src/main/startup/configure-process-dev-parent-shutdown.test.ts",
- "src/main/startup/run-electron-vite-dev-web.test.ts",
- "src/main/startup/serve-mode-argv-cli-redirect-order.test.ts",
- "src/main/startup/windows-shell-path-restoration.windows.test.ts",
- "src/main/synthetic-title-visibility.test.ts",
- "src/main/text-generation/commit-message-text-generation-generated-output.test.ts",
- "src/main/updater-prerelease-feed-readiness.test.ts",
- "src/main/updater.check-settlement.test.ts",
- "src/main/updater.headless-serve-install.test.ts",
- "src/main/updater.startup-scheduling.test.ts",
- "src/main/usage-worktree-canonicalizer.test.ts",
- "src/main/usage/usage-breakdown-scaling.test.ts",
- "src/main/usage/usage-scan-worker-event-loop.test.ts",
- "src/main/usage/usage-worktree-refs.test.ts",
- "src/main/window/clipboard-image-thumbnail.test.ts",
- "src/main/window/clipboard-remote-file-staging.test.ts",
- "src/main/window/terminal-tab-close-request-relay.test.ts",
- "src/main/windows-descendant-exit-verification.test.ts",
- "src/main/windows/windows-msys-job.win32.test.ts",
- "src/main/windows/windows-pty-job.test.ts",
- "src/main/workspace-cleanup-removal-snapshot-prune.test.ts",
- "src/main/worktree-removal-execution-host-route.test.ts",
- "src/main/worktree-root-preparation.test.ts",
- "src/main/wsl-approved-root-race.wsl.test.ts",
- "src/preload/api/platform-bridge.test.ts",
- "src/preload/app-restart-checkpoint-routing.test.ts",
- "src/preload/close-active-tab-payload-admission.test.ts",
- "src/preload/ssh-authority-forwarding.test.ts",
- "src/relay/agent-hook-retired-pane-suppression.test.ts",
- "src/relay/dispatcher-structured-error.test.ts",
- "src/relay/external-automations-handler.test.ts",
- "src/relay/fs-handler-stream.test.ts",
- "src/relay/git-exec-validator.test.ts",
- "src/relay/git-handler-blob-readers.test.ts",
- "src/relay/git-handler-branch-cleanup.test.ts",
- "src/relay/git-handler-push-target.test.ts",
- "src/relay/git-handler-status-ops.test.ts",
- "src/relay/git-status-branch-line-total.test.ts",
- "src/relay/hermes-run-correlation.test.ts",
- "src/relay/legacy-relay-publication-ledger.test.ts",
- "src/relay/omp-config-root.test.ts",
- "src/relay/pty-source-credit-ledger.test.ts",
- "src/relay/relay-pty-source-cancellation-exit.test.ts",
- "src/relay/relay-reconnect-listener-credential-gate.test.ts",
- "src/relay/relay-watch-root-capacity.test.ts",
- "src/relay/windows-port-scan.win32.test.ts",
- "src/relay/workspace-space-scan-du-capacity.test.ts",
- "src/relay/wsl-agent-hook-relay.test.ts",
- "src/relay/wsl-hook-fs-bridge.test.ts",
- "src/renderer/src/app-shell/shutdown-checkpoint-restart-lifecycle.test.ts",
- "src/renderer/src/app-startup-routing.test.ts",
- "src/renderer/src/assets/rich-markdown-task-list-style.test.ts",
- "src/renderer/src/components/AgentWorkingSpinner.test.tsx",
- "src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx",
- "src/renderer/src/components/NewWorkspaceComposerCard.test.tsx",
- "src/renderer/src/components/TerminalSearch.test.tsx",
- "src/renderer/src/components/activity/activity-event-builder.bounded-history.test.ts",
- "src/renderer/src/components/activity/activity-thread-presentation.test.ts",
- "src/renderer/src/components/activity/dev-activity-fixture.test.ts",
- "src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.test.ts",
- "src/renderer/src/components/artifacts/artifact-display-labels.test.ts",
- "src/renderer/src/components/automations/AutomationTimeField.test.tsx",
- "src/renderer/src/components/automations/AutomationsDetailPane.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.create-destination.test.tsx",
- "src/renderer/src/components/automations/automation-host-list-rows.test.ts",
- "src/renderer/src/components/automations/automation-legacy-schedule-editing.test.ts",
- "src/renderer/src/components/automations/automation-run-history-keyboard-navigation.test.ts",
- "src/renderer/src/components/automations/automation-run-output-snapshot-equivalence.test.ts",
- "src/renderer/src/components/automations/automation-runs-dashboard-model.test.ts",
- "src/renderer/src/components/automations/external-automation-scope-keys.test.ts",
- "src/renderer/src/components/automations/use-automation-list-focus-recovery.test.tsx",
- "src/renderer/src/components/automations/use-automation-list-search.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-egress-indicator.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/context-menu-positioning.test.ts",
- "src/renderer/src/components/browser-pane/browser-client-page-retained-registry.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-webview-surface.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-worktree-surface-paintability.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/use-browser-page-viewport-scroll-reporting.test.tsx",
- "src/renderer/src/components/browser-pane/navigate/browser-address-bar-navigation.test.ts",
- "src/renderer/src/components/browser-pane/navigate/use-browser-page-reload-actions.test.tsx",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-frame-style.test.ts",
- "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-document-identity.test.ts",
- "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-external-link-confirmation.test.ts",
- "src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.lazy-ref.test.tsx",
- "src/renderer/src/components/cmd-j/palette-filter-options.test.ts",
- "src/renderer/src/components/cmd-j/palette-live-status.test.tsx",
- "src/renderer/src/components/codex-restart-notice-key.test.ts",
- "src/renderer/src/components/comment-code-context-state.test.ts",
- "src/renderer/src/components/contextual-tours/ContextualTourOverlay.visibility.test.tsx",
- "src/renderer/src/components/contextual-tours/contextual-tour-floating-position.test.ts",
- "src/renderer/src/components/contextual-tours/request-contextual-tour-when-ready.test.ts",
- "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.option-dead-key.test.tsx",
- "src/renderer/src/components/dashboard-popout/dashboard-agent-status-patch.test.ts",
- "src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts",
- "src/renderer/src/components/dashboard-popout/useDashboardSnapshot.test.tsx",
- "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.allocation.test.ts",
- "src/renderer/src/components/dashboard/useDashboardPopoutBridge.test.tsx",
- "src/renderer/src/components/editor/ChangesModeView.test.tsx",
- "src/renderer/src/components/editor/EditorContent.markdown-classification.test.tsx",
- "src/renderer/src/components/editor/EditorPanelHeaderPath.test.tsx",
- "src/renderer/src/components/editor/EditorPanelShell.header.test.tsx",
- "src/renderer/src/components/editor/ExternalFileChangeBanner.test.tsx",
- "src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts",
- "src/renderer/src/components/editor/closed-editor-view-state-retention.test.ts",
- "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-section-cache-match.test.ts",
- "src/renderer/src/components/editor/combined-diff/scroll-viewport/combined-diff-restore-signal-equivalence.test.tsx",
- "src/renderer/src/components/editor/diff-editor-whitespace-options.test.ts",
- "src/renderer/src/components/editor/diff-line-stats.test.ts",
- "src/renderer/src/components/editor/diff-model-swap-view-state.test.ts",
- "src/renderer/src/components/editor/editor-autosave.test.ts",
- "src/renderer/src/components/editor/editor-shortcuts.test.ts",
- "src/renderer/src/components/editor/export-active-markdown.test.ts",
- "src/renderer/src/components/editor/markdown-preview-url-transform.test.ts",
- "src/renderer/src/components/editor/monaco-markdown-doc-link-decorations.offset-scan.test.ts",
- "src/renderer/src/components/editor/monaco-markdown-selection-annotation.test.ts",
- "src/renderer/src/components/editor/raw-markdown-html.blank-run.test.ts",
- "src/renderer/src/components/editor/rich-markdown-auto-focus.test.ts",
- "src/renderer/src/components/editor/rich-markdown-key-handler.test.ts",
- "src/renderer/src/components/editor/rich-markdown-paste-handler.test.ts",
- "src/renderer/src/components/editor/rich-markdown-paste-image.test.ts",
- "src/renderer/src/components/editor/rich-markdown-source-reconcile.test.ts",
- "src/renderer/src/components/editor/rich-markdown-tab-key-handler.test.ts",
- "src/renderer/src/components/editor/rich-markdown-table-keyboard.test.ts",
- "src/renderer/src/components/editor/use-monaco-editor-decorations.doc-link-refresh.test.tsx",
- "src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.test.ts",
- "src/renderer/src/components/emulator-pane/emulator-device-state.test.ts",
- "src/renderer/src/components/emulator-pane/mobile-emulator-hidden-toast.test.tsx",
- "src/renderer/src/components/emulator-pane/mobile-emulator-tab-intro-visibility.test.ts",
- "src/renderer/src/components/error-boundaries/RecoverableRenderErrorBoundary.lazy-chunk.test.tsx",
- "src/renderer/src/components/error-boundaries/RecoverableRenderErrorBoundary.never-landed-reload.test.tsx",
- "src/renderer/src/components/feature-wall/AgentCapabilitiesSetupAction.test.ts",
- "src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx",
- "src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.test.tsx",
- "src/renderer/src/components/feature-wall/feature-wall-usage-tracking.test.ts",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.focus.test.tsx",
- "src/renderer/src/components/floating-terminal/floating-workspace-tab-reorder.test.ts",
- "src/renderer/src/components/jira-create-adf.test.ts",
- "src/renderer/src/components/jira-project-picker-filter.test.ts",
- "src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts",
- "src/renderer/src/components/linear-issue-project-selector.test.tsx",
- "src/renderer/src/components/linear-issue-text-save-plan.test.ts",
- "src/renderer/src/components/linear-issue-workspace-api-parity.test.ts",
- "src/renderer/src/components/link-actions/LinkActionPopover.test.tsx",
- "src/renderer/src/components/mobile/mobile-page-stage.test.ts",
- "src/renderer/src/components/native-chat/NativeChatComposerActions.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.message-rail-windowing.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.turn-indicator.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatTaskList.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-composer-containment.test.ts",
- "src/renderer/src/components/native-chat/native-chat-composer-scope-cache.test.ts",
- "src/renderer/src/components/native-chat/native-chat-composer-state.test.ts",
- "src/renderer/src/components/native-chat/native-chat-live-status.test.ts",
- "src/renderer/src/components/native-chat/native-chat-message-grouping.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pending-occurrence.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pending.test.ts",
- "src/renderer/src/components/native-chat/native-chat-session-option-enrichment.test.ts",
- "src/renderer/src/components/native-chat/structured-agent-question-projection.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-external-attachments.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-messages.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-outbox-admission.test.tsx",
- "src/renderer/src/components/new-workspace/SetProjectLocationDialog.test.tsx",
- "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-provider-boundaries.test.ts",
- "src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx",
- "src/renderer/src/components/onboarding/FeatureSetupInlineTerminal.test.tsx",
- "src/renderer/src/components/onboarding/onboarding-feature-setup.test.ts",
- "src/renderer/src/components/pet/PetOverlay.keyframes.test.tsx",
- "src/renderer/src/components/pet/PetOverlay.pet-switch.test.tsx",
- "src/renderer/src/components/pet/PetOverlay.test.ts",
- "src/renderer/src/components/pet/pet-agent-state.test.ts",
- "src/renderer/src/components/pet/pet-blob-cache.test.ts",
- "src/renderer/src/components/pet/pet-overlay-position.test.ts",
- "src/renderer/src/components/pet/usePetUrl.test.tsx",
- "src/renderer/src/components/pr-check-counts.test.ts",
- "src/renderer/src/components/pr-checks-fix-prompt.test.ts",
- "src/renderer/src/components/pull-request-page-host-boundary.test.ts",
- "src/renderer/src/components/pull-request-page/files/combined-diff-section-index.test.tsx",
- "src/renderer/src/components/quick-open-install-rg-guidance.test.ts",
- "src/renderer/src/components/right-sidebar/AiVaultSessionListBar.test.tsx",
- "src/renderer/src/components/right-sidebar/ChecksPanel.review-header.test.tsx",
- "src/renderer/src/components/right-sidebar/CommitArea.generate.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.push-failure-recovery.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-resume-in-chat.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-review-creation.test.ts",
- "src/renderer/src/components/right-sidebar/commit-failure-dialog-state.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-batch-deletion.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-entries.test.ts",
- "src/renderer/src/components/right-sidebar/local-workspace-port-sections.test.ts",
- "src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts",
- "src/renderer/src/components/right-sidebar/review-cache-entry-selection.test.ts",
- "src/renderer/src/components/right-sidebar/right-sidebar-activity-visibility.test.ts",
- "src/renderer/src/components/right-sidebar/right-sidebar-titlebar-drag-regions.render.test.tsx",
- "src/renderer/src/components/right-sidebar/search-match-open.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control-file-filter.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-hosted-review-creation-eligibility-snapshot.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-primary-action.create-pr-intent.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-primary-action.test.ts",
- "src/renderer/src/components/right-sidebar/source-control/listing/section-header.test.tsx",
- "src/renderer/src/components/right-sidebar/useFileExplorerTree.refresh-projection-churn.test.tsx",
- "src/renderer/src/components/settings/AccountsPane.test.tsx",
- "src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx",
- "src/renderer/src/components/settings/BrowserUserAgentSetting.test.tsx",
- "src/renderer/src/components/settings/GitPane.test.tsx",
- "src/renderer/src/components/settings/KagiSessionLinkForm.test.ts",
- "src/renderer/src/components/settings/LinearAgentSkillGuide.test.tsx",
- "src/renderer/src/components/settings/LocalNetworkConnectionTest.test.tsx",
- "src/renderer/src/components/settings/MobileEmulatorAgentControlRow.test.tsx",
- "src/renderer/src/components/settings/PluginConsentDialog.test.tsx",
- "src/renderer/src/components/settings/PluginMarketplaceSourceDialog.test.tsx",
- "src/renderer/src/components/settings/PrivacyPane.test.ts",
- "src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx",
- "src/renderer/src/components/settings/RuntimeHostAccessForm.test.tsx",
- "src/renderer/src/components/settings/SettingsFormControls.number-field.test.tsx",
- "src/renderer/src/components/settings/SettingsSidebar.test.tsx",
- "src/renderer/src/components/settings/SshTargetForm.test.tsx",
- "src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts",
- "src/renderer/src/components/settings/TerminalContrastSetting.test.tsx",
- "src/renderer/src/components/settings/TerminalPane.pwsh.test.ts",
- "src/renderer/src/components/settings/agent-default-env-draft.test.ts",
- "src/renderer/src/components/settings/bitbucket-integration-card.test.tsx",
- "src/renderer/src/components/settings/cli-install-failure.test.ts",
- "src/renderer/src/components/settings/cli-source-control-integration-cards.test.tsx",
- "src/renderer/src/components/settings/codex-session-source-home-control.test.tsx",
- "src/renderer/src/components/settings/jira-integration-card.test.tsx",
- "src/renderer/src/components/settings/repository-icon-github.test.ts",
- "src/renderer/src/components/settings/settings-deep-link-target-watcher.test.ts",
- "src/renderer/src/components/settings/settings-search-keywords.test.ts",
- "src/renderer/src/components/settings/sparse-preset-date.test.ts",
- "src/renderer/src/components/settings/sparse-preset-operation-error.test.ts",
- "src/renderer/src/components/settings/ssh-target-action-state.test.ts",
- "src/renderer/src/components/settings/task-source-setup-state.test.ts",
- "src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts",
- "src/renderer/src/components/sidebar/SidebarGroupByToggle.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardAgents.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeContextMenu.copy-worktree-name.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeOpenInMenu.test.tsx",
- "src/renderer/src/components/sidebar/active-worktree-focus-after-delete.test.ts",
- "src/renderer/src/components/sidebar/add-repo-browse-authority.test.ts",
- "src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts",
- "src/renderer/src/components/sidebar/delete-worktree-parallel-flow.test.ts",
- "src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts",
- "src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts",
- "src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts",
- "src/renderer/src/components/sidebar/preserved-branch-batch-toast.test.tsx",
- "src/renderer/src/components/sidebar/project-header-drag-commit.test.ts",
- "src/renderer/src/components/sidebar/sidebar-resize-handle.test.ts",
- "src/renderer/src/components/sidebar/use-add-repo-hosted-controller.test.ts",
- "src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx",
- "src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-markdown-isolation.test.ts",
- "src/renderer/src/components/sidebar/worktree-header-section-boundaries.test.ts",
- "src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-host-labels.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-pending-creations.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-pinned-host-labels.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-project-groups.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-project-order.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/listing/host-filtering.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/rows/RepoScanUnavailableIndicator.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/viewport/visible-refresh.test.ts",
- "src/renderer/src/components/sidebar/worktree-manual-order-store-write.test.ts",
- "src/renderer/src/components/stats/usage-daily-chart.test.tsx",
- "src/renderer/src/components/status-bar/NativeChatResumeStatusSegment.test.tsx",
- "src/renderer/src/components/status-bar/codex-status-sign-in.test.tsx",
- "src/renderer/src/components/status-bar/remote-host-connection-status.test.ts",
- "src/renderer/src/components/status-bar/resource-manager-worktree-target.test.ts",
- "src/renderer/src/components/status-bar/usage-provider-settings-target.test.ts",
- "src/renderer/src/components/status-bar/workspace-space-format.test.ts",
- "src/renderer/src/components/tab-bar/BrowserTab.test.tsx",
- "src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx",
- "src/renderer/src/components/tab-bar/TabBarCreateEntry.search.test.tsx",
- "src/renderer/src/components/tab-bar/query-token-match.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-forced-search.test.ts",
- "src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx",
- "src/renderer/src/components/tab-group/useTabGroupTabCloseCommands.structured-session.test.ts",
- "src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.focus.test.ts",
- "src/renderer/src/components/task-page-checks-pill.test.ts",
- "src/renderer/src/components/task-page-github-reviewer-suggestions.test.ts",
- "src/renderer/src/components/task-page-jira-item-source-context.test.ts",
- "src/renderer/src/components/task-page-jira-project-selection.test.ts",
- "src/renderer/src/components/task-page-jira-sort-controls.test.tsx",
- "src/renderer/src/components/task-page-linear-issue-dialog-popover-scroll.test.ts",
- "src/renderer/src/components/task-page-task-creation-drafts.test.ts",
- "src/renderer/src/components/terminal-pane/MobileDriverOverlay.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-completion-replay-guard.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-monitoring-turn-end.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-pending-title-inspection.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-process-cadence.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-stamped-turn-replay.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-steady-state-opt-in.test.ts",
- "src/renderer/src/components/terminal-pane/agent-question-answered-inference.test.ts",
- "src/renderer/src/components/terminal-pane/hidden-reveal-reconciliation.fuzz.test.ts",
- "src/renderer/src/components/terminal-pane/osc52-clipboard-default-on-notice.test.ts",
- "src/renderer/src/components/terminal-pane/paired-reconnect-multi-pane-materialization.test.ts",
- "src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.test.ts",
- "src/renderer/src/components/terminal-pane/pane-title-overlay-rects.test.ts",
- "src/renderer/src/components/terminal-pane/pending-runtime-pane-close.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-deferred-reattach-live-output.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-delivery-gate.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-restore-fit-overflow.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-main-side-effect-authority.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-post-dispose-restore-termination.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-reattach-mode-reset.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-remote-runtime-attach.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-remote-snapshot-source-grid.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-session-liveness.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-ssh-startup-draft-delivery.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-stalled-hidden-restore.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-startup-command-delivery.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-terminal-input-gating.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/reattach-payload-context.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/ssh-session-gone-verdict.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-output-side-effects.test.ts",
- "src/renderer/src/components/terminal-pane/remote-park-reveal-unverifiable-retry.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-deadline-reattach.test.ts",
- "src/renderer/src/components/terminal-pane/split-right-white-screen.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-agent-session-fork.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-bracketed-paste.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-clipboard-event-paste.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-tab-model-identity.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-timer-rearm.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-ctrl-enter.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-delivery-watchdog.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-handler.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-composition-transaction-ownership.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-hangul-terminating-digit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-native-text-forwarder.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-korean-enter-commit-order.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-input-quarantine.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-keyboard-pane-resolution.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-keyboard-search-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-layout-overlay-focus.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-attention-subscriptions.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-host-state-memo.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-executor-default-yield.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-runtime.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-render-desync-frame.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-renderer-policy.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-replay-cursor-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-selection-copy.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-selection-fit-guard.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-snapshot-replay-paint.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-startup-grid-settle.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-title-tracker-parity.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts",
- "src/renderer/src/components/terminal-pane/xterm-write-buffer-stall.repro.test.ts",
- "src/renderer/src/components/terminal-workspace-keydown.test.ts",
- "src/renderer/src/components/terminal/pty-running-work-probe-child-evidence.test.ts",
- "src/renderer/src/components/ui/scroll-area.test.tsx",
- "src/renderer/src/components/window-close-request-coordinator.test.ts",
- "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-browse-state.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal-late-settlement.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-filter-bar.test.tsx",
- "src/renderer/src/hooks/composer-drop-result.test.ts",
- "src/renderer/src/hooks/composer-state/full-submit-orchestration.test.ts",
- "src/renderer/src/hooks/composer-state/multiple-create-reset.test.ts",
- "src/renderer/src/hooks/direct-ssh-reconnect-tokens.test.ts",
- "src/renderer/src/hooks/fork-push-warning.test.ts",
- "src/renderer/src/hooks/ipc-events/browser-request-ipc-bridge.profile-switch.test.ts",
- "src/renderer/src/hooks/programmatic-scroll-marks.test.ts",
- "src/renderer/src/hooks/remote-workspace-session-merge-local-survival.test.ts",
- "src/renderer/src/hooks/remote-workspace-session-merge-parked-scrollback.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-duplicate-tab-repair.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-unplaced-tab-adoption.test.ts",
- "src/renderer/src/hooks/use-clipboard-text-copy-feedback.test.ts",
- "src/renderer/src/hooks/useAutoAckViewedAgent.clock-skew.test.ts",
- "src/renderer/src/hooks/useEditorExternalWatch.test.ts",
- "src/renderer/src/hooks/useEphemeralVmRecipeOptions.test.tsx",
- "src/renderer/src/hooks/useIpcEvents-agent-status-batch-projection.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-pane-teardown.test.ts",
- "src/renderer/src/hooks/useIpcEvents-client-hosted-browser-rows.test.ts",
- "src/renderer/src/hooks/useIpcEvents-close-routing-floating-guest.test.ts",
- "src/renderer/src/hooks/useIpcEvents-close-routing-session-tabs.test.ts",
- "src/renderer/src/hooks/useIpcEvents-lifecycle.test.ts",
- "src/renderer/src/hooks/useIpcEvents-silent-terminal-adoption.test.ts",
- "src/renderer/src/hooks/useMacTccAttributionSeveredNotice.test.tsx",
- "src/renderer/src/hooks/useVirtualizedScrollAnchor.test.ts",
- "src/renderer/src/i18n/plugin-chrome-allowlist.test.ts",
- "src/renderer/src/lib/activate-ai-vault-structured-session.test.ts",
- "src/renderer/src/lib/active-agent-note-send-target-detection.test.ts",
- "src/renderer/src/lib/agent-hibernation-planner.test.ts",
- "src/renderer/src/lib/agent-launch-caller-prompt-transport.test.ts",
- "src/renderer/src/lib/agent-launch-prompt-delivery.test.ts",
- "src/renderer/src/lib/agent-session-fork-context.test.ts",
- "src/renderer/src/lib/agent-session-launch-plan.test.ts",
- "src/renderer/src/lib/agent-status-connection-ownership.test.ts",
- "src/renderer/src/lib/agent-status-evidence-clock.test.ts",
- "src/renderer/src/lib/ai-vault-resume-command.resumable-agent.test.ts",
- "src/renderer/src/lib/ai-vault-tab-title-sync.test.ts",
- "src/renderer/src/lib/app-menu-selection-actions.test.ts",
- "src/renderer/src/lib/browser-cookie-import-toast.test.ts",
- "src/renderer/src/lib/cmd-j-github-url-lookup.test.ts",
- "src/renderer/src/lib/comment-body-submit-state.test.ts",
- "src/renderer/src/lib/connection-context.test.ts",
- "src/renderer/src/lib/diff-comment-compat.test.ts",
- "src/renderer/src/lib/file-preview.test.ts",
- "src/renderer/src/lib/fix-checks-agent-launch.test.ts",
- "src/renderer/src/lib/floating-terminal.test.ts",
- "src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts",
- "src/renderer/src/lib/hook-command-delayed-delivery.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-verdict-union.test.ts",
- "src/renderer/src/lib/http-link-routing.test.ts",
- "src/renderer/src/lib/ios-web-platform.test.ts",
- "src/renderer/src/lib/launch-agent-background-session-remote.test.ts",
- "src/renderer/src/lib/launch-agent-session-continuation.test.ts",
- "src/renderer/src/lib/launch-structured-agent-session.test.ts",
- "src/renderer/src/lib/launch-work-item-direct-agent-routing.test.ts",
- "src/renderer/src/lib/launch-work-item-direct.test.ts",
- "src/renderer/src/lib/lazy-with-retry.test.ts",
- "src/renderer/src/lib/linear-issue-workspace-attachment.test.ts",
- "src/renderer/src/lib/monaco-languages/monarch-embed-entry-recursion.test.ts",
- "src/renderer/src/lib/monaco-languages/register-astro.test.ts",
- "src/renderer/src/lib/new-workspace.test.ts",
- "src/renderer/src/lib/orchestration-setup-state.test.ts",
- "src/renderer/src/lib/orchestration-skill-coverage.test.ts",
- "src/renderer/src/lib/outside-dismiss-guard.test.ts",
- "src/renderer/src/lib/palette-match/cmd-j-ranking-contract.test.ts",
- "src/renderer/src/lib/palette-match/palette-match-core.test.ts",
- "src/renderer/src/lib/pane-manager/mobile-fit-overrides-hydration.test.ts",
- "src/renderer/src/lib/pane-manager/pane-divider.test.ts",
- "src/renderer/src/lib/pane-manager/pane-reveal-repaint.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-queue-retention.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-synchronized-frames.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-delivery-credit.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-ligatures-addon.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset-on-mouseleave.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-render-pause-release-parked-resize.test.ts",
- "src/renderer/src/lib/pane-manager/xterm-user-scrolling-contract.test.ts",
- "src/renderer/src/lib/pr-bot-author-overrides.test.ts",
- "src/renderer/src/lib/pr-comment-reactions.test.ts",
- "src/renderer/src/lib/project-skill-runtime.test.ts",
- "src/renderer/src/lib/quick-workspace-agent-selection.test.ts",
- "src/renderer/src/lib/recent-workspace-tab-rows.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-slept-pane-recovery.test.ts",
- "src/renderer/src/lib/running-agent-targets.test.ts",
- "src/renderer/src/lib/runtime-host-unverifiable-probe-readers.test.ts",
- "src/renderer/src/lib/session-write-subscriber-allocation.test.ts",
- "src/renderer/src/lib/setup-runner.test.ts",
- "src/renderer/src/lib/state-collection-byte-estimate.test.ts",
- "src/renderer/src/lib/tab-number-shortcuts.test.ts",
- "src/renderer/src/lib/terminal-quick-command-score-budget.test.ts",
- "src/renderer/src/lib/terminal-reveal-identity.test.ts",
- "src/renderer/src/lib/terminal-theme.test.ts",
- "src/renderer/src/lib/text-control-paste.test.ts",
- "src/renderer/src/lib/typing-latency/diagnostic-summary.test.ts",
- "src/renderer/src/lib/updater-beforeunload.test.ts",
- "src/renderer/src/lib/windows-terminal-capabilities-race.test.ts",
- "src/renderer/src/lib/workspace-composer-initial-focus.test.ts",
- "src/renderer/src/lib/workspace-emoji-shortcodes.lazy.test.ts",
- "src/renderer/src/lib/workspace-port-groups.test.ts",
- "src/renderer/src/lib/workspace-session-browser-history.test.ts",
- "src/renderer/src/lib/worktree-activation-created-agent.test.ts",
- "src/renderer/src/lib/worktree-agent-activation-gate.test.ts",
- "src/renderer/src/lib/worktree-attachment-label.test.ts",
- "src/renderer/src/lib/worktree-creation-agent-seeds.test.ts",
- "src/renderer/src/lib/worktree-runtime-owner.test.ts",
- "src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts",
- "src/renderer/src/runtime/host-session-mirror-flap-hydration.test.ts",
- "src/renderer/src/runtime/host-session-mirror-settle-census.test.ts",
- "src/renderer/src/runtime/local-structured-session-empty-worktree-visibility.test.ts",
- "src/renderer/src/runtime/local-structured-session-tabs-sync.test.ts",
- "src/renderer/src/runtime/remote-agent-session-launch.test.ts",
- "src/renderer/src/runtime/remote-runtime-snapshot-outcome.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-stall-recovery.test.ts",
- "src/renderer/src/runtime/remote-server-restart-wait.test.ts",
- "src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts",
- "src/renderer/src/runtime/runtime-file-client-download.test.ts",
- "src/renderer/src/runtime/runtime-git-client-branch-line-total.test.ts",
- "src/renderer/src/runtime/runtime-hooks-client.test.ts",
- "src/renderer/src/runtime/structured-agent-session-close.test.ts",
- "src/renderer/src/runtime/structured-agent-session-status-feed.test.ts",
- "src/renderer/src/runtime/structured-agent-session-turn-completion-feed.test.ts",
- "src/renderer/src/runtime/structured-conversation-tab-replacement.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-workspace-publication.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph/mobile-terminal-theme.test.ts",
- "src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-split-placement.test.ts",
- "src/renderer/src/runtime/web-runtime-session-terminal-host-authority.test.ts",
- "src/renderer/src/runtime/web-runtime-session-terminal-workspace-routing.test.ts",
- "src/renderer/src/runtime/web-session-existing-tab-index.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-browser-tabs.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-layout-groups.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-reconnect-resubscribe.test.tsx",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery-host-scope-gate.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery-prior-removal.test.ts",
- "src/renderer/src/store/always-mounted-selector-scan-cost.test.ts",
- "src/renderer/src/store/right-sidebar-route.test.ts",
- "src/renderer/src/store/slices/activity-cleared-at.test.ts",
- "src/renderer/src/store/slices/agent-status-ack-cleanup.test.ts",
- "src/renderer/src/store/slices/agent-status-drop-ipc.test.ts",
- "src/renderer/src/store/slices/agent-status-retained-leak.test.ts",
- "src/renderer/src/store/slices/agent-status-runtime-orchestration.test.ts",
- "src/renderer/src/store/slices/degraded-repo-hydration.test.ts",
- "src/renderer/src/store/slices/detected-worktree-refresh-leases.test.ts",
- "src/renderer/src/store/slices/editor-hydration-scaling.test.ts",
- "src/renderer/src/store/slices/editor-recently-closed-tabs.test.ts",
- "src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts",
- "src/renderer/src/store/slices/github-checks.test.ts",
- "src/renderer/src/store/slices/github-pr-branch-fallback-results.test.ts",
- "src/renderer/src/store/slices/linear-invalidation.test.ts",
- "src/renderer/src/store/slices/memory.test.ts",
- "src/renderer/src/store/slices/native-chat-launch-draft-teardown.test.ts",
- "src/renderer/src/store/slices/orca-profiles.test.ts",
- "src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts",
- "src/renderer/src/store/slices/repo-identity-reconcile.test.ts",
- "src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts",
- "src/renderer/src/store/slices/runtime-environment-ssh.test.ts",
- "src/renderer/src/store/slices/runtime-switch-settings-persistence.test.ts",
- "src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts",
- "src/renderer/src/store/slices/store-session-editor-hydration.test.ts",
- "src/renderer/src/store/slices/store-session-terminal-activity.test.ts",
- "src/renderer/src/store/slices/tabs-open-close-lifecycle.test.ts",
- "src/renderer/src/store/slices/tabs-pane-layout-operations.test.ts",
- "src/renderer/src/store/slices/tabs/hydrated-workspace-reconciliation-batch.test.ts",
- "src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts",
- "src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts",
- "src/renderer/src/store/slices/ui-new-workspace-draft.test.ts",
- "src/renderer/src/store/slices/ui/ui-slice-surface-actions.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-scan-progress-boundary.test.ts",
- "src/renderer/src/store/slices/worktree-helpers.test.ts",
- "src/renderer/src/store/slices/worktrees-create-parent-pick.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-persisted-metadata-fallback.test.ts",
- "src/renderer/src/store/slices/worktrees-git-identity-branch-title.test.ts",
- "src/renderer/src/store/slices/worktrees-metadata-persistence.test.ts",
- "src/renderer/src/store/slices/worktrees-remote-runtime-create.test.ts",
- "src/renderer/src/store/slices/worktrees-terminal-pr-url-linking.test.ts",
- "src/renderer/src/store/store-listener-census.test.ts",
- "src/renderer/src/web/web-clipboard-copy-terminal-selection.test.ts",
- "src/renderer/src/web/web-preload-api-composition.test.ts",
- "src/renderer/src/web/web-preload-api-git.test.ts",
- "src/renderer/src/web/web-preload-api-ui.test.ts",
- "src/renderer/src/web/web-runtime-client-heartbeat.test.ts",
- "src/renderer/src/web/web-shell-paths-exist.test.ts",
- "src/shared/agent-decorative-title-signature.test.ts",
- "src/shared/agent-hook-listener-claude-compatible-vendors.test.ts",
- "src/shared/agent-hook-listener-claude-turn-state.test.ts",
- "src/shared/agent-hook-listener-grok.test.ts",
- "src/shared/agent-hook-listener-opencode-session-registry.test.ts",
- "src/shared/agent-hook-listener-transport.test.ts",
- "src/shared/agent-hook-relay.test.ts",
- "src/shared/agent-session-provider-handle.test.ts",
- "src/shared/agent-session-resume.test.ts",
- "src/shared/agent-session-thread-goal.test.ts",
- "src/shared/agent-status-legacy-adapter.test.ts",
- "src/shared/agent-status-store-reopen.test.ts",
- "src/shared/agent-tab-title.test.ts",
- "src/shared/antigravity-source-control.test.ts",
- "src/shared/automation-list-response.test.ts",
- "src/shared/automation-schedules.test.ts",
- "src/shared/browser-client-host-protocol.test.ts",
- "src/shared/browser-cookie-import-sources.test.ts",
- "src/shared/browser-network-tunnel-protocol.test.ts",
- "src/shared/browser-screencast-protocol.test.ts",
- "src/shared/child-process/child-process-import-boundary.test.ts",
- "src/shared/child-process/close-process-registry.test.ts",
- "src/shared/child-process/posix-lsof-probe.test.ts",
- "src/shared/child-process/process-tree-termination.test.ts",
- "src/shared/codex-subagent-roster.test.ts",
- "src/shared/commit-message-generation.test.ts",
- "src/shared/ephemeral-vm-recipe-checkout-mode.test.ts",
- "src/shared/ephemeral-vm-recipe-process.test.ts",
- "src/shared/fish-binary-requirement.test.ts",
- "src/shared/folder-workspace-execution-host.test.ts",
- "src/shared/generated-code-path.test.ts",
- "src/shared/git-fetch-head-capability.test.ts",
- "src/shared/git-rev-list-output.test.ts",
- "src/shared/git-tracked-pathspecs.test.ts",
- "src/shared/github/project-roadmap-timeline.test.ts",
- "src/shared/gitlab-job-log-excerpt.test.ts",
- "src/shared/handled-wire-discriminant.test.ts",
- "src/shared/hermes-run-ref-retention.test.ts",
- "src/shared/host-setting-overrides.test.ts",
- "src/shared/image-paste-following-text.test.ts",
- "src/shared/linear/workspace-types.test.ts",
- "src/shared/managed-agent-command-token.test.ts",
- "src/shared/manual-repo-order.test.ts",
- "src/shared/mobile-e2ee-v2-framing.test.ts",
- "src/shared/muse-session-log.test.ts",
- "src/shared/native-chat-session-option-commands.test.ts",
- "src/shared/native-chat-tool-pair-limit.test.ts",
- "src/shared/native-chat-tool-preview-scan.test.ts",
- "src/shared/native-chat-unverifiable-turn-status.test.ts",
- "src/shared/nested-repo-telemetry-schema.test.ts",
- "src/shared/omp-owner-state-title.test.ts",
- "src/shared/orchestration-ask-timeout.test.ts",
- "src/shared/osc-title-scan-tail.test.ts",
- "src/shared/pane-agent-owner.test.ts",
- "src/shared/pi-overlay-ui-settings.test.ts",
- "src/shared/plugins/plugin-consent-fingerprint.test.ts",
- "src/shared/plugins/plugin-language-pack-artifact.test.ts",
- "src/shared/plugins/plugin-panel-pong-frame.test.ts",
- "src/shared/pr-bot-author-overrides.test.ts",
- "src/shared/preferred-git-remote.test.ts",
- "src/shared/project-groups.test.ts",
- "src/shared/project-host-setup-projection.test.ts",
- "src/shared/quick-open-filter.test.ts",
- "src/shared/remote-runtime-connect-bound.test.ts",
- "src/shared/remote-runtime-shared-control-boundary.test.ts",
- "src/shared/remote-runtime-shared-control-subscription-close.test.ts",
- "src/shared/remote-runtime-subscription-frame-router.test.ts",
- "src/shared/remote-runtime-subscription-request.test.ts",
- "src/shared/remote-workspace-session-projection.test.ts",
- "src/shared/repo-search-limits.test.ts",
- "src/shared/repro-13889-claude-quarter-circle-busy-title.test.ts",
- "src/shared/runtime-host-status-owner.test.ts",
- "src/shared/secure-file.test.ts",
- "src/shared/serve-option-validation.test.ts",
- "src/shared/setup-agent-sequencing.windows.test.ts",
- "src/shared/skill-bundle-name.test.ts",
- "src/shared/skill-install-contract.test.ts",
- "src/shared/source-control-group-order.test.ts",
- "src/shared/ssh-relay-pty-ownership-proof.test.ts",
- "src/shared/startup-command-submission.test.ts",
- "src/shared/string-chunk-compaction.test.ts",
- "src/shared/structured-native-chat-launch-route.test.ts",
- "src/shared/telemetry-events-feature-education.test.ts",
- "src/shared/telemetry-feature-wall-events.test.ts",
- "src/shared/terminal-bell-detector.test.ts",
- "src/shared/terminal-kitty-keyboard-tail-retention.test.ts",
- "src/shared/terminal-mode-2031-final-state.test.ts",
- "src/shared/terminal-output-side-effects.test.ts",
- "src/shared/terminal-reply-query-scan.test.ts",
- "src/shared/terminal-title-classification-memo.test.ts",
- "src/shared/timer-delay.test.ts",
- "src/shared/windows-environment-expansion.test.ts",
- "src/shared/windows-security-descriptor.test.ts",
- "src/shared/worker-transcript-background-task-text.test.ts",
- "src/shared/workspace-cleanup-ui-state.test.ts",
- "src/shared/workspace-session-validation-work.test.ts",
- "src/shared/workspace-space-compaction.test.ts",
- "src/shared/workspace-space-entry-traversal.test.ts",
- "src/shared/worktree-name-suggestion.test.ts",
- "src/shared/worktree/host-qualified-identity.test.ts",
- "tests/e2e/completed-worker-retirement-resume.unit.test.ts",
- "tests/e2e/helpers/headless-paired-runtime-serve-readiness.unit.test.ts",
- "tests/e2e/helpers/remote-terminal-source-range-contract-fixture.unit.test.ts",
- "tests/e2e/helpers/streaming-terminal-cleanup.unit.test.ts",
- "tests/e2e/omp-child-session-recovery.unit.test.ts",
- "tests/e2e/structured-native-chat-routing-authority.unit.test.ts",
- "tests/e2e/terminal-perf-presentation.unit.test.ts",
- "tests/tools/relay-bench/region-probe-replay.test.mjs",
- "tests/tools/windows-pty-native-capability-smoke/run.test.mjs"
- ],
- "durationMs": 851040
- },
- {
- "files": [
- "config/scripts/audit-localization-coverage.test.mjs",
- "config/scripts/check-max-lines-ratchet.test.mjs",
- "config/scripts/ci-shard-assignment.test.mjs",
- "config/scripts/codex-primary-home-tripwire.test.ts",
- "config/scripts/computer-use-mouse-button-routing.test.mjs",
- "config/scripts/daily-e2e-dispatch-contract.test.mjs",
- "config/scripts/electron-builder-mac-channel-config.test.mjs",
- "config/scripts/ensure-native-runtime-job-ownership.test.mjs",
- "config/scripts/generate-runtime-required-english-catalog.test.mjs",
- "config/scripts/generate-skill-bundle-manifest.test.mjs",
- "config/scripts/idle-cpu-process-sampling.test.mjs",
- "config/scripts/live-freeze-bounded-history.test.mjs",
- "config/scripts/live-remote-bulk-open-freeze-metrics.test.mjs",
- "config/scripts/locale-ko-frozen-terminal-search-keywords.test.mjs",
- "config/scripts/locale-ko-key-overrides.test.mjs",
- "config/scripts/mobile-pairing-qrcode-import-plugin.test.mjs",
- "config/scripts/mobile-release-shell-switch-workflow.test.mjs",
- "config/scripts/mobile-web-app-external-link-seam.test.mjs",
- "config/scripts/mobile-web-app-mermaid-render.test.mjs",
- "config/scripts/mobile-web-app-session-dictation-capture.test.mjs",
- "config/scripts/mobile-web-app-source-control-external-links.test.mjs",
- "config/scripts/mobile-web-app-terminal-render.test.mjs",
- "config/scripts/mobile-web-terminal-engine-closure.test.mjs",
- "config/scripts/orca-linear-skill-guidance.test.mjs",
- "config/scripts/package-electron-runtime-contract.test.mjs",
- "config/scripts/packaged-node-pty-prebuild-prune.test.mjs",
- "config/scripts/publish-complete-draft-releases.test.mjs",
- "config/scripts/replace-cached-nsis-elevate.test.mjs",
- "config/scripts/skill-recipe-shell.test.mjs",
- "config/scripts/ssh-browser-e2e-routing.test.mjs",
- "config/scripts/ssh-localhost-e2e-routing.test.mjs",
- "config/scripts/verify-dev-channel-packaging.test.mjs",
- "config/scripts/windows-uninstaller-signing.test.mjs",
- "config/scripts/workflow-ref-reachability.test.mjs",
- "src/cli/args-repeatable-flags.test.ts",
- "src/cli/automation-format.test.ts",
- "src/cli/browser-storage-empty-value.test.ts",
- "src/cli/codex-command-classification.test.ts",
- "src/cli/flags.test.ts",
- "src/cli/format-recovery.test.ts",
- "src/cli/handlers/interactive-login-interruption.test.ts",
- "src/cli/index-automation-target.test.ts",
- "src/cli/index-environment-commands.test.ts",
- "src/cli/index-memory-diagnostics.test.ts",
- "src/cli/index-worktree-create-linear.test.ts",
- "src/cli/orchestration-dispatch-refusal-format.test.ts",
- "src/cli/registry-parity.test.ts",
- "src/cli/retry-request-flag.test.ts",
- "src/cli/runtime-client.test.ts",
- "src/cli/terminal-format.test.ts",
- "src/main/active-view-preference.test.ts",
- "src/main/agent-hooks/first-work-branch-rename.test.ts",
- "src/main/agent-hooks/hook-script-outside-orca.test.ts",
- "src/main/agent-hooks/installer-utils.test.ts",
- "src/main/agent-hooks/managed-hook-detection-commands.test.ts",
- "src/main/agent-hooks/managed-hook-stdin-lifecycle.test.ts",
- "src/main/agent-hooks/managed-hook-timeout.test.ts",
- "src/main/agent-hooks/manual-compact-status-cleanup.test.ts",
- "src/main/agent-hooks/server-amp-normalization.test.ts",
- "src/main/agent-hooks/server-claude-child-permission-lifecycle.test.ts",
- "src/main/agent-hooks/server-endpoint-file-lifecycle.test.ts",
- "src/main/agent-hooks/server-escape-navigation-inference.test.ts",
- "src/main/agent-hooks/server-observation-provenance.test.ts",
- "src/main/agent-hooks/server-pi-normalization.test.ts",
- "src/main/agent-hooks/server-replay-evidence-clock.test.ts",
- "src/main/agent-hooks/terminal-handle-row-identity.test.ts",
- "src/main/agent-hooks/windows-direct-cmd-hook-command.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-live.integration.test.ts",
- "src/main/agent-trust-presets.test.ts",
- "src/main/ai-vault-search/session-search-child-service.test.ts",
- "src/main/ai-vault-search/session-search-merged-roots.test.ts",
- "src/main/ai-vault-search/session-search-paging.test.ts",
- "src/main/ai-vault-search/session-search-row-identity.test.ts",
- "src/main/ai-vault-search/session-search-scope-service.test.ts",
- "src/main/ai-vault/remote-session-large-transcripts.test.ts",
- "src/main/ai-vault/session-parse-cache-devin-upgrade.test.ts",
- "src/main/ai-vault/session-parse-cache-persistence.test.ts",
- "src/main/ai-vault/session-scanner-devin-dedup.test.ts",
- "src/main/ai-vault/session-scanner-discovery-wsl-gate.test.ts",
- "src/main/ai-vault/session-scanner-index-cache-wsl-stall.test.ts",
- "src/main/ai-vault/session-scanner-kimi-parser.test.ts",
- "src/main/ai-vault/session-scanner-parse-cache-agents.test.ts",
- "src/main/ai-vault/session-scanner-parse-cache.test.ts",
- "src/main/ai-vault/session-scanner-service-cancellation.test.ts",
- "src/main/ai-vault/session-scanner-service-client.test.ts",
- "src/main/ai-vault/session-scanner-service-spawn.test.ts",
- "src/main/ai-vault/session-sidecar-stat.test.ts",
- "src/main/ai-vault/session-title-file-reader-wsl-stall.test.ts",
- "src/main/ai-vault/session-transcript-consumers.test.ts",
- "src/main/ai-vault/session-transcript-record-budget.test.ts",
- "src/main/antigravity/windows-hook-payload-delivery.test.ts",
- "src/main/artifacts/artifact-cloud-recovery.test.ts",
- "src/main/artifacts/artifact-cloud-service.test.ts",
- "src/main/automations/automation-workspace-host-attribution.test.ts",
- "src/main/automations/external-automation-probe-scheduler.test.ts",
- "src/main/automations/precheck-runner.test.ts",
- "src/main/automations/service-precheck.test.ts",
- "src/main/azure-devops/azure-devops-api-request.test.ts",
- "src/main/bitbucket/repository-ref.test.ts",
- "src/main/browser/browser-client-host-attach-request.test.ts",
- "src/main/browser/browser-client-host-command-retention.test.ts",
- "src/main/browser/browser-cookie-import-clear-atomicity.test.ts",
- "src/main/browser/browser-cookie-import-partition-reland.electron.test.ts",
- "src/main/browser/browser-cookie-import-partition.electron.test.ts",
- "src/main/browser/browser-cookie-import-policy.test.ts",
- "src/main/browser/browser-cookie-import-replacement.test.ts",
- "src/main/browser/browser-cookie-validation.test.ts",
- "src/main/browser/browser-guest-shortcut-forwarding.test.ts",
- "src/main/browser/browser-manager-guest-policy-profile.test.ts",
- "src/main/browser/browser-network-tunnel-session-stream-scoped-failure.test.ts",
- "src/main/browser/browser-process-user-agent.test.ts",
- "src/main/browser/browser-route-dns-prefetch.electron.test.ts",
- "src/main/browser/browser-route-partition-migration.test.ts",
- "src/main/browser/browser-route-partition-stability.test.ts",
- "src/main/browser/browser-route-partition-storage-retirement.test.ts",
- "src/main/browser/browser-screencast-stream.test.ts",
- "src/main/browser/browser-session-cookie-staging.test.ts",
- "src/main/browser/browser-session-registry.test.ts",
- "src/main/browser/browser-session-startup.test.ts",
- "src/main/browser/browser-viewport-user-agent.test.ts",
- "src/main/browser/cdp-keyboard-us-layout.test.ts",
- "src/main/browser/doc-preview-grant-registry.test.ts",
- "src/main/browser/popup-origin-bar-window.test.ts",
- "src/main/claude-accounts/claude-account-service-add-account.test.ts",
- "src/main/claude-accounts/claude-login-completion.oracle.test.ts",
- "src/main/claude-accounts/keychain.test.ts",
- "src/main/claude-usage/transcript-record-parser-prefilter.test.ts",
- "src/main/claude/claude-agent-sdk-exit-proof-identity.test.ts",
- "src/main/claude/claude-background-task-rows.test.ts",
- "src/main/claude/claude-config-dir-pin.test.ts",
- "src/main/claude/claude-structured-content-parts.test.ts",
- "src/main/claude/claude-structured-dispatch-queue-boundary.test.ts",
- "src/main/claude/claude-structured-prompt-ownership.test.ts",
- "src/main/claude/claude-structured-session-commands.test.ts",
- "src/main/claude/claude-turn-resumption.test.ts",
- "src/main/claude/hook-service.test.ts",
- "src/main/cli/appimage-extracted-root.test.ts",
- "src/main/cli/cli-installer.test.ts",
- "src/main/codex-accounts/legacy-shared-config-compatibility.test.ts",
- "src/main/codex-accounts/runtime-home-resume-selection-gate.test.ts",
- "src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts",
- "src/main/codex-cli/codex-home-process-lock.test.ts",
- "src/main/codex-cli/command.test.ts",
- "src/main/codex-usage/codex-usage-long-context-billing.test.ts",
- "src/main/codex/codex-config-mirror.test.ts",
- "src/main/codex/codex-hook-legacy-profile-block.test.ts",
- "src/main/codex/codex-rollout-session-meta.test.ts",
- "src/main/codex/codex-session-resume-preparation.test.ts",
- "src/main/codex/codex-structured-dispatch-echo.test.ts",
- "src/main/codex/codex-structured-journal-compactions.test.ts",
- "src/main/codex/codex-structured-journal-translation-settlement.test.ts",
- "src/main/codex/codex-structured-launch-resolution.test.ts",
- "src/main/codex/codex-structured-prompt-replies.test.ts",
- "src/main/codex/codex-structured-session-adapter.test.ts",
- "src/main/codex/codex-structured-session-background-tasks.test.ts",
- "src/main/codex/codex-structured-session-options.test.ts",
- "src/main/codex/codex-structured-session-shutdown.test.ts",
- "src/main/codex/codex-turn-ordinals.test.ts",
- "src/main/codex/config-settings-promotion.test.ts",
- "src/main/codex/config-toml-trust-paths.test.ts",
- "src/main/codex/hook-service-managed-install.test.ts",
- "src/main/codex/windows-hook-upgrade.test.ts",
- "src/main/computer/desktop-script-provider-actions.test.ts",
- "src/main/computer/desktop-script-provider-cache-lifecycle.test.ts",
- "src/main/computer/desktop-script-provider-cache.test.ts",
- "src/main/crash-reporting/crash-breadcrumb-renderer-attribution.test.ts",
- "src/main/crash-reporting/crash-report-store.test.ts",
- "src/main/crash-reporting/crashpad-capture.test.ts",
- "src/main/crash-reporting/expected-teardown-state.test.ts",
- "src/main/crash-reporting/gpu-crash-diagnostics.test.ts",
- "src/main/crash-reporting/gpu-fallback-restart-prompt.test.ts",
- "src/main/crash-reporting/minidump-file-source.test.ts",
- "src/main/cursor/hook-service.test.ts",
- "src/main/daemon/daemon-errors.test.ts",
- "src/main/daemon/daemon-file-log.test.ts",
- "src/main/daemon/daemon-launched-child-identity.test.ts",
- "src/main/daemon/daemon-server-attachment-lifecycle.test.ts",
- "src/main/daemon/daemon-server-error-handling.test.ts",
- "src/main/daemon/daemon-stream-producer-stall-watchdog.test.ts",
- "src/main/daemon/headless-emulator-wide-char-snapshot.test.ts",
- "src/main/daemon/hibernation-cold-restore-repro.test.ts",
- "src/main/daemon/history-manager.test.ts",
- "src/main/daemon/history-reader.test.ts",
- "src/main/daemon/node-pty-error-hints.test.ts",
- "src/main/daemon/pty-session-id.test.ts",
- "src/main/daemon/session-pending-output.test.ts",
- "src/main/daemon/session-terminal-control.test.ts",
- "src/main/daemon/slow-daemon-session-verification.test.ts",
- "src/main/daemon/terminal-cursor-line-context.test.ts",
- "src/main/daemon/terminal-host-agent-session.test.ts",
- "src/main/daemon/terminal-host-process-inspection.test.ts",
- "src/main/daemon/terminal-host-spawn-input-retention.test.ts",
- "src/main/devin/hook-config-json.test.ts",
- "src/main/emulator/android/android-device-inventory.test.ts",
- "src/main/emulator/android/android-input-mapping.test.ts",
- "src/main/emulator/android/android-permissions.test.ts",
- "src/main/emulator/android/scrcpy-server-deploy.test.ts",
- "src/main/emulator/emulator-session-registry.test.ts",
- "src/main/fish-history-session.test.ts",
- "src/main/ghostty/mapper.test.ts",
- "src/main/git-bash.test.ts",
- "src/main/git/admission-tier-plumbing.test.ts",
- "src/main/git/gh-rate-limit-breaker.test.ts",
- "src/main/git/git-status-read-lease-owner.test.ts",
- "src/main/git/remote-name-listing.test.ts",
- "src/main/git/remove-worktree-clean-preflight.test.ts",
- "src/main/git/repo-ref-maintenance-real-git.test.ts",
- "src/main/git/repo-username.test.ts",
- "src/main/git/repo.test.ts",
- "src/main/git/runner-gh-host-args.test.ts",
- "src/main/git/runner-gh-rate-limit-breaker.test.ts",
- "src/main/git/status-branch-line-total-exec-contract.test.ts",
- "src/main/git/status-conflict-operations.test.ts",
- "src/main/git/upstream-deferred-fork-remote-real.test.ts",
- "src/main/git/worktree-add-creation-config.test.ts",
- "src/main/git/worktree-base-divergence-real-git.test.ts",
- "src/main/git/worktree-configured-paths-concurrency.test.ts",
- "src/main/git/worktree-diff-stamp-guest-gitdir.test.ts",
- "src/main/git/worktree-preparation-cancel-latency.bench.test.ts",
- "src/main/gitea/pull-request-creation.test.ts",
- "src/main/github/client-issue-source.test.ts",
- "src/main/github/client-merge-queue-auto-merge.test.ts",
- "src/main/github/client-pr-checks.test.ts",
- "src/main/github/stacked-pr-creation.test.ts",
- "src/main/gitlab/client-mr-job-ci.test.ts",
- "src/main/gitlab/client-mr-review-actions.test.ts",
- "src/main/gitlab/issues.test.ts",
- "src/main/global-fetch-call-site-audit.test.ts",
- "src/main/grok/windows-grok-hook-script.test.ts",
- "src/main/headless-automation-dispatcher-source-boundary.test.ts",
- "src/main/hooks.test.ts",
- "src/main/host/deferred-secret-protection-report.test.ts",
- "src/main/host/secret-protection-report.test.ts",
- "src/main/ipc/agent-hooks.test.ts",
- "src/main/ipc/ai-vault-search-all-hosts.test.ts",
- "src/main/ipc/bounded-warning-dedupe.test.ts",
- "src/main/ipc/crash-reporting-replay-guard-wedge-burst.test.ts",
- "src/main/ipc/doc-preview-grant-ipc.test.ts",
- "src/main/ipc/dropped-path-resolution.test.ts",
- "src/main/ipc/ephemeral-vm-provision-cancel.test.ts",
- "src/main/ipc/filesystem-conflict-operation-routing.test.ts",
- "src/main/ipc/filesystem-import-ssh-path-safety.test.ts",
- "src/main/ipc/filesystem-markdown-document-listing.test.ts",
- "src/main/ipc/filesystem-path-containment-unicode-normalization.test.ts",
- "src/main/ipc/filesystem-search-rg-timeout.test.ts",
- "src/main/ipc/filesystem-watcher-native-capacity.test.ts",
- "src/main/ipc/filesystem-watcher-remote-capacity.test.ts",
- "src/main/ipc/filesystem-watcher-remote-rearm.test.ts",
- "src/main/ipc/filesystem-watcher.test.ts",
- "src/main/ipc/folder-repo-git-upgrade.test.ts",
- "src/main/ipc/macos-keyboard-layout-snapshot.test.ts",
- "src/main/ipc/notifications-custom-sound.test.ts",
- "src/main/ipc/parcel-watcher-process-entry.test.ts",
- "src/main/ipc/parcel-watcher-process.test.ts",
- "src/main/ipc/pty-agent-session-write-gate.test.ts",
- "src/main/ipc/pty-controller-owner-recovery.test.ts",
- "src/main/ipc/pty-dead-owner-respawn.test.ts",
- "src/main/ipc/pty-hidden-at-spawn-mark.test.ts",
- "src/main/ipc/pty-login-shell-startup-commands.test.ts",
- "src/main/ipc/pty-output-batching-drain.test.ts",
- "src/main/ipc/pty-pane-claim-arbitration.test.ts",
- "src/main/ipc/pty-renderer-inflight-credit.test.ts",
- "src/main/ipc/pty-renderer-liveness-guard.test.ts",
- "src/main/ipc/pty-runtime-hidden-at-spawn-mark.test.ts",
- "src/main/ipc/pty-runtime-kill-and-exit.test.ts",
- "src/main/ipc/pty-spawn-env-agent-overlays.test.ts",
- "src/main/ipc/pty/register-headless-runtime.test.ts",
- "src/main/ipc/renderer-lifetime-abort.test.ts",
- "src/main/ipc/repos-local-add-and-project-setup.test.ts",
- "src/main/ipc/repos-local-clone-lifecycle.test.ts",
- "src/main/ipc/repos-picker.test.ts",
- "src/main/ipc/runtime-environment-capability-evidence.test.ts",
- "src/main/ipc/runtime-environment-status-connection.test.ts",
- "src/main/ipc/runtime-environments-call-routing.test.ts",
- "src/main/ipc/runtime-environments-subscription-lifecycle.test.ts",
- "src/main/ipc/runtime-upload-temp-sweep.test.ts",
- "src/main/ipc/runtime-watcher-process-pool.test.ts",
- "src/main/ipc/skill-cloud-ipc-handlers.test.ts",
- "src/main/ipc/ssh-pty-output-generation-guard.test.ts",
- "src/main/ipc/ssh-pty-output-intake.test.ts",
- "src/main/ipc/ssh-pty-source-obligation-coordinator.test.ts",
- "src/main/ipc/workspace-ports.test.ts",
- "src/main/ipc/worktree-base-directory-event-filter.test.ts",
- "src/main/ipc/worktree-metadata-merge.test.ts",
- "src/main/ipc/worktree-remote-ssh-branch-conflict.test.ts",
- "src/main/ipc/worktree-symlinks.test.ts",
- "src/main/ipc/worktrees-issue-command-overrides.test.ts",
- "src/main/ipc/worktrees-remove-preflight.test.ts",
- "src/main/ipc/worktrees-ssh-pr-head-fetch.test.ts",
- "src/main/ipc/worktrees/removal/remove-unregistered-worktree-host-home.test.ts",
- "src/main/kimi/kimi-runtime-home.test.ts",
- "src/main/lib/unread-response-body.test.ts",
- "src/main/line-editor-ready-output-scanner.test.ts",
- "src/main/linear/issue-context-includes.test.ts",
- "src/main/linear/issue-context.test.ts",
- "src/main/linear/issue-relation-write.test.ts",
- "src/main/linear/mcp-issue-list-pagination.test.ts",
- "src/main/linear/mcp-issue-list.test.ts",
- "src/main/local-builds/local-build-compatibility-contract.test.ts",
- "src/main/local-builds/local-build-feed-server.test.ts",
- "src/main/macos-press-and-hold-default.test.ts",
- "src/main/macos-tcc-prompt-watch.test.ts",
- "src/main/macos-tcc-reset.test.ts",
- "src/main/native-chat/agent-session-journal/journal-cursor.test.ts",
- "src/main/native-chat/agent-session-journal/journal-file-format-remnant.test.ts",
- "src/main/native-chat/agent-session-journal/journal-legacy-import-source-bound.test.ts",
- "src/main/native-chat/agent-session-journal/journal-reducer.test.ts",
- "src/main/native-chat/agent-session-journal/journal-store.test.ts",
- "src/main/native-chat/agent-session-journal/journal-subagent-liveness.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-history-page-scaling.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-dead-generation-settlement.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-host-handoff.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-late-settlement.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-restore.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-resume.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-rewind.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-wedged-profile-migration.test.ts",
- "src/main/native-chat/agent-session-wire/structured-tui-transcript-close.test.ts",
- "src/main/native-chat/host-readable-transcript-path.test.ts",
- "src/main/native-chat/session-file-resolver-wsl.test.ts",
- "src/main/native-chat/structured-agent-session-create-support.test.ts",
- "src/main/native-chat/transcript-line-decoders-claude-image-companion.test.ts",
- "src/main/native-chat/transcript-watch-unsubscribe-race.test.ts",
- "src/main/native-chat/transcript-watch.test.ts",
- "src/main/native-chat/wsl-transcript-fs-access.test.ts",
- "src/main/network/proxy-settings-session.test.ts",
- "src/main/observability/architecture.test.ts",
- "src/main/opencode-usage/store.test.ts",
- "src/main/opencode/hook-plugin-opencode2-setup.test.ts",
- "src/main/orca-profiles/profile-cloud-auth-config.test.ts",
- "src/main/orca-profiles/profile-index-store.test.ts",
- "src/main/orca-profiles/profile-project-transfer.test.ts",
- "src/main/orcad/electron-serve-provider-selection.test.ts",
- "src/main/orcad/orcad-push-startup.test.ts",
- "src/main/persistence-clipboard-selection-migration.test.ts",
- "src/main/persistence-floating-terminal-trust.test.ts",
- "src/main/persistence-flush-and-save-scheduling.test.ts",
- "src/main/persistence-host-admitted-terminal-membership.test.ts",
- "src/main/persistence-host-partitioned-sessions.test.ts",
- "src/main/persistence-loading-store-write-risks.test.ts",
- "src/main/persistence-pane-identity-migration.test.ts",
- "src/main/persistence-settings-ui-defaults.test.ts",
- "src/main/persistence-source-control-ai-migration.test.ts",
- "src/main/persistence-update-repo.test.ts",
- "src/main/persistence/loading-store/normalize-loaded-project-catalog.test.ts",
- "src/main/persistence/loading-store/pty-binding-fast-lane.test.ts",
- "src/main/persistence/loading-store/state-write-round-trip.test.ts",
- "src/main/pi/agent-status-extension-omp-prefill.test.ts",
- "src/main/pi/agent-status-extension-source.test.ts",
- "src/main/plugins/plugin-host-process.test.ts",
- "src/main/plugins/plugin-host-runtime.test.ts",
- "src/main/plugins/plugin-kill-list-content-revocation.test.ts",
- "src/main/plugins/plugin-marketplace-service.test.ts",
- "src/main/plugins/plugin-startup-budget.test.ts",
- "src/main/plugins/plugin-storage-store.test.ts",
- "src/main/plugins/plugin-uninstall-ordering.test.ts",
- "src/main/ports/port-scan-command-import-boundary.test.ts",
- "src/main/ports/workspace-port-ownership.test.ts",
- "src/main/powershell-osc133-bootstrap.test.ts",
- "src/main/providers/agent-foreground-process-batch.test.ts",
- "src/main/providers/agent-foreground-process-windows-job-rejection.test.ts",
- "src/main/providers/local-pty-foreground-inspection-cheap-tier.test.ts",
- "src/main/providers/local-pty-provider-shell-readiness.test.ts",
- "src/main/providers/macos-tcc-login-shell.test.ts",
- "src/main/providers/process-cwd.test.ts",
- "src/main/providers/provider-dispatch.test.ts",
- "src/main/providers/ssh-filesystem-provider-watch-waiters.test.ts",
- "src/main/providers/ssh-git-provider-remote-sync.test.ts",
- "src/main/providers/ssh-git-provider-status-lease.test.ts",
- "src/main/providers/ssh-git-provider-status.test.ts",
- "src/main/providers/ssh-git-provider-upstream-lease.test.ts",
- "src/main/providers/ssh-pty-notification-rejection-routing.test.ts",
- "src/main/providers/ssh-pty-provider-claim-incarnation.test.ts",
- "src/main/providers/ssh-pty-provider-terminal-repair.test.ts",
- "src/main/providers/ssh-pty-provider.test.ts",
- "src/main/providers/ssh-pty-reattach-absence-discrimination.test.ts",
- "src/main/providers/windows-agent-foreground-process-scan-volume.test.ts",
- "src/main/pty/codex-preflight-profile-path-rewrite.test.ts",
- "src/main/pty/windows-environment-path.test.ts",
- "src/main/pty/windows-path-registry-reader.test.ts",
- "src/main/quit-path-durable-write-blocking.test.ts",
- "src/main/rate-limits/claude-pty.test.ts",
- "src/main/rate-limits/codex-fetcher.test.ts",
- "src/main/rate-limits/kimi-fetcher-wsl-home.test.ts",
- "src/main/rate-limits/service-account-target-selection.test.ts",
- "src/main/rate-limits/service-antigravity-usage.test.ts",
- "src/main/repo-maintenance-idle-gate.test.ts",
- "src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts",
- "src/main/runtime/agent-prompt-submission-windows-submit-delay.test.ts",
- "src/main/runtime/agent-session-launch-env-backfill.test.ts",
- "src/main/runtime/agent-session-lease-renewal.test.ts",
- "src/main/runtime/agent-session-record-options.test.ts",
- "src/main/runtime/agent-session-recovery-capsule.test.ts",
- "src/main/runtime/agent-session-spawn-token-process-scan.test.ts",
- "src/main/runtime/antigravity-readiness-transcripts.test.ts",
- "src/main/runtime/browser-host-command-ledger.test.ts",
- "src/main/runtime/browser-host-page-reconciliation-preconditions.test.ts",
- "src/main/runtime/browser-host-page-retirement.test.ts",
- "src/main/runtime/headless-close-keeps-publication-epoch.test.ts",
- "src/main/runtime/hidden-output-restored-provider-snapshot.test.ts",
- "src/main/runtime/mobile-pairing-userdata-path.test.ts",
- "src/main/runtime/mobile-presence-lock.test.ts",
- "src/main/runtime/orca-runtime-agent-skill-share.test.ts",
- "src/main/runtime/orca-runtime-browser-ghost-session-row-close.test.ts",
- "src/main/runtime/orca-runtime-browser.test.ts",
- "src/main/runtime/orca-runtime-files-mobile-explorer-reads.test.ts",
- "src/main/runtime/orca-runtime-files-rename-authority.test.ts",
- "src/main/runtime/orca-runtime-git-diff-budget.test.ts",
- "src/main/runtime/orca-runtime-process-incarnation-liveness.test.ts",
- "src/main/runtime/orca-runtime-skill-recovery.test.ts",
- "src/main/runtime/orca-runtime-structured-claude-gate-wiring.test.ts",
- "src/main/runtime/orca-runtime-structured-native-chat-settings.test.ts",
- "src/main/runtime/orca-runtime-terminal-cwd.test.ts",
- "src/main/runtime/orca-runtime-terminal-handle-incarnation.test.ts",
- "src/main/runtime/orca-runtime-terminal-rename-retention.test.ts",
- "src/main/runtime/orchestration-message-delivery-identity.test.ts",
- "src/main/runtime/orchestration/db-message-timestamp.test.ts",
- "src/main/runtime/orchestration/db/dispatch-mailbox-consumer-fencing.test.ts",
- "src/main/runtime/orchestration/db/lifecycle-transition-boundary.test.ts",
- "src/main/runtime/orchestration/db/lifecycle-transition.test.ts",
- "src/main/runtime/orchestration/dispatch-failure-idempotency.test.ts",
- "src/main/runtime/orchestration/lightweight-run-worker-exit-escalation.test.ts",
- "src/main/runtime/orchestration/mailbox-pointer-eligibility.test.ts",
- "src/main/runtime/orchestration/orchestration-federated-legacy-probe.test.ts",
- "src/main/runtime/orchestration/orchestration-mutation-question-db.test.ts",
- "src/main/runtime/orchestration/orchestration-reset-db.test.ts",
- "src/main/runtime/orchestration/structured-session-pointer-delivery.test.ts",
- "src/main/runtime/orchestration/structured-worker-group-addressing.test.ts",
- "src/main/runtime/orchestration/worker-start-unobserved-prompt-settlement.test.ts",
- "src/main/runtime/orchestration/worker-terminal-process-liveness.test.ts",
- "src/main/runtime/orchestration/worker-transcript-remote-read.test.ts",
- "src/main/runtime/push/desktop-push-service-unreadable-outbox.test.ts",
- "src/main/runtime/push/push-delivery-policy.test.ts",
- "src/main/runtime/push/push-gateway-client.test.ts",
- "src/main/runtime/push/push-preferences.test.ts",
- "src/main/runtime/push/push-unregister-outbox.test.ts",
- "src/main/runtime/relay/relay-control-origin.test.ts",
- "src/main/runtime/relay/relay-control-request-retirement.test.ts",
- "src/main/runtime/relay/relay-renewal-jitter.test.ts",
- "src/main/runtime/remote-desktop-driver.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-terminal-prompt.test.ts",
- "src/main/runtime/rpc/methods/clipboard.test.ts",
- "src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts",
- "src/main/runtime/rpc/methods/files.test.ts",
- "src/main/runtime/rpc/methods/git-diff-transport-budget.test.ts",
- "src/main/runtime/rpc/methods/mobile-web-bundle.test.ts",
- "src/main/runtime/rpc/methods/orchestration-structured-worker-session.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-attach-receipt.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-message-targeting.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-folder-placement.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-liveness-verdict.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/recipient-routing.test.ts",
- "src/main/runtime/rpc/methods/orchestration/runs/migration-behavior.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/manual-dispatch-observation.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-outcome-classification.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-prompt-budget.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-prompt-contract.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/workers-new-worktree.test.ts",
- "src/main/runtime/rpc/methods/plugins.test.ts",
- "src/main/runtime/rpc/methods/session-tab-browser-placement-projection.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-inventory-rpc.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session.test.ts",
- "src/main/runtime/rpc/methods/task-provider-identity.test.ts",
- "src/main/runtime/rpc/methods/terminal-stream-extraction-characterization.test.ts",
- "src/main/runtime/rpc/methods/updater.test.ts",
- "src/main/runtime/rpc/methods/worktree-catalog-snapshot-method.test.ts",
- "src/main/runtime/rpc/methods/worktree-rm-pty-waiver.test.ts",
- "src/main/runtime/rpc/mobile-e2ee-v2-key-schedule.test.ts",
- "src/main/runtime/rpc/orchestration-contract-fence.test.ts",
- "src/main/runtime/rpc/orchestration-runtime-update-settlement.test.ts",
- "src/main/runtime/rpc/relay-transport.test.ts",
- "src/main/runtime/rpc/terminal-list-host-scope-transport.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-ack-output-budget.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-round-robin.test.ts",
- "src/main/runtime/rpc/terminal-output-batching.test.ts",
- "src/main/runtime/rpc/terminal-provider-snapshot-sequence.test.ts",
- "src/main/runtime/rpc/terminal-requested-snapshot-unavailability.test.ts",
- "src/main/runtime/rpc/terminal-stream-byte-length.test.ts",
- "src/main/runtime/rpc/ws-fallback-port-store.test.ts",
- "src/main/runtime/runtime-local-worktree-create.test.ts",
- "src/main/runtime/runtime-project-group-controller-folder-delete.test.ts",
- "src/main/runtime/runtime-rpc-browser-host-admission.test.ts",
- "src/main/runtime/runtime-search-line-fragments.test.ts",
- "src/main/runtime/runtime-skill-install-queries.test.ts",
- "src/main/runtime/runtime-worktree-selection.test.ts",
- "src/main/runtime/selected-review-branch.test.ts",
- "src/main/runtime/structured-agent-session-pty-binding.test.ts",
- "src/main/runtime/structured-agent-session-runtime-exit.test.ts",
- "src/main/runtime/structured-agent-session-runtime.test.ts",
- "src/main/runtime/structured-agent-shell-environment.test.ts",
- "src/main/runtime/terminal-projection.test.ts",
- "src/main/runtime/terminal-subscribe-exit-waiter-leak.test.ts",
- "src/main/runtime/terminal-tail-sentinel-index.test.ts",
- "src/main/runtime/tui-idle-delivery-and-quiescence.test.ts",
- "src/main/runtime/windows-drive-listing.test.ts",
- "src/main/runtime/windows-mobile-firewall.test.ts",
- "src/main/shell-prompt-readiness-probe.test.ts",
- "src/main/skills/skill-bundle-creation.test.ts",
- "src/main/skills/skill-bundle-process-termination-child.test.ts",
- "src/main/skills/skill-discovery-target.test.ts",
- "src/main/skills/skill-freshness-eligibility.test.ts",
- "src/main/skills/skill-install-request-service.test.ts",
- "src/main/skills/skill-process-termination-child.test.ts",
- "src/main/skills/skill-remove-transaction.test.ts",
- "src/main/skills/skill-upload-session-service.test.ts",
- "src/main/skills/skill-wsl-install-filesystem.test.ts",
- "src/main/skills/skill-wsl-posix-semantics.integration.test.ts",
- "src/main/speech/openai-api-key-store.test.ts",
- "src/main/speech/openai-transcription-client.test.ts",
- "src/main/speech/speech-model-deletion.test.ts",
- "src/main/speech/speech-model-download-response.test.ts",
- "src/main/speech/stt-offline-audio-chunker.test.ts",
- "src/main/ssh-expired-lease-pane-readoption.test.ts",
- "src/main/ssh/relay-protocol.test.ts",
- "src/main/ssh/remote-install-coexistence.test.ts",
- "src/main/ssh/remote-install-model.test.ts",
- "src/main/ssh/ssh-connection-file-transfer.test.ts",
- "src/main/ssh/ssh-connection-host-key-verification.test.ts",
- "src/main/ssh/ssh-connection-reconnect-ladder.test.ts",
- "src/main/ssh/ssh-connection-sftp-wire.test.ts",
- "src/main/ssh/ssh-host-key-decision.test.ts",
- "src/main/ssh/ssh-multiplexer-transport-writer.test.ts",
- "src/main/ssh/ssh-relay-deploy-helpers.test.ts",
- "src/main/ssh/ssh-relay-endpoint-takeover.test.ts",
- "src/main/ssh/ssh-relay-orphan-abandon-paths.test.ts",
- "src/main/ssh/ssh-relay-ripgrep-install.test.ts",
- "src/main/ssh/ssh-relay-session-terminal-error.test.ts",
- "src/main/ssh/ssh-remote-linear-list-issues.test.ts",
- "src/main/ssh/ssh-system-fallback.test.ts",
- "src/main/ssh/system-ssh-dynamic-forward-process.test.ts",
- "src/main/ssh/system-ssh-forward-process.test.ts",
- "src/main/ssh/system-ssh-windows-write-capabilities.test.ts",
- "src/main/startup/branch-rename-hook-structured-session.test.ts",
- "src/main/startup/dev-instance-identity.test.ts",
- "src/main/startup/first-window-startup-services.test.ts",
- "src/main/startup/gpu-fallback-switches.test.ts",
- "src/main/startup/host-port-bootstrap-wiring.test.ts",
- "src/main/startup/serve-mode-argv.test.ts",
- "src/main/startup/serve-options.test.ts",
- "src/main/startup/serve-signal-handlers.test.ts",
- "src/main/startup/wsl-cli-reconciliation-startup-barrier.test.ts",
- "src/main/stats/agent-session-transition-recorder.test.ts",
- "src/main/stats/collector-async-save.test.ts",
- "src/main/telemetry/burst-cap.test.ts",
- "src/main/telemetry/client.test.ts",
- "src/main/telemetry/onboarding-cohort-classifier.test.ts",
- "src/main/telemetry/validator-warn-cache.test.ts",
- "src/main/terminal-history-async-delete.test.ts",
- "src/main/text-generation/pull-request-context-errors.test.ts",
- "src/main/updater-lifecycle-diagnostics.test.ts",
- "src/main/updater.linux-externally-managed.test.ts",
- "src/main/usage/usage-worktree-resolver.test.ts",
- "src/main/window/clipboard-dashboard-popout-access.test.ts",
- "src/main/window/clipboard-ipc-handlers.test.ts",
- "src/main/window/clipboard-text-write-verify.test.ts",
- "src/main/window/focus-existing-window.test.ts",
- "src/main/windows-process-tree-kill.test.ts",
- "src/main/windows/windows-process-table-native-addon.win32.test.ts",
- "src/main/workspace-space-analysis-capacity.test.ts",
- "src/main/workspace-space-analysis-du-timeout.test.ts",
- "src/main/worktree-create-preparation-wsl-root.test.ts",
- "src/main/worktree-retirement-discovery.test.ts",
- "src/main/worktree-trash.test.ts",
- "src/main/wsl-distro-list-single-flight.test.ts",
- "src/main/wsl-running-path-filter.test.ts",
- "src/main/wsl/wsl-invocation-boundary.test.ts",
- "src/preload/browser-find-subscriptions.test.ts",
- "src/preload/pty-snapshot-capability-ipc.test.ts",
- "src/preload/renderer-heap-statistics-reader.test.ts",
- "src/relay/external-automations-handler-log-path.test.ts",
- "src/relay/fs-handler-list-files-result-limit.test.ts",
- "src/relay/fs-handler.test.ts",
- "src/relay/fs-path-metadata-requests.test.ts",
- "src/relay/git-handler-branch-diff-equivalence.test.ts",
- "src/relay/git-handler-staging.test.ts",
- "src/relay/git-handler-submodule-ops.test.ts",
- "src/relay/git-handler-termination.test.ts",
- "src/relay/git-handler.test.ts",
- "src/relay/git-porcelain-local-parity.test.ts",
- "src/relay/git-response-stream-ownership.test.ts",
- "src/relay/omp-fresh-launch-environment.test.ts",
- "src/relay/plugin-source-limit.test.ts",
- "src/relay/protocol-handshake.test.ts",
- "src/relay/pty-handler-attach-replay.test.ts",
- "src/relay/pty-handler-grace-timer.test.ts",
- "src/relay/pty-handler-startup-command-delivery.test.ts",
- "src/renderer/src/app-shell/shutdown-checkpoint-persist.test.ts",
- "src/renderer/src/assets/terminal-scrollbar-style.test.ts",
- "src/renderer/src/assets/theme-utility-generation.test.ts",
- "src/renderer/src/components/TerminalTitlebarTabs.test.tsx",
- "src/renderer/src/components/activity/activity-auto-mark-read-loop.react185.test.tsx",
- "src/renderer/src/components/activity/activity-event-builder-agent-context.test.ts",
- "src/renderer/src/components/activity/activity-event-builder.host-ownership.test.ts",
- "src/renderer/src/components/activity/activity-event-builder.identity-reuse.test.ts",
- "src/renderer/src/components/activity/activity-thread-virtual-items.test.ts",
- "src/renderer/src/components/activity/useActivityUnreadCount.test.ts",
- "src/renderer/src/components/artifacts/ArtifactPublishButton.test.tsx",
- "src/renderer/src/components/artifacts/artifact-list-search.test.ts",
- "src/renderer/src/components/automations/AutomationHostFilterNotice.test.tsx",
- "src/renderer/src/components/automations/AutomationsListPanel.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.escape-precedence.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.notice-recovery.test.tsx",
- "src/renderer/src/components/automations/automation-host-cache-health.test.ts",
- "src/renderer/src/components/automations/automation-host-recovery.test.ts",
- "src/renderer/src/components/automations/automation-list-keyboard-navigation.test.ts",
- "src/renderer/src/components/automations/automation-list-view-sort.test.ts",
- "src/renderer/src/components/automations/automation-usage-model.test.ts",
- "src/renderer/src/components/automations/use-selected-automation-run-history.test.tsx",
- "src/renderer/src/components/browser-favicon.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.markup.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/GrabConfirmationSheet.test.ts",
- "src/renderer/src/components/browser-pane/annotate/useMarkupEditor.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.webview-preferences.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-workspace-pane.adoption-chrome.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/use-browser-page-chrome-focus.test.tsx",
- "src/renderer/src/components/browser-pane/browser-client-page-metadata-publisher.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-guest-eviction-veto.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-guest-retention-site-census.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-guest-recovery.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-system-resume.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/use-browser-page-slot-viewport.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/use-webview-drag-passthrough-active.test.tsx",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-restart-scheduler.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-status.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-stream-activation.test.ts",
- "src/renderer/src/components/browser-pane/workspace-doc/use-doc-preview-guest-tools.test.ts",
- "src/renderer/src/components/cmd-j/palette-activation-focus-routing.test.ts",
- "src/renderer/src/components/connect-dialog-outside-dismiss.test.tsx",
- "src/renderer/src/components/contextual-tours/ContextualTourControl.test.ts",
- "src/renderer/src/components/dashboard-popout/AgentKanbanCard.test.tsx",
- "src/renderer/src/components/dashboard-popout/preview-terminal-right-click-paste.test.ts",
- "src/renderer/src/components/dashboard-popout/preview-terminal-snapshot-replay.test.ts",
- "src/renderer/src/components/dashboard/agent-finished-timestamp.test.ts",
- "src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts",
- "src/renderer/src/components/dashboard/build-dashboard-snapshot.rows-cache.test.ts",
- "src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts",
- "src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts",
- "src/renderer/src/components/dictation/dictation-stopped-sessions.test.ts",
- "src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx",
- "src/renderer/src/components/diff-comments/diff-comment-popover-outside-click.test.tsx",
- "src/renderer/src/components/editor/ConflictComponents.test.tsx",
- "src/renderer/src/components/editor/IpynbRendering.test.tsx",
- "src/renderer/src/components/editor/MonacoEditor.content-owner.test.tsx",
- "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-row-drag.test.tsx",
- "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-windowing.test.tsx",
- "src/renderer/src/components/editor/diff-navigation-context.test.tsx",
- "src/renderer/src/components/editor/editor-cmd-save-target.test.ts",
- "src/renderer/src/components/editor/editor-header.test.ts",
- "src/renderer/src/components/editor/editor-labels.test.ts",
- "src/renderer/src/components/editor/ipynb-ansi.test.ts",
- "src/renderer/src/components/editor/line-copy-path.test.ts",
- "src/renderer/src/components/editor/markdown-artifact-upload.test.ts",
- "src/renderer/src/components/editor/markdown-preview-local-images.test.ts",
- "src/renderer/src/components/editor/markdown-preview-search.test.ts",
- "src/renderer/src/components/editor/markdown-rich-mode.test.ts",
- "src/renderer/src/components/editor/markdown-table-of-contents.test.ts",
- "src/renderer/src/components/editor/markdown-toc-visibility-gate.test.ts",
- "src/renderer/src/components/editor/monaco-content-sync.test.ts",
- "src/renderer/src/components/editor/rich-markdown-extension.test.ts",
- "src/renderer/src/components/editor/rich-markdown-large-text-paste.test.ts",
- "src/renderer/src/components/editor/rich-markdown-paragraph.test.ts",
- "src/renderer/src/components/editor/rich-markdown-terminal-path-paste.test.ts",
- "src/renderer/src/components/editor/selection-copy.test.ts",
- "src/renderer/src/components/editor/use-rich-markdown-table-control-target.test.tsx",
- "src/renderer/src/components/emulator-pane/MobileEmulatorTabIntroCallout.test.tsx",
- "src/renderer/src/components/error-boundaries/react-185-bystander-attribution.test.tsx",
- "src/renderer/src/components/feature-tips/VoiceDictationFeatureTipVisual.test.tsx",
- "src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts",
- "src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts",
- "src/renderer/src/components/feature-wall/browser-animated-visual-sequence.test.ts",
- "src/renderer/src/components/file-path-cursor-tooltip.test.ts",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.shortcuts.test.tsx",
- "src/renderer/src/components/github-item-dialog-source-boundary.test.ts",
- "src/renderer/src/components/github-project/ProjectRoadmap.test.tsx",
- "src/renderer/src/components/github-project/ProjectViewStates.test.tsx",
- "src/renderer/src/components/github/github-work-item-label-filter.test.ts",
- "src/renderer/src/components/linear-issue-view-storage.test.ts",
- "src/renderer/src/components/linear-project-presentation.test.ts",
- "src/renderer/src/components/mobile/MobilePage.test.tsx",
- "src/renderer/src/components/mobile/NetworkInterfacePicker.test.tsx",
- "src/renderer/src/components/mobile/use-mobile-page-paired-devices.test.ts",
- "src/renderer/src/components/native-chat/NativeChatAutocompleteMenus.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatInteractiveCard.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.turn-fold.test.tsx",
- "src/renderer/src/components/native-chat/StructuredAgentSessionHandoffChrome.test.tsx",
- "src/renderer/src/components/native-chat/StructuredAgentSessionStatusBridge.test.tsx",
- "src/renderer/src/components/native-chat/background-task-roster.test.ts",
- "src/renderer/src/components/native-chat/native-chat-composer-autogrow.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-composer-composition.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-composer-workspace-file-drop.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-draft-cache.test.ts",
- "src/renderer/src/components/native-chat/native-chat-file-link.test.ts",
- "src/renderer/src/components/native-chat/native-chat-launch-session-options.test.ts",
- "src/renderer/src/components/native-chat/native-chat-noise.test.ts",
- "src/renderer/src/components/native-chat/native-chat-retire-persisted-model.test.ts",
- "src/renderer/src/components/native-chat/native-chat-row-height-estimate.test.ts",
- "src/renderer/src/components/native-chat/native-chat-runtime-send-launch-draft.test.ts",
- "src/renderer/src/components/native-chat/native-chat-stop-layering.test.ts",
- "src/renderer/src/components/native-chat/native-chat-task-list-state.test.ts",
- "src/renderer/src/components/native-chat/native-chat-turn-diffs.test.ts",
- "src/renderer/src/components/native-chat/structured-agent-session-outbox-storage.test.ts",
- "src/renderer/src/components/native-chat/structured-session-takeover-report.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-composer-paste.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-launch-draft-adoption.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-session-options.test.ts",
- "src/renderer/src/components/native-chat/use-structured-agent-session-prompt-cancel.test.tsx",
- "src/renderer/src/components/new-workspace/smart-workspace-command-value.test.ts",
- "src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx",
- "src/renderer/src/components/pet/pet-overlay-visibility.test.ts",
- "src/renderer/src/components/pet/usePetPointerInteraction.test.ts",
- "src/renderer/src/components/provider-check-classification-parity.test.ts",
- "src/renderer/src/components/pull-request-page/cache/file-content.test.ts",
- "src/renderer/src/components/repo/NestedRepoChecklist.test.tsx",
- "src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts",
- "src/renderer/src/components/right-sidebar/AiVaultShowMoreSessionsRow.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerNameFilter.test.tsx",
- "src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx",
- "src/renderer/src/components/right-sidebar/HostedReviewActions.draft.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.commit-failure-recovery.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControl.pr-generation-records.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControl.resolve-conflicts-prompt.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-view-defaults.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-empty-state.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-git-status-effects.test.tsx",
- "src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-deferred-dir-toggle.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-dir-load-tracker.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-runtime-owner-boundary.test.ts",
- "src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts",
- "src/renderer/src/components/right-sidebar/right-panel-comment-focus-timers.test.ts",
- "src/renderer/src/components/right-sidebar/right-sidebar-effective-tab.test.ts",
- "src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-branch-section-heading.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control-commit-eligibility.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control-dropdown-items.create-pr-intent.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-too-many-changes-banner.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/listing/use-file-projection-work.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/notes/use-diff-comment-notes.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/review/use-action-model.test.tsx",
- "src/renderer/src/components/right-sidebar/use-persisted-ai-vault-view-options.test.tsx",
- "src/renderer/src/components/right-sidebar/use-source-control-branch-compare.test.tsx",
- "src/renderer/src/components/right-sidebar/useFileExplorerVisibleRowProjection.test.ts",
- "src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx",
- "src/renderer/src/components/settings/CodexLoginLinkNotice.test.tsx",
- "src/renderer/src/components/settings/DeveloperPermissionsPane.test.tsx",
- "src/renderer/src/components/settings/GhosttyImportModal.test.ts",
- "src/renderer/src/components/settings/MobilePairingQrSection.test.tsx",
- "src/renderer/src/components/settings/OrcaAccountSettingsPane.test.tsx",
- "src/renderer/src/components/settings/PluginInstallDialog.test.tsx",
- "src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx",
- "src/renderer/src/components/settings/RepositorySourceControlAiSection.test.ts",
- "src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx",
- "src/renderer/src/components/settings/ShareSkillsSettingsPane.test.tsx",
- "src/renderer/src/components/settings/SshTargetCard.test.tsx",
- "src/renderer/src/components/settings/TaskSourceShowInTasksStep.test.tsx",
- "src/renderer/src/components/settings/TaskSourceSimpleSetup.test.tsx",
- "src/renderer/src/components/settings/TasksPane.test.tsx",
- "src/renderer/src/components/settings/browser-cookie-import-label.test.ts",
- "src/renderer/src/components/settings/codex-config-sync-warning.test.ts",
- "src/renderer/src/components/settings/general-editor-search.test.ts",
- "src/renderer/src/components/settings/integrations-pane-status.test.ts",
- "src/renderer/src/components/settings/linear-agent-skill-install-cta.test.tsx",
- "src/renderer/src/components/settings/provider-account-visibility.test.ts",
- "src/renderer/src/components/settings/repository-source-control-ai-global-ux.test.ts",
- "src/renderer/src/components/settings/use-debounced-settings-text-draft.test.ts",
- "src/renderer/src/components/settings/worktree-symlink-path-filter.test.ts",
- "src/renderer/src/components/sidebar/AddRepoDialog.default-checkout.test.ts",
- "src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx",
- "src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.test.tsx",
- "src/renderer/src/components/sidebar/NewExternalWorktreesInboxLine.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardAgents.activation.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardAgents.send-target.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeDeveloperMenu.test.tsx",
- "src/renderer/src/components/sidebar/add-remote-host-ssh-actions.test.ts",
- "src/renderer/src/components/sidebar/clone-defaults.test.ts",
- "src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.test.ts",
- "src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts",
- "src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx",
- "src/renderer/src/components/sidebar/hovered-workspace-delete.test.ts",
- "src/renderer/src/components/sidebar/imported-worktrees-card-actions.test.ts",
- "src/renderer/src/components/sidebar/project-header-action-selector-lockstep.test.ts",
- "src/renderer/src/components/sidebar/project-header-drag.test.ts",
- "src/renderer/src/components/sidebar/sidebar-empty-state-gate.test.ts",
- "src/renderer/src/components/sidebar/sidebar-filter-state.test.ts",
- "src/renderer/src/components/sidebar/smart-attention.test.ts",
- "src/renderer/src/components/sidebar/ssh-target-duplicate.test.ts",
- "src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx",
- "src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts",
- "src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-send-target-inputs.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-title-display.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-host-collision.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/drag/pointer-flush.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/listing/pending-worktree-creation-keys.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/listing/review-cache-inputs.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/navigation/folder-reveal.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/rows/FolderPathStatusIndicator.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/rows/option-dom-host-collision.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/viewport/scroll-adjustment.test.ts",
- "src/renderer/src/components/sidebar/worktree-manual-order-catalog.test.ts",
- "src/renderer/src/components/sidebar/worktree-multi-selection.test.ts",
- "src/renderer/src/components/sidebar/worktree-review-helpers.test.tsx",
- "src/renderer/src/components/sidebar/worktree-sidebar-drop-preview.test.ts",
- "src/renderer/src/components/skills/SkillInstallWorkspaceCombobox.test.tsx",
- "src/renderer/src/components/skills/SkillShareDialog.test.tsx",
- "src/renderer/src/components/status-bar/PortsStatusSegment.render-stability.test.tsx",
- "src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx",
- "src/renderer/src/components/status-bar/UpdateStatusSegment.test.tsx",
- "src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts",
- "src/renderer/src/components/status-bar/resource-session-kill-confirmation.test.ts",
- "src/renderer/src/components/status-bar/resource-session-navigation.test.ts",
- "src/renderer/src/components/status-bar/usage-roster-formatting.test.ts",
- "src/renderer/src/components/status-bar/workspace-space-manager-source-boundary.test.ts",
- "src/renderer/src/components/tab-bar/QuickLaunchButton.test.ts",
- "src/renderer/src/components/tab-bar/TabBar.worktree-write-gate.windows.test.tsx",
- "src/renderer/src/components/tab-bar/TabBarCreateEntry.tab-results.test.tsx",
- "src/renderer/src/components/tab-bar/windows-shell-menu-visibility.test.ts",
- "src/renderer/src/components/tab-group/RetainedPaneHost.test.tsx",
- "src/renderer/src/components/tab-group/tab-drag-pointer.test.ts",
- "src/renderer/src/components/task-page-github-issue-creation.test.ts",
- "src/renderer/src/components/task-page-initial-selection-scaling.test.tsx",
- "src/renderer/src/components/task-page-jira-load-state.test.ts",
- "src/renderer/src/components/task-page-linear-issue-empty-state.test.ts",
- "src/renderer/src/components/task-page-linear-team-selection.test.ts",
- "src/renderer/src/components/task-page-localized-options.test.ts",
- "src/renderer/src/components/task-page-mutation-page-allocation.test.ts",
- "src/renderer/src/components/task-source-provider-availability.test.ts",
- "src/renderer/src/components/terminal-pane/RunningTerminalCloseDialog.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-done-quiet-window.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-stamped-turn-boundary.test.ts",
- "src/renderer/src/components/terminal-pane/agent-hook-terminal-lifecycle.test.ts",
- "src/renderer/src/components/terminal-pane/agent-process-inspection-round.test.ts",
- "src/renderer/src/components/terminal-pane/git-bash-console-capacity.test.ts",
- "src/renderer/src/components/terminal-pane/issue-21762-tracking-mode-middle-click-double-paste.repro.test.ts",
- "src/renderer/src/components/terminal-pane/layout-serialization.test.ts",
- "src/renderer/src/components/terminal-pane/osc52-clipboard.test.ts",
- "src/renderer/src/components/terminal-pane/pending-split-close.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-deliberate-sleep-guard.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-direct-ssh-reattach-retry.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-foreground-write-path.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hook-completion-bell-arbitration.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-notification-settings-gating.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-sleeping-resume-banner.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-spawn-left-pane-unbound.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-task-complete-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-visibility-resume-size.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/pane-pty-layout-binding.test.ts",
- "src/renderer/src/components/terminal-pane/pty-side-effect-pending-census.test.ts",
- "src/renderer/src/components/terminal-pane/pty-size-reconcile.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-handler-suspension.test.ts",
- "src/renderer/src/components/terminal-pane/remote-desktop-viewport-claim.test.ts",
- "src/renderer/src/components/terminal-pane/remote-hidden-output-restore-unavailable-banner.repro.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-query-reply-immediate.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-end-verdict.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-absence-evidence.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-pane-handle-resolution.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-sticky-replacement-policy.test.ts",
- "src/renderer/src/components/terminal-pane/sleeping-record-park-exemption.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-capability-replies.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-captured-input-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-command-lifecycle.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ctrl-arrow-conpty.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-error-accumulation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-cancelled-preedit-visibility.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-composition-deduplication.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-trailing-preedit-occlusion.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-keyboard-event-handlers-focus.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-layout-duplicate-pty-replay.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-click-behavior.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-osc-url-routing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-pty-mouse-suppression.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-option-kitty-release.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-host-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-park-verdict-worktree-driver-loop.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-watcher-registry.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-multiline-policy.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-process-exit-restart.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-shortcut-select-all.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-startup-timing-scheduler.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-url-link-hit-testing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-visibility-resume.test.ts",
- "src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/use-terminal-park-mount-intent.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/useTerminalFontZoom.test.ts",
- "src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts",
- "src/renderer/src/components/terminal-search-long-wrapped-line.test.ts",
- "src/renderer/src/components/terminal/background-terminal-worktree-mount.test.ts",
- "src/renderer/src/components/terminal/initial-terminal-wiring.test.ts",
- "src/renderer/src/components/terminal/tab-type-cycle.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-close-running-confirm.test.ts",
- "src/renderer/src/components/terminal/use-terminal-provider-snapshot-capability.test.tsx",
- "src/renderer/src/components/use-terminal-window-lifecycle.lazy-ref.test.tsx",
- "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-facet-rows.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal-snapshot-batch.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-filter.test.ts",
- "src/renderer/src/hooks/automations-changed-event-attribution.test.ts",
- "src/renderer/src/hooks/composer-state/attachment-drop-failure.test.tsx",
- "src/renderer/src/hooks/direct-ssh-runtime-wake-isolation.test.tsx",
- "src/renderer/src/hooks/ipc-events/normalize-agent-status-event.test.ts",
- "src/renderer/src/hooks/ipc-events/terminal-ui-routing-ipc-bridge-split.test.ts",
- "src/renderer/src/hooks/mobile-terminal-reveal-tab-adoption.test.ts",
- "src/renderer/src/hooks/modal-return-focus-action.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-fresh-client-tab-seeding.test.ts",
- "src/renderer/src/hooks/use-palette-search-evaluation-context.test.ts",
- "src/renderer/src/hooks/useActiveProjectSkillRuntime.test.tsx",
- "src/renderer/src/hooks/useAutoAckViewedAgent.focus-group.test.ts",
- "src/renderer/src/hooks/useComposerState-decisions.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-hook-titles.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-replay.test.ts",
- "src/renderer/src/hooks/useIpcEvents-close-routing-browser-pages.test.ts",
- "src/renderer/src/hooks/useIpcEvents-new-workspace-shortcut.test.ts",
- "src/renderer/src/hooks/usePrimarySelectionPaste.test.tsx",
- "src/renderer/src/i18n/locale-english-regression.test.ts",
- "src/renderer/src/i18n/pseudo-localization.test.ts",
- "src/renderer/src/lazy-modal-mount-state.test.ts",
- "src/renderer/src/lib/activate-ai-vault-structured-session-reveal.test.ts",
- "src/renderer/src/lib/agent-launch-caller-routing.test.ts",
- "src/renderer/src/lib/agent-paste-draft-readiness-budget.test.ts",
- "src/renderer/src/lib/agent-picker-search.test.ts",
- "src/renderer/src/lib/agent-send-title-status.test.ts",
- "src/renderer/src/lib/agent-skill-cli-prerequisite.test.ts",
- "src/renderer/src/lib/agent-status-worktree-attribution.test.ts",
- "src/renderer/src/lib/agent-tab-shortcuts.test.ts",
- "src/renderer/src/lib/app-menu-paste.test.ts",
- "src/renderer/src/lib/automation-terminal-ownership.test.ts",
- "src/renderer/src/lib/browser-history-match.performance.test.ts",
- "src/renderer/src/lib/browser-history-match.test.ts",
- "src/renderer/src/lib/cmd-j-host-qualified-candidate-ownership.test.ts",
- "src/renderer/src/lib/codex-pane-restart-eligibility.test.ts",
- "src/renderer/src/lib/document-theme.test.ts",
- "src/renderer/src/lib/editor-font-zoom.test.ts",
- "src/renderer/src/lib/find-query-bounds.test.ts",
- "src/renderer/src/lib/focus-terminal-tab-surface.test.ts",
- "src/renderer/src/lib/i18n-jsx-spacing-guard.test.ts",
- "src/renderer/src/lib/jira-source-host.test.ts",
- "src/renderer/src/lib/keyboard-layout/detect-option-as-alt.test.ts",
- "src/renderer/src/lib/keyboard-layout/option-key-location-state.test.ts",
- "src/renderer/src/lib/launch-work-item-direct-messages.test.ts",
- "src/renderer/src/lib/launch-worktree-background-terminals.test.ts",
- "src/renderer/src/lib/lazy-chunk-recovery-reload.test.ts",
- "src/renderer/src/lib/linear-issue-workspace-open.test.ts",
- "src/renderer/src/lib/linear-linked-work-item.test.ts",
- "src/renderer/src/lib/local-preflight-context-cache.test.ts",
- "src/renderer/src/lib/local-preflight-context.test.ts",
- "src/renderer/src/lib/monaco-delayer-cancellation-guard.test.ts",
- "src/renderer/src/lib/monaco-languages/register-jsonl.test.ts",
- "src/renderer/src/lib/palette-match/palette-phrase-placement.test.ts",
- "src/renderer/src/lib/palette-repo-resolution.test.ts",
- "src/renderer/src/lib/pane-manager/pane-dom-creation.test.ts",
- "src/renderer/src/lib/pane-manager/pane-manager-registry.test.ts",
- "src/renderer/src/lib/pane-manager/pane-pointer-focus.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-mouse-wheel.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-backlog-cap.test.ts",
- "src/renderer/src/lib/pane-manager/pane-tree-equalization-scaling.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-foreground-repair-convergence.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset-on-write.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-scroll-intent-input-resync.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-structural-replay-coordinator.test.ts",
- "src/renderer/src/lib/pane-manager/xterm-instance-disposed.test.ts",
- "src/renderer/src/lib/provisioned-root-create-options.test.ts",
- "src/renderer/src/lib/react-renderer-root.test.ts",
- "src/renderer/src/lib/resolved-worktree-execution-host.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-suppress-navigation.test.ts",
- "src/renderer/src/lib/runtime-session-mirror-unverifiable-host.test.ts",
- "src/renderer/src/lib/session-write-subscriber-deferred-persist.test.ts",
- "src/renderer/src/lib/smart-github-submit.test.ts",
- "src/renderer/src/lib/source-control-launch-agent-selection.test.ts",
- "src/renderer/src/lib/terminal-links.test.ts",
- "src/renderer/src/lib/terminal-quick-command-search.test.ts",
- "src/renderer/src/lib/terminal-tab-for-pty-id.test.ts",
- "src/renderer/src/lib/titlebar-worktree-history-controls.test.ts",
- "src/renderer/src/lib/ui-zoom.test.ts",
- "src/renderer/src/lib/use-tab-agent-remote-pty-selector.test.ts",
- "src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts",
- "src/renderer/src/lib/window-label-formatter.test.ts",
- "src/renderer/src/lib/work-item-lookup-text.test.ts",
- "src/renderer/src/lib/workspace-create-error-format.test.ts",
- "src/renderer/src/lib/workspace-file-drag.test.ts",
- "src/renderer/src/lib/workspace-session-host-persistence.test.ts",
- "src/renderer/src/lib/workspace-session-patch.test.ts",
- "src/renderer/src/lib/workspace-session-staged-browser-tabs.test.ts",
- "src/renderer/src/lib/worktree-activation-default-tabs.test.ts",
- "src/renderer/src/lib/worktree-reactivation-preserved-pane-replacement.test.ts",
- "src/renderer/src/lib/worktree-runtime-owner-index.detected.test.ts",
- "src/renderer/src/lib/worktree-status.test.ts",
- "src/renderer/src/lib/worktree-visit-recency.test.ts",
- "src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts",
- "src/renderer/src/runtime/host-session-mirror-hydration-drain.test.ts",
- "src/renderer/src/runtime/mirrored-agent-status-clock-skew.test.ts",
- "src/renderer/src/runtime/remote-runtime-session-tabs-inflight.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-snapshot-kitty-flags.test.ts",
- "src/renderer/src/runtime/remote-server-parity.test.ts",
- "src/renderer/src/runtime/restored-client-hosted-browser-host-restart-attach.test.ts",
- "src/renderer/src/runtime/runtime-file-client-search-listing.test.ts",
- "src/renderer/src/runtime/runtime-file-search-bounds.test.ts",
- "src/renderer/src/runtime/runtime-rpc-result.test.ts",
- "src/renderer/src/runtime/structured-agent-session-client.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-agent-status-projection.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-terminal-layout.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-terminal-registration-ownership.test.ts",
- "src/renderer/src/runtime/web-runtime-browser-materialization.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-staging.test.ts",
- "src/renderer/src/runtime/web-runtime-session.test.ts",
- "src/renderer/src/runtime/web-runtime-terminal-identity.test.ts",
- "src/renderer/src/runtime/web-session-browser-placement.test.ts",
- "src/renderer/src/runtime/web-session-intent-owner.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-agent-status.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-client-owned-placement.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-html-preview-focus.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-tracking-teardown.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-unverifiable-host.test.tsx",
- "src/renderer/src/runtime/web-session-tabs-sync-visibility-collision.test.tsx",
- "src/renderer/src/runtime/web-session-tabs-sync.test.ts",
- "src/renderer/src/ssh/ssh-connect-ui-timeout.test.ts",
- "src/renderer/src/store/slices/agent-status-freshness-cache.test.ts",
- "src/renderer/src/store/slices/agent-status-observation-neutrality.test.ts",
- "src/renderer/src/store/slices/agent-status-quit-capture-resumable-agents.test.ts",
- "src/renderer/src/store/slices/agent-status-session-boundary-done.test.ts",
- "src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts",
- "src/renderer/src/store/slices/editor-markdown-link-activation.test.ts",
- "src/renderer/src/store/slices/editor-right-sidebar-state.test.ts",
- "src/renderer/src/store/slices/editor/file-ids/hydrated-editor-file-index.test.ts",
- "src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts",
- "src/renderer/src/store/slices/github-checks-cache.test.ts",
- "src/renderer/src/store/slices/github-project-row-owner.test.ts",
- "src/renderer/src/store/slices/github-worktree-refresh-if-stale.test.ts",
- "src/renderer/src/store/slices/linear-scoped-collection-cache.test.ts",
- "src/renderer/src/store/slices/new-issue-draft.test.ts",
- "src/renderer/src/store/slices/new-markdown.test.ts",
- "src/renderer/src/store/slices/persisted-ui-write-baseline.test.ts",
- "src/renderer/src/store/slices/preflight.test.ts",
- "src/renderer/src/store/slices/repos-add-races.test.ts",
- "src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts",
- "src/renderer/src/store/slices/repos-all-hosts.test.ts",
- "src/renderer/src/store/slices/repos-update-serialization.test.ts",
- "src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts",
- "src/renderer/src/store/slices/ssh.test.ts",
- "src/renderer/src/store/slices/store-session-workspace-hydration.test.ts",
- "src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts",
- "src/renderer/src/store/slices/terminals-hydration.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-enrichment-performance.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-wrong-host-removal-guard.test.ts",
- "src/renderer/src/store/slices/worktree-meta-update-application.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-remote-lineage.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-removal-purge.test.ts",
- "src/renderer/src/store/slices/worktrees-pending-creation-state.test.ts",
- "src/renderer/src/store/slices/worktrees-runtime-connection-generation-fence.test.ts",
- "src/renderer/src/store/slices/worktrees-workspace-selection-state.test.ts",
- "src/renderer/src/store/slices/worktrees/listing/stale-listing-purges-created-worktree.test.ts",
- "src/renderer/src/store/slices/worktrees/teardown/host-qualified-removal-refusal.test.ts",
- "src/renderer/src/store/terminals/restored-relay-session-identity.test.ts",
- "src/renderer/src/store/terminals/terminal-shutdown-guards-identity.test.ts",
- "src/renderer/src/store/terminals/terminal-shutdown-map-identity.test.ts",
- "src/shared/absolute-dir-override.test.ts",
- "src/shared/agent-feature-install-commands.test.ts",
- "src/shared/agent-hook-listener-antigravity.test.ts",
- "src/shared/agent-hook-listener-pi-compatible.test.ts",
- "src/shared/agent-hook-listener-relay-dependency.test.ts",
- "src/shared/agent-hook-listener/providers/muse-events.test.ts",
- "src/shared/agent-hook-listener/transcript-reader.test.ts",
- "src/shared/agent-hook-spool-read.test.ts",
- "src/shared/agent-process-recognition.test.ts",
- "src/shared/agent-resume-argv-drop.test.ts",
- "src/shared/agent-session-journal-schemas.test.ts",
- "src/shared/agent-session-option-catalog-grok.test.ts",
- "src/shared/agent-session-turn-record.test.ts",
- "src/shared/agent-startup-plan-inputs.test.ts",
- "src/shared/agent-status-legacy-ingress-ratchet.test.ts",
- "src/shared/agent-status-osc-scan-budget.test.ts",
- "src/shared/agent-status-osc-split-frame-scan-budget.test.ts",
- "src/shared/agent-status-store.test.ts",
- "src/shared/agent-title-evidence.test.ts",
- "src/shared/ai-vault-scan-error-message.test.ts",
- "src/shared/automation-cron-dialect.test.ts",
- "src/shared/automation-list-scope.test.ts",
- "src/shared/automation-owner-key.test.ts",
- "src/shared/check-job-log-tail-slice.test.ts",
- "src/shared/child-process/retryable-process-exit-proof.test.ts",
- "src/shared/child-process/run-process.test.ts",
- "src/shared/child-process/windows-cmd-shim-resolution.win32.test.ts",
- "src/shared/cli-argument-boundary.test.ts",
- "src/shared/clipboard-image.test.ts",
- "src/shared/codex-reset-credit-attempt-ledger.test.ts",
- "src/shared/combined-diff-file-tree-width.test.ts",
- "src/shared/command-token-scanner.test.ts",
- "src/shared/commit-message-plan.test.ts",
- "src/shared/emoji-shortcode-catalog.lazy.test.ts",
- "src/shared/ephemeral-vm-recipe-repo-url.test.ts",
- "src/shared/git-branch-cleanup.test.ts",
- "src/shared/git-branch-line-total-soft-deadline.test.ts",
- "src/shared/git-capability-cache.test.ts",
- "src/shared/git-push-target-validation.test.ts",
- "src/shared/git-status-branch-line-total-cache.test.ts",
- "src/shared/github/account-binding.test.ts",
- "src/shared/github/pull-request-merge-methods.test.ts",
- "src/shared/grok-model-list-probe.test.ts",
- "src/shared/hosted-review-creation-providers.test.ts",
- "src/shared/hosted-review-refs.test.ts",
- "src/shared/keybindings-conflicts.test.ts",
- "src/shared/local-account-runtime.test.ts",
- "src/shared/local-build-compatibility.test.ts",
- "src/shared/mobile-file-directory-limit.test.ts",
- "src/shared/mobile-pairing-connection-mode.test.ts",
- "src/shared/mobile-pairing-custom-address.test.ts",
- "src/shared/mobile-relay-phone-protocol.test.ts",
- "src/shared/modifier-double-tap-detector.test.ts",
- "src/shared/native-chat-activity-tail-line.test.ts",
- "src/shared/native-chat-ask-fifo.test.ts",
- "src/shared/native-chat-session-option-defaults.test.ts",
- "src/shared/native-chat-tool-run-outcome.test.ts",
- "src/shared/nested-worker-depth.test.ts",
- "src/shared/omp-source-control-discovery.test.ts",
- "src/shared/opencode-permission-status.test.ts",
- "src/shared/pairing-address-auto-selection.test.ts",
- "src/shared/pane-agent-identity-surface-inventory.test.ts",
- "src/shared/pi-agent-kind.test.ts",
- "src/shared/plugins/plugin-panel-shell.test.ts",
- "src/shared/pr-comment-groups.test.ts",
- "src/shared/process-output-field-scanner.test.ts",
- "src/shared/process-table-snapshot.test.ts",
- "src/shared/project-catalog-row-normalization.test.ts",
- "src/shared/project-identity-succession.test.ts",
- "src/shared/pty-delivery-diagnostics.test.ts",
- "src/shared/pull-request-generation.test.ts",
- "src/shared/raster-image-base64-preview.test.ts",
- "src/shared/remote-runtime-shared-control-connection.test.ts",
- "src/shared/remote-runtime-subscription-connect-bound.test.ts",
- "src/shared/remote-runtime-tailscale-hint.test.ts",
- "src/shared/repo-badge-color.test.ts",
- "src/shared/repo-ref-maintenance.test.ts",
- "src/shared/repro-8478-opencode-native-title-icon.test.ts",
- "src/shared/resolved-worktree-lineage.test.ts",
- "src/shared/runtime-rpc-call-queue.test.ts",
- "src/shared/secure-file-coarse-ctime.test.ts",
- "src/shared/sha256.test.ts",
- "src/shared/source-control-ai-action-variables.test.ts",
- "src/shared/source-scan/source-tree-scan.test.ts",
- "src/shared/stable-pane-id.test.ts",
- "src/shared/status-bar-usage-mode.test.ts",
- "src/shared/structured-agent-session-live-turn.test.ts",
- "src/shared/structured-agent-session-mutation.test.ts",
- "src/shared/tab-title-resolution.test.ts",
- "src/shared/terminal-color-scheme-protocol.test.ts",
- "src/shared/terminal-kitty-keyboard-mode-tracker.test.ts",
- "src/shared/terminal-osc133-carry-retention.test.ts",
- "src/shared/terminal-partial-escape-tail-ground-scan.test.ts",
- "src/shared/terminal-quick-commands.test.ts",
- "src/shared/terminal-scrollback-policy.test.ts",
- "src/shared/terminal-zero-dimensions-diagnostic.test.ts",
- "src/shared/tui-agent-config.test.ts",
- "src/shared/ui-locale.test.ts",
- "src/shared/updated-at-order.test.ts",
- "src/shared/workspace-linked-item-equality.test.ts",
- "src/shared/workspace-session-schema.sleeping-agent.test.ts",
- "src/shared/workspace-session-schema.test.ts",
- "src/shared/worktree-execution-host-resolution.test.ts",
- "src/shared/worktree/id.test.ts",
- "src/shared/worktree/ownership-worktree-base-path.test.ts",
- "tests/e2e/omp-retired-host-renderer.unit.test.ts",
- "tests/e2e/remote-agent-completion-authority.unit.test.ts",
- "tests/tools/omp-close-lifecycle.test.mjs",
- "tests/tools/relay-bench/phone-e2ee-desktop-parity.test.mjs"
- ],
- "durationMs": 851040
- },
- {
- "files": [
- "config/scripts/agent-status-hot-path-benchmark.test.ts",
- "config/scripts/build-mobile-web-app-bundle.test.mjs",
- "config/scripts/check-root-directory-entries.test.mjs",
- "config/scripts/check-terminal-perf-report-budgets.test.mjs",
- "config/scripts/codex-index-heal-contract-workflow.test.mjs",
- "config/scripts/dev-cli-terminal-wrapper.test.mjs",
- "config/scripts/electron-builder-config.test.mjs",
- "config/scripts/electron-vite-output-contract.test.ts",
- "config/scripts/ephemeral-vm-runtime-store-cross-version.test.ts",
- "config/scripts/generate-terminal-perf-html-report.test.mjs",
- "config/scripts/git-binary-compatibility-workflow.test.mjs",
- "config/scripts/hang-watchdog-process-metrics.test.mjs",
- "config/scripts/latest-stable-release.test.mjs",
- "config/scripts/live-remote-freeze-rpc.test.mjs",
- "config/scripts/locale-count-fragment-separator.test.mjs",
- "config/scripts/locale-translation-policy.es-pr.test.mjs",
- "config/scripts/locale-translation-policy.test.mjs",
- "config/scripts/localization-package-contract.test.mjs",
- "config/scripts/mobile-set-native-props-web-siblings.test.mjs",
- "config/scripts/mobile-web-app-external-navigation-grant.test.mjs",
- "config/scripts/mobile-web-app-page-closure-families.test.mjs",
- "config/scripts/mobile-web-app-session-external-links.test.mjs",
- "config/scripts/mobile-web-app-source-control-keyboard.test.mjs",
- "config/scripts/mobile-web-app-web-overrides.test.mjs",
- "config/scripts/node-old-space-limit.test.mjs",
- "config/scripts/orchestration-skill-guidance.test.mjs",
- "config/scripts/oxc-cli-invocation.test.mjs",
- "config/scripts/rebuild-native-deps-node-pty.test.mjs",
- "config/scripts/reclaim-dev-electron-bundles.test.ts",
- "config/scripts/verify-packaged-mobile-web-bundle.test.mjs",
- "config/scripts/windows-process-tree-patch-contract.test.mjs",
- "src/cli/command-suggestion-budget.test.ts",
- "src/cli/handlers/account.test.ts",
- "src/cli/handlers/agent-hooks.test.ts",
- "src/cli/handlers/automation-destination-fencing.test.ts",
- "src/cli/handlers/automation-owner-fencing.test.ts",
- "src/cli/handlers/orchestration-lifecycle-json-rejection.test.ts",
- "src/cli/handlers/orchestration-module-boundaries.test.ts",
- "src/cli/handlers/search.test.ts",
- "src/cli/index-omitted-host-scope-selectors.test.ts",
- "src/cli/index-project-setup.test.ts",
- "src/cli/index-terminal-list-host-scope.test.ts",
- "src/cli/index-worktree-selector-resolution.test.ts",
- "src/cli/index-worktree-set.test.ts",
- "src/cli/quote-stripped-json-flag.test.ts",
- "src/cli/runtime/serve-signal-exit-diagnostic.test.ts",
- "src/cli/runtime/status.test.ts",
- "src/cli/specs/computer.test.ts",
- "src/main/active-view-persistence-boundary.test.ts",
- "src/main/agent-awake-service-platform-assertions.test.ts",
- "src/main/agent-hooks/branch-rename-failure-output.test.ts",
- "src/main/agent-hooks/managed-hook-runtime.test.ts",
- "src/main/agent-hooks/managed-toml-ownership.test.ts",
- "src/main/agent-hooks/opencode-message-part-flood-bench.test.ts",
- "src/main/agent-hooks/remote-hook-service-installers.test.ts",
- "src/main/agent-hooks/server-claude-permission-visibility.test.ts",
- "src/main/agent-hooks/server-cursor-normalization.test.ts",
- "src/main/agent-hooks/server-grok-background-status.test.ts",
- "src/main/agent-hooks/server-grok-discovery.test.ts",
- "src/main/agent-hooks/server-interrupt-inference-resurrection.test.ts",
- "src/main/agent-hooks/server-start-failure-lifecycle.test.ts",
- "src/main/agent-hooks/windows-hook-payload-delivery.test.ts",
- "src/main/agent-hooks/windows-powershell-hook-launcher.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-manager.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-reattach.test.ts",
- "src/main/ai-vault-search/session-search-file-id.test.ts",
- "src/main/ai-vault-search/session-search-file-write.test.ts",
- "src/main/ai-vault-search/session-search-message-rows.test.ts",
- "src/main/ai-vault-search/session-search-native-chat-indexing.test.ts",
- "src/main/ai-vault-search/session-search-query-planner.test.ts",
- "src/main/ai-vault-search/session-search-read-decision.test.ts",
- "src/main/ai-vault-search/session-search-row-filter.test.ts",
- "src/main/ai-vault-search/session-search-service-registry.test.ts",
- "src/main/ai-vault-search/session-search-sidebar-parity.test.ts",
- "src/main/ai-vault-search/session-search-typo-scope.test.ts",
- "src/main/ai-vault/remote-session-scanner-muse.test.ts",
- "src/main/ai-vault/session-delete-target.test.ts",
- "src/main/ai-vault/session-first-user-prompt-read.test.ts",
- "src/main/ai-vault/session-list-result-validation.test.ts",
- "src/main/ai-vault/session-scan-cutoff.test.ts",
- "src/main/ai-vault/session-scanner-claude-subagents.test.ts",
- "src/main/ai-vault/session-scanner-claude-unicode-scope.test.ts",
- "src/main/ai-vault/session-scanner-codex-fast-path.test.ts",
- "src/main/ai-vault/session-scanner-muse.test.ts",
- "src/main/ai-vault/session-scanner-opencode-parser.test.ts",
- "src/main/ai-vault/session-scanner-recoverable-empty.test.ts",
- "src/main/ai-vault/session-scanner-service-entry.test.ts",
- "src/main/ai-vault/session-scanner-service-root-request.test.ts",
- "src/main/ai-vault/ssh-session-list.test.ts",
- "src/main/appkit-scene-mutation.test.ts",
- "src/main/artifacts/artifact-cloud-config.test.ts",
- "src/main/artifacts/artifact-share-record-store.test.ts",
- "src/main/automations/automation-owner-fencing.test.ts",
- "src/main/automations/automation-zero-grace-tick-latency.test.ts",
- "src/main/automations/hermes-cron-output.test.ts",
- "src/main/azure-devops/repository-ref.test.ts",
- "src/main/bitbucket/client.test.ts",
- "src/main/bitbucket/credential-connection.test.ts",
- "src/main/browser/agent-browser-bridge-mouse-input.test.ts",
- "src/main/browser/browser-clicked-link-routing.test.ts",
- "src/main/browser/browser-client-page-unavailability.test.ts",
- "src/main/browser/browser-cookie-import-scope.test.ts",
- "src/main/browser/browser-cookie-import-validated-partition.electron.test.ts",
- "src/main/browser/browser-cookie-import.comet.test.ts",
- "src/main/browser/browser-cookie-public-suffix-scope.test.ts",
- "src/main/browser/browser-download-destination.test.ts",
- "src/main/browser/browser-execution-host-storage-identity.test.ts",
- "src/main/browser/browser-google-auth-ua.test.ts",
- "src/main/browser/browser-manager-annotation-bridge.test.ts",
- "src/main/browser/browser-route-session-registry.test.ts",
- "src/main/browser/browser-screencast-dialog-settlement.test.ts",
- "src/main/browser/browser-session-ua-wire-identity.electron.test.ts",
- "src/main/browser/cdp-bridge-state.test.ts",
- "src/main/browser/cdp-print-to-pdf.test.ts",
- "src/main/browser/doc-preview-file-reader.test.ts",
- "src/main/browser/doc-preview-protocol.test.ts",
- "src/main/browser/electron-probe-display-launch.test.ts",
- "src/main/browser/local-ssh-browser-partition-identity.test.ts",
- "src/main/browser/paired-runtime-browser-host-reconciliation-negotiation.test.ts",
- "src/main/browser/snapshot-engine-iframe-sessions.test.ts",
- "src/main/claude-accounts/live-pty-gate.test.ts",
- "src/main/claude-accounts/runtime-auth-service-snapshot-validation.test.ts",
- "src/main/claude-usage/claude-model-pricing.test.ts",
- "src/main/claude/claude-agent-sdk-import-boundary.test.ts",
- "src/main/claude/claude-background-task-resume.test.ts",
- "src/main/claude/claude-background-task-terminal-frames.test.ts",
- "src/main/claude/claude-command-lifecycle-frames.test.ts",
- "src/main/claude/claude-descendant-escalation-boundary.test.ts",
- "src/main/claude/claude-stream-json-connection-close.test.ts",
- "src/main/claude/claude-streamed-text-checkpoints.test.ts",
- "src/main/claude/claude-structured-history-window.test.ts",
- "src/main/claude/claude-structured-location-support.test.ts",
- "src/main/claude/claude-structured-real-cli.test.ts",
- "src/main/claude/claude-transcript-rewind-proof.test.ts",
- "src/main/cli/cli-command-privileged-transaction.test.ts",
- "src/main/cli/legacy-appimage-cli-wrapper.test.ts",
- "src/main/cli/wsl-cli-installer.test.ts",
- "src/main/codex-accounts/runtime-home-retained-auth-provenance.test.ts",
- "src/main/codex-accounts/service-account-selection-and-removal.test.ts",
- "src/main/codex-accounts/service-reset-credit-target-routing.test.ts",
- "src/main/codex-usage/scanner-attribution-memo.test.ts",
- "src/main/codex-usage/store-persistence.test.ts",
- "src/main/codex/codex-app-server-connection.test.ts",
- "src/main/codex/codex-background-command-tracker.test.ts",
- "src/main/codex/codex-pane-launch-account.test.ts",
- "src/main/codex/codex-requested-close-turn-timing.test.ts",
- "src/main/codex/codex-server-request-disposition.test.ts",
- "src/main/codex/codex-structured-fast-mode.test.ts",
- "src/main/codex/codex-structured-journal-goal-admission.test.ts",
- "src/main/codex/codex-structured-journal-goal-rows.test.ts",
- "src/main/codex/codex-structured-location-support.test.ts",
- "src/main/codex/codex-structured-prompt-items.test.ts",
- "src/main/codex/codex-subagent-roster.test.ts",
- "src/main/codex/codex-trust-grant-host.test.ts",
- "src/main/codex/codex-user-hook-trust-rebase-client.test.ts",
- "src/main/codex/codex-user-hook-trust-rebase.test.ts",
- "src/main/codex/config-settings-baseline-upgrade.test.ts",
- "src/main/codex/config-toml-trust-hook-upsert.test.ts",
- "src/main/codex/hook-service-trust-grant.test.ts",
- "src/main/codex/sta-4737-unreadable-is-not-absent.test.ts",
- "src/main/computer/desktop-script-runtime-host.test.ts",
- "src/main/computer/desktop-script-runtime-host.win32.test.ts",
- "src/main/computer/macos-native-provider-paste-validation.test.ts",
- "src/main/crash-reporting/crash-breadcrumb-store-orphan-cleanup.test.ts",
- "src/main/crash-reporting/gpu-crash-fallback-field-sessions.test.ts",
- "src/main/crash-reporting/gpu-fallback-engagement.test.ts",
- "src/main/crash-reporting/gpu-fallback-recovered-launch.test.ts",
- "src/main/daemon/bash-prompt-command-composition.test.ts",
- "src/main/daemon/daemon-bundle-staleness.test.ts",
- "src/main/daemon/daemon-cgroup-scope.test.ts",
- "src/main/daemon/daemon-endpoint-windows.test.ts",
- "src/main/daemon/daemon-foreground-confirmation-protocol.test.ts",
- "src/main/daemon/daemon-idle-shutdown.test.ts",
- "src/main/daemon/daemon-init-endpoint-adoption.test.ts",
- "src/main/daemon/daemon-init-provider-installation.test.ts",
- "src/main/daemon/daemon-launched-child-spawn.test.ts",
- "src/main/daemon/daemon-pty-adapter-daemon-recovery.test.ts",
- "src/main/daemon/daemon-pty-router-history-handoff.test.ts",
- "src/main/daemon/hangul-cell-width-agreement.test.ts",
- "src/main/daemon/headless-emulator-snapshot-cost.bench.test.ts",
- "src/main/daemon/headless-osc-link-ranges.test.ts",
- "src/main/daemon/ndjson.test.ts",
- "src/main/daemon/terminal-history-permissions.test.ts",
- "src/main/daemon/terminal-host-process-inspection-cheap-tier.test.ts",
- "src/main/daemon/terminal-mouse-tail-retention.test.ts",
- "src/main/daemon/terminal-session-teardown.test.ts",
- "src/main/daemon/terminal-shell-recovery-clean-exit-retirement.test.ts",
- "src/main/destination-serialized-local-rename.test.ts",
- "src/main/emulator/android/avd-manager.test.ts",
- "src/main/emulator/android/uiautomator-tree.test.ts",
- "src/main/emulator/emulator-availability.test.ts",
- "src/main/emulator/emulator-gesture-sender.test.ts",
- "src/main/emulator/emulator-start-lease-registry.test.ts",
- "src/main/emulator/mjpeg-frame-parser.test.ts",
- "src/main/emulator/serve-sim-execution.test.ts",
- "src/main/ephemeral-vm-runtime-service.test.ts",
- "src/main/ephemeral-vm-runtime-ssh-cleanup.test.ts",
- "src/main/git/add-sparse-worktree.test.ts",
- "src/main/git/canonical-repo-key.test.ts",
- "src/main/git/coalesced-probe.test.ts",
- "src/main/git/command-runner/git-admission-storm-measurement.test.ts",
- "src/main/git/fork-remote-stale-branch-refspec.test.ts",
- "src/main/git/git-upstream-status-read-owner.test.ts",
- "src/main/git/huge-folder-ignore.test.ts",
- "src/main/git/remote-ref-probe-cache.test.ts",
- "src/main/git/repo-branch-conflict-batched-probe.test.ts",
- "src/main/git/repo-remote-drift-real.test.ts",
- "src/main/git/runner-gh-account-binding.test.ts",
- "src/main/git/runner-wsl-direct-read.test.ts",
- "src/main/git/runner-wsl-read-routing.test.ts",
- "src/main/git/runner.test.ts",
- "src/main/git/source-control/bulk-pathspec-command-line-budget.test.ts",
- "src/main/git/status-discard-and-bulk-staging.test.ts",
- "src/main/git/status-line-stats-host-paths.test.ts",
- "src/main/git/worktree-diff-stamp-host-paths.test.ts",
- "src/main/git/worktree-removal-large-tree.bench.test.ts",
- "src/main/git/worktree-sparse-state-host-paths.test.ts",
- "src/main/gitea/client.test.ts",
- "src/main/gitea/repository-ref.test.ts",
- "src/main/github/gh-utils-concurrency.test.ts",
- "src/main/github/work-item-search-fallback-environment.test.ts",
- "src/main/gitlab/client-mr-branch-lookup.test.ts",
- "src/main/gitlab/mappers.test.ts",
- "src/main/gitlab/merge-request-creation.test.ts",
- "src/main/gitlab/project-ref-parser.test.ts",
- "src/main/grok/hook-service.test.ts",
- "src/main/grok/windows-hook-launcher-chain.test.ts",
- "src/main/ipc/agent-pane-authority-ownership.test.ts",
- "src/main/ipc/ai-vault-search-merged-cursor.test.ts",
- "src/main/ipc/automations-external-scope.test.ts",
- "src/main/ipc/cli-appimage-stale-registration.test.ts",
- "src/main/ipc/codex-config-sync.test.ts",
- "src/main/ipc/ephemeral-vm-provisioned-root-ref.test.ts",
- "src/main/ipc/feedback.test.ts",
- "src/main/ipc/filesystem-branch-compare-diff.test.ts",
- "src/main/ipc/filesystem-mutations.test.ts",
- "src/main/ipc/filesystem-path-containment-remote-enoent.test.ts",
- "src/main/ipc/filesystem-pull-request-field-generation.test.ts",
- "src/main/ipc/filesystem-runtime-upload-staging.test.ts",
- "src/main/ipc/filesystem-watcher-local-events.test.ts",
- "src/main/ipc/filesystem-watcher-local-unsubscribe.test.ts",
- "src/main/ipc/github-issue-source-preference.test.ts",
- "src/main/ipc/github-pr-refresh-routing.test.ts",
- "src/main/ipc/github-ssh-connection-routing.test.ts",
- "src/main/ipc/github-star-telemetry.test.ts",
- "src/main/ipc/notifications-delivery-gating.test.ts",
- "src/main/ipc/orca-profiles.test.ts",
- "src/main/ipc/parcel-watcher-child-launch.test.ts",
- "src/main/ipc/parcel-watcher-child-registry.test.ts",
- "src/main/ipc/plugin-marketplaces.test.ts",
- "src/main/ipc/preflight-agent-detection.test.ts",
- "src/main/ipc/pty-daemon-spawn-wsl-runtime.test.ts",
- "src/main/ipc/pty-dispatcher-handshake-osc-answers.test.ts",
- "src/main/ipc/pty-encoding.test.ts",
- "src/main/ipc/pty-pane-materialization-race.test.ts",
- "src/main/ipc/pty-restore-record-seeding.test.ts",
- "src/main/ipc/pty-spawn-runtime-handle-binding.test.ts",
- "src/main/ipc/pty-spawn-timing.test.ts",
- "src/main/ipc/pty/ipc/spawn-push-target-materialization-real-git.test.ts",
- "src/main/ipc/register-core-handlers/register-core-handlers.test.ts",
- "src/main/ipc/repos-remote-base-ref-queries.test.ts",
- "src/main/ipc/repos-remote-git-username.test.ts",
- "src/main/ipc/repos-remote.test.ts",
- "src/main/ipc/repos/repo-creation-git-availability.test.ts",
- "src/main/ipc/runtime-environment-request-connections.test.ts",
- "src/main/ipc/runtime-watcher-pending-assignment.test.ts",
- "src/main/ipc/runtime.test.ts",
- "src/main/ipc/skill-ipc-main-window.test.ts",
- "src/main/ipc/speech.test.ts",
- "src/main/ipc/ssh-pty-closed-generation-ranges.test.ts",
- "src/main/ipc/ssh-pty-source-obligation-ledger.test.ts",
- "src/main/ipc/terminal-render-desync-evidence.test.ts",
- "src/main/ipc/workspace-create-error-classifier.test.ts",
- "src/main/ipc/worktree-base-directory-change-collector.test.ts",
- "src/main/ipc/worktree-base-directory-poller.test.ts",
- "src/main/ipc/worktree-base-directory-watch-targets.test.ts",
- "src/main/ipc/worktree-include-copy-budget.test.ts",
- "src/main/ipc/worktree-logic-wsl.test.ts",
- "src/main/ipc/worktree-push-target-remote-scan.test.ts",
- "src/main/ipc/worktrees-local-create-flow.test.ts",
- "src/main/ipc/worktrees-setup-launch-sparse-checkout.test.ts",
- "src/main/ipc/worktrees/removal/worktree-archive-hook.test.ts",
- "src/main/jira/attachment-image-cache-generation.test.ts",
- "src/main/jira/jira-issue-summary-timeout.test.ts",
- "src/main/kimi/kimi-hook-config-toml.test.ts",
- "src/main/linear/client.test.ts",
- "src/main/linear/issues.test.ts",
- "src/main/linux-package-update-recovery.test.ts",
- "src/main/local-builds/local-build-candidate.test.ts",
- "src/main/local-downloaded-folder-promotion.test.ts",
- "src/main/local-worktree-path-presence.test.ts",
- "src/main/macos-tcc-prompt-notice.test.ts",
- "src/main/main-process-tree-kill-gate.test.ts",
- "src/main/memory/collector-windows-sweep.test.ts",
- "src/main/memory/memory-snapshot-buckets.test.ts",
- "src/main/memory/process-memory-metric.test.ts",
- "src/main/native-chat/agent-session-journal/journal-handle-ownership.test.ts",
- "src/main/native-chat/agent-session-journal/journal-restart-reconciliation.test.ts",
- "src/main/native-chat/agent-session-journal/journal-store-close.test.ts",
- "src/main/native-chat/agent-session-wire/provider-frame-disposition.test.ts",
- "src/main/native-chat/agent-session-wire/provider-turn-activity-routing.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-command-publication.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-grouped-prompt.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-owner-close.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-hold-resume-race.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-processless-reservation.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-provider-restore.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-read-restore.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-recovery-resolution.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-teardown.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-reveal.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-settled-attach-retry.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-stale-turn-verdict.test.ts",
- "src/main/native-chat/agent-session-wire/structured-rewind-claude-proof.test.ts",
- "src/main/native-chat/agent-session-wire/structured-tui-transcript-ownership.test.ts",
- "src/main/native-chat/transcript-line-decoders.omp.test.ts",
- "src/main/native-chat/transcript-reader-wsl-stall.test.ts",
- "src/main/native-chat/transcript-stream-lines.test.ts",
- "src/main/native-chat/transcript-tail-reader-wsl-gate.test.ts",
- "src/main/native-chat/wsl-transcript-fs-route.test.ts",
- "src/main/observability/local-file-sink.test.ts",
- "src/main/opencode/hook-service.test.ts",
- "src/main/opencode/opencode-client-sweep.test.ts",
- "src/main/orca-profiles/profile-cloud-auth-status.test.ts",
- "src/main/orca-profiles/profile-project-presence.test.ts",
- "src/main/orcad/orcad-app-paths.test.ts",
- "src/main/persistence-load-repair-durability.test.ts",
- "src/main/persistence-loading-store-extraction.test.ts",
- "src/main/persistence-pty-binding-reconciliation.test.ts",
- "src/main/persistence-remote-session-startup.test.ts",
- "src/main/persistence-single-serialize.test.ts",
- "src/main/persistence-ssh-lease-tombstone-retention.test.ts",
- "src/main/persistence-terminal-option-key-migration.test.ts",
- "src/main/persistence-workspace-pinned-automation-fence.test.ts",
- "src/main/persistence-worktree-card-properties.test.ts",
- "src/main/persistence/loading-store/pty-binding-span.test.ts",
- "src/main/persistence/loading-store/store-prune-gate-signals.test.ts",
- "src/main/persistence/loading-store/store-runtime-authored-session-writes.test.ts",
- "src/main/pi/agent-status-input-redaction.test.ts",
- "src/main/pi/agent-status-ui-prompt.test.ts",
- "src/main/plugins/plugin-install-trust.test.ts",
- "src/main/plugins/plugin-service-reconciliation.test.ts",
- "src/main/plugins/plugin-worker-output-buffer.test.ts",
- "src/main/plugins/plugin-worker-output-retention.test.ts",
- "src/main/ports/ssh-advertised-url-enrichment.test.ts",
- "src/main/project-groups/nested-repo-discovery.test.ts",
- "src/main/providers/agent-foreground-process-remote-evidence.test.ts",
- "src/main/providers/local-pty-provider-shutdown.test.ts",
- "src/main/providers/local-pty-provider-windows-shell-launch.test.ts",
- "src/main/providers/local-pty-shell-ready-marker-scan.test.ts",
- "src/main/providers/local-pty-shell-startup-command.node-pty.test.ts",
- "src/main/providers/local-pty-utils-windows-fallback.test.ts",
- "src/main/providers/pty-process-inspection.test.ts",
- "src/main/providers/ssh-git-dispatch.test.ts",
- "src/main/providers/ssh-git-provider-exec.test.ts",
- "src/main/providers/ssh-pty-inspect-observation-identity.test.ts",
- "src/main/providers/ssh-pty-notification-routing.test.ts",
- "src/main/providers/ssh-pty-source-delivery-ledger.test.ts",
- "src/main/providers/terminal-path-existence-batch.integration.test.ts",
- "src/main/providers/windows-conpty-wide-char-duplication.node-pty.test.ts",
- "src/main/providers/windows-console-attached-processes.test.ts",
- "src/main/providers/windows-shell-fallback-chain.test.ts",
- "src/main/pty/codex-shell-launch-preflight.test.ts",
- "src/main/pty/legacy-terminal-windows-tombstone.test.ts",
- "src/main/pwsh.test.ts",
- "src/main/rate-limits/claude-usage-error-classification.test.ts",
- "src/main/rate-limits/codex-auth-presence.test.ts",
- "src/main/rate-limits/codex-fetcher-probe-shutdown.test.ts",
- "src/main/rate-limits/kimi-fetcher.test.ts",
- "src/main/rate-limits/service-live-claude-usage.test.ts",
- "src/main/remote-worktree-history-cleanup.test.ts",
- "src/main/repo-git-username-enrichment.test.ts",
- "src/main/ripgrep/bundled-ripgrep-path.test.ts",
- "src/main/runtime/agent-prompt-submission-runtime.test.ts",
- "src/main/runtime/agent-session-backup-recovery.test.ts",
- "src/main/runtime/agent-session-process-identity-probe-windows-batch.test.ts",
- "src/main/runtime/agent-session-surface-release-transition.test.ts",
- "src/main/runtime/browser-client-download-transfers.test.ts",
- "src/main/runtime/browser-host-client-page-creation.test.ts",
- "src/main/runtime/browser-host-lease-fenced-page-release.test.ts",
- "src/main/runtime/browser-host-lease-placement-retirement.test.ts",
- "src/main/runtime/browser-host-page-reconciliation-orchestration.test.ts",
- "src/main/runtime/browser-screencast-remote-viewer-retention.test.ts",
- "src/main/runtime/client-hosted-browser-page-persistence.integration.test.ts",
- "src/main/runtime/client-hosted-browser-row-projection.test.ts",
- "src/main/runtime/fit-override-integration.test.ts",
- "src/main/runtime/headless-hydration-ownership.test.ts",
- "src/main/runtime/mobile-subscribe-integration.test.ts",
- "src/main/runtime/orca-runtime-exact-worker-provider-session.test.ts",
- "src/main/runtime/orca-runtime-files-watch-host-scope.test.ts",
- "src/main/runtime/orca-runtime-git.test.ts",
- "src/main/runtime/orca-runtime-hook-agent-status-projection.test.ts",
- "src/main/runtime/orca-runtime-terminal-create-idempotency.test.ts",
- "src/main/runtime/orca-runtime-worktree-change-invalidation.test.ts",
- "src/main/runtime/orchestration-mailbox-notification-consistency.test.ts",
- "src/main/runtime/orchestration-mailbox-pty-write-gate.test.ts",
- "src/main/runtime/orchestration-mailbox-transport-settlement.test.ts",
- "src/main/runtime/orchestration/adopted-structured-pointer-delivery.test.ts",
- "src/main/runtime/orchestration/cli-command.test.ts",
- "src/main/runtime/orchestration/coordinator-decision-gates.test.ts",
- "src/main/runtime/orchestration/coordinator-drift-probe-coalescing.test.ts",
- "src/main/runtime/orchestration/db-empty-dispatch-shortcircuit.benchmark.test.ts",
- "src/main/runtime/orchestration/db/attempt-outcome-projection.test.ts",
- "src/main/runtime/orchestration/db/hot-path-statement-compilation.test.ts",
- "src/main/runtime/orchestration/federation-ack-checkpoints.test.ts",
- "src/main/runtime/orchestration/lifecycle-caller-edges.test.ts",
- "src/main/runtime/orchestration/lifecycle-reconciliation.test.ts",
- "src/main/runtime/orchestration/mailbox-pointer-release-query.test.ts",
- "src/main/runtime/orchestration/message-batch-atomicity.test.ts",
- "src/main/runtime/orchestration/orchestration-db-retention-pagination.test.ts",
- "src/main/runtime/orchestration/preamble.test.ts",
- "src/main/runtime/orchestration/worker-output-archive.test.ts",
- "src/main/runtime/paired-close-retirement-proof-publication-order.test.ts",
- "src/main/runtime/push/push-device-registration-persistence.test.ts",
- "src/main/runtime/push/push-gateway-session.test.ts",
- "src/main/runtime/push/push-host-proof-vector.test.ts",
- "src/main/runtime/recent-pty-output-buffer.test.ts",
- "src/main/runtime/relay/desktop-relay-service-broker-liveness.test.ts",
- "src/main/runtime/relay/desktop-relay-service.test.ts",
- "src/main/runtime/relay/relay-auth-host-close-reason.test.ts",
- "src/main/runtime/relay/relay-control-close-reason.test.ts",
- "src/main/runtime/relay/relay-control-timeout-classification.test.ts",
- "src/main/runtime/relay/relay-region-refresh.test.ts",
- "src/main/runtime/remote-server-updater.test.ts",
- "src/main/runtime/rpc/errors.test.ts",
- "src/main/runtime/rpc/methods/agent-launch.test.ts",
- "src/main/runtime/rpc/methods/agent-skill-sharing-capability-grant.test.ts",
- "src/main/runtime/rpc/methods/browser-network-tunnel.test.ts",
- "src/main/runtime/rpc/methods/client-ui.test.ts",
- "src/main/runtime/rpc/methods/github-pr-refresh-reason.test.ts",
- "src/main/runtime/rpc/methods/linear-agent-project-access.test.ts",
- "src/main/runtime/rpc/methods/native-chat.test.ts",
- "src/main/runtime/rpc/methods/orchestration-dispatch-error-codes.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-release-incarnation-fallback.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-start-mode-selection.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-worker-start-receipt.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-agent-launch.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-output.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send-dispatch-authority.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send-group.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/context-only-dispatch-retry.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-launch-preferences.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-observation.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-output.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-budgets.test.ts",
- "src/main/runtime/rpc/methods/paired-caller-host-id.test.ts",
- "src/main/runtime/rpc/methods/repo.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-move-validation.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-structured-restore.test.ts",
- "src/main/runtime/rpc/methods/skills.test.ts",
- "src/main/runtime/rpc/methods/terminal-create-idempotency.test.ts",
- "src/main/runtime/rpc/methods/terminal/terminal-output-batcher.test.ts",
- "src/main/runtime/rpc/methods/worktree-github-pr-suppression.test.ts",
- "src/main/runtime/rpc/methods/worktree.test.ts",
- "src/main/runtime/rpc/mobile-e2ee-outbound-memory-budget.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-compatibility-dispatcher.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-takeover-current-authority.test.ts",
- "src/main/runtime/rpc/terminal-lease-stale-handle-survival.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-end-verdict.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-escape-tail.test.ts",
- "src/main/runtime/rpc/terminal-output-frame-source-ranges.test.ts",
- "src/main/runtime/rpc/terminal-send.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-mount-replay.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-reconnect-rebind.test.ts",
- "src/main/runtime/rpc/ws-transport-accept-order.test.ts",
- "src/main/runtime/runtime-binary-message-router.test.ts",
- "src/main/runtime/runtime-folder-workspace.test.ts",
- "src/main/runtime/runtime-local-worktree-terminal-startup.test.ts",
- "src/main/runtime/runtime-remote-managed-worktree-create.test.ts",
- "src/main/runtime/runtime-rpc-device-revocation.test.ts",
- "src/main/runtime/runtime-rpc-pairing-offer.test.ts",
- "src/main/runtime/runtime-terminal-spawn-push-target-materialization.test.ts",
- "src/main/runtime/runtime-worktree-ps-summaries.test.ts",
- "src/main/runtime/structured-claude-auth-policy-wiring.test.ts",
- "src/main/runtime/terminal-close-observed-exit.test.ts",
- "src/main/runtime/terminal-pane-recovery-liveness-gate.test.ts",
- "src/main/runtime/terminal-tail-buffer.test.ts",
- "src/main/runtime/terminal-tail-whitespace.test.ts",
- "src/main/runtime/terminal-wait-results.test.ts",
- "src/main/runtime/tui-idle-evidence.test.ts",
- "src/main/runtime/worktree-scan-execution-host-routing.test.ts",
- "src/main/runtime/worktree-teardown.test.ts",
- "src/main/shell-startup-output-scanner.test.ts",
- "src/main/skills/discovery.test.ts",
- "src/main/skills/skill-bundle-install-service.test.ts",
- "src/main/skills/skill-bundle-process-termination.integration.test.ts",
- "src/main/skills/skill-cloud-grant-installation.test.ts",
- "src/main/skills/skill-delete/wsl-enumeration-protocol.test.ts",
- "src/main/skills/skill-freshness-inventory.test.ts",
- "src/main/skills/skill-install-transaction.test.ts",
- "src/main/skills/skill-plugin-cache-scan.test.ts",
- "src/main/skills/skill-process-termination.integration.test.ts",
- "src/main/skills/skill-update-registration.test.ts",
- "src/main/skills/skill-update-run.test.ts",
- "src/main/skills/skill-wsl-provider-detection.test.ts",
- "src/main/source-control/hosted-review-execution-host-routing.test.ts",
- "src/main/speech/model-manager-progress-callback.test.ts",
- "src/main/speech/stt-worker-model-config.test.ts",
- "src/main/speech/stt-worker.test.ts",
- "src/main/sqlite/sqlite-read-failure.test.ts",
- "src/main/sqlite/sync-database.test.ts",
- "src/main/ssh/relay-protocol-backpressure.test.ts",
- "src/main/ssh/ssh-config-loader-regression.test.ts",
- "src/main/ssh/ssh-connection-gssapi-fallback.test.ts",
- "src/main/ssh/ssh-connection-sftp-namespace.test.ts",
- "src/main/ssh/ssh-connection-system-transport.test.ts",
- "src/main/ssh/ssh-file-stream-inactivity-deadline.test.ts",
- "src/main/ssh/ssh-filesystem-stream-retention.test.ts",
- "src/main/ssh/ssh-host-key-store.test.ts",
- "src/main/ssh/ssh-host-key-verifier.test.ts",
- "src/main/ssh/ssh-pending-pty-kill-replay.test.ts",
- "src/main/ssh/ssh-provider-authority.test.ts",
- "src/main/ssh/ssh-relay-native-deps-install-staged-upload.test.ts",
- "src/main/ssh/ssh-relay-native-deps-install.test.ts",
- "src/main/ssh/ssh-relay-node-pty-repair.test.ts",
- "src/main/ssh/ssh-relay-session-incarnation.test.ts",
- "src/main/ssh/ssh-relay-session-recovery-durability.test.ts",
- "src/main/ssh/ssh-relay-upload-cancel.docker.test.ts",
- "src/main/ssh/ssh-request-outcome-verdict.test.ts",
- "src/main/ssh/vscode-ssh-authority.test.ts",
- "src/main/star-nag/service-direct-star.test.ts",
- "src/main/startup/configure-process.test.ts",
- "src/main/startup/dev-education-suppression.test.ts",
- "src/main/startup/gpu-fallback-marker.test.ts",
- "src/main/startup/legacy-worker-renderer-recovery.test.ts",
- "src/main/startup/main-process-error-guards.test.ts",
- "src/main/startup/secret-protection-report-deferral-wiring.test.ts",
- "src/main/startup/single-instance-lock-exit.electron.test.ts",
- "src/main/startup/single-instance-lock-headless-exit.test.ts",
- "src/main/startup/windows-install-dir-acl-probe.test.ts",
- "src/main/synthetic-title-frame-routing.test.ts",
- "src/main/text-generation/commit-message-text-generation-cancellation.test.ts",
- "src/main/text-generation/commit-message-text-generation-remote-execution.test.ts",
- "src/main/text-generation/omp-model-discovery-policy.test.ts",
- "src/main/tray/system-tray.test.ts",
- "src/main/update-install-exit-watchdog.test.ts",
- "src/main/updater-events.test.ts",
- "src/main/updater.check-preflight.test.ts",
- "src/main/updater.fallback.test.ts",
- "src/main/updater.install-failure-cause.test.ts",
- "src/main/updater.prerelease-fallback.test.ts",
- "src/main/usage-worktree-metadata.test.ts",
- "src/main/usage/usage-provider-store-lifecycle.test.ts",
- "src/main/warp-themes/parser.test.ts",
- "src/main/window/clipboard-runtime-owned-ssh-paste.test.ts",
- "src/main/window/dashboard-popout-window.test.ts",
- "src/main/window/history-gc-worktree-ids.test.ts",
- "src/main/window/macos-app-activation.test.ts",
- "src/main/window/session-tab-close-request-relay.test.ts",
- "src/main/windows/windows-command-line-recovery-health.test.ts",
- "src/main/windows/windows-pty-job.win32.test.ts",
- "src/main/workspace-space-analysis-snapshot.test.ts",
- "src/main/workspace-space-analysis.test.ts",
- "src/main/worktree-create-timing.test.ts",
- "src/main/worktree-retirement-discovery-wsl.test.ts",
- "src/main/wsl-unc-delete.wsl.test.ts",
- "src/preload/browser-window-close.test.ts",
- "src/preload/renderer-restart-wiring.test.ts",
- "src/preload/runtime-environment-subscriptions.test.ts",
- "src/preload/updater-package-recovery.test.ts",
- "src/relay/agent-hook-server-codex-subagent-transcript.test.ts",
- "src/relay/context.test.ts",
- "src/relay/dispatcher-writer-admission.test.ts",
- "src/relay/external-automation-provider-catalog.test.ts",
- "src/relay/fs-handler-file-range.test.ts",
- "src/relay/fs-list-files-scan-coordinator.test.ts",
- "src/relay/git-branch-delete-refusal-parity.test.ts",
- "src/relay/git-handler-working-tree-changes.test.ts",
- "src/relay/git-handler-worktree-clean.test.ts",
- "src/relay/git-handler-worktree-git-capabilities.test.ts",
- "src/relay/git-push-target-local-parity.test.ts",
- "src/relay/plugin-overlay.test.ts",
- "src/relay/preflight-handler.test.ts",
- "src/relay/pty-handler-dispose-lifecycle.test.ts",
- "src/relay/pty-handler-immediate-descendants.test.ts",
- "src/relay/pty-handler-revive.test.ts",
- "src/relay/relay-daemon-fatal-reap.test.ts",
- "src/relay/relay-diagnostic-log.test.ts",
- "src/relay/relay-pty-consumer-owner-displacement.test.ts",
- "src/relay/relay-pty-source-recovery-interleavings.test.ts",
- "src/renderer/src/app-shell/window-visibility-actions-selector.test.ts",
- "src/renderer/src/assets/worktree-card-active-style.test.ts",
- "src/renderer/src/attention/agent-attention-policy.test.ts",
- "src/renderer/src/components/AgentStateDot.test.ts",
- "src/renderer/src/components/NewWorkspaceComposerCard.set-location-warm.test.tsx",
- "src/renderer/src/components/QuickOpen.mount-gating.test.tsx",
- "src/renderer/src/components/SelectedTextCopyMenu.test.tsx",
- "src/renderer/src/components/WorktreeBaseFallbackDialog.test.tsx",
- "src/renderer/src/components/activity/ActivityPrototypePage.filter-focus-shortcut.test.ts",
- "src/renderer/src/components/activity/activity-clear-completed.test.ts",
- "src/renderer/src/components/activity/activity-thread-actions.test.ts",
- "src/renderer/src/components/activity/activity-thread-list-pane.virtualization.test.tsx",
- "src/renderer/src/components/agent/AgentSettingsDialog.test.tsx",
- "src/renderer/src/components/artifacts/artifact-published-link-client.test.ts",
- "src/renderer/src/components/automations/AutomationListEmptyView.test.tsx",
- "src/renderer/src/components/automations/AutomationSchedulePicker.render.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.cross-authority-actions.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.run-visibility.test.tsx",
- "src/renderer/src/components/automations/automation-detail-tab-navigation.test.ts",
- "src/renderer/src/components/automations/automation-host-catalog-source.test.ts",
- "src/renderer/src/components/automations/automation-host-client.test.ts",
- "src/renderer/src/components/automations/automation-host-invalidation-window-events.test.ts",
- "src/renderer/src/components/automations/automation-list-view.test.ts",
- "src/renderer/src/components/automations/automation-project-groups.test.ts",
- "src/renderer/src/components/automations/automation-run-context.test.ts",
- "src/renderer/src/components/automations/automation-run-output-snapshot.test.ts",
- "src/renderer/src/components/automations/external-automation-display.test.ts",
- "src/renderer/src/components/automations/external-automation-run-table-state.test.ts",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.drag-focus.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.popup-notices.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/markup-shape-render.test.ts",
- "src/renderer/src/components/browser-pane/annotate/use-browser-page-annotation-send.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/ssh-routed-browser-page-gate.test.tsx",
- "src/renderer/src/components/browser-pane/host-guest/browser-guest-paint-retention.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-keyboard.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/webview-registry.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-pane.chrome-chords.test.tsx",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-errors.test.ts",
- "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-webview-attach.test.ts",
- "src/renderer/src/components/cmd-j/palette-duplicate-key-ghost-rows.test.tsx",
- "src/renderer/src/components/cmd-j/palette-filter.test.ts",
- "src/renderer/src/components/cmd-j/palette-list-entry-render-keys.test.ts",
- "src/renderer/src/components/confirmation-dialog.test.tsx",
- "src/renderer/src/components/contextual-tours/use-contextual-tour.test.ts",
- "src/renderer/src/components/crash-report/use-crash-report-copy.test.tsx",
- "src/renderer/src/components/dashboard/agent-row-pane-live-title.test.ts",
- "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.cache.test.ts",
- "src/renderer/src/components/dashboard/dashboard-card-labels.test.ts",
- "src/renderer/src/components/dashboard/useAgentBucketCounts.test.tsx",
- "src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts",
- "src/renderer/src/components/dictation/dictation-meter-store.test.tsx",
- "src/renderer/src/components/diff-comments/diff-comment-drag-auto-scroll.test.ts",
- "src/renderer/src/components/diff-comments/useDiffCommentDecorator.commentable-lines.test.tsx",
- "src/renderer/src/components/editor/EditorPanelHeader.test.tsx",
- "src/renderer/src/components/editor/MarkdownPreview.link-routing.interaction.test.tsx",
- "src/renderer/src/components/editor/MarkdownPreview.test.ts",
- "src/renderer/src/components/editor/MarkdownPreviewBody.test.tsx",
- "src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx",
- "src/renderer/src/components/editor/RichMarkdownSearchBar.ime-enter.test.tsx",
- "src/renderer/src/components/editor/combined-diff/remember-view/use-combined-diff-view-restore.test.tsx",
- "src/renderer/src/components/editor/combined-diff/resolve-changes/use-combined-diff-section-index-map.test.tsx",
- "src/renderer/src/components/editor/diff-editor-word-wrap-options.test.ts",
- "src/renderer/src/components/editor/editor-panel-diff-reload.test.ts",
- "src/renderer/src/components/editor/image-viewer-zoom.test.ts",
- "src/renderer/src/components/editor/markdown-export-html.test.ts",
- "src/renderer/src/components/editor/markdown-frontmatter.test.ts",
- "src/renderer/src/components/editor/markdown-heading-slug.test.ts",
- "src/renderer/src/components/editor/markdown-rich-comment-scan.test.ts",
- "src/renderer/src/components/editor/monaco-context-menu-paste.test.ts",
- "src/renderer/src/components/editor/monaco-large-text-paste.test.ts",
- "src/renderer/src/components/editor/rich-markdown-commands.test.ts",
- "src/renderer/src/components/editor/rich-markdown-context-command-routing.test.ts",
- "src/renderer/src/components/editor/rich-markdown-cut.test.ts",
- "src/renderer/src/components/editor/rich-markdown-empty-paragraph-delete.test.ts",
- "src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts",
- "src/renderer/src/components/editor/rich-markdown-image-insert.test.ts",
- "src/renderer/src/components/editor/rich-markdown-inline-image-paragraph.test.ts",
- "src/renderer/src/components/editor/rich-markdown-inline-source-tokenization.test.ts",
- "src/renderer/src/components/editor/rich-markdown-toc-heading-target.test.ts",
- "src/renderer/src/components/editor/useDiffViewerLargeDiffLifecycle.test.tsx",
- "src/renderer/src/components/editor/useEditorPanelContentState.test.tsx",
- "src/renderer/src/components/editor/useIpynbCellExecution.test.tsx",
- "src/renderer/src/components/editor/useMarkdownDocuments.test.ts",
- "src/renderer/src/components/editor/useRichMarkdownReviewController.open-guard.test.ts",
- "src/renderer/src/components/editor/useRichMarkdownSearch.reuse.test.tsx",
- "src/renderer/src/components/feature-tips/feature-tip-telemetry.test.ts",
- "src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts",
- "src/renderer/src/components/feature-wall/feature-wall-shortcut-labels.test.tsx",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.markdown-editor.test.tsx",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tab-lifecycle.test.tsx",
- "src/renderer/src/components/floating-terminal/FloatingTerminalWindowControls.test.tsx",
- "src/renderer/src/components/floating-terminal/floating-terminal-panel-inputs.test.ts",
- "src/renderer/src/components/github-body-draft-state.test.ts",
- "src/renderer/src/components/github-project/group-sort.test.ts",
- "src/renderer/src/components/github-project/project-picker-browse-cache.test.ts",
- "src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts",
- "src/renderer/src/components/landing-preflight-unverifiable-host.test.tsx",
- "src/renderer/src/components/linear-issue-workspace-text.test.ts",
- "src/renderer/src/components/mobile/MobileHero.test.tsx",
- "src/renderer/src/components/mobile/WindowsFirewallNotice.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatComposer.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.turn-history.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageRail.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatResolutionReceipt.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-availability.test.ts",
- "src/renderer/src/components/native-chat/native-chat-font-scale.test.ts",
- "src/renderer/src/components/native-chat/native-chat-layout-actions.test.ts",
- "src/renderer/src/components/native-chat/native-chat-message-rail-items.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pagination.test.ts",
- "src/renderer/src/components/native-chat/native-chat-send-eligibility.test.ts",
- "src/renderer/src/components/native-chat/native-chat-structured-send-composition-clear.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-task-list-history.test.ts",
- "src/renderer/src/components/native-chat/native-chat-working-suppression.test.ts",
- "src/renderer/src/components/native-chat/structured-attention-dispatch.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-composer-app-menu-selection.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-composer-attachments.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-composer-catalog.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-hook-status.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-live-session.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-transcript-window.options.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-prompt-state.test.tsx",
- "src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx",
- "src/renderer/src/components/onboarding/use-onboarding-flow.test.ts",
- "src/renderer/src/components/pull-request-page/mentions/query.test.ts",
- "src/renderer/src/components/pull-request-page/presentation/state-badge.test.ts",
- "src/renderer/src/components/quick-open-file-list-host-name-filter.react.test.tsx",
- "src/renderer/src/components/quick-open-search.test.ts",
- "src/renderer/src/components/right-sidebar/ActionButton.test.tsx",
- "src/renderer/src/components/right-sidebar/AiVaultSessionSubagents.test.tsx",
- "src/renderer/src/components/right-sidebar/AiVaultVirtualRow.test.tsx",
- "src/renderer/src/components/right-sidebar/ChecksPanel.updated-at-metadata.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerVirtualRowsAddProject.test.tsx",
- "src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx",
- "src/renderer/src/components/right-sidebar/GitHistoryPanel.test.tsx",
- "src/renderer/src/components/right-sidebar/PluginPanel.test.tsx",
- "src/renderer/src/components/right-sidebar/PullRequestComposer.generate-tooltip.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.remote-action-errors.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-scan-issue-state.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-display.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-log-open.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts",
- "src/renderer/src/components/right-sidebar/checks-entry-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx",
- "src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-breadcrumb.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-directory-listing.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-refresh-concurrency.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-watch-refresh-scheduler.test.ts",
- "src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts",
- "src/renderer/src/components/right-sidebar/github-pr-link-modal.test.ts",
- "src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts",
- "src/renderer/src/components/right-sidebar/right-sidebar-primary-action-layout.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-active-open-file-keys.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-create-pr-intent-state.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-launch-agent-args-applicability.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts",
- "src/renderer/src/components/right-sidebar/use-ai-vault-search-focus-request.test.tsx",
- "src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts",
- "src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.repo-default.test.ts",
- "src/renderer/src/components/right-sidebar/useFileExplorerRowDrag.test.ts",
- "src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx",
- "src/renderer/src/components/right-sidebar/useFileExplorerWatch.test.ts",
- "src/renderer/src/components/settings/AutomationsSettingsPane.test.tsx",
- "src/renderer/src/components/settings/HiddenExperimentalGroup.test.tsx",
- "src/renderer/src/components/settings/MobilePairingConnectionOptions.test.tsx",
- "src/renderer/src/components/settings/MobilePaneAddressSearch.test.tsx",
- "src/renderer/src/components/settings/NativeChatExperimentalSetting.test.tsx",
- "src/renderer/src/components/settings/NativeChatSupportedAgents.test.tsx",
- "src/renderer/src/components/settings/RuntimeEnvironmentsPane.test.ts",
- "src/renderer/src/components/settings/TerminalTccAttributionNotice.test.tsx",
- "src/renderer/src/components/settings/general-preview-tab-search.test.ts",
- "src/renderer/src/components/settings/host-scoped-setting-scope.test.ts",
- "src/renderer/src/components/settings/osc52-clipboard-copy.test.ts",
- "src/renderer/src/components/settings/repository-source-control-ai-persist-queue.test.ts",
- "src/renderer/src/components/settings/settings-setup-guide-progress.test.ts",
- "src/renderer/src/components/settings/use-mac-captured-digit-chords.test.ts",
- "src/renderer/src/components/settings/use-repository-hook-settings-draft.test.tsx",
- "src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx",
- "src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx",
- "src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx",
- "src/renderer/src/components/sidebar/AgentDashboardSidebarHost.test.tsx",
- "src/renderer/src/components/sidebar/OrcaYamlTrustDialog.test.tsx",
- "src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts",
- "src/renderer/src/components/sidebar/SidebarSettingsHelpMenu.test.tsx",
- "src/renderer/src/components/sidebar/StatusIndicator.test.ts",
- "src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardAgents.expansion-remount.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeContextMenu.react185-bystander.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.editor-lifecycle.test.tsx",
- "src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts",
- "src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts",
- "src/renderer/src/components/sidebar/folder-workspace-linked-startup-plan.test.ts",
- "src/renderer/src/components/sidebar/linear-agent-skill-setup-reminders.test.ts",
- "src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx",
- "src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx",
- "src/renderer/src/components/sidebar/project-filter-reveal.test.ts",
- "src/renderer/src/components/sidebar/project-header-color.test.ts",
- "src/renderer/src/components/sidebar/project-header-drag-start.test.ts",
- "src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts",
- "src/renderer/src/components/sidebar/sidebar-workspace-option-items.test.ts",
- "src/renderer/src/components/sidebar/useCreateProjectDefaults.test.ts",
- "src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts",
- "src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts",
- "src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts",
- "src/renderer/src/components/sidebar/worktree-delete-position-scaling.test.ts",
- "src/renderer/src/components/sidebar/worktree-drag-units.test.ts",
- "src/renderer/src/components/sidebar/worktree-keyboard-cycle.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-lineage-nesting.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-section-label-disambiguation.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/drag/row-state.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/navigation/active-descendant-option.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/viewport/hard-scroll-up.test.ts",
- "src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts",
- "src/renderer/src/components/sidebar/worktree-scroll-to-current-button.test.ts",
- "src/renderer/src/components/sidebar/worktree-sidebar-drag-autoscroll.test.ts",
- "src/renderer/src/components/sidebar/worktree-sidebar-reveal-scroll-settle.test.ts",
- "src/renderer/src/components/skills/SkillFreshnessUpdateDialog.test.tsx",
- "src/renderer/src/components/skills/SkillsPage.test.tsx",
- "src/renderer/src/components/skills/skill-bundle-name.test.ts",
- "src/renderer/src/components/skills/skill-bundle-retry-selection.test.ts",
- "src/renderer/src/components/skills/skill-freshness-skipped-reason.test.ts",
- "src/renderer/src/components/star-nag/StarNagAgentValueMomentObserver.test.tsx",
- "src/renderer/src/components/star-nag/StarNagToastHost.test.tsx",
- "src/renderer/src/components/stats/UsageTrackingPaneShell.test.tsx",
- "src/renderer/src/components/status-bar/SkillUpdateStatusSegment.test.tsx",
- "src/renderer/src/components/status-bar/icons.test.tsx",
- "src/renderer/src/components/status-bar/resource-usage-folder-merge.test.ts",
- "src/renderer/src/components/status-bar/resource-usage-open-slices.test.ts",
- "src/renderer/src/components/status-bar/ssh-status-segment-copy.test.ts",
- "src/renderer/src/components/status-bar/status-bar-copy-localization.test.tsx",
- "src/renderer/src/components/status-bar/usage-roster-row-state.test.ts",
- "src/renderer/src/components/tab-bar/SortableTabContextMenu.test.tsx",
- "src/renderer/src/components/tab-bar/TabBar.windows-shell-remote-runtime.test.ts",
- "src/renderer/src/components/tab-bar/TabBar.windows-shell-ssh-host.test.ts",
- "src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.test.tsx",
- "src/renderer/src/components/tab-bar/drop-indicator.test.ts",
- "src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts",
- "src/renderer/src/components/tab-bar/use-open-tab-search.test.ts",
- "src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts",
- "src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts",
- "src/renderer/src/components/tab-group/TabGroupSplitLayout.drag.test.tsx",
- "src/renderer/src/components/tab-group/tab-drop-zone.test.ts",
- "src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts",
- "src/renderer/src/components/task-page-gitlab-task-filters.test.ts",
- "src/renderer/src/components/task-page-linear-issue-request.test.ts",
- "src/renderer/src/components/task-page-list-chrome-visibility.test.ts",
- "src/renderer/src/components/task-page-source-switch-boundary.test.ts",
- "src/renderer/src/components/terminal-pane/cache-timer-seeding.test.ts",
- "src/renderer/src/components/terminal-pane/command-code-done-settle.test.ts",
- "src/renderer/src/components/terminal-pane/focus-terminal-pane-event.test.ts",
- "src/renderer/src/components/terminal-pane/keyboard-handlers-ime-composing-chord.test.tsx",
- "src/renderer/src/components/terminal-pane/leaf-scrollback-resolution.test.ts",
- "src/renderer/src/components/terminal-pane/pty-buffer-serializer.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-deferred-ssh-passphrase.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hibernation-wake.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-backlog-snapshot.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-mode-2031-subscriptions.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-pi-synchronized-input.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/reattach-success-settle.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/terminal-tab-id.test.ts",
- "src/renderer/src/components/terminal-pane/pty-shutdown-output-queue.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-eager-buffer-replay.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-pi-spinner.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-spawn-errors.test.ts",
- "src/renderer/src/components/terminal-pane/remote-execution-host-pty.test.ts",
- "src/renderer/src/components/terminal-pane/replay-guard.test.ts",
- "src/renderer/src/components/terminal-pane/repro-8299-shift-space-input-source.test.ts",
- "src/renderer/src/components/terminal-pane/ssh-reconnect-model-paint-gate.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-appearance.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-attention-surface.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-copy-rejection-handling.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-dead-session-reconcile.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-upload-report.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-candidate-key-release-guard.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-substituted-text-commit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-adversarial.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-linux-native-trace-replay.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-click-fallback.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-missing-file-open.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-split-completion.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-split-request-routing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-split-with-inherited-cwd.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-split-writer-paths.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-watcher-sleep-preserved-exit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pty-paste-writer.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-replay-application-continuity.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-restore-sgr-latch.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-shortcut-policy.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-startup-timing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-worktree-path-link.test.ts",
- "src/renderer/src/components/terminal-pane/use-mobile-overlay-ticks.perf.test.tsx",
- "src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-sync-fit-registration.test.ts",
- "src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.test.ts",
- "src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx",
- "src/renderer/src/components/terminal/initial-terminal-structured-launch.test.tsx",
- "src/renderer/src/components/terminal/initial-terminal.test.ts",
- "src/renderer/src/components/ui/color-picker.test.tsx",
- "src/renderer/src/components/unexpected-signout/unexpected-signout-visibility.test.ts",
- "src/renderer/src/components/use-github-task-search-commit.test.ts",
- "src/renderer/src/components/workspace-cleanup/WorkspaceCleanupDialog.stale-while-revalidate.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-active-facets.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-confirm-remove.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-dialog-notices.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-git-evidence.test.ts",
- "src/renderer/src/components/workspace-emoji/useWorkspaceEmojiShortcodeInput.test.tsx",
- "src/renderer/src/components/workspace-surface-projection.test.ts",
- "src/renderer/src/hooks/agent-hook-completion-fresh-working.test.ts",
- "src/renderer/src/hooks/composer-state/branch-start-point-actions.test.ts",
- "src/renderer/src/hooks/ipc-events/agent-status-pane-routing-index.test.ts",
- "src/renderer/src/hooks/ipc-events/direct-ssh-hydration-target-metadata.test.ts",
- "src/renderer/src/hooks/ipc-events/updater-status-ipc-bridge.test.ts",
- "src/renderer/src/hooks/legacy-worker-terminal-recovery-event.test.ts",
- "src/renderer/src/hooks/remote-workspace-target-sync.test.ts",
- "src/renderer/src/hooks/ssh-reconnect-pane-retry.test.ts",
- "src/renderer/src/hooks/useAppMenuPaste.test.tsx",
- "src/renderer/src/hooks/useAutoAckViewedAgent.mixed-workspace.test.ts",
- "src/renderer/src/hooks/useAutoAckViewedAgent.test.ts",
- "src/renderer/src/hooks/useAutomationDispatchEvents.test.ts",
- "src/renderer/src/hooks/useDetectedAgents.test.tsx",
- "src/renderer/src/hooks/useIpcEvents-agent-dashboard-shortcut.test.ts",
- "src/renderer/src/hooks/useIpcEvents-browser-tab-create.test.ts",
- "src/renderer/src/hooks/useIpcEvents-cli-worktree-activation.test.ts",
- "src/renderer/src/hooks/useIpcEvents-session-tab-close-request.test.ts",
- "src/renderer/src/hooks/useLinearProviderConnected.test.tsx",
- "src/renderer/src/i18n/runtime-required-catalog.test.ts",
- "src/renderer/src/i18n/smart-workspace-jira-locales.test.ts",
- "src/renderer/src/lib/activate-tab-and-focus-pane.test.ts",
- "src/renderer/src/lib/agent-background-session-launch-host.test.ts",
- "src/renderer/src/lib/agent-catalog-links.test.ts",
- "src/renderer/src/lib/agent-paste-draft.test.ts",
- "src/renderer/src/lib/agent-status-count.test.ts",
- "src/renderer/src/lib/agent-trust-preflight.test.ts",
- "src/renderer/src/lib/automation-session-observer.test.ts",
- "src/renderer/src/lib/automation-session-reuse.test.ts",
- "src/renderer/src/lib/browser-palette-search.test.ts",
- "src/renderer/src/lib/browser-workspace-tab-activation.test.ts",
- "src/renderer/src/lib/codex-session-restart-route-recheck.test.ts",
- "src/renderer/src/lib/codex-session-restart-shell-flap.test.ts",
- "src/renderer/src/lib/codex-stale-pane-account-identity.test.ts",
- "src/renderer/src/lib/default-terminal-tabs-applied-persist.test.ts",
- "src/renderer/src/lib/ensure-simulator-tab.test.ts",
- "src/renderer/src/lib/ephemeral-vm-workspace-target.integration.test.ts",
- "src/renderer/src/lib/execute-open-editor-path-move.test.ts",
- "src/renderer/src/lib/file-preview-action-visibility.test.tsx",
- "src/renderer/src/lib/github-work-item-workspace-attachment.test.ts",
- "src/renderer/src/lib/ipc-error.test.ts",
- "src/renderer/src/lib/keyboard-layout/input-source-id.test.ts",
- "src/renderer/src/lib/language-detect.test.ts",
- "src/renderer/src/lib/launch-agent-background-session.test.ts",
- "src/renderer/src/lib/linked-work-item-context.test.ts",
- "src/renderer/src/lib/list-row-interaction.test.ts",
- "src/renderer/src/lib/manual-terminal-worktree-parking.test.ts",
- "src/renderer/src/lib/markdown-comment-blocks.test.ts",
- "src/renderer/src/lib/monaco-languages/monarch-upstream-mdx-recursion.test.ts",
- "src/renderer/src/lib/monaco-languages/textmate-language-registration.test.ts",
- "src/renderer/src/lib/monaco-peek-preview-options.test.ts",
- "src/renderer/src/lib/new-workspace-enter-guard.test.ts",
- "src/renderer/src/lib/palette-match/match-field-allocation.test.ts",
- "src/renderer/src/lib/palette-match/palette-match-performance.test.ts",
- "src/renderer/src/lib/palette-type-alias-match.test.ts",
- "src/renderer/src/lib/pane-agent-evidence.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-queue-chunks.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-ack-credit.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-foreground-refresh.test.ts",
- "src/renderer/src/lib/pane-manager/pane-tree-ops.test.ts",
- "src/renderer/src/lib/pane-manager/pane-webgl-context-recovery.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-complex-script.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-ime-candidate-anchor.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-link-provider-guard.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-scroll-intent-key-retention.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-scroll-intent-structural-transitions.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-windows-ctrl-alt-chord-classification.test.ts",
- "src/renderer/src/lib/pane-manager/windows-pty-compatibility.test.ts",
- "src/renderer/src/lib/pane-manager/xterm-write-callback-guard.test.ts",
- "src/renderer/src/lib/react-commit-cascade-install-order.test.ts",
- "src/renderer/src/lib/renderer-app-platform.test.ts",
- "src/renderer/src/lib/repo-display-labels.test.ts",
- "src/renderer/src/lib/repo-runtime-owner.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-remote-compat.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-replay.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session.test.ts",
- "src/renderer/src/lib/simulator-tab-palette-activation.test.ts",
- "src/renderer/src/lib/source-control-remote-error.test.ts",
- "src/renderer/src/lib/sparse-preset-draft.test.ts",
- "src/renderer/src/lib/ssh-failed-target-sleeping-agent-resume.test.ts",
- "src/renderer/src/lib/ssh-mutation-expectation.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-prompt.test.ts",
- "src/renderer/src/lib/typing-latency/sample-window.test.ts",
- "src/renderer/src/lib/unread-badge-count.test.ts",
- "src/renderer/src/lib/wake-sleeping-agents-in-background.test.ts",
- "src/renderer/src/lib/worker-terminal-takeover-report.test.ts",
- "src/renderer/src/lib/workspace-activation-path-gate.test.ts",
- "src/renderer/src/lib/workspace-browser-tab-open.test.ts",
- "src/renderer/src/lib/workspace-session-closed-tab-tombstones.test.ts",
- "src/renderer/src/lib/workspace-session-editor-drafts.test.ts",
- "src/renderer/src/lib/workspace-session-hydration-keys.test.ts",
- "src/renderer/src/lib/workspace-tab-agent-metadata.test.ts",
- "src/renderer/src/lib/worktree-activation-emptied-workspace-reseed.test.ts",
- "src/renderer/src/lib/worktree-activation-surface-caller-wiring.test.ts",
- "src/renderer/src/lib/worktree-display-name-order.test.ts",
- "src/renderer/src/lib/worktree-draft-startup-view-mode.test.ts",
- "src/renderer/src/lib/worktree-reactivation-runtime-owned-resume-deferral.test.ts",
- "src/renderer/src/lib/worktree-sort-order-host-split.test.ts",
- "src/renderer/src/runtime/agent-session-operation-id.test.ts",
- "src/renderer/src/runtime/client-hosted-browser-close-intents.test.ts",
- "src/renderer/src/runtime/mobile-markdown-bridge.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-frame-drop-resync.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-parse-backpressure.test.ts",
- "src/renderer/src/runtime/runtime-file-client-mutation-ownership.test.ts",
- "src/renderer/src/runtime/runtime-file-import-pairing-revision.test.ts",
- "src/renderer/src/runtime/runtime-git-client-merge.test.ts",
- "src/renderer/src/runtime/runtime-host-connection-state.test.ts",
- "src/renderer/src/runtime/runtime-host-contact-parity.test.ts",
- "src/renderer/src/runtime/runtime-server-directory-browser.test.ts",
- "src/renderer/src/runtime/runtime-skills-delete-client.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-agent-status-projection-join.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph.test.ts",
- "src/renderer/src/runtime/web-runtime-session-terminal-pane-delegation.test.ts",
- "src/renderer/src/runtime/web-runtime-wake-terminal-respawn.test.ts",
- "src/renderer/src/runtime/web-session-tabs-late-merged-predecessor-lockout.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-diff-focus-steal.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-snapshot-batch.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync/mirrored-agent-tab-label.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync/mirrored-status-tab-retractions.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery-topology-fence.test.ts",
- "src/renderer/src/runtime/web-session-terminal-pending-handle-recovery.test.ts",
- "src/renderer/src/ssh/ssh-connect-in-flight.test.ts",
- "src/renderer/src/startup/ssh-startup-reconnect.test.ts",
- "src/renderer/src/startup/startup-ssh-connection-restore.test.ts",
- "src/renderer/src/store/folder-workspaces/folder-workspace-catalog.test.ts",
- "src/renderer/src/store/project-host-setup-selector.test.ts",
- "src/renderer/src/store/repos/safe-auto-fork-sync.test.ts",
- "src/renderer/src/store/slices/agent-hibernation-live-anchor-e2e.test.ts",
- "src/renderer/src/store/slices/agent-pane-authority.test.ts",
- "src/renderer/src/store/slices/agent-status-ssh-connection-clear.test.ts",
- "src/renderer/src/store/slices/agent-status.test.ts",
- "src/renderer/src/store/slices/browser-cleanup-close.test.ts",
- "src/renderer/src/store/slices/browser-page-conversion.test.ts",
- "src/renderer/src/store/slices/browser-workspace-doc-location.test.ts",
- "src/renderer/src/store/slices/editor-rekey-open-files.test.ts",
- "src/renderer/src/store/slices/github-pr-refresh-host-guard.test.ts",
- "src/renderer/src/store/slices/github-project-view-tables.test.ts",
- "src/renderer/src/store/slices/github-refresh-sweep.test.ts",
- "src/renderer/src/store/slices/github-review-thread-actions.test.ts",
- "src/renderer/src/store/slices/github-work-items-pagination.test.ts",
- "src/renderer/src/store/slices/github-work-items-query-bounds.test.ts",
- "src/renderer/src/store/slices/hosted-review-cache-race.test.ts",
- "src/renderer/src/store/slices/orca-profiles-auth-actions-connect-overlap.test.ts",
- "src/renderer/src/store/slices/orca-profiles-auth-actions.test.ts",
- "src/renderer/src/store/slices/pane-foreground-agent.test.ts",
- "src/renderer/src/store/slices/pinned-tab-close-confirm.test.ts",
- "src/renderer/src/store/slices/rate-limits.test.ts",
- "src/renderer/src/store/slices/readopted-ssh-worktree-rows.test.ts",
- "src/renderer/src/store/slices/repos-host-identity-routing.test.ts",
- "src/renderer/src/store/slices/repos-manual-order-hydration.test.ts",
- "src/renderer/src/store/slices/repos-paired-runtime-add.test.ts",
- "src/renderer/src/store/slices/repos-runtime-project-groups.test.ts",
- "src/renderer/src/store/slices/repos-selected-owner-routing.test.ts",
- "src/renderer/src/store/slices/sparse-presets.test.ts",
- "src/renderer/src/store/slices/store-session-terminal-reconnect.test.ts",
- "src/renderer/src/store/slices/tabs-hydration.test.ts",
- "src/renderer/src/store/slices/terminal-helpers.test.ts",
- "src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts",
- "src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts",
- "src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts",
- "src/renderer/src/store/slices/ui-notice-dismissals.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-refresh-coalescing.test.ts",
- "src/renderer/src/store/slices/worktrees-git-identity-review-clear-persistence.test.ts",
- "src/renderer/src/store/slices/worktrees-runtime-host-metadata-retirement.test.ts",
- "src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.test.ts",
- "src/renderer/src/store/slices/worktrees/session/worktree-identity-rename-row-worktree-ids.test.ts",
- "src/renderer/src/store/terminals/terminal-pane-expansion-write-bailout.test.tsx",
- "src/renderer/src/store/worktree-host-collision-index.test.ts",
- "src/renderer/src/store/worktree-visibility-defaults-by-host.test.ts",
- "src/renderer/src/web/web-preload-updater-package-recovery.test.ts",
- "src/renderer/src/web/web-runtime-client-export-parity.test.ts",
- "src/shared/agent-hook-listener-codex-approval-ownership.test.ts",
- "src/shared/agent-hook-listener-hermes-codex-droid.test.ts",
- "src/shared/agent-hook-listener-interactive-prompts.test.ts",
- "src/shared/agent-hook-listener-session-replacement.test.ts",
- "src/shared/agent-hook-listener-startless-child-lifecycle.test.ts",
- "src/shared/agent-hook-transport-interference.test.ts",
- "src/shared/agent-image-paste.test.ts",
- "src/shared/agent-session-definitive-refusal.test.ts",
- "src/shared/agent-skill-sharing-contract.test.ts",
- "src/shared/agent-status-child-work-admission-collision.test.ts",
- "src/shared/agent-status-run-alias-index.test.ts",
- "src/shared/agent-status-subject.test.ts",
- "src/shared/app-version.test.ts",
- "src/shared/automation-cron-input-validation.test.ts",
- "src/shared/automation-run-retention.test.ts",
- "src/shared/browser-network-capabilities.test.ts",
- "src/shared/browser-url.test.ts",
- "src/shared/child-process/windows-command-line.win32.test.ts",
- "src/shared/child-process/windows-console-visibility.test.ts",
- "src/shared/claude-agent-teams-tmux-compat.test.ts",
- "src/shared/command-code-output-status.test.ts",
- "src/shared/command-code-turn-boundary.test.ts",
- "src/shared/contextual-tours.test.ts",
- "src/shared/emulator-touch-frame.test.ts",
- "src/shared/ephemeral-vm-runtime-feature-sorting.test.ts",
- "src/shared/export-let-function-initializer-ban.test.ts",
- "src/shared/external-worktree-inbox.test.ts",
- "src/shared/feature-interactions.test.ts",
- "src/shared/feature-tips.test.ts",
- "src/shared/git-exec-mutation.test.ts",
- "src/shared/git-fork-sync.test.ts",
- "src/shared/git-history-ref-display.test.ts",
- "src/shared/git-status-limit.test.ts",
- "src/shared/github/owner-slug.test.ts",
- "src/shared/gitlab-job-trace-check-details.test.ts",
- "src/shared/growing-byte-buffer.test.ts",
- "src/shared/harness-injected-user-turns.test.ts",
- "src/shared/hook-command-source-policy.test.ts",
- "src/shared/keybindings-default-bindings.test.ts",
- "src/shared/keybindings-double-tap.test.ts",
- "src/shared/keybindings-parse-cache.test.ts",
- "src/shared/linear/inline-media.test.ts",
- "src/shared/map-settled-with-concurrency.test.ts",
- "src/shared/markdown-document-listing-limits.test.ts",
- "src/shared/markdown-toc-panel-width.test.ts",
- "src/shared/native-chat-ask-row.test.ts",
- "src/shared/native-chat-ask.test.ts",
- "src/shared/native-chat-command-envelope.test.ts",
- "src/shared/native-chat-edit-normalize.test.ts",
- "src/shared/native-chat-href-routing.test.ts",
- "src/shared/native-chat-session-option-snapshot.test.ts",
- "src/shared/native-chat-session-option-state.test.ts",
- "src/shared/native-chat-tool-run-sentence.test.ts",
- "src/shared/native-chat-tool-summary.test.ts",
- "src/shared/new-workspace/work-item-lookup-text.test.ts",
- "src/shared/opencode-launch-command.test.ts",
- "src/shared/orca-yaml-alias-bounds.test.ts",
- "src/shared/orchestration-fleet-attention.test.ts",
- "src/shared/plugins/plugin-hostile-fixture.test.ts",
- "src/shared/plugins/plugin-vm-recipe-artifact.test.ts",
- "src/shared/posix-wait-status.test.ts",
- "src/shared/pr-check-status.test.ts",
- "src/shared/pty-liveness-verdict.test.ts",
- "src/shared/pty-startup-reply-echo-shapes.test.ts",
- "src/shared/quick-open-directory-reader.test.ts",
- "src/shared/quick-open-expansion-paths.test.ts",
- "src/shared/rate-limit-reset-format.test.ts",
- "src/shared/remote-runtime-client-error-classification.test.ts",
- "src/shared/remote-runtime-outbound-admission.test.ts",
- "src/shared/repo-icon.test.ts",
- "src/shared/repro-7732-gitlab-job-id-dropped.test.ts",
- "src/shared/runtime-listing-host-scope.test.ts",
- "src/shared/search-match-count.test.ts",
- "src/shared/search-subprocess-lines.test.ts",
- "src/shared/secure-path-hardening-cache.test.ts",
- "src/shared/setup-runner-command.test.ts",
- "src/shared/source-control-ai-policy-regression.test.ts",
- "src/shared/source-control-ai-recipe-save.test.ts",
- "src/shared/source-scan/source-tree-walk.test.ts",
- "src/shared/structured-agent-session-composer.test.ts",
- "src/shared/subprocess-stdin-write.test.ts",
- "src/shared/telemetry-events.test.ts",
- "src/shared/telemetry-orca-cli-feature-tip.test.ts",
- "src/shared/terminal-exit-cause.test.ts",
- "src/shared/terminal-file-url-target.test.ts",
- "src/shared/terminal-fonts.test.ts",
- "src/shared/terminal-query-reply.test.ts",
- "src/shared/terminal-startup-cwd.test.ts",
- "src/shared/terminal-stream-protocol.test.ts",
- "src/shared/tui-agent-startup-copilot-resume.test.ts",
- "src/shared/utf8-byte-limits.test.ts",
- "src/shared/windows-console-input.test.ts",
- "src/shared/windows-lane-tree-removal-boundary.test.ts",
- "src/shared/windows-terminal-shell.test.ts",
- "src/shared/worktree-scan-failure.test.ts",
- "src/shared/worktree/identity.test.ts",
- "src/shared/worktree/ownership-configured-base-visibility.test.ts",
- "src/shared/worktree/retired-name-cache.test.ts",
- "src/shared/worktree/retired-name-registry.test.ts",
- "tests/e2e/alternate-screen-fixture-script.unit.test.ts",
- "tests/e2e/helpers/client-hosted-browser-fixture.unit.test.ts",
- "tests/e2e/omp-risk-remote-review.unit.test.ts",
- "tests/e2e/session-tabs-decorative-title-fanout.unit.test.ts",
- "tests/e2e/session-tabs-rich-status-boundaries.unit.test.ts",
- "tests/tools/omp-config-root-local-shell.test.mjs"
- ],
- "durationMs": 851040
- },
- {
- "files": [
- "config/scripts/build-native-for-platform.test.mjs",
- "config/scripts/check-runtime-electron-ratchet.test.mjs",
- "config/scripts/client-hosted-browser-package-coverage.test.mjs",
- "config/scripts/counterbalanced-benchmark-schedule.test.mjs",
- "config/scripts/daily-build-version.test.mjs",
- "config/scripts/electron-builder-markdown-associations.test.mjs",
- "config/scripts/electron-builder-runtime-resources.test.mjs",
- "config/scripts/headless-serve-shutdown-matrix.test.mjs",
- "config/scripts/linux-package-maintainer-scripts.test.mjs",
- "config/scripts/locale-translation-policy.es-round5.test.mjs",
- "config/scripts/locale-translation-policy.ja-relocalization.test.mjs",
- "config/scripts/locale-translation-policy.ja-round5.test.mjs",
- "config/scripts/mac-build-compatibility.test.mjs",
- "config/scripts/macos-computer-helper-owner-loss-group-recovery.test.mjs",
- "config/scripts/macos-tcc-prompt-localization.test.mjs",
- "config/scripts/mobile-web-app-agent-history-render.test.mjs",
- "config/scripts/mobile-web-app-files-external-links.test.mjs",
- "config/scripts/mobile-web-app-page-grant-call-sites.test.mjs",
- "config/scripts/mobile-web-app-session-media-picker.test.mjs",
- "config/scripts/mobile-web-app-source-control-render.test.mjs",
- "config/scripts/mobile-web-bundle-manifest.test.mjs",
- "config/scripts/orcad-operations-restart-safety.test.mjs",
- "config/scripts/package-electron-install-owner.test.mjs",
- "config/scripts/packaged-hang-watchdog-worker-contract.test.mjs",
- "config/scripts/pnpm-cli-invocation.test.mjs",
- "config/scripts/pr-code-change-scope.test.mjs",
- "config/scripts/pr-e2e-native-only-routing.test.mjs",
- "config/scripts/pty-transcript-secret-scan.test.mjs",
- "config/scripts/quadratic-buffer-concat-plugin.test.mjs",
- "config/scripts/rebuild-native-deps.test.mjs",
- "config/scripts/relay-artifact-manifest.test.mjs",
- "config/scripts/release-rc-history.test.mjs",
- "config/scripts/sort-comparator-performance-plugin.test.mjs",
- "config/scripts/verify-cli-bin.test.mjs",
- "config/scripts/windows-bin-spawn-predicate.test.mjs",
- "config/scripts/windows-signing-workflow-contract.test.mjs",
- "src/cli/execution-host-flag.test.ts",
- "src/cli/handlers/computer-action-routing.test.ts",
- "src/cli/handlers/computer-action-validation.test.ts",
- "src/cli/handlers/orchestration-windows-ask-cli.test.ts",
- "src/cli/handlers/skill-sharing.test.ts",
- "src/cli/index-vm-recipe-doctor.test.ts",
- "src/cli/runtime/runtime-access-denied.test.ts",
- "src/cli/runtime/websocket-transport-error.test.ts",
- "src/cli/skills-reference-selector.test.ts",
- "src/main/agent-hooks/ended-process-reconciliation.test.ts",
- "src/main/agent-hooks/install-telemetry.test.ts",
- "src/main/agent-hooks/server-claude-normalization.test.ts",
- "src/main/agent-hooks/server-claude-statusline.test.ts",
- "src/main/agent-hooks/server-codex-subagent-transcript.test.ts",
- "src/main/agent-hooks/server-gemini-normalization.test.ts",
- "src/main/agent-hooks/server-last-status-hydrate-confirmation.test.ts",
- "src/main/agent-hooks/server-last-status-hydrate-validation.test.ts",
- "src/main/agent-hooks/server-last-status-restored-children.test.ts",
- "src/main/agent-hooks/server-muse-session-log-poll.test.ts",
- "src/main/agent-hooks/server-opencode-normalization.test.ts",
- "src/main/agent-hooks/server-relay-listener-replay.test.ts",
- "src/main/agent-hooks/server-reminted-pane-key.test.ts",
- "src/main/agent-hooks/server-status-listener-fanout.test.ts",
- "src/main/agent-hooks/server.claude-interactive-question.test.ts",
- "src/main/agent-hooks/wsl-guest-plugin-install.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-launch.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-recovery.test.ts",
- "src/main/agent-hooks/wsl-hook-relay-sentinel.test.ts",
- "src/main/ai-vault-search/session-search-content-hash.test.ts",
- "src/main/ai-vault-search/session-search-host-registration.test.ts",
- "src/main/ai-vault-search/session-search-identifier-split.test.ts",
- "src/main/ai-vault-search/session-search-index-writer.test.ts",
- "src/main/ai-vault-search/session-search-retention-policy.test.ts",
- "src/main/ai-vault-search/session-search-service.test.ts",
- "src/main/ai-vault/codex-session-collection.test.ts",
- "src/main/ai-vault/remote-session-scan-batching.test.ts",
- "src/main/ai-vault/remote-session-scanner-sources.test.ts",
- "src/main/ai-vault/session-list-results.test.ts",
- "src/main/ai-vault/session-scanner-agent-root-overrides.test.ts",
- "src/main/ai-vault/session-scanner-codex-dual-root.test.ts",
- "src/main/ai-vault/session-scanner-codex-parser.test.ts",
- "src/main/ai-vault/session-scanner-cursor-chat-meta.test.ts",
- "src/main/ai-vault/session-scanner-fs-import-guard.test.ts",
- "src/main/ai-vault/session-scanner-omp-subagent-prune.test.ts",
- "src/main/ai-vault/session-scanner-omp-title.test.ts",
- "src/main/ai-vault/session-scanner-service-root-response.test.ts",
- "src/main/artifacts/artifact-cloud-service-races.test.ts",
- "src/main/artifacts/artifact-recovery-directory-fsync.test.ts",
- "src/main/asar-transparent-fs.test.ts",
- "src/main/automations/dispatch-refusal.test.ts",
- "src/main/automations/external-job-run-sorting.test.ts",
- "src/main/automations/run-target-resolution.test.ts",
- "src/main/browser/agent-browser-bridge-command-transport.test.ts",
- "src/main/browser/agent-browser-bridge-session-lifecycle.test.ts",
- "src/main/browser/agent-browser-bridge-tab-routing.test.ts",
- "src/main/browser/agent-browser-bridge-text-input.test.ts",
- "src/main/browser/browser-client-host-reconciliation-command-order.test.ts",
- "src/main/browser/browser-client-page-command-executor-fencing.test.ts",
- "src/main/browser/browser-client-page-renderer-bridge.test.ts",
- "src/main/browser/browser-client-upload-staging.test.ts",
- "src/main/browser/browser-cookie-clear-preserve.test.ts",
- "src/main/browser/browser-grab-payload.test.ts",
- "src/main/browser/browser-identity-mode-record.test.ts",
- "src/main/browser/browser-manager-grab-mode.test.ts",
- "src/main/browser/browser-network-tunnel-outbound-memory-budget.test.ts",
- "src/main/browser/browser-route-h3-egress.electron.test.ts",
- "src/main/browser/browser-route-partition-binding-capacity.test.ts",
- "src/main/browser/browser-route-partition-storage-runtime.test.ts",
- "src/main/browser/browser-route-webcontents-registry.test.ts",
- "src/main/browser/browser-session-partition-proxy-install.test.ts",
- "src/main/browser/browser-session-registry-identity.persistence.test.ts",
- "src/main/browser/browser-webauthn-account-picker.test.ts",
- "src/main/browser/browser-webauthn-profile-delete.test.ts",
- "src/main/browser/cdp-bridge-integration.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-identity-wiring.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-reconnect.test.ts",
- "src/main/browser/paired-runtime-browser-client-host.test.ts",
- "src/main/browser/paired-runtime-browser-host-command-admission.test.ts",
- "src/main/browser/wsl-browser-network-execution-route.test.ts",
- "src/main/browser/wsl-browser-network-relay-launch.test.ts",
- "src/main/claude-accounts/claude-account-service-config-dir-capture.test.ts",
- "src/main/claude-accounts/claude-account-service-reauth-rollback.test.ts",
- "src/main/claude-accounts/claude-structured-auth-policy.test.ts",
- "src/main/claude-accounts/runtime-auth-service-keychain-snapshots.test.ts",
- "src/main/claude-usage/scanner.test.ts",
- "src/main/claude-usage/worktree-attribution-scaling.test.ts",
- "src/main/claude/claude-background-task-turn-resumption.test.ts",
- "src/main/claude/claude-stream-json-connection.test.ts",
- "src/main/claude/claude-structured-control-actions.test.ts",
- "src/main/claude/claude-structured-journal-prompt-retry.test.ts",
- "src/main/claude/claude-structured-journal-translation-turn-timing.test.ts",
- "src/main/claude/claude-structured-prompt-items.test.ts",
- "src/main/claude/claude-structured-session-close.test.ts",
- "src/main/claude/claude-structured-session-reading-control.test.ts",
- "src/main/claude/claude-subagent-group-row.test.ts",
- "src/main/claude/claude-subagent-id-aliases.test.ts",
- "src/main/claude/claude-tui-resume-launch.test.ts",
- "src/main/claude/claude-tui-resume-proof.test.ts",
- "src/main/cli/linux-bare-orca-dispatcher.test.ts",
- "src/main/cli/native-cli-powershell-argv-boundary.test.ts",
- "src/main/cli/orca-cli-child-path.test.ts",
- "src/main/cli/wsl-cli-registration-registry.test.ts",
- "src/main/codex-accounts/runtime-home-legacy-migration.test.ts",
- "src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts",
- "src/main/codex-accounts/runtime-home-wsl-system-default.test.ts",
- "src/main/codex-accounts/service-add-account-from-home.test.ts",
- "src/main/codex-accounts/service-wsl-accounts.test.ts",
- "src/main/codex-usage/scanner-incremental-append.test.ts",
- "src/main/codex/codex-config-settings-removal.test.ts",
- "src/main/codex/codex-resume-process-proof.test.ts",
- "src/main/codex/codex-session-bridge.test.ts",
- "src/main/codex/codex-session-index-heal-state.test.ts",
- "src/main/codex/codex-structured-child-environment.test.ts",
- "src/main/codex/codex-structured-journal-goal-revision.test.ts",
- "src/main/codex/codex-structured-session-adapter-lifecycle.test.ts",
- "src/main/codex/codex-subagent-execution-projection.test.ts",
- "src/main/codex/codex-subagent-executions.test.ts",
- "src/main/codex/codex-trust-grant-main-thread-boundary.test.ts",
- "src/main/codex/codex-tui-rollout-proof.test.ts",
- "src/main/codex/config-toml-trust-api-parity.test.ts",
- "src/main/codex/hook-service-legacy-cleanup.test.ts",
- "src/main/codex/sta-4735-hook-trust-provenance-overwrite.test.ts",
- "src/main/command-code/hook-service.test.ts",
- "src/main/computer/computer-provider-unavailable-message.test.ts",
- "src/main/computer/desktop-script-provider-runtime-host-routing.test.ts",
- "src/main/computer/macos-native-provider-line-buffer.test.ts",
- "src/main/crash-reporting/crash-breadcrumb-store.test.ts",
- "src/main/crash-reporting/minidump-crash-signature.test.ts",
- "src/main/crash-reporting/process-gone-killed-one-ordering.test.ts",
- "src/main/crash-reporting/renderer-recovery-circuit-breaker.test.ts",
- "src/main/daemon/client.test.ts",
- "src/main/daemon/cold-restore-payload-cache.test.ts",
- "src/main/daemon/daemon-client-stream-keepalive.test.ts",
- "src/main/daemon/daemon-endpoint-publish.test.ts",
- "src/main/daemon/daemon-entry-path-layouts.test.ts",
- "src/main/daemon/daemon-host-relocation.test.ts",
- "src/main/daemon/daemon-lifecycle-event.test.ts",
- "src/main/daemon/daemon-mac-code-identity.test.ts",
- "src/main/daemon/daemon-pty-adapter-inventory-respawn.test.ts",
- "src/main/daemon/daemon-pty-adapter-protocol-compatibility.test.ts",
- "src/main/daemon/daemon-pty-adapter-steady-state-compat.test.ts",
- "src/main/daemon/daemon-pty-adapter.test.ts",
- "src/main/daemon/daemon-pty-router.test.ts",
- "src/main/daemon/daemon-tcc-attribution-main-thread.test.ts",
- "src/main/daemon/degraded-daemon-pty-provider.test.ts",
- "src/main/daemon/issue-6814-daemon-failure-classification.test.ts",
- "src/main/daemon/node-pty-windows-input-error.win32.test.ts",
- "src/main/daemon/pty-subprocess-wsl-launch.test.ts",
- "src/main/daemon/repro-12101-mouse-tracking-survives-agent-death.test.ts",
- "src/main/daemon/terminal-checkpoint-serializer.test.ts",
- "src/main/daemon/terminal-host-non-agent-foreground.test.ts",
- "src/main/daemon/terminal-host-startup.test.ts",
- "src/main/daemon/terminal-host-teardown-recreate.test.ts",
- "src/main/emulator/android/scrcpy-stream-session.test.ts",
- "src/main/emulator/android/scrcpy-video-frame-parser.test.ts",
- "src/main/emulator/serve-sim-ax-normalization.test.ts",
- "src/main/emulator/serve-sim-helper-processes.test.ts",
- "src/main/git/command-runner/hosted-cli-deadline-log.test.ts",
- "src/main/git/commit.test.ts",
- "src/main/git/fetch-error-classification.test.ts",
- "src/main/git/local-repo-ref-maintenance.test.ts",
- "src/main/git/pack-refs-lock-ownership.test.ts",
- "src/main/git/remove-worktree-branch-cleanup.test.ts",
- "src/main/git/repo-branch-conflict.test.ts",
- "src/main/git/repo-default-base-timeout.test.ts",
- "src/main/git/repo-search-ref-compat.test.ts",
- "src/main/git/runner-wsl-linked-gitdir-windows.test.ts",
- "src/main/git/runner-wsl-login-shell-capture.test.ts",
- "src/main/git/settled-diff-cache-bounds.test.ts",
- "src/main/git/status-conflict-overlap.bench.test.ts",
- "src/main/git/status-submodule-path-cache.test.ts",
- "src/main/git/status-upstream-ref.test.ts",
- "src/main/git/status-wsl-pathspecs.test.ts",
- "src/main/git/status.test.ts",
- "src/main/git/upstream.test.ts",
- "src/main/git/worktree-add-local-base-suggestion.test.ts",
- "src/main/git/worktree-base-divergence.test.ts",
- "src/main/git/worktree-created-description-real-git.test.ts",
- "src/main/git/worktree-list-porcelain.test.ts",
- "src/main/git/worktree-listing-sparse-distro.test.ts",
- "src/main/git/worktree-separate-git-dir.test.ts",
- "src/main/git/worktree-shared-directories.test.ts",
- "src/main/gitea/pull-request-mappers.test.ts",
- "src/main/github/client-merged-pr-visibility.test.ts",
- "src/main/github/client-pr-fallback-number.test.ts",
- "src/main/github/client-pr-local-runtime.test.ts",
- "src/main/github/pr-refresh-coordinator-alias-coalescing.test.ts",
- "src/main/github/pr-refresh-coordinator-rate-limit-budget.test.ts",
- "src/main/github/pr-review-comment-lines.test.ts",
- "src/main/github/work-item-details.test.ts",
- "src/main/github/work-item-search-freshness.test.ts",
- "src/main/grok/grok-hook-config-file.test.ts",
- "src/main/grok/grok-hook-stdin-no-eof.test.ts",
- "src/main/hang-watchdog/hang-watchdog-detection-loop.test.ts",
- "src/main/i18n/main-i18n-lazy-locale.test.ts",
- "src/main/ipc/ai-vault-search.test.ts",
- "src/main/ipc/browser-tab-registration-wait.test.ts",
- "src/main/ipc/cli.test.ts",
- "src/main/ipc/command-path-resolver.test.ts",
- "src/main/ipc/computer-use-permissions.test.ts",
- "src/main/ipc/filesystem-allowed-roots.test.ts",
- "src/main/ipc/filesystem-download-transfers.test.ts",
- "src/main/ipc/filesystem-list-files.test.ts",
- "src/main/ipc/filesystem-watcher-remote-batch.test.ts",
- "src/main/ipc/filesystem-watcher-remote-cancellation.test.ts",
- "src/main/ipc/filesystem-watcher-unwatchable-roots.test.ts",
- "src/main/ipc/floating-workspace-directory.test.ts",
- "src/main/ipc/keybindings.test.ts",
- "src/main/ipc/local-worktree-runtime-options.test.ts",
- "src/main/ipc/minimax-credentials.test.ts",
- "src/main/ipc/native-chat-subscribe-lifecycle.test.ts",
- "src/main/ipc/orca-profile-auth-handlers.test.ts",
- "src/main/ipc/parcel-watcher-crash-fuse.test.ts",
- "src/main/ipc/parcel-watcher-root-path-rewrite.test.ts",
- "src/main/ipc/parcel-watcher-supervisor-capacity-wait.test.ts",
- "src/main/ipc/parcel-watcher-unsubscribe-timeout.test.ts",
- "src/main/ipc/pty-applied-size-reporting.test.ts",
- "src/main/ipc/pty-controller-spawn-admission.test.ts",
- "src/main/ipc/pty-daemon-spawn-session-identity.test.ts",
- "src/main/ipc/pty-ipc-hidden-delivery-gate.test.ts",
- "src/main/ipc/pty-output-drain-rounds.test.ts",
- "src/main/ipc/pty-pending-data-drain-queue-differential.test.ts",
- "src/main/ipc/pty-restored-appimage-cli-shim-refresh.test.ts",
- "src/main/ipc/pty-session-liveness-and-ownership.test.ts",
- "src/main/ipc/pty-spawn-cwd-fallback.test.ts",
- "src/main/ipc/pty-spawn-env-codex-home-routing.test.ts",
- "src/main/ipc/pty-startup-swap-window-presence.test.ts",
- "src/main/ipc/pty-windows-shell-selection.test.ts",
- "src/main/ipc/pty-write-ipc-validation.test.ts",
- "src/main/ipc/pty/configured-terminal-shell-args.test.ts",
- "src/main/ipc/pty/delivery/attached-pty-size.test.ts",
- "src/main/ipc/pty/runtime/spawn-commit-pty-size.test.ts",
- "src/main/ipc/repos-remote-client-events.test.ts",
- "src/main/ipc/runtime-agent-launch-capability.test.ts",
- "src/main/ipc/runtime-environment-removal-storage.test.ts",
- "src/main/ipc/runtime-environments-pairing.test.ts",
- "src/main/ipc/settings.test.ts",
- "src/main/ipc/shallow-watch-delivery-probe.test.ts",
- "src/main/ipc/ssh-active-relay-sessions.test.ts",
- "src/main/ipc/ssh-browse.test.ts",
- "src/main/ipc/ssh-passphrase.test.ts",
- "src/main/ipc/ssh-pty-remote-source-range-consumers.test.ts",
- "src/main/ipc/ssh-terminate-sessions.test.ts",
- "src/main/ipc/terminal-preview-output-stream.test.ts",
- "src/main/ipc/terminal-preview.test.ts",
- "src/main/ipc/ui.test.ts",
- "src/main/ipc/worktree-folder-rename-target.test.ts",
- "src/main/ipc/worktree-git-status-ref-watch.test.ts",
- "src/main/ipc/worktree-logic.test.ts",
- "src/main/ipc/worktree-push-target-reconciliation-real-git.test.ts",
- "src/main/ipc/worktree-remote-push-target-materialization.test.ts",
- "src/main/ipc/worktrees-local-base-ref-resolution.test.ts",
- "src/main/ipc/worktrees-orphan-directory-cleanup.test.ts",
- "src/main/ipc/worktrees-ssh-create-base-prefetch.test.ts",
- "src/main/ipc/worktrees-ssh-fork-push-target-remote.test.ts",
- "src/main/ipc/worktrees/listing/detected-worktree-classification.test.ts",
- "src/main/issue-command-ignore.test.ts",
- "src/main/jira/client.test.ts",
- "src/main/linear/projects.test.ts",
- "src/main/linux-lid-sleep-assertion.test.ts",
- "src/main/memory/hydrate-local-pty-registry.test.ts",
- "src/main/mimo/hook-service.test.ts",
- "src/main/muse-usage/scanner.test.ts",
- "src/main/native-chat/agent-session-journal/journal-crash-boundary.test.ts",
- "src/main/native-chat/agent-session-journal/journal-streaming-replay.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-delta-coalescer-protected.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-history-page.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-journal-recovery.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-adapter-router.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-eviction.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-options.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-reverse.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-host-handoff-stop.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-host-runtime-state.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-live-tui-restart-survival.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-settlement-retry.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-subscribers.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-teardown-handoff-drain.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-wire-admission.test.ts",
- "src/main/native-chat/agent-session-wire/structured-tui-transcript-teardown.test.ts",
- "src/main/native-chat/host-readable-transcript-path-fs-gate.test.ts",
- "src/main/native-chat/session-file-resolver.test.ts",
- "src/main/native-chat/structured-agent-session-history-adoption.test.ts",
- "src/main/native-chat/transcript-line-decoders.grok.test.ts",
- "src/main/native-chat/transcript-reader-codex-history-mode.test.ts",
- "src/main/native-chat/transcript-tail-reader-cancellation.test.ts",
- "src/main/native-chat/wsl-transcript-fs-process-client.test.ts",
- "src/main/native-chat/wsl-transcript-fs-process-operations.test.ts",
- "src/main/native-chat/wsl-transcript-fs-route-quarantine.test.ts",
- "src/main/network/macos-system-resolver-health.test.ts",
- "src/main/network/macos-tailscale-dns-diagnostic.test.ts",
- "src/main/notifications/desktop-away-state.test.ts",
- "src/main/observability/bundle.test.ts",
- "src/main/observability/redactor-environment-lines.test.ts",
- "src/main/observability/redactor.test.ts",
- "src/main/opencode/hook-plugin-child-attention.test.ts",
- "src/main/opencode/opencode-session-binder.test.ts",
- "src/main/orca-profiles/profile-cloud-pkce.test.ts",
- "src/main/orca-profiles/profile-cloud-service.test.ts",
- "src/main/orca-profiles/profile-project-state-file.test.ts",
- "src/main/orcad/node-pty-precondition.test.ts",
- "src/main/orcad/orcad-daemon-supervision.test.ts",
- "src/main/own-chromium-tree-kill-guard.test.ts",
- "src/main/persistence-native-chat-tab-view-mode.test.ts",
- "src/main/persistence-protected-secret-fail-closed.test.ts",
- "src/main/persistence-split-pane-incarnation.test.ts",
- "src/main/persistence-ssh-remote-pty-binding-replay.test.ts",
- "src/main/persistence-workspace-repin-automation-owner.test.ts",
- "src/main/persistence-workspace-session-scrollback.test.ts",
- "src/main/persistence-worktree-meta-and-folder-workspaces.test.ts",
- "src/main/persistence-worktree-name-retirement.test.ts",
- "src/main/persistence/loading-store/terminal-tab-pty-ownership.test.ts",
- "src/main/persistence/tracking-repos/missing-local-worktree-metadata-pruning.test.ts",
- "src/main/pi/omp-model-command-source.test.ts",
- "src/main/pi/titlebar-extension-source.test.ts",
- "src/main/plugins/plugin-command-registry.test.ts",
- "src/main/plugins/plugin-panel-controller.test.ts",
- "src/main/plugins/plugin-worker-supervision.integration.test.ts",
- "src/main/ports/advertised-url-retention.test.ts",
- "src/main/ports/local-workspace-port-scanner.test.ts",
- "src/main/project-groups/folder-workspace-path-status.test.ts",
- "src/main/providers/agent-foreground-process-pi.test.ts",
- "src/main/providers/agent-foreground-process-real-rows.test.ts",
- "src/main/providers/local-pty-provider-session-inventory.test.ts",
- "src/main/providers/local-pty-shell-ready-startup-command.test.ts",
- "src/main/providers/posix-pane-foreground-fingerprint.test.ts",
- "src/main/providers/pty-process-list-admission.test.ts",
- "src/main/providers/ssh-filesystem-download.test.ts",
- "src/main/providers/ssh-filesystem-provider-capabilities.test.ts",
- "src/main/providers/ssh-filesystem-provider-stream.test.ts",
- "src/main/providers/ssh-filesystem-provider.test.ts",
- "src/main/providers/ssh-git-provider-api.test.ts",
- "src/main/providers/windows-shell-preflight-runtime.windows.test.ts",
- "src/main/pty/appimage-terminal-env.test.ts",
- "src/main/pty/legacy-terminal-shim-dir.test.ts",
- "src/main/pty/posix-pty-process-groups.test.ts",
- "src/main/pty/windows-environment-path-main-loop.test.ts",
- "src/main/pty/windows-path-registry-fallback.test.ts",
- "src/main/rate-limits/codex-fetcher-process-contract.test.ts",
- "src/main/rate-limits/codex-fetcher-pty-settle.test.ts",
- "src/main/rate-limits/codex-fetcher-runtime-pairing.test.ts",
- "src/main/rate-limits/codex-probe-termination.test.ts",
- "src/main/rate-limits/initial-account-rate-limit-target.test.ts",
- "src/main/rate-limits/minimax/minimax-request-context.test.ts",
- "src/main/rate-limits/opencode-go-usage-fetcher.test.ts",
- "src/main/rate-limits/service-window-activation.test.ts",
- "src/main/refused-tree-kill-root-termination.test.ts",
- "src/main/ripgrep/bundled-ripgrep-spawn.test.ts",
- "src/main/runtime/agent-prompt-request-correlation.test.ts",
- "src/main/runtime/agent-session-claim-identity.test.ts",
- "src/main/runtime/agent-session-resume-args.test.ts",
- "src/main/runtime/agent-startup-input-assembly-census.test.ts",
- "src/main/runtime/automation-change-publication.test.ts",
- "src/main/runtime/browser-host-lease-registry.test.ts",
- "src/main/runtime/browser-host-page-placement-replacement.test.ts",
- "src/main/runtime/browser-tab-create-publication.test.ts",
- "src/main/runtime/claude-structured-session-integration.test.ts",
- "src/main/runtime/client-hosted-browser-row-publication.test.ts",
- "src/main/runtime/decorative-title-fact-emission.test.ts",
- "src/main/runtime/folder-workspace-pty-identity.test.ts",
- "src/main/runtime/graph-sync-payload-partition.test.ts",
- "src/main/runtime/headless-placeholder-graph-surface-standing.test.ts",
- "src/main/runtime/headless-terminal-split-layout.test.ts",
- "src/main/runtime/mobile-pairing-qr.test.ts",
- "src/main/runtime/mobile-session-tabs-agent-status-heartbeat.test.ts",
- "src/main/runtime/orca-runtime-browser-client-hosted.test.ts",
- "src/main/runtime/orchestration-cli-subprocess.test.ts",
- "src/main/runtime/orchestration-mailbox-cold-park-idle.test.ts",
- "src/main/runtime/orchestration-mailbox-detached-routing.test.ts",
- "src/main/runtime/orchestration-mailbox-routing-races.test.ts",
- "src/main/runtime/orchestration-worker-workspace-resolution.test.ts",
- "src/main/runtime/orchestration/coordinator-escalation-triage.test.ts",
- "src/main/runtime/orchestration/db-heartbeat-straggler-guard.test.ts",
- "src/main/runtime/orchestration/db-task-create-readiness.test.ts",
- "src/main/runtime/orchestration/db.test.ts",
- "src/main/runtime/orchestration/db/dispatch-context/dispatch-capability.test.ts",
- "src/main/runtime/orchestration/db/federated-worker-report-outcome.test.ts",
- "src/main/runtime/orchestration/db/legacy-question-identity.test.ts",
- "src/main/runtime/orchestration/db/row-column-lists.test.ts",
- "src/main/runtime/orchestration/db/schema/federated-home-run-migration.test.ts",
- "src/main/runtime/orchestration/dispatch-creator-identity-migration.test.ts",
- "src/main/runtime/orchestration/orchestration-db-permissions.test.ts",
- "src/main/runtime/orchestration/orchestration-legacy-worker-terminal-recovery.test.ts",
- "src/main/runtime/orchestration/structured-pointer-operation-id.test.ts",
- "src/main/runtime/orchestration/task-deps-flag.test.ts",
- "src/main/runtime/orchestration/worker-output-archive-bounding.test.ts",
- "src/main/runtime/proven-absent-leaf-pty-verdicts.test.ts",
- "src/main/runtime/relay/relay-auth-coordinator-recovery.test.ts",
- "src/main/runtime/relay/relay-auth-coordinator.test.ts",
- "src/main/runtime/relay/relay-demand-ledger.test.ts",
- "src/main/runtime/relay/relay-host-proof.test.ts",
- "src/main/runtime/relay/relay-http-client.test.ts",
- "src/main/runtime/rpc/core-typed-method-contract.test.ts",
- "src/main/runtime/rpc/dispatcher-browser-client-automation.test.ts",
- "src/main/runtime/rpc/dispatcher-computer-errors.test.ts",
- "src/main/runtime/rpc/dispatcher-feature-interactions.test.ts",
- "src/main/runtime/rpc/e2ee-channel-text-backpressure.test.ts",
- "src/main/runtime/rpc/methods/ai-vault-search.test.ts",
- "src/main/runtime/rpc/methods/client-native-chat-settings.test.ts",
- "src/main/runtime/rpc/methods/files-watch-cleanup.test.ts",
- "src/main/runtime/rpc/methods/host-capabilities.test.ts",
- "src/main/runtime/rpc/methods/hosted-review.test.ts",
- "src/main/runtime/rpc/methods/linear-agent-access.test.ts",
- "src/main/runtime/rpc/methods/orchestration-structured-worker-lifecycle.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-release-reap-fixed.func.test.ts",
- "src/main/runtime/rpc/methods/orchestration/cli-runtime-boundary.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-release-safety.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-control-mail.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/check-superseded-terminal.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/check-worker-consumer-fencing.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-read-projection.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-inventory.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-ownership-guard.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/workers-recovery.test.ts",
- "src/main/runtime/rpc/methods/pairing.test.ts",
- "src/main/runtime/rpc/methods/project-host-setup-self-host-stamp.test.ts",
- "src/main/runtime/rpc/methods/structured-worker-stop-receipt.test.ts",
- "src/main/runtime/rpc/methods/terminal/terminal-snapshot-json-byte-budget.test.ts",
- "src/main/runtime/rpc/methods/workspace-ports.test.ts",
- "src/main/runtime/rpc/methods/worktree-create-args.test.ts",
- "src/main/runtime/rpc/methods/worktree-create-navigation.test.ts",
- "src/main/runtime/rpc/methods/worktree-missing-terminal-teardown.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-takeover-delivery.test.ts",
- "src/main/runtime/rpc/orchestration-mutation-executor.test.ts",
- "src/main/runtime/rpc/terminal-agent-prompt-send.test.ts",
- "src/main/runtime/rpc/terminal-agent-send-guard.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-output-pause-and-viewport.test.ts",
- "src/main/runtime/rpc/terminal-prompt-delivery-receipt.test.ts",
- "src/main/runtime/rpc/terminal-send-agent-session-lease.test.ts",
- "src/main/runtime/rpc/terminal-source-range-ledger.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-ownership.test.ts",
- "src/main/runtime/rpc/unix-socket-transport.test.ts",
- "src/main/runtime/runtime-browser-client-page-adoption.test.ts",
- "src/main/runtime/runtime-browser-network-execution-host.test.ts",
- "src/main/runtime/runtime-git-execution-host-ownership.test.ts",
- "src/main/runtime/runtime-mobile-agent-status-builder.test.ts",
- "src/main/runtime/runtime-remove-project-host-scope.test.ts",
- "src/main/runtime/runtime-resolved-worktree-cache.test.ts",
- "src/main/runtime/runtime-rpc-pairing-mode-persistence.test.ts",
- "src/main/runtime/runtime-rpc-terminal-list.test.ts",
- "src/main/runtime/runtime-rpc-websocket-bind-host.test.ts",
- "src/main/runtime/runtime-rpc-websocket-long-poll-caps.test.ts",
- "src/main/runtime/runtime-skill-install-authority.test.ts",
- "src/main/runtime/runtime-terminal-orphan-topology-validation.test.ts",
- "src/main/runtime/structured-agent-session-integration.test.ts",
- "src/main/runtime/structured-worker-authority.test.ts",
- "src/main/runtime/structured-worker-mail-routing.test.ts",
- "src/main/runtime/structured-worker-terminal-refusal.test.ts",
- "src/main/runtime/terminal-close-slow-agent-exit.test.ts",
- "src/main/runtime/tui-idle-name-only-real-pty.integration.test.ts",
- "src/main/runtime/worktree-path-selector-wsl-posix.test.ts",
- "src/main/shell-startup-identity-scanner.test.ts",
- "src/main/skills/skill-delete/roots.test.ts",
- "src/main/skills/skill-package-download.test.ts",
- "src/main/skills/skill-remote-error-category-parity.test.ts",
- "src/main/skills/skill-scan-coalescer.test.ts",
- "src/main/skills/skill-upload-process-restart-child.test.ts",
- "src/main/skills/skill-upload-session-admission-regression.test.ts",
- "src/main/source-control/hosted-review-azure-devops.integration.test.ts",
- "src/main/source-control/hosted-review-creation-gitlab-self-hosted.test.ts",
- "src/main/source-control/pull-request-linked-issue.test.ts",
- "src/main/ssh/orcad-activation-gate.test.ts",
- "src/main/ssh/orcad-activation-record.test.ts",
- "src/main/ssh/orcad-remote-gc.test.ts",
- "src/main/ssh/orcad-state-snapshot.test.ts",
- "src/main/ssh/sftp-namespace-resolution.test.ts",
- "src/main/ssh/ssh-channel-multiplexer-backpressure.test.ts",
- "src/main/ssh/ssh-connection-github-probe.test.ts",
- "src/main/ssh/ssh-known-hosts.test.ts",
- "src/main/ssh/ssh-multi-factor-authentication.test.ts",
- "src/main/ssh/ssh-orphan-relay-pty-sweep.test.ts",
- "src/main/ssh/ssh-port-scanner.test.ts",
- "src/main/ssh/ssh-pty-consumer-session.test.ts",
- "src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts",
- "src/main/ssh/ssh-relay-native-deps-cache-shell.test.ts",
- "src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts",
- "src/main/ssh/ssh-relay-session-model-migration.test.ts",
- "src/main/ssh/ssh-relay-session-reconnect-incarnation.test.ts",
- "src/main/ssh/ssh-relay-superseded-endpoints.test.ts",
- "src/main/ssh/ssh-remote-commands.test.ts",
- "src/main/ssh/ssh-remote-linear-relation-write.test.ts",
- "src/main/ssh/ssh-remote-windows-command-line-limit.test.ts",
- "src/main/ssh/ssh-session-limit-error.test.ts",
- "src/main/star-nag/service-prompt-moments.test.ts",
- "src/main/startup/desktop-startup-ordering.test.ts",
- "src/main/startup/ensure-virtual-display.test.ts",
- "src/main/startup/headless-pty-hydration-ordering.test.ts",
- "src/main/startup/hydrate-shell-path.windows.test.ts",
- "src/main/startup/main-window-structured-status-filter.test.ts",
- "src/main/startup/os-opened-markdown-files.test.ts",
- "src/main/startup/secure-dns-census.test.ts",
- "src/main/startup/single-instance-lock.test.ts",
- "src/main/startup/skill-share-deep-link-state.test.ts",
- "src/main/startup/windows-install-dir-acl-startup-wiring.test.ts",
- "src/main/synthetic-title-spinner.test.ts",
- "src/main/system-fonts.test.ts",
- "src/main/telemetry/validator.test.ts",
- "src/main/text-generation/agent-failure-output.test.ts",
- "src/main/text-generation/commit-message-text-generation-local-subprocess.test.ts",
- "src/main/text-generation/commit-message-text-generation-model-discovery.test.ts",
- "src/main/text-generation/pull-request-context.test.ts",
- "src/main/updater-nudge.test.ts",
- "src/main/updater-release-api-token.test.ts",
- "src/main/updater-test-module-loader.test.ts",
- "src/main/updater.linux-root-package-install.test.ts",
- "src/main/updater.publishing-window-feed.test.ts",
- "src/main/warp-themes/parser-runner.test.ts",
- "src/main/warp-themes/theme-file-scanner.test.ts",
- "src/main/window/clipboard-remote-file-cleanup.bench.test.ts",
- "src/main/window/createMainWindow-close-confirmation.test.ts",
- "src/main/window/createMainWindow-startup-reveal.test.ts",
- "src/main/window/foreground-activation-policy.test.ts",
- "src/main/window/main-window-visibility.test.ts",
- "src/main/window/mobile-markdown-request-relay.test.ts",
- "src/main/worker-thread-request-queue.test.ts",
- "src/main/worktree-create-execution-host-route.test.ts",
- "src/main/worktree-create-preparation-claim.test.ts",
- "src/main/worktree-removal-repo-owner.test.ts",
- "src/main/wsl/wsl-executable-path.win32.test.ts",
- "src/main/wsl/wsl-runner.test.ts",
- "src/relay/agent-exec-handler-windows.test.ts",
- "src/relay/ai-vault-handler.test.ts",
- "src/relay/dispatcher-capacity-degradation.test.ts",
- "src/relay/dispatcher-client-writer.test.ts",
- "src/relay/dispatcher-notification-ownership.test.ts",
- "src/relay/fs-search-line-fragments.test.ts",
- "src/relay/fs-stream-pty-echo-backpressure.integration.test.ts",
- "src/relay/git-handler-branch-compare.test.ts",
- "src/relay/git-handler-diff-read-coalescing.test.ts",
- "src/relay/git-handler-fork-remote-exec.test.ts",
- "src/relay/git-handler-worktree-list-authority.test.ts",
- "src/relay/git-handler-worktree-ops.test.ts",
- "src/relay/git-response-pty-echo-backpressure.integration.test.ts",
- "src/relay/git-stdout-stream.test.ts",
- "src/relay/plugin-overlay-env.test.ts",
- "src/relay/port-scan-handler.test.ts",
- "src/relay/pty-handler-shell-resolution.test.ts",
- "src/relay/pty-handler-source-publication.test.ts",
- "src/relay/pty-handler-spawn-admission.test.ts",
- "src/relay/pty-handler-spawn-environment.test.ts",
- "src/relay/pty-shell-utils-process-cycles.test.ts",
- "src/relay/relay-grace-branch.test.ts",
- "src/relay/relay-pty-source-recovery-completion.test.ts",
- "src/relay/relay-watcher-event-emitter.test.ts",
- "src/relay/relay-watcher-pending-setup-waiters.test.ts",
- "src/relay/skill-install-handler.test.ts",
- "src/relay/skill-upload-multi-relay.integration.test.ts",
- "src/relay/subprocess-tree-termination.test.ts",
- "src/relay/windows-port-scan.test.ts",
- "src/relay/workspace-space-scan.test.ts",
- "src/renderer/src/app-shell/app-command-handlers-workspace-delete.test.ts",
- "src/renderer/src/app-shell/app-root-surface-settings.test.tsx",
- "src/renderer/src/app-shell/remote-workspace-unplaced-upload-suppression.test.tsx",
- "src/renderer/src/components/NativeChatResumeOnRestartModal.test.tsx",
- "src/renderer/src/components/NewWorkspaceComposerCard.set-location.test.tsx",
- "src/renderer/src/components/TerminalWorkbenchContainer.test.tsx",
- "src/renderer/src/components/UpdateCard.error-card.test.tsx",
- "src/renderer/src/components/WorktreeJumpPalette.mount-gating.test.tsx",
- "src/renderer/src/components/activity/activity-portal-churn-budget.test.ts",
- "src/renderer/src/components/activity/activity-terminal-portal.test.tsx",
- "src/renderer/src/components/activity/activity-thread-grouping.status-order.test.ts",
- "src/renderer/src/components/activity/activity-thread-hover-card.test.tsx",
- "src/renderer/src/components/activity/useActivityUnreadCount.freshness.test.tsx",
- "src/renderer/src/components/artifacts/artifact-publish-flow.test.ts",
- "src/renderer/src/components/automations/AutomationListHostGroups.test.tsx",
- "src/renderer/src/components/automations/automation-host-cache.test.ts",
- "src/renderer/src/components/automations/automation-host-detail-display.test.ts",
- "src/renderer/src/components/automations/automation-host-diagnostics.test.ts",
- "src/renderer/src/components/automations/automation-host-health.test.ts",
- "src/renderer/src/components/automations/automation-host-status-descriptors.test.ts",
- "src/renderer/src/components/automations/automation-list-search-rows.test.ts",
- "src/renderer/src/components/automations/automation-run-view-state.test.ts",
- "src/renderer/src/components/automations/automation-scoped-list-client.test.ts",
- "src/renderer/src/components/automations/automation-setup-decision.test.ts",
- "src/renderer/src/components/automations/external-automation-source-availability.test.ts",
- "src/renderer/src/components/automations/use-automation-runs-dashboard.test.tsx",
- "src/renderer/src/components/browser-cookie-import-google-disclosure.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.download-notices.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.failure-remount.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/markup-drawing-model.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.remote-link-routing.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-expansion.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-address-bar-suggestions.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-workspace-pane.retention-props.test.tsx",
- "src/renderer/src/components/browser-pane/browser-client-page-position-driver.test.ts",
- "src/renderer/src/components/browser-pane/browser-reopen-on-server.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-automation-visibility.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-focus.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-stream-lifecycle.test.ts",
- "src/renderer/src/components/browser-webauthn-account-dialog.test.tsx",
- "src/renderer/src/components/cmd-j/palette-section-render-cap.test.ts",
- "src/renderer/src/components/cmd-j/quick-action-context.test.ts",
- "src/renderer/src/components/comment-reply-target-state.test.ts",
- "src/renderer/src/components/confirmation-dialog-refresh-boundary.test.ts",
- "src/renderer/src/components/contextual-tours/ContextualTourOverlay.remeasure.test.tsx",
- "src/renderer/src/components/contextual-tours/contextual-tour-gate.test.ts",
- "src/renderer/src/components/contextual-tours/contextual-tour-overlay-measurement.test.ts",
- "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.clipboard-routes.test.tsx",
- "src/renderer/src/components/dashboard-popout/DashboardPopoutRoot.test.tsx",
- "src/renderer/src/components/dashboard-popout/agent-board-filtering.test.ts",
- "src/renderer/src/components/dashboard-popout/terminal-preview-unavailable-message.test.ts",
- "src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.test.tsx",
- "src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts",
- "src/renderer/src/components/dashboard/dashboard-card-terminal-input.test.ts",
- "src/renderer/src/components/dashboard/launch-dashboard-agent.test.ts",
- "src/renderer/src/components/dictation/dictation-audio-meter.test.ts",
- "src/renderer/src/components/dictation/dictation-insertion-target.test.ts",
- "src/renderer/src/components/diff-comments/diff-comment-line-range.test.ts",
- "src/renderer/src/components/editor/EditorContent.monaco-lifecycle.test.tsx",
- "src/renderer/src/components/editor/EditorPanel.markdown-classification-memoization.test.tsx",
- "src/renderer/src/components/editor/MarkdownTableOfContentsPanel.test.tsx",
- "src/renderer/src/components/editor/NotesSendMenu.test.tsx",
- "src/renderer/src/components/editor/RichMarkdownLinkBubble.render.test.tsx",
- "src/renderer/src/components/editor/check-annotation-open.test.ts",
- "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-section-scaling.test.tsx",
- "src/renderer/src/components/editor/conflict-review-file-tree-windowing.test.tsx",
- "src/renderer/src/components/editor/csv-parse.test.ts",
- "src/renderer/src/components/editor/diff-section-layout.test.ts",
- "src/renderer/src/components/editor/editor-panel-render-model.test.ts",
- "src/renderer/src/components/editor/file-editor-word-wrap-options.test.ts",
- "src/renderer/src/components/editor/ipynb-code-cell-lines.test.ts",
- "src/renderer/src/components/editor/local-log-tail-decoder.test.ts",
- "src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts",
- "src/renderer/src/components/editor/markdown-internal-links.test.ts",
- "src/renderer/src/components/editor/markdown-render-mode.test.ts",
- "src/renderer/src/components/editor/markdown-rich-line-scan.test.ts",
- "src/renderer/src/components/editor/markdown-rich-size-limit.test.ts",
- "src/renderer/src/components/editor/mermaid-config.test.ts",
- "src/renderer/src/components/editor/monaco-markdown-doc-link-decorations.test.ts",
- "src/renderer/src/components/editor/pdf-view-position.test.ts",
- "src/renderer/src/components/editor/rich-markdown-list-continuation.test.ts",
- "src/renderer/src/components/editor/rich-markdown-literal-serialization.test.ts",
- "src/renderer/src/components/editor/rich-markdown-lowlight-cache.test.ts",
- "src/renderer/src/components/editor/rich-markdown-normalize.test.ts",
- "src/renderer/src/components/emulator-pane/emulator-device-frame.input.test.tsx",
- "src/renderer/src/components/emulator-pane/emulator-keyboard-paste.test.ts",
- "src/renderer/src/components/emulator-pane/emulator-screen-gesture.test.ts",
- "src/renderer/src/components/feature-tips/CliSkillSetupTerminal.test.tsx",
- "src/renderer/src/components/feature-tips/feature-tip-cli-install-action.test.ts",
- "src/renderer/src/components/feature-wall/feature-wall-animation-visibility.test.tsx",
- "src/renderer/src/components/feature-wall/use-feature-wall-completion.test.ts",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.empty-state.test.tsx",
- "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.test.ts",
- "src/renderer/src/components/github-enterprise-slug-routing-boundary.test.ts",
- "src/renderer/src/components/github-project/GhAuthErrorHelp.test.ts",
- "src/renderer/src/components/github-project/github-project-picker-filter.test.ts",
- "src/renderer/src/components/github-project/project-row-filtering.test.ts",
- "src/renderer/src/components/github/github-markdown-image-url.test.ts",
- "src/renderer/src/components/github/repro-8784-ghe-avatar-fallback.test.ts",
- "src/renderer/src/components/hover-reveal-touch-action-visibility.test.ts",
- "src/renderer/src/components/landing-preflight-runtime-boundary.test.ts",
- "src/renderer/src/components/native-chat-resume-on-restart-grouping.test.ts",
- "src/renderer/src/components/native-chat/NativeChatImageAttachmentPreview.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageTimestamp.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatPromptEditor.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatStructuredSession.launch-lifecycle.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatStructuredSession.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatSubagentRun.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-autoscroll.test.ts",
- "src/renderer/src/components/native-chat/native-chat-dismiss-key.test.ts",
- "src/renderer/src/components/native-chat/native-chat-leaf-routing.test.ts",
- "src/renderer/src/components/native-chat/native-chat-message-list-projection.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pane-file-drop.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-pty-session-options.test.ts",
- "src/renderer/src/components/native-chat/native-chat-session-assembler.test.ts",
- "src/renderer/src/components/native-chat/native-chat-shared-copy-matches-catalog.test.ts",
- "src/renderer/src/components/native-chat/native-chat-web-link-actions.test.ts",
- "src/renderer/src/components/native-chat/native-chat-working-status-shared-clock.test.tsx",
- "src/renderer/src/components/native-chat/structured-agent-session-message-projection.test.ts",
- "src/renderer/src/components/native-chat/structured-attention-surface.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-context-menu.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-live-session-pending.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.test.ts",
- "src/renderer/src/components/native-chat/use-structured-agent-session-provisional.test.tsx",
- "src/renderer/src/components/new-workspace/ProjectComboboxRow.test.tsx",
- "src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx",
- "src/renderer/src/components/onboarding/AgentStep.test.tsx",
- "src/renderer/src/components/onboarding/OnboardingInlineCommandTerminal.test.ts",
- "src/renderer/src/components/orca-profiles/OrcaProfileSignOutConfirmDialog.test.tsx",
- "src/renderer/src/components/pet/PetOverlay.frame-durations.test.tsx",
- "src/renderer/src/components/ports/WorkspacePortScanner.test.tsx",
- "src/renderer/src/components/quick-open-file-list.react.test.tsx",
- "src/renderer/src/components/repo/CreateFromPicker.test.tsx",
- "src/renderer/src/components/right-sidebar/SessionRowTrailingActions.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts",
- "src/renderer/src/components/right-sidebar/active-checks-status.test.ts",
- "src/renderer/src/components/right-sidebar/activity-bar-overflow.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-scope-state.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-search-scope-identity.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-session-publication-gate.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.test.ts",
- "src/renderer/src/components/right-sidebar/branch-line-total-request-gate.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-hosted-review-click-routing.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-review-lookup-authority.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-create-review.test.tsx",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-manual-refresh.test.tsx",
- "src/renderer/src/components/right-sidebar/file-explorer-drag-scroll-marker.test.tsx",
- "src/renderer/src/components/right-sidebar/file-explorer-name-filter-projection.test.ts",
- "src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comment-presentation.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx",
- "src/renderer/src/components/right-sidebar/right-sidebar-titlebar-drag-regions.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control-primary-action-tooltip.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-push-recovery.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-split-open.test.ts",
- "src/renderer/src/components/right-sidebar/use-ai-vault-search.test.tsx",
- "src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.test.ts",
- "src/renderer/src/components/right-sidebar/use-source-control-ai.test.ts",
- "src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx",
- "src/renderer/src/components/settings/BranchPrefixFeedback.test.tsx",
- "src/renderer/src/components/settings/BrowserSshWorkspaceRoutingSetting.test.tsx",
- "src/renderer/src/components/settings/CliSection.test.tsx",
- "src/renderer/src/components/settings/CliSkillRuntimeSetup.test.tsx",
- "src/renderer/src/components/settings/CloudVmSetupGuide.test.tsx",
- "src/renderer/src/components/settings/EditorWordWrapSetting.test.tsx",
- "src/renderer/src/components/settings/OpenInMenuSetting.test.ts",
- "src/renderer/src/components/settings/RemoteServerUpdateDialog.test.tsx",
- "src/renderer/src/components/settings/RuntimePairingUrlGenerator.test.tsx",
- "src/renderer/src/components/settings/TaskSourceLinearSetup.test.tsx",
- "src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx",
- "src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx",
- "src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts",
- "src/renderer/src/components/settings/mobile-network-interface-selection.test.ts",
- "src/renderer/src/components/settings/provider-account-scope.test.ts",
- "src/renderer/src/components/settings/provider-rate-limit-scope-panels.test.tsx",
- "src/renderer/src/components/settings/repository-hook-settings-draft.test.ts",
- "src/renderer/src/components/settings/runtime-server-row-unverifiable-host.test.tsx",
- "src/renderer/src/components/settings/shortcut-binding-list-mutations.test.ts",
- "src/renderer/src/components/settings/shortcut-recording-state.test.ts",
- "src/renderer/src/components/settings/ssh-target-draft.test.ts",
- "src/renderer/src/components/settings/task-tracker-integration-cards.test.tsx",
- "src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx",
- "src/renderer/src/components/sidebar/ImportedWorktreesVisibilityLine.test.tsx",
- "src/renderer/src/components/sidebar/MarkdownImageLightbox.test.tsx",
- "src/renderer/src/components/sidebar/ProjectGroupDeleteDialog.test.tsx",
- "src/renderer/src/components/sidebar/SidebarWorkspaceFilterSection.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx",
- "src/renderer/src/components/sidebar/delete-worktree-toast.test.ts",
- "src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts",
- "src/renderer/src/components/sidebar/project-group-header-dom.test.ts",
- "src/renderer/src/components/sidebar/project-group-header-drop.test.ts",
- "src/renderer/src/components/sidebar/project-header-drop.test.ts",
- "src/renderer/src/components/sidebar/prompt-cache-countdown-clock.test.ts",
- "src/renderer/src/components/sidebar/remote-file-browser-helpers.test.ts",
- "src/renderer/src/components/sidebar/use-feedback-image-drop.test.tsx",
- "src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx",
- "src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts",
- "src/renderer/src/components/sidebar/useRenderedSetupScriptPromptState.test.ts",
- "src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts",
- "src/renderer/src/components/sidebar/worktree-delete-host-qualification.test.ts",
- "src/renderer/src/components/sidebar/worktree-filter-visibility.test.ts",
- "src/renderer/src/components/sidebar/worktree-lineage-projection.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/grouping/build-rows.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/navigation/render-row-lookup.folder-workspace.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/navigation/use-selection-host-collision.test.tsx",
- "src/renderer/src/components/sidebar/worktree-meta-updates.test.ts",
- "src/renderer/src/components/sidebar/worktree-name-suggestions.test.ts",
- "src/renderer/src/components/sidebar/worktree-sidebar-pointer-drag-dom.test.ts",
- "src/renderer/src/components/sidebar/worktree-subagent-child-rows.test.ts",
- "src/renderer/src/components/sidebar/worktree-visibility-source-provenance.test.ts",
- "src/renderer/src/components/skills/SkillInstallManagementDialog.test.tsx",
- "src/renderer/src/components/skills/skill-description-length.test.ts",
- "src/renderer/src/components/skills/skill-install-provider-groups.test.ts",
- "src/renderer/src/components/skills/skill-install-workspace-choices.test.ts",
- "src/renderer/src/components/skills/skill-package-checklist-items.test.ts",
- "src/renderer/src/components/skills/skill-share-selection.test.ts",
- "src/renderer/src/components/stats/usage-overview-model.test.ts",
- "src/renderer/src/components/status-bar/RuntimeHostStatusRow.test.tsx",
- "src/renderer/src/components/status-bar/resource-session-classification-parity.test.ts",
- "src/renderer/src/components/status-bar/usage-error-copy.test.ts",
- "src/renderer/src/components/status-bar/use-resource-session-inventory.test.tsx",
- "src/renderer/src/components/status-bar/use-resource-usage-actions.test.tsx",
- "src/renderer/src/components/status-bar/workspace-space-presentation.test.ts",
- "src/renderer/src/components/tab-bar/client-hosted-browser-row-strip-placement.test.ts",
- "src/renderer/src/components/tab-bar/group-tab-order.test.ts",
- "src/renderer/src/components/tab-bar/tab-agent-launch-options.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-file-matches.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-menu-options.test.ts",
- "src/renderer/src/components/tab-group/TabGroupSplitLayout.test.ts",
- "src/renderer/src/components/tab-group/TabPaneColumnSplitDragOverlay.test.tsx",
- "src/renderer/src/components/tab-group/tab-group-body-anchor.test.ts",
- "src/renderer/src/components/tab-group/useTabGroupCreationCommands.local-shell.test.ts",
- "src/renderer/src/components/task-page-github-resume-cache.test.ts",
- "src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts",
- "src/renderer/src/components/task-page-new-issue-draft.test.ts",
- "src/renderer/src/components/task-page-pagination-page-numbers.test.ts",
- "src/renderer/src/components/task-page-repo-source-divergence.test.ts",
- "src/renderer/src/components/terminal-pane/TerminalSshReconnectOverlay.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-no-evidence-cadence.test.ts",
- "src/renderer/src/components/terminal-pane/agent-interrupt-inference.test.ts",
- "src/renderer/src/components/terminal-pane/command-code-output-ownership.test.ts",
- "src/renderer/src/components/terminal-pane/desktop-fit-fallback.test.ts",
- "src/renderer/src/components/terminal-pane/direct-ssh-hidden-output-restore-unavailable-banner.test.ts",
- "src/renderer/src/components/terminal-pane/paired-parking-unverifiable-host.test.ts",
- "src/renderer/src/components/terminal-pane/pane-foreground-inspect-observation-identity.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-agent-session-resume.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-repaint.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-command-finished-cleanup.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-queued-startup-consume.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-windows-cjk-repaint.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/foreground-renderer-risk-scan-tail.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/unbound-pane-spawn-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/pty-dispatcher-push-reattach.test.ts",
- "src/renderer/src/components/terminal-pane/regular-terminal-focus-ownership.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-outage-toast-flood-and-stuck-reconnect.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-activation-inventory-fallback.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-handoff.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-create-outcome-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-resubscribe-failure-recovery-routing.test.ts",
- "src/renderer/src/components/terminal-pane/replayed-scrollback-store-release.test.ts",
- "src/renderer/src/components/terminal-pane/repro-8832-url-next-line.test.ts",
- "src/renderer/src/components/terminal-pane/session-restored-banner-pane-state.test.tsx",
- "src/renderer/src/components/terminal-pane/shell-ready-marker-scan.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-capped-buffer-retention.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-exempt-flip.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-subscription-narrowing.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-context-menu-dismiss.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-fit-restore.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-handle-copy.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-http-url-extraction.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-deferred-chord.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-won-composition-order.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-action-routing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-file-open-routing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-provider-batching.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-remote-runtime-ssh-open.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-worktree-root-activation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-wsl-path-mapping.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-listener-order-parity.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-store-subscription-budget.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-parking-e2e-overrides.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parser-handler-guard.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-target-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-remote-runtime-recovery-ui-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-shortcut-ctrl-arrow.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-user-input-signal.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-webgl-atlas-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/title-agent-identity.test.ts",
- "src/renderer/src/components/terminal-pane/use-system-prefers-dark.test.ts",
- "src/renderer/src/components/terminal-pane/xterm-bypass-policy-ios.test.ts",
- "src/renderer/src/components/unexpected-signout/unexpected-signout-card.test.tsx",
- "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-row-order.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-background-removal.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-deletion-phases.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-controls.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-flat-list.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-scanned-host-confirmation-removal.test.tsx",
- "src/renderer/src/components/workspace-emoji/WorkspaceEmojiSuggestionPopover.test.tsx",
- "src/renderer/src/components/worktree-jump-palette-quick-action-availability.test.tsx",
- "src/renderer/src/components/worktree-jump-palette-source-context-boundary.test.ts",
- "src/renderer/src/hooks/composer-branch-selection.test.ts",
- "src/renderer/src/hooks/composer-state/composer-name-source-selection.test.ts",
- "src/renderer/src/hooks/composer-state/draft-target-sync.test.ts",
- "src/renderer/src/hooks/composer-state/quick-creation-request.test.ts",
- "src/renderer/src/hooks/direct-ssh-state-routing.test.ts",
- "src/renderer/src/hooks/remote-workspace-session-merge-closed-terminal-tombstone.test.ts",
- "src/renderer/src/hooks/runtime-client-events-sync.test.ts",
- "src/renderer/src/hooks/unpaired-device-auth-notification.test.ts",
- "src/renderer/src/hooks/use-now.test.ts",
- "src/renderer/src/hooks/use-task-page-github-work-item-mutation-host.test.ts",
- "src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts",
- "src/renderer/src/hooks/useAutoAckViewedAgent.away.test.ts",
- "src/renderer/src/hooks/useAutoAckViewedAgent.floating-panel.test.ts",
- "src/renderer/src/hooks/useComposerState-host-context-boundaries.test.ts",
- "src/renderer/src/hooks/useGlobalFileDrop.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-turn-completion.test.ts",
- "src/renderer/src/hooks/useIpcEvents-browser-navigation.test.ts",
- "src/renderer/src/hooks/useIpcEvents-updater-status.test.ts",
- "src/renderer/src/hooks/useResetCountdownClock.test.ts",
- "src/renderer/src/hooks/useSidebarResize.test.ts",
- "src/renderer/src/i18n/intl-locale.test.ts",
- "src/renderer/src/i18n/lazy-locale.test.ts",
- "src/renderer/src/i18n/technical-literal-catalog-values.test.ts",
- "src/renderer/src/i18n/zh-technical-literal-mistranslations.test.ts",
- "src/renderer/src/lib/active-agent-note-send-explicit-target.test.ts",
- "src/renderer/src/lib/agent-hibernation-visibility.test.ts",
- "src/renderer/src/lib/agent-launch-routing.test.ts",
- "src/renderer/src/lib/agent-paste-draft-submit-retry.test.ts",
- "src/renderer/src/lib/agent-status-epoch-clock.test.ts",
- "src/renderer/src/lib/ai-vault-omp-cold-resume.test.ts",
- "src/renderer/src/lib/ai-vault-resume-command.drop-repin.test.ts",
- "src/renderer/src/lib/cmd-j-linear-issue-intent.test.ts",
- "src/renderer/src/lib/cmd-j-section-leadership.test.ts",
- "src/renderer/src/lib/codex-stale-pane-sweep.test.ts",
- "src/renderer/src/lib/create-untitled-markdown.test.ts",
- "src/renderer/src/lib/doc-preview-grants.test.ts",
- "src/renderer/src/lib/editor-file-operation-owner.test.ts",
- "src/renderer/src/lib/ephemeral-vm-worktree-creation.test.ts",
- "src/renderer/src/lib/external-editor-open-capability.test.ts",
- "src/renderer/src/lib/feedback-image-attachments.test.ts",
- "src/renderer/src/lib/foreground-terminal-tabs.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-drain.test.ts",
- "src/renderer/src/lib/ime-composition-keyboard-event.test.ts",
- "src/renderer/src/lib/large-text-control-paste.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab.test.ts",
- "src/renderer/src/lib/launch-ai-vault-session.test.ts",
- "src/renderer/src/lib/linear-agent-skill-update-command.test.ts",
- "src/renderer/src/lib/mobile-terminal-tab-mount.test.ts",
- "src/renderer/src/lib/monaco-languages/register-nim.test.ts",
- "src/renderer/src/lib/native-chat-launch-draft-mirrorability.test.ts",
- "src/renderer/src/lib/nested-repo-selected-paths.test.ts",
- "src/renderer/src/lib/new-workspace-ssh-gate.test.ts",
- "src/renderer/src/lib/non-secure-context-crypto.repro.test.ts",
- "src/renderer/src/lib/open-mobile-emulator-tab.test.ts",
- "src/renderer/src/lib/open-tab-occupant-agent.test.ts",
- "src/renderer/src/lib/pane-manager/browser-mobile-driver-state.test.ts",
- "src/renderer/src/lib/pane-manager/mobile-fit-overrides.test.ts",
- "src/renderer/src/lib/pane-manager/pane-fit.test.ts",
- "src/renderer/src/lib/pane-manager/pane-key-resolution.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-linkifier-hover-reset.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-render-pause-release.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-webgl-auto-policy.test.ts",
- "src/renderer/src/lib/primary-selection-paste.test.ts",
- "src/renderer/src/lib/project-clone-url-prefill.test.ts",
- "src/renderer/src/lib/project-host-setup-options.test.ts",
- "src/renderer/src/lib/remap-open-editor-tabs-for-path-change.test.ts",
- "src/renderer/src/lib/renderer-memory-profile.test.ts",
- "src/renderer/src/lib/repo-search.test.ts",
- "src/renderer/src/lib/repo-slug-cache.test.ts",
- "src/renderer/src/lib/runtime-session-mirror-targets.test.ts",
- "src/renderer/src/lib/runtime-workspace-file-route.test.ts",
- "src/renderer/src/lib/settled-worker-wake-policy.test.ts",
- "src/renderer/src/lib/skill-freshness-display-status.test.ts",
- "src/renderer/src/lib/structured-agent-launch-no-terminal-fallback.test.ts",
- "src/renderer/src/lib/structured-agent-session-tab-activation.test.ts",
- "src/renderer/src/lib/terminal-input-activity-coalescing.test.ts",
- "src/renderer/src/lib/text-control-paste-ownership.test.ts",
- "src/renderer/src/lib/tui-agent-startup.test.ts",
- "src/renderer/src/lib/use-tab-agent-observed-signal-dispatch.test.tsx",
- "src/renderer/src/lib/use-tab-agent-pi-identity.test.ts",
- "src/renderer/src/lib/wake-sleeping-agents-live-done.test.ts",
- "src/renderer/src/lib/workspace-session-liveness.test.ts",
- "src/renderer/src/lib/workspace-session-ssh-partition-ownership.test.ts",
- "src/renderer/src/lib/workspace-tab-palette-activation.test.ts",
- "src/renderer/src/lib/workspace-tab-palette-search.test.ts",
- "src/renderer/src/lib/worktree-activation-structured-chat-surface.test.ts",
- "src/renderer/src/lib/worktree-activation-web-runtime.test.ts",
- "src/renderer/src/lib/worktree-creation-agent-seeding.test.ts",
- "src/renderer/src/lib/worktree-creation-flow-dedupe.test.ts",
- "src/renderer/src/lib/worktree-creation-surface.test.ts",
- "src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts",
- "src/renderer/src/lib/worktree-palette-review-match.test.ts",
- "src/renderer/src/lib/worktree-reactivation-tab-forkbomb.test.ts",
- "src/renderer/src/runtime/local-structured-session-tabs-sync/retired-epoch-repair.test.ts",
- "src/renderer/src/runtime/mobile-markdown-bridge-save-guards.test.ts",
- "src/renderer/src/runtime/native-chat-launch-draft-runtime-resolution.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-end-verdict.test.ts",
- "src/renderer/src/runtime/runtime-environment-ssh-state.test.ts",
- "src/renderer/src/runtime/runtime-git-client.test.ts",
- "src/renderer/src/runtime/runtime-jira-client.test.ts",
- "src/renderer/src/runtime/runtime-path-existence-batch.test.ts",
- "src/renderer/src/runtime/runtime-provider-search-bounds.test.ts",
- "src/renderer/src/runtime/runtime-rpc-client.test.ts",
- "src/renderer/src/runtime/runtime-skills-client.test.ts",
- "src/renderer/src/runtime/structured-agent-session-status-feed-lifecycle.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-browser.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-publication-cost.test.ts",
- "src/renderer/src/runtime/web-runtime-browser-tab-staging-hosting-intent.test.ts",
- "src/renderer/src/runtime/web-session-open-files-batch-equivalence.test.ts",
- "src/renderer/src/runtime/web-session-tabs-publisher-identity-lineage.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-terminal-bootstrap.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync/retraction-pane-ownership.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery.test.ts",
- "src/renderer/src/runtime/worktree-create-base.test.ts",
- "src/renderer/src/ssh/ssh-connect-verb.test.ts",
- "src/renderer/src/store/pinned-tab-close-guard.test.ts",
- "src/renderer/src/store/plugin-language-packs.test.ts",
- "src/renderer/src/store/slices/agent-generated-tab-title.test.ts",
- "src/renderer/src/store/slices/agent-status-freshness-scheduler.test.ts",
- "src/renderer/src/store/slices/agent-status-provider-session.test.ts",
- "src/renderer/src/store/slices/agent-status-reminted-pane-key.test.ts",
- "src/renderer/src/store/slices/agent-status-worktree-purge-leak.test.ts",
- "src/renderer/src/store/slices/browser-workspace-host-ownership.test.ts",
- "src/renderer/src/store/slices/direct-ssh-terminal-retry.test.ts",
- "src/renderer/src/store/slices/editor-branch-diff-snapshots.test.ts",
- "src/renderer/src/store/slices/editor-branch-line-total.test.ts",
- "src/renderer/src/store/slices/editor-git-status-reconciliation.test.ts",
- "src/renderer/src/store/slices/editor-rich-markdown-size-override.test.ts",
- "src/renderer/src/store/slices/editor/file-ids/hydrated-editor-projections.test.ts",
- "src/renderer/src/store/slices/editor/git/git-status-reconciliation.perf.test.ts",
- "src/renderer/src/store/slices/generation-records-worktree-removal-leak.test.ts",
- "src/renderer/src/store/slices/github-pr-branch-linked-pr-divergence.test.ts",
- "src/renderer/src/store/slices/hosted-review-cache.test.ts",
- "src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts",
- "src/renderer/src/store/slices/remote-server-updates.integration.test.ts",
- "src/renderer/src/store/slices/repos-module-lifetime-coordinators.test.ts",
- "src/renderer/src/store/slices/repos-nested-import-refresh-failures.test.ts",
- "src/renderer/src/store/slices/repos-project-groups-delete.test.ts",
- "src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts",
- "src/renderer/src/store/slices/runtime-host-status-entry-parity.test.ts",
- "src/renderer/src/store/slices/runtime-status-first-publication.test.ts",
- "src/renderer/src/store/slices/runtime-status-refresh-diagnostics.test.ts",
- "src/renderer/src/store/slices/runtime-status-restored-browser-host-attach.test.ts",
- "src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts",
- "src/renderer/src/store/slices/tabs-empty-split-activation.test.ts",
- "src/renderer/src/store/slices/tabs-label-and-pin-state.test.ts",
- "src/renderer/src/store/slices/tabs/tab-selection-contract.test.ts",
- "src/renderer/src/store/slices/terminal-input-activity-store-write.test.ts",
- "src/renderer/src/store/slices/terminal-tab-recovery-remount.test.ts",
- "src/renderer/src/store/slices/terminal-tab-retirement-store.test.ts",
- "src/renderer/src/store/slices/ui-hydration-workspace-cleanup-browse.test.ts",
- "src/renderer/src/store/slices/worktree-sleep-intent-lifecycle.test.ts",
- "src/renderer/src/store/slices/worktrees-removal-state-cleanup.test.ts",
- "src/renderer/src/store/slices/worktrees/session/worktree-no-op-notifications.test.ts",
- "src/renderer/src/store/terminals/workspace-terminal-placeholders.test.ts",
- "src/renderer/src/store/worktree-diff-comments-selector.test.ts",
- "src/renderer/src/web/web-preload-api-keybindings.test.ts",
- "src/renderer/src/web/web-runtime-client-file-watch-replay.test.ts",
- "src/renderer/src/web/web-runtime-connection-frame-router.test.ts",
- "src/renderer/src/web/web-runtime-status-owner.test.ts",
- "src/renderer/src/web/web-viewport-shell.test.ts",
- "src/shared/agent-cli-flag-detection.test.ts",
- "src/shared/agent-cli-install-dir-fallback.test.ts",
- "src/shared/agent-hook-endpoint-file.test.ts",
- "src/shared/agent-hook-listener-extraction-characterization.test.ts",
- "src/shared/agent-hook-listener-roster-retention.test.ts",
- "src/shared/agent-kind.test.ts",
- "src/shared/agent-launch-operation.test.ts",
- "src/shared/agent-status-child-work-admission.test.ts",
- "src/shared/agent-status-observation.test.ts",
- "src/shared/agent-status-run-capability.test.ts",
- "src/shared/agent-status-transport-envelope.test.ts",
- "src/shared/agent-title-decoration.test.ts",
- "src/shared/agent-title-identity-characterization.test.ts",
- "src/shared/ai-vault-session-depth.test.ts",
- "src/shared/automation-schedule-drift.test.ts",
- "src/shared/branch-prefix.test.ts",
- "src/shared/browser-client-host-reconciliation-protocol.test.ts",
- "src/shared/cheap-process-table-snapshot.test.ts",
- "src/shared/child-process/windows-cmd-shim-resolution.test.ts",
- "src/shared/child-process/windows-command-line.test.ts",
- "src/shared/claude-background-task-kind.test.ts",
- "src/shared/claude-statusline-rate-limits.test.ts",
- "src/shared/cli-runtime-pairing-boundary.test.ts",
- "src/shared/codex-reset-credit-scope.test.ts",
- "src/shared/commit-message-agent-spec.test.ts",
- "src/shared/commit-message-prompt.test.ts",
- "src/shared/computer-use-error-recovery.test.ts",
- "src/shared/draft-paste-ready-scanner.test.ts",
- "src/shared/feature-education-telemetry.test.ts",
- "src/shared/file-link-location.test.ts",
- "src/shared/foreground-process-selection.test.ts",
- "src/shared/git-diff-transport-budget.test.ts",
- "src/shared/git-history-graph.test.ts",
- "src/shared/git-merge-tree-capability.test.ts",
- "src/shared/git-status-line-stat-inputs.test.ts",
- "src/shared/git-upstream-status.test.ts",
- "src/shared/grok-session-paths.test.ts",
- "src/shared/hermes-session-run-index.test.ts",
- "src/shared/hosted-review-github.test.ts",
- "src/shared/image-data-uri.test.ts",
- "src/shared/macos-symbolic-hotkeys.test.ts",
- "src/shared/mobile-push-contract.test.ts",
- "src/shared/mobile-relay-close-codes.test.ts",
- "src/shared/native-chat-agent-profiles.test.ts",
- "src/shared/native-chat-agent-support.test.ts",
- "src/shared/native-chat-background-task-row.test.ts",
- "src/shared/native-chat-streaming.test.ts",
- "src/shared/native-chat-subagent-summary.test.ts",
- "src/shared/native-chat-tool-attribution-allocation.test.ts",
- "src/shared/native-chat-turn-fold.test.ts",
- "src/shared/native-chat-turn-status.test.ts",
- "src/shared/nested-repo-telemetry.test.ts",
- "src/shared/network/server-share-address.test.ts",
- "src/shared/new-workspace/smart-workspace-url-source-results.test.ts",
- "src/shared/new-workspace/workspace-source.test.ts",
- "src/shared/omp-pi-semantic-title-preservation.test.ts",
- "src/shared/onboarding-tour-telemetry-events.test.ts",
- "src/shared/orchestration-timing-budgets.test.ts",
- "src/shared/osc-title-scan-tail-retention.test.ts",
- "src/shared/plugins/plugin-kill-list.test.ts",
- "src/shared/plugins/plugin-panel-message-budget-traversal.test.ts",
- "src/shared/powershell-native-argument.test.ts",
- "src/shared/pr-check-severity-order.test.ts",
- "src/shared/pr-comment-audience.test.ts",
- "src/shared/quick-open-filter.renderer-safety.test.ts",
- "src/shared/quick-open-listing-limits.test.ts",
- "src/shared/remote-foreground-evidence.test.ts",
- "src/shared/remote-pairing-address.test.ts",
- "src/shared/remote-rpc-content-budget.test.ts",
- "src/shared/remote-runtime-memory-limits.test.ts",
- "src/shared/remote-runtime-request-websocket.test.ts",
- "src/shared/remote-runtime-shared-control-retired-request-ids.test.ts",
- "src/shared/remote-runtime-shared-control-standing-intent.test.ts",
- "src/shared/ripgrep-process-availability.test.ts",
- "src/shared/rpc-contract/agent-launch-params.test.ts",
- "src/shared/runtime-client-export-parity.test.ts",
- "src/shared/runtime-workspace-file-owner.test.ts",
- "src/shared/setup-script-shebang.test.ts",
- "src/shared/skill-bundle-install-contract.test.ts",
- "src/shared/skill-delete-contract.test.ts",
- "src/shared/source-control-create-review-intent.test.ts",
- "src/shared/structured-agent-session-agent-status.test.ts",
- "src/shared/structured-agent-session-create.test.ts",
- "src/shared/structured-agent-session-reducer.test.ts",
- "src/shared/structured-agent-session-turn-timing.test.ts",
- "src/shared/terminal-composer-draft.test.ts",
- "src/shared/terminal-input.test.ts",
- "src/shared/terminal-line-height-settings.test.ts",
- "src/shared/terminal-osc-color-reply.test.ts",
- "src/shared/terminal-selection-gutter.test.ts",
- "src/shared/terminal-title-agent-type.test.ts",
- "src/shared/test-code-path.test.ts",
- "src/shared/ui-language.test.ts",
- "src/shared/updater-windows-signature-check.test.ts",
- "src/shared/windows-cmd-runner-delayed-launch.test.ts",
- "src/shared/workspace-session-tab-focus-schema.test.ts",
- "src/shared/workspace-session-terminal-schema.test.ts",
- "src/shared/worktree/archive-failure-blocking-capability.test.ts",
- "src/shared/worktree/base-ref.test.ts",
- "src/shared/worktree/removal-fence-error.test.ts",
- "src/shared/wsl-exec-mode-separator.test.ts",
- "tests/e2e/helpers/electron-launch-args.unit.test.ts",
- "tests/e2e/helpers/fake-agent-command-override.unit.test.ts",
- "tests/e2e/paced-terminal-typing.unit.test.ts",
- "tests/e2e/terminal-split-activation-latency-report.unit.test.ts",
- "tests/tools/omp-config-root-relay-shell.test.mjs",
- "tests/tools/windows-pty-native-capability-smoke/packaged-node-pty-capability-oracle.test.mjs"
- ],
- "durationMs": 851040
- },
- {
- "files": [
- "config/scripts/casting-code-quality.test.mjs",
- "config/scripts/check-changed-code-quality.test.mjs",
- "config/scripts/dev-channel-windows-workflow-contract.test.mjs",
- "config/scripts/dev-electron-bundle-cache.test.ts",
- "config/scripts/lag-probe-failures.test.mjs",
- "config/scripts/locale-repair-catalog-missing-leaves.test.mjs",
- "config/scripts/mobile-web-app-browser-pane-render.test.mjs",
- "config/scripts/mobile-web-app-files-render.test.mjs",
- "config/scripts/mobile-web-app-push-subsystem-closure.test.mjs",
- "config/scripts/mobile-web-app-session-render.test.mjs",
- "config/scripts/mobile-web-app-source-control-text-inputs.test.mjs",
- "config/scripts/mobile-web-bundle-packaging-workflow-contract.test.mjs",
- "config/scripts/oxlint-cli-invocation.test.mjs",
- "config/scripts/pr-e2e-pane-close-routing.test.mjs",
- "config/scripts/relay-asset-line-ending-pin.test.mjs",
- "config/scripts/release-cut-token-permissions.test.mjs",
- "config/scripts/release-e2e-dispatch-contract.test.mjs",
- "config/scripts/release-mac-build-workflow-dispatch.test.mjs",
- "config/scripts/run-terminal-scale-perf-report-gate.test.mjs",
- "config/scripts/skill-critical-guidance.test.mjs",
- "config/scripts/skill-update-roundtrip-workflow.test.mjs",
- "config/scripts/terminal-ime-e2e-workflow.test.mjs",
- "config/scripts/verify-linux-glibc-floor.test.mjs",
- "config/scripts/windows-pe-machine.test.mjs",
- "config/scripts/windows-pty-native-capability-workflow.test.mjs",
- "src/cli/args.test.ts",
- "src/cli/browser.test.ts",
- "src/cli/cli-version.test.ts",
- "src/cli/format.test.ts",
- "src/cli/host-selector-alternatives.test.ts",
- "src/cli/index-automation-schedule.test.ts",
- "src/cli/index-automation-source-context.test.ts",
- "src/cli/orchestration-structured-session-no-identity.test.ts",
- "src/cli/runtime/transport.test.ts",
- "src/cli/search-command-arguments.test.ts",
- "src/cli/serve-electron-flag-parity.test.ts",
- "src/cli/specs/orchestration.test.ts",
- "src/main/agent-hooks/managed-hook-local-filesystem.test.ts",
- "src/main/agent-hooks/server-ai-vault-liveness.test.ts",
- "src/main/agent-hooks/server-authority-evidence.test.ts",
- "src/main/agent-hooks/server-droid-normalization.test.ts",
- "src/main/agent-hooks/server-last-status-write.test.ts",
- "src/main/agent-hooks/server-omp-retired-ingress.test.ts",
- "src/main/agent-hooks/windows-hook-post-interpreter.test.ts",
- "src/main/ai-vault-search/session-search-cwd-key.test.ts",
- "src/main/ai-vault-search/session-search-hit-ranking.test.ts",
- "src/main/ai-vault-search/session-search-indexer.test.ts",
- "src/main/ai-vault-search/session-search-instance.test.ts",
- "src/main/ai-vault-search/session-search-scan-roots.test.ts",
- "src/main/ai-vault-search/session-search-snippet-marks.test.ts",
- "src/main/ai-vault-search/session-search-store-scope-catalog.test.ts",
- "src/main/ai-vault/local-log-tail-reader.test.ts",
- "src/main/ai-vault/remote-session-scanner-omp-subagents.test.ts",
- "src/main/ai-vault/remote-session-stream-lifecycle.test.ts",
- "src/main/ai-vault/session-scanner-background.test.ts",
- "src/main/ai-vault/session-scanner-claude-cwd-drift.test.ts",
- "src/main/ai-vault/session-scanner-claude-subagent-prune.test.ts",
- "src/main/ai-vault/session-scanner-claude-title.test.ts",
- "src/main/ai-vault/session-scanner-codex-workers.test.ts",
- "src/main/ai-vault/session-scanner-directory-reader.test.ts",
- "src/main/ai-vault/session-scanner-graph-parsers.test.ts",
- "src/main/ai-vault/session-scanner-jsonl-reader.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sources-wsl-stall.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-open.test.ts",
- "src/main/ai-vault/session-scanner-roots.test.ts",
- "src/main/ai-vault/session-scanner-service-search-roots.test.ts",
- "src/main/ai-vault/session-scanner-worker-client.test.ts",
- "src/main/automations/automation-ssh-readoption-migration.test.ts",
- "src/main/automations/dispatch-tokens.test.ts",
- "src/main/automations/external-automation-manager-cache.test.ts",
- "src/main/automations/retained-run-reconciliation.test.ts",
- "src/main/browser/agent-browser-orphan-sweep.test.ts",
- "src/main/browser/browser-client-page-reconciliation-adapters.test.ts",
- "src/main/browser/browser-client-page-renderer-lifecycle.electron.test.ts",
- "src/main/browser/browser-cookie-clear-store.test.ts",
- "src/main/browser/browser-cookie-import-plan-writes.test.ts",
- "src/main/browser/browser-cookie-import-route-partition-staging.test.ts",
- "src/main/browser/browser-guest-wheel-zoom-scroll.test.ts",
- "src/main/browser/browser-identity-mode-store.test.ts",
- "src/main/browser/browser-manager-grab-capture.test.ts",
- "src/main/browser/browser-manager-guest-visibility.test.ts",
- "src/main/browser/browser-network-tunnel-session.test.ts",
- "src/main/browser/browser-route-webrtc-egress.electron.test.ts",
- "src/main/browser/browser-screencast-snapshot-scaling.test.ts",
- "src/main/browser/browser-session-registry-import-boundary.test.ts",
- "src/main/browser/browser-session-registry.persistence.test.ts",
- "src/main/browser/browser-webauthn-access.test.ts",
- "src/main/browser/cdp-ws-proxy.test.ts",
- "src/main/browser/chromium-cookie-snapshot.test.ts",
- "src/main/browser/doc-preview-download-block-notice.test.ts",
- "src/main/browser/electron-debugger-lease.test.ts",
- "src/main/claude-accounts/claude-account-service-login-process.test.ts",
- "src/main/claude-accounts/claude-windows-interactive-login.test.ts",
- "src/main/claude-accounts/keychain-config-directory-aliases.test.ts",
- "src/main/claude-accounts/runtime-auth-service-launch-refresh.test.ts",
- "src/main/claude-accounts/windows-command-invocation.test.ts",
- "src/main/claude-usage/scanner-scan.test.ts",
- "src/main/claude-usage/store.test.ts",
- "src/main/claude/claude-agent-sdk-control-requests.test.ts",
- "src/main/claude/claude-agent-sdk-process-spawn.test.ts",
- "src/main/claude/claude-history-window-source-budget.test.ts",
- "src/main/claude/claude-structured-dispatch.test.ts",
- "src/main/claude/claude-structured-effort-reporting.test.ts",
- "src/main/claude/claude-structured-journal-translation-background-tasks.test.ts",
- "src/main/claude/claude-structured-session-recovery.test.ts",
- "src/main/claude/claude-subagent-roster.test.ts",
- "src/main/claude/claude-subagent-task-frames.test.ts",
- "src/main/claude/claude-transcript-branch-graph.test.ts",
- "src/main/claude/statusline-script.test.ts",
- "src/main/cli/appimage-registration-lock.test.ts",
- "src/main/cli/cli-installer-appimage-ownership.test.ts",
- "src/main/cli/cli-privileged-processes.test.ts",
- "src/main/cli/windows-launcher-asset.test.ts",
- "src/main/cli/wsl-cli-powershell-boundary.test.ts",
- "src/main/codex-accounts/codex-credential-absence-grace.test.ts",
- "src/main/codex-accounts/codex-login-auth-url.test.ts",
- "src/main/codex-accounts/fs-utils.test.ts",
- "src/main/codex-accounts/legacy-wsl-runtime-auth-drain-rollback-script.test.ts",
- "src/main/codex-accounts/runtime-home-system-resource-materialization.test.ts",
- "src/main/codex-accounts/service-login-process-teardown.test.ts",
- "src/main/codex-accounts/service-reauthenticate-activation.test.ts",
- "src/main/codex-accounts/service-system-default-identity.test.ts",
- "src/main/codex-accounts/service.test.ts",
- "src/main/codex-usage/scanner-large-directory.test.ts",
- "src/main/codex-usage/scanner-paths.test.ts",
- "src/main/codex/codex-ai-vault-session-resume.test.ts",
- "src/main/codex/codex-app-server-capability-cache.test.ts",
- "src/main/codex/codex-app-server-process-teardown.test.ts",
- "src/main/codex/codex-background-task-tracker.test.ts",
- "src/main/codex/codex-index-heal-binary-contract.test.ts",
- "src/main/codex/codex-session-backfill.test.ts",
- "src/main/codex/codex-session-migration-scheduler.test.ts",
- "src/main/codex/codex-session-resume-wrong-account.test.ts",
- "src/main/codex/codex-session-source-home.test.ts",
- "src/main/codex/codex-stale-pane-accounts.test.ts",
- "src/main/codex/codex-structured-permission-policy.test.ts",
- "src/main/codex/codex-structured-session-close.test.ts",
- "src/main/codex/codex-structured-thread-open.test.ts",
- "src/main/codex/codex-trust-config-rollback.test.ts",
- "src/main/codex/codex-trust-grant-ledger.test.ts",
- "src/main/codex/config-plugin-registration-promotion.test.ts",
- "src/main/codex/hook-service-runtime-trust-repair.test.ts",
- "src/main/computer/desktop-script-provider-client.test.ts",
- "src/main/computer/macos-native-provider-process-reaping.test.ts",
- "src/main/crash-reporting/gpu-crash-fallback-decision.test.ts",
- "src/main/crash-reporting/process-gone-classification.test.ts",
- "src/main/daemon/daemon-audit-eligibility-event.test.ts",
- "src/main/daemon/daemon-client-notify-settlement.test.ts",
- "src/main/daemon/daemon-entry.test.ts",
- "src/main/daemon/daemon-folder-access-mismatch.test.ts",
- "src/main/daemon/daemon-health-endpoint-entry.test.ts",
- "src/main/daemon/daemon-init-replacement-reporting.test.ts",
- "src/main/daemon/daemon-main.test.ts",
- "src/main/daemon/daemon-ready-identity.test.ts",
- "src/main/daemon/daemon-scope-death-watch.test.ts",
- "src/main/daemon/daemon-self-retirement-respawn.test.ts",
- "src/main/daemon/daemon-server-async-spawn-cancellation.test.ts",
- "src/main/daemon/daemon-shutdown-final-checkpoint-caller-deadline.test.ts",
- "src/main/daemon/daemon-stream-droppable-membership.test.ts",
- "src/main/daemon/history-manager-disabled-sessions-leak.test.ts",
- "src/main/daemon/history-reader-memory.test.ts",
- "src/main/daemon/pty-subprocess-env-retention.test.ts",
- "src/main/daemon/pty-subprocess-io-failure-cleanup.test.ts",
- "src/main/daemon/pty-subprocess-managed-agent-env.test.ts",
- "src/main/daemon/pty-subprocess-windows-shell-launch.test.ts",
- "src/main/daemon/startup-device-attributes-responder.test.ts",
- "src/main/daemon/terminal-history-restorable-retention.test.ts",
- "src/main/daemon/terminal-shell-lifecycle-scanner.test.ts",
- "src/main/daemon/terminal-shell-recovery-barrier.test.ts",
- "src/main/durable-file-write.test.ts",
- "src/main/emulator/backends/ios-emulator-backend.test.ts",
- "src/main/emulator/mjpeg-frame-stream.test.ts",
- "src/main/emulator/scrcpy-video-registry.test.ts",
- "src/main/folder-upgrade-worktree-path.test.ts",
- "src/main/ghostty/parser.test.ts",
- "src/main/git/command-runner/wsl-host-failure.test.ts",
- "src/main/git/hosted-remote-url.test.ts",
- "src/main/git/porcelain-v1-records.test.ts",
- "src/main/git/remote-url-probe.test.ts",
- "src/main/git/remote.test.ts",
- "src/main/git/repo-default-remote.test.ts",
- "src/main/git/runner-wsl-gh-fallback.test.ts",
- "src/main/git/runner-wsl-linked-gitdir-timeout.test.ts",
- "src/main/git/status-diff.test.ts",
- "src/main/git/status-porcelain-parser.test.ts",
- "src/main/git/status-symlink-probe-budget.test.ts",
- "src/main/git/status-upstream-negative-cache.test.ts",
- "src/main/git/worktree-add-local-base-refresh.test.ts",
- "src/main/git/worktree-add-timeout-override.test.ts",
- "src/main/git/worktree-create-admission-tier.test.ts",
- "src/main/git/worktree-git-capabilities.test.ts",
- "src/main/git/worktree-mutation-route-invalidation.test.ts",
- "src/main/git/worktree-porcelain-parsing.test.ts",
- "src/main/git/worktree-scan-cache-annotation-reuse.test.ts",
- "src/main/git/worktree-scan-cache-sharing.test.ts",
- "src/main/github/auth-diagnose.test.ts",
- "src/main/github/client-create-pr.test.ts",
- "src/main/github/client-pr-check-details.test.ts",
- "src/main/github/client-pr-conflict-summary.test.ts",
- "src/main/github/client-pr-linked-lookup.test.ts",
- "src/main/github/client-ssh-provider-execution-boundary.test.ts",
- "src/main/github/client-stack-merge-guard.test.ts",
- "src/main/github/comment-reactions.test.ts",
- "src/main/github/conflict-summary.test.ts",
- "src/main/github/github-pr-stack.test.ts",
- "src/main/github/pr-refresh-coordinator-refresh-events.test.ts",
- "src/main/github/pr-refresh-coordinator-visible-follow-up.test.ts",
- "src/main/github/pr-start-point-compare-base.test.ts",
- "src/main/github/project-view.test.ts",
- "src/main/github/project-view/project-field-mutations.test.ts",
- "src/main/github/project-view/repository-field-options.test.ts",
- "src/main/github/rate-limit.test.ts",
- "src/main/github/work-item-search-isolation.test.ts",
- "src/main/gitlab/gl-utils.test.ts",
- "src/main/hook-archive-timeout-observation.test.ts",
- "src/main/host/electron-secret-store.test.ts",
- "src/main/ipc/crash-reporting-renderer-error-report-attribution.test.ts",
- "src/main/ipc/created-worktree-reconciliation.test.ts",
- "src/main/ipc/dashboard-popout.test.ts",
- "src/main/ipc/desktop-renderer-runtime-capabilities.test.ts",
- "src/main/ipc/filesystem-watcher-canonical-root-paths.test.ts",
- "src/main/ipc/filesystem-watcher-dormant-rearm.test.ts",
- "src/main/ipc/filesystem-watcher-event-batch.test.ts",
- "src/main/ipc/filesystem-watcher-large-batch.test.ts",
- "src/main/ipc/github-repo-access-guards.test.ts",
- "src/main/ipc/gitlab.test.ts",
- "src/main/ipc/hosted-review.test.ts",
- "src/main/ipc/local-network-connection-test.test.ts",
- "src/main/ipc/notifications-mobile-fanout.test.ts",
- "src/main/ipc/orca-profile-org-members-handlers.test.ts",
- "src/main/ipc/parcel-watcher-entry-path.test.ts",
- "src/main/ipc/plugins.test.ts",
- "src/main/ipc/preflight-remote-ssh.test.ts",
- "src/main/ipc/preflight-wsl-agent-detection.test.ts",
- "src/main/ipc/pty-daemon-ssh-lease-lifecycle.test.ts",
- "src/main/ipc/pty-listener-teardown-and-orphans.test.ts",
- "src/main/ipc/pty-pane-reservation-settlement.test.ts",
- "src/main/ipc/pty-pending-data-drain-queue.test.ts",
- "src/main/ipc/pty-pending-projection-admissions.test.ts",
- "src/main/ipc/pty-persisted-incarnation-repair.test.ts",
- "src/main/ipc/pty-ssh-stop-verdict.test.ts",
- "src/main/ipc/pty-startup-barrier-and-listing.test.ts",
- "src/main/ipc/pty/daemon-late-exit.test.ts",
- "src/main/ipc/pty/ipc/spawn-reattach-size-cache.test.ts",
- "src/main/ipc/rate-limits.test.ts",
- "src/main/ipc/remote-watcher-event-batch.test.ts",
- "src/main/ipc/runtime-environment-diagnostics-broadcast.test.ts",
- "src/main/ipc/runtime-environment-status-recovery.test.ts",
- "src/main/ipc/runtime-environment-support-routing.test.ts",
- "src/main/ipc/skill-cloud-install-ipc-schemas.test.ts",
- "src/main/ipc/ssh-handler-reregistration.test.ts",
- "src/main/ipc/ssh-host-partition-session-export.test.ts",
- "src/main/ipc/ssh-pty-consumer-identity.test.ts",
- "src/main/ipc/ssh-relay-reset-resume.test.ts",
- "src/main/ipc/ssh.test.ts",
- "src/main/ipc/usage-provider-handlers.test.ts",
- "src/main/ipc/watcher-removal-gate.test.ts",
- "src/main/ipc/workspace-cleanup-execution-host-routing.test.ts",
- "src/main/ipc/workspace-cleanup-local-git-routing.test.ts",
- "src/main/ipc/worktree-git-common-watch.test.ts",
- "src/main/ipc/worktree-push-target-cleanup.test.ts",
- "src/main/ipc/worktree-push-target-refspec-real-git.test.ts",
- "src/main/ipc/worktrees-delete-pty-teardown.test.ts",
- "src/main/ipc/worktrees-remove-archive-hooks.test.ts",
- "src/main/ipc/worktrees-ssh-repo-owner-resolution.test.ts",
- "src/main/jira/adf-markdown.test.ts",
- "src/main/jira/attachment-images.test.ts",
- "src/main/kimi/hook-service.test.ts",
- "src/main/linear/issue-context-client.test.ts",
- "src/main/memory/collector.test.ts",
- "src/main/memory/host-memory.test.ts",
- "src/main/minimax/minimax-api-key-store.test.ts",
- "src/main/muse-usage/snapshot-rollups.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-empty-delta-retention.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-acquisition-options.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-adapter.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-operation-guard.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-journal-handles.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-launch-env.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-launch-send-after-create.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-lease-renewer.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-recovery-exits.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-reconcile.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-status-ownership.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-surface-lifetime.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-unexpected-exit.test.ts",
- "src/main/native-chat/agent-session-wire/structured-rewind-journal-body.test.ts",
- "src/main/native-chat/agent-session-wire/structured-tui-transcript-catchup.test.ts",
- "src/main/native-chat/claude-structured-managed-account-support.test.ts",
- "src/main/native-chat/transcript-watch-resolve-poll.test.ts",
- "src/main/native-chat/transcript-watch-wsl-exact-path.test.ts",
- "src/main/native-chat/transcript-window-tool-attribution.test.ts",
- "src/main/network/electron-proxy-request-guard.test.ts",
- "src/main/network/proxy-settings.test.ts",
- "src/main/notifications/announced-notification-registry.test.ts",
- "src/main/observability/diagnostic-upload-http.test.ts",
- "src/main/observability/tracer.test.ts",
- "src/main/opencode-usage/scanner-wsl-gate.test.ts",
- "src/main/opencode/opencode-data-directory.test.ts",
- "src/main/orca-profiles/profile-cloud-client.test.ts",
- "src/main/orca-profiles/profile-cloud-org-members-client.test.ts",
- "src/main/orca-profiles/profile-cloud-org-members-service.test.ts",
- "src/main/orca-profiles/profile-cloud-refresh-replay-guard.test.ts",
- "src/main/orcad/electron-sidecar-method-routing.test.ts",
- "src/main/orcad/orcad-health.test.ts",
- "src/main/persistence-deregistered-repo-residue.test.ts",
- "src/main/persistence-folder-workspace-notes.test.ts",
- "src/main/persistence-layout-binding-recovery.test.ts",
- "src/main/persistence-proxy-secret-recovery.test.ts",
- "src/main/persistence-repo-lifecycle.test.ts",
- "src/main/persistence-ssh-remote-pty-leases.test.ts",
- "src/main/persistence-worktree-lineage-and-backups.test.ts",
- "src/main/persistence/leasing-ssh-ptys/ssh-pty-binding-cleanup.test.ts",
- "src/main/persistence/loading-store/normalize-loaded-global-settings.test.ts",
- "src/main/persistence/loading-store/persisted-state-redundancy.test.ts",
- "src/main/persistence/runtime-authored-workspace-session-fields.test.ts",
- "src/main/persistence/tracking-repos/local-worktree-metadata-batch-pruning.bench.test.ts",
- "src/main/pi/omp-session-status-owner.test.ts",
- "src/main/plugins/plugin-atomic-file-write.test.ts",
- "src/main/plugins/plugin-dev-watcher.test.ts",
- "src/main/plugins/plugin-install.test.ts",
- "src/main/plugins/plugin-marketplace-installer.test.ts",
- "src/main/plugins/plugin-private-marketplace.integration.test.ts",
- "src/main/ports/port-scan-command-client.test.ts",
- "src/main/powershell-osc133-bootstrap-windows-clm.test.ts",
- "src/main/protected-secret-persistence.test.ts",
- "src/main/providers/execution-host-provider-dispatch.test.ts",
- "src/main/providers/local-pty-provider-foreground-process.test.ts",
- "src/main/providers/pty-default-cwd.test.ts",
- "src/main/providers/ssh-filesystem-provider-range.test.ts",
- "src/main/providers/ssh-filesystem-watch-notifications.test.ts",
- "src/main/providers/ssh-git-provider-diff.test.ts",
- "src/main/providers/ssh-git-provider-worktree.test.ts",
- "src/main/providers/ssh-pty-live-source-restore-respawn.test.ts",
- "src/main/providers/ssh-pty-provider-exit-race.test.ts",
- "src/main/providers/ssh-pty-write.test.ts",
- "src/main/providers/windows-powershell.test.ts",
- "src/main/providers/working-directory-validation-retention.test.ts",
- "src/main/providers/working-directory-validation.test.ts",
- "src/main/proxy-guarded-fetch-call-site-audit.test.ts",
- "src/main/pty-descendant-termination.test.ts",
- "src/main/pty/build-mode-env.test.ts",
- "src/main/rate-limits/antigravity-usage-mirror.test.ts",
- "src/main/rate-limits/claude-fetcher-fable-usage.test.ts",
- "src/main/rate-limits/claude-oauth-usage-error.test.ts",
- "src/main/rate-limits/codex-pty-rate-limit-probe.test.ts",
- "src/main/rate-limits/grok-auth.test.ts",
- "src/main/rate-limits/service-minimax-usage.test.ts",
- "src/main/repo-git-remote-identity-enrichment.test.ts",
- "src/main/runtime/acknowledged-terminal-tab-retirement.test.ts",
- "src/main/runtime/agent-prompt-submission-verification.test.ts",
- "src/main/runtime/agent-session-eviction-settlement-latch.test.ts",
- "src/main/runtime/agent-session-orphan-child-reaper.test.ts",
- "src/main/runtime/agent-session-record-conversation-name.test.ts",
- "src/main/runtime/agent-session-record-unsupported-schema.test.ts",
- "src/main/runtime/agent-terminal-startup-prompt.test.ts",
- "src/main/runtime/browser-host-page-placement.test.ts",
- "src/main/runtime/browser-screencast-driver-scope.test.ts",
- "src/main/runtime/client-hosted-browser-page-persistence.test.ts",
- "src/main/runtime/client-session-tab-selection.test.ts",
- "src/main/runtime/graph-sync-deletion-fence.test.ts",
- "src/main/runtime/headless-seed-ownership.test.ts",
- "src/main/runtime/headless-terminal-query-reply-policy.test.ts",
- "src/main/runtime/linear-save-issue.test.ts",
- "src/main/runtime/orca-runtime-files-terminal-link-host-translation.test.ts",
- "src/main/runtime/orca-runtime-git-branch-diff.test.ts",
- "src/main/runtime/orca-runtime-mobile-close-preserved-resurrection.test.ts",
- "src/main/runtime/orca-runtime-provider-reattach-launch-identity.test.ts",
- "src/main/runtime/orca-runtime-structured-tui-tab-binding.test.ts",
- "src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts",
- "src/main/runtime/orca-runtime-terminal-split-authority.test.ts",
- "src/main/runtime/orchestration-codex-completion-title.test.ts",
- "src/main/runtime/orchestration-codex-real-pty.integration.test.ts",
- "src/main/runtime/orchestration-dispatch-mailbox-delivery.test.ts",
- "src/main/runtime/orchestration-mailbox-crash-recovery.test.ts",
- "src/main/runtime/orchestration-mailbox-pointer-cli-command.test.ts",
- "src/main/runtime/orchestration/db-stopping-worker-task-guard.test.ts",
- "src/main/runtime/orchestration/db/dispatch-row-writer-boundary.test.ts",
- "src/main/runtime/orchestration/db/federation/federated-dispatch-observation-fence.test.ts",
- "src/main/runtime/orchestration/db/lifecycle-rejection-marker.test.ts",
- "src/main/runtime/orchestration/federation-acknowledgment-integrity.test.ts",
- "src/main/runtime/orchestration/federation-terminal-recovery.test.ts",
- "src/main/runtime/orchestration/orchestration-run-delivery-db.test.ts",
- "src/main/runtime/orchestration/r1-identity-migration.test.ts",
- "src/main/runtime/orchestration/settled-question-threads-migration.test.ts",
- "src/main/runtime/orchestration/worker-provider-session.test.ts",
- "src/main/runtime/orchestration/worker-transcript-payload.test.ts",
- "src/main/runtime/orchestration/worker-transcript-read.test.ts",
- "src/main/runtime/pty-exit-per-pty-map-reaper-ratchet.test.ts",
- "src/main/runtime/pty-inventory-lifecycle-admission.test.ts",
- "src/main/runtime/push/push-outcome-counters.test.ts",
- "src/main/runtime/push/push-policy-pipeline.integration.test.ts",
- "src/main/runtime/push/push-unpair-persistence.test.ts",
- "src/main/runtime/relay/mobile-relay-e2ee.integration.test.ts",
- "src/main/runtime/relay/relay-control-client.test.ts",
- "src/main/runtime/remote-browser-screencast-frame-admission.test.ts",
- "src/main/runtime/rpc/dispatcher-request-parsing.test.ts",
- "src/main/runtime/rpc/e2ee-channel-v2.test.ts",
- "src/main/runtime/rpc/e2ee-integration.test.ts",
- "src/main/runtime/rpc/methods/agent-hooks.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-floating-workspace.test.ts",
- "src/main/runtime/rpc/methods/browser-client-page-metadata.test.ts",
- "src/main/runtime/rpc/methods/browser-identity-rpc.test.ts",
- "src/main/runtime/rpc/methods/computer.test.ts",
- "src/main/runtime/rpc/methods/files-list-all-page-size.test.ts",
- "src/main/runtime/rpc/methods/git.test.ts",
- "src/main/runtime/rpc/methods/notification-reconnect-cooldown.test.ts",
- "src/main/runtime/rpc/methods/orchestration-structured-worker-abandon.test.ts",
- "src/main/runtime/rpc/methods/orchestration-structured-worker-redrive.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-start-mode.test.ts",
- "src/main/runtime/rpc/methods/orchestration-worker-start-receipt-wording.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send-invalid-type.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send-receipt-plumbing.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/manual-dispatch-release.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-archive.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-capability.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-liveness-verdict.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-terminal-custody-at-creation.test.ts",
- "src/main/runtime/rpc/methods/session-tab-agent-capability-mutations.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-unsubscribe.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-adoption-replay.test.ts",
- "src/main/runtime/rpc/methods/terminal-manifest-characterization.test.ts",
- "src/main/runtime/rpc/methods/worktree-rm-host-qualification.test.ts",
- "src/main/runtime/rpc/mobile-auth-acl-critical-path.test.ts",
- "src/main/runtime/rpc/orchestration-commit-notify-characterization.test.ts",
- "src/main/runtime/rpc/orchestration-current-authority-precedence.test.ts",
- "src/main/runtime/rpc/orchestration-mutation-ledger.test.ts",
- "src/main/runtime/rpc/remote-runtime-server-heartbeat-missed-probe-tolerance.test.ts",
- "src/main/runtime/rpc/runtime-close-attribution.test.ts",
- "src/main/runtime/rpc/terminal-geometry-stale-handle.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-desktop-resize-routing.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-initial-snapshot-buffering.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-subscribe-slot-recovery.test.ts",
- "src/main/runtime/rpc/terminal-output-frame-chunks-equivalence.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-relay-drop-lease-survival.test.ts",
- "src/main/runtime/rpc/worktree-catalog-snapshot.test.ts",
- "src/main/runtime/rpc/ws-transport-static-web.test.ts",
- "src/main/runtime/rpc/ws-transport-transient-packet-loss.test.ts",
- "src/main/runtime/rpc/ws-transport.test.ts",
- "src/main/runtime/runtime-browser-client-page-creation.test.ts",
- "src/main/runtime/runtime-browser-client-page-restored-recovery.test.ts",
- "src/main/runtime/runtime-browser-page-registry.test.ts",
- "src/main/runtime/runtime-client-settings-minimax-projection.test.ts",
- "src/main/runtime/runtime-file-target-connection-field-ratchet.test.ts",
- "src/main/runtime/runtime-git-sync-commands.test.ts",
- "src/main/runtime/runtime-managed-worktree-metadata-sweep.test.ts",
- "src/main/runtime/runtime-metadata-ownership-watch.test.ts",
- "src/main/runtime/runtime-repository-issue-command.test.ts",
- "src/main/runtime/runtime-rpc-mobile-native-chat-settings.test.ts",
- "src/main/runtime/runtime-rpc-orchestration-db-migration.test.ts",
- "src/main/runtime/runtime-rpc-relay-pairing.test.ts",
- "src/main/runtime/settled-worker-process-replacement.test.ts",
- "src/main/runtime/structured-agent-session-rollback-compatibility.test.ts",
- "src/main/runtime/structured-conversation-tab-replacement.test.ts",
- "src/main/runtime/structured-worker-hook-attestation.test.ts",
- "src/main/runtime/structured-worker-identity.test.ts",
- "src/main/runtime/terminal-identity-probe.test.ts",
- "src/main/runtime/terminal-list-surface-lost-orphan.test.ts",
- "src/main/runtime/terminal-model-query-authority.test.ts",
- "src/main/runtime/terminal-retirement-proof-publication.test.ts",
- "src/main/runtime/terminal-send-stale-leaf-liveness.test.ts",
- "src/main/runtime/unreadable-secret-store-preservation.win32.test.ts",
- "src/main/runtime/wait-blocked-check-state.test.ts",
- "src/main/serve-update-handoff.app-environment.test.ts",
- "src/main/skills/claude-plugin-skill-sources-wsl.test.ts",
- "src/main/skills/skill-bundle-observability-summary.test.ts",
- "src/main/skills/skill-delete/plan.test.ts",
- "src/main/skills/skill-delete/recovery.test.ts",
- "src/main/skills/skill-discovery-source-filter.test.ts",
- "src/main/skills/skill-package-creation.test.ts",
- "src/main/skills/skill-package-tar.test.ts",
- "src/main/skills/skill-root-file-walk.test.ts",
- "src/main/skills/skill-upload-process-restart.integration.test.ts",
- "src/main/source-control/forge-provider.test.ts",
- "src/main/source-control/hosted-review-base-ref-suffix.test.ts",
- "src/main/source-control/hosted-review-branch-cache.test.ts",
- "src/main/source-control/hosted-review.test.ts",
- "src/main/speech/stt-service.test.ts",
- "src/main/ssh/orcad-remote-launch.test.ts",
- "src/main/ssh/orcad-update-plan.test.ts",
- "src/main/ssh/removed-ssh-target-tombstone-retention.test.ts",
- "src/main/ssh/sftp-upload.test.ts",
- "src/main/ssh/ssh-channel-multiplexer-settlement.test.ts",
- "src/main/ssh/ssh-connection-generation.test.ts",
- "src/main/ssh/ssh-connection-manager-registry.test.ts",
- "src/main/ssh/ssh-connection-store.test.ts",
- "src/main/ssh/ssh-file-transfer-abort.test.ts",
- "src/main/ssh/ssh-git-response-stream-reader.test.ts",
- "src/main/ssh/ssh-multiplexer-writer-retention.test.ts",
- "src/main/ssh/ssh-orphan-sweep-pane-state-verdicts.test.ts",
- "src/main/ssh/ssh-relay-session-agent-hooks.integration.test.ts",
- "src/main/ssh/ssh-security-key-identity.test.ts",
- "src/main/ssh/ssh-system-transport.integration.test.ts",
- "src/main/star-nag/service-force-show-races.test.ts",
- "src/main/star-nag/service-threshold-prompt.test.ts",
- "src/main/startup/browser-process-user-agent-ordering.test.ts",
- "src/main/startup/os-opened-markdown-delivery.test.ts",
- "src/main/startup/os-opened-markdown-wiring.test.ts",
- "src/main/startup/startup-diagnostics.test.ts",
- "src/main/startup/windows-desktop-shell-path-startup.test.ts",
- "src/main/stats/stats-title-detection-independence.test.ts",
- "src/main/telemetry/cohort-classifier.test.ts",
- "src/main/telemetry/onboarding-feature-setup-validator.test.ts",
- "src/main/text-generation/commit-message-agent-environment.test.ts",
- "src/main/text-generation/commit-message-text-generation-branch-name.test.ts",
- "src/main/text-generation/commit-message-text-generation-linked-issue.test.ts",
- "src/main/text-generation/commit-message-text-generation-settings.test.ts",
- "src/main/tray/tray-dev-badge.test.ts",
- "src/main/updater-linux-package-recovery-actions.test.ts",
- "src/main/updater-release-build-cache.test.ts",
- "src/main/updater-release-builds.test.ts",
- "src/main/updater.build-channel-selection.test.ts",
- "src/main/updater.check-failure.test.ts",
- "src/main/updater.quit-and-install.test.ts",
- "src/main/win32-utils.test.ts",
- "src/main/window/clipboard-remote-file-staging-fs.test.ts",
- "src/main/window/createMainWindow-recovery-reload-watchdog.test.ts",
- "src/main/window/createMainWindow-terminal-focus-shortcuts.test.ts",
- "src/main/window/createMainWindow.test.ts",
- "src/main/window/editable-context-menu.test.ts",
- "src/main/window/renderer-document-navigation.test.ts",
- "src/main/window/renderer-publication-throttle.test.ts",
- "src/main/window/window-close-decision.test.ts",
- "src/main/workspace-snapshot-pruning.bench.test.ts",
- "src/main/worktree-create-preparation-cancellation.test.ts",
- "src/main/worktree-removal-authority.test.ts",
- "src/main/worktree-retirement-backfill-stall.test.ts",
- "src/main/worktree-retirement-namespace.test.ts",
- "src/main/wsl-distro-list-output.test.ts",
- "src/main/wsl-unc-delete-symlink-repro.test.ts",
- "src/main/wsl/wsl-runner.wsl.test.ts",
- "src/main/wsl/wsl-w1-w3-contract.test.ts",
- "src/preload/browser-client-page-renderer-requests.test.ts",
- "src/relay/dispatcher.test.ts",
- "src/relay/fs-path-metadata-symlink-concurrency.test.ts",
- "src/relay/git-handler-branch-diff.test.ts",
- "src/relay/git-handler-remote-sync.test.ts",
- "src/relay/git-handler-worktree-paths.test.ts",
- "src/relay/git-handler-worktree-provisioning.test.ts",
- "src/relay/git-working-file-read.test.ts",
- "src/relay/hermes-run-history.test.ts",
- "src/relay/integration.test.ts",
- "src/relay/pty-handler-output-drain-differential.test.ts",
- "src/relay/pty-shell-utils.test.ts",
- "src/relay/pty-source-credit-scheduler.test.ts",
- "src/relay/relay-bundled-ripgrep.test.ts",
- "src/relay/relay-command-env.test.ts",
- "src/relay/relay-filesystem-watch-registry.test.ts",
- "src/relay/relay-pty-source-recovery-window.test.ts",
- "src/relay/relay-pty-source-send-scheduler.test.ts",
- "src/relay/relay-pty-source-superseded-activation.test.ts",
- "src/relay/remote-cli-stdin.test.ts",
- "src/relay/subprocess.test.ts",
- "src/renderer/src/app-shell/reconcile-hydrated-workspace-tab-models.test.ts",
- "src/renderer/src/app-shell/workspace-view-cross-client-sync.test.tsx",
- "src/renderer/src/components/NewWorkspaceComposerCard.start-from.test.tsx",
- "src/renderer/src/components/StarNagCard.test.tsx",
- "src/renderer/src/components/activity/activity-portal-readiness-subscription-churn.react185.test.tsx",
- "src/renderer/src/components/activity/activity-thread-grouping.search-cache.test.ts",
- "src/renderer/src/components/activity/event-time-clock-refresh.test.tsx",
- "src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsx",
- "src/renderer/src/components/artifacts/ArtifactCollection.test.tsx",
- "src/renderer/src/components/automations/AutomationDetail.host.test.tsx",
- "src/renderer/src/components/automations/AutomationListLocalRows.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.strict-mode-save-visibility.test.tsx",
- "src/renderer/src/components/automations/AutomationsPageBreadcrumb.test.tsx",
- "src/renderer/src/components/automations/ExternalAutomationManagers.test.tsx",
- "src/renderer/src/components/automations/automation-create-destination.test.ts",
- "src/renderer/src/components/automations/automation-host-catalog-order.test.ts",
- "src/renderer/src/components/automations/automation-host-filter-resolution.test.ts",
- "src/renderer/src/components/automations/automation-host-invalidation.test.ts",
- "src/renderer/src/components/automations/automation-host-scheduler.test.ts",
- "src/renderer/src/components/automations/automation-list-focus-recovery.test.ts",
- "src/renderer/src/components/automations/automation-list-search.test.ts",
- "src/renderer/src/components/automations/automation-write-invalidation.test.ts",
- "src/renderer/src/components/automations/external-automation-scope-gating.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPane.render-ipc.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-detected-browsers-summary.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-page-zoom-indicator.test.tsx",
- "src/renderer/src/components/browser-pane/browser-download-destination-toast.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/browser-page-url-display.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-paintability.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-zoom.test.ts",
- "src/renderer/src/components/browser-pane/navigate/browser-reload-action.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/use-remote-browser-page-navigation.test.ts",
- "src/renderer/src/components/contextual-tours/contextual-tour-step-actions.test.ts",
- "src/renderer/src/components/crash-report/crash-report-submit-notice.test.ts",
- "src/renderer/src/components/dashboard-popout/preview-terminal-ime-bridge-kitty-bytes.test.ts",
- "src/renderer/src/components/dashboard/dashboard-card-context.test.ts",
- "src/renderer/src/components/dashboard/use-agent-row-conversation-name.test.ts",
- "src/renderer/src/components/dashboard/useRetainedAgents.test.ts",
- "src/renderer/src/components/dictation/DictationIndicator.localization.test.ts",
- "src/renderer/src/components/dictation/dictation-final-segments.test.ts",
- "src/renderer/src/components/diff-comments/DiffCommentCard.resize.test.tsx",
- "src/renderer/src/components/diff-comments/diff-comment-popover-position.test.ts",
- "src/renderer/src/components/diff-comments/diff-comment-range-drag.test.ts",
- "src/renderer/src/components/editor/CheckRunCopyButton.test.tsx",
- "src/renderer/src/components/editor/EditorPanelMarkdownActionsMenu.test.tsx",
- "src/renderer/src/components/editor/MarkdownPreview.toc-visibility-gate.test.tsx",
- "src/renderer/src/components/editor/closed-editor-model-lifetime.test.ts",
- "src/renderer/src/components/editor/combined-diff-on-demand-load.test.ts",
- "src/renderer/src/components/editor/combined-diff/browse-files/use-combined-diff-file-tree-resize.test.tsx",
- "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-section-connection.test.ts",
- "src/renderer/src/components/editor/combined-diff/resolve-changes/combined-diff-entries.test.ts",
- "src/renderer/src/components/editor/details-markdown-html.test.ts",
- "src/renderer/src/components/editor/diff-editor-hide-unchanged-options.test.ts",
- "src/renderer/src/components/editor/editor-panel-draft-selector.test.ts",
- "src/renderer/src/components/editor/editor-restored-tab-conflict-scan.test.ts",
- "src/renderer/src/components/editor/ipynb-parse.test.ts",
- "src/renderer/src/components/editor/large-diff-render-limit.test.ts",
- "src/renderer/src/components/editor/markdown-doc-links.test.ts",
- "src/renderer/src/components/editor/markdown-preview-annotation-shortcut.test.ts",
- "src/renderer/src/components/editor/markdown-preview-controls.test.ts",
- "src/renderer/src/components/editor/markdown-preview-links.test.ts",
- "src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts",
- "src/renderer/src/components/editor/markdown-toc-collapse-state.test.ts",
- "src/renderer/src/components/editor/monaco-reveal-range.test.ts",
- "src/renderer/src/components/editor/pending-editor-focus-request.test.ts",
- "src/renderer/src/components/editor/position-stable-node-view-update.test.ts",
- "src/renderer/src/components/editor/rich-markdown-editor-config.test.ts",
- "src/renderer/src/components/editor/rich-markdown-lowlight.test.ts",
- "src/renderer/src/components/editor/rich-markdown-review-rail-benchmark.test.ts",
- "src/renderer/src/components/editor/rich-markdown-table-actions.test.ts",
- "src/renderer/src/components/editor/useEditorCmdSaveRequest.test.tsx",
- "src/renderer/src/components/editor/useEditorPanelExternalContentEvents.test.tsx",
- "src/renderer/src/components/editor/useEditorPanelFileLoadRetry.test.tsx",
- "src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx",
- "src/renderer/src/components/editor/useRichMarkdownEditorInstance.integration.test.tsx",
- "src/renderer/src/components/emulator-pane/emulator-screen-stream-content.test.tsx",
- "src/renderer/src/components/feature-interaction-writer-boundaries.test.ts",
- "src/renderer/src/components/feature-tips/CmdJPaletteTipDialog.test.tsx",
- "src/renderer/src/components/feature-wall/KeepAwakeCard.test.tsx",
- "src/renderer/src/components/feature-wall/feature-wall-rail-navigation.test.ts",
- "src/renderer/src/components/feature-wall/use-feature-wall-tour-telemetry.test.ts",
- "src/renderer/src/components/floating-terminal/FloatingTerminalOrchestrationDialog.freshness.test.tsx",
- "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.bounds.test.tsx",
- "src/renderer/src/components/floating-terminal/FloatingTerminalToggleButton.test.tsx",
- "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.test.ts",
- "src/renderer/src/components/floating-terminal/terminal-pane-handle-registry.test.ts",
- "src/renderer/src/components/github-item-dialog/inspect-pull-request/pr-files-combined-diff-section-index.test.tsx",
- "src/renderer/src/components/github-link-copy-state.test.ts",
- "src/renderer/src/components/github-project/project-dialog-state.test.ts",
- "src/renderer/src/components/github/pr-file-content-size.test.ts",
- "src/renderer/src/components/landing-preflight-dismissal.test.ts",
- "src/renderer/src/components/landing-preflight-issues.test.ts",
- "src/renderer/src/components/linear-issue-attribute-filter-coverage-agreement.test.ts",
- "src/renderer/src/components/linear-issue-workspace-detail-state.test.tsx",
- "src/renderer/src/components/maintenance/update-card/update-card-error-model.test.ts",
- "src/renderer/src/components/native-chat/NativeChatApprovalCard.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.stream-render.perf.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.windowing.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatQuestionCard.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatThreadGoalBanner.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-image-paste.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pinned-rows.test.ts",
- "src/renderer/src/components/native-chat/native-chat-preassembled-session-parity.test.ts",
- "src/renderer/src/components/native-chat/native-chat-resolved-path-ownership.test.ts",
- "src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts",
- "src/renderer/src/components/native-chat/native-chat-scrape-fallback.test.ts",
- "src/renderer/src/components/native-chat/native-chat-typing-redirect.test.ts",
- "src/renderer/src/components/native-chat/native-chat-view-state.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-composer-keydown.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-composer-submit.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-live-session-visibility.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-skills.test.ts",
- "src/renderer/src/components/native-chat/use-structured-agent-session-thread-goal.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session.test.tsx",
- "src/renderer/src/components/network/CustomAddressDialog.test.tsx",
- "src/renderer/src/components/new-workspace/SmartWorkspaceNameField.ime-enter.test.tsx",
- "src/renderer/src/components/new-workspace/smart-workspace-localized-options.test.ts",
- "src/renderer/src/components/onboarding/NotificationStep.test.tsx",
- "src/renderer/src/components/onboarding/agent-picked-payload.test.ts",
- "src/renderer/src/components/onboarding/onboarding-dismiss-target.test.ts",
- "src/renderer/src/components/quick-open-install-rg-guidance.render.test.tsx",
- "src/renderer/src/components/repo/repo-icon.emoji-centering.test.tsx",
- "src/renderer/src/components/right-sidebar/AiVaultPanel.legacy-filter.test.tsx",
- "src/renderer/src/components/right-sidebar/CommitArea.chevron-spinner.test.tsx",
- "src/renderer/src/components/right-sidebar/CommitArea.primary-icons.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerRow.actions.test.tsx",
- "src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-first-prompt-card.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-original-pane.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-search-session.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-identity.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-review.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel/panel-content-rendering.test.tsx",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-check-and-review-actions.test.tsx",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-generation.test.tsx",
- "src/renderer/src/components/right-sidebar/commit-failure-summary.test.ts",
- "src/renderer/src/components/right-sidebar/diff-comments-clear-dialog-state.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-dir-toggle-timing.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-paths.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts",
- "src/renderer/src/components/right-sidebar/gitlab-mr-merge-state.test.ts",
- "src/renderer/src/components/right-sidebar/right-sidebar-width.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-manual-review-url.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-section-order.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts",
- "src/renderer/src/components/right-sidebar/source-control/commit/discard-all-failure-description.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/listing/use-store-actions.store-subscriptions.test.tsx",
- "src/renderer/src/components/right-sidebar/use-file-explorer-name-filter.runtime-listing.test.tsx",
- "src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx",
- "src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts",
- "src/renderer/src/components/settings/AgentSkillSetupPanel.freshness.test.tsx",
- "src/renderer/src/components/settings/AgentsPane.test.tsx",
- "src/renderer/src/components/settings/BrowserClientHostedRemoteSetting.test.tsx",
- "src/renderer/src/components/settings/BrowserPane.test.ts",
- "src/renderer/src/components/settings/BrowserUseSkillStep.test.tsx",
- "src/renderer/src/components/settings/CommitMessageAiPane.test.tsx",
- "src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.test.tsx",
- "src/renderer/src/components/settings/GeneralRemoteServerUpdates.test.tsx",
- "src/renderer/src/components/settings/GitPane.test.ts",
- "src/renderer/src/components/settings/LinearAgentSkillNotes.test.tsx",
- "src/renderer/src/components/settings/OrchestrationPane.test.tsx",
- "src/renderer/src/components/settings/PluginKeybindingConsentPreview.test.ts",
- "src/renderer/src/components/settings/PluginMarketplaceBrowser.test.tsx",
- "src/renderer/src/components/settings/RepositoryGitHubAccountSection.test.tsx",
- "src/renderer/src/components/settings/RepositoryPane.test.ts",
- "src/renderer/src/components/settings/RepositoryPaneDraftInput.test.tsx",
- "src/renderer/src/components/settings/SettingsFormControls.segmented-control.test.tsx",
- "src/renderer/src/components/settings/ShortcutCommandBlock.test.tsx",
- "src/renderer/src/components/settings/VoiceSpeechModelSection.test.tsx",
- "src/renderer/src/components/settings/agent-availability-settings.test.ts",
- "src/renderer/src/components/settings/browser-link-routing-localization.test.ts",
- "src/renderer/src/components/settings/browser-search.test.ts",
- "src/renderer/src/components/settings/mobile-pane-search.test.ts",
- "src/renderer/src/components/settings/session-search-computer-rollup.test.ts",
- "src/renderer/src/components/settings/settings-setup-guide-progress-hook.test.tsx",
- "src/renderer/src/components/settings/ssh-target-remove.test.ts",
- "src/renderer/src/components/settings/terminal-preview-content.test.ts",
- "src/renderer/src/components/settings/terminal-search.test.ts",
- "src/renderer/src/components/settings/useGhosttyImport.test.ts",
- "src/renderer/src/components/settings/useWarpThemeImport.test.ts",
- "src/renderer/src/components/sidebar/AutoRenameFailedDialog.test.tsx",
- "src/renderer/src/components/sidebar/CacheTimer.test.tsx",
- "src/renderer/src/components/sidebar/CommentMarkdown.github-attachment-image.test.tsx",
- "src/renderer/src/components/sidebar/CommentMarkdown.link-click.test.tsx",
- "src/renderer/src/components/sidebar/CommentMarkdown.test.tsx",
- "src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx",
- "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.update-command.test.tsx",
- "src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx",
- "src/renderer/src/components/sidebar/RemoteFileBrowser.paste.test.tsx",
- "src/renderer/src/components/sidebar/SetupGuideSidebarEntry.test.tsx",
- "src/renderer/src/components/sidebar/SidebarHeader.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardSshHostControl.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts",
- "src/renderer/src/components/sidebar/delete-worktree-flow.test.ts",
- "src/renderer/src/components/sidebar/host-header-drag.test.tsx",
- "src/renderer/src/components/sidebar/host-header-menu-items.test.ts",
- "src/renderer/src/components/sidebar/host-section-order.test.ts",
- "src/renderer/src/components/sidebar/mobile-sidebar-onboarding-badge.test.ts",
- "src/renderer/src/components/sidebar/project-added-default-checkout.test.ts",
- "src/renderer/src/components/sidebar/project-group-header-drag.test.ts",
- "src/renderer/src/components/sidebar/project-order-manual-default-notice-visibility.test.ts",
- "src/renderer/src/components/sidebar/remote-file-browser-drive-paths.test.ts",
- "src/renderer/src/components/sidebar/repo-header-create-state.test.ts",
- "src/renderer/src/components/sidebar/stale-agent-row-unverifiable.test.ts",
- "src/renderer/src/components/sidebar/use-worktree-sleep-state.test.tsx",
- "src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts",
- "src/renderer/src/components/sidebar/workspace-kanban-filtered-drop-index.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-agent-ack-inputs.test.tsx",
- "src/renderer/src/components/sidebar/worktree-card-details-hover-state.test.tsx",
- "src/renderer/src/components/sidebar/worktree-lineage-toggle-handler-cache.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/grouping/host-labels.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/navigation/use-keyboard.host-identity.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/rows/use-project-group-dialogs-owner-host.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/viewport/use-scroll-to-top.test.tsx",
- "src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts",
- "src/renderer/src/components/sidebar/worktree-unambiguous-id-index.test.ts",
- "src/renderer/src/components/skills/SkillInstallAgentPicker.test.tsx",
- "src/renderer/src/components/skills/skill-agent-filter.test.ts",
- "src/renderer/src/components/skills/skill-freshness-grouping.test.ts",
- "src/renderer/src/components/skills/skill-package-install-risk.test.ts",
- "src/renderer/src/components/skills/skill-share-link.test.ts",
- "src/renderer/src/components/stats/GrokUsagePane.test.tsx",
- "src/renderer/src/components/stats/UsageBreakdownSection.test.tsx",
- "src/renderer/src/components/status-bar/CaffeinateStatusSegment.localization.test.tsx",
- "src/renderer/src/components/status-bar/PortsStatusSegment.host-routing.test.tsx",
- "src/renderer/src/components/status-bar/ResourceUsageStatusSegment.session-polling.test.ts",
- "src/renderer/src/components/status-bar/resource-session-inventory.test.ts",
- "src/renderer/src/components/status-bar/status-bar-provider-menu-focus.test.tsx",
- "src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts",
- "src/renderer/src/components/status-bar/use-resource-usage-derived-model.test.tsx",
- "src/renderer/src/components/status-bar/workspace-space-layout.test.ts",
- "src/renderer/src/components/tab-bar/EditorFileTab.test.tsx",
- "src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx",
- "src/renderer/src/components/tab-bar/SortableTab.rename-shortcut.test.tsx",
- "src/renderer/src/components/tab-bar/TabBar.client-hosted-row-active-state.test.ts",
- "src/renderer/src/components/tab-bar/TabBar.worktree-write-gate.test.tsx",
- "src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx",
- "src/renderer/src/components/tab-bar/open-tab-entry-dedupe.test.ts",
- "src/renderer/src/components/tab-bar/reconcile-order.test.ts",
- "src/renderer/src/components/tab-bar/tab-bar-item-surface.client-hosted-active-state.test.tsx",
- "src/renderer/src/components/tab-bar/tab-strip-content-resize-observers.test.ts",
- "src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts",
- "src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts",
- "src/renderer/src/components/tab-group/tab-insertion.test.ts",
- "src/renderer/src/components/task-page-jira-grouping.test.ts",
- "src/renderer/src/components/task-page-pr-check-summary.test.ts",
- "src/renderer/src/components/task-page-workspace-composer-boundary.test.ts",
- "src/renderer/src/components/task-source-context-summary.test.ts",
- "src/renderer/src/components/terminal-pane/TerminalAgentSessionForkDialog.test.tsx",
- "src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-dispose-leak.test.ts",
- "src/renderer/src/components/terminal-pane/codex-backfill-error-detector.test.ts",
- "src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts",
- "src/renderer/src/components/terminal-pane/deferred-reattach-live-data-queue.test.ts",
- "src/renderer/src/components/terminal-pane/expand-collapse.test.ts",
- "src/renderer/src/components/terminal-pane/hidden-output-restore-scheduler.test.ts",
- "src/renderer/src/components/terminal-pane/pane-helpers.test.ts",
- "src/renderer/src/components/terminal-pane/pane-title-update-global-scan-budget.test.tsx",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-atlas-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-output-restore.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-split-cwd-resolution.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-typed-agent-identity.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/foreground-output-budgets.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/park-reveal-snapshot-verdict.test.ts",
- "src/renderer/src/components/terminal-pane/pty-input-write-queue.test.ts",
- "src/renderer/src/components/terminal-pane/pty-model-restore-channel.test.ts",
- "src/renderer/src/components/terminal-pane/pty-size-reassertion.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-connect-spawn.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-detach-attach-handoff.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-error-surface-dismissal.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-snapshot-source-grid.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-expired-pane-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-surface-replacement.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-split-leaf-activation.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stream-reconnect.test.ts",
- "src/renderer/src/components/terminal-pane/restored-snapshot-coverage.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-alternate-screen-parse.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-clipboard-selection-text.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-cursor-appearance-precedence.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-internal-handler.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-shell.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-eviction-exempt-tabs.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-handle-links.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-composer-placeholder-mask.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-forwarder-space-claim.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-input-context-refresh.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-composition-cancel.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-resumed-preedit-visibility.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-input-host-platform.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit-coexistence.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-activation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-provider-link-detection.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-native-copy-gutter.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-recovery-unsettled-fallback.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-render-desync-weight-probe.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-shortcut-option-compose.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-tab-agent-type-index.test.ts",
- "src/renderer/src/components/terminal-pane/use-manual-terminal-worktree-parking.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-active-pty-reporting.test.ts",
- "src/renderer/src/components/terminal-pane/xterm-bypass-policy-interrupt.test.ts",
- "src/renderer/src/components/terminal-pane/xterm-bypass-policy-non-mac.test.ts",
- "src/renderer/src/components/terminal-parked-watcher-sync-entries.test.tsx",
- "src/renderer/src/components/terminal-search-safe-find.test.ts",
- "src/renderer/src/components/terminal-workspace-surface-ids.test.tsx",
- "src/renderer/src/components/terminal/active-terminal-repair.test.ts",
- "src/renderer/src/components/terminal/running-terminal-close-guard.test.ts",
- "src/renderer/src/components/terminal/split-group-mount.test.ts",
- "src/renderer/src/components/terminal/terminal-close-confirm-keyboard-vs-mouse.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-actions-structured-session.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-actions-unified-close.test.ts",
- "src/renderer/src/components/terminal/use-worktree-files.test.tsx",
- "src/renderer/src/components/terminal/window-close-running-work.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-settlement.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-timeout-recovery.test.ts",
- "src/renderer/src/hooks/composer-drop-owner.test.ts",
- "src/renderer/src/hooks/composer-state/full-creation-execution.test.ts",
- "src/renderer/src/hooks/direct-ssh-host-hydration.test.ts",
- "src/renderer/src/hooks/direct-ssh-reconnect-rollout.test.ts",
- "src/renderer/src/hooks/direct-ssh-worktree-refresh-scheduler.test.ts",
- "src/renderer/src/hooks/ipc-events/agent-status-pending-retry-gate.test.ts",
- "src/renderer/src/hooks/ipc-events/browser-automation-bootstrap-lease.test.ts",
- "src/renderer/src/hooks/ipc-events/os-markdown-file-open-bridge.test.ts",
- "src/renderer/src/hooks/use-audio-capture.capture-loss.test.ts",
- "src/renderer/src/hooks/useComposerState-host-retarget.test.ts",
- "src/renderer/src/hooks/useComposerState.integration.test.ts",
- "src/renderer/src/hooks/useEditorExternalWatch-targets.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-connection-attribution.test.ts",
- "src/renderer/src/hooks/useIpcEvents-agent-status-ssh-authority.test.ts",
- "src/renderer/src/hooks/useIpcEvents-cmd-j-digit-chord.test.ts",
- "src/renderer/src/hooks/useIpcEvents-rate-limit-hydration.test.ts",
- "src/renderer/src/hooks/useIpcEvents-repos-changed-catalogs.test.ts",
- "src/renderer/src/hooks/useIpcEvents-ssh-disconnect-cleanup.test.ts",
- "src/renderer/src/hooks/useMetadataListRequest.test.tsx",
- "src/renderer/src/hooks/useRetiredWorktreeNames.test.ts",
- "src/renderer/src/hooks/useSettingsNavigationMetadata.language-switch.test.tsx",
- "src/renderer/src/hooks/useUnreadDockBadge.test.ts",
- "src/renderer/src/hooks/viewport-size-change-listener.test.ts",
- "src/renderer/src/hooks/zoom-routing.test.ts",
- "src/renderer/src/i18n/ko-ui-semantic-mistranslations.test.ts",
- "src/renderer/src/i18n/weekday-names.test.ts",
- "src/renderer/src/i18n/worktree-visibility-locales.test.ts",
- "src/renderer/src/lib/agent-skill-nav-install-status.test.ts",
- "src/renderer/src/lib/agent-status-terminal-title.test.ts",
- "src/renderer/src/lib/ai-vault-resume-target.test.ts",
- "src/renderer/src/lib/ai-vault-tab-title-sync-inputs.test.ts",
- "src/renderer/src/lib/app-command-dispatch.test.ts",
- "src/renderer/src/lib/browser-page-palette-activation.test.ts",
- "src/renderer/src/lib/client-creation-action-policy.test.ts",
- "src/renderer/src/lib/codex-session-restart.test.ts",
- "src/renderer/src/lib/composer-issue-command.test.ts",
- "src/renderer/src/lib/crash-diagnostics.test.ts",
- "src/renderer/src/lib/ensure-hooks-confirmed.test.ts",
- "src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts",
- "src/renderer/src/lib/file-search-selection.test.ts",
- "src/renderer/src/lib/file-type-icons.test.ts",
- "src/renderer/src/lib/gitlab-links.test.ts",
- "src/renderer/src/lib/hook-command-delayed-delivery-perf.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-landed-handle.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-placement.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts",
- "src/renderer/src/lib/lazy-with-retry.never-landed-reload.test.ts",
- "src/renderer/src/lib/linear-issue-context-snapshot.test.ts",
- "src/renderer/src/lib/linked-work-item-provider.test.ts",
- "src/renderer/src/lib/locale-text-collators.test.ts",
- "src/renderer/src/lib/migration-unsupported-agent-entry.test.ts",
- "src/renderer/src/lib/monaco-languages/register-svelte.test.ts",
- "src/renderer/src/lib/monaco-languages/textmate-token-provider.test.ts",
- "src/renderer/src/lib/new-workspace-composer-repo.test.ts",
- "src/renderer/src/lib/onboarding-project-checklist.test.ts",
- "src/renderer/src/lib/orca-yaml-trust-prompt-slot-eviction.test.ts",
- "src/renderer/src/lib/palette-match/palette-ranking.test.ts",
- "src/renderer/src/lib/pane-manager/client-hosted-browser-row-ephemerality.test.ts",
- "src/renderer/src/lib/pane-manager/mobile-driver-state.test.ts",
- "src/renderer/src/lib/pane-manager/pane-cursor-blink-suspension.test.ts",
- "src/renderer/src/lib/pane-manager/pane-divider-stray-touch.test.ts",
- "src/renderer/src/lib/pane-manager/pane-drag-reorder.test.ts",
- "src/renderer/src/lib/pane-manager/pane-drop-no-op.test.ts",
- "src/renderer/src/lib/pane-manager/pane-overlay-focus.test.ts",
- "src/renderer/src/lib/pane-manager/pane-pty-resize-hold.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-throughput.bench.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-canvas-dpr-repair.test.ts",
- "src/renderer/src/lib/parked-terminal-host-hydration.test.ts",
- "src/renderer/src/lib/path-head-elision.test.ts",
- "src/renderer/src/lib/primary-selection.test.ts",
- "src/renderer/src/lib/react-error-boundary-reporting.test.ts",
- "src/renderer/src/lib/repo-slug-index.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-provider-claim.test.ts",
- "src/renderer/src/lib/right-sidebar-visibility.test.ts",
- "src/renderer/src/lib/run-quick-command-in-new-tab.test.ts",
- "src/renderer/src/lib/screen-submit-shortcut.test.ts",
- "src/renderer/src/lib/setup-script-prompt.test.ts",
- "src/renderer/src/lib/shutdown-checkpoint-guard.test.ts",
- "src/renderer/src/lib/simulator-launch-coordination.test.ts",
- "src/renderer/src/lib/simulator-palette-search.test.ts",
- "src/renderer/src/lib/sleeping-agent-session-launch-windows-quoting.test.ts",
- "src/renderer/src/lib/source-control-generation-plan.test.ts",
- "src/renderer/src/lib/structured-agent-launch-settlement.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-cancellation.test.ts",
- "src/renderer/src/lib/tab-has-live-pty.test.ts",
- "src/renderer/src/lib/terminal-links-redos.test.ts",
- "src/renderer/src/lib/typing-latency/diagnostic-lifecycle.test.ts",
- "src/renderer/src/lib/use-tab-agent-process-signals.test.ts",
- "src/renderer/src/lib/window-visibility-timeout-poller.test.ts",
- "src/renderer/src/lib/windows-terminal-capability-reprobe.test.ts",
- "src/renderer/src/lib/workspace-activation-terminal-focus.test.ts",
- "src/renderer/src/lib/workspace-session-host-contention.test.ts",
- "src/renderer/src/lib/workspace-session-persistence-gate.test.ts",
- "src/renderer/src/lib/workspace-session-ssh-partition-round-trip.test.ts",
- "src/renderer/src/lib/workspace-tab-palette-results.test.ts",
- "src/renderer/src/lib/worktree-activation-agent-startup.test.ts",
- "src/renderer/src/lib/worktree-activation-empty-remote.test.ts",
- "src/renderer/src/lib/worktree-activation-issue-command.test.ts",
- "src/renderer/src/lib/worktree-agent-activation-seam.test.ts",
- "src/renderer/src/lib/worktree-default-display-name.test.ts",
- "src/renderer/src/lib/worktree-git-identity-display.test.ts",
- "src/renderer/src/lib/worktree-operation-generation.test.ts",
- "src/renderer/src/lib/worktree-palette-comment-snippet.test.ts",
- "src/renderer/src/lib/worktree-palette-search.test.ts",
- "src/renderer/src/runtime/close-mirrored-editor-tab.test.ts",
- "src/renderer/src/runtime/local-session-tab-close-owner.test.ts",
- "src/renderer/src/runtime/local-structured-session-reveal-visibility.test.ts",
- "src/renderer/src/runtime/remote-host-file-delete-repro.test.ts",
- "src/renderer/src/runtime/remote-host-file-open-repro.test.ts",
- "src/renderer/src/runtime/runtime-file-client-watch.test.ts",
- "src/renderer/src/runtime/runtime-path-existence-error-parity.test.ts",
- "src/renderer/src/runtime/runtime-repo-client.test.ts",
- "src/renderer/src/runtime/runtime-worktree-selector.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-payload-partition.test.ts",
- "src/renderer/src/runtime/use-remote-runtime-recovery-triggers.test.ts",
- "src/renderer/src/runtime/use-worktree-runtime-target.test.ts",
- "src/renderer/src/runtime/web-runtime-session-tab-activate-close.test.ts",
- "src/renderer/src/runtime/web-runtime-session-tab-move.test.ts",
- "src/renderer/src/runtime/web-session-focus-intent-visible-tab.test.ts",
- "src/renderer/src/runtime/web-session-tabs-removed-frame-retires-live-publisher.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-agent-handoff.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-host-tab-retraction-ghost-rows.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-remote-status-title-flap.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-restored-browser-rows.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-staged-browser-authority.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-window-visibility.test.tsx",
- "src/renderer/src/runtime/web-session-tabs-sync/tracking-lifecycle.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-inventory-retry.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-mixed-version.test.ts",
- "src/renderer/src/startup/active-workspace-ssh-targets.test.ts",
- "src/renderer/src/store/plugin-panels.test.ts",
- "src/renderer/src/store/react-commit-cascade-write-probe.test.ts",
- "src/renderer/src/store/slices/agent-status-live-map-leak.test.ts",
- "src/renderer/src/store/slices/browser-session-profiles.test.ts",
- "src/renderer/src/store/slices/detected-agents-environment-prune-leak.test.ts",
- "src/renderer/src/store/slices/diffComments.test.ts",
- "src/renderer/src/store/slices/editor-read-only-tabs.test.ts",
- "src/renderer/src/store/slices/github-issue-source-indicator-suppression.test.ts",
- "src/renderer/src/store/slices/github-pr-branch-direct-refresh-scope.test.ts",
- "src/renderer/src/store/slices/github-pr-refresh-hosted-review-cache-leak.test.ts",
- "src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts",
- "src/renderer/src/store/slices/github-provider-request-concurrency.test.ts",
- "src/renderer/src/store/slices/github-repo-lookup-index.test.ts",
- "src/renderer/src/store/slices/jira.test.ts",
- "src/renderer/src/store/slices/linear-credential-error-recovery.test.ts",
- "src/renderer/src/store/slices/project-group-removal-targets.test.ts",
- "src/renderer/src/store/slices/purge-stale-runtime-host-ownership.test.ts",
- "src/renderer/src/store/slices/recently-closed-tabs.test.ts",
- "src/renderer/src/store/slices/repos-all-hosts-generation.test.ts",
- "src/renderer/src/store/slices/repos-project-groups.test.ts",
- "src/renderer/src/store/slices/repos-project-runtime.test.ts",
- "src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts",
- "src/renderer/src/store/slices/runtime-status-catalog-identity.test.ts",
- "src/renderer/src/store/slices/runtime-status-reconnect-connection-generation.test.ts",
- "src/renderer/src/store/slices/stale-runtime-host-rows.test.ts",
- "src/renderer/src/store/slices/store-active-worktree-tab-close.test.ts",
- "src/renderer/src/store/slices/store-session-cascades.test.ts",
- "src/renderer/src/store/slices/store-sleep-exact-runtime-stop.test.ts",
- "src/renderer/src/store/slices/store-sleep-runtime-convergence.test.ts",
- "src/renderer/src/store/slices/store-worktree-removal-cascade.test.ts",
- "src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts",
- "src/renderer/src/store/slices/tabs-unread-and-focus.test.ts",
- "src/renderer/src/store/slices/task-creation-drafts.test.ts",
- "src/renderer/src/store/slices/terminal-pane-detach-agent-identity.test.ts",
- "src/renderer/src/store/slices/terminal-pty-identity-replacement.test.ts",
- "src/renderer/src/store/slices/terminal-startup-command-retention.test.ts",
- "src/renderer/src/store/slices/ui-contextual-tours.test.ts",
- "src/renderer/src/store/slices/ui-hydration-view-layout.test.ts",
- "src/renderer/src/store/slices/usage-web-client-fallback.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-wrong-host-removal.test.ts",
- "src/renderer/src/store/slices/workspace-space.test.ts",
- "src/renderer/src/store/slices/worktree-terminal-removal-teardown.test.ts",
- "src/renderer/src/store/slices/worktree-visibility-owner-settings.test.ts",
- "src/renderer/src/store/slices/worktrees-activity-persistence.test.ts",
- "src/renderer/src/store/slices/worktrees-linked-review-push-target.test.ts",
- "src/renderer/src/store/slices/worktrees/teardown/remove-worktree-map-identity.test.ts",
- "src/renderer/src/store/terminals/structured-chat-tab-rename.test.ts",
- "src/renderer/src/store/terminals/terminal-no-op-subscriber.test.ts",
- "src/renderer/src/web/web-preload-api-agent-providers.test.ts",
- "src/renderer/src/web/web-preload-api-runtime-environment.test.ts",
- "src/renderer/src/web/web-workspace-session.test.ts",
- "src/shared/agent-hook-listener-grok-completion.test.ts",
- "src/shared/agent-hook-request-body-memory.test.ts",
- "src/shared/agent-hook-status-cache.test.ts",
- "src/shared/agent-launch-remote.test.ts",
- "src/shared/agent-lead-status-fold.test.ts",
- "src/shared/agent-model-probe-spec.test.ts",
- "src/shared/agent-row-conversation-name.test.ts",
- "src/shared/agent-skill-sharing-gate.test.ts",
- "src/shared/agent-status-child-work-lifetime.test.ts",
- "src/shared/agent-status-run.test.ts",
- "src/shared/agent-status-types.test.ts",
- "src/shared/agent-title-agy-gemini-collision.test.ts",
- "src/shared/agent-tui-input-clear.test.ts",
- "src/shared/ai-vault-session-filters.test.ts",
- "src/shared/ai-vault-types.test.ts",
- "src/shared/automation-execution-target.test.ts",
- "src/shared/bounded-map.test.ts",
- "src/shared/browser-client-automation-protocol.test.ts",
- "src/shared/bundled-ripgrep.test.ts",
- "src/shared/claude-model-list-probe.test.ts",
- "src/shared/client-environment-info.test.ts",
- "src/shared/codex-auth-errors.test.ts",
- "src/shared/codex-startup-delivery.test.ts",
- "src/shared/codex-subagent-rollout-lifecycle.test.ts",
- "src/shared/command-code-output-retention.test.ts",
- "src/shared/computer-awake-mode.test.ts",
- "src/shared/constants.test.ts",
- "src/shared/ephemeral-setup-terminal-worktree-id.test.ts",
- "src/shared/event-loop-yield.test.ts",
- "src/shared/feature-wall-tour-depth.test.ts",
- "src/shared/foreground-process-ancestry-parity.test.ts",
- "src/shared/foreground-wrapper-agent.test.ts",
- "src/shared/git-clone-failure-message.test.ts",
- "src/shared/git-configured-branch-target.test.ts",
- "src/shared/git-fetch-head-lock-key-derivation.test.ts",
- "src/shared/git-remote-identity.test.ts",
- "src/shared/git-status-upstream-ref.test.ts",
- "src/shared/git-uncommitted-line-stats.test.ts",
- "src/shared/git-worktree-operation-lock.test.ts",
- "src/shared/github/work-items-query-bounds.test.ts",
- "src/shared/hermes-startup-query.windows.test.ts",
- "src/shared/in-flight-promise-dedupe.test.ts",
- "src/shared/jira-issue-url.test.ts",
- "src/shared/keybindings-digit-index.test.ts",
- "src/shared/mobile-relay-mint-failure.test.ts",
- "src/shared/model-id-label.test.ts",
- "src/shared/native-chat-shell-environment.test.ts",
- "src/shared/native-chat-task-list.test.ts",
- "src/shared/native-chat-tool-identity.test.ts",
- "src/shared/native-chat-turn-activity.test.ts",
- "src/shared/network/manual-address.test.ts",
- "src/shared/new-workspace/worktree-create-retry-policy.test.ts",
- "src/shared/node-bounded-json-stringify.test.ts",
- "src/shared/node-file-content-equality.test.ts",
- "src/shared/node-markdown-document-discovery.test.ts",
- "src/shared/nvm-default-alias.test.ts",
- "src/shared/omp-draft-launch-shell.test.ts",
- "src/shared/orchestration-dispatch-refusal-contract.test.ts",
- "src/shared/orchestration-fleet-projection.test.ts",
- "src/shared/pairing-local-ui-fields.test.ts",
- "src/shared/pane-agent-identity-adapter.test.ts",
- "src/shared/pane-agent-identity-title-corpus.test.ts",
- "src/shared/pr-comment-time.test.ts",
- "src/shared/pty-owner-backend.test.ts",
- "src/shared/pty-startup-ingress-kitty.test.ts",
- "src/shared/pty-startup-ingress.test.ts",
- "src/shared/published-pane-agent-identity.test.ts",
- "src/shared/quick-open-readdir-walk.test.ts",
- "src/shared/quick-open-transport-budget.test.ts",
- "src/shared/rate-limit-types.test.ts",
- "src/shared/relay-frame-buffer.test.ts",
- "src/shared/remote-runtime-request-frames.test.ts",
- "src/shared/remote-runtime-shared-control-keepalive-refresh.test.ts",
- "src/shared/rpc-contract/terminal-create-shell-param.test.ts",
- "src/shared/runtime-environment-store.test.ts",
- "src/shared/runtime-navigation.test.ts",
- "src/shared/secret-store.test.ts",
- "src/shared/setup-script-telemetry-events.test.ts",
- "src/shared/setup-script-telemetry.test.ts",
- "src/shared/skill-install-failure.test.ts",
- "src/shared/skill-package-manifest.test.ts",
- "src/shared/source-control-ai.test.ts",
- "src/shared/source-control-push-failure.test.ts",
- "src/shared/ssh-pending-pty-kill.test.ts",
- "src/shared/structured-agent-session-item-retention.test.ts",
- "src/shared/structured-agent-session-option-codec.test.ts",
- "src/shared/terminal-escape-introducer.test.ts",
- "src/shared/terminal-mode-reset-profiles.test.ts",
- "src/shared/terminal-stream-json-byte-length.test.ts",
- "src/shared/terminal-title-classification-corpus.test.ts",
- "src/shared/terminal-view-attributes.test.ts",
- "src/shared/tui-agent-permissions.test.ts",
- "src/shared/ui-zoom-level.test.ts",
- "src/shared/usage-percentage-display-change-notice.test.ts",
- "src/shared/usage-percentage-display.test.ts",
- "src/shared/window-shortcut-policy.test.ts",
- "src/shared/windows-long-path-git-args.test.ts",
- "src/shared/workspace-session-salvage-equivalence.test.ts",
- "src/shared/workspace-session-salvage.test.ts",
- "src/shared/workspace-session-terminal-tab-close.test.ts",
- "src/shared/worktree/removal-force-classification.test.ts",
- "src/shared/worktree/sort-order-update.test.ts",
- "tests/e2e/accumulated-workspace-state-builder.unit.test.ts",
- "tests/e2e/helpers/alt-screen-frame.unit.test.ts",
- "tests/e2e/helpers/electron-crashpad-cleanup.unit.test.ts",
- "tests/e2e/helpers/paired-client-runtime-environment.unit.test.ts",
- "tests/e2e/orca-restart-navigation.unit.test.ts",
- "tests/e2e/paired-runtime-rejected-input-remount.unit.test.ts",
- "tests/e2e/runtime-graph-publication-probe.unit.test.ts",
- "tests/e2e/terminal-foreground-confirmation.unit.test.ts",
- "tests/tools/omp-relay-close-lifecycle.test.mjs",
- "tests/tools/relay-bench/relay-bench-state-file.test.mjs",
- "tests/tools/relay-bench/relay-phone-connect-bench.test.mjs"
- ],
- "durationMs": 850511
- },
- {
- "files": [
- "config/scripts/app-store-performance-plugin.test.mjs",
- "config/scripts/benchmark-artifact-comparison.test.mjs",
- "config/scripts/check-react-doctor-changed.test.mjs",
- "config/scripts/check-readme-local-links.test.mjs",
- "config/scripts/check-reliability-gates.test.mjs",
- "config/scripts/computer-e2e-workflow.test.mjs",
- "config/scripts/create-draft-release.test.mjs",
- "config/scripts/dev-electron-bundle-identity.test.ts",
- "config/scripts/electron-builder-native-rebuild.test.mjs",
- "config/scripts/happy-dom-offscreen-canvas.test.ts",
- "config/scripts/locale-brand-prefilter.test.mjs",
- "config/scripts/locale-translation-policy-ko-round5.test.mjs",
- "config/scripts/locale-translation-policy.zh-round5.test.mjs",
- "config/scripts/mobile-web-app-browser-pane-text-inputs.test.mjs",
- "config/scripts/mobile-web-app-frame-budget-sweep.test.ts",
- "config/scripts/mobile-web-app-render.test.mjs",
- "config/scripts/mobile-web-app-session-terminal-closure.test.mjs",
- "config/scripts/mobile-web-app-tasks-external-links.test.mjs",
- "config/scripts/mobile-web-bundle-serializer-parity.test.mjs",
- "config/scripts/node-pty-windows-pty-teardown-patch.test.mjs",
- "config/scripts/orca-dev-bin.test.mjs",
- "config/scripts/packaged-source-map-prune.test.mjs",
- "config/scripts/pr-e2e-gate-contract.test.mjs",
- "config/scripts/rebuild-native-deps-windows-process-tree.test.mjs",
- "config/scripts/renderer-scrollbar-style-plugin.test.mjs",
- "config/scripts/resolve-7za-path.test.mjs",
- "config/scripts/run-codex-real-account-validation.test.ts",
- "config/scripts/run-internal-dev-setup.test.mjs",
- "config/scripts/shebang-script-line-ending-pin.test.mjs",
- "config/scripts/skill-description-length.test.mjs",
- "config/scripts/skills-cli-package-workflow.test.mjs",
- "config/scripts/verify-localization-catalog.test.mjs",
- "config/scripts/verify-localization-extraction.test.mjs",
- "config/scripts/verify-wsl-e2e-participation.test.mjs",
- "config/scripts/windows-cmd-shim-spawn-boundary.test.mjs",
- "config/scripts/windows-signing-gate-toolset.test.mjs",
- "config/scripts/workflow-ref-mirror-case-safety.test.mjs",
- "config/scripts/xterm-image-lifecycle-contract.test.mjs",
- "config/scripts/xterm-webgl-runtime-contract.test.mjs",
- "src/cli/cli-command-name-parity.test.ts",
- "src/cli/handlers/artifacts.test.ts",
- "src/cli/handlers/linear.test.ts",
- "src/cli/handlers/orchestration-check-identity.test.ts",
- "src/cli/handlers/orchestration-timeout-cli.test.ts",
- "src/cli/handlers/orchestration/worker-list-run-scope.test.ts",
- "src/cli/index-terminal-commands.test.ts",
- "src/cli/index-worktree-create-agent.test.ts",
- "src/cli/index-worktree-create-parent.test.ts",
- "src/cli/main-module-bundle-parity.test.ts",
- "src/cli/runtime/client-recovery.test.ts",
- "src/cli/shell-command-quote.test.ts",
- "src/cli/specs/search.test.ts",
- "src/cli/worktree-selector-wsl-posix-path.test.ts",
- "src/main/active-view-preference-sync-flush-veto.test.ts",
- "src/main/agent-auth-restart-preservation.test.ts",
- "src/main/agent-hooks/restored-subagent-liveness-sweep.test.ts",
- "src/main/agent-hooks/server-copilot-normalization.test.ts",
- "src/main/agent-hooks/server-hook-http-ingest.test.ts",
- "src/main/agent-hooks/server-ingest-remote.test.ts",
- "src/main/agent-hooks/server-ingest-structured-status.test.ts",
- "src/main/agent-hooks/server-omp-retirement-ack.test.ts",
- "src/main/agent-hooks/server-opencode-lifecycle.test.ts",
- "src/main/agent-hooks/server-prompt-sent-telemetry.test.ts",
- "src/main/agent-hooks/server-retired-pane-new-turn.test.ts",
- "src/main/ai-vault-search/session-search-directory-listings.test.ts",
- "src/main/ai-vault-search/session-search-engine.test.ts",
- "src/main/ai-vault-search/session-search-lifecycle-matrix.test.ts",
- "src/main/ai-vault-search/session-search-live-transcript.test.ts",
- "src/main/ai-vault-search/session-search-opencode-index.test.ts",
- "src/main/ai-vault-search/session-search-typo-policy.test.ts",
- "src/main/ai-vault-search/session-search-write-lifetime.test.ts",
- "src/main/ai-vault/ai-vault-scan-cancellation.test.ts",
- "src/main/ai-vault/codex-session-root-dedup.test.ts",
- "src/main/ai-vault/remote-session-parse-cache.test.ts",
- "src/main/ai-vault/runtime-session-search-call.test.ts",
- "src/main/ai-vault/session-scanner-antigravity-parser.test.ts",
- "src/main/ai-vault/session-scanner-cline-parser.test.ts",
- "src/main/ai-vault/session-scanner-codex-non-user-origin.test.ts",
- "src/main/ai-vault/session-scanner-grok-user-text.test.ts",
- "src/main/ai-vault/session-scanner-injected-title.test.ts",
- "src/main/ai-vault/session-scanner-omp-subagent-transcripts.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.test.ts",
- "src/main/ai-vault/session-scanner-parser-stream-cleanup.test.ts",
- "src/main/ai-vault/session-scanner-service-env.test.ts",
- "src/main/ai-vault/session-scanner-service-search.test.ts",
- "src/main/ai-vault/session-scanner.test.ts",
- "src/main/app-relaunch.test.ts",
- "src/main/appimage-runtime-identity.test.ts",
- "src/main/artifacts/artifact-create-intent-store.test.ts",
- "src/main/automations/automation-owner-migration.test.ts",
- "src/main/automations/external-manager-scoped.test.ts",
- "src/main/automations/headless-workspace-create.test.ts",
- "src/main/automations/refused-manual-run.test.ts",
- "src/main/azure-devops/client.test.ts",
- "src/main/bitbucket/status-no-decrypt.test.ts",
- "src/main/browser/browser-client-download-routing.test.ts",
- "src/main/browser/browser-client-file-channel-reconnect.test.ts",
- "src/main/browser/browser-client-host-published-url-wiring.test.ts",
- "src/main/browser/browser-client-route-cookie-import.test.ts",
- "src/main/browser/browser-cookie-import-partition-rollback.electron.test.ts",
- "src/main/browser/browser-cookie-import-partition-success.electron.test.ts",
- "src/main/browser/browser-cookie-import.test.ts",
- "src/main/browser/browser-cookie-registrable-family.test.ts",
- "src/main/browser/browser-host-lease-reconnect-delay.test.ts",
- "src/main/browser/browser-manager-destroyed-guest-downloads.test.ts",
- "src/main/browser/browser-manager-viewport-partial-failure.test.ts",
- "src/main/browser/browser-route-partition-binding-store.test.ts",
- "src/main/browser/browser-screencast-lifecycle.test.ts",
- "src/main/browser/browser-session-ua-cloudflare-live.electron.test.ts",
- "src/main/browser/cdp-ws-proxy-focus-replay.test.ts",
- "src/main/browser/client-route-cookie-import-source-store.test.ts",
- "src/main/browser/doc-preview-failure-notice.test.ts",
- "src/main/browser/paired-runtime-browser-host-lease-reconnect.test.ts",
- "src/main/browser/paired-runtime-browser-host-lease.test.ts",
- "src/main/browser/paired-runtime-browser-network-route.test.ts",
- "src/main/browser/remote-browser-socks-buffering.test.ts",
- "src/main/claude-accounts/claude-duplicate-account.test.ts",
- "src/main/claude-accounts/runtime-auth-path-materialization.test.ts",
- "src/main/claude-accounts/runtime-auth-service-account-switching.test.ts",
- "src/main/claude-accounts/runtime-auth-service-materialization.test.ts",
- "src/main/claude-usage/scanner-large-directory.test.ts",
- "src/main/claude/claude-agent-sdk-contract-pins.test.ts",
- "src/main/claude/claude-agent-sdk-root-kill-fallback.test.ts",
- "src/main/claude/claude-provisional-row-corrections.test.ts",
- "src/main/claude/claude-slash-command-catalog.test.ts",
- "src/main/claude/claude-structured-journal-translation-subagents.test.ts",
- "src/main/claude/claude-structured-launch-resolution.test.ts",
- "src/main/claude/claude-structured-model-confirmation.test.ts",
- "src/main/claude/claude-structured-options.test.ts",
- "src/main/claude/claude-structured-provider-fallback.test.ts",
- "src/main/claude/claude-transcript-branch-streaming.test.ts",
- "src/main/claude/compact-status-registration.test.ts",
- "src/main/cli/appimage-payload-removal.reentrancy.test.ts",
- "src/main/cli/appimage-payload-removal.test.ts",
- "src/main/cli/appimage-stable-launcher.test.ts",
- "src/main/cli/linux-terminal-orca-cli-shim.test.ts",
- "src/main/cli/windows-user-path-registry.test.ts",
- "src/main/codex-accounts/codex-account-identity-api-key-guard.test.ts",
- "src/main/codex-accounts/codex-windows-interactive-login.test.ts",
- "src/main/codex-accounts/legacy-wsl-runtime-auth-drain-apply-script.test.ts",
- "src/main/codex-accounts/legacy-wsl-runtime-auth-drain.test.ts",
- "src/main/codex-accounts/runtime-home-per-account-homes.test.ts",
- "src/main/codex-accounts/runtime-home-system-default-snapshot.test.ts",
- "src/main/codex-accounts/runtime-home-wsl-managed-accounts.test.ts",
- "src/main/codex-accounts/runtime-home-wsl-session-bridge.test.ts",
- "src/main/codex-accounts/runtime-selection.test.ts",
- "src/main/codex-accounts/service-account-add-login.test.ts",
- "src/main/codex-accounts/service-managed-home-removal-retries.test.ts",
- "src/main/codex-accounts/service-reset-credit-durability.test.ts",
- "src/main/codex-accounts/sta-4734-login-rollback-deletes-authenticated-home.test.ts",
- "src/main/codex/codex-account-session-bridge.test.ts",
- "src/main/codex/codex-app-server-posix-supervisor.test.ts",
- "src/main/codex/codex-app-server-session.test.ts",
- "src/main/codex/codex-goal-journal-rows.test.ts",
- "src/main/codex/codex-home-paths.test.ts",
- "src/main/codex/codex-hook-trust-grant.test.ts",
- "src/main/codex/codex-legacy-session-resume.test.ts",
- "src/main/codex/codex-prompt-registry-retention.test.ts",
- "src/main/codex/codex-session-resume-home.test.ts",
- "src/main/codex/codex-structured-acquisition-exit-proof.test.ts",
- "src/main/codex/codex-structured-journal-goal-resume.test.ts",
- "src/main/codex/codex-structured-journal-translation-subagents.test.ts",
- "src/main/codex/codex-structured-prompt-ownership.test.ts",
- "src/main/codex/codex-trust-grant-telemetry.test.ts",
- "src/main/codex/config-toml-hook-trust-scaling.test.ts",
- "src/main/codex/config-toml-trust-hook-read.test.ts",
- "src/main/computer/computer-provider-lifecycle.test.ts",
- "src/main/computer/macos-computer-use-permissions.test.ts",
- "src/main/computer/macos-native-provider-reaping.integration.test.ts",
- "src/main/crash-reporting/process-gone-diagnostics.test.ts",
- "src/main/crash-reporting/process-gone-recorder.test.ts",
- "src/main/daemon/agent-startup-prompt-latency.node-pty.test.ts",
- "src/main/daemon/daemon-background-transient-facts.test.ts",
- "src/main/daemon/daemon-client-rpc-request.test.ts",
- "src/main/daemon/daemon-folder-access-probe-script.test.ts",
- "src/main/daemon/daemon-incarnation-evidence-main-thread.test.ts",
- "src/main/daemon/daemon-init-packaged-bundle-staleness.test.ts",
- "src/main/daemon/daemon-pid-file-parse.test.ts",
- "src/main/daemon/daemon-pty-adapter-cold-restore-reanchor.test.ts",
- "src/main/daemon/daemon-pty-adapter-concurrent-recovery.test.ts",
- "src/main/daemon/daemon-shared-owner-incarnation-retention.test.ts",
- "src/main/daemon/daemon-tcc-attribution.test.ts",
- "src/main/daemon/daemon-transport-attachment-release.test.ts",
- "src/main/daemon/headless-emulator-unicode-width.test.ts",
- "src/main/daemon/headless-emulator-wide-char-repaint.test.ts",
- "src/main/daemon/pty-subprocess-foreground-degraded-scan.test.ts",
- "src/main/daemon/repro-7329-remote-snapshot-corruption.test.ts",
- "src/main/daemon/session-ingest-throughput.bench.test.ts",
- "src/main/daemon/terminal-history-large-checkpoint-cold-restore.test.ts",
- "src/main/daemon/terminal-history-seed-chunks.test.ts",
- "src/main/daemon/terminal-history-session-tombstone-retry.test.ts",
- "src/main/daemon/terminal-host-cwd-readability.test.ts",
- "src/main/daemon/terminal-host-wsl-context.test.ts",
- "src/main/devin/hook-service.test.ts",
- "src/main/droid/hook-service.test.ts",
- "src/main/emulator/serve-sim-detached-session.test.ts",
- "src/main/ghostty/discovery.test.ts",
- "src/main/git/branch-rename.test.ts",
- "src/main/git/command-runner/git-operation-executor.test.ts",
- "src/main/git/exact-ref-probe.test.ts",
- "src/main/git/remove-worktree.test.ts",
- "src/main/git/repo-api-parity.test.ts",
- "src/main/git/runner-windows-host-environment.test.ts",
- "src/main/git/source-control/wsl-tracked-pathspec-banner.test.ts",
- "src/main/git/status-cquoted-paths.test.ts",
- "src/main/git/status-pathspec-literals.test.ts",
- "src/main/git/status-read-coalescing.test.ts",
- "src/main/git/status-shared-symlinks.test.ts",
- "src/main/git/worktree-base-ref-probe.test.ts",
- "src/main/git/worktree-create-git-executor-real-git.test.ts",
- "src/main/git/worktree-deferred-removal-real-git.test.ts",
- "src/main/git/worktree-graph-listing.test.ts",
- "src/main/git/worktree-list-paths.test.ts",
- "src/main/git/worktree-listing-created-sparse-distro.test.ts",
- "src/main/git/worktree-move.test.ts",
- "src/main/git/worktree-preparation-base-oid.test.ts",
- "src/main/git/worktree-symlink-detection.test.ts",
- "src/main/git/wsl-direct-git-read-commands.test.ts",
- "src/main/github/client-file-viewed.test.ts",
- "src/main/github/client-tracked-upstream-fork-owner.test.ts",
- "src/main/github/client-work-items.test.ts",
- "src/main/github/gh-account-token.test.ts",
- "src/main/github/github-enterprise-repository.test.ts",
- "src/main/github/github-repository-identity.ssh-host-alias.test.ts",
- "src/main/github/pr-refresh-coordinator-active-burst-pacing.test.ts",
- "src/main/github/work-item-details-api-parity.test.ts",
- "src/main/github/work-item-details-pr-files.test.ts",
- "src/main/github/work-item-search-pagination.test.ts",
- "src/main/gitlab/client-mr-listing.test.ts",
- "src/main/gitlab/client.test.ts",
- "src/main/gitlab/mappers-workitem.test.ts",
- "src/main/grok-accounts/status.test.ts",
- "src/main/grok/grok-hook-owners.test.ts",
- "src/main/hook-termination-real-process.test.ts",
- "src/main/ipc/ai-vault.test.ts",
- "src/main/ipc/crash-reporting-renderer-breadcrumbs.test.ts",
- "src/main/ipc/emulator-stream-listener-cleanup.test.ts",
- "src/main/ipc/filesystem-commit-message-generation.test.ts",
- "src/main/ipc/filesystem-commit-message-model-discovery.test.ts",
- "src/main/ipc/filesystem-import-ssh-ops.test.ts",
- "src/main/ipc/git-status-upstream-ref-watch-request.test.ts",
- "src/main/ipc/linear.test.ts",
- "src/main/ipc/local-log-tail-lifetime.test.ts",
- "src/main/ipc/mobile.test.ts",
- "src/main/ipc/notifications-permission-onboarding.test.ts",
- "src/main/ipc/parcel-watcher-disconnect-termination.test.ts",
- "src/main/ipc/parcel-watcher-event-delivery.test.ts",
- "src/main/ipc/parcel-watcher-shallow-subscription.test.ts",
- "src/main/ipc/preflight-wsl-command.test.ts",
- "src/main/ipc/pty-cumulative-ack-accounting.test.ts",
- "src/main/ipc/pty-daemon-spawn-agent-home-env.test.ts",
- "src/main/ipc/pty-delivery-health-heal.test.ts",
- "src/main/ipc/pty-pending-data-drain-scheduler-differential.test.ts",
- "src/main/ipc/pty-producer-flow-control.test.ts",
- "src/main/ipc/pty-renderer-send-failure-recovery.test.ts",
- "src/main/ipc/pty-runtime-ssh-binding-persistence.test.ts",
- "src/main/ipc/pty-spawn-env-codex-resume-provenance.test.ts",
- "src/main/ipc/pty-startup-barrier-ordering.test.ts",
- "src/main/ipc/pty/host-env/omp-launch-environment.test.ts",
- "src/main/ipc/pty/pane/stable-pane-relay-absence-respawn.test.ts",
- "src/main/ipc/readdir-error-diagnostics.test.ts",
- "src/main/ipc/remote-workspace.test.ts",
- "src/main/ipc/renderer-shutdown-checkpoint.test.ts",
- "src/main/ipc/repos-create.test.ts",
- "src/main/ipc/repos/remote-repo-registration.test.ts",
- "src/main/ipc/runtime-environment-transport-generation.test.ts",
- "src/main/ipc/runtime-environment-transport-routing-tailscale-hint.test.ts",
- "src/main/ipc/runtime-environments-subscription-teardown.test.ts",
- "src/main/ipc/ssh-disconnect-cancellation.test.ts",
- "src/main/ipc/ssh-pty-output-exit-deadline.test.ts",
- "src/main/ipc/ssh-pty-source-ack-session-contract.test.ts",
- "src/main/ipc/workspace-cleanup-broad-scan.test.ts",
- "src/main/ipc/worktree-head-identity-reader-incremental.test.ts",
- "src/main/ipc/worktree-head-identity-refresh.test.ts",
- "src/main/ipc/worktree-symlink-reconciliation.real.test.ts",
- "src/main/ipc/worktrees-create-metadata-persistence.test.ts",
- "src/main/ipc/worktrees-existing-branch-checkout.test.ts",
- "src/main/ipc/worktrees-ssh-base-ref-resolution.test.ts",
- "src/main/ipc/worktrees-ssh-local-base-refresh.test.ts",
- "src/main/ipc/worktrees-ssh-provider-authority.test.ts",
- "src/main/ipc/worktrees-ssh-setup-launch.test.ts",
- "src/main/ipc/worktrees-wsl-runtime-routing.test.ts",
- "src/main/ipc/worktrees/listing/register-sparse-checkout-cache-invalidation.test.ts",
- "src/main/jira/issues.test.ts",
- "src/main/jira/jira-search-abort.test.ts",
- "src/main/keybindings/keybinding-file.test.ts",
- "src/main/linear/issue-context-current.test.ts",
- "src/main/linear/issue-context-relations.test.ts",
- "src/main/linear/issue-list-filter.test.ts",
- "src/main/linear/linear-workspace-registry.test.ts",
- "src/main/linear/teams.test.ts",
- "src/main/menu/register-app-menu.test.ts",
- "src/main/muse/hook-config-json.test.ts",
- "src/main/native-chat/agent-session-journal/journal-legacy-import.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-history-byte-accounting.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-history-page-grouping-parity.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-forget-status.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff-flow-runner.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-handoff.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-holds.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-operation-settlement.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-proven-dead-retry.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-readable-restorer.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-restore-gate.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-status-reentry.test.ts",
- "src/main/native-chat/session-file-resolver-codex-roots.test.ts",
- "src/main/native-chat/transcript-line-decoders-codex-skill-context.test.ts",
- "src/main/native-chat/transcript-read-cache-refusal-recovery.test.ts",
- "src/main/native-chat/transcript-read-cache-wsl-stall.test.ts",
- "src/main/native-chat/transcript-turn-lifecycle.test.ts",
- "src/main/native-chat/transcript-watch-unflushed-settle.test.ts",
- "src/main/native-chat/transcript-watch-wsl-stall.test.ts",
- "src/main/notifications/notification-delivery-service.test.ts",
- "src/main/orca-profiles/profile-cloud-service-auth-retry.test.ts",
- "src/main/orca-profiles/profile-cloud-service-connect-overlap.test.ts",
- "src/main/orca-profiles/profile-cloud-service-refresh.test.ts",
- "src/main/orca-profiles/profile-project-session-field-disposition.test.ts",
- "src/main/orca-profiles/profile-project-session-state.test.ts",
- "src/main/orcad/external-chromium-browser-session.test.ts",
- "src/main/orcad/main-preflight-order.test.ts",
- "src/main/orcad/native-host-abi.test.ts",
- "src/main/orcad/orcad-native-preflight.test.ts",
- "src/main/persistence-pty-binding-leaf-tab-resolution.test.ts",
- "src/main/persistence-right-sidebar-tab.test.ts",
- "src/main/persistence-settings-update.test.ts",
- "src/main/persistence-ssh-lease-reattach-reclaim.test.ts",
- "src/main/persistence/restoring-sessions/session-owner-fields.test.ts",
- "src/main/persistence/tracking-repos/worktree-identity-migration-field-coverage.test.ts",
- "src/main/pi/agent-status-omp-approval-forwarding.test.ts",
- "src/main/pi/omp-transcript-metadata.test.ts",
- "src/main/plugins/plugin-audit-log.test.ts",
- "src/main/plugins/plugin-content-safety.test.ts",
- "src/main/plugins/plugin-host-methods.test.ts",
- "src/main/plugins/plugin-kill-list-service.test.ts",
- "src/main/project-groups/nested-repo-discovery-queue.test.ts",
- "src/main/providers/local-pty-utils.test.ts",
- "src/main/providers/pty-repaint-wide-char-buffer.node-pty.test.ts",
- "src/main/providers/ssh-filesystem-dispatch.test.ts",
- "src/main/providers/ssh-git-provider-commit-message.test.ts",
- "src/main/providers/ssh-git-worktree-list-dedupe.test.ts",
- "src/main/providers/ssh-pty-relay-absence-verdict.test.ts",
- "src/main/providers/ssh-worktree-catalog-authority.test.ts",
- "src/main/providers/stable-foreground-process.test.ts",
- "src/main/providers/windows-cached-agent-revalidation.test.ts",
- "src/main/providers/windows-foreground-process-inspection-cost.test.ts",
- "src/main/providers/windows-foreground-process-rows.test.ts",
- "src/main/provisioned-root-ssh-adoption.test.ts",
- "src/main/pty-descendant-exit-verification.test.ts",
- "src/main/pty/conda-activation-env.test.ts",
- "src/main/pty/node-pty-master-fd-retirement.test.ts",
- "src/main/pty/node-pty-self-exit-pseudoconsole-close.test.ts",
- "src/main/pty/posix-pty-process-groups.integration.test.ts",
- "src/main/pty/wsl-orca-env.test.ts",
- "src/main/rate-limits/claude-usage-refresh-plan.test.ts",
- "src/main/rate-limits/codex-fetcher-rpc-exit-diagnostics.test.ts",
- "src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts",
- "src/main/rate-limits/grok-fetcher.test.ts",
- "src/main/repo-icon-source-href.test.ts",
- "src/main/runtime/agent-prompt-line-settle.test.ts",
- "src/main/runtime/agent-prompt-receipt-correlation.test.ts",
- "src/main/runtime/agent-session-process-identity-probe.test.ts",
- "src/main/runtime/agent-session-pty-write-enforcement.test.ts",
- "src/main/runtime/agent-session-recovery-publish-fault.test.ts",
- "src/main/runtime/agent-session-reservation-admission.test.ts",
- "src/main/runtime/antigravity-terminal-readiness.test.ts",
- "src/main/runtime/browser-host-capability-selection.test.ts",
- "src/main/runtime/browser-host-command-ledger-capacity.test.ts",
- "src/main/runtime/browser-host-page-reconciliation-executor.test.ts",
- "src/main/runtime/browser-host-page-reconciliation-plan.test.ts",
- "src/main/runtime/claude-agent-teams-shim-env.test.ts",
- "src/main/runtime/client-hosted-browser-row-hydration-census.test.ts",
- "src/main/runtime/client-hosted-page-reconciliation-hold.integration.test.ts",
- "src/main/runtime/host-terminal-close-persistence-durability.test.ts",
- "src/main/runtime/leaf-pty-verdict-expiry.test.ts",
- "src/main/runtime/managed-worktree-create-execution-host.test.ts",
- "src/main/runtime/mobile-agent-status-permission-renewal.test.ts",
- "src/main/runtime/mobile-notification-dismissal-read-failure.test.ts",
- "src/main/runtime/mobile-notification-replay.test.ts",
- "src/main/runtime/mobile-session-tabs-churn-coalescing.test.ts",
- "src/main/runtime/mobile-session-terminal-retirement-proof.test.ts",
- "src/main/runtime/orca-runtime-structured-agent-session-create-intent.test.ts",
- "src/main/runtime/orca-runtime-tail-wait-memo.test.ts",
- "src/main/runtime/orca-runtime-terminal-retirement.test.ts",
- "src/main/runtime/orchestration-mailbox-filtered-waiters.test.ts",
- "src/main/runtime/orchestration/coordinator-stale-base-flag.test.ts",
- "src/main/runtime/orchestration/db-task-dispatch-lifecycle-guards.test.ts",
- "src/main/runtime/orchestration/db/dispatch-depth.test.ts",
- "src/main/runtime/orchestration/db/messages/mailbox-consumer-lifecycle-fencing.test.ts",
- "src/main/runtime/orchestration/db/writer-run-required.test.ts",
- "src/main/runtime/orchestration/groups.test.ts",
- "src/main/runtime/orchestration/mailbox-pointer-stage.test.ts",
- "src/main/runtime/orchestration/mutation-receipt-capacity.test.ts",
- "src/main/runtime/orchestration/orchestration-version-skew-migration.test.ts",
- "src/main/runtime/pty-inventory-lifecycle-scope.test.ts",
- "src/main/runtime/pty-inventory-liveness-verdict.test.ts",
- "src/main/runtime/pty-inventory-partial-relay-liveness.test.ts",
- "src/main/runtime/public-ssh-state.test.ts",
- "src/main/runtime/push/push-dispatcher.test.ts",
- "src/main/runtime/push/push-registration-rpc.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-pane-reservation.test.ts",
- "src/main/runtime/rpc/methods/agent-session.test.ts",
- "src/main/runtime/rpc/methods/artifact-sharing-capability-grant.test.ts",
- "src/main/runtime/rpc/methods/artifacts.test.ts",
- "src/main/runtime/rpc/methods/browser-client-host.test.ts",
- "src/main/runtime/rpc/methods/browser-tab-create-schema.test.ts",
- "src/main/runtime/rpc/methods/computer-actions.test.ts",
- "src/main/runtime/rpc/methods/files-base64-padding.test.ts",
- "src/main/runtime/rpc/methods/files-path-search.test.ts",
- "src/main/runtime/rpc/methods/files-preview-transport-budget.test.ts",
- "src/main/runtime/rpc/methods/files-terminal-path-resolution.test.ts",
- "src/main/runtime/rpc/methods/linear.test.ts",
- "src/main/runtime/rpc/methods/native-chat-rpc-block-sanitize.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-lifecycle-settlement.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/check-delivery-history.test.ts",
- "src/main/runtime/rpc/methods/orchestration/runs/runs.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/composed-workers.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/fleet-status-terminal-identity.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/legacy-dispatch-projection.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/self-dispatch-nesting-depth.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/structured-worker-launch-seed-options.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-list-run-scope-rpc.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-stop-exit-race.test.ts",
- "src/main/runtime/rpc/methods/preflight.test.ts",
- "src/main/runtime/rpc/methods/session-tab-browser-placement-mutations.test.ts",
- "src/main/runtime/rpc/methods/session-tabs.test.ts",
- "src/main/runtime/rpc/methods/worktree-schemas.test.ts",
- "src/main/runtime/rpc/mobile-clipboard-image-provenance.test.ts",
- "src/main/runtime/rpc/mobile-e2ee-v2-desktop-session.test.ts",
- "src/main/runtime/rpc/orchestration-11745-regression-verification.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-coordinator-race.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-ack-overflow-recovery.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-flow-control.bench.test.ts",
- "src/main/runtime/runtime-browser-client-automation.test.ts",
- "src/main/runtime/runtime-client-settings-terminal-copy-projection.test.ts",
- "src/main/runtime/runtime-extraction-regressions.test.ts",
- "src/main/runtime/runtime-git-api-contract.test.ts",
- "src/main/runtime/runtime-git-command-target.test.ts",
- "src/main/runtime/runtime-git-conflict-operation-routing.test.ts",
- "src/main/runtime/runtime-git-status-admission.test.ts",
- "src/main/runtime/runtime-graph-reload-lifecycle.test.ts",
- "src/main/runtime/runtime-rpc-metadata-lifecycle.test.ts",
- "src/main/runtime/runtime-rpc-mobile-terminal-streaming.test.ts",
- "src/main/runtime/runtime-rpc-mobile-unknown-method-scope-refusal.test.ts",
- "src/main/runtime/runtime-rpc-request-authorization.test.ts",
- "src/main/runtime/runtime-worktree-agent-rows-structured.test.ts",
- "src/main/runtime/runtime-worktree-structured-agent-rows-liveness.test.ts",
- "src/main/runtime/saved-structured-agent-session-restoration.test.ts",
- "src/main/runtime/structured-agent-session-integration-replay.test.ts",
- "src/main/runtime/structured-tui-process-identity.test.ts",
- "src/main/runtime/structured-worker-agent-presence.test.ts",
- "src/main/runtime/terminal-interactive-wait-visibility.test.ts",
- "src/main/runtime/terminal-list-execution-host-scope.test.ts",
- "src/main/runtime/terminal-orphan-owner.test.ts",
- "src/main/runtime/terminal-query-responder.test.ts",
- "src/main/runtime/terminal-restore-record-seed.test.ts",
- "src/main/runtime/terminal-retirement-proof-emitted-frame.test.ts",
- "src/main/runtime/terminal-vertical-control-scan.test.ts",
- "src/main/runtime/windows-default-route-interfaces.test.ts",
- "src/main/runtime/workspace-session-worktree-id.test.ts",
- "src/main/runtime/worktree-list-host-scope.test.ts",
- "src/main/runtime/worktree-ps-host-scope.test.ts",
- "src/main/skills/skill-bundle-artifacts.test.ts",
- "src/main/skills/skill-bundle-ssh-relay-service.test.ts",
- "src/main/skills/skill-cloud-direct-upload.test.ts",
- "src/main/skills/skill-cloud-install-target.test.ts",
- "src/main/skills/skill-delete/service.test.ts",
- "src/main/skills/skill-discovery-concurrency.test.ts",
- "src/main/skills/skill-discovery-wsl-alias-sharing.test.ts",
- "src/main/skills/skill-install-discovery-verification.test.ts",
- "src/main/skills/skill-install-lock.test.ts",
- "src/main/skills/skill-operation-observability.test.ts",
- "src/main/skills/skill-package-identity.test.ts",
- "src/main/skills/skill-placement-alias-repair.test.ts",
- "src/main/skills/skill-placement-reconciliation.test.ts",
- "src/main/skills/skill-placement-transaction.test.ts",
- "src/main/skills/skill-remote-install-cancellation.test.ts",
- "src/main/skills/skill-share-preparation-service.test.ts",
- "src/main/skills/skill-windows-rename-contention.integration.test.ts",
- "src/main/source-control/hosted-review-gitea.integration.test.ts",
- "src/main/speech/model-manager-windows-path.test.ts",
- "src/main/ssh/relay-socket-path-limit-shell.integration.test.ts",
- "src/main/ssh/sftp-stream-late-error.test.ts",
- "src/main/ssh/ssh-agent-identity-filter.test.ts",
- "src/main/ssh/ssh-channel-multiplexer.test.ts",
- "src/main/ssh/ssh-config-alias-claim.test.ts",
- "src/main/ssh/ssh-config-parser-host-patterns.test.ts",
- "src/main/ssh/ssh-connection-manager.test.ts",
- "src/main/ssh/ssh-connection.test.ts",
- "src/main/ssh/ssh-control-socket.test.ts",
- "src/main/ssh/ssh-g-config-resolution.test.ts",
- "src/main/ssh/ssh-known-hosts-source.test.ts",
- "src/main/ssh/ssh-pty-consumer-recovery.test.ts",
- "src/main/ssh/ssh-pty-retired-source-deliveries.test.ts",
- "src/main/ssh/ssh-reconnect-ladder.test.ts",
- "src/main/ssh/ssh-relay-bundled-ripgrep.docker.test.ts",
- "src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts",
- "src/main/ssh/ssh-relay-deploy-staged-upload.test.ts",
- "src/main/ssh/ssh-relay-gc-retry.test.ts",
- "src/main/ssh/ssh-relay-native-deps-cache.test.ts",
- "src/main/ssh/ssh-relay-sentinel-copy-budget.test.ts",
- "src/main/ssh/ssh-relay-session-rejected-delivery.test.ts",
- "src/main/ssh/ssh-relay-sftp-namespace-install.test.ts",
- "src/main/ssh/ssh-remote-orchestration-compatibility.test.ts",
- "src/main/ssh/system-ssh-windows-upload.test.ts",
- "src/main/startup/login-shell-environment-cache.test.ts",
- "src/main/startup/pre-gone-crash-sampling-wiring.test.ts",
- "src/main/startup/renderer-heap-headroom.test.ts",
- "src/main/startup/windows-shell-path-hydration.test.ts",
- "src/main/startup/windows-user-data-acl.test.ts",
- "src/main/system-power-lifecycle.test.ts",
- "src/main/telemetry/classify-error.test.ts",
- "src/main/telemetry/client-lifecycle.test.ts",
- "src/main/text-generation/commit-message-command-backslash-mode.test.ts",
- "src/main/tray/tray-attention-icon.test.ts",
- "src/main/updater.mac-install.test.ts",
- "src/main/usage/highest-usage-key.test.ts",
- "src/main/warp-themes/discovery.test.ts",
- "src/main/warp-themes/index.test.ts",
- "src/main/warp-themes/manual-warp-theme-files.test.ts",
- "src/main/win32-utils-async-acl.test.ts",
- "src/main/window/attach-main-window-services.test.ts",
- "src/main/window/clipboard-file-copy.test.ts",
- "src/main/window/clipboard-remote-file-copy.test.ts",
- "src/main/window/createMainWindow-renderer-crash-recovery.test.ts",
- "src/main/window/createMainWindow-tray-minimize-close.test.ts",
- "src/main/window/main-window-webview-security.test.ts",
- "src/main/window/runtime-renderer-notification-sender.test.ts",
- "src/main/windows-live-tree-kill.win32.test.ts",
- "src/main/windows/windows-process-table.test.ts",
- "src/main/workspace-space-repo-scan.test.ts",
- "src/main/worktree-archive-hook-cannot-run.test.ts",
- "src/main/worktree-create-base-prefetch.test.ts",
- "src/main/worktree-create-preparation.test.ts",
- "src/main/worktree-metadata-ownership.test.ts",
- "src/main/worktree-retirement-backfill-scan.test.ts",
- "src/main/wsl-availability-missing-kernel.test.ts",
- "src/main/wsl-fish-history-cleanup.test.ts",
- "src/main/wsl.test.ts",
- "src/main/wsl/wsl-probe-failure-semantics.test.ts",
- "src/preload/doc-preview-link-interception.test.ts",
- "src/preload/renderer-process-memory-reader.test.ts",
- "src/relay/agent-exec-handler.test.ts",
- "src/relay/agent-status-store-relay-context.test.ts",
- "src/relay/dispatcher-silent-client-reaper.test.ts",
- "src/relay/fs-handler-file-range-dispatch.test.ts",
- "src/relay/fs-handler-list-files-ignored.test.ts",
- "src/relay/fs-handler-readdir-fallback.test.ts",
- "src/relay/fs-list-files-cancel.integration.test.ts",
- "src/relay/git-handler-submodule-status-cancellation.test.ts",
- "src/relay/git-status-upstream-negative-cache.test.ts",
- "src/relay/managed-hook-installer.test.ts",
- "src/relay/pty-handler-output-streaming.test.ts",
- "src/relay/pty-handler-spawn-cwd.test.ts",
- "src/relay/pty-shell-launch.test.ts",
- "src/relay/relay-hot-path-operation-counts.test.ts",
- "src/relay/relay-launch-options.test.ts",
- "src/relay/relay-pty-source-exit-publication.test.ts",
- "src/relay/remote-cli-env.test.ts",
- "src/relay/remote-cli-timeout.test.ts",
- "src/relay/retired-pane-surfaces.test.ts",
- "src/relay/rotating-log-writer.test.ts",
- "src/relay/ssh-pty-consumer-session-adapter.test.ts",
- "src/relay/terminal-history.test.ts",
- "src/renderer/src/app-shell/startup-actions-selector.test.ts",
- "src/renderer/src/components/UpdateCard.test.ts",
- "src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx",
- "src/renderer/src/components/WorktreeJumpPalette.recent-tabs.behavior.test.tsx",
- "src/renderer/src/components/WorktreeJumpPalette.recent-tabs.test.tsx",
- "src/renderer/src/components/activity/ActivityPrototypePage.test.ts",
- "src/renderer/src/components/activity/ActivityThreadOptionsMenu.test.tsx",
- "src/renderer/src/components/activity/activity-clear-completed-hmr.test.ts",
- "src/renderer/src/components/activity/activity-portal-readiness-loop.react185.test.tsx",
- "src/renderer/src/components/activity/activity-thread-list-pane-collapsible.test.tsx",
- "src/renderer/src/components/activity/use-activity-thread-action-bindings.test.tsx",
- "src/renderer/src/components/agent/agent-combobox-command-state.test.ts",
- "src/renderer/src/components/automations/AutomationDestinationField.test.tsx",
- "src/renderer/src/components/automations/AutomationHostBadges.test.tsx",
- "src/renderer/src/components/automations/automation-authority-identity.test.ts",
- "src/renderer/src/components/automations/automation-host-picker-groups.test.ts",
- "src/renderer/src/components/automations/automation-list-empty-state.test.ts",
- "src/renderer/src/components/automations/automation-list-row-identity.test.ts",
- "src/renderer/src/components/automations/automation-run-open-target.test.ts",
- "src/renderer/src/components/automations/automation-target-availability.test.ts",
- "src/renderer/src/components/automations/use-automation-host-catalog-readoption.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.dead-guest.test.tsx",
- "src/renderer/src/components/browser-pane/ReopenBrowserPageOnServerButton.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/browser-page-annotation-tray.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/markup-screenshot-compose.test.ts",
- "src/renderer/src/components/browser-pane/annotate/use-markup-draw-hint.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-deferred-lifecycle.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-import-hint-visibility.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/use-browser-page-find-shortcuts.test.tsx",
- "src/renderer/src/components/browser-pane/browser-client-page-metadata-route-census.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/browser-artifact-upload.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/browser-favicon-url.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-guest-worktree-retention.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-viewport.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-webview.test.ts",
- "src/renderer/src/components/browser-pane/navigate/browser-page-download-activity.test.ts",
- "src/renderer/src/components/browser-pane/navigate/chromium-error-page-poll-visibility.test.ts",
- "src/renderer/src/components/browser-pane/restored-client-hosted-recovery-window.test.tsx",
- "src/renderer/src/components/browser-pane/workspace-doc/workspace-doc-page-pane.test.tsx",
- "src/renderer/src/components/cmd-j/palette-query-tokens.test.ts",
- "src/renderer/src/components/cmd-j/palette-results.test.ts",
- "src/renderer/src/components/codex-restart-chip.test.tsx",
- "src/renderer/src/components/contextual-tours/ContextualTourOverlay.test.tsx",
- "src/renderer/src/components/dashboard-popout/AgentKanbanBoard.test.tsx",
- "src/renderer/src/components/dashboard-popout/AgentTerminalDialog.test.tsx",
- "src/renderer/src/components/dashboard-popout/AgentTerminalPreview.test.tsx",
- "src/renderer/src/components/dashboard-popout/preview-terminal-shortcuts.test.ts",
- "src/renderer/src/components/dashboard/agent-dashboard-performance-isolation.test.ts",
- "src/renderer/src/components/diff-comments/diff-comment-zone-mouse-events.test.ts",
- "src/renderer/src/components/diff-comments/useDiffCommentDecorator.range-selection.test.tsx",
- "src/renderer/src/components/editor/EditorContent.test.tsx",
- "src/renderer/src/components/editor/ExternalFileChangeCompareDialog.test.tsx",
- "src/renderer/src/components/editor/RichMarkdownErrorBoundary.lazy-chunk.test.tsx",
- "src/renderer/src/components/editor/RichMarkdownSlashMenu.test.tsx",
- "src/renderer/src/components/editor/check-annotation-path.test.ts",
- "src/renderer/src/components/editor/check-run-clipboard-text.test.ts",
- "src/renderer/src/components/editor/check-run-details-tab.test.ts",
- "src/renderer/src/components/editor/closed-editor-model-reentrancy.test.ts",
- "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-collapsed-work.test.tsx",
- "src/renderer/src/components/editor/diff-monaco-model-disposal.test.ts",
- "src/renderer/src/components/editor/diff-section-preview.test.ts",
- "src/renderer/src/components/editor/editor-content-dirty-state.test.ts",
- "src/renderer/src/components/editor/editor-file-save-attempt.test.ts",
- "src/renderer/src/components/editor/editor-header-file-rename.test.ts",
- "src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts",
- "src/renderer/src/components/editor/editor-self-write-registry.test.ts",
- "src/renderer/src/components/editor/markdown-reference-link-normalization.test.ts",
- "src/renderer/src/components/editor/monaco-codebase-search.test.ts",
- "src/renderer/src/components/editor/monaco-content-sync.undo-history.test.ts",
- "src/renderer/src/components/editor/monaco-find-options.test.ts",
- "src/renderer/src/components/editor/pdf-js-document-options.test.ts",
- "src/renderer/src/components/editor/rich-markdown-doc-link.test.ts",
- "src/renderer/src/components/editor/rich-markdown-local-image.test.ts",
- "src/renderer/src/components/editor/rich-markdown-range-bounds.test.ts",
- "src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts",
- "src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts",
- "src/renderer/src/components/editor/rich-markdown-review-text-ranges.test.ts",
- "src/renderer/src/components/editor/rich-markdown-search-matches-cache.test.ts",
- "src/renderer/src/components/editor/rich-markdown-search.test.ts",
- "src/renderer/src/components/editor/rich-markdown-table-control-layout.test.ts",
- "src/renderer/src/components/editor/useEditorPanelHostUnresolvedContentState.test.tsx",
- "src/renderer/src/components/editor/useIpynbDocumentEditing.test.tsx",
- "src/renderer/src/components/emulator-pane/use-emulator-pane-session.test.tsx",
- "src/renderer/src/components/emulator-pane/use-mobile-emulator-tab-intro-actions.test.tsx",
- "src/renderer/src/components/feature-tips/CmdJPaletteFeatureTipVisual.test.tsx",
- "src/renderer/src/components/feature-wall/feature-wall-setup-checklist-localized-copy.test.ts",
- "src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx",
- "src/renderer/src/components/github-checks-tab-state.test.ts",
- "src/renderer/src/components/github-project/project-picker-input.test.ts",
- "src/renderer/src/components/github-project/project-visible-table-cache.test.ts",
- "src/renderer/src/components/linear-issue-workspace-header.test.ts",
- "src/renderer/src/components/linear-scope-selector.test.ts",
- "src/renderer/src/components/native-chat/NativeChatBackgroundTaskRun.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatBackgroundTasksStatus.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageRow.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatStructuredSession.transport-probe.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatToolRun.ask-row.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatToolRun.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatTranscriptChrome.test.tsx",
- "src/renderer/src/components/native-chat/StructuredAgentSessionPaneOverlayLayer.test.tsx",
- "src/renderer/src/components/native-chat/claude-model-switch-confirmation.test.ts",
- "src/renderer/src/components/native-chat/claude-terminal-session-options.test.ts",
- "src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts",
- "src/renderer/src/components/native-chat/native-chat-composer-drop-scope.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-incremental-assembler.test.ts",
- "src/renderer/src/components/native-chat/native-chat-interactive-prompt.test.ts",
- "src/renderer/src/components/native-chat/native-chat-runtime-send.test.ts",
- "src/renderer/src/components/native-chat/native-chat-send.test.ts",
- "src/renderer/src/components/native-chat/native-chat-session-option-labels.test.ts",
- "src/renderer/src/components/native-chat/native-chat-shortcut.test.ts",
- "src/renderer/src/components/native-chat/native-chat-thread-goal-rows.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-file-link-click.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-interactive-send.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-retained-session.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-session-option-command.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-skills.react.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-structured-composer-send.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-read.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-transport.test.tsx",
- "src/renderer/src/components/new-workspace/ProjectCombobox.dialog-handoff.test.tsx",
- "src/renderer/src/components/new-workspace/ProjectCombobox.test.tsx",
- "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-source-boundaries.test.ts",
- "src/renderer/src/components/new-workspace/smart-workspace-source-results.test.ts",
- "src/renderer/src/components/onboarding/OnboardingInlineCommandTerminal.command-finished.test.tsx",
- "src/renderer/src/components/onboarding/ThemeStep.test.ts",
- "src/renderer/src/components/onboarding/onboarding-folder-agent-startup.test.ts",
- "src/renderer/src/components/pet/PetOverlay.pointer-interaction.test.tsx",
- "src/renderer/src/components/pet/sprite-animation-css.test.ts",
- "src/renderer/src/components/pull-request-page/mentions/options.test.ts",
- "src/renderer/src/components/repo/repo-icon.test.tsx",
- "src/renderer/src/components/right-sidebar/AiVaultPanelHeader.focus.test.tsx",
- "src/renderer/src/components/right-sidebar/AiVaultSessionRow.test.tsx",
- "src/renderer/src/components/right-sidebar/CommitArea.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerToolbar.test.tsx",
- "src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.commit-drafts.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControl.hosted-review-header-link.test.tsx",
- "src/renderer/src/components/right-sidebar/activity-bar-buttons.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-session-continuation.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-resume-in-chat-launch.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-inline-input-outside-click.test.tsx",
- "src/renderer/src/components/right-sidebar/file-explorer-keyboard-navigation.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-reset.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-row-projection.test.ts",
- "src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts",
- "src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts",
- "src/renderer/src/components/right-sidebar/right-panel-comment-composer.ime-enter.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control-actions.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-commit-message-rows.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-create-review-blocked-action.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-tree.test.ts",
- "src/renderer/src/components/right-sidebar/source-control/commit/source-control-entry-failure-toast.test.ts",
- "src/renderer/src/components/right-sidebar/status-display.test.ts",
- "src/renderer/src/components/right-sidebar/use-file-explorer-name-filter.test.ts",
- "src/renderer/src/components/right-sidebar/useFileExplorerHandlers.test.ts",
- "src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts",
- "src/renderer/src/components/right-sidebar/useHostedReviewStackParent.test.tsx",
- "src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts",
- "src/renderer/src/components/settings/AdvancedPane.test.tsx",
- "src/renderer/src/components/settings/AppearancePane.test.tsx",
- "src/renderer/src/components/settings/CliSection.install-failure.test.tsx",
- "src/renderer/src/components/settings/FloatingWorkspacePane.test.tsx",
- "src/renderer/src/components/settings/GeneralPane.test.ts",
- "src/renderer/src/components/settings/NotificationsPane.test.tsx",
- "src/renderer/src/components/settings/SessionHistoryComputerRow.test.tsx",
- "src/renderer/src/components/settings/Settings.load-performance.test.ts",
- "src/renderer/src/components/settings/SourceControlActionRepoOverrideNote.test.tsx",
- "src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx",
- "src/renderer/src/components/settings/developer-permissions-search.test.ts",
- "src/renderer/src/components/settings/plugin-install-source.test.ts",
- "src/renderer/src/components/settings/settings-project-list.test.ts",
- "src/renderer/src/components/settings/ssh-target-save-payload.test.ts",
- "src/renderer/src/components/settings/use-session-search-status.test.tsx",
- "src/renderer/src/components/setup-guide/SetupGuideModal.mount-gating.test.tsx",
- "src/renderer/src/components/shared/kill-all-terminal-surfaces.test.ts",
- "src/renderer/src/components/shared/useDaemonActions.test.tsx",
- "src/renderer/src/components/sidebar/AddRepoCreateStep.test.tsx",
- "src/renderer/src/components/sidebar/DeleteWorktreeDialog.host-context-boundary.test.ts",
- "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.reminder-toast.test.tsx",
- "src/renderer/src/components/sidebar/ProjectHeaderActions.test.tsx",
- "src/renderer/src/components/sidebar/RemoveFolderDialog.test.tsx",
- "src/renderer/src/components/sidebar/Sidebar.test.tsx",
- "src/renderer/src/components/sidebar/SidebarNav.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.mount-gating.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardMeta.interaction.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardPorts.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts",
- "src/renderer/src/components/sidebar/WorktreeList.empty-project-rows.test.ts",
- "src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx",
- "src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts",
- "src/renderer/src/components/sidebar/host-rename-remove.test.ts",
- "src/renderer/src/components/sidebar/linear-agent-skill-runtime.shell-override.test.ts",
- "src/renderer/src/components/sidebar/pinned-section-worktrees.test.ts",
- "src/renderer/src/components/sidebar/sidebar-project-drop.test.ts",
- "src/renderer/src/components/sidebar/sleep-worktree-flow.test.ts",
- "src/renderer/src/components/sidebar/truncated-sidebar-label.test.tsx",
- "src/renderer/src/components/sidebar/use-add-repo-host-selection.test.ts",
- "src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.test.ts",
- "src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts",
- "src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts",
- "src/renderer/src/components/sidebar/useWorkspaceBoardPanel.test.tsx",
- "src/renderer/src/components/sidebar/visible-worktrees.test.ts",
- "src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts",
- "src/renderer/src/components/sidebar/workspace-kanban-search.test.ts",
- "src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts",
- "src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts",
- "src/renderer/src/components/sidebar/workspace-status.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-compact-agent-row.stable-message.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/rows/indentation.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/viewport/sticky-headers.test.ts",
- "src/renderer/src/components/sidebar/worktree-sidebar-reveal.test.ts",
- "src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts",
- "src/renderer/src/components/skills/SkillFreshnessStatusPill.test.tsx",
- "src/renderer/src/components/skills/skill-delete-copy.test.ts",
- "src/renderer/src/components/skills/skill-package-digest.test.ts",
- "src/renderer/src/components/skills/skill-share-preview-summary.test.ts",
- "src/renderer/src/components/skills/skill-source-inventory.test.ts",
- "src/renderer/src/components/source-control/SourceControlActionVariableChips.test.tsx",
- "src/renderer/src/components/status-bar/PetStatusSegment.layout.test.ts",
- "src/renderer/src/components/status-bar/codex-restart-status-summary.test.ts",
- "src/renderer/src/components/status-bar/ports-status-popover-rows.test.tsx",
- "src/renderer/src/components/status-bar/resource-manager-terminal-copy.test.ts",
- "src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts",
- "src/renderer/src/components/status-bar/workspace-space-breakdown-list.test.tsx",
- "src/renderer/src/components/tab-bar/ClientHostedBrowserTabRows.test.tsx",
- "src/renderer/src/components/tab-bar/EditorFileTabContextMenu.test.tsx",
- "src/renderer/src/components/tab-bar/TabBar.context-menu.test.ts",
- "src/renderer/src/components/tab-bar/TabBarCreateEntry.history.test.tsx",
- "src/renderer/src/components/tab-bar/TabBarQuickCommandsMenu.keyboard.test.ts",
- "src/renderer/src/components/tab-bar/editor-tab-local-open-guard.test.ts",
- "src/renderer/src/components/tab-bar/native-chat-tab-agent-evidence.test.ts",
- "src/renderer/src/components/tab-bar/open-tab-search.test.ts",
- "src/renderer/src/components/tab-bar/recent-tab-switching.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-classifier.runtime-listing.test.tsx",
- "src/renderer/src/components/tab-bar/tab-create-entry-history-placement.test.ts",
- "src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts",
- "src/renderer/src/components/tab-group/tab-drag-retained-guest-passthrough.test.tsx",
- "src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts",
- "src/renderer/src/components/task-page-cache-selectors.test.ts",
- "src/renderer/src/components/task-page-empty-state.test.ts",
- "src/renderer/src/components/task-page-github-dialog-state-authority.test.ts",
- "src/renderer/src/components/task-page-github-status-actions.test.ts",
- "src/renderer/src/components/task-page-github-task-kind.test.ts",
- "src/renderer/src/components/task-page-github-work-item-mutations.test.ts",
- "src/renderer/src/components/task-page-jira-sorting.test.ts",
- "src/renderer/src/components/terminal-pane/CloseTerminalDialog.test.tsx",
- "src/renderer/src/components/terminal-pane/PinnedTabCloseDialog.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-attention-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-hook-title-precedence.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-poll-interval.test.ts",
- "src/renderer/src/components/terminal-pane/agent-completion-stale-evidence-backoff.test.ts",
- "src/renderer/src/components/terminal-pane/focused-pane-rim-flash.test.ts",
- "src/renderer/src/components/terminal-pane/issue-4631-terminal-hover-link-provider.repro.test.ts",
- "src/renderer/src/components/terminal-pane/keyboard-handlers.test.ts",
- "src/renderer/src/components/terminal-pane/manual-terminal-worktree-park-eligibility.test.ts",
- "src/renderer/src/components/terminal-pane/merge-captured-leaf-state.test.ts",
- "src/renderer/src/components/terminal-pane/mobile-driver-overlay-focus.test.ts",
- "src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.test.ts",
- "src/renderer/src/components/terminal-pane/parked-terminal-buffer-capture.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-sampling.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-backlog-reconciliation.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-query-snapshot-restore.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-snapshot-live-overlap.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-snapshot-resize-signals.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hidden-tui-snapshot-replay.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-renderer-risk-repaint.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-replay-payload-handling.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/reattach-result-handler-park-reveal-verdict.test.ts",
- "src/renderer/src/components/terminal-pane/pty-dispatcher-delivery-interest.test.ts",
- "src/renderer/src/components/terminal-pane/pty-pre-handler-buffer.test.ts",
- "src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-input-write.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-reattach-admission.test.ts",
- "src/renderer/src/components/terminal-pane/remote-hidden-output-restore-outcomes.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-connect-failure-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-attach-subscription.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-host-session-launch.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-fallback.test.ts",
- "src/renderer/src/components/terminal-pane/shutdown-buffer-captures.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-clipboard-paste.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-image-path.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-write-failure.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-hidden-restore-scrollback.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-http-link-activation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-http-link-source-owner.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-composition-route.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-composition-tracker.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-deferred-newline.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ios-hangul-preedit-device-trace.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-open-hints.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-osc-file-targets.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-linkifier-click-priming.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-notification-state.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-hook-order-parity.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-park-verdict-flip-telemetry.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-tab-eviction-exemption.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-tab-watchers-batch-sync.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-operation-order.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-restored-viewport.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-url-link-click.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-webgl-diagnostics-breadcrumbs.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-file-drop.test.ts",
- "src/renderer/src/components/terminal-pane/use-visible-terminal-tab-claim.test.ts",
- "src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx",
- "src/renderer/src/components/terminal-search-decoration-leak.test.ts",
- "src/renderer/src/components/terminal/activation-deferred-tab-admission.test.ts",
- "src/renderer/src/components/terminal/background-terminal-worktree-visibility.test.ts",
- "src/renderer/src/components/terminal/cold-activation-deferral-stranding.test.ts",
- "src/renderer/src/components/terminal/terminal-close-copy-kind.test.ts",
- "src/renderer/src/components/terminal/terminal-provider-snapshot-bound-pty-ids.test.ts",
- "src/renderer/src/components/terminal/terminal-provider-snapshot-capability-resettlement.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-actions.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-bulk-actions.test.ts",
- "src/renderer/src/components/ui/repo-multi-combobox.test.ts",
- "src/renderer/src/components/virtualized-list.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-removal-candidates.test.ts",
- "src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts",
- "src/renderer/src/hooks/agent-hook-completion-notifications.test.ts",
- "src/renderer/src/hooks/agent-hook-completion-store-sync.test.ts",
- "src/renderer/src/hooks/composer-state/composer-drop-listener.test.ts",
- "src/renderer/src/hooks/installed-agent-skill-runtime-eviction.test.ts",
- "src/renderer/src/hooks/ipc-tab-switch-group-order-hydration.test.ts",
- "src/renderer/src/hooks/ipc-tab-switch.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-local-tab-survival.test.ts",
- "src/renderer/src/hooks/shortcut-label-cache.test.tsx",
- "src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts",
- "src/renderer/src/hooks/useEditorExternalWatch-subscriptions.test.tsx",
- "src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts",
- "src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx",
- "src/renderer/src/hooks/useIpcEvents-agent-status-queue-ordering.test.ts",
- "src/renderer/src/hooks/useIpcEvents-terminal-create-surfacing.test.ts",
- "src/renderer/src/hooks/useMacosTccPromptNotice.test.tsx",
- "src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx",
- "src/renderer/src/hooks/useVirtualizedScrollAnchor.marks-restore-signal.test.ts",
- "src/renderer/src/hooks/worktree-head-identity-apply.test.ts",
- "src/renderer/src/i18n/I18nProvider.test.tsx",
- "src/renderer/src/i18n/integration-card-status-localization.test.ts",
- "src/renderer/src/i18n/settings-status-label-localization.test.ts",
- "src/renderer/src/lazy-use-ref-ratchet.test.ts",
- "src/renderer/src/lib/active-agent-note-send-runtime-error-codes.test.ts",
- "src/renderer/src/lib/active-view-persist.test.ts",
- "src/renderer/src/lib/agent-draft-readiness.test.ts",
- "src/renderer/src/lib/agent-followup-delivery.test.ts",
- "src/renderer/src/lib/agent-launch-caller-permissions.test.ts",
- "src/renderer/src/lib/agent-launch-route-input.test.ts",
- "src/renderer/src/lib/agent-resume-launch-target.test.ts",
- "src/renderer/src/lib/ai-vault-resume-shell.test.ts",
- "src/renderer/src/lib/ai-vault-session-drag.test.ts",
- "src/renderer/src/lib/browser-palette-page-entries.test.ts",
- "src/renderer/src/lib/codex-account-display-label.test.ts",
- "src/renderer/src/lib/comment-body-line-count.test.ts",
- "src/renderer/src/lib/composer-submit-cancellation.test.ts",
- "src/renderer/src/lib/direct-ssh-reconnect-product-telemetry.test.ts",
- "src/renderer/src/lib/direct-ssh-target-scope.test.ts",
- "src/renderer/src/lib/ensure-simulator-tab-behavior.test.ts",
- "src/renderer/src/lib/finished-agent-resume-resurrection.test.ts",
- "src/renderer/src/lib/floating-workspace-tour-interaction-snapshot.test.ts",
- "src/renderer/src/lib/folder-workspace-path-status.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-resume.test.ts",
- "src/renderer/src/lib/host-mirrored-pane-resume-replay.test.ts",
- "src/renderer/src/lib/http-link-destinations.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-cwd.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts",
- "src/renderer/src/lib/lazy-with-retry.right-sidebar-syntax-error.test.ts",
- "src/renderer/src/lib/left-sidebar-appearance.test.ts",
- "src/renderer/src/lib/local-path-open-guard.test.ts",
- "src/renderer/src/lib/monaco-languages/register-shell-markdown-aliases.test.ts",
- "src/renderer/src/lib/native-chat-transcript-readability.test.ts",
- "src/renderer/src/lib/notes-send-agent-targets.test.ts",
- "src/renderer/src/lib/open-markdown-in-floating-workspace.test.ts",
- "src/renderer/src/lib/pane-manager/client-hosted-browser-row-state.test.ts",
- "src/renderer/src/lib/pane-manager/pane-container-listener-lifecycle.test.ts",
- "src/renderer/src/lib/pane-manager/pane-divider-capture-loss.test.ts",
- "src/renderer/src/lib/pane-manager/pane-inline-image-recovery.test.ts",
- "src/renderer/src/lib/pane-manager/pane-lifecycle.test.ts",
- "src/renderer/src/lib/pane-manager/pane-scroll.test.ts",
- "src/renderer/src/lib/pane-manager/pane-split-close.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-foreground-render-settle.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-ime-anchor.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-scroll-intent.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-webgl-hidden-retention.test.ts",
- "src/renderer/src/lib/pending-worktree-creation.test.ts",
- "src/renderer/src/lib/pi-session-resume-wake.test.ts",
- "src/renderer/src/lib/project-host-workspace-target.test.ts",
- "src/renderer/src/lib/react-commit-cascade-observer.react185.test.tsx",
- "src/renderer/src/lib/resume-stale-structured-agent-session.test.ts",
- "src/renderer/src/lib/serve-desktop-promotion-session-continuity.test.ts",
- "src/renderer/src/lib/source-control-agent-action-plan.test.ts",
- "src/renderer/src/lib/source-control-launch-platform.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-join-delivery.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-persistence.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-resume-identity.test.ts",
- "src/renderer/src/lib/terminal-pane-title-sanitization.test.ts",
- "src/renderer/src/lib/titlebar-left-chrome.test.ts",
- "src/renderer/src/lib/typing-latency/echo-instrumentation.test.ts",
- "src/renderer/src/lib/use-tab-agent.test.ts",
- "src/renderer/src/lib/workspace-doc-address-input.test.ts",
- "src/renderer/src/lib/workspace-emoji-shortcodes.test.ts",
- "src/renderer/src/lib/workspace-session-host-split.test.ts",
- "src/renderer/src/lib/workspace-session.test.ts",
- "src/renderer/src/lib/workspace-tab-palette-activation.store.test.ts",
- "src/renderer/src/lib/worktree-activation-automation-filter.test.ts",
- "src/renderer/src/lib/worktree-activation-pty-inventory.test.ts",
- "src/renderer/src/lib/worktree-activation-setup-script.test.ts",
- "src/renderer/src/lib/worktree-activity-state.test.ts",
- "src/renderer/src/lib/worktree-creation-chat-setup.test.ts",
- "src/renderer/src/lib/worktree-creation-flow-agent-trust-preflight.test.ts",
- "src/renderer/src/lib/worktree-creation-flow-stranded-surface.test.ts",
- "src/renderer/src/lib/worktree-creation-flow.test.ts",
- "src/renderer/src/lib/worktree-jump-navigation.test.ts",
- "src/renderer/src/lib/worktree-palette-create-action.test.ts",
- "src/renderer/src/lib/worktree-palette-task-url-match.test.ts",
- "src/renderer/src/lib/worktree-runtime-owner-index.detected-perf.test.ts",
- "src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts",
- "src/renderer/src/runtime/agent-resume-host-authority-capability.test.ts",
- "src/renderer/src/runtime/browser-workspace-tab-close-census.test.ts",
- "src/renderer/src/runtime/client-hosted-browser-row-close.test.ts",
- "src/renderer/src/runtime/host-session-mirror-empty-inventory-settle.test.ts",
- "src/renderer/src/runtime/remote-runtime-terminal-stale-stream-frames.test.ts",
- "src/renderer/src/runtime/restored-client-hosted-browser-host-attach.test.ts",
- "src/renderer/src/runtime/runtime-path-existence-pairing.test.ts",
- "src/renderer/src/runtime/runtime-repo-search-bounds.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-conversion-publish.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-projection-hot-path.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-terminal-surface-projection.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-staged-hosting-intent.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-placement-staleness.test.ts",
- "src/renderer/src/runtime/web-runtime-session-tab-props.test.ts",
- "src/renderer/src/runtime/web-runtime-session-terminal-legacy-create.test.ts",
- "src/renderer/src/runtime/web-session-structured-tab-focus.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-editor-tabs.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-emptied-workspace-tombstone.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-focus-intent.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync/mirrored-terminal-recovery-ledger.test.ts",
- "src/renderer/src/runtime/web-session-terminal-handle-events.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery-regressions.test.ts",
- "src/renderer/src/store/active-terminal-chrome-selector.test.ts",
- "src/renderer/src/store/github/refresh-event-noop-notification.test.ts",
- "src/renderer/src/store/projects/project-catalog-null-field-ingest.test.ts",
- "src/renderer/src/store/projects/project-wsl-filesystem-boundary-advisory.test.ts",
- "src/renderer/src/store/running-terminal-close-confirm.test.ts",
- "src/renderer/src/store/slices/agent-status-drop.test.ts",
- "src/renderer/src/store/slices/agent-status-pr-refresh-handoff.test.ts",
- "src/renderer/src/store/slices/agent-status-quit-capture.test.ts",
- "src/renderer/src/store/slices/browser-remote-tab-creation.test.ts",
- "src/renderer/src/store/slices/browser.test.ts",
- "src/renderer/src/store/slices/codex-restart-notice-lifecycle.test.ts",
- "src/renderer/src/store/slices/detected-agents.test.ts",
- "src/renderer/src/store/slices/direct-ssh-pane-detach-ledger.test.ts",
- "src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts",
- "src/renderer/src/store/slices/editor-check-details-tabs.test.ts",
- "src/renderer/src/store/slices/editor-state-worktree-purge-leak.test.ts",
- "src/renderer/src/store/slices/github-branch-mismatched-linked-pr.test.ts",
- "src/renderer/src/store/slices/github-pr-checks-fetch.test.ts",
- "src/renderer/src/store/slices/github-pr-refresh-sequences-leak.test.ts",
- "src/renderer/src/store/slices/github-project-request-coordination.test.ts",
- "src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts",
- "src/renderer/src/store/slices/repos-project-group-create-race.test.ts",
- "src/renderer/src/store/slices/repos-project-groups-owner-routing.test.ts",
- "src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts",
- "src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts",
- "src/renderer/src/store/slices/runtime-status-skill-cache-eviction.test.ts",
- "src/renderer/src/store/slices/runtime-status-snapshot.test.ts",
- "src/renderer/src/store/slices/settings-owner-hydration-write-fence.test.ts",
- "src/renderer/src/store/slices/settings.test.ts",
- "src/renderer/src/store/slices/store-active-worktree-split-groups.test.ts",
- "src/renderer/src/store/slices/store-create-tab-id-hint.test.ts",
- "src/renderer/src/store/slices/store-sleep-agent-status-retention.test.ts",
- "src/renderer/src/store/slices/store-sleep-shutdown-order.test.ts",
- "src/renderer/src/store/slices/tab-group-reference-repair.test.ts",
- "src/renderer/src/store/slices/tab-group-state.test.ts",
- "src/renderer/src/store/slices/tab-view-mode.test.ts",
- "src/renderer/src/store/slices/terminal-layout-pty-ownership.test.ts",
- "src/renderer/src/store/slices/terminal-tab-owner-index.test.ts",
- "src/renderer/src/store/slices/terminal-tab-title-batch.test.ts",
- "src/renderer/src/store/slices/terminals-explicit-empty-hydration.test.ts",
- "src/renderer/src/store/slices/ui-agent-send-target.test.ts",
- "src/renderer/src/store/slices/ui-feature-interactions.test.ts",
- "src/renderer/src/store/slices/ui-page-navigation.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-browse.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-cache-hydration.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-host-qualified-list-state.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-local-evidence-invariants.test.ts",
- "src/renderer/src/store/slices/worktree-catalog-reconciliation.test.ts",
- "src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts",
- "src/renderer/src/store/slices/worktrees-create-base-status.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-owner-routing.test.ts",
- "src/renderer/src/store/slices/worktrees-lineage-state.test.ts",
- "src/renderer/src/store/slices/worktrees/metadata/worktree-meta-persist.test.ts",
- "src/renderer/src/store/slices/worktrees/teardown/worktree-teardown-array-identity.test.ts",
- "src/renderer/src/store/terminals/terminal-tab-close-map-identity.test.ts",
- "src/renderer/src/web/preload-api/web-ai-vault-search-compat.test.ts",
- "src/renderer/src/web/web-preload-api-settings.test.ts",
- "src/renderer/src/web/web-preload-api-ssh.test.ts",
- "src/renderer/src/web/web-runtime-connection-heartbeat-unsendable-probe.test.ts",
- "src/shared/agent-hook-listener-command-code-transcript.test.ts",
- "src/shared/agent-hook-listener-omp-approval-ownership.test.ts",
- "src/shared/agent-notification-id.test.ts",
- "src/shared/agent-prompt-injection.test.ts",
- "src/shared/agent-session-conversation-name.test.ts",
- "src/shared/agent-session-fence-mint-boundary.test.ts",
- "src/shared/agent-session-mutation-envelope.test.ts",
- "src/shared/agent-status-child-work-liveness.test.ts",
- "src/shared/agent-status-serving-readiness.test.ts",
- "src/shared/agent-terminal-status-equivalence.test.ts",
- "src/shared/ai-vault-resume-preparation.test.ts",
- "src/shared/ai-vault-search-contract.test.ts",
- "src/shared/artifact-sharing-gate.test.ts",
- "src/shared/automation-owner-precondition.test.ts",
- "src/shared/base-ref-search-result.test.ts",
- "src/shared/check-job-log-byte-cap.test.ts",
- "src/shared/child-process/run-process-termination-failure.test.ts",
- "src/shared/claude-background-task-status.test.ts",
- "src/shared/claude-subagent-roster.test.ts",
- "src/shared/claude-subagent-row-lifecycle.test.ts",
- "src/shared/clipboard-text.test.ts",
- "src/shared/codex-subagent-transcript.test.ts",
- "src/shared/commit-message-omp.test.ts",
- "src/shared/computer-use-key-spec.test.ts",
- "src/shared/daemon-adoption-telemetry.test.ts",
- "src/shared/doc-preview-scheme.test.ts",
- "src/shared/execution-host-registry.test.ts",
- "src/shared/file-name-sort.test.ts",
- "src/shared/git-config-snapshot-runner.test.ts",
- "src/shared/git-discard-path-safety.test.ts",
- "src/shared/git-history-message-allocation.test.ts",
- "src/shared/git-status-conflict-entries.test.ts",
- "src/shared/github/api-availability.test.ts",
- "src/shared/github/project-identity.test.ts",
- "src/shared/github/pull-request-for-branch-outcome.test.ts",
- "src/shared/issue-link-input.test.ts",
- "src/shared/keybindings-keyboard-layout.test.ts",
- "src/shared/keybindings-parsing.test.ts",
- "src/shared/mobile-web-bundle/bundle-range-rpc-contract.test.ts",
- "src/shared/native-chat-image-transcript-markers.test.ts",
- "src/shared/native-chat-slash-commands.omp.test.ts",
- "src/shared/native-chat-tool-activity.test.ts",
- "src/shared/native-chat-transcript-retention.test.ts",
- "src/shared/native-chat-types.test.ts",
- "src/shared/native-file-drop.test.ts",
- "src/shared/network-proxy.test.ts",
- "src/shared/node-bounded-file-reader.test.ts",
- "src/shared/node-pty-spawn-helper.test.ts",
- "src/shared/node-source-copy-content-equality.test.ts",
- "src/shared/omp-draft-launch-windows.test.ts",
- "src/shared/open-in-applications.test.ts",
- "src/shared/orchestration-rpc-contract.test.ts",
- "src/shared/own-retained-string.test.ts",
- "src/shared/pane-agent-identity-resolver.test.ts",
- "src/shared/pane-key-alias.test.ts",
- "src/shared/plugins/plugin-consent-request.test.ts",
- "src/shared/plugins/plugin-manifest.test.ts",
- "src/shared/plugins/plugin-marketplace.test.ts",
- "src/shared/protocol-compat.test.ts",
- "src/shared/pty-consumer-session.test.ts",
- "src/shared/pty-startup-ingress-live-query-reply.test.ts",
- "src/shared/quick-open-readdir-memory.test.ts",
- "src/shared/raster-image-preview-limits.test.ts",
- "src/shared/reconnect-jitter.test.ts",
- "src/shared/release-channel.test.ts",
- "src/shared/remote-runtime-shared-control-reconnect.test.ts",
- "src/shared/remote-runtime-shared-control-socket-generation.test.ts",
- "src/shared/review-head-tracking-ref.test.ts",
- "src/shared/runtime-rpc-call-queue-retention.test.ts",
- "src/shared/runtime-workspace-window-availability.test.ts",
- "src/shared/setup-script-package-manager-suggestion.test.ts",
- "src/shared/shell-process-readiness.test.ts",
- "src/shared/skill-path-containment.test.ts",
- "src/shared/skills-cli-agent-keys.test.ts",
- "src/shared/source-control-ai-action-recipes.test.ts",
- "src/shared/source-control-recovery-agent-command.test.ts",
- "src/shared/structured-agent-session-options.test.ts",
- "src/shared/structured-agent-session-send-disposition.test.ts",
- "src/shared/synthetic-agent-title.test.ts",
- "src/shared/terminal-partial-escape-tail.test.ts",
- "src/shared/text-search.test.ts",
- "src/shared/tui-agent-launch-defaults.test.ts",
- "src/shared/tui-agent-selection.test.ts",
- "src/shared/vscode-remote-ssh-launcher.test.ts",
- "src/shared/worker-terminal-host-scope.test.ts",
- "src/shared/workspace-cleanup-browse-state-persistence.test.ts",
- "src/shared/workspace-doc-history.test.ts",
- "src/shared/workspace-linked-item-source-context.test.ts",
- "src/shared/workspace-name.test.ts",
- "src/shared/workspace-session-partition-owner.test.ts",
- "src/shared/workspace-space-scan-budget.test.ts",
- "src/shared/worktree/card-properties.test.ts",
- "src/shared/worktree/ownership.test.ts",
- "src/shared/worktree/submodule-removal.test.ts",
- "src/shared/wsl-login-shell-command.test.ts",
- "src/shared/zod-salvage-absence.test.ts",
- "tests/e2e/e2e-worker-env-isolation.unit.test.ts",
- "tests/e2e/helpers/electron-process-shutdown.unit.test.ts",
- "tests/e2e/helpers/fake-agent-paste-end-scanner.unit.test.ts",
- "tests/e2e/helpers/nested-runtime-proxy-jump-fixture.unit.test.ts",
- "tests/e2e/host-guest-paint-retention-remote-viewer.unit.test.ts",
- "tests/e2e/orchestration-run-pagination.unit.test.ts",
- "tests/e2e/ssh-browser-network-execution-route.docker.unit.test.ts",
- "tests/tools/win-update-e2e/app-driver.test.mjs",
- "tests/tools/windows-pty-native-capability-smoke/packaged-node-pty-capability-probe.test.mjs"
- ],
- "durationMs": 850511
- },
- {
- "files": [
- "config/scripts/adhoc-build-version.test.mjs",
- "config/scripts/build-windows-cli-launcher.test.mjs",
- "config/scripts/ci-dependency-download-cache.test.mjs",
- "config/scripts/computer-use-smoke.test.mjs",
- "config/scripts/computer-use-windows-horizontal-scroll.test.mjs",
- "config/scripts/generate-bundled-skill-guides.test.mjs",
- "config/scripts/git-pull-request-diff-base.test.mjs",
- "config/scripts/happy-dom-mutation-observer-retention.test.ts",
- "config/scripts/hourly-preflight-workflow.test.mjs",
- "config/scripts/install-electron-package-binary.test.mjs",
- "config/scripts/live-remote-status-watchdog.test.mjs",
- "config/scripts/locale-generic-ui-terms.test.mjs",
- "config/scripts/macos-computer-helper-owner-loss-processes.test.mjs",
- "config/scripts/mobile-web-app-clipboard-image-resize-render.test.mjs",
- "config/scripts/mobile-web-app-handoff-grants-render.test.mjs",
- "config/scripts/mobile-web-app-rich-markdown-render.test.mjs",
- "config/scripts/mobile-web-app-session-terminal-init.test.mjs",
- "config/scripts/mobile-web-app-tasks-render.test.mjs",
- "config/scripts/mobile-web-page-route-hop-coverage.test.mjs",
- "config/scripts/node-pty-console-list-agent-patch.test.mjs",
- "config/scripts/node-pty-master-cloexec-patch.test.mjs",
- "config/scripts/orca-cli-skill-guidance.test.mjs",
- "config/scripts/orchestration-guide-command-contract.test.mjs",
- "config/scripts/plain-node-entry-guard.test.ts",
- "config/scripts/pr-workflow-lint-parity.test.mjs",
- "config/scripts/release-blocker-fixes.test.mjs",
- "config/scripts/run-linux-packaged-node-pty-floor-smoke.test.mjs",
- "config/scripts/run-typecheck-projects-in-parallel.test.mjs",
- "config/scripts/skill-sharing-release-workflow.test.mjs",
- "config/scripts/static-appimage-package-contract.test.mjs",
- "config/scripts/telemetry-bundle-constant-patterns.test.mjs",
- "config/scripts/trim-windows-icon-source.test.mjs",
- "config/scripts/verify-packaged-plugin-resources.test.mjs",
- "config/scripts/verify-release-required-assets.test.mjs",
- "config/scripts/websocket-server-loopback-bind.test.ts",
- "config/scripts/wsl-e2e-lane-contract.test.mjs",
- "config/scripts/xterm-image-memory-contract.test.mjs",
- "src/cli/handlers/computer-state-formatting.test.ts",
- "src/cli/handlers/core.test.ts",
- "src/cli/handlers/emulator.test.ts",
- "src/cli/handlers/file-absolute-paths.test.ts",
- "src/cli/handlers/file.test.ts",
- "src/cli/handlers/orchestration-caller-identity-cli.test.ts",
- "src/cli/handlers/orchestration-legacy-read-only.test.ts",
- "src/cli/handlers/orchestration-lifecycle-rejection.test.ts",
- "src/cli/handlers/orchestration-run-cli.test.ts",
- "src/cli/handlers/orchestration-timeout.test.ts",
- "src/cli/handlers/orchestration/worker-output.test.ts",
- "src/cli/handlers/terminal.test.ts",
- "src/cli/index.test.ts",
- "src/cli/orchestration-structured-sender-identity.test.ts",
- "src/cli/runtime-client-deferral.test.ts",
- "src/cli/runtime/launch.test.ts",
- "src/cli/runtime/transport-framing.test.ts",
- "src/cli/runtime/websocket-transport.test.ts",
- "src/cli/skill-guide-cli-parity.test.ts",
- "src/cli/skills.test.ts",
- "src/cli/specs/account.test.ts",
- "src/cli/terminal-list-host-scope-format.test.ts",
- "src/cli/terminal-read-screen.test.ts",
- "src/main/agent-hooks/grok-replay-guard.test.ts",
- "src/main/agent-hooks/local-agent-cli-presence.test.ts",
- "src/main/agent-hooks/managed-hook-script-refresh.test.ts",
- "src/main/agent-hooks/server-closed-tab-suppression.test.ts",
- "src/main/agent-hooks/server-last-status-lead-boundary.test.ts",
- "src/main/agent-hooks/server-opencode-binder.test.ts",
- "src/main/ai-vault-search/session-search-index-consumer.test.ts",
- "src/main/ai-vault-search/session-search-root-refresh.test.ts",
- "src/main/ai-vault-search/session-search-schema.test.ts",
- "src/main/ai-vault/ai-vault-scan-coordinator.test.ts",
- "src/main/ai-vault/cached-session-list-wsl-probe.test.ts",
- "src/main/ai-vault/cached-session-list.test.ts",
- "src/main/ai-vault/remote-session-sidecar-observation.test.ts",
- "src/main/ai-vault/session-document-stream-boundaries.test.ts",
- "src/main/ai-vault/session-scanner-core-parser-wsl-stall.test.ts",
- "src/main/ai-vault/session-scanner-cutoff.test.ts",
- "src/main/ai-vault/session-scanner-dedup-batches.test.ts",
- "src/main/ai-vault/session-scanner-devin-parser.test.ts",
- "src/main/ai-vault/session-scanner-first-user-prompt.test.ts",
- "src/main/ai-vault/session-scanner-grok-parser.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-bounds.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite-worker-spawn.test.ts",
- "src/main/ai-vault/session-scanner-opencode2-message.test.ts",
- "src/main/ai-vault/session-scanner-service-entry-path.test.ts",
- "src/main/ai-vault/session-scanner-timeline.test.ts",
- "src/main/ai-vault/session-scanner-values.test.ts",
- "src/main/ai-vault/session-title-file-reader.test.ts",
- "src/main/automations/automation-run-terminal-surface.test.ts",
- "src/main/automations/automation-run-writer.test.ts",
- "src/main/automations/external-automation-owner-guard.test.ts",
- "src/main/automations/run-completion-watcher.test.ts",
- "src/main/automations/schedule-drift-report.test.ts",
- "src/main/automations/service.test.ts",
- "src/main/azure-devops/pull-request-creation.test.ts",
- "src/main/bitbucket/credential-store.test.ts",
- "src/main/bitbucket/pull-request-creation.test.ts",
- "src/main/browser/agent-browser-process-environment.test.ts",
- "src/main/browser/browser-client-host-authority-replacement.test.ts",
- "src/main/browser/browser-client-host-id.test.ts",
- "src/main/browser/browser-client-host-placement-preparation.test.ts",
- "src/main/browser/browser-client-page-command-executor.test.ts",
- "src/main/browser/browser-client-page-execution-host-supersession.test.ts",
- "src/main/browser/browser-cookie-import-concurrency.test.ts",
- "src/main/browser/browser-cookie-import-google-exclusion.test.ts",
- "src/main/browser/browser-cookie-import-partition-fidelity.test.ts",
- "src/main/browser/browser-cookie-import-replace-partition-rollback.electron.test.ts",
- "src/main/browser/browser-cookie-samesite.electron.test.ts",
- "src/main/browser/browser-manager-auth-user-agent.test.ts",
- "src/main/browser/browser-manager-client-hosted-downloads.test.ts",
- "src/main/browser/browser-manager-destroyed-guest.test.ts",
- "src/main/browser/browser-manager-grab-shortcuts.test.ts",
- "src/main/browser/browser-manager-load-failure-replay.test.ts",
- "src/main/browser/browser-manager-popup-routing.test.ts",
- "src/main/browser/browser-network-deferred-socket.test.ts",
- "src/main/browser/browser-network-tunnel-client-memory-budget.test.ts",
- "src/main/browser/browser-network-tunnel-client.test.ts",
- "src/main/browser/browser-session-proxy.test.ts",
- "src/main/browser/browser-session-ua-wire-identity-cross-context.electron.test.ts",
- "src/main/browser/cdp-screenshot.test.ts",
- "src/main/browser/execution-route-socket-duplex.test.ts",
- "src/main/browser/local-ssh-browser-partitions.probe-cache.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-composition.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-route-identity.test.ts",
- "src/main/browser/remote-browser-socks-server.test.ts",
- "src/main/claude-accounts/claude-account-service-account-selection.test.ts",
- "src/main/claude-accounts/claude-account-service-credential-capture.test.ts",
- "src/main/claude-accounts/runtime-auth-service-readback-identity.test.ts",
- "src/main/claude-accounts/runtime-auth-service-wsl-runtime.test.ts",
- "src/main/claude-accounts/runtime-paths.test.ts",
- "src/main/claude-accounts/runtime-selection.test.ts",
- "src/main/claude/claude-agent-sdk-exit-proof.test.ts",
- "src/main/claude/claude-agent-sdk-user-message-queue.test.ts",
- "src/main/claude/claude-session-end-hook-capability.test.ts",
- "src/main/claude/claude-structured-compaction.test.ts",
- "src/main/claude/claude-structured-dispatch-admission.test.ts",
- "src/main/claude/claude-structured-journal-translation.plan.test.ts",
- "src/main/claude/claude-structured-journal-translation.test.ts",
- "src/main/claude/claude-structured-rewind.test.ts",
- "src/main/claude/claude-structured-session-acquisition-processless.test.ts",
- "src/main/claude/claude-tui-exit.test.ts",
- "src/main/claude/claude-tui-resume-real-binary.integration.test.ts",
- "src/main/cli/cli-installer-command-conflicts.test.ts",
- "src/main/cli/cli-installer-macos-command-path.test.ts",
- "src/main/cli/cli-installer-windows-path.test.ts",
- "src/main/cli/wsl-cli-registration-reconciliation.test.ts",
- "src/main/codex-accounts/host-codex-managed-home-ownership.test.ts",
- "src/main/codex-accounts/runtime-home-real-home-lane-routing.test.ts",
- "src/main/codex-accounts/service-abandoned-login-supersede.test.ts",
- "src/main/codex-accounts/service-reset-credit-home-ownership.test.ts",
- "src/main/codex-accounts/sta-4422-transient-ownership-error.test.ts",
- "src/main/codex-usage/scanner.test.ts",
- "src/main/codex-usage/store-snapshot.benchmark.test.ts",
- "src/main/codex/codex-app-server-teardown.integration.test.ts",
- "src/main/codex/codex-model-provider-config.test.ts",
- "src/main/codex/codex-pane-account-registry-mutations.test.ts",
- "src/main/codex/codex-persistent-command-retention.test.ts",
- "src/main/codex/codex-real-home-path.test.ts",
- "src/main/codex/codex-session-backfill-scan-dates.test.ts",
- "src/main/codex/codex-session-resume-windows.test.ts",
- "src/main/codex/codex-state-db-backfill-recovery.test.ts",
- "src/main/codex/codex-structured-thread-goal.test.ts",
- "src/main/codex/codex-wsl-hook-install-plan.test.ts",
- "src/main/codex/config-sync-stall.test.ts",
- "src/main/codex/config-toml-trust-hook-removal.test.ts",
- "src/main/codex/managed-home-shell-preflight.test.ts",
- "src/main/codex/retained-codex-hook-state.test.ts",
- "src/main/computer/desktop-script-provider-bridge.test.ts",
- "src/main/computer/macos-native-provider-client.test.ts",
- "src/main/computer/macos-native-provider-startup-cleanup.test.ts",
- "src/main/copilot/hook-service.test.ts",
- "src/main/crash-reporting/process-gone-sibling-correlation.test.ts",
- "src/main/crash-reporting/suppressed-process-gone-breadcrumb.test.ts",
- "src/main/daemon/daemon-authenticated-client-activity.test.ts",
- "src/main/daemon/daemon-folder-access-probe.test.ts",
- "src/main/daemon/daemon-init-restart-sequence.test.ts",
- "src/main/daemon/daemon-native-pty-exception.test.ts",
- "src/main/daemon/daemon-preflight-client-replacement.test.ts",
- "src/main/daemon/daemon-process-inspection.test.ts",
- "src/main/daemon/daemon-protocol-version.test.ts",
- "src/main/daemon/daemon-pty-adapter-history-checkpoints.test.ts",
- "src/main/daemon/daemon-pty-adapter-history-recovery.test.ts",
- "src/main/daemon/daemon-pty-startup-delivery.test.ts",
- "src/main/daemon/daemon-pty-upgrade-adoption.test.ts",
- "src/main/daemon/daemon-server-kill-attribution.test.ts",
- "src/main/daemon/daemon-stream-backpressure-socket.test.ts",
- "src/main/daemon/headless-emulator.test.ts",
- "src/main/daemon/macos-login-session-death-watch.test.ts",
- "src/main/daemon/osc7-file-uri.test.ts",
- "src/main/daemon/session-producer-pause.test.ts",
- "src/main/daemon/session-shell-recovery.test.ts",
- "src/main/daemon/terminal-host-pty-owner-backend.test.ts",
- "src/main/daemon/terminal-snapshot-osc8-roundtrip.test.ts",
- "src/main/daemon/wsl-cold-restore-cwd.test.ts",
- "src/main/durable-file-write-syscall-proof.test.ts",
- "src/main/emulator/android/adb-devices.test.ts",
- "src/main/emulator/backends/android-emulator-backend.test.ts",
- "src/main/emulator/simctl-simulator-devices.test.ts",
- "src/main/gemini/hook-service.test.ts",
- "src/main/ghostty/theme-import.test.ts",
- "src/main/git/command-runner/git-command-timeout.test.ts",
- "src/main/git/command-runner/git-subprocess-admission.test.ts",
- "src/main/git/command-runner/spawned-command-tree-kill.test.ts",
- "src/main/git/repo-clone-path.test.ts",
- "src/main/git/status-branch-line-total-relay-parity.test.ts",
- "src/main/git/status-submodule.test.ts",
- "src/main/git/worktree-create-preparation-real-wsl.test.ts",
- "src/main/git/worktree-remove-branch-deletion.test.ts",
- "src/main/git/worktree-sparse-checkout-cache.test.ts",
- "src/main/git/wsl-linked-worktree-git-route-invalidation.test.ts",
- "src/main/git/wsl-process-group-termination.test.ts",
- "src/main/github/client-pr-branch-discovery.test.ts",
- "src/main/github/client-pr-comment-reactions.test.ts",
- "src/main/github/client-pr-state.test.ts",
- "src/main/github/client-rate-limit-block.test.ts",
- "src/main/github/client-work-items-query-paging.test.ts",
- "src/main/github/default-branch-stale-pr.test.ts",
- "src/main/github/gh-capability-state.test.ts",
- "src/main/github/gh-utils.test.ts",
- "src/main/github/issues.test.ts",
- "src/main/github/pr-refresh-queue-growth-bound.test.ts",
- "src/main/github/pr-refresh-validation-backoff.test.ts",
- "src/main/github/pr-start-point.test.ts",
- "src/main/github/work-item-details-concurrency.test.ts",
- "src/main/github/work-item-search-semantics.test.ts",
- "src/main/gitlab/gitlab-known-host-probe-wsl-fallback.test.ts",
- "src/main/hang-watchdog/main-thread-hang-telemetry.test.ts",
- "src/main/hang-watchdog/main-thread-hang-watchdog-entry.test.ts",
- "src/main/hang-watchdog/main-thread-hang-watchdog.test.ts",
- "src/main/hermes/hook-service.test.ts",
- "src/main/hooks-archive-exit-observation.test.ts",
- "src/main/hooks-orca-yaml-parsing.test.ts",
- "src/main/ipc/browser-preview-tool-authorization.test.ts",
- "src/main/ipc/crash-reporting.test.ts",
- "src/main/ipc/filesystem-import.test.ts",
- "src/main/ipc/filesystem-list-files-handler-name-filter.test.ts",
- "src/main/ipc/filesystem-watcher-real.test.ts",
- "src/main/ipc/filesystem-watcher-removal-deadline.test.ts",
- "src/main/ipc/filesystem-watcher-terminal-resync.test.ts",
- "src/main/ipc/filesystem.test.ts",
- "src/main/ipc/github-ipc-channel-parity.test.ts",
- "src/main/ipc/github-work-item-args.test.ts",
- "src/main/ipc/local-log-tail.test.ts",
- "src/main/ipc/markdown-documents.test.ts",
- "src/main/ipc/notifications-message-formatting.test.ts",
- "src/main/ipc/notifications-retention-lifecycle.test.ts",
- "src/main/ipc/notifications-subject-retirement.test.ts",
- "src/main/ipc/preflight-agent-detection-no-subprocess.test.ts",
- "src/main/ipc/preflight-command-exec.test.ts",
- "src/main/ipc/pty-codex-account-attribution.test.ts",
- "src/main/ipc/pty-controller-process-inventory.test.ts",
- "src/main/ipc/pty-wsl-cwd-validation.test.ts",
- "src/main/ipc/pty/ipc/spawn-options-terminal-shell-args.test.ts",
- "src/main/ipc/pty/ipc/spawn-push-target-materialization.test.ts",
- "src/main/ipc/pty/ipc/write-input-chunk-yield.test.ts",
- "src/main/ipc/remote-workspace-snapshot-normalization.test.ts",
- "src/main/ipc/repos-nested-import.test.ts",
- "src/main/ipc/repos-nested-scan.test.ts",
- "src/main/ipc/runtime-environment-browser-client-host-handler.test.ts",
- "src/main/ipc/runtime-environment-federated-read-routing.test.ts",
- "src/main/ipc/runtime-environment-revision-guard.test.ts",
- "src/main/ipc/runtime-import-limits.test.ts",
- "src/main/ipc/skill-install-management-ipc-handlers.test.ts",
- "src/main/ipc/ssh-pty-legacy-projection.test.ts",
- "src/main/ipc/ssh-pty-model-admission-generation-scope.test.ts",
- "src/main/ipc/ssh-target-registry.test.ts",
- "src/main/ipc/telemetry.test.ts",
- "src/main/ipc/terminal-startup-color-query-replies.test.ts",
- "src/main/ipc/workspace-cleanup-activity.test.ts",
- "src/main/ipc/workspace-cleanup.test.ts",
- "src/main/ipc/worktree-base-directory-poller-marker-fanout.test.ts",
- "src/main/ipc/worktree-head-identity-reader-concurrency.test.ts",
- "src/main/ipc/worktree-head-identity-reader.test.ts",
- "src/main/ipc/worktrees-authoritative-local-metadata-pruning.test.ts",
- "src/main/ipc/worktrees-forget-local.test.ts",
- "src/main/ipc/worktrees-preserved-branch-fork-remote.test.ts",
- "src/main/ipc/worktrees-windows.test.ts",
- "src/main/jira/attachment-image-cache.test.ts",
- "src/main/linear/issue-context-errors.test.ts",
- "src/main/linear/mappers.test.ts",
- "src/main/linux-update-package-type.test.ts",
- "src/main/local-worktree-filesystem-wsl-banner.wsl.test.ts",
- "src/main/local-worktree-filesystem.test.ts",
- "src/main/macos-system-sleep-assertion.test.ts",
- "src/main/muse/hook-service.test.ts",
- "src/main/native-chat/agent-session-journal/journal-database.test.ts",
- "src/main/native-chat/agent-session-journal/journal-item-identity.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-retired-provider-exit-copy-ratchet.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-adopted-import.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-event-sink.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-option-settlement.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-prompt-cancel.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-refusal-retry.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-thread-goal.test.ts",
- "src/main/native-chat/agent-session-wire/structured-conversation-command-admission.test.ts",
- "src/main/native-chat/agent-session-wire/structured-session-compaction.test.ts",
- "src/main/native-chat/subagent-entry-id-bounds.test.ts",
- "src/main/native-chat/transcript-read-cache.test.ts",
- "src/main/native-chat/transcript-reader.test.ts",
- "src/main/native-chat/transcript-watch-engine-wsl-lifecycle.test.ts",
- "src/main/native-chat/transcript-watch-error.test.ts",
- "src/main/native-chat/transcript-watch-liveness.test.ts",
- "src/main/opencode-usage/cache-read-reproduction.test.ts",
- "src/main/opencode/hook-plugin-fail-open-ownership.test.ts",
- "src/main/opencode/hook-plugin-lifecycle-delivery.test.ts",
- "src/main/orca-profiles/profile-cloud-service-sign-out-connect-race.test.ts",
- "src/main/orca-profiles/profile-cloud-session-mutation.test.ts",
- "src/main/orca-profiles/profile-cloud-session-refresh.test.ts",
- "src/main/orca-profiles/profile-ui-scope.test.ts",
- "src/main/orcad/orcad-bind-address.test.ts",
- "src/main/orcad/orcad-browser-provider.test.ts",
- "src/main/orcad/orcad-forked-child-paths.test.ts",
- "src/main/orcad/orcad-instance-lock.test.ts",
- "src/main/orcad/orcad-launch-contract.test.ts",
- "src/main/persistence-automations.test.ts",
- "src/main/persistence-cohort-and-identity-migration.test.ts",
- "src/main/persistence-duplicate-repo-id-host-scope.test.ts",
- "src/main/persistence-protected-secret-write-race.test.ts",
- "src/main/persistence-ui-state.test.ts",
- "src/main/persistence/loading-store/metadata-lineage-batch-pruning.test.ts",
- "src/main/persistence/loading-store/workspace-session-partitions.test.ts",
- "src/main/persistence/loading-store/worktree-meta-alias-projection.test.ts",
- "src/main/persistence/restoring-sessions/pane-alias-normalization.test.ts",
- "src/main/persistence/restoring-sessions/pane-key-remapping.test.ts",
- "src/main/persistence/restoring-sessions/session-worktree-ownership.test.ts",
- "src/main/persistence/restoring-sessions/workspace-pane-normalization-index.test.ts",
- "src/main/pi/agent-status-completion-delivery.test.ts",
- "src/main/pi/prefill-extension-source.test.ts",
- "src/main/plugins/plugin-bundled-bootstrap.test.ts",
- "src/main/plugins/plugin-content-pack-registry.test.ts",
- "src/main/plugins/plugin-discovery.test.ts",
- "src/main/plugins/plugin-language-pack-registry.test.ts",
- "src/main/plugins/plugin-launch-content.test.ts",
- "src/main/plugins/plugin-marketplace-store.test.ts",
- "src/main/plugins/plugin-panel-navigation-guard.test.ts",
- "src/main/plugins/plugin-secrets-store.test.ts",
- "src/main/plugins/plugin-worker-manager.test.ts",
- "src/main/ports/port-scan-command-execution.test.ts",
- "src/main/project-groups/nested-repo-scan-rules.test.ts",
- "src/main/providers/macos-login-session-pty-probe.test.ts",
- "src/main/providers/settled-pty-writer-census.test.ts",
- "src/main/providers/ssh-git-provider-merge.test.ts",
- "src/main/providers/ssh-pty-provider-agent-session-create-operation.test.ts",
- "src/main/providers/ssh-pty-provider-process-events.test.ts",
- "src/main/providers/windows-pty-job-membership.test.ts",
- "src/main/providers/windows-shell-args.test.ts",
- "src/main/pty-descendant-termination-job-coverage.test.ts",
- "src/main/pty/shell-startup-env.test.ts",
- "src/main/pty/terminal-color-env.test.ts",
- "src/main/pty/windows-path-registry-change.test.ts",
- "src/main/quit-teardown-deadline.test.ts",
- "src/main/rate-limits/auth-filesystem-operation-retention.test.ts",
- "src/main/rate-limits/claude-fetcher-keychain-credentials.test.ts",
- "src/main/rate-limits/codex-fetcher-auth-errors.test.ts",
- "src/main/rate-limits/codex-fetcher-backend.test.ts",
- "src/main/rate-limits/codex-fetcher-session-supplement.test.ts",
- "src/main/rate-limits/codex-pty-status-parser.test.ts",
- "src/main/rate-limits/codex-rpc-rate-limit-probe.test.ts",
- "src/main/rate-limits/service-inactive-account-previews.test.ts",
- "src/main/rate-limits/service-refresh-orchestration.test.ts",
- "src/main/runtime/agent-prompt-submission-runtime-hook-and-generation.test.ts",
- "src/main/runtime/agent-session-spawn-token-readback.test.ts",
- "src/main/runtime/agent-session-unreadable-record-salvage.test.ts",
- "src/main/runtime/browser-dialog-settlement.test.ts",
- "src/main/runtime/browser-execution-host-key-resolution.test.ts",
- "src/main/runtime/browser-network-tunnel-paired-runtime.integration.test.ts",
- "src/main/runtime/browser-screencast-driver-attribution.test.ts",
- "src/main/runtime/browser-screencast-ghost-subscriber-eviction.test.ts",
- "src/main/runtime/browser-session-tab-selection-snapshot.test.ts",
- "src/main/runtime/cli-terminal-create-host-session-binding.test.ts",
- "src/main/runtime/client-hosted-browser-row-push.integration.test.ts",
- "src/main/runtime/external-worktree-paired-client-discovery.integration.test.ts",
- "src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts",
- "src/main/runtime/mobile-session-tab-close-refusal-message.test.ts",
- "src/main/runtime/mobile-session-tabs-notify-coalescer.test.ts",
- "src/main/runtime/opencode-finished-session-authority.test.ts",
- "src/main/runtime/orca-runtime-files-watch.test.ts",
- "src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts",
- "src/main/runtime/orca-runtime-mobile-agent-status-title-truthfulness.test.ts",
- "src/main/runtime/orca-runtime-path-candidate-history.test.ts",
- "src/main/runtime/orca-runtime-structured-session-restore.test.ts",
- "src/main/runtime/orca-runtime-structured-status-sink-wiring.test.ts",
- "src/main/runtime/orca-runtime-test-fragment-coverage.test.ts",
- "src/main/runtime/orchestration-compatibility-authority.test.ts",
- "src/main/runtime/orchestration/db-messages.test.ts",
- "src/main/runtime/orchestration/db-task-dispatch-invariant.test.ts",
- "src/main/runtime/orchestration/db/schema/derived-delivery-migration.test.ts",
- "src/main/runtime/orchestration/federation-lifecycle-settlement.test.ts",
- "src/main/runtime/orchestration/formatter.test.ts",
- "src/main/runtime/orchestration/orchestration-legacy-coordinator-authority-db.test.ts",
- "src/main/runtime/orchestration/orchestration-legacy-question-migration-db.test.ts",
- "src/main/runtime/orchestration/orchestration-peer-capability-cache.test.ts",
- "src/main/runtime/orchestration/run-coordinator-handle-migration.test.ts",
- "src/main/runtime/orchestration/structured-worker-direct-mailbox-target.test.ts",
- "src/main/runtime/orchestration/worker-output-cursor.test.ts",
- "src/main/runtime/pairing-endpoint.test.ts",
- "src/main/runtime/pty-recorded-surface-topology.test.ts",
- "src/main/runtime/push/push-registration-races.test.ts",
- "src/main/runtime/relay/relay-region-correction.test.ts",
- "src/main/runtime/relay/relay-revoke-outbox.test.ts",
- "src/main/runtime/relay/relay-session-broker.test.ts",
- "src/main/runtime/rpc/methods/accounts.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-replay.test.ts",
- "src/main/runtime/rpc/methods/automation-scoped-list-methods.test.ts",
- "src/main/runtime/rpc/methods/automations.test.ts",
- "src/main/runtime/rpc/methods/browser.test.ts",
- "src/main/runtime/rpc/methods/client-events.test.ts",
- "src/main/runtime/rpc/methods/jira.test.ts",
- "src/main/runtime/rpc/methods/mobile-web-bundle-range.test.ts",
- "src/main/runtime/rpc/methods/notification-preferences.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-fleet-snapshot.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation-setup.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/send-unbound-terminals.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/antigravity-worker-lifecycle.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/fleet-status-observed-identity.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-list-pagination.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-liveness-verdict.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-mobile-report.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-recovery.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-turn-observation.test.ts",
- "src/main/runtime/rpc/methods/repo-badge-color.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-retirement-proof-delta.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-schemas.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-admission.test.ts",
- "src/main/runtime/rpc/methods/structured-worker-tab-retirement.test.ts",
- "src/main/runtime/rpc/methods/worktree-retired-names.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-fence-jurisdiction.test.ts",
- "src/main/runtime/rpc/orchestration-mutation-request-show.test.ts",
- "src/main/runtime/rpc/orchestration-task-dispatch-invariant.test.ts",
- "src/main/runtime/rpc/remote-runtime-server-heartbeat.test.ts",
- "src/main/runtime/rpc/runtime-close-attribution-topology.test.ts",
- "src/main/runtime/rpc/schemas.test.ts",
- "src/main/runtime/rpc/streaming.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-snapshot-serialization.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-blank-mount.test.ts",
- "src/main/runtime/runtime-browser-client-page-recovery.test.ts",
- "src/main/runtime/runtime-file-path-existence.test.ts",
- "src/main/runtime/runtime-git-branch-compare-admission.test.ts",
- "src/main/runtime/runtime-git-generation-admission.test.ts",
- "src/main/runtime/runtime-managed-worktree-queries.test.ts",
- "src/main/runtime/runtime-remote-fetch-ref-maintenance.test.ts",
- "src/main/runtime/runtime-rpc-startup-failure.test.ts",
- "src/main/runtime/runtime-rpc-worktree-queries.test.ts",
- "src/main/runtime/runtime-server-git-availability.test.ts",
- "src/main/runtime/runtime-skill-install-commands.test.ts",
- "src/main/runtime/runtime-terminal-idle-polls.test.ts",
- "src/main/runtime/structured-agent-session-close.test.ts",
- "src/main/runtime/structured-agent-session-support-probe.test.ts",
- "src/main/runtime/structured-session-worktree-teardown.test.ts",
- "src/main/runtime/structured-tui-idle-evidence.test.ts",
- "src/main/runtime/structured-tui-recovery-claim-match.test.ts",
- "src/main/runtime/structured-worker-child-identity-env.test.ts",
- "src/main/runtime/terminal-mobile-subscribe-tab-mount.test.ts",
- "src/main/runtime/terminal-shell-override-host-support.test.ts",
- "src/main/runtime/terminal-wait-detection.test.ts",
- "src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts",
- "src/main/serve-update-handoff.test.ts",
- "src/main/shell-wrapper-content-address.test.ts",
- "src/main/shell-wrapper-generated-file-snapshot.test.ts",
- "src/main/sidecar-snapshot-file.test.ts",
- "src/main/skills/claude-plugin-skill-sources.test.ts",
- "src/main/skills/skill-candidate-concurrency.test.ts",
- "src/main/skills/skill-discovery-wsl-bash-filter.test.ts",
- "src/main/skills/skill-freshness-inventory-limits.test.ts",
- "src/main/skills/skill-install-management-service.test.ts",
- "src/main/skills/skill-remote-install-service.test.ts",
- "src/main/skills/skill-ssh-relay-service.test.ts",
- "src/main/skills/skill-windows-workspace.integration.test.ts",
- "src/main/source-control/hosted-review-bitbucket.integration.test.ts",
- "src/main/source-control/hosted-review-creation-shared-symlinks.test.ts",
- "src/main/ssh-reattach-pane-cardinality.test.ts",
- "src/main/ssh/ssh-channel-multiplexer-saturation-wedge.test.ts",
- "src/main/ssh/ssh-config-host-picker.test.ts",
- "src/main/ssh/ssh-config-loader.test.ts",
- "src/main/ssh/ssh-config-resolver.test.ts",
- "src/main/ssh/ssh-connect-attempt-cancellation.test.ts",
- "src/main/ssh/ssh-connection-auth-fallback.test.ts",
- "src/main/ssh/ssh-connection-utils.test.ts",
- "src/main/ssh/ssh-git-stream-idle-timer.test.ts",
- "src/main/ssh/ssh-owner-recovery-retry.test.ts",
- "src/main/ssh/ssh-posix-command-wrapper.test.ts",
- "src/main/ssh/ssh-pty-recovery-retention-budget.test.ts",
- "src/main/ssh/ssh-reconnect-error-classification.test.ts",
- "src/main/ssh/ssh-relay-cross-version-isolation.test.ts",
- "src/main/ssh/ssh-relay-endpoint-incumbent-shell.integration.test.ts",
- "src/main/ssh/ssh-relay-incumbent-process.test.ts",
- "src/main/ssh/ssh-relay-install-namespace.test.ts",
- "src/main/ssh/ssh-relay-node-headers.test.ts",
- "src/main/ssh/ssh-relay-session-data-delivery.test.ts",
- "src/main/ssh/ssh-relay-session-orphan-sweep.test.ts",
- "src/main/ssh/ssh-relay-session-recovery-races.test.ts",
- "src/main/ssh/ssh-remote-linear-save-issue.test.ts",
- "src/main/ssh/ssh-remote-node-toolchain-probe.test.ts",
- "src/main/ssh/ssh-remote-orca-cli.test.ts",
- "src/main/ssh/system-ssh-sftp-path.test.ts",
- "src/main/startup/hydrate-shell-path.test.ts",
- "src/main/startup/login-shell-environment.test.ts",
- "src/main/startup/main-process-ready-identity-write.test.ts",
- "src/main/startup/main-process-ready-phase-ordering.test.ts",
- "src/main/startup/run-electron-vite-dev.test.ts",
- "src/main/startup/serve-desktop-activation.test.ts",
- "src/main/startup/windows-install-dir-acl-recovery.test.ts",
- "src/main/startup/windows-shell-path-ownership.test.ts",
- "src/main/telemetry/consent.test.ts",
- "src/main/telemetry/install-id.test.ts",
- "src/main/terminal-history-gc-fs-call-count.test.ts",
- "src/main/terminal-history-tombstone-retry.test.ts",
- "src/main/updater.nudge-campaign.test.ts",
- "src/main/usage/jsonl-line-offsets.test.ts",
- "src/main/usage/usage-calendar-range.test.ts",
- "src/main/window/clipboard-windows-image-file.test.ts",
- "src/main/window/createMainWindow-markdown-editor-focus.test.ts",
- "src/main/window/createMainWindow-system-resume-relay.test.ts",
- "src/main/window/history-gc-profile-worktree-ids.test.ts",
- "src/main/window/macos-tahoe-release.test.ts",
- "src/main/window/privileged-window-navigation.test.ts",
- "src/main/window/renderer-recovery-reload-watchdog.test.ts",
- "src/main/windows-registry-addon.test.ts",
- "src/main/workspace-cleanup-scan-snapshot.test.ts",
- "src/main/workspace-space-scan-control.test.ts",
- "src/main/worktree-create-base.test.ts",
- "src/main/worktree-lineage-pruning.test.ts",
- "src/main/worktree-name-retirement.test.ts",
- "src/main/worktree-prunable-git-file.test.ts",
- "src/main/wsl-bash-command.test.ts",
- "src/main/wsl-interop-spawn-directory.test.ts",
- "src/preload/usage-provider-api.test.ts",
- "src/relay/agent-hook-integration.test.ts",
- "src/relay/agent-hook-server.test.ts",
- "src/relay/ai-vault-service-client.test.ts",
- "src/relay/dispatcher-client-close-cause.test.ts",
- "src/relay/dispatcher-frame-guard-regressions.test.ts",
- "src/relay/dispatcher-json-payload.test.ts",
- "src/relay/dispatcher-per-connection-state-baseline.test.ts",
- "src/relay/dispatcher-timeout.test.ts",
- "src/relay/fs-list-files-large-response.integration.test.ts",
- "src/relay/git-handler-check-ignore.test.ts",
- "src/relay/git-handler-file-diff.test.ts",
- "src/relay/git-handler-worktree-inspection.test.ts",
- "src/relay/git-handler-worktree-list.test.ts",
- "src/relay/node-pty-binding-survey.test.ts",
- "src/relay/node-pty-unavailable-diagnosis.test.ts",
- "src/relay/protocol-json-payload.test.ts",
- "src/relay/pty-handler-inventory-process-evidence.test.ts",
- "src/relay/pty-handler-retired-pane-surface.test.ts",
- "src/relay/pty-handler-windows-child-process-evidence.test.ts",
- "src/relay/relay-endpoint-credential-publication.test.ts",
- "src/relay/relay-handshake-roundtrip.test.ts",
- "src/relay/relay-primary-channel.test.ts",
- "src/relay/relay-pty-publication-admission.test.ts",
- "src/relay/relay-pty-source-publication.test.ts",
- "src/relay/relay-watcher-parent-removal.test.ts",
- "src/relay/relay-watcher-setup-wait.test.ts",
- "src/relay/remote-artifact-cli-input.test.ts",
- "src/relay/ssh-pty-source-credit-adapter.test.ts",
- "src/relay/workspace-session-handler.test.ts",
- "src/renderer/src/app-shell/use-document-appearance.test.tsx",
- "src/renderer/src/assets/mobile-page-qr-layout.test.ts",
- "src/renderer/src/assets/terminal-container-geometry.test.ts",
- "src/renderer/src/components/WorktreeJumpPalette.test.tsx",
- "src/renderer/src/components/activity/ActivityPrototypePage.thread-grouping.test.ts",
- "src/renderer/src/components/activity/activity-event-builder.live-cap.test.ts",
- "src/renderer/src/components/activity/activity-portal-thread-reconciliation.test.ts",
- "src/renderer/src/components/activity/activity-terminal-portal-publication-loop.react185.test.tsx",
- "src/renderer/src/components/agent/AgentCombobox.test.tsx",
- "src/renderer/src/components/artifacts/artifact-list-windowing.test.tsx",
- "src/renderer/src/components/automations/AutomationDetail.test.tsx",
- "src/renderer/src/components/automations/AutomationListSearchField.test.tsx",
- "src/renderer/src/components/automations/AutomationListTableHeader.test.tsx",
- "src/renderer/src/components/automations/AutomationOwnerConflictNotice.test.tsx",
- "src/renderer/src/components/automations/AutomationPromptDisclosure.test.tsx",
- "src/renderer/src/components/automations/AutomationRunHistory.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.refresh-selection.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.save-visibility.test.tsx",
- "src/renderer/src/components/automations/automation-captured-owner.test.ts",
- "src/renderer/src/components/automations/automation-create-projects.test.ts",
- "src/renderer/src/components/automations/automation-host-catalog.test.ts",
- "src/renderer/src/components/automations/automation-host-orphan-entry.test.ts",
- "src/renderer/src/components/automations/automation-run-completion-evidence.test.ts",
- "src/renderer/src/components/automations/automation-source-display.test.ts",
- "src/renderer/src/components/automations/hermes-cron-output-parse.test.ts",
- "src/renderer/src/components/automations/use-automation-host-catalog.test.tsx",
- "src/renderer/src/components/automations/use-external-automation-scope-retention.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/useMarkupPointerHandlers.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserAddressBar.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserFind.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-navigation-control-row.test.tsx",
- "src/renderer/src/components/browser-pane/assemble-chrome/browser-pane-page-selection.test.ts",
- "src/renderer/src/components/browser-pane/browser-client-page-renderer-installation.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/browser-annotation-geometry.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/browser-overlay-shortcut-target.test.ts",
- "src/renderer/src/components/browser-pane/describe-page/live-browser-url-registry.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-evicted-guest-recovery.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-registration-ownership.test.ts",
- "src/renderer/src/components/browser-pane/navigate/browser-load-failure-overlay.test.tsx",
- "src/renderer/src/components/browser-pane/navigate/browser-webview-load-failure.test.ts",
- "src/renderer/src/components/browser-pane/navigate/chromium-error-page-polling.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-pane.address-bar.test.tsx",
- "src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.failure-message.test.tsx",
- "src/renderer/src/components/browser-pane/workspace-doc/HtmlDocPreview.toolbar.test.tsx",
- "src/renderer/src/components/browser-pane/workspace-doc/doc-preview-document-actions.test.ts",
- "src/renderer/src/components/cmd-j/palette-filter-option-list.test.ts",
- "src/renderer/src/components/cmd-j/palette-session-age.test.ts",
- "src/renderer/src/components/cmd-j/plugin-quick-actions.test.ts",
- "src/renderer/src/components/confirmation-skip-preference.test.ts",
- "src/renderer/src/components/contextual-tours/ContextualTourOverlaySurface.localization.test.tsx",
- "src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx",
- "src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts",
- "src/renderer/src/components/dashboard/build-dashboard-bucket-counts.equivalence.test.ts",
- "src/renderer/src/components/dashboard/useAgentBucketCounts.gate.test.ts",
- "src/renderer/src/components/dictation/DictationIndicator.test.tsx",
- "src/renderer/src/components/editor/EditorEditFileSurface.monaco-containment.test.tsx",
- "src/renderer/src/components/editor/LargeDiffLoadPrompt.test.tsx",
- "src/renderer/src/components/editor/RichMarkdownLinkBubble.test.ts",
- "src/renderer/src/components/editor/RichMarkdownTableControls.test.tsx",
- "src/renderer/src/components/editor/check-job-step-status.test.ts",
- "src/renderer/src/components/editor/closed-editor-model-registry.test.ts",
- "src/renderer/src/components/editor/closed-editor-tab-cache-sweep.test.ts",
- "src/renderer/src/components/editor/closed-editor-tab-disposal.test.ts",
- "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree-render.test.tsx",
- "src/renderer/src/components/editor/combined-diff/browse-files/combined-diff-file-tree.test.ts",
- "src/renderer/src/components/editor/combined-diff/browse-files/use-combined-diff-tree-navigation.test.ts",
- "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-load-scheduler.test.ts",
- "src/renderer/src/components/editor/combined-diff/scroll-viewport/combined-diff-scrollbar-drag.test.ts",
- "src/renderer/src/components/editor/diff-editor-shift-wheel-scroll.test.ts",
- "src/renderer/src/components/editor/editor-autosave-conflict-flow.test.ts",
- "src/renderer/src/components/editor/editor-external-watch-path-index.test.ts",
- "src/renderer/src/components/editor/editor-model-uri.test.ts",
- "src/renderer/src/components/editor/markdown-dirty-state.test.ts",
- "src/renderer/src/components/editor/markdown-doc-completions.test.ts",
- "src/renderer/src/components/editor/markdown-export-extract.test.ts",
- "src/renderer/src/components/editor/markdown-preview-search-crash.test.tsx",
- "src/renderer/src/components/editor/markdown-rich-mode-eligibility-cache.test.ts",
- "src/renderer/src/components/editor/markdown-round-trip.test.ts",
- "src/renderer/src/components/editor/monaco-conflict-decorations.test.ts",
- "src/renderer/src/components/editor/monaco-programmatic-sync.test.ts",
- "src/renderer/src/components/editor/pdf-scale-preference-storage.test.ts",
- "src/renderer/src/components/editor/pdf-scale-preference.test.ts",
- "src/renderer/src/components/editor/rich-markdown-image-insert-code-block.test.ts",
- "src/renderer/src/components/editor/rich-markdown-link-clipboard.test.ts",
- "src/renderer/src/components/editor/rich-markdown-link-shortcut.test.ts",
- "src/renderer/src/components/editor/setup-contextual-copy.test.ts",
- "src/renderer/src/components/editor/untitled-file-rename-path.test.ts",
- "src/renderer/src/components/editor/useEditorPanelRemoteSiblingContentState.test.tsx",
- "src/renderer/src/components/editor/useLocalLogTail.test.tsx",
- "src/renderer/src/components/editor/useMarkdownDocuments.navigation.test.ts",
- "src/renderer/src/components/editor/useRichMarkdownPendingFocus.test.ts",
- "src/renderer/src/components/emulator-pane/mobile-emulator-agent-setup-visibility.test.ts",
- "src/renderer/src/components/feature-tips/VoiceDictationTipDialog.test.tsx",
- "src/renderer/src/components/feature-wall/FullDiskAccessSetupPrompt.test.ts",
- "src/renderer/src/components/feature-wall/use-integration-connection-status.test.ts",
- "src/renderer/src/components/feature-wall/workbench-terminal-storyboard-sequence.test.ts",
- "src/renderer/src/components/github-pr-reviewer-display.test.ts",
- "src/renderer/src/components/github/PRFilterPickers.test.ts",
- "src/renderer/src/components/github/github-mention-option-filter.test.ts",
- "src/renderer/src/components/github/github-user-avatar.test.tsx",
- "src/renderer/src/components/github/pr-comment-code-context.test.ts",
- "src/renderer/src/components/github/use-image-input.test.ts",
- "src/renderer/src/components/linear-project-search-query.test.ts",
- "src/renderer/src/components/linear-project-view-surfaces.test.tsx",
- "src/renderer/src/components/mobile/MobilePageToolbar.test.tsx",
- "src/renderer/src/components/mobile/use-mobile-pairing-address-preference.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatCodeBlock.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatSessionOptionPickers.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatStructuredSessionDelivery.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatToolRun.identity.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatView.test.tsx",
- "src/renderer/src/components/native-chat/StructuredAgentSessionAttentionBridge.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-assembler-merge-parity.test.ts",
- "src/renderer/src/components/native-chat/native-chat-composer-reveal-focus.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-diff.test.ts",
- "src/renderer/src/components/native-chat/native-chat-launch-default-adoption.test.ts",
- "src/renderer/src/components/native-chat/native-chat-launch-draft-resolution.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pty-retired-model.test.ts",
- "src/renderer/src/components/native-chat/native-chat-session-transport.test.ts",
- "src/renderer/src/components/native-chat/native-chat-split-shortcut.test.ts",
- "src/renderer/src/components/native-chat/native-chat-tool-summary.test.ts",
- "src/renderer/src/components/native-chat/native-chat-transcript-slots.test.ts",
- "src/renderer/src/components/native-chat/native-chat-view-file-drop.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-message-rail.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-picker-command-dispatch.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-send-lifecycle.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-turn-timing.test.tsx",
- "src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.test.tsx",
- "src/renderer/src/components/onboarding/OnboardingFlow.test.tsx",
- "src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts",
- "src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts",
- "src/renderer/src/components/pr-comments-resolution-prompt.test.ts",
- "src/renderer/src/components/right-sidebar/AiVaultPanelSearch.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.test.tsx",
- "src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.row-handlers.test.tsx",
- "src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.commit-generation-records.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-host-scope.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-path-actions.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx",
- "src/renderer/src/components/right-sidebar/check-details-resize.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-polling.test.tsx",
- "src/renderer/src/components/right-sidebar/coalesced-poll-runner.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-selection.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-stale-dir-cache.test.ts",
- "src/renderer/src/components/right-sidebar/git-status-refresh-scheduler.test.ts",
- "src/renderer/src/components/right-sidebar/plugin-panel-bridge-host.test.ts",
- "src/renderer/src/components/right-sidebar/plugin-panel-watchdog-visibility.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comment-snapshotted-thread-resolver.test.ts",
- "src/renderer/src/components/right-sidebar/search-rows.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-huge-repo-warning-dismissals.test.ts",
- "src/renderer/src/components/right-sidebar/source-control/commit/source-control-entry-mutation-failures.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/review/suppressed-github-pr.test.ts",
- "src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx",
- "src/renderer/src/components/right-sidebar/use-installed-plugin-route-reconciliation.test.tsx",
- "src/renderer/src/components/right-sidebar/useFileExplorerKeys.test.ts",
- "src/renderer/src/components/right-sidebar/useFileExplorerVisibleRowProjection.debounce.test.tsx",
- "src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts",
- "src/renderer/src/components/settings/DiffShowWhitespaceSetting.test.tsx",
- "src/renderer/src/components/settings/EphemeralVmsPane.test.tsx",
- "src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.test.tsx",
- "src/renderer/src/components/settings/MobilePane.test.tsx",
- "src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx",
- "src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx",
- "src/renderer/src/components/settings/QuickCommandsPane.test.ts",
- "src/renderer/src/components/settings/RepositoryForkSyncSection.test.tsx",
- "src/renderer/src/components/settings/RepositoryHooksSection.test.ts",
- "src/renderer/src/components/settings/RepositoryIconEmojiPicker.test.tsx",
- "src/renderer/src/components/settings/SessionHistorySettingsPane.test.tsx",
- "src/renderer/src/components/settings/SettingsFormControls.font-autocomplete.test.tsx",
- "src/renderer/src/components/settings/TaskSourceProviderCard.test.tsx",
- "src/renderer/src/components/settings/accounts-search.test.ts",
- "src/renderer/src/components/settings/appearance-search.test.ts",
- "src/renderer/src/components/settings/codex-account-auth-warning.test.ts",
- "src/renderer/src/components/settings/mobile-pairing-device-polling.test.ts",
- "src/renderer/src/components/settings/setting-ownership.test.ts",
- "src/renderer/src/components/settings/settings-search.test.ts",
- "src/renderer/src/components/settings/shortcut-groups.test.ts",
- "src/renderer/src/components/setup-guide/use-setup-guide-progress.test.ts",
- "src/renderer/src/components/shared/MacFolderAccessFixDialog.test.tsx",
- "src/renderer/src/components/sidebar/AddRemoteHostDialog.config-picker.test.tsx",
- "src/renderer/src/components/sidebar/AddRepoHostSelector.test.tsx",
- "src/renderer/src/components/sidebar/AddRepoStartSteps.test.tsx",
- "src/renderer/src/components/sidebar/FilterToggleRow.test.tsx",
- "src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx",
- "src/renderer/src/components/sidebar/NoticeHostGlyph.test.tsx",
- "src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx",
- "src/renderer/src/components/sidebar/SidebarFeedbackDialog.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardMeta.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCardStatusSlot.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeContextMenu.delete-shortcut.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeList.group-headers.test.ts",
- "src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts",
- "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.begin-editing.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.test.tsx",
- "src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts",
- "src/renderer/src/components/sidebar/create-project-defaults.test.ts",
- "src/renderer/src/components/sidebar/host-section-rows.test.ts",
- "src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts",
- "src/renderer/src/components/sidebar/prompt-cache-timer-selection.test.ts",
- "src/renderer/src/components/sidebar/sleep-worktree-activation-race.test.ts",
- "src/renderer/src/components/sidebar/ssh-host-remove-resolution.test.ts",
- "src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.test.tsx",
- "src/renderer/src/components/sidebar/use-workspace-reveal-body-redirect.test.tsx",
- "src/renderer/src/components/sidebar/use-workspace-status-drop.test.ts",
- "src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts",
- "src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx",
- "src/renderer/src/components/sidebar/workspace-kanban-area-selection.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-host-attribution.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-agent-summary.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-dom-events.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts",
- "src/renderer/src/components/sidebar/worktree-delete-request.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-imported-worktrees.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-nested-project-groups.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-project-host-setups.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/viewport/use-row-removal-animation.test.ts",
- "src/renderer/src/components/sidebar/worktree-sidebar-drag-geometry.test.ts",
- "src/renderer/src/components/sidebar/worktree-sort-label-ordering.test.ts",
- "src/renderer/src/components/skills/SkillInstallTargetFields.test.tsx",
- "src/renderer/src/components/skills/skill-delete-selection.test.ts",
- "src/renderer/src/components/skills/skill-install-progress-state.test.tsx",
- "src/renderer/src/components/skills/skill-share-package-selection.test.ts",
- "src/renderer/src/components/status-bar/UsagePercentageDisplayChangeNotice.test.tsx",
- "src/renderer/src/components/status-bar/UsageRosterPanel.test.tsx",
- "src/renderer/src/components/status-bar/inline-usage-bars.test.tsx",
- "src/renderer/src/components/status-bar/provider-account-sync-key.test.ts",
- "src/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsx",
- "src/renderer/src/components/status-bar/resource-memory-metric-copy.test.ts",
- "src/renderer/src/components/status-bar/resource-session-bindings.test.ts",
- "src/renderer/src/components/status-bar/status-bar-context-menu-policy.test.ts",
- "src/renderer/src/components/status-bar/tooltip.test.ts",
- "src/renderer/src/components/tab-bar/TabBarQuickCommandItem.test.tsx",
- "src/renderer/src/components/tab-bar/middle-button-default-guard.test.ts",
- "src/renderer/src/components/tab-bar/open-tab-search-retention.test.ts",
- "src/renderer/src/components/tab-bar/open-tab-selection-routing.test.ts",
- "src/renderer/src/components/tab-bar/tab-context-menu-consistency.test.tsx",
- "src/renderer/src/components/tab-bar/tab-create-entry-action.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-classifier.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts",
- "src/renderer/src/components/tab-bar/tab-create-entry-url-classification.test.ts",
- "src/renderer/src/components/tab-bar/tab-strip-overflow-navigation.test.ts",
- "src/renderer/src/components/tab-group/useTabGroupTabCloseCommands.test.tsx",
- "src/renderer/src/components/task-page-default-repo-selection.test.ts",
- "src/renderer/src/components/task-page-github-status-state.test.ts",
- "src/renderer/src/components/task-page-github-work-item-filter-membership.test.ts",
- "src/renderer/src/components/task-page-github-work-item-status.test.ts",
- "src/renderer/src/components/task-page-linear-in-orca-issues.test.ts",
- "src/renderer/src/components/task-page-linear-issue-grouping.test.ts",
- "src/renderer/src/components/terminal-pane/TerminalErrorToast.test.ts",
- "src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.test.tsx",
- "src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.react185.test.tsx",
- "src/renderer/src/components/terminal-pane/TerminalProcessExitOverlay.test.tsx",
- "src/renderer/src/components/terminal-pane/codex-detached-pane-restart.test.ts",
- "src/renderer/src/components/terminal-pane/deferred-split-pane-handoff.test.ts",
- "src/renderer/src/components/terminal-pane/expand-collapse-render-stability.test.ts",
- "src/renderer/src/components/terminal-pane/hard-wrapped-terminal-http-links.test.ts",
- "src/renderer/src/components/terminal-pane/issue-12112-agent-pane-startup-color-reply-leak.repro.test.ts",
- "src/renderer/src/components/terminal-pane/mobile-driver-overlay-collapse.test.ts",
- "src/renderer/src/components/terminal-pane/mobile-driver-overlay-visibility.test.ts",
- "src/renderer/src/components/terminal-pane/pane-agent-session-id.test.ts",
- "src/renderer/src/components/terminal-pane/parked-terminal-command-status.test.ts",
- "src/renderer/src/components/terminal-pane/parked-terminal-tab-capture-episodes.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-agent-resume.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-cold-restore-resume-command.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-direct-ssh-spawn-retry.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-foreground-routing-confirmation.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-fresh-spawn-guards.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hook-idle-arbitration.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-interrupt-inference.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-parked-ssh-snapshot.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-restored-baseline-shortfall.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-setup-split-spawn.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-visible-pane-output-pause-latch.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-windows-keyboard-reset.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/direct-ssh-reattach-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/reattach-payload-ssh-reconnect-model-paint.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection/write-pty-output-to-xterm-startup-callback.test.ts",
- "src/renderer/src/components/terminal-pane/pty-pre-handler-buffer-warn-eviction.test.ts",
- "src/renderer/src/components/terminal-pane/pty-shutdown-data-suspension.test.ts",
- "src/renderer/src/components/terminal-pane/pty-shutdown-exit-deferral.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-recycled-pty-incarnation.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-snapshot-escape-tail.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-input-coalescing.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-stale-handle-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/resolve-split-cwd.test.ts",
- "src/renderer/src/components/terminal-pane/ssh-pane-connect-gate.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-recheck-deadlines.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx",
- "src/renderer/src/components/terminal-pane/terminal-drop-runtime-owner.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-error-remote-closed-localization.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-hangul-syllable-flush.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-macos-keybinding-dict-trace.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-preedit-cell-grid.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-transaction-events.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-jis-yen-input.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-kitty-csi-u-encoding.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-output-visibility.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-surface-ownership.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-watcher-partial-reconciliation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-watcher-sole-newborn-exit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-programmatic-text-paste.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-render-desync-sentinel.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-windows-shift-enter.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-visibility-resume.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-window-focus-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-scroll-visibility-memory.test.ts",
- "src/renderer/src/components/terminal-pane/useSessionRestoredBannerDismiss.test.tsx",
- "src/renderer/src/components/terminal-pane/wrapped-terminal-link-ranges.test.ts",
- "src/renderer/src/components/terminal-scrollback-decoration-eviction.test.ts",
- "src/renderer/src/components/terminal/terminal-close-incarnation.test.ts",
- "src/renderer/src/components/terminal/terminal-provider-snapshot-capability.test.ts",
- "src/renderer/src/components/ui/slider.test.tsx",
- "src/renderer/src/components/use-worktree-jump-palette-browser-ownership.test.ts",
- "src/renderer/src/components/workspace-cleanup/WorkspaceCleanupDialog.mount-gating.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-list.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-row-data.test.ts",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-candidate-row.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-facet-sort.test.ts",
- "src/renderer/src/components/worktree-creation/WorktreeCreationPanel.test.tsx",
- "src/renderer/src/hooks/agent-hook-completion-grok-notifications.test.ts",
- "src/renderer/src/hooks/agent-hook-completion-notifications-import.test.ts",
- "src/renderer/src/hooks/automation-agent-status-entry-change.test.ts",
- "src/renderer/src/hooks/composer-native-file-drop.test.ts",
- "src/renderer/src/hooks/composer-state/provider-runtime-sync.test.ts",
- "src/renderer/src/hooks/direct-ssh-reconnect-coordinator.test.ts",
- "src/renderer/src/hooks/installed-agent-skill-verdict.test.ts",
- "src/renderer/src/hooks/ipc-events/browser-state-open-link-profile.test.ts",
- "src/renderer/src/hooks/ipc-events/runtime-reconnect-host-status.test.ts",
- "src/renderer/src/hooks/ipc-tab-switch-structured-tab-cycle.test.ts",
- "src/renderer/src/hooks/metadata-request-cache.test.ts",
- "src/renderer/src/hooks/remote-workspace-deferred-placement-retry.test.ts",
- "src/renderer/src/hooks/remote-workspace-session-merge-close-tombstones.test.ts",
- "src/renderer/src/hooks/useInstalledAgentSkills.test.ts",
- "src/renderer/src/hooks/useIpcEvents-browser-certificate-failure.test.ts",
- "src/renderer/src/hooks/useIpcEvents-close-routing-active-browser-tab.test.ts",
- "src/renderer/src/hooks/useIssueMetadata.test.tsx",
- "src/renderer/src/hooks/useModalReturnFocus.test.tsx",
- "src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts",
- "src/renderer/src/hooks/useSkillFreshness.test.tsx",
- "src/renderer/src/hooks/useWindowsTerminalCapabilityOwnerKey.test.tsx",
- "src/renderer/src/i18n/ja-technical-literal-mistranslations.test.ts",
- "src/renderer/src/i18n/native-chat-locales.test.ts",
- "src/renderer/src/lib/agent-hibernation-confirmation.test.ts",
- "src/renderer/src/lib/agent-hibernation-output-activity.test.ts",
- "src/renderer/src/lib/agent-hibernation-pane-age.test.ts",
- "src/renderer/src/lib/agent-launch-caller-placement.test.ts",
- "src/renderer/src/lib/agent-launch-routing-caller-census.test.ts",
- "src/renderer/src/lib/agent-row-primary-text.test.ts",
- "src/renderer/src/lib/agent-startup-delayed-delivery-perf.test.ts",
- "src/renderer/src/lib/agent-status.test.ts",
- "src/renderer/src/lib/ai-vault-session-resume-preparation.test.ts",
- "src/renderer/src/lib/browser-uuid.test.ts",
- "src/renderer/src/lib/codex-pane-selection-lane.test.ts",
- "src/renderer/src/lib/diff-comments-format.test.ts",
- "src/renderer/src/lib/editable-target.test.ts",
- "src/renderer/src/lib/feature-education-telemetry.test.ts",
- "src/renderer/src/lib/floating-workspace-terminal-actions.test.ts",
- "src/renderer/src/lib/github-links.test.ts",
- "src/renderer/src/lib/github-source-runtime-context.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-subscription-lifetime.test.ts",
- "src/renderer/src/lib/keyboard-layout/layout-base-character.test.ts",
- "src/renderer/src/lib/keyboard-layout/option-as-alt-probe.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-structured.test.ts",
- "src/renderer/src/lib/linear-board-drag-payload.test.ts",
- "src/renderer/src/lib/markdown-document-templates.test.ts",
- "src/renderer/src/lib/markdown-review-note-copy.test.ts",
- "src/renderer/src/lib/monaco-diff-editor-disposal.test.ts",
- "src/renderer/src/lib/monaco-setup-steps.test.ts",
- "src/renderer/src/lib/new-workspace-create-gates.test.ts",
- "src/renderer/src/lib/order-empty-query-worktrees.test.ts",
- "src/renderer/src/lib/pane-manager/focus-follows-mouse.test.ts",
- "src/renderer/src/lib/pane-manager/pane-fit-resize-observer.test.ts",
- "src/renderer/src/lib/pane-manager/pane-initial-fit-lifecycle.test.ts",
- "src/renderer/src/lib/pane-manager/pane-inline-images.test.ts",
- "src/renderer/src/lib/pane-manager/pane-split-scroll.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler.test.ts",
- "src/renderer/src/lib/pane-manager/pane-tree-equalization-parity.test.ts",
- "src/renderer/src/lib/pane-manager/pane-webgl-refresh-lifecycle.test.ts",
- "src/renderer/src/lib/pane-manager/pane-webgl-renderer.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-write-pipeline-health.test.ts",
- "src/renderer/src/lib/passive-macos-app-data-access.test.ts",
- "src/renderer/src/lib/paste-payload-metadata.test.ts",
- "src/renderer/src/lib/pr-comment-action-state.test.ts",
- "src/renderer/src/lib/react-commit-cascade-telemetry.test.ts",
- "src/renderer/src/lib/renderer-agent-status-observation-ingress.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-direct-ssh-hydration-gap.test.ts",
- "src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts",
- "src/renderer/src/lib/script-textarea-rows.test.ts",
- "src/renderer/src/lib/sidebar-worktree-activation.test.ts",
- "src/renderer/src/lib/simulator-pane-shutdown-scheduler.test.ts",
- "src/renderer/src/lib/startup-ui-hydration.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch-reload.test.ts",
- "src/renderer/src/lib/tab-agent-identity-decision-table.test.ts",
- "src/renderer/src/lib/tab-agent-status-index.test.ts",
- "src/renderer/src/lib/terminal-file-uri-link.test.ts",
- "src/renderer/src/lib/terminal-quick-command-project-scope.test.ts",
- "src/renderer/src/lib/terminal-shortcut-capture-notification.test.tsx",
- "src/renderer/src/lib/update-check-click-options.test.ts",
- "src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts",
- "src/renderer/src/lib/visible-overlay.test.ts",
- "src/renderer/src/lib/web-client-location.test.ts",
- "src/renderer/src/lib/workspace-port-host-availability.test.ts",
- "src/renderer/src/lib/workspace-port-scan-publish.test.ts",
- "src/renderer/src/lib/worktree-activation-reveal.test.ts",
- "src/renderer/src/lib/worktree-agent-structured-inventory.test.ts",
- "src/renderer/src/lib/worktree-creation-structured-session.test.ts",
- "src/renderer/src/lib/worktree-operation-route.test.ts",
- "src/renderer/src/lib/worktree-palette-runtime-owner-identity.test.ts",
- "src/renderer/src/lib/worktree-runtime-owner-index.test.ts",
- "src/renderer/src/lib/worktree-sort-order-persistence.test.ts",
- "src/renderer/src/renderer-node-builtin-boundary.test.ts",
- "src/renderer/src/runtime/agent-session-keyboard-capability.test.ts",
- "src/renderer/src/runtime/browser-workspace-tab-close-plan.test.ts",
- "src/renderer/src/runtime/browser-workspace-tab-close.test.ts",
- "src/renderer/src/runtime/focus-runtime-terminal-surface-chat-view.test.ts",
- "src/renderer/src/runtime/gitlab-job-trace-client.test.ts",
- "src/renderer/src/runtime/host-session-mirror-settle-receipt-frames.test.tsx",
- "src/renderer/src/runtime/host-session-snapshot-authority-client-hosted.test.ts",
- "src/renderer/src/runtime/local-runtime-capabilities.test.ts",
- "src/renderer/src/runtime/remote-agent-row-last-assistant-message.test.ts",
- "src/renderer/src/runtime/remote-server-install-failure-probe.test.ts",
- "src/renderer/src/runtime/runtime-path-existence-queue-pairing.test.ts",
- "src/renderer/src/runtime/runtime-provider-accounts-client.test.ts",
- "src/renderer/src/runtime/runtime-rpc-client-pairing-revision.test.ts",
- "src/renderer/src/runtime/runtime-terminal-inspection.test.ts",
- "src/renderer/src/runtime/runtime-terminal-stream.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-editor-diff-tabs.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-failure.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-staged-focus.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-client-owned-page-content.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-initial-terminal-relaunch.test.tsx",
- "src/renderer/src/runtime/web-session-tabs-sync-layout-duplicate-groups.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-terminal-mirroring.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-absence-across-republication.test.ts",
- "src/renderer/src/runtime/window-visibility-subscription-parking.test.ts",
- "src/renderer/src/ssh/ssh-connection-recoverability.test.ts",
- "src/renderer/src/store/selectors.test.ts",
- "src/renderer/src/store/slices/active-tab-owner-worktree.test.ts",
- "src/renderer/src/store/slices/agent-status-live-freshness-request.test.ts",
- "src/renderer/src/store/slices/agent-status-manual-sleep-capture.test.ts",
- "src/renderer/src/store/slices/agent-status-tool-assistant-fields.test.ts",
- "src/renderer/src/store/slices/browser-remote-page-lifecycle.test.ts",
- "src/renderer/src/store/slices/bulk-worktree-purge-terminal-maps-leak.test.ts",
- "src/renderer/src/store/slices/dictation-model-state-stabilisation.test.ts",
- "src/renderer/src/store/slices/editor-close-file-cleanup.test.ts",
- "src/renderer/src/store/slices/editor-open-diff.test.ts",
- "src/renderer/src/store/slices/editor-preview-tab-setting.test.ts",
- "src/renderer/src/store/slices/editor-remote-branch-actions.test.ts",
- "src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts",
- "src/renderer/src/store/slices/github-issue-state-machine.test.ts",
- "src/renderer/src/store/slices/github-pr-branch-hosted-review-cache.test.ts",
- "src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts",
- "src/renderer/src/store/slices/github-work-item-cache-identity.test.ts",
- "src/renderer/src/store/slices/github-work-items-error-envelope.test.ts",
- "src/renderer/src/store/slices/hosted-review.test.ts",
- "src/renderer/src/store/slices/linear-issue-cache-refresh.test.ts",
- "src/renderer/src/store/slices/repo-owner-cache-identity.test.ts",
- "src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts",
- "src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts",
- "src/renderer/src/store/slices/repos-ephemeral-vm-cleanup-retention.test.ts",
- "src/renderer/src/store/slices/repos-project-host-capability.test.ts",
- "src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts",
- "src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts",
- "src/renderer/src/store/slices/repos.runtime-fallback.test.ts",
- "src/renderer/src/store/slices/repos.test.ts",
- "src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts",
- "src/renderer/src/store/slices/runtime-status.test.ts",
- "src/renderer/src/store/slices/settings-search-state.test.ts",
- "src/renderer/src/store/slices/ssh-target-cleanup.test.ts",
- "src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts",
- "src/renderer/src/store/slices/tabs-model-reconciliation.test.ts",
- "src/renderer/src/store/slices/tabs/tabs-reconciliation-batch-identity.test.ts",
- "src/renderer/src/store/slices/ui-hydration-workspace-preferences.test.ts",
- "src/renderer/src/store/slices/usage-snapshot-refresh.benchmark.test.ts",
- "src/renderer/src/store/slices/workspace-document-title-refresh.test.ts",
- "src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts",
- "src/renderer/src/store/slices/worktree-nav-history.test.ts",
- "src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts",
- "src/renderer/src/store/slices/worktrees-hydration-purge.test.ts",
- "src/renderer/src/store/slices/worktrees-purge-terminal-state.test.ts",
- "src/renderer/src/store/slices/worktrees-unread-state.test.ts",
- "src/renderer/src/store/slices/worktrees/listing/detected-worktree-unavailable-reason.test.ts",
- "src/renderer/src/store/terminals/terminal-tab-close-tombstone.test.ts",
- "src/renderer/src/store/terminals/terminal-workspace-routing.scale.test.ts",
- "src/renderer/src/web/preload-api/web-gitlab-api.test.ts",
- "src/renderer/src/web/web-file-mutation-methods.test.ts",
- "src/renderer/src/web/web-preload-api-clipboard.test.ts",
- "src/renderer/src/web/web-preload-api-workspace-catalog.test.ts",
- "src/renderer/src/web/web-runtime-client.test.ts",
- "src/shared/agent-detection.test.ts",
- "src/shared/agent-hook-listener-opencode-reattribution.test.ts",
- "src/shared/agent-resume-launch-command.test.ts",
- "src/shared/agent-scratch-worktrees.test.ts",
- "src/shared/agent-session-journal-producer.test.ts",
- "src/shared/agent-session-lease-adjudication.test.ts",
- "src/shared/agent-session-operation-ledger.test.ts",
- "src/shared/agent-session-option-catalog.test.ts",
- "src/shared/agent-session-pty-write-admission.test.ts",
- "src/shared/agent-status-child-work-projection.test.ts",
- "src/shared/agent-status-store-bounds.test.ts",
- "src/shared/ai-vault-search-scope-contract.test.ts",
- "src/shared/automation-host-filter.test.ts",
- "src/shared/automation-usage-summary.test.ts",
- "src/shared/binary-file-extensions.test.ts",
- "src/shared/branch-name-from-work.test.ts",
- "src/shared/browser-client-host-id-argument.test.ts",
- "src/shared/browser-network-tunnel-stream-framing.test.ts",
- "src/shared/check-job-log-retention.test.ts",
- "src/shared/claimed-agent-pty-owner.test.ts",
- "src/shared/closed-terminal-tab-tombstones.test.ts",
- "src/shared/codex-subagent-poll-scheduler.test.ts",
- "src/shared/crash-reporting.test.ts",
- "src/shared/cross-platform-path-guards.test.ts",
- "src/shared/cross-platform-path.test.ts",
- "src/shared/doc-preview-file-access.test.ts",
- "src/shared/draft-paste-ready-scanner-grok-trace-replay.test.ts",
- "src/shared/ephemeral-vm-recipe-doctor.test.ts",
- "src/shared/ephemeral-vm-recipes.test.ts",
- "src/shared/ephemeral-vm-runtime-store-rollback.test.ts",
- "src/shared/ephemeral-vm-runtime-store.test.ts",
- "src/shared/folder-workspace-worktree.test.ts",
- "src/shared/folder-workspaces.test.ts",
- "src/shared/git-branch-line-total.test.ts",
- "src/shared/git-cquoted-path.test.ts",
- "src/shared/git-metadata-path.test.ts",
- "src/shared/git-remote-url-index.test.ts",
- "src/shared/git-status-line-stats-cache.test.ts",
- "src/shared/github/pull-request-auto-merge-availability.test.ts",
- "src/shared/github/repository-identity-key.test.ts",
- "src/shared/json-text-structure-limit.test.ts",
- "src/shared/keybindings-terminal-context.test.ts",
- "src/shared/keybindings-unassigned-actions.test.ts",
- "src/shared/linear/issue-view-resume-state.test.ts",
- "src/shared/localhost-worktree-labels.test.ts",
- "src/shared/loose-ref-count.test.ts",
- "src/shared/map-with-concurrency.test.ts",
- "src/shared/mcp-config.test.ts",
- "src/shared/mobile-relay-pairing-offer.test.ts",
- "src/shared/mobile-web-bundle/bundle-rpc-contract.test.ts",
- "src/shared/native-chat-slash-commands.test.ts",
- "src/shared/native-chat-tool-icon.test.ts",
- "src/shared/native-chat-tool-pairing.test.ts",
- "src/shared/new-workspace-dialog-repo.test.ts",
- "src/shared/node-bounded-file-reader-sync.test.ts",
- "src/shared/node-readable-text.test.ts",
- "src/shared/omp-fresh-launch-shell.test.ts",
- "src/shared/orchestration-check-output.test.ts",
- "src/shared/orchestration-compatibility-evidence.test.ts",
- "src/shared/orchestration-task-display.test.ts",
- "src/shared/physical-exit-tracker.test.ts",
- "src/shared/plugins/plugin-content-pack-contributions.test.ts",
- "src/shared/plugins/plugin-install-lockfile.test.ts",
- "src/shared/plugins/plugin-panel-call-admission.test.ts",
- "src/shared/plugins/plugin-path-safety.test.ts",
- "src/shared/pty-slave-line-discipline-echo.test.ts",
- "src/shared/quick-open-fuzzy-scan.test.ts",
- "src/shared/quick-open-git-directory-collapse.test.ts",
- "src/shared/raster-image-dimensions.test.ts",
- "src/shared/react-update-depth-attribution.test.ts",
- "src/shared/relay-optional-artifacts.test.ts",
- "src/shared/remote-runtime-request-response-router.test.ts",
- "src/shared/remote-runtime-socket-liveness.test.ts",
- "src/shared/require-tui-agent-config.test.ts",
- "src/shared/secure-path-windows-acl.win32.test.ts",
- "src/shared/setup-agent-sequencing.test.ts",
- "src/shared/setup-script-imports.test.ts",
- "src/shared/skill-deletion-eligibility.test.ts",
- "src/shared/source-control-ai-actions.test.ts",
- "src/shared/source-control-primary-action-decision.test.ts",
- "src/shared/ssh-pty-id.test.ts",
- "src/shared/ssh-retained-payload-admission.test.ts",
- "src/shared/ssh-types.test.ts",
- "src/shared/structural-value-equality.test.ts",
- "src/shared/structured-agent-session-projection.test.ts",
- "src/shared/structured-agent-session-status-tool-line.test.ts",
- "src/shared/task-providers.test.ts",
- "src/shared/task-query.test.ts",
- "src/shared/telemetry-common-props.test.ts",
- "src/shared/terminal-partial-escape-tail.fuzz.test.ts",
- "src/shared/tui-agent-prompt-transport.test.ts",
- "src/shared/tui-agent-startup-session-options.test.ts",
- "src/shared/window-shortcut-policy-agent-dashboard.test.ts",
- "src/shared/windows-command-line-budget.test.ts",
- "src/shared/workspace-cleanup-applied-filters.test.ts",
- "src/shared/workspace-cleanup.test.ts",
- "src/shared/workspace-session-browser-history.test.ts",
- "src/shared/workspace-session-terminal-buffers.test.ts",
- "src/shared/worktree/create-preparation.test.ts",
- "src/shared/worktree/github-pr-suppression.test.ts",
- "src/shared/worktree/visibility-sources.test.ts",
- "tests/e2e/folder-upgrade-identity-persistence.unit.test.ts",
- "tests/e2e/global-teardown.unit.test.ts",
- "tests/e2e/helpers/electron-home-isolation.unit.test.ts",
- "tests/e2e/helpers/electron-main-evaluate-retry.unit.test.ts",
- "tests/e2e/helpers/golden-source-control.unit.test.ts",
- "tests/e2e/helpers/remote-skill-cloud-fixture.unit.test.ts",
- "tests/e2e/remote-terminal-tab-retirement.unit.test.ts",
- "tests/e2e/ssh-codex-replay-reply-probe.unit.test.ts",
- "tests/e2e/structured-agent-session-read-owner.unit.test.ts",
- "tests/tools/relay-bench/relay-bench-invocation.test.mjs"
- ],
- "durationMs": 851039
- },
- {
- "files": [
- "config/scripts/build-linux-local.test.mjs",
- "config/scripts/build-mac-local.test.mjs",
- "config/scripts/build-orcad-prebuilds.test.mjs",
- "config/scripts/computer-use-modifier-safety.test.mjs",
- "config/scripts/computer-use-skill-guidance.test.mjs",
- "config/scripts/ensure-native-runtime.test.mjs",
- "config/scripts/lint-staged-worktree-backup.test.mjs",
- "config/scripts/locale-translation-policy.zh-status-bar-usage.test.mjs",
- "config/scripts/mobile-launch-contract-workflow.test.mjs",
- "config/scripts/mobile-web-app-drawer-render.test.mjs",
- "config/scripts/mobile-web-app-haptics-seam.test.mjs",
- "config/scripts/mobile-web-app-route-manifest.test.mjs",
- "config/scripts/mobile-web-app-session-text-inputs.test.mjs",
- "config/scripts/mobile-web-app-terminal-live-input-render.test.mjs",
- "config/scripts/mobile-web-page-routes.test.mjs",
- "config/scripts/packaged-browser-lane-contract.test.mjs",
- "config/scripts/patched-dependencies-frozen-install.test.mjs",
- "config/scripts/pr-workflow-parallelism.test.mjs",
- "config/scripts/project-renderer-web-client.test.mjs",
- "config/scripts/release-cut-sourcemap-publish.test.mjs",
- "config/scripts/renderer-boot-graph.test.mjs",
- "config/scripts/script-entry-detection.test.mjs",
- "config/scripts/space-sharing-copy.test.ts",
- "config/scripts/summarize-terminal-perf-report.test.mjs",
- "config/scripts/terminal-perf-report-annotations.test.mjs",
- "config/scripts/verify-packaged-browser-participation.test.mjs",
- "config/scripts/verify-packaged-daemon-entry.test.mjs",
- "config/scripts/verify-skills-cli-runtime.test.mjs",
- "config/scripts/verify-windows-inner-signature.test.mjs",
- "config/scripts/win-crash-survival-e2e.test.mjs",
- "config/scripts/win32-test-lane-registration.test.mjs",
- "config/scripts/windows-process-tree-gyp-path.test.mjs",
- "config/scripts/windows-process-tree-gyp-rebuild.test.mjs",
- "config/scripts/xterm-image-resize-contract.test.mjs",
- "src/cli/base64-payload-byte-count.test.ts",
- "src/cli/browser-cookie-credentials-empty-value.test.ts",
- "src/cli/handler-group-manifest.test.ts",
- "src/cli/handlers/orchestration-federated-legacy-settlement.test.ts",
- "src/cli/handlers/orchestration-migration.test.ts",
- "src/cli/handlers/orchestration-request-show-cli.test.ts",
- "src/cli/handlers/orchestration-worker-show-wait-cli.test.ts",
- "src/cli/handlers/orchestration.test.ts",
- "src/cli/index-device-commands.test.ts",
- "src/cli/index-serve-command.test.ts",
- "src/cli/index-worktree-create-target.test.ts",
- "src/cli/runtime/client-timeout-policy.test.ts",
- "src/cli/runtime/envelope-schema.test.ts",
- "src/cli/runtime/environments.test.ts",
- "src/cli/runtime/orchestration-recovery-command.test.ts",
- "src/cli/specs/skills.test.ts",
- "src/cli/vocabulary-policy.test.ts",
- "src/main/agent-awake-service.test.ts",
- "src/main/agent-hooks/hook-status-session-tabs-republish.test.ts",
- "src/main/agent-hooks/installer-utils-remote.test.ts",
- "src/main/agent-hooks/managed-agent-hook-controls.test.ts",
- "src/main/agent-hooks/managed-hook-command-contract.test.ts",
- "src/main/agent-hooks/managed-hook-install-lock.test.ts",
- "src/main/agent-hooks/server-ingest-terminal-status.test.ts",
- "src/main/agent-hooks/server-structured-canonical-status.test.ts",
- "src/main/agent-hooks/spool.test.ts",
- "src/main/agent-state-file-reader.test.ts",
- "src/main/ai-vault-search/session-search-deleted-sources.test.ts",
- "src/main/ai-vault-search/session-search-fts5-contract.test.ts",
- "src/main/ai-vault-search/session-search-orphan-rows.test.ts",
- "src/main/ai-vault-search/session-search-retention-delete.test.ts",
- "src/main/ai-vault-search/session-search-scope-entry-points.test.ts",
- "src/main/ai-vault-search/session-search-store-is-memory.test.ts",
- "src/main/ai-vault/claude-project-dir-encoding.test.ts",
- "src/main/ai-vault/omp-session-root.test.ts",
- "src/main/ai-vault/remote-session-scanner.test.ts",
- "src/main/ai-vault/runtime-session-scanner.test.ts",
- "src/main/ai-vault/session-document-stream-parity.test.ts",
- "src/main/ai-vault/session-scanner-devin-contention.test.ts",
- "src/main/ai-vault/session-scanner-kimi-index-cache.test.ts",
- "src/main/ai-vault/session-scanner-omp-subagent-listing.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sources.test.ts",
- "src/main/ai-vault/session-scanner-opencode-sqlite.test.ts",
- "src/main/ai-vault/session-scanner-opencode2-sqlite.test.ts",
- "src/main/ai-vault/session-scanner-preview-window-truncation.test.ts",
- "src/main/ai-vault/session-scanner-scope.test.ts",
- "src/main/ai-vault/session-scanner-unlimited-dedup.test.ts",
- "src/main/amp/hook-service.test.ts",
- "src/main/automations/automation-skip-coalescing.test.ts",
- "src/main/automations/external-manager.test.ts",
- "src/main/automations/runtime-terminal-run-observer.test.ts",
- "src/main/azure-devops/pull-request-mappers.test.ts",
- "src/main/bitbucket/pull-request-mappers.test.ts",
- "src/main/browser/agent-browser-bridge-keypress-input.test.ts",
- "src/main/browser/agent-browser-session-reset.test.ts",
- "src/main/browser/browser-certificate-trust-controller.test.ts",
- "src/main/browser/browser-client-host-command-dispatcher.test.ts",
- "src/main/browser/browser-client-network-route-registry.test.ts",
- "src/main/browser/browser-client-page-command-integration.test.ts",
- "src/main/browser/browser-client-page-inventory.test.ts",
- "src/main/browser/browser-client-page-published-url.test.ts",
- "src/main/browser/browser-client-page-upload-routing.test.ts",
- "src/main/browser/browser-client-route-cookie-import-partition-parity.test.ts",
- "src/main/browser/browser-client-upload-command.test.ts",
- "src/main/browser/browser-client-upload-transfer.test.ts",
- "src/main/browser/browser-cookie-clear-store-lifecycle.test.ts",
- "src/main/browser/browser-cookie-import-undecryptable.test.ts",
- "src/main/browser/browser-cookie-import.helium.test.ts",
- "src/main/browser/browser-cookie-source-partition.test.ts",
- "src/main/browser/browser-manager-downloads.test.ts",
- "src/main/browser/browser-manager-grab-selection.test.ts",
- "src/main/browser/browser-manager-guest-lifecycle.test.ts",
- "src/main/browser/browser-manager-popup-child.test.ts",
- "src/main/browser/browser-manager-viewport-ownership.test.ts",
- "src/main/browser/browser-network-execution-route.test.ts",
- "src/main/browser/browser-network-tunnel-session-aggregate-memory.test.ts",
- "src/main/browser/browser-route-persisted-worker-egress.electron.test.ts",
- "src/main/browser/browser-route-tcp-egress.electron.test.ts",
- "src/main/browser/browser-session-partition-policies.test.ts",
- "src/main/browser/browser-session-user-agent-migration-inspection.test.ts",
- "src/main/browser/doc-preview-guest-policy.test.ts",
- "src/main/browser/grab-guest-script.test.ts",
- "src/main/browser/offscreen-browser-backend-lifecycle.test.ts",
- "src/main/browser/offscreen-browser-backend.web-preferences.test.ts",
- "src/main/browser/paired-runtime-browser-client-host-registry.test.ts",
- "src/main/browser/system-ssh-socks-client-socket.test.ts",
- "src/main/claude-accounts/runtime-auth-service-deselect-restore.test.ts",
- "src/main/claude/claude-background-task-retention.test.ts",
- "src/main/claude/claude-background-task-tracker.test.ts",
- "src/main/claude/claude-child-process-environment.test.ts",
- "src/main/claude/claude-session-end-install.test.ts",
- "src/main/claude/claude-structured-auth-parity.test.ts",
- "src/main/claude/claude-structured-dispatch-content.test.ts",
- "src/main/claude/claude-structured-inbound-control.test.ts",
- "src/main/claude/claude-structured-model-preflight.test.ts",
- "src/main/claude/claude-structured-session-adapter-turns.test.ts",
- "src/main/claude/claude-structured-session-adapter.test.ts",
- "src/main/claude/claude-turn-outcome.test.ts",
- "src/main/cli/cli-command-installation-races.test.ts",
- "src/main/cli/keyed-promise-queue.test.ts",
- "src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts",
- "src/main/codex-accounts/runtime-home-system-default-mirror-readback.test.ts",
- "src/main/codex-accounts/service-quota-refresh-decoupling.test.ts",
- "src/main/codex-usage/codex-rollout-resume-state.test.ts",
- "src/main/codex-usage/store-automation-usage.test.ts",
- "src/main/codex-usage/store-model-pricing.test.ts",
- "src/main/codex/codex-app-server-client.test.ts",
- "src/main/codex/codex-notice-item-translation.test.ts",
- "src/main/codex/codex-real-home-hook-install.test.ts",
- "src/main/codex/codex-state-db.test.ts",
- "src/main/codex/codex-structured-dispatch-admission.test.ts",
- "src/main/codex/codex-structured-item-translation.test.ts",
- "src/main/codex/codex-structured-journal-translation-streams.test.ts",
- "src/main/codex/codex-structured-journal-translation-turn-lifecycle.test.ts",
- "src/main/codex/codex-structured-journal-translation.test.ts",
- "src/main/codex/codex-structured-owner-identity.test.ts",
- "src/main/codex/codex-structured-session-cancel.test.ts",
- "src/main/codex/codex-tool-identity-translation.test.ts",
- "src/main/codex/codex-trust-config-mutation-queue.test.ts",
- "src/main/codex/codex-tui-resume-real-binary.integration.test.ts",
- "src/main/codex/config-toml-trust-hash.test.ts",
- "src/main/codex/hook-service-user-hook-mirroring.test.ts",
- "src/main/codex/hook-service-wsl-runtime.test.ts",
- "src/main/codex/sta-4823-shared-state-survives-a-failed-read.test.ts",
- "src/main/computer/computer-sidecar-diagnostics.test.ts",
- "src/main/computer/sidecar-client.test.ts",
- "src/main/computer/sidecar-provider-reaping.integration.test.ts",
- "src/main/crash-reporting/durable-crash-breadcrumb.test.ts",
- "src/main/crash-reporting/main-process-lifecycle-identity.test.ts",
- "src/main/crash-reporting/pre-gone-host-memory.test.ts",
- "src/main/crash-reporting/self-initiated-tree-kill-log.test.ts",
- "src/main/daemon/daemon-folder-access-reset.test.ts",
- "src/main/daemon/daemon-health-socket-cleanup.test.ts",
- "src/main/daemon/daemon-init-child-readiness.test.ts",
- "src/main/daemon/daemon-pty-adapter-cold-restore-seed.test.ts",
- "src/main/daemon/daemon-pty-adapter-replacement-exit-race.test.ts",
- "src/main/daemon/daemon-respawn-throttle.test.ts",
- "src/main/daemon/daemon-server-attach-only.test.ts",
- "src/main/daemon/daemon-server.test.ts",
- "src/main/daemon/daemon-session-owner-resolution.test.ts",
- "src/main/daemon/daemon-spawner.test.ts",
- "src/main/daemon/daemon-stream-backpressure.test.ts",
- "src/main/daemon/headless-emulator-fidelity.fuzz.test.ts",
- "src/main/daemon/osc7-uri-extraction.test.ts",
- "src/main/daemon/pty-subprocess-cwd-cancel-identity.test.ts",
- "src/main/daemon/pty-subprocess-env-inheritance.test.ts",
- "src/main/daemon/pty-subprocess-foreground-identity.test.ts",
- "src/main/daemon/pty-subprocess-foreground-scan-cadence.test.ts",
- "src/main/daemon/pty-subprocess-handle-lifecycle.test.ts",
- "src/main/daemon/pty-subprocess-io-failure-native.test.ts",
- "src/main/daemon/reattach-snapshot.test.ts",
- "src/main/daemon/shell-ready-bash-wrapper.test.ts",
- "src/main/daemon/terminal-descendant-shutdown.test.ts",
- "src/main/daemon/terminal-history-log.test.ts",
- "src/main/daemon/terminal-host.test.ts",
- "src/main/daemon/terminal-snapshot-color-parity.test.ts",
- "src/main/emulator/android/android-app-control.test.ts",
- "src/main/emulator/android/android-capability-operations.test.ts",
- "src/main/emulator/android/android-input-commands.test.ts",
- "src/main/emulator/emulator-bridge.test.ts",
- "src/main/emulator/serve-sim-accessibility-tree.test.ts",
- "src/main/ephemeral-vm-recipe-runner.test.ts",
- "src/main/ephemeral-vm-resume-integrity.test.ts",
- "src/main/external-editor-launch.test.ts",
- "src/main/ghostty/index.test.ts",
- "src/main/git/check-ignored-paths.test.ts",
- "src/main/git/command-runner/gh-spawn-boundary.test.ts",
- "src/main/git/command-runner/git-admission-output-parity.test.ts",
- "src/main/git/command-runner/git-admission-span.test.ts",
- "src/main/git/command-runner/git-command-timeout-behavior.test.ts",
- "src/main/git/command-runner/wsl-command-resolution-windows-binary.test.ts",
- "src/main/git/commit-object-ref.test.ts",
- "src/main/git/fork-remote-refspec.test.ts",
- "src/main/git/repo-detection.test.ts",
- "src/main/git/source-control/resolve-git-dir.test.ts",
- "src/main/git/worktree-create-preparation-real-git.test.ts",
- "src/main/git/worktree-created-disk-witness.test.ts",
- "src/main/git/worktree-include-file.test.ts",
- "src/main/git/wsl-linked-worktree-git-routing.test.ts",
- "src/main/github/client-issue-origin-preference.test.ts",
- "src/main/github/client-pr-push-target.test.ts",
- "src/main/github/client-starred.test.ts",
- "src/main/github/client-tracked-upstream-snapshot.test.ts",
- "src/main/github/github-api-repository-validation.test.ts",
- "src/main/github/github-remote-identity-parsing.test.ts",
- "src/main/github/github-repository-identity.fork-owner-repo.test.ts",
- "src/main/github/pr-refresh-error-classification.test.ts",
- "src/main/github/project-view-host-auth.test.ts",
- "src/main/github/project-view/mutations.test.ts",
- "src/main/github/project-view/project-view-table.test.ts",
- "src/main/github/work-item-details-enterprise-host.test.ts",
- "src/main/github/work-item-details-file-viewed.test.ts",
- "src/main/gitlab/gitlab-known-host-probe.test.ts",
- "src/main/gitlab/mr-head-tracking-ref.test.ts",
- "src/main/gitlab/work-item-details.test.ts",
- "src/main/grok/grok-hook-remnant-removal.test.ts",
- "src/main/hang-watchdog/hang-detection-marker.test.ts",
- "src/main/hooks-effective-hook-resolution.test.ts",
- "src/main/hooks-issue-command.test.ts",
- "src/main/hooks-setup-runner-script.test.ts",
- "src/main/ipc/agent-pane-retirement-ipc.test.ts",
- "src/main/ipc/browser-client-page-metadata-ipc.test.ts",
- "src/main/ipc/deferred-emoji-shortcode-dataset.test.ts",
- "src/main/ipc/filesystem-auth.test.ts",
- "src/main/ipc/filesystem-git-status-staging.test.ts",
- "src/main/ipc/filesystem-list-files-name-filter.test.ts",
- "src/main/ipc/filesystem-search-file-paths.test.ts",
- "src/main/ipc/filesystem-watcher-wsl.test.ts",
- "src/main/ipc/github-wsl-runtime-routing.test.ts",
- "src/main/ipc/gitlab-repo-access.test.ts",
- "src/main/ipc/jira-cancellable-requests.test.ts",
- "src/main/ipc/macos-keyboard-layout-change-notifications.test.ts",
- "src/main/ipc/parcel-watcher-supervisor-capacity.test.ts",
- "src/main/ipc/preflight-host-cli-status.test.ts",
- "src/main/ipc/preflight-windows-path-refresh.repro.test.ts",
- "src/main/ipc/pty-buffer-snapshot-dispatch.test.ts",
- "src/main/ipc/pty-controller-ownership-routing.test.ts",
- "src/main/ipc/pty-hidden-delivery-gate.test.ts",
- "src/main/ipc/pty-management.test.ts",
- "src/main/ipc/pty-pending-output-cap.test.ts",
- "src/main/ipc/pty-renderer-lifecycle-delivery-reset.test.ts",
- "src/main/ipc/pty-serializer-settlement-mapping.test.ts",
- "src/main/ipc/pty-spawn-codex-home-unavailable.test.ts",
- "src/main/ipc/pty-spawn-env-terminal-basics.test.ts",
- "src/main/ipc/pty/ipc/spawn-commit-ssh-lease-cardinality.test.ts",
- "src/main/ipc/pty/pane/launch-authority.test.ts",
- "src/main/ipc/pty/pane/stable-pane-absence-death-certificate.test.ts",
- "src/main/ipc/pty/pty-spawn-shell-override-parity.test.ts",
- "src/main/ipc/renderer-terminal-serializer-readiness.test.ts",
- "src/main/ipc/repos-execution-host-catalog.test.ts",
- "src/main/ipc/runtime-environment-federated-read-transport.bench.test.ts",
- "src/main/ipc/runtime-environments-capability-cache.test.ts",
- "src/main/ipc/runtime-upload-file-stream.test.ts",
- "src/main/ipc/shell.test.ts",
- "src/main/ipc/skill-install-progress-ipc.test.ts",
- "src/main/ipc/skills.test.ts",
- "src/main/ipc/source-control-ai-linked-issue.test.ts",
- "src/main/ipc/ssh-app-shutdown.test.ts",
- "src/main/ipc/ssh-pty-output-model-migration.test.ts",
- "src/main/ipc/terminal-git-credential-guard.test.ts",
- "src/main/ipc/tui-agent-detection-commands.test.ts",
- "src/main/ipc/watcher-event-root-path-rewrite.test.ts",
- "src/main/ipc/workspace-cleanup-snapshot-ipc.test.ts",
- "src/main/ipc/worktree-create-lineage.test.ts",
- "src/main/ipc/worktree-path-deduplication.test.ts",
- "src/main/ipc/worktree-push-target-reconciliation.test.ts",
- "src/main/ipc/worktrees-detected-scan-cache.test.ts",
- "src/main/ipc/worktrees-discovery-metadata-backfill.test.ts",
- "src/main/ipc/worktrees-listing-fallback-rows.test.ts",
- "src/main/ipc/worktrees-removal-recovery.test.ts",
- "src/main/ipc/worktrees-remove-host-disambiguation.test.ts",
- "src/main/ipc/worktrees/listing/detected-provider-listing-overtaken-scan.test.ts",
- "src/main/ipc/worktrees/listing/detected-scan-failure-authority.test.ts",
- "src/main/linear/issue-context-inline-media.test.ts",
- "src/main/linux-package-install-command.test.ts",
- "src/main/local-worktree-metadata-prune-gate.test.ts",
- "src/main/local-worktree-removal-recovery-live.test.ts",
- "src/main/localhost-worktree-label-proxy.test.ts",
- "src/main/macos-full-disk-access-status.test.ts",
- "src/main/memory/windows-process-sample-parsing.test.ts",
- "src/main/minimax/minimax-cookie-store.test.ts",
- "src/main/native-chat/agent-session-journal/journal-corruption-repair.test.ts",
- "src/main/native-chat/agent-session-journal/journal-dispatch-observation.test.ts",
- "src/main/native-chat/agent-session-journal/journal-row-schema-version.test.ts",
- "src/main/native-chat/agent-session-journal/journal-store-schema.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-delta-coalescer.test.ts",
- "src/main/native-chat/agent-session-wire/agent-session-history-forward-read-budget.test.ts",
- "src/main/native-chat/agent-session-wire/provider-frame-activity.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-attach-reconciliation.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-claude-options-round-trip.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-close-retry.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-host.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-continuation.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-restart-status-publication.test.ts",
- "src/main/native-chat/agent-session-wire/structured-agent-session-turn-completion-feed.test.ts",
- "src/main/native-chat/agent-session-wire/structured-conversation-command.test.ts",
- "src/main/native-chat/agent-session-wire/unhandled-provider-frame.test.ts",
- "src/main/native-chat/session-file-resolver-claude-roots.test.ts",
- "src/main/native-chat/transcript-interruption-message.test.ts",
- "src/main/native-chat/wsl-codex-session-path-scan.test.ts",
- "src/main/observability/instrumentation.test.ts",
- "src/main/observability/local-file-sink-memory.test.ts",
- "src/main/opencode-usage/opencode2-session-usage.test.ts",
- "src/main/opencode/hook-plugin-background-child-completion.test.ts",
- "src/main/orca-profiles/profile-cloud-session-store.test.ts",
- "src/main/orcad/electron-sidecar-tab-registry.test.ts",
- "src/main/orcad/external-chromium-browser-process.integration.test.ts",
- "src/main/orcad/orcad-bundle-native-load-order.test.ts",
- "src/main/persistence-async-write-syscalls.test.ts",
- "src/main/persistence-host-partitioned-ssh-pty-bindings.test.ts",
- "src/main/persistence-ssh-pending-pty-kill.test.ts",
- "src/main/persistence-workspace-status-workflow.test.ts",
- "src/main/persistence-worktree-deletion-fencing.test.ts",
- "src/main/persistence/applying-settings/settings-update-terminal-contrast.test.ts",
- "src/main/persistence/applying-settings/terminal-settings-migrations.test.ts",
- "src/main/persistence/loading-store/secret-sentinel-substitution.test.ts",
- "src/main/persistence/loading-store/workspace-session-terminal-binding-replay.test.ts",
- "src/main/persistence/restoring-sessions/pane-alias-normalization-scaling.test.ts",
- "src/main/persistence/restoring-sessions/terminal-layout-normalization.test.ts",
- "src/main/persistence/scheduling-automations/automation-run-operations.test.ts",
- "src/main/persistence/tracking-repos/local-worktree-metadata-scan-expectation.test.ts",
- "src/main/persistence/tracking-repos/worktree-metadata-normalization.test.ts",
- "src/main/pi/agent-status-extension-nested-run-settlement.test.ts",
- "src/main/pi/agent-status-extension-omp-lifecycle.test.ts",
- "src/main/pi/agent-status-owner-recovery.test.ts",
- "src/main/pi/titlebar-extension-service.test.ts",
- "src/main/plugins/plugin-bundled-bootstrap-coordinator.test.ts",
- "src/main/plugins/plugin-host-conformance.test.ts",
- "src/main/plugins/plugin-list-projection.test.ts",
- "src/main/plugins/plugin-panel-sessions.test.ts",
- "src/main/plugins/plugin-service-integrity.test.ts",
- "src/main/plugins/plugin-uninstall-lifecycle.test.ts",
- "src/main/plugins/plugin-vm-recipe-registry.test.ts",
- "src/main/ports/advertised-url-watcher-pid-validation.test.ts",
- "src/main/ports/advertised-url-watcher.test.ts",
- "src/main/project-groups/nested-repo-import.test.ts",
- "src/main/providers/local-pty-child-process-verdict.test.ts",
- "src/main/providers/local-pty-provider-spawn-session.test.ts",
- "src/main/providers/local-pty-shell-ready-wrapper-generation.test.ts",
- "src/main/providers/ssh-pty-provider-reattach-incarnation.test.ts",
- "src/main/providers/windows-powershell-executable.test.ts",
- "src/main/pty/codex-home-wsl-env.test.ts",
- "src/main/quit-teardown-agent-browser-daemons.test.ts",
- "src/main/quit-teardown-start-gate.test.ts",
- "src/main/rate-limits/account-runtime-target-sync.test.ts",
- "src/main/rate-limits/auth-filesystem-operation.test.ts",
- "src/main/rate-limits/claude-fetcher-managed-account-usage.test.ts",
- "src/main/rate-limits/gemini-usage-fetcher.test.ts",
- "src/main/rate-limits/minimax/minimax-fetcher.test.ts",
- "src/main/rate-limits/opencode-go-status-parsing.test.ts",
- "src/main/remote-agent-trust-presets.test.ts",
- "src/main/repo-worktrees.test.ts",
- "src/main/runtime/agent-session-conversation-name-store.test.ts",
- "src/main/runtime/agent-session-launch-env-admission.test.ts",
- "src/main/runtime/agent-session-operation-admission.test.ts",
- "src/main/runtime/agent-session-provider-handle-transition.test.ts",
- "src/main/runtime/agent-session-pty-write-gate.test.ts",
- "src/main/runtime/agent-session-record-store.test.ts",
- "src/main/runtime/agent-terminal-launch-trust-host.test.ts",
- "src/main/runtime/browser-host-client-page-adoption-grants.test.ts",
- "src/main/runtime/browser-host-lease-download-transfer-cleanup.test.ts",
- "src/main/runtime/claude-agent-teams-pty-exit-leak.test.ts",
- "src/main/runtime/claude-agent-teams-service.test.ts",
- "src/main/runtime/exit-provenance-audit.test.ts",
- "src/main/runtime/expired-ssh-lease-pane-candidacy.test.ts",
- "src/main/runtime/file-watcher-host.test.ts",
- "src/main/runtime/headless-terminal-dispose-write-ordering.test.ts",
- "src/main/runtime/missing-worktree-terminal-reconciliation.test.ts",
- "src/main/runtime/mobile-notification-dismissal-store.test.ts",
- "src/main/runtime/mobile-rpc-allowlist.test.ts",
- "src/main/runtime/muse-readiness-transcript.test.ts",
- "src/main/runtime/orca-runtime-automations.test.ts",
- "src/main/runtime/orca-runtime-browser-headless.test.ts",
- "src/main/runtime/orca-runtime-files-preview-budget.test.ts",
- "src/main/runtime/orca-runtime-files-ssh-chunk-reads.test.ts",
- "src/main/runtime/orca-runtime-files-ssh-rearm.test.ts",
- "src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts",
- "src/main/runtime/orca-runtime-terminal-close-continuity.test.ts",
- "src/main/runtime/orca-runtime.test.ts",
- "src/main/runtime/orchestration-messages-fake-parity.test.ts",
- "src/main/runtime/orchestration-structured-chat-lease.test.ts",
- "src/main/runtime/orchestration/coordinator-dispatch-unobserved-prompt.test.ts",
- "src/main/runtime/orchestration/db-task-dispatch-races.test.ts",
- "src/main/runtime/orchestration/db-undelivered-mailboxes.test.ts",
- "src/main/runtime/orchestration/db/pane-key-match.test.ts",
- "src/main/runtime/orchestration/dispatch-consumer-generation-migration.test.ts",
- "src/main/runtime/orchestration/federation-sync.test.ts",
- "src/main/runtime/orchestration/mailbox-pointer-submit.test.ts",
- "src/main/runtime/orchestration/orchestration-delivery-consumption.test.ts",
- "src/main/runtime/orchestration/orchestration-legacy-storage-db.test.ts",
- "src/main/runtime/orchestration/orchestration-run-list-compatibility.test.ts",
- "src/main/runtime/orchestration/setup-completion-signal.test.ts",
- "src/main/runtime/pty-shell-ownership-mirror.test.ts",
- "src/main/runtime/pty-transcript-prune-wait-cache.test.ts",
- "src/main/runtime/pty-waiver-source-invariant.test.ts",
- "src/main/runtime/push/desktop-push-service.test.ts",
- "src/main/runtime/push/push-host-proof.test.ts",
- "src/main/runtime/quarter-circle-title-send-authorization.test.ts",
- "src/main/runtime/queued-terminal-graph-exit.test.ts",
- "src/main/runtime/relay/relay-region-preference.test.ts",
- "src/main/runtime/remote-agent-session-host-authority.integration.test.ts",
- "src/main/runtime/remote-runtime-request-connection.integration.test.ts",
- "src/main/runtime/renderer-browser-session-reconciliation.test.ts",
- "src/main/runtime/repo-icon-fork-backfill.test.ts",
- "src/main/runtime/repo-worktree-resolution-scan.test.ts",
- "src/main/runtime/retained-tail-redraw-window.equivalence.test.ts",
- "src/main/runtime/rpc/e2ee-crypto.test.ts",
- "src/main/runtime/rpc/methods/agent-launch-structured-prompt.test.ts",
- "src/main/runtime/rpc/methods/browser-client-host-attach-adoption.test.ts",
- "src/main/runtime/rpc/methods/browser-client-host-reconciliation.test.ts",
- "src/main/runtime/rpc/methods/diagnostics.test.ts",
- "src/main/runtime/rpc/methods/files-doc-preview.test.ts",
- "src/main/runtime/rpc/methods/github.test.ts",
- "src/main/runtime/rpc/methods/gitlab.test.ts",
- "src/main/runtime/rpc/methods/mobile-web-bundle-read-concurrency.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federated-transport-safety.test.ts",
- "src/main/runtime/rpc/methods/orchestration/federation/federation.test.ts",
- "src/main/runtime/rpc/methods/orchestration/gates/gate-run-authorization.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/ask.test.ts",
- "src/main/runtime/rpc/methods/orchestration/messaging/check.test.ts",
- "src/main/runtime/rpc/methods/orchestration/runs/run-receipt.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-release-runtime-incarnation.test.ts",
- "src/main/runtime/rpc/methods/orchestration/worker/worker-start-terminal-target.test.ts",
- "src/main/runtime/rpc/methods/runtime-client-capabilities.test.ts",
- "src/main/runtime/rpc/methods/session-tabs-inventory-census-race.test.ts",
- "src/main/runtime/rpc/methods/speech.test.ts",
- "src/main/runtime/rpc/methods/ssh.test.ts",
- "src/main/runtime/rpc/methods/structured-agent-session-policy.test.ts",
- "src/main/runtime/rpc/methods/structured-worker-read-cursor.test.ts",
- "src/main/runtime/rpc/methods/terminal-navigation.test.ts",
- "src/main/runtime/rpc/orchestration-legacy-takeover-dispatcher.test.ts",
- "src/main/runtime/rpc/orchestration-mutation-request-show-legacy.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-input-write-rejection.test.ts",
- "src/main/runtime/rpc/terminal-multiplex-resync-replay-trim.test.ts",
- "src/main/runtime/rpc/terminal-opencode-send-guard.integration.test.ts",
- "src/main/runtime/rpc/terminal-send-launch-draft-resolution.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-buffer.test.ts",
- "src/main/runtime/rpc/terminal-subscribe-lease-only.test.ts",
- "src/main/runtime/rpc/unpaired-device-auth-throttle.test.ts",
- "src/main/runtime/runtime-file-target-execution-host.test.ts",
- "src/main/runtime/runtime-folder-worktree-create.test.ts",
- "src/main/runtime/runtime-hook-agent-row-selection.test.ts",
- "src/main/runtime/runtime-local-worktree-materialization.test.ts",
- "src/main/runtime/runtime-metadata.test.ts",
- "src/main/runtime/runtime-owned-terminal-publication-lineage.test.ts",
- "src/main/runtime/runtime-rpc-long-poll-transport.test.ts",
- "src/main/runtime/runtime-rpc-mobile-method-allowlist.test.ts",
- "src/main/runtime/runtime-session-search-settings.test.ts",
- "src/main/runtime/runtime-socket-sweep.test.ts",
- "src/main/runtime/session-tabs-inventory-publication.test.ts",
- "src/main/runtime/structured-tui-exit-proof.test.ts",
- "src/main/runtime/structured-worker-takeover-pane-key.test.ts",
- "src/main/runtime/terminal-ansi-pending-retention.test.ts",
- "src/main/runtime/terminal-focus-navigation-coalescer.test.ts",
- "src/main/runtime/terminal-orphan-topology.test.ts",
- "src/main/runtime/terminal-tail-row-retention.test.ts",
- "src/main/runtime/terminal-wait-name-only-idle.test.ts",
- "src/main/runtime/windows-firewall-remote-scope.test.ts",
- "src/main/runtime/workspace-session-membership-scaling.test.ts",
- "src/main/runtime/worktree-launch-host-repo.test.ts",
- "src/main/server/serve-stdout-boundary.test.ts",
- "src/main/skills/agent-skill-selection.test.ts",
- "src/main/skills/discovery-filter-sharing.test.ts",
- "src/main/skills/skill-client-mediated-transfer-cancellation.test.ts",
- "src/main/skills/skill-client-mediated-transfer.test.ts",
- "src/main/skills/skill-cloud-service.test.ts",
- "src/main/skills/skill-discovery-order.test.ts",
- "src/main/skills/skill-discovery-wsl-script-roundtrip.test.ts",
- "src/main/skills/skill-discovery-wsl.test.ts",
- "src/main/skills/skill-install-destinations.test.ts",
- "src/main/skills/skill-install-lock-release.test.ts",
- "src/main/skills/skill-package-deterministic-gzip.test.ts",
- "src/main/skills/skill-process-contention-child.test.ts",
- "src/main/skills/skill-provider-runtime-roots.test.ts",
- "src/main/skills/skill-transaction-startup-recovery.test.ts",
- "src/main/skills/skill-update-convergence.test.ts",
- "src/main/skills/skill-wsl-delete.integration.test.ts",
- "src/main/source-control/hosted-review-dirty-preflight-wsl-paths.test.ts",
- "src/main/speech/model-manager-download-error.test.ts",
- "src/main/speech/model-manager-stream-cleanup.test.ts",
- "src/main/speech/model-manager.test.ts",
- "src/main/ssh/orcad-remote-deploy.test.ts",
- "src/main/ssh/orcad-remote-shell-commands.integration.test.ts",
- "src/main/ssh/ssh-connection-host-key-store-wiring.test.ts",
- "src/main/ssh/ssh-port-forward.test.ts",
- "src/main/ssh/ssh-proxy-command.test.ts",
- "src/main/ssh/ssh-relay-build-toolchain.test.ts",
- "src/main/ssh/ssh-relay-install-lock.test.ts",
- "src/main/ssh/ssh-relay-live-connect.test.ts",
- "src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts",
- "src/main/ssh/ssh-relay-reset.test.ts",
- "src/main/ssh/ssh-relay-session-managed-hooks.test.ts",
- "src/main/ssh/ssh-relay-session-relay-loss.test.ts",
- "src/main/ssh/ssh-remote-cli-dispatch-refusal-passthrough.test.ts",
- "src/main/ssh/ssh-remote-cli-format.test.ts",
- "src/main/ssh/ssh-remote-cli-host-passthrough.test.ts",
- "src/main/ssh/ssh-remote-cli-launcher.test.ts",
- "src/main/ssh/ssh-remote-orchestration-send.test.ts",
- "src/main/ssh/ssh-remote-powershell.test.ts",
- "src/main/ssh/ssh-target-id-migration.test.ts",
- "src/main/star-nag/service-outcome-telemetry.test.ts",
- "src/main/startup/gpu-lifecycle-install-dir-acl-guard.test.ts",
- "src/main/startup/serve-desktop-activation-wiring.test.ts",
- "src/main/startup/window-all-closed-quit-policy.test.ts",
- "src/main/startup/windows-install-dir-acl-repair.win32.test.ts",
- "src/main/startup/windows-install-dir-package-acl-repair.test.ts",
- "src/main/system-resume-broadcast.test.ts",
- "src/main/terminal-history-gc.test.ts",
- "src/main/terminal-history.test.ts",
- "src/main/text-generation/commit-message-text-generation-failure-sanitization.test.ts",
- "src/main/text-generation/commit-message-text-generation-regression.test.ts",
- "src/main/updater-changelog.test.ts",
- "src/main/updater-prerelease-feed.test.ts",
- "src/main/updater-test-harness.leaked-timers.test.ts",
- "src/main/usage/usage-scan-worker-client.test.ts",
- "src/main/window/clipboard-image-temp-file.test.ts",
- "src/main/window/createMainWindow-zoom-and-tab-switch-shortcuts.test.ts",
- "src/main/window/renderer-recovery-prompt.test.ts",
- "src/main/window/updater-package-recovery-ipc.test.ts",
- "src/main/windows-pty-root-identity.test.ts",
- "src/main/windows/windows-host-job.win32.test.ts",
- "src/main/windows/windows-process-table-cim-scan.test.ts",
- "src/main/windows/windows-process-tree-command-line-patch.test.ts",
- "src/main/worktree-create-candidates.test.ts",
- "src/main/worktree-identity-persistence.test.ts",
- "src/main/worktree-removal-home-guard.test.ts",
- "src/main/worktree-removal-safety.test.ts",
- "src/main/worktree-removal-session-partition-fencing.test.ts",
- "src/main/wsl-running-distros.test.ts",
- "src/main/wsl-unc-delete.test.ts",
- "src/main/wsl/wsl-guest-environment.test.ts",
- "src/relay/agent-hook-envelope-publication.test.ts",
- "src/relay/ai-vault-service-restart-policy.test.ts",
- "src/relay/ai-vault-service-spawn.test.ts",
- "src/relay/dispatcher-rpc-cancel-id-coercion.test.ts",
- "src/relay/fs-handler-doc-preview.test.ts",
- "src/relay/fs-handler-git-search.test.ts",
- "src/relay/fs-handler-list-files-cancel.test.ts",
- "src/relay/fs-handler-ripgrep-fallback.test.ts",
- "src/relay/git-handler-pull-reconciliation.test.ts",
- "src/relay/git-handler-submodule-cache-invalidation.test.ts",
- "src/relay/git-handler-utils.test.ts",
- "src/relay/protocol-backpressure.test.ts",
- "src/relay/pty-handler-ownership-attestation.test.ts",
- "src/relay/pty-handler-resize-stale-pty.test.ts",
- "src/relay/pty-handler-shutdown-signals.test.ts",
- "src/relay/pty-replay-buffer-equivalence.test.ts",
- "src/relay/pty-source-sent-boundaries.test.ts",
- "src/relay/relay-oversized-notification-survival.test.ts",
- "src/relay/relay-pty-source-restore-retry.test.ts",
- "src/relay/relay-watcher-frame-chunking.test.ts",
- "src/relay/session-search-transport.test.ts",
- "src/relay/terminal-history-wsl.test.ts",
- "src/relay/workspace-snapshot-publication.test.ts",
- "src/relay/wsl-install-plugins-handler.test.ts",
- "src/renderer/src/app-shell/app-command-handlers-tab-rename.test.ts",
- "src/renderer/src/components/StateIndicatorTooltip.test.tsx",
- "src/renderer/src/components/activity/activity-portal-readiness-decay.react185.test.tsx",
- "src/renderer/src/components/activity/activity-portal-readiness-oscillation.test.ts",
- "src/renderer/src/components/activity/activity-scope-filter.test.ts",
- "src/renderer/src/components/activity/activity-thread-child-agent.test.ts",
- "src/renderer/src/components/artifacts/ArtifactPreview.test.tsx",
- "src/renderer/src/components/artifacts/ArtifactsPage.test.tsx",
- "src/renderer/src/components/automations/AutomationEditorPromptEditor.test.tsx",
- "src/renderer/src/components/automations/AutomationRunsDashboardSurface.test.tsx",
- "src/renderer/src/components/automations/AutomationRunsTable.test.tsx",
- "src/renderer/src/components/automations/AutomationSchedulePicker.test.ts",
- "src/renderer/src/components/automations/AutomationsDetailPane.run-count.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.external-scope.test.tsx",
- "src/renderer/src/components/automations/AutomationsPage.test.tsx",
- "src/renderer/src/components/automations/automation-editor-prompt-options.test.ts",
- "src/renderer/src/components/automations/automation-external-target-match.test.ts",
- "src/renderer/src/components/automations/automation-host-cache-controller.test.ts",
- "src/renderer/src/components/automations/automation-host-catalog-generation.test.ts",
- "src/renderer/src/components/automations/automation-host-scale-gates.test.ts",
- "src/renderer/src/components/automations/automation-list-last-run.test.ts",
- "src/renderer/src/components/automations/external-automation-list-entries.test.ts",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.chrome-parity.test.tsx",
- "src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/BrowserAnnotationSendMenuContent.test.tsx",
- "src/renderer/src/components/browser-pane/annotate/browser-annotation-output.test.ts",
- "src/renderer/src/components/browser-pane/annotate/useGrabMode.test.ts",
- "src/renderer/src/components/browser-pane/assemble-chrome/BrowserPaneOverlayLayer.test.tsx",
- "src/renderer/src/components/browser-pane/browser-client-page-retained-drag-passthrough.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-guest-page-id-identity.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/browser-page-favicon-retention.test.ts",
- "src/renderer/src/components/browser-pane/host-guest/use-browser-page-keyboard-shortcuts.split.test.tsx",
- "src/renderer/src/components/browser-pane/navigate/browser-download-progress.test.ts",
- "src/renderer/src/components/browser-pane/navigate/browser-notices.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-keyboard.test.ts",
- "src/renderer/src/components/browser-pane/stream-remote/remote-browser-page-input-model.test.ts",
- "src/renderer/src/components/cmd-j/palette-focus-restore-target.test.ts",
- "src/renderer/src/components/cmd-j/palette-host-badge.test.ts",
- "src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts",
- "src/renderer/src/components/cmd-j/worktree-palette-cache-inputs.test.ts",
- "src/renderer/src/components/contextual-tours/workspace-creation-tour-handoff.test.ts",
- "src/renderer/src/components/crash-report/CrashReportDialogSurface.overflow.test.tsx",
- "src/renderer/src/components/dashboard-popout/DashboardHostBadge.test.tsx",
- "src/renderer/src/components/dashboard-popout/preview-grid-claim.test.ts",
- "src/renderer/src/components/dashboard/AgentDashboardDrawer.test.tsx",
- "src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts",
- "src/renderer/src/components/dictation/microphone-devices.test.ts",
- "src/renderer/src/components/diff-comments/useDiffCommentDecorator.model-lifecycle.test.tsx",
- "src/renderer/src/components/editor/CheckRunDetailsPanel.copy.test.tsx",
- "src/renderer/src/components/editor/EditorFileLoadErrorView.test.tsx",
- "src/renderer/src/components/editor/ImageViewer.test.tsx",
- "src/renderer/src/components/editor/MonacoEditor.font-family.test.tsx",
- "src/renderer/src/components/editor/closed-editor-model-shell.test.tsx",
- "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-initial-section-load.test.ts",
- "src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-section-load-state.test.ts",
- "src/renderer/src/components/editor/combined-diff/review-controls/combined-diff-commit-message.test.ts",
- "src/renderer/src/components/editor/diff-editor-line-number-options.test.ts",
- "src/renderer/src/components/editor/diff-viewer-large-diff-save-action.test.ts",
- "src/renderer/src/components/editor/editor-autosave-controller.test.ts",
- "src/renderer/src/components/editor/editor-path-display.test.ts",
- "src/renderer/src/components/editor/editor-path-move-inflight.test.ts",
- "src/renderer/src/components/editor/markdown-document-list-request.test.ts",
- "src/renderer/src/components/editor/monaco-auto-height.test.ts",
- "src/renderer/src/components/editor/monaco-find-widget.test.ts",
- "src/renderer/src/components/editor/monaco-view-state-persistence.test.ts",
- "src/renderer/src/components/editor/raw-markdown-comment-scan.test.ts",
- "src/renderer/src/components/editor/restored-editor-owner-save-lifecycle.test.ts",
- "src/renderer/src/components/editor/rich-markdown-code-block-languages.test.ts",
- "src/renderer/src/components/editor/rich-markdown-details-keyboard.test.ts",
- "src/renderer/src/components/editor/rich-markdown-editor-click-routing.test.ts",
- "src/renderer/src/components/editor/rich-markdown-list-tokenizers.test.ts",
- "src/renderer/src/components/editor/rich-markdown-review-rail-blocks.test.ts",
- "src/renderer/src/components/editor/rich-markdown-serialization-commit.test.ts",
- "src/renderer/src/components/editor/rich-markdown-slash-command-filter.test.ts",
- "src/renderer/src/components/editor/use-rich-markdown-table-context-menu.test.tsx",
- "src/renderer/src/components/editor/useLinkBubble.test.tsx",
- "src/renderer/src/components/editor/useLocalImageSrc.test.ts",
- "src/renderer/src/components/editor/useRichMarkdownEditorInstance.test.tsx",
- "src/renderer/src/components/editor/useRichMarkdownSearch.test.tsx",
- "src/renderer/src/components/emulator-pane/emulator-device-frame-layout.test.ts",
- "src/renderer/src/components/emulator-pane/emulator-device-frame-visibility.test.tsx",
- "src/renderer/src/components/emulator-pane/mobile-emulator-agent-setup-cli-state.test.ts",
- "src/renderer/src/components/feature-wall/ConnectIntegrationsList.test.tsx",
- "src/renderer/src/components/floating-terminal/floating-terminal-panel-view-state.test.ts",
- "src/renderer/src/components/github-pr-merge-state.test.ts",
- "src/renderer/src/components/github-project/project-view-wrapper-source-context-boundary.test.ts",
- "src/renderer/src/components/github/github-work-item-assignee-filter.test.ts",
- "src/renderer/src/components/linear-api-key-dialog-state.test.ts",
- "src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx",
- "src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts",
- "src/renderer/src/components/linear-issue-text-draft-state.test.ts",
- "src/renderer/src/components/mobile/paired-mobile-devices.test.ts",
- "src/renderer/src/components/native-chat/NativeChatMessageList.growth-windowing.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.provider-frame.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.task-list-frames.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.tool-stream-cost.test.tsx",
- "src/renderer/src/components/native-chat/NativeChatMessageList.turn-timing.test.tsx",
- "src/renderer/src/components/native-chat/native-chat-active-rail-item.test.ts",
- "src/renderer/src/components/native-chat/native-chat-http-link-source-owner.test.ts",
- "src/renderer/src/components/native-chat/native-chat-image-runtime-context.test.ts",
- "src/renderer/src/components/native-chat/native-chat-launch-draft-send.test.ts",
- "src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts",
- "src/renderer/src/components/native-chat/native-chat-tab-agent-entry.test.ts",
- "src/renderer/src/components/native-chat/native-chat-tool-fold.test.ts",
- "src/renderer/src/components/native-chat/native-chat-typing-indicator.test.ts",
- "src/renderer/src/components/native-chat/omp-model-switch-capability.test.ts",
- "src/renderer/src/components/native-chat/structured-agent-session-read-transport.test.ts",
- "src/renderer/src/components/native-chat/use-native-chat-link-actions.test.tsx",
- "src/renderer/src/components/native-chat/use-native-chat-transcript-scroll.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-hold.test.tsx",
- "src/renderer/src/components/native-chat/use-structured-agent-session-outbox.test.tsx",
- "src/renderer/src/components/new-workspace/SmartWorkspaceNameField-repo-slug-routing.test.ts",
- "src/renderer/src/components/new-workspace/base-ref-picker-visibility.test.ts",
- "src/renderer/src/components/new-workspace/project-combobox-matching.test.ts",
- "src/renderer/src/components/new-workspace/smart-workspace-source-popover-focus.test.ts",
- "src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts",
- "src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.test.ts",
- "src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx",
- "src/renderer/src/components/quick-open-file-list.test.ts",
- "src/renderer/src/components/right-sidebar/AiVaultSearchEvidence.test.tsx",
- "src/renderer/src/components/right-sidebar/PortsPanel.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.host-context-boundary.test.ts",
- "src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx",
- "src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx",
- "src/renderer/src/components/right-sidebar/ai-vault-original-pane-index.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-deletability.test.ts",
- "src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts",
- "src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx",
- "src/renderer/src/components/right-sidebar/checks-panel-async-result-key.test.ts",
- "src/renderer/src/components/right-sidebar/checks-panel/gitlab-review-client.test.ts",
- "src/renderer/src/components/right-sidebar/create-review-draft-title.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-inline-rename-flow.test.tsx",
- "src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts",
- "src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.test.ts",
- "src/renderer/src/components/right-sidebar/file-search-include-pattern.test.ts",
- "src/renderer/src/components/right-sidebar/git-status-push-signal-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/git-status-refresh.test.ts",
- "src/renderer/src/components/right-sidebar/plugin-panel-activity-items.test.ts",
- "src/renderer/src/components/right-sidebar/plugin-panel-watchdog.test.ts",
- "src/renderer/src/components/right-sidebar/pr-comment-ack-summary.test.ts",
- "src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-created-review-link.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-dropdown-items.test.ts",
- "src/renderer/src/components/right-sidebar/source-control-entry-context-menu.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/listing/section-action-buttons.test.tsx",
- "src/renderer/src/components/right-sidebar/source-control/review/use-hosted-review-state.test.tsx",
- "src/renderer/src/components/right-sidebar/use-plugin-panel-theme-revision.test.tsx",
- "src/renderer/src/components/right-sidebar/use-source-control-git-history.test.tsx",
- "src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.test.ts",
- "src/renderer/src/components/right-sidebar/useFileExplorerDragDrop.test.ts",
- "src/renderer/src/components/settings/AdvancedNetworkSettingsSection.interaction.test.tsx",
- "src/renderer/src/components/settings/ArtifactsSettingsPane.test.tsx",
- "src/renderer/src/components/settings/EphemeralVmRuntimesSection.test.tsx",
- "src/renderer/src/components/settings/ExperimentalPane.test.tsx",
- "src/renderer/src/components/settings/GeneralUpdateSettingsSection.test.tsx",
- "src/renderer/src/components/settings/GrokAccountsSection.test.tsx",
- "src/renderer/src/components/settings/LinearAgentSkillPane.test.tsx",
- "src/renderer/src/components/settings/MobilePairingSetupSection.test.tsx",
- "src/renderer/src/components/settings/OrchestrationSkillAgentCoverage.test.tsx",
- "src/renderer/src/components/settings/PluginSettingsRow.test.tsx",
- "src/renderer/src/components/settings/QuickCommandsList.test.tsx",
- "src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx",
- "src/renderer/src/components/settings/RuntimePairingGeneratorForm.test.tsx",
- "src/renderer/src/components/settings/SettingsConstants.test.ts",
- "src/renderer/src/components/settings/ShortcutFilterRail.test.ts",
- "src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx",
- "src/renderer/src/components/settings/VoiceMicrophoneSetting.test.tsx",
- "src/renderer/src/components/settings/VoicePane.test.tsx",
- "src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx",
- "src/renderer/src/components/settings/agent-skill-installed-command-callers.test.ts",
- "src/renderer/src/components/settings/appearance-interface-summary.test.ts",
- "src/renderer/src/components/settings/appearance-status-bar-search.test.ts",
- "src/renderer/src/components/settings/appearance-usage-percentage-search.test.ts",
- "src/renderer/src/components/settings/browser-session-host-selection.test.ts",
- "src/renderer/src/components/settings/native-chat-experimental-search-entry.test.ts",
- "src/renderer/src/components/settings/repository-host-setup-options.test.ts",
- "src/renderer/src/components/settings/settings-form-option-filter.test.ts",
- "src/renderer/src/components/settings/shortcut-definition-catalog.test.ts",
- "src/renderer/src/components/settings/shortcut-row-visibility.test.ts",
- "src/renderer/src/components/setup-guide/use-setup-guide-telemetry.test.ts",
- "src/renderer/src/components/sidebar/LocalGitToolchainScanBanner.test.tsx",
- "src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx",
- "src/renderer/src/components/sidebar/SetupScriptPromptCardShell.test.tsx",
- "src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.test.tsx",
- "src/renderer/src/components/sidebar/SidebarToolbar.test.tsx",
- "src/renderer/src/components/sidebar/WorkspaceKanbanCard.host-identity.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeCard.test.ts",
- "src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx",
- "src/renderer/src/components/sidebar/WorktreeList.folder-workspace-rows.test.ts",
- "src/renderer/src/components/sidebar/WorktreeVisibilityHelpPopover.test.tsx",
- "src/renderer/src/components/sidebar/delete-worktree-failure-toast.test.tsx",
- "src/renderer/src/components/sidebar/host-section-folder-workspace-counts.test.ts",
- "src/renderer/src/components/sidebar/natural-worktree-ids.test.ts",
- "src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts",
- "src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts",
- "src/renderer/src/components/sidebar/sidebar-host-options.test.ts",
- "src/renderer/src/components/sidebar/smart-sort.test.ts",
- "src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.test.ts",
- "src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.test.ts",
- "src/renderer/src/components/sidebar/use-workspace-kanban-drawer-lingering.test.tsx",
- "src/renderer/src/components/sidebar/use-worktree-activity-statuses.test.ts",
- "src/renderer/src/components/sidebar/workspace-kanban-virtual-lane-layout.test.ts",
- "src/renderer/src/components/sidebar/worktree-agent-remote-attribution.test.ts",
- "src/renderer/src/components/sidebar/worktree-card-jira-issue-display.test.ts",
- "src/renderer/src/components/sidebar/worktree-context-menu-delete-intent.test.ts",
- "src/renderer/src/components/sidebar/worktree-lineage-expansion.performance.test.ts",
- "src/renderer/src/components/sidebar/worktree-list-groups-notice-host-labels.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/grouping/build-rows.folder-workspace-lanes.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/grouping/imported-rows.test.ts",
- "src/renderer/src/components/sidebar/worktree-list/navigation/use-reveal-requests.test.tsx",
- "src/renderer/src/components/sidebar/worktree-list/viewport/virtual-rows.test.ts",
- "src/renderer/src/components/sidebar/worktree-manual-order.test.ts",
- "src/renderer/src/components/sidebar/worktree-unnest.test.ts",
- "src/renderer/src/components/skills/SkillFreshnessNudge.test.tsx",
- "src/renderer/src/components/skills/SkillInstallDialog.test.tsx",
- "src/renderer/src/components/skills/SkillSharedLinkRow.test.tsx",
- "src/renderer/src/components/skills/skills-filter.test.ts",
- "src/renderer/src/components/stats/CodexUsagePane.test.tsx",
- "src/renderer/src/components/status-bar/SshStatusSegment.test.ts",
- "src/renderer/src/components/status-bar/resource-usage-space-scan-ready.test.ts",
- "src/renderer/src/components/status-bar/status-bar-agent-gating.test.ts",
- "src/renderer/src/components/status-bar/usage-percentage-label.test.ts",
- "src/renderer/src/components/status-bar/workspace-space-delete-host-routing.test.ts",
- "src/renderer/src/components/tab-bar/TabBar.windows-shell-launch.test.ts",
- "src/renderer/src/components/tab-bar/TabBarCreateEntryRow.test.tsx",
- "src/renderer/src/components/tab-bar/TabStripScrollIndicator.test.tsx",
- "src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts",
- "src/renderer/src/components/tab-bar/tab-strip-pointer-activation.test.tsx",
- "src/renderer/src/components/tab-bar/tab-strip-scroll-metrics.test.ts",
- "src/renderer/src/components/tab-bar/windows-shell-launch.test.ts",
- "src/renderer/src/components/tab-group/tab-drag-pointer-sensor.test.ts",
- "src/renderer/src/components/tab-group/useTabDragSplit.test.ts",
- "src/renderer/src/components/task-drawer-source-boundary.test.ts",
- "src/renderer/src/components/task-page-github-list-scroll-restore.test.ts",
- "src/renderer/src/components/task-page-jira-cache-selectors.test.ts",
- "src/renderer/src/components/task-page-jira-create-fields.test.ts",
- "src/renderer/src/components/task-page-repo-source-context.test.ts",
- "src/renderer/src/components/task-page-task-source-host-availability.test.ts",
- "src/renderer/src/components/task-page-work-item-pagination.test.ts",
- "src/renderer/src/components/terminal-pane/SessionRestoredBanner.test.tsx",
- "src/renderer/src/components/terminal-pane/TerminalContextMenu.test.tsx",
- "src/renderer/src/components/terminal-pane/TerminalRemoteRuntimeReconnectBanner.test.tsx",
- "src/renderer/src/components/terminal-pane/agent-completion-coordinator-queued-inspection-disposal.test.ts",
- "src/renderer/src/components/terminal-pane/agent-process-inspection-queue-rejection-containment.test.ts",
- "src/renderer/src/components/terminal-pane/edge-wrapped-terminal-http-links.test.ts",
- "src/renderer/src/components/terminal-pane/keyboard-handlers-ime-enter-keyup.test.tsx",
- "src/renderer/src/components/terminal-pane/keyboard-handlers-ime.test.tsx",
- "src/renderer/src/components/terminal-pane/mouse-hide-while-typing.test.ts",
- "src/renderer/src/components/terminal-pane/osc52-clipboard-toast.test.ts",
- "src/renderer/src/components/terminal-pane/override-affected-panes.test.ts",
- "src/renderer/src/components/terminal-pane/parked-terminal-byte-watcher.test.ts",
- "src/renderer/src/components/terminal-pane/parse-osc7.test.ts",
- "src/renderer/src/components/terminal-pane/pending-pane-close-confirmation.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-daemon-snapshot-replay.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-hook-completion-side-effects.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-pty-exit-teardown.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-reattach-binding.test.ts",
- "src/renderer/src/components/terminal-pane/pty-connection-runtime-owner-spawn-routing.test.ts",
- "src/renderer/src/components/terminal-pane/pty-dispatcher-delivery-resync.test.ts",
- "src/renderer/src/components/terminal-pane/pty-dispatcher-pi-routing.test.ts",
- "src/renderer/src/components/terminal-pane/pty-preconnect-input-buffer.test.ts",
- "src/renderer/src/components/terminal-pane/pty-transport-pi-coalesce.test.ts",
- "src/renderer/src/components/terminal-pane/remote-layout-scrollback-retention.test.ts",
- "src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-batching.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-latched-pane-retention.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-recovery-state.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-pending-host-surface-attach.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-snapshot-replay.test.ts",
- "src/renderer/src/components/terminal-pane/remote-runtime-pty-transport-web-mirror-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/renderer-owned-agent-status-registry.test.ts",
- "src/renderer/src/components/terminal-pane/ssh-reattach-model-restore.test.ts",
- "src/renderer/src/components/terminal-pane/stale-document-visibility.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-agent-paste-bracketing.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cjk-cursor-cell-placement.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-cursor-inactive-style.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-drop-path-writer.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-file-link-actions.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-freeze-report.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-consumed-key-commit.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-midline-preedit-tail.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-ime-xterm-windows-resumed-preedit-trace.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-inline-image-da1.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-link-pointer-gesture.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-non-latin-control-chord.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pane-close-identity.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-parked-pane-candidates.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-coordinator.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-paste-payload-metadata.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-path-existence-batch.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-pty-ack-gate.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-retention-exempt-growth.test.ts",
- "src/renderer/src/components/terminal-pane/terminal-runtime-host-link-routing.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-global-effects-paste-events.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts",
- "src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts",
- "src/renderer/src/components/terminal-pane/xterm-bypass-policy.test.ts",
- "src/renderer/src/components/terminal/terminal-tab-actions-kill-all.test.ts",
- "src/renderer/src/components/terminal/unsaved-close-queue.test.ts",
- "src/renderer/src/components/ui/popover-wheel-scroll.test.tsx",
- "src/renderer/src/components/ui/switch.test.tsx",
- "src/renderer/src/components/use-task-creation-draft-retention.test.ts",
- "src/renderer/src/components/use-terminal-create-actions.test.tsx",
- "src/renderer/src/components/use-terminal-editor-close-foundation.window-close.test.tsx",
- "src/renderer/src/components/workspace-cleanup/use-workspace-cleanup-git-evidence.test.tsx",
- "src/renderer/src/components/workspace-cleanup/workspace-cleanup-sort-header.test.tsx",
- "src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx",
- "src/renderer/src/components/worktree-jump-palette-primitives.test.tsx",
- "src/renderer/src/components/worktree-jump-palette-status-inputs.test.ts",
- "src/renderer/src/hooks/agent-hook-completion-background-turn-notifications.test.ts",
- "src/renderer/src/hooks/automation-dispatch-unverifiable-loss.test.ts",
- "src/renderer/src/hooks/composer-drop-failure-toast.test.ts",
- "src/renderer/src/hooks/composer-state/full-creation-structured-launch.test.ts",
- "src/renderer/src/hooks/installed-agent-skill-discovery-cache.test.ts",
- "src/renderer/src/hooks/installed-agent-skill-discovery.test.ts",
- "src/renderer/src/hooks/ipc-events/agent-status-terminal-title-tab-write.test.ts",
- "src/renderer/src/hooks/ipc-events/direct-ssh-hydration-fanout.test.ts",
- "src/renderer/src/hooks/ipc-events/orca-profile-auth-ipc-bridge.test.ts",
- "src/renderer/src/hooks/macos-tcc-prompt-notice-subscription.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-apply-deferred-session-write.test.ts",
- "src/renderer/src/hooks/remote-workspace-snapshot-arrival-coordinator.test.ts",
- "src/renderer/src/hooks/runtime-project-refresh-scheduler.test.ts",
- "src/renderer/src/hooks/structured-session-completion-focus.test.ts",
- "src/renderer/src/hooks/use-window-stream-visibility.test.ts",
- "src/renderer/src/hooks/useAgentDetectionTarget.test.ts",
- "src/renderer/src/hooks/useAppMenuSelectionActions.test.tsx",
- "src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts",
- "src/renderer/src/hooks/useGitHubSlugMetadata.test.tsx",
- "src/renderer/src/hooks/useIpcEvents-agent-status-snapshot-hydration.test.ts",
- "src/renderer/src/hooks/useIpcEvents-runtime-environment-selectors.test.ts",
- "src/renderer/src/hooks/usePrimarySelectionPaste.terminal-native-paste.test.tsx",
- "src/renderer/src/hooks/useVirtualizedScrollAnchor.listener-deps.test.ts",
- "src/renderer/src/hooks/worktree-change-refresh-queue.test.ts",
- "src/renderer/src/i18n/no-top-level-translate.test.ts",
- "src/renderer/src/i18n/relative-time-format.test.ts",
- "src/renderer/src/lib/active-agent-note-send-focused-session.test.ts",
- "src/renderer/src/lib/activity-thread-display.test.ts",
- "src/renderer/src/lib/agent-hibernation-coordinator.test.ts",
- "src/renderer/src/lib/agent-hibernation-runtime-liveness-race.test.ts",
- "src/renderer/src/lib/agent-launch-caller-profile-census.test.ts",
- "src/renderer/src/lib/agent-launch-route-connection-fallback.test.ts",
- "src/renderer/src/lib/agent-ready-wait.test.ts",
- "src/renderer/src/lib/agent-row-tool-preview.test.ts",
- "src/renderer/src/lib/ai-vault-resume-command.test.ts",
- "src/renderer/src/lib/app-font-family.test.ts",
- "src/renderer/src/lib/browser-page-conversion-history.test.ts",
- "src/renderer/src/lib/desktop-window-chrome.test.ts",
- "src/renderer/src/lib/ephemeral-vm-failed-create-cleanup.test.ts",
- "src/renderer/src/lib/ephemeral-vm-runtime-cleanup.test.ts",
- "src/renderer/src/lib/file-search-result-owner.test.ts",
- "src/renderer/src/lib/flatten-retained-slice.test.ts",
- "src/renderer/src/lib/github-pr-start-point.test.ts",
- "src/renderer/src/lib/github-work-item-source-lookup.test.ts",
- "src/renderer/src/lib/host-mirror-handle-gap-teardown.test.ts",
- "src/renderer/src/lib/http-link-modifier-routing.test.ts",
- "src/renderer/src/lib/launch-agent-in-new-tab-web-runtime.test.ts",
- "src/renderer/src/lib/launch-agent-structured-chat-guard.test.ts",
- "src/renderer/src/lib/launch-work-item-direct-agent.test.ts",
- "src/renderer/src/lib/linear-issue-url-lookup.test.ts",
- "src/renderer/src/lib/markdown-review-notes.test.ts",
- "src/renderer/src/lib/monaco-languages/register-vue.test.ts",
- "src/renderer/src/lib/monospace-font-family.test.ts",
- "src/renderer/src/lib/native-chat-initial-view-mode.test.ts",
- "src/renderer/src/lib/new-workspace-project-options.test.ts",
- "src/renderer/src/lib/orca-hook-trust.test.ts",
- "src/renderer/src/lib/pane-manager/browser-remote-viewer-state.test.ts",
- "src/renderer/src/lib/pane-manager/pane-metric-options-deferral.test.ts",
- "src/renderer/src/lib/pane-manager/pane-reveal-fit.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-gpu-acceleration.test.ts",
- "src/renderer/src/lib/pane-manager/pane-terminal-output-scheduler-disposed-writes.test.ts",
- "src/renderer/src/lib/pane-manager/pane-tree-reparent-frame.test.ts",
- "src/renderer/src/lib/pane-manager/terminal-arabic-shaping-joiner.test.ts",
- "src/renderer/src/lib/path.test.ts",
- "src/renderer/src/lib/pi-live-session-no-duplicate-tab.test.ts",
- "src/renderer/src/lib/plugin-command-execution.test.ts",
- "src/renderer/src/lib/plugin-command-keybindings.test.ts",
- "src/renderer/src/lib/project-host-clone-url.test.ts",
- "src/renderer/src/lib/react-commit-cascade-observer.test.ts",
- "src/renderer/src/lib/react-commit-cascade-store-write-samples.test.ts",
- "src/renderer/src/lib/react-grab-dev-gate.test.ts",
- "src/renderer/src/lib/resume-sleeping-agent-session-execution-host-scope.test.ts",
- "src/renderer/src/lib/scroll-cache.test.ts",
- "src/renderer/src/lib/session-write-subscriber.test.ts",
- "src/renderer/src/lib/sha256.test.ts",
- "src/renderer/src/lib/ssh-background-startup-delivery.test.ts",
- "src/renderer/src/lib/structured-agent-session-launch.test.ts",
- "src/renderer/src/lib/structured-agent-startup-label-census.test.ts",
- "src/renderer/src/lib/tab-agent.test.ts",
- "src/renderer/src/lib/terminal-contrast-correction.test.ts",
- "src/renderer/src/lib/terminal-worktree-route.test.ts",
- "src/renderer/src/lib/typing-latency/input-events.test.ts",
- "src/renderer/src/lib/typing-latency/input-source.test.ts",
- "src/renderer/src/lib/use-tab-agent-retained-identity.test.ts",
- "src/renderer/src/lib/window-visibility-interval.test.ts",
- "src/renderer/src/lib/windows-terminal-capabilities.test.ts",
- "src/renderer/src/lib/work-item-link-query-bounds.test.ts",
- "src/renderer/src/lib/workspace-port-scan-debounce.test.ts",
- "src/renderer/src/lib/workspace-session-relevant-fields.test.ts",
- "src/renderer/src/lib/workspace-terminal-host-authority.test.ts",
- "src/renderer/src/lib/worktree-palette-multi-keyword.test.ts",
- "src/renderer/src/lib/worktree-status.interrupted.test.ts",
- "src/renderer/src/runtime/antigravity-generation-compatibility.test.ts",
- "src/renderer/src/runtime/browser-client-host-identity.test.ts",
- "src/renderer/src/runtime/client-hosted-browser-close-intent-replay.test.ts",
- "src/renderer/src/runtime/github-check-details-timeout.test.ts",
- "src/renderer/src/runtime/host-session-mirror-hydration-frame-ordering.test.tsx",
- "src/renderer/src/runtime/local-structured-session-retired-epoch-repair.test.ts",
- "src/renderer/src/runtime/local-structured-session-tabs-host-isolation.test.ts",
- "src/renderer/src/runtime/paired-reconnect-sidebar-agent-count.test.ts",
- "src/renderer/src/runtime/remote-server-update-coordinator.test.ts",
- "src/renderer/src/runtime/remote-terminal-stream-watchdog.test.ts",
- "src/renderer/src/runtime/runtime-client-events.test.ts",
- "src/renderer/src/runtime/runtime-file-client-external-import.test.ts",
- "src/renderer/src/runtime/runtime-file-client.test.ts",
- "src/renderer/src/runtime/runtime-git-client-api-contract.test.ts",
- "src/renderer/src/runtime/runtime-jira-payload-stream.test.ts",
- "src/renderer/src/runtime/runtime-linear-client.test.ts",
- "src/renderer/src/runtime/structured-agent-session-tab-retirement.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-key-reuse.test.ts",
- "src/renderer/src/runtime/sync-runtime-graph-parked-leaf.test.ts",
- "src/renderer/src/runtime/web-runtime-browser-capability-cleanup.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-client-placement.test.ts",
- "src/renderer/src/runtime/web-runtime-session-browser-create-focus.test.ts",
- "src/renderer/src/runtime/web-session-close-intent.test.ts",
- "src/renderer/src/runtime/web-session-tabs-agent-completion-notifications.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-host-restart-browser-rows.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-mirrored-draft-close.test.ts",
- "src/renderer/src/runtime/web-session-tabs-sync-staged-browser-adoption.test.ts",
- "src/renderer/src/runtime/web-session-terminal-orphan-recovery-adoption-regressions.test.ts",
- "src/renderer/src/runtime/web-session-terminal-recovery-snapshot-validation.test.ts",
- "src/renderer/src/runtime/web-session-terminal-retirement-proof-ledger.test.ts",
- "src/renderer/src/store/copy-on-write-record.test.ts",
- "src/renderer/src/store/slices/agent-status-batch.test.ts",
- "src/renderer/src/store/slices/agent-status-pane-keyed-records.test.ts",
- "src/renderer/src/store/slices/agent-status-retention-prefix-sweep.test.ts",
- "src/renderer/src/store/slices/ambiguous-owner-warning-worktree-removal-leak.test.ts",
- "src/renderer/src/store/slices/browser-page-close-intent-recording.test.ts",
- "src/renderer/src/store/slices/browser-session-host-selection.test.ts",
- "src/renderer/src/store/slices/browser-webview-cleanup.test.ts",
- "src/renderer/src/store/slices/cmd-j-create-actions.test.ts",
- "src/renderer/src/store/slices/editor-markdown-view-state.test.ts",
- "src/renderer/src/store/slices/editor-session-duplicate-restore.test.ts",
- "src/renderer/src/store/slices/editor-tab-placement.test.ts",
- "src/renderer/src/store/slices/editor/actions/markdown-preview-actions.test.ts",
- "src/renderer/src/store/slices/empty-update-notifications.test.ts",
- "src/renderer/src/store/slices/github-cache-eviction-and-bounds.test.ts",
- "src/renderer/src/store/slices/github-pr-branch-coordinator-events.test.ts",
- "src/renderer/src/store/slices/github-pr-comments.test.ts",
- "src/renderer/src/store/slices/github-work-items-runtime-routing.test.ts",
- "src/renderer/src/store/slices/linear-source-context-cache-scope.test.ts",
- "src/renderer/src/store/slices/linear.test.ts",
- "src/renderer/src/store/slices/local-detected-agent-state.test.ts",
- "src/renderer/src/store/slices/repo-reorder-host-split.test.ts",
- "src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts",
- "src/renderer/src/store/slices/repos-onboarding-folder-startup.test.ts",
- "src/renderer/src/store/slices/repos-refresh-identity.test.ts",
- "src/renderer/src/store/slices/repos-runtime-visibility-defaults.test.ts",
- "src/renderer/src/store/slices/repos-stale-fetch.test.ts",
- "src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts",
- "src/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.ts",
- "src/renderer/src/store/slices/store-active-worktree-selection.test.ts",
- "src/renderer/src/store/slices/store-active-worktree-terminal-creation.test.ts",
- "src/renderer/src/store/slices/store-session-browser-hydration.test.ts",
- "src/renderer/src/store/slices/store-sleep-pane-hibernation.test.ts",
- "src/renderer/src/store/slices/tab-worktree-orphan-map-purge-leak.test.ts",
- "src/renderer/src/store/slices/tabs-session-hydration.test.ts",
- "src/renderer/src/store/slices/terminal-orphan-helpers.test.ts",
- "src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts",
- "src/renderer/src/store/slices/terminal-pane-retirement-ownership.test.ts",
- "src/renderer/src/store/slices/terminal-tab-retirement.test.ts",
- "src/renderer/src/store/slices/ui-acknowledge-agents-clock-skew.test.ts",
- "src/renderer/src/store/slices/ui-modal-slot-dismissal.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-removal-preflight.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-scan-progress.test.ts",
- "src/renderer/src/store/slices/workspace-cleanup-unverified-removal-consent.test.ts",
- "src/renderer/src/store/slices/worktree-by-id-index.test.ts",
- "src/renderer/src/store/slices/worktree-visibility-settings-write.test.ts",
- "src/renderer/src/store/slices/worktrees-fetch-listing-merge.test.ts",
- "src/renderer/src/store/slices/worktrees-identity-migration.test.ts",
- "src/renderer/src/store/slices/worktrees-remote-runtime-removal.test.ts",
- "src/renderer/src/store/slices/worktrees/teardown/record-key-omission.test.ts",
- "src/renderer/src/store/store-identity-churn-probe.test.ts",
- "src/renderer/src/web/web-clipboard-copy-fallback.test.ts",
- "src/renderer/src/web/web-pairing.test.ts",
- "src/renderer/src/web/web-preload-api-filesystem.test.ts",
- "src/renderer/src/web/web-preload-api-github.test.ts",
- "src/renderer/src/web/web-preload-api-gitlab.test.ts",
- "src/renderer/src/web/web-preload-api-runtime-calls.test.ts",
- "src/renderer/src/web/web-runtime-client-timeout-budget.test.ts",
- "src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts",
- "src/shared/add-repo-existing-workspaces-telemetry.test.ts",
- "src/shared/agent-hook-endpoint-temp-cleanup.test.ts",
- "src/shared/agent-hook-listener-claude-subagents.test.ts",
- "src/shared/agent-hook-listener-opencode-session-correlation.test.ts",
- "src/shared/agent-session-option-catalog-omp.test.ts",
- "src/shared/agent-session-question-answer.test.ts",
- "src/shared/agent-status-child-work.test.ts",
- "src/shared/agent-status-osc-pending-retention.test.ts",
- "src/shared/agent-status-osc.test.ts",
- "src/shared/agent-status-store-byte-budget.test.ts",
- "src/shared/ai-vault-resume-command.test.ts",
- "src/shared/ai-vault-search-query-operators.test.ts",
- "src/shared/ai-vault-search-settings.test.ts",
- "src/shared/automation-legacy-list-partition.test.ts",
- "src/shared/automation-run-identity.test.ts",
- "src/shared/browser-client-hosting-eligibility.test.ts",
- "src/shared/browser-grab-types.test.ts",
- "src/shared/child-process/bounded-output-sink.test.ts",
- "src/shared/cli-workspace-provenance.test.ts",
- "src/shared/cloud-service-url.test.ts",
- "src/shared/codex-pet-sprite-defaults.test.ts",
- "src/shared/direct-ssh-reconnect-telemetry-schema.test.ts",
- "src/shared/emulator-keyboard-frame.test.ts",
- "src/shared/execution-host.test.ts",
- "src/shared/external-automation-jobs-file.test.ts",
- "src/shared/filesystem-directory-listing-limit.test.ts",
- "src/shared/git-binary-compatibility.test.ts",
- "src/shared/git-branch-compare-head.test.ts",
- "src/shared/git-check-ignore-stdio.test.ts",
- "src/shared/git-fetch-head-lock.test.ts",
- "src/shared/git-history.test.ts",
- "src/shared/git-remote-error.test.ts",
- "src/shared/github/project-ref-input.test.ts",
- "src/shared/gitlab-pipeline-checks.test.ts",
- "src/shared/gitlab-projects.test.ts",
- "src/shared/host-balanced-listing-scaling.test.ts",
- "src/shared/hosted-review-ready-capabilities.test.ts",
- "src/shared/linear/issue-attribute-filter.test.ts",
- "src/shared/linear/links.test.ts",
- "src/shared/linux-proc-port-scan-limits.test.ts",
- "src/shared/mobile-e2ee-v2-contract.test.ts",
- "src/shared/mobile-markdown-document.test.ts",
- "src/shared/mobile-web-bundle/manifest-contract.test.ts",
- "src/shared/native-chat-stream-unsubscribe.test.ts",
- "src/shared/native-chat-tool-preview-prefix.test.ts",
- "src/shared/nul-delimited-fields.test.ts",
- "src/shared/omp-fresh-launch.test.ts",
- "src/shared/opencode-terminal-title.test.ts",
- "src/shared/orca-yaml-bounds.test.ts",
- "src/shared/orchestration-fleet-evidence-clock.test.ts",
- "src/shared/orchestration-task-summary.test.ts",
- "src/shared/osc52-clipboard-settings.test.ts",
- "src/shared/pairing.test.ts",
- "src/shared/pane-agent-identity-inventory.test.ts",
- "src/shared/pi-state-title-marker.test.ts",
- "src/shared/plugins/plugin-demo-fixture.test.ts",
- "src/shared/plugins/plugin-panel-message-budget.test.ts",
- "src/shared/priority-semaphore.test.ts",
- "src/shared/project-execution-runtime.test.ts",
- "src/shared/promise-settlement-waiters.test.ts",
- "src/shared/quick-open-install-rg.test.ts",
- "src/shared/relay-version-marker.test.ts",
- "src/shared/remote-pairing-verification.test.ts",
- "src/shared/remote-runtime-client.test.ts",
- "src/shared/remote-runtime-request-connection-stale.test.ts",
- "src/shared/remote-runtime-request-connection.test.ts",
- "src/shared/remote-runtime-shared-control-subscriptions.test.ts",
- "src/shared/remote-runtime-transport-error-agreement.test.ts",
- "src/shared/renderer-restart-preparation.test.ts",
- "src/shared/retired-pty-incarnations.test.ts",
- "src/shared/secure-file-fsync-flags.test.ts",
- "src/shared/secure-path-hardening-retry-budget.test.ts",
- "src/shared/session-tab-placement.test.ts",
- "src/shared/shell-foreground-snapshot.test.ts",
- "src/shared/skill-metadata.test.ts",
- "src/shared/ssh-target-generation.test.ts",
- "src/shared/structured-agent-session-coalescer.test.ts",
- "src/shared/structured-agent-session-option-picks.test.ts",
- "src/shared/structured-agent-session-turn-timing-retention.test.ts",
- "src/shared/structured-agent-turn-clock-anchor.test.ts",
- "src/shared/tailnet-address.test.ts",
- "src/shared/task-source-context.test.ts",
- "src/shared/terminal-custom-themes.test.ts",
- "src/shared/terminal-github-pr-link-detector.test.ts",
- "src/shared/terminal-wait-blocked-reason-legacy-alias.test.ts",
- "src/shared/tui-agent-startup-hermes.test.ts",
- "src/shared/tui-agent-startup-shell.test.ts",
- "src/shared/tui-agent-startup.test.ts",
- "src/shared/windows-interactive-login-spawn.test.ts",
- "src/shared/windows-transient-lock-removal.test.ts",
- "src/shared/worker-transcript-text-scaling.test.ts",
- "src/shared/workspace-session-schema-field-coverage.test.ts",
- "src/shared/workspace-statuses.test.ts",
- "src/shared/worktree/host-context-labels.test.ts",
- "src/shared/ws-outbound-backpressure-queue.test.ts",
- "src/shared/wsl-paths.test.ts",
- "tests/e2e/github-work-item-search-burst.unit.test.ts",
- "tests/e2e/helpers/git-status-retry-barrier.unit.test.ts",
- "tests/e2e/helpers/paired-client-window-reveal.unit.test.ts",
- "tests/e2e/helpers/ssh-port-forward-snapshot-barrier.unit.test.ts",
- "tests/e2e/host-cold-park-remote-subscriber.unit.test.ts",
- "tests/e2e/restored-terminal-input-readiness.unit.test.ts",
- "tests/e2e/session-tabs-empty-inventory-daemon-oracle.unit.test.ts",
- "tests/e2e/sustained-agent-typing-load-scripts.unit.test.ts",
- "tests/e2e/terminal-probe-input-sequence.unit.test.ts",
- "tests/e2e/terminal-split-activation-latency-artifact.unit.test.ts"
- ],
- "durationMs": 851039
- }
- ],
- "baselineSha256": "f9b9fe1e2c9d715586559833fb058a2a92b7d663ea0932dc2d8c4fa51eea7b84",
- "selectedShard": 6
-}
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index 4e51fac79437..007098903c3e 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -22,6 +22,7 @@ import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
isRipgrepMissingCwdExit,
+ isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
ripgrepMissingCwdError,
@@ -158,7 +159,13 @@ export async function listQuickOpenFiles(
return
}
if (isRipgrepUnavailableExit(child, null, null)) {
- finish(new RipgrepUnavailableError())
+ // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
+ // binary for it tells the user to reinstall Orca over a workspace that simply moved.
+ void isRipgrepSpawnCwdUsable(authorizedRootPath).then((usable) => {
+ finish(
+ usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(authorizedRootPath)
+ )
+ })
return
}
finish(new Error('rg failed to start'))
diff --git a/src/main/ipc/filesystem-search-file-paths.test.ts b/src/main/ipc/filesystem-search-file-paths.test.ts
index 792d3011e3af..517ff31734a1 100644
--- a/src/main/ipc/filesystem-search-file-paths.test.ts
+++ b/src/main/ipc/filesystem-search-file-paths.test.ts
@@ -195,6 +195,9 @@ describe('searchQuickOpenFilePaths', () => {
it('reports the bundled-ripgrep error when rg genuinely cannot start', async () => {
const child = createMockProcess(false)
wslAwareSpawnMock.mockReturnValue(child)
+ // Why a root that exists: an ENOENT spawn error is also what a vanished workspace looks like,
+ // so this stays about the binary only while the search root is actually reachable.
+ resolveAuthorizedPathMock.mockImplementation(async () => process.cwd())
const promise = searchQuickOpenFilePaths('/repo', {} as Store, {
query: 'target',
limit: 32
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index d4349c39a3fa..a7ab2038bc3b 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -14,6 +14,7 @@ import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
isRipgrepMissingCwdExit,
+ isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
ripgrepMissingCwdError,
@@ -189,13 +190,26 @@ function scanRipgrepPaths(args: {
finish(new RipgrepLaunchFailureError(`rg failed to start (${error.code})`))
return
}
- finish(
- isRipgrepUnavailableExit(child, null, null)
- ? new RipgrepUnavailableError()
- : new Error(`rg failed to start${error.code ? ` (${error.code})` : ''}`)
- )
+ if (!isRipgrepUnavailableExit(child, null, null)) {
+ finish(new Error(`rg failed to start${error.code ? ` (${error.code})` : ''}`))
+ return
+ }
+ // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
+ // binary for it tells the user to reinstall Orca over a workspace that simply moved.
+ void isRipgrepSpawnCwdUsable(args.authorizedRootPath).then((usable) => {
+ finish(
+ usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(args.authorizedRootPath)
+ )
+ })
}
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
+ // Why before the unavailable check: classifyNativeLauncherExit treats any code above 2 as a
+ // broken install, and this code is 97 -- so checking second makes this branch dead.
+ if (isRipgrepMissingCwdExit(code)) {
+ pathAccumulator.clear()
+ finish(ripgrepMissingCwdError(args.authorizedRootPath))
+ return
+ }
if (
isRipgrepUnavailableExit(child, code, signal, {
classifyNativeLauncherExit: true
@@ -205,11 +219,6 @@ function scanRipgrepPaths(args: {
finish(new RipgrepUnavailableError())
return
}
- if (isRipgrepMissingCwdExit(code)) {
- pathAccumulator.clear()
- finish(ripgrepMissingCwdError(args.authorizedRootPath))
- return
- }
if (signal) {
finish(new Error(`rg killed by ${signal}`))
return
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index 2508937ba656..d89bdb7f6b2f 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -13,6 +13,7 @@ import {
import {
absorbPendingRipgrepSpawnError,
isRipgrepMissingCwdExit,
+ isRipgrepSpawnCwdUsable,
isRipgrepUnavailableExit,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
@@ -139,7 +140,20 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
return
}
if (child && isRipgrepUnavailableExit(child, null, null)) {
- rejectUnavailable()
+ // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
+ // binary for it tells the user to reinstall Orca over a workspace that simply moved.
+ void isRipgrepSpawnCwdUsable(rootPath).then((usable) => {
+ // Why re-check: finish() drops its argument once settled, so a rejected promise
+ // built after the close handler already won would go unhandled.
+ if (resolved) {
+ return
+ }
+ finish(
+ Promise.reject(
+ usable ? bundledRipgrepUnavailableError() : ripgrepMissingCwdError(rootPath)
+ )
+ )
+ })
return
}
resolveOnce()
diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts
index 705e74322cc0..a355968fceb5 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.ts
@@ -21,7 +21,8 @@ function isPackagedApp(): boolean {
return hasAppEnvironment() && getAppEnvironment().isPackaged()
}
-function candidatePaths(platform: BundledRipgrepPlatform): string[] {
+/** `platform` is a `-` label; an unbundled one still names where rg would live. */
+function candidatePaths(platform: string): string[] {
const binaryName = bundledRipgrepBinaryName(platform)
const candidates: string[] = []
if (process.resourcesPath) {
@@ -80,19 +81,20 @@ export function resolveBundledRipgrepPath(platform: BundledRipgrepPlatform): str
* spawn is routed into WSL. Falls back to PATH `rg` only in unpackaged dev/test hosts.
*/
export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
- const platform = toBundledRipgrepPlatform(options.wsl ? 'linux' : process.platform, process.arch)
- if (!platform) {
- return PATH_RIPGREP_COMMAND
- }
- const resolved = resolveBundledRipgrepPath(platform)
+ const os = options.wsl ? 'linux' : process.platform
+ const platform = toBundledRipgrepPlatform(os, process.arch)
+ const resolved = platform ? resolveBundledRipgrepPath(platform) : null
if (resolved) {
return resolved
}
+ if (!isPackagedApp()) {
+ return PATH_RIPGREP_COMMAND
+ }
// Why the expected path, not bare 'rg': Windows resolves a bare name in the spawn cwd (the repo)
// first, so a damaged packaged install must fail with ENOENT instead of running a planted rg.exe.
- return isPackagedApp()
- ? (candidatePaths(platform)[0] ?? PATH_RIPGREP_COMMAND)
- : PATH_RIPGREP_COMMAND
+ // Why this covers an arch we do not bundle too: it has no candidate of its own, but naming where
+ // rg would have lived keeps a packaged app from ever handing a bare name to spawn.
+ return candidatePaths(platform ?? `${os}-${process.arch}`)[0] ?? PATH_RIPGREP_COMMAND
}
/**
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index 9d6d25238149..0f367333b5f9 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -18,6 +18,7 @@ import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
isRipgrepMissingCwdExit,
+ isRipgrepSpawnCwdUsable,
isRipgrepUnavailableExit,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
@@ -134,7 +135,22 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
return
}
if (child && isRipgrepUnavailableExit(child, null, null)) {
- rejectUnavailable()
+ // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
+ // binary for it tells the user to reinstall Orca over a workspace that simply moved.
+ void isRipgrepSpawnCwdUsable(authorizedRootPath).then((usable) => {
+ // Why re-check: finish() drops its argument once settled, so a rejected promise
+ // built after the close handler already won would go unhandled.
+ if (resolved) {
+ return
+ }
+ finish(
+ Promise.reject(
+ usable
+ ? bundledRipgrepUnavailableError()
+ : ripgrepMissingCwdError(authorizedRootPath)
+ )
+ )
+ })
return
}
resolveOnce()
diff --git a/src/shared/bundled-ripgrep.ts b/src/shared/bundled-ripgrep.ts
index 0c10332a2a72..b6025ef77fa9 100644
--- a/src/shared/bundled-ripgrep.ts
+++ b/src/shared/bundled-ripgrep.ts
@@ -11,7 +11,8 @@ export const BUNDLED_RIPGREP_RESOURCE_DIR = 'ripgrep'
/** Package directory holding the same layout in development checkouts. */
export const BUNDLED_RIPGREP_PACKAGE_BIN_DIR = 'node_modules/@vscode/ripgrep-universal/bin'
-export function bundledRipgrepBinaryName(platform: BundledRipgrepPlatform): string {
+/** Accepts any `-` label, so an unbundled platform can still name where rg would live. */
+export function bundledRipgrepBinaryName(platform: string): string {
return platform.startsWith('win32-') ? 'rg.exe' : 'rg'
}
From 8921de12e108cfc3e45d569e2e36011d39828e20 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 16:58:30 -0700
Subject: [PATCH 10/25] fix(search): let the error handler own the
spawn-failure verdict
A failed spawn emits 'error' and THEN 'close' with a negative code. The cwd
check added in the error handler did not settle, so the close handler settled
first -- synchronously, with the reinstall message -- and won the race every
time. The branch was not merely flaky, it was unreachable in all four handlers:
it is guarded by pid === undefined, which is exactly the case that always
produces a following close(code < 0). Verified against a real spawn: 3/3 runs
give error(ENOENT) -> close(-2). The error handler now detaches 'close' before
the probe, so it owns the outcome.
The probe also had no rejection handler, so a probe that rejected left the
search unsettled forever -- a hang, not just a wrong message. It now falls back
to the prior verdict rather than inventing one.
Tests: filesystem-search-rg-timeout and orca-runtime-files-search already cover
error-first and close-first, but against synthetic roots that the new guard
correctly calls unreachable; they now resolve to a real root, keeping each
test's stated intent. Added a Quick Open case for the vanished-workspace path
and confirmed it fails with the old ordering.
---
src/main/ipc/filesystem-list-files.ts | 20 ++++++++----
.../ipc/filesystem-search-file-paths.test.ts | 19 +++++++++++
src/main/ipc/filesystem-search-file-paths.ts | 20 ++++++++----
.../ipc/filesystem-search-rg-timeout.test.ts | 3 ++
.../filesystem/filesystem-search-handlers.ts | 28 +++++++++-------
.../runtime/orca-runtime-files-search.test.ts | 4 ++-
...ile-commands-search-local-runtime-files.ts | 32 +++++++++++--------
7 files changed, 87 insertions(+), 39 deletions(-)
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index 007098903c3e..9511d299a567 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -159,13 +159,19 @@ export async function listQuickOpenFiles(
return
}
if (isRipgrepUnavailableExit(child, null, null)) {
- // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
- // binary for it tells the user to reinstall Orca over a workspace that simply moved.
- void isRipgrepSpawnCwdUsable(authorizedRootPath).then((usable) => {
- finish(
- usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(authorizedRootPath)
- )
- })
+ // Why the cwd check: spawn reports a missing cwd as ENOENT too, and blaming the binary
+ // for it tells the user to reinstall Orca over a workspace that simply moved.
+ // Why detach close first: a failed spawn emits error THEN close(code < 0), and close
+ // settles synchronously -- it would beat this threadpool round-trip every time.
+ child.off('close', handleClose)
+ // Why catch: a failed probe must not strand the search; fall back to the prior verdict.
+ void isRipgrepSpawnCwdUsable(authorizedRootPath)
+ .catch(() => true)
+ .then((usable) => {
+ finish(
+ usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(authorizedRootPath)
+ )
+ })
return
}
finish(new Error('rg failed to start'))
diff --git a/src/main/ipc/filesystem-search-file-paths.test.ts b/src/main/ipc/filesystem-search-file-paths.test.ts
index 517ff31734a1..4d3608aff0ca 100644
--- a/src/main/ipc/filesystem-search-file-paths.test.ts
+++ b/src/main/ipc/filesystem-search-file-paths.test.ts
@@ -192,6 +192,8 @@ describe('searchQuickOpenFilePaths', () => {
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(2)
})
+ // Why both events: a failed spawn emits 'error' and THEN 'close' with a negative code. Emitting
+ // only 'error' lets the async cwd check win a race it loses in production.
it('reports the bundled-ripgrep error when rg genuinely cannot start', async () => {
const child = createMockProcess(false)
wslAwareSpawnMock.mockReturnValue(child)
@@ -205,11 +207,28 @@ describe('searchQuickOpenFilePaths', () => {
await flushMicrotasks()
child.emit('error', createSpawnError('ENOENT'))
+ child.emit('close', -2, null)
await expect(promise).rejects.toThrow(BUNDLED_ERROR)
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
})
+ it('names the unreachable root when the workspace is gone, not the bundled binary', async () => {
+ const child = createMockProcess(false)
+ wslAwareSpawnMock.mockReturnValue(child)
+ resolveAuthorizedPathMock.mockImplementation(async () => '/definitely/not/here')
+ const promise = searchQuickOpenFilePaths('/repo', {} as Store, {
+ query: 'target',
+ limit: 32
+ })
+ await flushMicrotasks()
+
+ child.emit('error', createSpawnError('ENOENT'))
+ child.emit('close', -2, null)
+
+ await expect(promise).rejects.toThrow('Search root is not reachable: /definitely/not/here')
+ })
+
it('reports the bundled-ripgrep error when rg is unavailable on the retry', async () => {
const failed = createMockProcess(false)
wslAwareSpawnMock.mockReturnValueOnce(failed).mockImplementationOnce(() => {
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index a7ab2038bc3b..482edf6d7eab 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -194,13 +194,19 @@ function scanRipgrepPaths(args: {
finish(new Error(`rg failed to start${error.code ? ` (${error.code})` : ''}`))
return
}
- // Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
- // binary for it tells the user to reinstall Orca over a workspace that simply moved.
- void isRipgrepSpawnCwdUsable(args.authorizedRootPath).then((usable) => {
- finish(
- usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(args.authorizedRootPath)
- )
- })
+ // Why the cwd check: spawn reports a missing cwd as ENOENT too, and blaming the binary
+ // for it tells the user to reinstall Orca over a workspace that simply moved.
+ // Why detach close first: a failed spawn emits error THEN close(code < 0), and close settles
+ // synchronously -- it would beat this threadpool round-trip every time.
+ child.off('close', handleClose)
+ // Why catch: a failed probe must not strand the search; fall back to the prior verdict.
+ void isRipgrepSpawnCwdUsable(args.authorizedRootPath)
+ .catch(() => true)
+ .then((usable) => {
+ finish(
+ usable ? new RipgrepUnavailableError() : ripgrepMissingCwdError(args.authorizedRootPath)
+ )
+ })
}
const handleClose = (code: number | null, signal: NodeJS.Signals | null): void => {
// Why before the unavailable check: classifyNativeLauncherExit treats any code above 2 as a
diff --git a/src/main/ipc/filesystem-search-rg-timeout.test.ts b/src/main/ipc/filesystem-search-rg-timeout.test.ts
index e28bf91716bc..cd89d0f06eed 100644
--- a/src/main/ipc/filesystem-search-rg-timeout.test.ts
+++ b/src/main/ipc/filesystem-search-rg-timeout.test.ts
@@ -157,6 +157,9 @@ describe('filesystem rg search timeout', () => {
wslAwareSpawnMock.mockReturnValue(child)
registerFilesystemHandlers({} as never)
+ // Why a root that exists: an ENOENT spawn failure is also what a vanished workspace looks
+ // like, so this stays about the binary only while the search root is reachable.
+ resolveAuthorizedPathMock.mockImplementation(async () => process.cwd())
const promise = handlers.get('fs:search')!(
{ sender: { id: 7 } },
{ rootPath: '/repo', query: 'ok' }
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index d89bdb7f6b2f..cfefa43281ef 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -142,18 +142,24 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
if (child && isRipgrepUnavailableExit(child, null, null)) {
// Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
// binary for it tells the user to reinstall Orca over a workspace that simply moved.
- void isRipgrepSpawnCwdUsable(rootPath).then((usable) => {
- // Why re-check: finish() drops its argument once settled, so a rejected promise
- // built after the close handler already won would go unhandled.
- if (resolved) {
- return
- }
- finish(
- Promise.reject(
- usable ? bundledRipgrepUnavailableError() : ripgrepMissingCwdError(rootPath)
+ // Why detach close first: a failed spawn emits error THEN close(code < 0), and
+ // close settles synchronously -- it would beat this threadpool round-trip every time.
+ child.off('close', handleClose)
+ // Why catch: a failed probe must not strand the search; fall back to the prior verdict.
+ void isRipgrepSpawnCwdUsable(rootPath)
+ .catch(() => true)
+ .then((usable) => {
+ // Why re-check: finish() drops its argument once settled, so a rejected promise
+ // built after the close handler already won would go unhandled.
+ if (resolved) {
+ return
+ }
+ finish(
+ Promise.reject(
+ usable ? bundledRipgrepUnavailableError() : ripgrepMissingCwdError(rootPath)
+ )
)
- )
- })
+ })
return
}
resolveOnce()
diff --git a/src/main/runtime/orca-runtime-files-search.test.ts b/src/main/runtime/orca-runtime-files-search.test.ts
index 9edbb97cf6ec..3333a61c1b27 100644
--- a/src/main/runtime/orca-runtime-files-search.test.ts
+++ b/src/main/runtime/orca-runtime-files-search.test.ts
@@ -131,7 +131,9 @@ describe('RuntimeFileCommands', () => {
const { commands } = createRuntimeFileCommands({ resolveRuntimeFileTarget })
const child = createRuntimeSearchChild()
Object.defineProperty(child, 'pid', { value: undefined })
- resolveAuthorizedPathMock.mockResolvedValue('/repo')
+ // Why a root that exists: an ENOENT spawn failure is also what a vanished workspace looks
+ // like, so this stays about the binary only while the search root is reachable.
+ resolveAuthorizedPathMock.mockResolvedValue(process.cwd())
wslAwareSpawnMock.mockReturnValue(child)
const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index 0f367333b5f9..c52d27e6d474 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -137,20 +137,26 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
if (child && isRipgrepUnavailableExit(child, null, null)) {
// Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
// binary for it tells the user to reinstall Orca over a workspace that simply moved.
- void isRipgrepSpawnCwdUsable(authorizedRootPath).then((usable) => {
- // Why re-check: finish() drops its argument once settled, so a rejected promise
- // built after the close handler already won would go unhandled.
- if (resolved) {
- return
- }
- finish(
- Promise.reject(
- usable
- ? bundledRipgrepUnavailableError()
- : ripgrepMissingCwdError(authorizedRootPath)
+ // Why detach close first: a failed spawn emits error THEN close(code < 0), and close
+ // settles synchronously -- it would beat this threadpool round-trip every time.
+ child.off('close', onClose)
+ // Why catch: a failed probe must not strand the search; fall back to the prior verdict.
+ void isRipgrepSpawnCwdUsable(authorizedRootPath)
+ .catch(() => true)
+ .then((usable) => {
+ // Why re-check: finish() drops its argument once settled, so a rejected promise
+ // built after the close handler already won would go unhandled.
+ if (resolved) {
+ return
+ }
+ finish(
+ Promise.reject(
+ usable
+ ? bundledRipgrepUnavailableError()
+ : ripgrepMissingCwdError(authorizedRootPath)
+ )
)
- )
- })
+ })
return
}
resolveOnce()
From f29377cdccabcbc844f7a9538e643eca17a283ad Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 17:12:52 -0700
Subject: [PATCH 11/25] test(search): cover exit code 97 in all four ripgrep
close handlers
Round-four review found the missing-cwd branch had zero handler coverage: no
test anywhere emitted close(97), only -2/0/1/2/127. Ordering was correct, but
guarded by source-line order alone -- and that exact ordering was wrong in
three of four handlers two commits ago. Each suite now drives close(97) through
its real handler and expects the unreachable-root message.
Verified the tests earn their place: neutering the missing-cwd check fails
exactly four tests, one per handler.
Also drop a Reflect.get the anti-slop gate rejects, in favour of `in` narrowing.
---
src/main/ipc/filesystem-list-files.test.ts | 13 +++++++++++
.../ipc/filesystem-search-file-paths.test.ts | 20 ++++++++++++++++
.../ipc/filesystem-search-rg-timeout.test.ts | 18 +++++++++++++++
src/main/ripgrep/wsl-missing-cwd-exit.test.ts | 6 +++--
.../runtime/orca-runtime-files-search.test.ts | 23 +++++++++++++++++++
5 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/src/main/ipc/filesystem-list-files.test.ts b/src/main/ipc/filesystem-list-files.test.ts
index eb97c81091e8..baf9996f8e80 100644
--- a/src/main/ipc/filesystem-list-files.test.ts
+++ b/src/main/ipc/filesystem-list-files.test.ts
@@ -87,6 +87,19 @@ describe('filesystem-list-files', () => {
)
})
+ // Why close(97) and not a spawn error: this is the WSL wrapper's "cd failed" code. It is above
+ // rg's own 0/1/2, so a handler that checks it after the unavailable branch reports a broken
+ // install instead -- a regression this file would otherwise not catch.
+ it('names the unreachable root when the WSL wrapper cannot enter it', async () => {
+ const child = createMockProcess()
+ spawnMock.mockReturnValue(child)
+
+ const promise = listQuickOpenFiles('/mock/root', {} as unknown as Store)
+ setTimeout(() => child.emit('close', 97, null), 0)
+
+ await expect(promise).rejects.toThrow('Search root is not reachable: /mock/root')
+ })
+
it('stops after the primary rg pass fills the result budget', async () => {
const p1 = createMockProcess()
const p2 = createMockProcess()
diff --git a/src/main/ipc/filesystem-search-file-paths.test.ts b/src/main/ipc/filesystem-search-file-paths.test.ts
index 4d3608aff0ca..e9415d664314 100644
--- a/src/main/ipc/filesystem-search-file-paths.test.ts
+++ b/src/main/ipc/filesystem-search-file-paths.test.ts
@@ -57,6 +57,10 @@ function createMockProcess(spawned = true): ChildProcess {
const BUNDLED_ERROR = "Orca's bundled search tool (ripgrep) could not start"
+// Why Object.create and not `{} as Store`: this path never reads the store, and the changed-code
+// quality gate rejects type assertions.
+const UNUSED_STORE: Store = Object.create(null)
+
function createSpawnError(code: string): NodeJS.ErrnoException {
return Object.assign(new Error(`spawn rg ${code}`), { code })
}
@@ -213,6 +217,22 @@ describe('searchQuickOpenFilePaths', () => {
expect(wslAwareSpawnMock).toHaveBeenCalledTimes(1)
})
+ // Why close(97): the WSL wrapper's "cd failed" code. It is above rg's own 0/1/2, so a handler
+ // that checks it after the unavailable branch reports a broken install instead.
+ it('names the unreachable root when the WSL wrapper cannot enter it', async () => {
+ const child = createMockProcess()
+ wslAwareSpawnMock.mockReturnValue(child)
+ const promise = searchQuickOpenFilePaths('/repo', UNUSED_STORE, {
+ query: 'target',
+ limit: 32
+ })
+ await flushMicrotasks()
+
+ child.emit('close', 97, null)
+
+ await expect(promise).rejects.toThrow('Search root is not reachable: /repo')
+ })
+
it('names the unreachable root when the workspace is gone, not the bundled binary', async () => {
const child = createMockProcess(false)
wslAwareSpawnMock.mockReturnValue(child)
diff --git a/src/main/ipc/filesystem-search-rg-timeout.test.ts b/src/main/ipc/filesystem-search-rg-timeout.test.ts
index cd89d0f06eed..b0c4b1f2e9bf 100644
--- a/src/main/ipc/filesystem-search-rg-timeout.test.ts
+++ b/src/main/ipc/filesystem-search-rg-timeout.test.ts
@@ -197,6 +197,24 @@ describe('filesystem rg search timeout', () => {
await expect(promise).resolves.toMatchObject({ files: [] })
})
+ // Why close(97): the WSL wrapper's "cd failed" code. It is above rg's own 0/1/2, so a handler
+ // that checks it after the unavailable branch reports a broken install instead.
+ it('names the unreachable root when the WSL wrapper cannot enter it', async () => {
+ const child = createMockProcess()
+ Object.defineProperty(child, 'pid', { value: 1 })
+ wslAwareSpawnMock.mockReturnValue(child)
+ registerFilesystemHandlers({} as never)
+
+ const promise = handlers.get('fs:search')!(
+ { sender: { id: 7 } },
+ { rootPath: '/repo', query: 'ok' }
+ ) as Promise
+ await flushMicrotasks()
+ child.emit('close', 97, null)
+
+ await expect(promise).rejects.toThrow('Search root is not reachable: /repo')
+ })
+
it("rejects when a native launcher exits outside ripgrep's contract", async () => {
const child = createMockProcess()
Object.defineProperty(child, 'pid', { value: 1 })
diff --git a/src/main/ripgrep/wsl-missing-cwd-exit.test.ts b/src/main/ripgrep/wsl-missing-cwd-exit.test.ts
index d64381753d51..6dc030bdf8a6 100644
--- a/src/main/ripgrep/wsl-missing-cwd-exit.test.ts
+++ b/src/main/ripgrep/wsl-missing-cwd-exit.test.ts
@@ -14,8 +14,10 @@ async function shellExitCode(script: string): Promise {
await execFileAsync('bash', ['-c', script])
return 0
} catch (error) {
- const code: unknown = error instanceof Error ? Reflect.get(error, 'code') : undefined
- return typeof code === 'number' ? code : -1
+ if (error instanceof Error && 'code' in error && typeof error.code === 'number') {
+ return error.code
+ }
+ return -1
}
}
diff --git a/src/main/runtime/orca-runtime-files-search.test.ts b/src/main/runtime/orca-runtime-files-search.test.ts
index 3333a61c1b27..047b505f8112 100644
--- a/src/main/runtime/orca-runtime-files-search.test.ts
+++ b/src/main/runtime/orca-runtime-files-search.test.ts
@@ -157,6 +157,29 @@ describe('RuntimeFileCommands', () => {
}
)
+ // Why close(97): the WSL wrapper's "cd failed" code. It is above rg's own 0/1/2, so a handler
+ // that checks it after the unavailable branch reports a broken install instead.
+ it('names the unreachable root when the WSL wrapper cannot enter it', async () => {
+ const resolveRuntimeFileTarget = vi.fn(async () => ({
+ worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
+ executionHostId: 'local'
+ }))
+ const { commands } = createRuntimeFileCommands({ resolveRuntimeFileTarget })
+ const child = createRuntimeSearchChild()
+ Object.defineProperty(child, 'pid', { value: 1 })
+ resolveAuthorizedPathMock.mockResolvedValue('/repo')
+ wslAwareSpawnMock.mockReturnValue(child)
+
+ const resultPromise = commands.searchRuntimeFiles('id:wt-1', {
+ query: 'needle',
+ maxResults: 10
+ })
+ await flushRuntimeSearchMicrotasks()
+ child.emit('close', 97, null)
+
+ await expect(resultPromise).rejects.toThrow('Search root is not reachable: /repo')
+ })
+
it("rejects when a runtime native launcher exits outside ripgrep's contract", async () => {
const resolveRuntimeFileTarget = vi.fn(async () => ({
worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
From b56ce66a5d79b32a1373c460ed8f7403c04ff73a Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 17:15:03 -0700
Subject: [PATCH 12/25] docs(search): stop claiming the close handler always
wins the race
The previous commit asserted close "would beat this threadpool round-trip every
time", from an n=3 sample that measured event ordering -- which was never in
dispute -- rather than probe-vs-close. Two later measurements disagree with each
other: 50/50 close-first here, 30/50 probe-first in review. Either way it is a
race on a sub-millisecond margin, and the detach is what makes the verdict
deterministic.
Why this wording matters: "close wins every time" is an argument for deleting
the detach as a guard against an impossible race. No test would catch that --
the suites emit error and close in the same synchronous tick.
---
src/main/ipc/filesystem-list-files.ts | 3 ++-
src/main/ipc/filesystem-search-file-paths.ts | 3 ++-
src/main/ipc/filesystem/filesystem-search-handlers.ts | 3 ++-
.../runtime-file-commands-search-local-runtime-files.ts | 3 ++-
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index 9511d299a567..36ca50d129ac 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -162,7 +162,8 @@ export async function listQuickOpenFiles(
// Why the cwd check: spawn reports a missing cwd as ENOENT too, and blaming the binary
// for it tells the user to reinstall Orca over a workspace that simply moved.
// Why detach close first: a failed spawn emits error THEN close(code < 0), and close
- // settles synchronously -- it would beat this threadpool round-trip every time.
+ // settles synchronously, so this probe would otherwise race it on a sub-millisecond
+ // margin -- two measurements disagreed on which wins. Detaching makes it deterministic.
child.off('close', handleClose)
// Why catch: a failed probe must not strand the search; fall back to the prior verdict.
void isRipgrepSpawnCwdUsable(authorizedRootPath)
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index 482edf6d7eab..ff1875863585 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -197,7 +197,8 @@ function scanRipgrepPaths(args: {
// Why the cwd check: spawn reports a missing cwd as ENOENT too, and blaming the binary
// for it tells the user to reinstall Orca over a workspace that simply moved.
// Why detach close first: a failed spawn emits error THEN close(code < 0), and close settles
- // synchronously -- it would beat this threadpool round-trip every time.
+ // synchronously, so this probe would otherwise race it on a sub-millisecond margin -- two
+ // measurements disagreed on which wins. Detaching makes the verdict deterministic.
child.off('close', handleClose)
// Why catch: a failed probe must not strand the search; fall back to the prior verdict.
void isRipgrepSpawnCwdUsable(args.authorizedRootPath)
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index cfefa43281ef..311d7e22d0ee 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -143,7 +143,8 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
// Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
// binary for it tells the user to reinstall Orca over a workspace that simply moved.
// Why detach close first: a failed spawn emits error THEN close(code < 0), and
- // close settles synchronously -- it would beat this threadpool round-trip every time.
+ // close settles synchronously, so this probe would otherwise race it on a sub-ms
+ // margin -- two measurements disagreed on which wins. Detaching makes it deterministic.
child.off('close', handleClose)
// Why catch: a failed probe must not strand the search; fall back to the prior verdict.
void isRipgrepSpawnCwdUsable(rootPath)
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index c52d27e6d474..88066cd2bceb 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -138,7 +138,8 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
// Why the cwd check first: spawn reports a missing cwd as ENOENT too, and blaming the
// binary for it tells the user to reinstall Orca over a workspace that simply moved.
// Why detach close first: a failed spawn emits error THEN close(code < 0), and close
- // settles synchronously -- it would beat this threadpool round-trip every time.
+ // settles synchronously, so this probe would otherwise race it on a sub-millisecond
+ // margin -- two measurements disagreed on which wins. Detaching makes it deterministic.
child.off('close', onClose)
// Why catch: a failed probe must not strand the search; fall back to the prior verdict.
void isRipgrepSpawnCwdUsable(authorizedRootPath)
From f79158e565eab3d35ed5d0ea246ee170b1a4d66c Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 17:30:23 -0700
Subject: [PATCH 13/25] chore(search): ship the jemalloc and libunwind notices
the Linux rg needs
The statically linked Linux builds carry jemalloc (BSD-2-Clause) and LLVM
libunwind (Apache-2.0 WITH LLVM-exception) in addition to PCRE2 and musl, and
both require their notice on binary redistribution. Confirmed with `strings`:
their symbols are present in linux-x64 and linux-arm64 and absent from the
darwin and win32 builds. Texts taken from the upstream canonical sources.
extraResources already copies the whole licenses directory, so these ship
without a packaging change.
---
config/bundled-ripgrep-resources.cjs | 3 +-
resources/licenses/ripgrep/JEMALLOC-COPYING | 27 ++
.../ripgrep/LLVM-LIBUNWIND-LICENSE.TXT | 311 ++++++++++++++++++
resources/licenses/ripgrep/README.md | 6 +
4 files changed, 346 insertions(+), 1 deletion(-)
create mode 100644 resources/licenses/ripgrep/JEMALLOC-COPYING
create mode 100644 resources/licenses/ripgrep/LLVM-LIBUNWIND-LICENSE.TXT
diff --git a/config/bundled-ripgrep-resources.cjs b/config/bundled-ripgrep-resources.cjs
index 290cd6167687..b1689fdf9dd8 100644
--- a/config/bundled-ripgrep-resources.cjs
+++ b/config/bundled-ripgrep-resources.cjs
@@ -24,7 +24,8 @@ const bundledRipgrepExtraResources = [
to: RIPGREP_RESOURCE_DIR,
filter: BUNDLED_RIPGREP_PLATFORMS.map((platform) => `${platform}/**`)
},
- // Why: the binaries statically link PCRE2 (and musl on Linux), whose licenses require the notice.
+ // Why: the binaries statically link PCRE2, and on Linux musl, jemalloc and LLVM libunwind --
+ // all of which require their notice on binary redistribution. Whole dir, so notices can be added.
{ from: 'resources/licenses/ripgrep', to: `${RIPGREP_RESOURCE_DIR}/licenses` }
]
diff --git a/resources/licenses/ripgrep/JEMALLOC-COPYING b/resources/licenses/ripgrep/JEMALLOC-COPYING
new file mode 100644
index 000000000000..3b7fd3585d2b
--- /dev/null
+++ b/resources/licenses/ripgrep/JEMALLOC-COPYING
@@ -0,0 +1,27 @@
+Unless otherwise specified, files in the jemalloc source distribution are
+subject to the following license:
+--------------------------------------------------------------------------------
+Copyright (C) 2002-present Jason Evans .
+All rights reserved.
+Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
+Copyright (C) 2009-present Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice(s),
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice(s),
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--------------------------------------------------------------------------------
diff --git a/resources/licenses/ripgrep/LLVM-LIBUNWIND-LICENSE.TXT b/resources/licenses/ripgrep/LLVM-LIBUNWIND-LICENSE.TXT
new file mode 100644
index 000000000000..1e3120621cae
--- /dev/null
+++ b/resources/licenses/ripgrep/LLVM-LIBUNWIND-LICENSE.TXT
@@ -0,0 +1,311 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+==============================================================================
+
+The libunwind library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license. As a user of this code you may choose
+to use it under either license. As a contributor, you agree to allow your code
+to be used under both.
+
+Full text of the relevant licenses is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/resources/licenses/ripgrep/README.md b/resources/licenses/ripgrep/README.md
index 3f456169e99b..8f061f8c55bb 100644
--- a/resources/licenses/ripgrep/README.md
+++ b/resources/licenses/ripgrep/README.md
@@ -6,3 +6,9 @@ Orca ships prebuilt ripgrep (`rg`) binaries from `@vscode/ripgrep-universal` und
- ripgrep: dual-licensed MIT (`LICENSE-MIT`) or Unlicense (`UNLICENSE`).
- PCRE2, statically linked into ripgrep's `--pcre2` support: BSD (`PCRE2-LICENCE.md`).
- musl libc, statically linked into the Linux builds: MIT (`MUSL-COPYRIGHT`).
+- jemalloc, ripgrep's allocator on the musl builds: BSD-2-Clause (`JEMALLOC-COPYING`).
+- LLVM libunwind, statically linked into the Linux builds by Rust's musl target:
+ Apache-2.0 WITH LLVM-exception (`LLVM-LIBUNWIND-LICENSE.TXT`).
+
+The last two apply to the Linux binaries only; `strings` finds their symbols in
+`linux-x64` and `linux-arm64` and in neither the darwin nor win32 builds.
From 6059a280bdc5ce64d1256364df7447b4b9eef956 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 17:48:43 -0700
Subject: [PATCH 14/25] fix(relay): stop spawning a bare rg, name unreachable
roots, collect old builds
Three gaps the reviews surfaced on the remote side, all pre-existing on main.
Bare `rg` on Windows remotes. Both relay spawn sites pass the user's repo as
cwd, and CreateProcessW searches the cwd before PATH -- the same hijack the
desktop side already fixes. The relay now walks PATH itself and spawns an
absolute rg.exe, skipping relative PATH entries because those resolve against
the cwd. No rg on PATH yields null, which callers treat as "ripgrep
unavailable" rather than handing spawn a bare name. POSIX keeps the bare name:
execvp never consults the cwd, so there is nothing to resolve and nothing to
gain. With the last probe converted, the bare-spawn ratchet allowlist is empty.
Empty results for an unreachable root. settleLaunchFailure resolved an empty,
successful-looking scan when the root was gone but PATH rg existed, and the
git/readdir chain never engaged because it only triggers on
RipgrepUnavailableError. Both relay paths now reject naming the root, matching
local workspaces. Missing-rg keeps precedence over a missing root, because only
that verdict engages the fallback chain -- two tests pinned that deliberately
and it would have been wrong to flip it.
Unbounded ~/.orca-remote/ripgrep/. Nothing collected this tree; the relay's
version GC only matches `relay-*`, so every rg bump left another ~5 MB per host
forever. The probe command now also drops sibling builds older than two weeks,
sparing the current one and live upload stages, on POSIX and PowerShell alike.
Two weeks because a client pinned to an older build may still be using it; the
cost of collecting one early is that client re-uploading once.
---
.../bare-ripgrep-spawn-boundary.test.ts | 9 ++-
.../ssh/ssh-relay-ripgrep-install.test.ts | 23 +++++++
src/main/ssh/ssh-relay-ripgrep-install.ts | 16 ++++-
.../fs-handler-list-files-ignored.test.ts | 9 ++-
src/relay/fs-handler-list-files.ts | 19 +++++-
src/relay/fs-handler-utils.ts | 28 ++++++--
src/relay/relay-bundled-ripgrep.ts | 54 ++++++++++++++-
src/relay/relay-windows-path-ripgrep.test.ts | 66 +++++++++++++++++++
src/shared/ripgrep-process-availability.ts | 60 ++++++++---------
9 files changed, 228 insertions(+), 56 deletions(-)
create mode 100644 src/relay/relay-windows-path-ripgrep.test.ts
diff --git a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
index 8080c236a3e0..4c3da7b837a7 100644
--- a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
+++ b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
@@ -11,11 +11,10 @@ import { describe, expect, it } from 'vitest'
*
* The allowlist only shrinks. Each entry is a deliberate PATH fallback that has to stay.
*/
-const ALLOWED_BARE_RIPGREP_SPAWNS: readonly string[] = [
- // The relay-only probe answering "does this host have any rg at all" before it drops to the
- // git/readdir chain. It asks about PATH by definition, so it cannot take an absolute path.
- 'src/shared/ripgrep-process-availability.ts'
-]
+// Empty on purpose: the relay's PATH probe was the last entry, and it is gone -- on Windows the
+// relay now resolves rg.exe from PATH itself, and everywhere else an unreachable root is
+// classified rather than probed. Nothing in production spawns a bare `rg`.
+const ALLOWED_BARE_RIPGREP_SPAWNS: readonly string[] = []
// A spawn/exec whose command argument is the literal string 'rg' (or "rg").
const BARE_SPAWN_PATTERN =
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
index 86c0bd4e19c2..d143ab01a35c 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -79,6 +79,29 @@ describe('ensureRemoteBundledRipgrep', () => {
)
})
+ // Why this needs a test: nothing else collects this tree -- the relay's version GC only matches
+ // `relay-*` -- so without it every rg bump left another ~5 MB on every host, forever.
+ it('collects superseded builds while sparing the current one and live stages', async () => {
+ execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
+
+ await ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')
+
+ const script = execScripts()[0]
+ expect(script).toContain("! -name 'c0ffee0123456789-linux-x64'")
+ expect(script).toContain("! -name '.upload-*'")
+ expect(script).toContain('-mtime +14')
+ })
+
+ it('collects superseded builds on Windows hosts too', async () => {
+ execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
+
+ await ensureRemoteBundledRipgrep(connection(), WINDOWS, 'C:/Users/me user')
+
+ const script = execScripts()[0]
+ expect(script).toContain("-ne 'c0ffee0123456789-win32-x64'")
+ expect(script).toContain('AddDays(-14)')
+ })
+
it('skips the upload in one round trip when the binary is already installed', async () => {
execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index cdbc5b534269..e0ed740afa02 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -47,6 +47,10 @@ export const REMOTE_RIPGREP_CACHE_DIR_NAME = 'ripgrep'
const UPLOAD_STAGE_PREFIX = '.upload-'
// Why an hour: long enough that no live upload of ~5 MB is still writing, short enough to drain crashes.
const STALE_UPLOAD_STAGE_MINUTES = 60
+// Why two weeks and not immediately: a client pinned to an older Orca may still be running against
+// the build it uploaded. The only cost of collecting one too early is that client re-uploading
+// ~5 MB on its next connect; the cost of never collecting is a permanent leak on every host.
+const SUPERSEDED_RIPGREP_DAYS = 14
const PRESENT = 'ORCA-RG-PRESENT'
const STAGED = 'ORCA-RG-STAGED'
const INSTALLED = 'ORCA-RG-INSTALLED'
@@ -54,6 +58,8 @@ const INSTALLED = 'ORCA-RG-INSTALLED'
export type RemoteRipgrepLayout = {
platform: BundledRipgrepPlatform
cacheDir: string
+ /** `-`; the sibling directories are superseded builds. */
+ entryName: string
binaryPath: string
}
@@ -74,6 +80,7 @@ export function remoteRipgrepLayout(
return {
platform,
cacheDir,
+ entryName,
binaryPath: joinRemotePath(host, cacheDir, entryName, bundledRipgrepBinaryName(platform))
}
}
@@ -187,16 +194,21 @@ export function probeOrStageCommand(
const bytes = String(Math.trunc(expectedBytes))
if (!isWindowsRemoteHost(host)) {
const bin = shellEscape(layout.binaryPath)
- const sweep = `find ${shellEscape(layout.cacheDir)} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
+ const cache = shellEscape(layout.cacheDir)
+ const sweep = `find ${cache} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
+ // Why here and not in the relay's version GC: that GC only matches `relay-*`, so nothing has
+ // ever collected this tree. Every rg bump would otherwise leave another ~5 MB per host forever.
+ const collect = `find ${cache} -mindepth 1 -maxdepth 1 -type d ! -name ${shellEscape(layout.entryName)} ! -name '${UPLOAD_STAGE_PREFIX}*' -mtime +${SUPERSEDED_RIPGREP_DAYS} -exec rm -rf {} + 2>/dev/null`
const stage = makeRelayUploadStageDirectoryCommand(stageNamespace, host, stageDir)
// Why the sweep runs before the branch, not inside the else: once rg is installed every later
// deploy takes the PRESENT path, so a stage orphaned by a dropped connection would never be
// collected. It stays one exec round trip either way.
- return `${sweep}; if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${stage} && echo ${STAGED}; fi`
+ return `${sweep}; ${collect}; if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${stage} && echo ${STAGED}; fi`
}
return powerShellCommand(
[
`Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -Filter '${UPLOAD_STAGE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-${STALE_UPLOAD_STAGE_MINUTES}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
+ `Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne ${powerShellLiteral(layout.entryName)} -and -not $_.Name.StartsWith('${UPLOAD_STAGE_PREFIX}') -and $_.LastWriteTime -lt (Get-Date).AddDays(-${SUPERSEDED_RIPGREP_DAYS}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
`if (${windowsInstalledTest(powerShellLiteral(layout.binaryPath), bytes)}) { '${PRESENT}' } else {`,
`$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(joinRemotePath(host, stageDir, 'payload'))} -ErrorAction Stop`,
`'${STAGED}' }`
diff --git a/src/relay/fs-handler-list-files-ignored.test.ts b/src/relay/fs-handler-list-files-ignored.test.ts
index 2cc666c50bbd..fa0bd70cb09e 100644
--- a/src/relay/fs-handler-list-files-ignored.test.ts
+++ b/src/relay/fs-handler-list-files-ignored.test.ts
@@ -637,7 +637,10 @@ describe('relay quick open ignored file listing', () => {
await expect(unavailable).rejects.toBeInstanceOf(RipgrepUnavailableError)
})
- it('keeps missing-root launch errors on their prior non-fallback paths', async () => {
+ // Why this changed: both paths still refuse the git/readdir fallback, which is what "non-fallback"
+ // pinned -- a chain that walks the root cannot help when the root is gone. What changed is that
+ // search no longer reports an empty, successful-looking scan for a workspace that moved.
+ it('names the unreachable root on both missing-root launch paths', async () => {
const missingRoot = await makeTempRoot()
await rm(missingRoot, { recursive: true, force: true })
const listFirst = createMockProcess()
@@ -653,7 +656,7 @@ describe('relay quick open ignored file listing', () => {
await vi.waitFor(() => expect(spawnMock).toHaveBeenCalledTimes(2))
expect(spawnMock.mock.calls[1]).toEqual(['rg', ['--version'], { stdio: 'ignore' }])
listProbe.emit('close', 0, null)
- await expect(listing).rejects.toBe(listError)
+ await expect(listing).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
spawnMock.mockReset()
const searchChild = createMockProcess()
@@ -666,7 +669,7 @@ describe('relay quick open ignored file listing', () => {
await vi.waitFor(() => expect(spawnMock).toHaveBeenCalledTimes(2))
searchProbe.emit('close', 0, null)
- await expect(search).resolves.toMatchObject({ files: [], totalMatches: 0 })
+ await expect(search).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
})
it('keeps missing-rg precedence when the root also disappeared', async () => {
diff --git a/src/relay/fs-handler-list-files.ts b/src/relay/fs-handler-list-files.ts
index 80426ab000b1..c75bc726d8da 100644
--- a/src/relay/fs-handler-list-files.ts
+++ b/src/relay/fs-handler-list-files.ts
@@ -23,16 +23,18 @@ import {
} from '../shared/quick-open-filter'
import {
absorbPendingRipgrepSpawnError,
- isRipgrepUnavailableAfterLaunchFailure,
+ classifyRipgrepLaunchFailure,
isRipgrepUnavailableExit,
isTransientRipgrepSpawnError,
killSpawnedRipgrepProcess,
RipgrepLaunchFailureError,
+ ripgrepMissingCwdError,
RipgrepUnavailableError
} from '../shared/ripgrep-process-availability'
import { QuickOpenPathRanker } from '../shared/quick-open-path-search'
import { buildRelayCommandEnv } from './relay-command-env'
import {
+ pathRipgrepCommand,
resolveRelayRipgrepCommand,
retryRipgrepOnPathAfterLaunchFailure
} from './relay-bundled-ripgrep'
@@ -108,6 +110,11 @@ export function listFilesWithRg(
// search target. Without cwd, nested-worktree exclusions silently
// stop working.
const command = resolveRelayRipgrepCommand()
+ // Why not spawn a bare name when this is null: on Windows CreateProcessW searches the
+ // spawn cwd -- the user's repo -- before PATH. "No rg here" is what the chain handles.
+ if (command === null) {
+ throw new RipgrepUnavailableError()
+ }
let child: ChildProcess
try {
child = spawn(command, ['--no-messages', ...args], {
@@ -169,8 +176,14 @@ export function listFilesWithRg(
rejectPass(new RipgrepLaunchFailureError('bundled rg failed to start'))
return
}
- const unavailable = await isRipgrepUnavailableAfterLaunchFailure(rootPath)
- rejectPass(unavailable ? new RipgrepUnavailableError() : error)
+ // Why distinguish: RipgrepUnavailableError is what engages the git/readdir chain,
+ // and that chain cannot help when the root itself is gone.
+ rejectPass(
+ (await classifyRipgrepLaunchFailure(rootPath, pathRipgrepCommand())) ===
+ 'cwd-unreachable'
+ ? ripgrepMissingCwdError(rootPath)
+ : new RipgrepUnavailableError()
+ )
}
)
}
diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts
index 0acb2e65aee6..9d5a3a9002ce 100644
--- a/src/relay/fs-handler-utils.ts
+++ b/src/relay/fs-handler-utils.ts
@@ -19,13 +19,15 @@ import { IMAGE_FILE_MIME_TYPES } from '../shared/image-file-extensions'
import type { SearchResult as SharedSearchResult } from '../shared/code-search-types'
import {
absorbPendingRipgrepSpawnError,
- isRipgrepUnavailableAfterLaunchFailure,
+ classifyRipgrepLaunchFailure,
isRipgrepUnavailableExit,
killSpawnedRipgrepProcess,
+ ripgrepMissingCwdError,
RipgrepUnavailableError
} from '../shared/ripgrep-process-availability'
import { buildRelayCommandEnv } from './relay-command-env'
import {
+ pathRipgrepCommand,
resolveRelayRipgrepCommand,
retryRipgrepOnPathAfterLaunchFailure
} from './relay-bundled-ripgrep'
@@ -115,7 +117,15 @@ export function searchWithRg(
// which would leak out of the `new Promise` executor and leave the
// promise forever pending. Treat a synchronous throw as a clean
// "no results" fallback, the same way an async 'error' event is handled.
- const command = resolveRelayRipgrepCommand()
+ const resolvedRgCommand = resolveRelayRipgrepCommand()
+ // Why not spawn a bare name when this is null: on Windows CreateProcessW searches the spawn
+ // cwd -- the user's repo -- before PATH, so a planted rg.exe would run instead.
+ if (resolvedRgCommand === null) {
+ reject(new RipgrepUnavailableError())
+ return
+ }
+ // Why a second binding: the closures below capture it, and narrowing does not reach them.
+ const command: string = resolvedRgCommand
let child: ReturnType
try {
child = spawn(command, rgArgs, {
@@ -170,10 +180,16 @@ export function searchWithRg(
}
return
}
- if (!(await isRipgrepUnavailableAfterLaunchFailure(rootPath))) {
- resolveOnce()
- } else if (settle()) {
- reject(new RipgrepUnavailableError())
+ // Why not resolveOnce() on an unreachable root: an empty result reads as "no matches"
+ // and the git/readdir chain never engages, because it only triggers on an unavailable
+ // ripgrep. The workspace moving would otherwise look like a successful empty scan.
+ if (settle()) {
+ reject(
+ (await classifyRipgrepLaunchFailure(rootPath, pathRipgrepCommand())) ===
+ 'cwd-unreachable'
+ ? ripgrepMissingCwdError(rootPath)
+ : new RipgrepUnavailableError()
+ )
}
}
)
diff --git a/src/relay/relay-bundled-ripgrep.ts b/src/relay/relay-bundled-ripgrep.ts
index 38bba6bd174b..a750925b5b55 100644
--- a/src/relay/relay-bundled-ripgrep.ts
+++ b/src/relay/relay-bundled-ripgrep.ts
@@ -3,7 +3,8 @@
* and passes its path via `--ripgrep-path`; PATH `rg` (and then the git/readdir fallbacks) stays
* the answer whenever that binary is absent or cannot launch on this host.
*/
-import { existsSync } from 'node:fs'
+import { existsSync, statSync } from 'node:fs'
+import { delimiter, isAbsolute, join } from 'node:path'
import {
isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError
@@ -12,6 +13,35 @@ import { relayLogLine } from './relay-diagnostic-log'
export const PATH_RIPGREP_COMMAND = 'rg'
+/**
+ * Absolute path to a PATH `rg` on Windows, or null when there is none.
+ *
+ * Why Windows only: CreateProcessW searches the spawn cwd -- the user's repo -- before PATH, so a
+ * bare `rg` there runs a planted `rg.exe` from a cloned repository. POSIX `execvp` never consults
+ * the cwd, so a bare name stays correct and free there.
+ */
+function resolveWindowsPathRipgrep(): string | null {
+ for (const entry of (process.env.PATH ?? '').split(delimiter)) {
+ const dir = entry.replace(/^"|"$/g, '').trim()
+ // Why skip relative entries: a relative PATH entry resolves against the cwd, the very thing
+ // this lookup exists to avoid.
+ if (!dir || !isAbsolute(dir)) {
+ continue
+ }
+ const candidate = join(dir, 'rg.exe')
+ try {
+ if (statSync(candidate).isFile()) {
+ return candidate
+ }
+ } catch {
+ /* next entry */
+ }
+ }
+ return null
+}
+
+let windowsPathRipgrep: string | null | undefined
+
let bundledRipgrepPath: string | null = null
// Why a back-off, not forever: Windows AV often locks a just-installed rg.exe for its first spawns.
const BUNDLED_RIPGREP_RETRY_MS = 60_000
@@ -22,7 +52,21 @@ export function configureRelayBundledRipgrep(path: string | undefined): void {
bundledRipgrepUnusableUntil = 0
}
-export function resolveRelayRipgrepCommand(): string {
+/**
+ * The host's PATH ripgrep, safe to spawn directly, or null when it has none. On Windows that is an
+ * absolute path, because a bare name would resolve against the spawn cwd first.
+ */
+export function pathRipgrepCommand(): string | null {
+ if (process.platform !== 'win32') {
+ return PATH_RIPGREP_COMMAND
+ }
+ // Why cached: PATH does not change under a running relay, and this runs per spawn.
+ windowsPathRipgrep ??= resolveWindowsPathRipgrep()
+ return windowsPathRipgrep
+}
+
+/** Null means this host has no usable rg, so the caller falls back to git/readdir. */
+export function resolveRelayRipgrepCommand(): string | null {
// Why check existence per spawn: the deploy uploads rg after the relay starts, so it can appear mid-session.
if (
bundledRipgrepPath &&
@@ -31,7 +75,11 @@ export function resolveRelayRipgrepCommand(): string {
) {
return bundledRipgrepPath
}
- return PATH_RIPGREP_COMMAND
+ return pathRipgrepCommand()
+}
+
+export function resetRelayRipgrepPathCacheForTests(): void {
+ windowsPathRipgrep = undefined
}
/**
diff --git a/src/relay/relay-windows-path-ripgrep.test.ts b/src/relay/relay-windows-path-ripgrep.test.ts
new file mode 100644
index 000000000000..65b5e84a85e1
--- /dev/null
+++ b/src/relay/relay-windows-path-ripgrep.test.ts
@@ -0,0 +1,66 @@
+import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { delimiter, join } from 'node:path'
+import { afterEach, describe, expect, it } from 'vitest'
+import {
+ configureRelayBundledRipgrep,
+ pathRipgrepCommand,
+ resetRelayRipgrepPathCacheForTests
+} from './relay-bundled-ripgrep'
+
+const originalPlatform = process.platform
+const originalPath = process.env.PATH
+
+function setPlatform(value: string): void {
+ Object.defineProperty(process, 'platform', { configurable: true, value })
+}
+
+describe('relay PATH ripgrep resolution', () => {
+ afterEach(() => {
+ setPlatform(originalPlatform)
+ process.env.PATH = originalPath
+ resetRelayRipgrepPathCacheForTests()
+ configureRelayBundledRipgrep(undefined)
+ })
+
+ // Why this matters on Windows only: CreateProcessW searches the spawn cwd -- the user's repo --
+ // before PATH, so a bare `rg` there runs a planted rg.exe out of a cloned repository.
+ it('resolves an absolute rg.exe from PATH on Windows', () => {
+ const dir = mkdtempSync(join(tmpdir(), 'relay-rg-'))
+ try {
+ writeFileSync(join(dir, 'rg.exe'), '')
+ setPlatform('win32')
+ process.env.PATH = `${join(dir, 'missing')}${delimiter}${dir}`
+ resetRelayRipgrepPathCacheForTests()
+
+ expect(pathRipgrepCommand()).toBe(join(dir, 'rg.exe'))
+ } finally {
+ rmSync(dir, { recursive: true, force: true })
+ }
+ })
+
+ it('returns null on Windows rather than a bare name when PATH has no rg', () => {
+ setPlatform('win32')
+ process.env.PATH = join(tmpdir(), 'definitely-not-here')
+ resetRelayRipgrepPathCacheForTests()
+
+ expect(pathRipgrepCommand()).toBeNull()
+ })
+
+ // Why a relative PATH entry is skipped: it resolves against the cwd, the hazard being avoided.
+ it('ignores relative PATH entries on Windows', () => {
+ setPlatform('win32')
+ process.env.PATH = `.${delimiter}node_modules/.bin`
+ resetRelayRipgrepPathCacheForTests()
+
+ expect(pathRipgrepCommand()).toBeNull()
+ })
+
+ // Why POSIX keeps the bare name: execvp never consults the cwd, so there is nothing to resolve.
+ it('keeps the bare name on POSIX', () => {
+ setPlatform('linux')
+ resetRelayRipgrepPathCacheForTests()
+
+ expect(pathRipgrepCommand()).toBe('rg')
+ })
+})
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index 6c1bd95ccdd1..ace1c4df4b2c 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -77,60 +77,52 @@ export async function isRipgrepSpawnCwdUsable(cwd: string): Promise {
}
}
-// Why a bare 'rg' is allowed here, against the rule in AGENTS.md: this asks "does this host have any
-// ripgrep on PATH", which only the relay's git/readdir fallback chain needs. Main-process code has a
-// bundled binary and must resolve it by absolute path instead -- see spawnBundledRipgrep.
-function checkRipgrepAvailableWithoutCwd(): Promise {
+function probeRipgrepVersion(command: string): Promise {
return new Promise((resolve) => {
let child: ChildProcess
try {
- child = spawn('rg', ['--version'], { stdio: 'ignore' })
+ child = spawn(command, ['--version'], { stdio: 'ignore' })
} catch {
resolve(false)
return
}
let settled = false
- let errorObserved = false
- let unavailableExitObserved = false
- let timeout: ReturnType | null = null
- const settle = (available: boolean, kill = false): void => {
+ const settle = (available: boolean): void => {
if (settled) {
return
}
settled = true
- if (timeout) {
- clearTimeout(timeout)
- }
- child.off('error', onError)
- child.off('close', onClose)
- if (kill) {
- child.once('error', ignoreRipgrepSpawnError)
- killSpawnedRipgrepProcess(child)
- } else {
- absorbPendingRipgrepSpawnError(child, { errorObserved, unavailableExitObserved })
- }
+ clearTimeout(timeout)
+ child.once('error', ignoreRipgrepSpawnError)
resolve(available)
}
- const onError = (): void => {
- errorObserved = true
- settle(false)
- }
- const onClose = (code: number | null): void => {
- unavailableExitObserved = code !== null && code < 0
- settle(code === 0)
- }
- child.once('error', onError)
- child.once('close', onClose)
- timeout = setTimeout(() => settle(false, true), RIPGREP_FAILURE_PROBE_TIMEOUT_MS)
+ child.once('error', () => settle(false))
+ child.once('close', (code) => settle(code === 0))
+ const timeout = setTimeout(() => settle(false), RIPGREP_FAILURE_PROBE_TIMEOUT_MS)
timeout.unref?.()
})
}
-export async function isRipgrepUnavailableAfterLaunchFailure(cwd: string): Promise {
+/**
+ * Why a launch failure needs classifying: spawn reports an unreachable cwd as ENOENT, the same as
+ * a missing binary. Telling a user to install ripgrep because their workspace moved sends them
+ * down the wrong path, and resolving an empty result hides the move entirely.
+ *
+ * `pathRipgrepCommand` is the host's PATH ripgrep, already resolved to an absolute path where a
+ * bare name would be unsafe, or null when the host has none. A missing ripgrep keeps precedence
+ * over an unreachable root, because only that verdict engages the git/readdir fallback chain.
+ */
+export async function classifyRipgrepLaunchFailure(
+ cwd: string,
+ pathRipgrepCommand: string | null
+): Promise<'cwd-unreachable' | 'ripgrep-unavailable'> {
if (await isRipgrepSpawnCwdUsable(cwd)) {
- return true
+ return 'ripgrep-unavailable'
+ }
+ if (pathRipgrepCommand === null) {
+ return 'ripgrep-unavailable'
}
- return !(await checkRipgrepAvailableWithoutCwd())
+ return (await probeRipgrepVersion(pathRipgrepCommand)) ? 'cwd-unreachable' : 'ripgrep-unavailable'
}
/**
From cf019c268179d6a1350cdec0ad7f434749880262 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 18:10:07 -0700
Subject: [PATCH 15/25] fix(relay): probe the rg that failed, and close the
drive-relative PATH hole
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Five review findings against the previous commit, all reproduced first.
The launch-failure classifier probed PATH rg, but the spawn that failed was the
bundled binary. On the normal remote setup -- no rg on PATH, which is why Orca
uploads one -- the probe failed and a moved workspace was reported as a missing
ripgrep, telling the user to install what Orca already ships. So the fix was
inert on exactly the hosts the uploader exists for. It now takes a candidate
list and asks the binary that actually failed first, then PATH.
path.win32.isAbsolute accepts `\tools` and `/tools`: rooted, but carrying no
drive, so they resolve against whatever drive the process is on. The probe
would have validated one against the relay's drive while the spawn, running
with the user's repo as cwd, resolved it against the repo's -- the same
cwd-dependence this lookup removes, narrowed from directory to drive. A real
drive letter or UNC root is now required.
probeRipgrepVersion had lost the timeout's kill in the rewrite, leaking a live
process and a ref'd handle per launch failure -- for a hang, which is the very
case the bundled-rg back-off exists for. It also spawned without windowsHide,
which would flash a console; fixing that made an allowlist entry stale, so the
entry is gone and the pin ratchets down 63 -> 62.
`windowsPathRipgrep ??= …` never memoised a miss, because null is nullish. The
caching was inverted against cost: a hit stops at the first directory, a miss
stats every one, and only the miss was repeated -- per spawn.
The bare-spawn ratchet claimed "nothing in production spawns a bare rg", which
is false on POSIX. It now also matches PATH_RIPGREP_COMMAND at a spawn site,
and the comment states plainly what a textual guard cannot see: the POSIX bare
name reaches spawn as a parameter, and is safe because execvp ignores the cwd.
The drive-rooted predicate is tested directly rather than through the
filesystem -- a temp dir on a POSIX CI host has no drive letter to exercise
win32 semantics with, so the filesystem test could never have caught this.
---
.../bare-ripgrep-spawn-boundary.test.ts | 17 ++++++---
.../fs-handler-list-files-ignored.test.ts | 36 +++++++++++++++++-
src/relay/fs-handler-list-files.ts | 2 +-
src/relay/fs-handler-utils.ts | 2 +-
src/relay/relay-bundled-ripgrep.ts | 25 +++++++++---
src/relay/relay-windows-path-ripgrep.test.ts | 29 +++++++++++++-
.../windows-console-visibility-allowlist.txt | 1 -
.../windows-console-visibility.test.ts | 2 +-
src/shared/ripgrep-process-availability.ts | 38 +++++++++++++------
9 files changed, 124 insertions(+), 28 deletions(-)
diff --git a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
index 4c3da7b837a7..3492302f1b89 100644
--- a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
+++ b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
@@ -11,14 +11,21 @@ import { describe, expect, it } from 'vitest'
*
* The allowlist only shrinks. Each entry is a deliberate PATH fallback that has to stay.
*/
-// Empty on purpose: the relay's PATH probe was the last entry, and it is gone -- on Windows the
-// relay now resolves rg.exe from PATH itself, and everywhere else an unreachable root is
-// classified rather than probed. Nothing in production spawns a bare `rg`.
+// Empty on purpose: no production file names a bare `rg` AT a spawn site any more.
+//
+// What this guard cannot see, stated plainly so nobody reads the empty list as a stronger promise
+// than it is: on POSIX `pathRipgrepCommand()` still RETURNS the bare name, and
+// `probeRipgrepVersion` spawns it through a parameter. A textual guard cannot follow a value, and
+// that case is safe regardless -- execvp never consults the cwd. The hazard is Windows-only, and
+// the Windows branch of that same function resolves an absolute rg.exe instead.
const ALLOWED_BARE_RIPGREP_SPAWNS: readonly string[] = []
-// A spawn/exec whose command argument is the literal string 'rg' (or "rg").
+// A spawn/exec whose command argument is the literal 'rg', or the constant that holds it. Why the
+// constant too: moving the bare name behind `PATH_RIPGREP_COMMAND` would otherwise hide it from
+// this guard, and `spawn(PATH_RIPGREP_COMMAND, args, { cwd: userRepo })` is exactly the hijack
+// this file exists to catch.
const BARE_SPAWN_PATTERN =
- /\b(?:spawn|spawnSync|exec|execFile|execFileSync|execSync)\w*\(\s*['"]rg['"]/
+ /\b(?:spawn|spawnSync|exec|execFile|execFileSync|execSync)\w*\(\s*(?:['"]rg['"]|PATH_RIPGREP_COMMAND)/
const SCANNED_EXTENSIONS = ['.ts', '.tsx']
const IGNORED_DIRECTORIES = new Set([
diff --git a/src/relay/fs-handler-list-files-ignored.test.ts b/src/relay/fs-handler-list-files-ignored.test.ts
index fa0bd70cb09e..ddcd97360c3b 100644
--- a/src/relay/fs-handler-list-files-ignored.test.ts
+++ b/src/relay/fs-handler-list-files-ignored.test.ts
@@ -17,6 +17,7 @@ import { listFilesWithGit } from './fs-handler-git-fallback'
import { listFilesWithRg } from './fs-handler-list-files'
import { searchWithRg } from './fs-handler-utils'
import { RipgrepUnavailableError } from '../shared/ripgrep-process-availability'
+import { configureRelayBundledRipgrep } from './relay-bundled-ripgrep'
import {
ListFilesScanCoordinator,
LIST_FILES_SUPERSEDED_MESSAGE
@@ -63,6 +64,9 @@ describe('relay quick open ignored file listing', () => {
})
afterEach(async () => {
+ // Why reset: the bundled path is module state, and leaking it changes which binary the next
+ // test's launch-failure classifier probes.
+ configureRelayBundledRipgrep(undefined)
await Promise.all(tempDirs.splice(0).map((dir) => rm(dir, { recursive: true, force: true })))
})
@@ -654,7 +658,12 @@ describe('relay quick open ignored file listing', () => {
listFirst.emit('error', listError)
await vi.waitFor(() => expect(spawnMock).toHaveBeenCalledTimes(2))
- expect(spawnMock.mock.calls[1]).toEqual(['rg', ['--version'], { stdio: 'ignore' }])
+ expect(spawnMock.mock.calls[1]).toEqual([
+ 'rg',
+ ['--version'],
+ // windowsHide: the probe must never flash a console window on Windows.
+ { stdio: 'ignore', windowsHide: true }
+ ])
listProbe.emit('close', 0, null)
await expect(listing).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
@@ -672,6 +681,31 @@ describe('relay quick open ignored file listing', () => {
await expect(search).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
})
+ // Why this is the case that matters: it is the NORMAL remote setup. Orca uploads a bundled rg
+ // precisely because the host has no `rg` of its own, so probing PATH alone would fail and report
+ // a moved workspace as a missing ripgrep -- telling the user to install what Orca already ships.
+ it('names the unreachable root when only the bundled rg exists, not PATH rg', async () => {
+ const missingRoot = await makeTempRoot()
+ await rm(missingRoot, { recursive: true, force: true })
+ const bundled = process.execPath
+ configureRelayBundledRipgrep(bundled)
+ const first = createMockProcess()
+ Object.defineProperty(first, 'pid', { value: undefined })
+ const probe = createMockProcess()
+ Object.defineProperty(probe, 'pid', { value: 1 })
+ let callIndex = 0
+ spawnMock.mockImplementation(() => [first, probe][callIndex++])
+ const listing = listFilesWithRg(missingRoot)
+ first.emit('error', Object.assign(new Error('spawn rg ENOENT'), { code: 'ENOENT' }))
+
+ await vi.waitFor(() => expect(spawnMock).toHaveBeenCalledTimes(2))
+ // The probe must ask about the binary that actually failed, not a PATH rg this host lacks.
+ expect(spawnMock.mock.calls[1]?.[0]).toBe(bundled)
+ probe.emit('close', 0, null)
+
+ await expect(listing).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
+ })
+
it('keeps missing-rg precedence when the root also disappeared', async () => {
const missingRoot = await makeTempRoot()
await rm(missingRoot, { recursive: true, force: true })
diff --git a/src/relay/fs-handler-list-files.ts b/src/relay/fs-handler-list-files.ts
index c75bc726d8da..a29980bce979 100644
--- a/src/relay/fs-handler-list-files.ts
+++ b/src/relay/fs-handler-list-files.ts
@@ -179,7 +179,7 @@ export function listFilesWithRg(
// Why distinguish: RipgrepUnavailableError is what engages the git/readdir chain,
// and that chain cannot help when the root itself is gone.
rejectPass(
- (await classifyRipgrepLaunchFailure(rootPath, pathRipgrepCommand())) ===
+ (await classifyRipgrepLaunchFailure(rootPath, [command, pathRipgrepCommand()])) ===
'cwd-unreachable'
? ripgrepMissingCwdError(rootPath)
: new RipgrepUnavailableError()
diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts
index 9d5a3a9002ce..d2454aa7372c 100644
--- a/src/relay/fs-handler-utils.ts
+++ b/src/relay/fs-handler-utils.ts
@@ -185,7 +185,7 @@ export function searchWithRg(
// ripgrep. The workspace moving would otherwise look like a successful empty scan.
if (settle()) {
reject(
- (await classifyRipgrepLaunchFailure(rootPath, pathRipgrepCommand())) ===
+ (await classifyRipgrepLaunchFailure(rootPath, [command, pathRipgrepCommand()])) ===
'cwd-unreachable'
? ripgrepMissingCwdError(rootPath)
: new RipgrepUnavailableError()
diff --git a/src/relay/relay-bundled-ripgrep.ts b/src/relay/relay-bundled-ripgrep.ts
index a750925b5b55..787176e3f423 100644
--- a/src/relay/relay-bundled-ripgrep.ts
+++ b/src/relay/relay-bundled-ripgrep.ts
@@ -4,7 +4,7 @@
* the answer whenever that binary is absent or cannot launch on this host.
*/
import { existsSync, statSync } from 'node:fs'
-import { delimiter, isAbsolute, join } from 'node:path'
+import { delimiter, join, win32 } from 'node:path'
import {
isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError
@@ -20,12 +20,21 @@ export const PATH_RIPGREP_COMMAND = 'rg'
* bare `rg` there runs a planted `rg.exe` from a cloned repository. POSIX `execvp` never consults
* the cwd, so a bare name stays correct and free there.
*/
+export function isDriveRootedWindowsPath(dir: string): boolean {
+ // Why not path.isAbsolute: on Windows it accepts `\tools` and `/tools`, which are rooted but
+ // carry no drive, so they resolve against whatever drive the process is on. The probe would
+ // then validate `C:\tools\rg.exe` while the spawn, running with the user's repo as cwd,
+ // executes `D:\tools\rg.exe` -- the same cwd-dependence this lookup exists to remove.
+ const { root } = win32.parse(dir)
+ return /^[A-Za-z]:[\\/]/.test(root) || root.startsWith('\\\\')
+}
+
+// Why only rg.exe, though libuv honours %PATHEXT%: `.bat`/`.cmd` shims are not spawnable without
+// `shell: true`, and every ripgrep installer (winget, choco, scoop, cargo) lays down rg.exe.
function resolveWindowsPathRipgrep(): string | null {
for (const entry of (process.env.PATH ?? '').split(delimiter)) {
const dir = entry.replace(/^"|"$/g, '').trim()
- // Why skip relative entries: a relative PATH entry resolves against the cwd, the very thing
- // this lookup exists to avoid.
- if (!dir || !isAbsolute(dir)) {
+ if (!dir || !isDriveRootedWindowsPath(dir)) {
continue
}
const candidate = join(dir, 'rg.exe')
@@ -60,8 +69,12 @@ export function pathRipgrepCommand(): string | null {
if (process.platform !== 'win32') {
return PATH_RIPGREP_COMMAND
}
- // Why cached: PATH does not change under a running relay, and this runs per spawn.
- windowsPathRipgrep ??= resolveWindowsPathRipgrep()
+ // Why the explicit undefined check and not `??=`: a miss resolves to null, which is nullish, so
+ // `??=` would re-walk every PATH entry on each call -- and a miss is the expensive case, since
+ // it stats every directory instead of stopping at the first hit.
+ if (windowsPathRipgrep === undefined) {
+ windowsPathRipgrep = resolveWindowsPathRipgrep()
+ }
return windowsPathRipgrep
}
diff --git a/src/relay/relay-windows-path-ripgrep.test.ts b/src/relay/relay-windows-path-ripgrep.test.ts
index 65b5e84a85e1..a6dee0e14e83 100644
--- a/src/relay/relay-windows-path-ripgrep.test.ts
+++ b/src/relay/relay-windows-path-ripgrep.test.ts
@@ -4,6 +4,7 @@ import { delimiter, join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import {
configureRelayBundledRipgrep,
+ isDriveRootedWindowsPath,
pathRipgrepCommand,
resetRelayRipgrepPathCacheForTests
} from './relay-bundled-ripgrep'
@@ -23,9 +24,24 @@ describe('relay PATH ripgrep resolution', () => {
configureRelayBundledRipgrep(undefined)
})
+ // Why a pure predicate test and not a filesystem one: the walk applies win32 path semantics, and
+ // a temp directory on a POSIX CI host has no drive letter to exercise them with.
+ it('accepts only drive-lettered and UNC roots', () => {
+ expect(isDriveRootedWindowsPath('C:\\tools')).toBe(true)
+ expect(isDriveRootedWindowsPath('d:/tools')).toBe(true)
+ expect(isDriveRootedWindowsPath('\\\\server\\share\\tools')).toBe(true)
+ // Rooted but drive-less: `path.isAbsolute` says true, yet these resolve against whatever drive
+ // the process is on -- the relay's for the probe, the user's repo for the spawn.
+ expect(isDriveRootedWindowsPath('\\tools')).toBe(false)
+ expect(isDriveRootedWindowsPath('/tools')).toBe(false)
+ // Drive-relative, and relative.
+ expect(isDriveRootedWindowsPath('C:tools')).toBe(false)
+ expect(isDriveRootedWindowsPath('tools')).toBe(false)
+ })
+
// Why this matters on Windows only: CreateProcessW searches the spawn cwd -- the user's repo --
// before PATH, so a bare `rg` there runs a planted rg.exe out of a cloned repository.
- it('resolves an absolute rg.exe from PATH on Windows', () => {
+ it.runIf(process.platform === 'win32')('resolves an absolute rg.exe from PATH', () => {
const dir = mkdtempSync(join(tmpdir(), 'relay-rg-'))
try {
writeFileSync(join(dir, 'rg.exe'), '')
@@ -47,6 +63,17 @@ describe('relay PATH ripgrep resolution', () => {
expect(pathRipgrepCommand()).toBeNull()
})
+ // Why drive-rooted and not merely "absolute": path.isAbsolute accepts `\\tools` and `/tools` on
+ // Windows. Those carry no drive, so the probe would validate them against the relay's drive
+ // while the spawn -- running with the user's repo as cwd -- resolves them against the repo's.
+ it('skips rooted PATH entries that carry no drive', () => {
+ setPlatform('win32')
+ process.env.PATH = `\\tools${delimiter}/tools${delimiter}C:tools`
+ resetRelayRipgrepPathCacheForTests()
+
+ expect(pathRipgrepCommand()).toBeNull()
+ })
+
// Why a relative PATH entry is skipped: it resolves against the cwd, the hazard being avoided.
it('ignores relative PATH entries on Windows', () => {
setPlatform('win32')
diff --git a/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt b/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
index d010c2846446..828a01350bbe 100644
--- a/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
+++ b/src/shared/child-process/__fixtures__/windows-console-visibility-allowlist.txt
@@ -62,5 +62,4 @@ relay/workspace-space-scan.ts
shared/fish-binary-requirement.ts
shared/process-table-snapshot-reader.ts
shared/pty-slave-line-discipline-echo.ts
-shared/ripgrep-process-availability.ts
shared/shell-process-readiness.ts
diff --git a/src/shared/child-process/windows-console-visibility.test.ts b/src/shared/child-process/windows-console-visibility.test.ts
index e88fe386c8ce..8331f18892a2 100644
--- a/src/shared/child-process/windows-console-visibility.test.ts
+++ b/src/shared/child-process/windows-console-visibility.test.ts
@@ -34,7 +34,7 @@ const ALLOWLIST: readonly string[] = readAllowlist(
* the allowlist does not bound this: a swap (one file fixed and delisted, one
* new file added with its entry) satisfies both membership assertions.
*/
-const UNHIDDEN_SPAWNER_PIN = 63
+const UNHIDDEN_SPAWNER_PIN = 62
const CHILD_PROCESS_IMPORT =
/from\s+['"](?:node:)?child_process['"]|require\(\s*['"](?:node:)?child_process['"]/
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index ace1c4df4b2c..9e58e6de6b9b 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -81,24 +81,35 @@ function probeRipgrepVersion(command: string): Promise {
return new Promise((resolve) => {
let child: ChildProcess
try {
- child = spawn(command, ['--version'], { stdio: 'ignore' })
+ // windowsHide: a probe must never flash a console window on Windows.
+ child = spawn(command, ['--version'], { stdio: 'ignore', windowsHide: true })
} catch {
resolve(false)
return
}
let settled = false
- const settle = (available: boolean): void => {
+ // Why kill on timeout: a `rg --version` that hangs -- a stalled network mount, or antivirus
+ // holding a just-installed rg.exe -- would otherwise leave a live process and a ref'd handle
+ // behind for the relay's lifetime, once per launch failure.
+ const settle = (available: boolean, kill = false): void => {
if (settled) {
return
}
settled = true
clearTimeout(timeout)
+ child.off('close', onClose)
+ if (kill) {
+ killSpawnedRipgrepProcess(child)
+ }
+ // Why leave one 'error' listener attached: a spawn error can still arrive after this
+ // settles, and an unhandled 'error' on a ChildProcess throws.
child.once('error', ignoreRipgrepSpawnError)
resolve(available)
}
+ const onClose = (code: number | null): void => settle(code === 0)
child.once('error', () => settle(false))
- child.once('close', (code) => settle(code === 0))
- const timeout = setTimeout(() => settle(false), RIPGREP_FAILURE_PROBE_TIMEOUT_MS)
+ child.once('close', onClose)
+ const timeout = setTimeout(() => settle(false, true), RIPGREP_FAILURE_PROBE_TIMEOUT_MS)
timeout.unref?.()
})
}
@@ -108,21 +119,26 @@ function probeRipgrepVersion(command: string): Promise {
* a missing binary. Telling a user to install ripgrep because their workspace moved sends them
* down the wrong path, and resolving an empty result hides the move entirely.
*
- * `pathRipgrepCommand` is the host's PATH ripgrep, already resolved to an absolute path where a
- * bare name would be unsafe, or null when the host has none. A missing ripgrep keeps precedence
- * over an unreachable root, because only that verdict engages the git/readdir fallback chain.
+ * `candidates` are the ripgreps worth asking about, in order -- the command that actually failed
+ * first, then the host's PATH one. Probing only PATH would misclassify the normal remote setup,
+ * where Orca uploaded a bundled binary precisely because the host has no `rg` of its own: the
+ * probe would fail and a moved workspace would be reported as a missing ripgrep. Nulls are
+ * skipped, and a host with no working ripgrep at all keeps 'ripgrep-unavailable', because only
+ * that verdict engages the git/readdir fallback chain.
*/
export async function classifyRipgrepLaunchFailure(
cwd: string,
- pathRipgrepCommand: string | null
+ candidates: readonly (string | null)[]
): Promise<'cwd-unreachable' | 'ripgrep-unavailable'> {
if (await isRipgrepSpawnCwdUsable(cwd)) {
return 'ripgrep-unavailable'
}
- if (pathRipgrepCommand === null) {
- return 'ripgrep-unavailable'
+ for (const command of new Set(candidates.filter((entry) => entry !== null))) {
+ if (await probeRipgrepVersion(command)) {
+ return 'cwd-unreachable'
+ }
}
- return (await probeRipgrepVersion(pathRipgrepCommand)) ? 'cwd-unreachable' : 'ripgrep-unavailable'
+ return 'ripgrep-unavailable'
}
/**
From 11d29feaeb4c9c7995b58af382a7962acaed7533 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 18:48:53 -0700
Subject: [PATCH 16/25] test(mobile): repin the session closure past #22452's
two shared modules
Merging main brought the closure to 4220 against a pin of 4218. The two extra
modules are `src/shared/agent-turn-outcome.ts` and `src/shared/main-agent-status.ts`
from #22452, which the status projection this route already reaches import.
That change was src/shared-only, so the mobile job never ran on it -- the same
way the structured tool line slipped past, as the ledger above already records.
Repinned here because this PR's file set is what next made the job run, not
because this PR reaches either module. Verified: of the 28 source files this
branch changes, none appear anywhere in the route's 4220-module closure.
---
.../mobile-web-app-session-terminal-closure.test.mjs | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
index 8fd2842687ec..077bfa8315ff 100644
--- a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
+++ b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
@@ -432,8 +432,18 @@ const MERMAID_PACKAGE = 'node_modules/mermaid/'
*
* modules 4216 -> 4218 (+2)
* local modules 1030 -> 1032 (+2)
+ *
+ * The main agent's own state then added `src/shared/agent-turn-outcome.ts` and
+ * `src/shared/main-agent-status.ts` (#22452), which the status projection this route already
+ * reaches import. Two modules, measured; src/shared-only again, so its own CI never ran this
+ * suite -- the same way the structured tool line slipped past above. Repinned here because this
+ * PR's file set is what next made the job run, not because this PR reaches either module: none
+ * of its 28 changed source files appear anywhere in this closure.
+ *
+ * modules 4218 -> 4220 (+2)
+ * local modules 1032 -> 1032 (+0, both are shared)
*/
-const SESSION_ROUTE_MODULES = 4218
+const SESSION_ROUTE_MODULES = 4220
/** What the page enters this route through once the route is a switch with a `.web.tsx` sibling. */
const ROUTE_ENTRY = [
From 8d6759a8e759970fda128b57ebbe66c4bf0df472 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 19:57:36 -0700
Subject: [PATCH 17/25] fix(search): preserve remote binaries and complete
runtime packaging
---
config/scripts/build-orcad.mjs | 48 +++++-------
config/scripts/orcad-artifact-version.mjs | 19 +++++
.../scripts/orcad-artifact-version.test.mjs | 30 +++++++
resources/licenses/ripgrep/README.md | 3 +-
src/main/ripgrep/bundled-ripgrep-real.test.ts | 78 +++++++++++++++++++
src/main/ssh/orcad-remote-deploy.test.ts | 50 ++++++++++++
src/main/ssh/orcad-remote-deploy.ts | 13 ++--
src/main/ssh/remote-install-model.test.ts | 35 +++++++++
.../ssh/ssh-relay-ripgrep-install.test.ts | 32 ++++----
src/main/ssh/ssh-relay-ripgrep-install.ts | 11 +--
src/relay/fs-handler-list-files.ts | 23 +++---
src/relay/fs-handler-utils.ts | 10 ++-
src/relay/relay-ripgrep-cwd-env.test.ts | 42 ++++++++++
src/shared/orcad-artifacts.test.ts | 29 +++++++
src/shared/orcad-artifacts.ts | 24 +++++-
src/shared/ripgrep-process-availability.ts | 9 ++-
16 files changed, 374 insertions(+), 82 deletions(-)
create mode 100644 config/scripts/orcad-artifact-version.mjs
create mode 100644 config/scripts/orcad-artifact-version.test.mjs
create mode 100644 src/main/ripgrep/bundled-ripgrep-real.test.ts
create mode 100644 src/relay/relay-ripgrep-cwd-env.test.ts
create mode 100644 src/shared/orcad-artifacts.test.ts
diff --git a/config/scripts/build-orcad.mjs b/config/scripts/build-orcad.mjs
index 89b79cddca71..99a53fa09815 100644
--- a/config/scripts/build-orcad.mjs
+++ b/config/scripts/build-orcad.mjs
@@ -9,14 +9,12 @@
*/
import { fork, spawnSync } from 'node:child_process'
import { build } from 'esbuild'
-import { createHash } from 'node:crypto'
import {
chmodSync,
copyFileSync,
- existsSync,
+ cpSync,
mkdirSync,
mkdtempSync,
- readFileSync,
rmSync,
writeFileSync
} from 'node:fs'
@@ -24,10 +22,10 @@ import { arch, platform, tmpdir } from 'node:os'
import { join } from 'node:path'
import process from 'node:process'
import {
- ORCAD_VERSION,
ORCAD_VERSION_FILENAME,
- orcadArtifactFilenames
+ ORCAD_RIPGREP_ARTIFACTS
} from '../../src/shared/orcad-artifacts.ts'
+import { computeOrcadFullVersion } from './orcad-artifact-version.mjs'
const ROOT = join(import.meta.dirname, '..', '..')
const OUT_DIR = join(ROOT, 'out', 'orcad')
@@ -83,18 +81,23 @@ copyFileSync(AGENT_BROWSER_SOURCE, AGENT_BROWSER_OUTPUT)
if (process.platform !== 'win32') {
chmodSync(AGENT_BROWSER_OUTPUT, 0o755)
}
-// Why: orcad has no Electron resourcesPath; the rg resolver looks under its install root instead.
-const RIPGREP_PLATFORM = `${platform()}-${arch()}`
-const RIPGREP_NAME = process.platform === 'win32' ? 'rg.exe' : 'rg'
-const RIPGREP_OUTPUT_DIR = join(OUT_DIR, 'ripgrep', RIPGREP_PLATFORM)
-mkdirSync(RIPGREP_OUTPUT_DIR, { recursive: true })
-copyFileSync(
- join(ROOT, 'node_modules', '@vscode', 'ripgrep-universal', 'bin', RIPGREP_PLATFORM, RIPGREP_NAME),
- join(RIPGREP_OUTPUT_DIR, RIPGREP_NAME)
-)
-if (process.platform !== 'win32') {
- chmodSync(join(RIPGREP_OUTPUT_DIR, RIPGREP_NAME), 0o755)
+// Why every platform: an SSH deployment can target a different host than the build machine.
+for (const artifact of ORCAD_RIPGREP_ARTIFACTS) {
+ const [, ripgrepPlatform, ripgrepName] = artifact.split('/')
+ const outputDir = join(OUT_DIR, 'ripgrep', ripgrepPlatform)
+ mkdirSync(outputDir, { recursive: true })
+ const outputPath = join(outputDir, ripgrepName)
+ copyFileSync(
+ join(ROOT, 'node_modules', '@vscode', 'ripgrep-universal', 'bin', ripgrepPlatform, ripgrepName),
+ outputPath
+ )
+ if (!ripgrepPlatform.startsWith('win32-')) {
+ chmodSync(outputPath, 0o755)
+ }
}
+cpSync(join(ROOT, 'resources', 'licenses', 'ripgrep'), join(OUT_DIR, 'ripgrep', 'licenses'), {
+ recursive: true
+})
/** Why one call per child and not one `outdir` build: esbuild mirrors each entry's source
* directory under `outdir`, and both children must land flat beside orcad.js — that is where
@@ -258,18 +261,7 @@ if (graphErrors.length > 0) {
// already-`.install-complete` dir is never re-uploaded. The deploy would silently run stale
// bytes while reporting the new version.
if (process.exitCode !== 1) {
- const hash = createHash('sha256')
- for (const filename of orcadArtifactFilenames()) {
- const artifactPath = join(OUT_DIR, filename)
- if (!existsSync(artifactPath)) {
- throw new Error(
- `orcad declares ${filename} in ORCAD_ARTIFACTS but never emitted it. Add the build ` +
- 'step, or drop it from src/shared/orcad-artifacts.ts.'
- )
- }
- hash.update(readFileSync(artifactPath))
- }
- const fullVersion = `${ORCAD_VERSION}+${hash.digest('hex').slice(0, 12)}`
+ const fullVersion = computeOrcadFullVersion(OUT_DIR)
writeFileSync(join(OUT_DIR, ORCAD_VERSION_FILENAME), fullVersion)
console.log(
`[build-orcad] ok — ${fullVersion}, ${(output.bytes / 1024 / 1024).toFixed(2)} MB, ${Object.keys(output.inputs).length} modules, zero electron and node:sqlite imports.`
diff --git a/config/scripts/orcad-artifact-version.mjs b/config/scripts/orcad-artifact-version.mjs
new file mode 100644
index 000000000000..ef85540bbaa5
--- /dev/null
+++ b/config/scripts/orcad-artifact-version.mjs
@@ -0,0 +1,19 @@
+import { createHash } from 'node:crypto'
+import { existsSync, readFileSync } from 'node:fs'
+import { join } from 'node:path'
+import { ORCAD_VERSION, orcadArtifactFilenames } from '../../src/shared/orcad-artifacts.ts'
+
+export function computeOrcadFullVersion(artifactDir) {
+ const hash = createHash('sha256')
+ for (const filename of orcadArtifactFilenames()) {
+ const artifactPath = join(artifactDir, filename)
+ if (!existsSync(artifactPath)) {
+ throw new Error(
+ `orcad declares ${filename} in ORCAD_ARTIFACTS but never emitted it. Add the build ` +
+ 'step, or drop it from src/shared/orcad-artifacts.ts.'
+ )
+ }
+ hash.update(readFileSync(artifactPath))
+ }
+ return `${ORCAD_VERSION}+${hash.digest('hex').slice(0, 12)}`
+}
diff --git a/config/scripts/orcad-artifact-version.test.mjs b/config/scripts/orcad-artifact-version.test.mjs
new file mode 100644
index 000000000000..a6d316b7f41c
--- /dev/null
+++ b/config/scripts/orcad-artifact-version.test.mjs
@@ -0,0 +1,30 @@
+import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { dirname, join } from 'node:path'
+import { describe, expect, it } from 'vitest'
+import {
+ ORCAD_RIPGREP_ARTIFACTS,
+ orcadArtifactFilenames
+} from '../../src/shared/orcad-artifacts.ts'
+import { computeOrcadFullVersion } from './orcad-artifact-version.mjs'
+
+describe('standalone runtime version', () => {
+ it('changes when a shipped search binary changes and rejects a missing binary', () => {
+ const dir = mkdtempSync(join(tmpdir(), 'orcad-version-'))
+ try {
+ for (const filename of orcadArtifactFilenames()) {
+ const path = join(dir, filename)
+ mkdirSync(dirname(path), { recursive: true })
+ writeFileSync(path, filename)
+ }
+ const before = computeOrcadFullVersion(dir)
+ const binary = join(dir, ORCAD_RIPGREP_ARTIFACTS[0])
+ writeFileSync(binary, 'updated binary')
+ expect(computeOrcadFullVersion(dir)).not.toBe(before)
+ rmSync(binary)
+ expect(() => computeOrcadFullVersion(dir)).toThrow(ORCAD_RIPGREP_ARTIFACTS[0])
+ } finally {
+ rmSync(dir, { recursive: true, force: true })
+ }
+ })
+})
diff --git a/resources/licenses/ripgrep/README.md b/resources/licenses/ripgrep/README.md
index 8f061f8c55bb..d0375cac0fc3 100644
--- a/resources/licenses/ripgrep/README.md
+++ b/resources/licenses/ripgrep/README.md
@@ -1,7 +1,8 @@
# Bundled ripgrep notices
Orca ships prebuilt ripgrep (`rg`) binaries from `@vscode/ripgrep-universal` under
-`Resources/ripgrep/`, for local, WSL, and SSH-remote search.
+`Resources/ripgrep/` and in the standalone runtime's `ripgrep/` directory,
+for local, WSL, and SSH-remote search.
- ripgrep: dual-licensed MIT (`LICENSE-MIT`) or Unlicense (`UNLICENSE`).
- PCRE2, statically linked into ripgrep's `--pcre2` support: BSD (`PCRE2-LICENCE.md`).
diff --git a/src/main/ripgrep/bundled-ripgrep-real.test.ts b/src/main/ripgrep/bundled-ripgrep-real.test.ts
new file mode 100644
index 000000000000..b24f5ff55884
--- /dev/null
+++ b/src/main/ripgrep/bundled-ripgrep-real.test.ts
@@ -0,0 +1,78 @@
+import { copyFileSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { dirname, join } from 'node:path'
+import { afterEach, beforeEach, describe, expect, it } from 'vitest'
+import { getAppEnvironment, setAppEnvironment } from '../../shared/app-environment'
+import { bundledRipgrepBinaryName } from '../../shared/bundled-ripgrep'
+import { bundledRipgrepCommand, resetBundledRipgrepPathCacheForTests } from './bundled-ripgrep-path'
+import { spawnBundledRipgrep } from './bundled-ripgrep-spawn'
+
+describe('packaged ripgrep execution', () => {
+ let fixture: string
+ let binary: string
+ let workspace: string
+ const resourcesPath = process.resourcesPath
+
+ beforeEach(() => {
+ resetBundledRipgrepPathCacheForTests()
+ const source = bundledRipgrepCommand()
+ fixture = mkdtempSync(join(tmpdir(), 'orca bundled rg '))
+ const resources = join(fixture, 'resources')
+ const platform = `${process.platform}-${process.arch}`
+ binary = join(resources, 'ripgrep', platform, bundledRipgrepBinaryName(platform))
+ mkdirSync(dirname(binary), { recursive: true })
+ copyFileSync(source, binary)
+ workspace = join(fixture, 'folder workspace')
+ mkdirSync(workspace)
+ writeFileSync(join(workspace, '日本語 file.txt'), 'needle\n')
+ // A checkout executable must never replace a missing packaged binary.
+ writeFileSync(join(workspace, 'rg'), '#!/bin/sh\necho planted\n', { mode: 0o755 })
+ writeFileSync(join(workspace, 'rg.exe'), 'planted')
+ Object.defineProperty(process, 'resourcesPath', { configurable: true, value: resources })
+ setAppEnvironment({
+ ...getAppEnvironment(),
+ isPackaged: () => true,
+ getAppPath: () => fixture
+ })
+ resetBundledRipgrepPathCacheForTests()
+ })
+
+ afterEach(() => {
+ Object.defineProperty(process, 'resourcesPath', { configurable: true, value: resourcesPath })
+ resetBundledRipgrepPathCacheForTests()
+ rmSync(fixture, { recursive: true, force: true })
+ })
+
+ function search(): Promise {
+ return new Promise((resolve, reject) => {
+ const child = spawnBundledRipgrep(['--no-config', '--files-with-matches', 'needle', '.'], {
+ cwd: workspace,
+ env: { ...process.env, PATH: '' },
+ stdio: ['ignore', 'pipe', 'pipe']
+ })
+ let output = ''
+ child.stdout?.setEncoding('utf8').on('data', (chunk: string) => {
+ output += chunk
+ })
+ child.stderr?.resume()
+ child.once('error', reject)
+ child.once('close', (code) => {
+ if (code === 0) {
+ resolve(output)
+ } else {
+ reject(new Error(`ripgrep exited ${code}`))
+ }
+ })
+ })
+ }
+
+ it('searches a folder with no PATH tools and spaces in the install and workspace paths', async () => {
+ expect(await search()).toContain('日本語 file.txt')
+ })
+
+ it('fails when its binary is missing instead of running the workspace executable', async () => {
+ rmSync(binary)
+ resetBundledRipgrepPathCacheForTests()
+ await expect(search()).rejects.toMatchObject({ code: 'ENOENT' })
+ })
+})
diff --git a/src/main/ssh/orcad-remote-deploy.test.ts b/src/main/ssh/orcad-remote-deploy.test.ts
index 6cab2dd00347..1d9f87b009d0 100644
--- a/src/main/ssh/orcad-remote-deploy.test.ts
+++ b/src/main/ssh/orcad-remote-deploy.test.ts
@@ -23,6 +23,7 @@ import { uploadRelayDirectory, writeRelayFile } from './ssh-relay-install-transf
import { deployOrcad, type OrcadDeployOptions } from './orcad-remote-deploy'
import { emptyOrcadActivationRecord, withActivatedVersion } from './orcad-activation-record'
import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { finalizeInstall } from './ssh-relay-versioned-install'
import type { SshConnection } from './ssh-connection'
const mockExec = vi.mocked(execCommand)
@@ -150,6 +151,55 @@ describe('deployOrcad', () => {
expect(vi.mocked(uploadRelayDirectory).mock.calls[0][2]).toContain(`orcad-${NEW_VERSION}`)
})
+ it.each(['linux-arm64', 'darwin-x64'] as const)(
+ 'marks the %s search binary executable before completing the install',
+ async (platform) => {
+ scriptHost({ activationRecord: '', readiness: {}, log: [] })
+ await deployOrcad(
+ options({
+ host: getRemoteHostPlatform(platform),
+ census: { liveSessions: 1, startedSinceActivation: 0 }
+ })
+ )
+ const chmod = mockExec.mock.calls.findIndex(([, command]) =>
+ String(command).startsWith('chmod 755 ')
+ )
+ expect(chmod).toBeGreaterThanOrEqual(0)
+ expect(mockExec.mock.calls[chmod]?.[1]).toContain(`/ripgrep/${platform}/rg'`)
+ expect(vi.mocked(uploadRelayDirectory).mock.invocationCallOrder[0]).toBeLessThan(
+ mockExec.mock.invocationCallOrder[chmod]
+ )
+ expect(mockExec.mock.invocationCallOrder[chmod]).toBeLessThan(
+ vi.mocked(finalizeInstall).mock.invocationCallOrder[0]
+ )
+ }
+ )
+
+ it('does not run chmod on a Windows remote', async () => {
+ scriptHost({ activationRecord: '', readiness: {}, log: [] })
+ await deployOrcad(
+ options({
+ host: getRemoteHostPlatform('win32-x64'),
+ remoteHome: 'C:/Users/u',
+ census: { liveSessions: 1, startedSinceActivation: 0 }
+ })
+ )
+ expect(mockExec.mock.calls.some(([, command]) => String(command).startsWith('chmod '))).toBe(
+ false
+ )
+ })
+
+ it('leaves an upload incomplete when the remote cannot make search executable', async () => {
+ mockExec.mockImplementation(async (_conn, command) => {
+ if (String(command).startsWith('chmod 755 ')) {
+ throw new Error('chmod failed')
+ }
+ return ''
+ })
+ await expect(deployOrcad(options())).rejects.toThrow('chmod failed')
+ expect(vi.mocked(finalizeInstall)).not.toHaveBeenCalled()
+ })
+
it('activates a healthy candidate and records the outgoing version as the rollback target', async () => {
const script: HostScript = {
activationRecord: ACTIVE_OLD,
diff --git a/src/main/ssh/orcad-remote-deploy.ts b/src/main/ssh/orcad-remote-deploy.ts
index c6803d4ef6b4..88a4d923c847 100644
--- a/src/main/ssh/orcad-remote-deploy.ts
+++ b/src/main/ssh/orcad-remote-deploy.ts
@@ -14,6 +14,7 @@
*/
import type { SshConnection } from './ssh-connection'
import { execCommand } from './ssh-relay-deploy-helpers'
+import { shellEscape } from './ssh-connection-utils'
import { ORCAD_INSTALL_MODEL } from './remote-install-model'
import { acquireInstallLock } from './ssh-relay-install-lock'
import { uploadRelayDirectory, writeRelayFile } from './ssh-relay-install-transfers'
@@ -125,15 +126,15 @@ async function installOrcadBundle(
) {
return
}
- // Why this needs ripgrep work before it goes live: `build-orcad.mjs` copies only the BUILD
- // host's rg into `out/orcad/ripgrep//`, and this upload carries that directory
- // verbatim. orcad reports isPackaged() === true, so its rg resolver takes the packaged branch
- // and returns an absolute path under its own install root with no PATH fallback -- on a remote
- // of a different platform that path does not exist and every search fails. Call
- // `ensureRemoteBundledRipgrep` here (as the relay deploy does), or ship all six platforms.
await uploadRelayDirectory(options.conn, options.localOrcadDir, remoteDir, options.host, {
signal: options.signal
})
+ const { host } = options
+ if (host.os !== 'win32') {
+ // SFTP creates uploaded files with 0644 even when the source binary is executable.
+ const binaryPath = joinRemotePath(host, remoteDir, 'ripgrep', host.relayPlatform, 'rg')
+ await exec(options, `chmod 755 ${shellEscape(binaryPath)}`)
+ }
await writeRelayFile(
options.conn,
options.host,
diff --git a/src/main/ssh/remote-install-model.test.ts b/src/main/ssh/remote-install-model.test.ts
index 5a80df8ff4f6..a12b2e8342f6 100644
--- a/src/main/ssh/remote-install-model.test.ts
+++ b/src/main/ssh/remote-install-model.test.ts
@@ -1,4 +1,11 @@
+import { execFileSync } from 'node:child_process'
+import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { dirname, join } from 'node:path'
import { describe, expect, it } from 'vitest'
+import { ORCAD_RIPGREP_ARTIFACTS } from '../../shared/orcad-artifacts'
+import { probeRemoteInstallCompleteCommand } from './ssh-remote-commands'
+import { getRemoteHostPlatform } from './ssh-remote-platform'
import {
inventoryRemoteInstallDirs,
@@ -20,6 +27,34 @@ describe('remote install namespace', () => {
expect(remoteInstallDirName(ORCAD_INSTALL_MODEL, '0.1.0+aa')).toBe('orcad-0.1.0+aa')
})
+ it('requires every shipped search binary in a completed standalone runtime install', () => {
+ const required = ORCAD_INSTALL_MODEL.requiredArtifacts(false)
+ expect(required).toEqual(expect.arrayContaining([...ORCAD_RIPGREP_ARTIFACTS]))
+ expect(ORCAD_INSTALL_MODEL.requiredArtifacts(true)).toEqual(required)
+ })
+
+ it.skipIf(process.platform === 'win32')('rejects an install missing its search binary', () => {
+ const dir = mkdtempSync(join(tmpdir(), 'orcad-remote-probe-'))
+ try {
+ const required = [...ORCAD_INSTALL_MODEL.requiredArtifacts(false), '.install-complete']
+ for (const filename of required) {
+ const path = join(dir, filename)
+ mkdirSync(dirname(path), { recursive: true })
+ writeFileSync(path, '')
+ }
+ const command = probeRemoteInstallCompleteCommand(
+ getRemoteHostPlatform('linux-x64'),
+ dir,
+ required
+ )
+ expect(execFileSync('sh', ['-c', command], { encoding: 'utf8' }).trim()).toBe('OK')
+ rmSync(join(dir, ORCAD_RIPGREP_ARTIFACTS[0]))
+ expect(execFileSync('sh', ['-c', command], { encoding: 'utf8' }).trim()).toBe('MISSING')
+ } finally {
+ rmSync(dir, { recursive: true, force: true })
+ }
+ })
+
it('keeps the relay listing pattern byte-identical to the one it shipped with', () => {
// The literal that was hardcoded in `listRelayBaseDirsCommand` before it was
// parameterized. A drift here changes what an existing host's GC can see.
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
index d143ab01a35c..ddf144cd09f8 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -79,27 +79,14 @@ describe('ensureRemoteBundledRipgrep', () => {
)
})
- // Why this needs a test: nothing else collects this tree -- the relay's version GC only matches
- // `relay-*` -- so without it every rg bump left another ~5 MB on every host, forever.
- it('collects superseded builds while sparing the current one and live stages', async () => {
- execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
-
- await ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me')
-
- const script = execScripts()[0]
- expect(script).toContain("! -name 'c0ffee0123456789-linux-x64'")
- expect(script).toContain("! -name '.upload-*'")
- expect(script).toContain('-mtime +14')
- })
-
- it('collects superseded builds on Windows hosts too', async () => {
+ it('limits Windows cache cleanup to abandoned upload stages', async () => {
execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
await ensureRemoteBundledRipgrep(connection(), WINDOWS, 'C:/Users/me user')
const script = execScripts()[0]
- expect(script).toContain("-ne 'c0ffee0123456789-win32-x64'")
- expect(script).toContain('AddDays(-14)')
+ expect(script.match(/Get-ChildItem/g)).toHaveLength(1)
+ expect(script).toContain("-Filter '.upload-*'")
})
it('skips the upload in one round trip when the binary is already installed', async () => {
@@ -275,6 +262,19 @@ describe.runIf(process.platform !== 'win32').each(SHELLS)(
expect(execFileSync(installed(), { encoding: 'utf-8' })).toContain('ripgrep 15.0.0')
})
+ it('keeps an old binary usable by a relay pinned to an earlier client build', async () => {
+ const previous = join(home, '.orca-remote', 'ripgrep', 'previous-linux-x64', 'rg')
+ mkdirSync(dirname(previous), { recursive: true })
+ writeFileSync(previous, '#!/bin/sh\necho ripgrep previous\n', { mode: 0o755 })
+ execFileSync('touch', ['-t', '200001010000', dirname(previous)])
+ expect(execFileSync(previous, { encoding: 'utf-8' })).toContain('ripgrep previous')
+
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('installed')
+ await expect(ensureRemoteBundledRipgrep(connection(), LINUX, home)).resolves.toBe('present')
+
+ expect(execFileSync(previous, { encoding: 'utf-8' })).toContain('ripgrep previous')
+ })
+
it('sweeps an abandoned stage older than an hour but keeps a live one', async () => {
const cache = join(home, '.orca-remote', 'ripgrep')
mkdirSync(join(cache, '.upload-stale', 'payload'), { recursive: true })
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index e0ed740afa02..27409b601e86 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -47,10 +47,6 @@ export const REMOTE_RIPGREP_CACHE_DIR_NAME = 'ripgrep'
const UPLOAD_STAGE_PREFIX = '.upload-'
// Why an hour: long enough that no live upload of ~5 MB is still writing, short enough to drain crashes.
const STALE_UPLOAD_STAGE_MINUTES = 60
-// Why two weeks and not immediately: a client pinned to an older Orca may still be running against
-// the build it uploaded. The only cost of collecting one too early is that client re-uploading
-// ~5 MB on its next connect; the cost of never collecting is a permanent leak on every host.
-const SUPERSEDED_RIPGREP_DAYS = 14
const PRESENT = 'ORCA-RG-PRESENT'
const STAGED = 'ORCA-RG-STAGED'
const INSTALLED = 'ORCA-RG-INSTALLED'
@@ -196,19 +192,16 @@ export function probeOrStageCommand(
const bin = shellEscape(layout.binaryPath)
const cache = shellEscape(layout.cacheDir)
const sweep = `find ${cache} -mindepth 1 -maxdepth 1 -type d -name '${UPLOAD_STAGE_PREFIX}*' -mmin +${STALE_UPLOAD_STAGE_MINUTES} -exec rm -rf {} + 2>/dev/null`
- // Why here and not in the relay's version GC: that GC only matches `relay-*`, so nothing has
- // ever collected this tree. Every rg bump would otherwise leave another ~5 MB per host forever.
- const collect = `find ${cache} -mindepth 1 -maxdepth 1 -type d ! -name ${shellEscape(layout.entryName)} ! -name '${UPLOAD_STAGE_PREFIX}*' -mtime +${SUPERSEDED_RIPGREP_DAYS} -exec rm -rf {} + 2>/dev/null`
+ // Installed builds may still serve an older client's live relay; age is not disuse.
const stage = makeRelayUploadStageDirectoryCommand(stageNamespace, host, stageDir)
// Why the sweep runs before the branch, not inside the else: once rg is installed every later
// deploy takes the PRESENT path, so a stage orphaned by a dropped connection would never be
// collected. It stays one exec round trip either way.
- return `${sweep}; ${collect}; if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${stage} && echo ${STAGED}; fi`
+ return `${sweep}; if ${posixInstalledTest(bin, bytes)}; then echo ${PRESENT}; else ${stage} && echo ${STAGED}; fi`
}
return powerShellCommand(
[
`Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -Filter '${UPLOAD_STAGE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-${STALE_UPLOAD_STAGE_MINUTES}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
- `Get-ChildItem -LiteralPath ${powerShellLiteral(layout.cacheDir)} -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne ${powerShellLiteral(layout.entryName)} -and -not $_.Name.StartsWith('${UPLOAD_STAGE_PREFIX}') -and $_.LastWriteTime -lt (Get-Date).AddDays(-${SUPERSEDED_RIPGREP_DAYS}) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
`if (${windowsInstalledTest(powerShellLiteral(layout.binaryPath), bytes)}) { '${PRESENT}' } else {`,
`$null = New-Item -ItemType Directory -Force -Path ${powerShellLiteral(joinRemotePath(host, stageDir, 'payload'))} -ErrorAction Stop`,
`'${STAGED}' }`
diff --git a/src/relay/fs-handler-list-files.ts b/src/relay/fs-handler-list-files.ts
index a29980bce979..6257b685e79a 100644
--- a/src/relay/fs-handler-list-files.ts
+++ b/src/relay/fs-handler-list-files.ts
@@ -103,23 +103,19 @@ export function listFilesWithRg(
let processErrorObserved = false
let unavailableExitObserved = false
let launchFailureCheck: Promise | null = null
- // --no-messages: permission-denied noise on the remote (e.g. .ssh,
- // root-owned mounts) would otherwise flood stderr.
- // cwd: rootPath — root-relative exclude globs like `!packages/app/**`
- // are evaluated against rg's working directory, not the absolute
- // search target. Without cwd, nested-worktree exclusions silently
- // stop working.
+ // Suppress permission noise; cwd anchors root-relative exclusion globs.
const command = resolveRelayRipgrepCommand()
// Why not spawn a bare name when this is null: on Windows CreateProcessW searches the
// spawn cwd -- the user's repo -- before PATH. "No rg here" is what the chain handles.
if (command === null) {
throw new RipgrepUnavailableError()
}
+ const env = buildRelayCommandEnv()
let child: ChildProcess
try {
child = spawn(command, ['--no-messages', ...args], {
cwd: rootPath,
- env: buildRelayCommandEnv(),
+ env,
stdio: ['ignore', 'pipe', 'pipe'],
windowsHide: true
})
@@ -179,19 +175,18 @@ export function listFilesWithRg(
// Why distinguish: RipgrepUnavailableError is what engages the git/readdir chain,
// and that chain cannot help when the root itself is gone.
rejectPass(
- (await classifyRipgrepLaunchFailure(rootPath, [command, pathRipgrepCommand()])) ===
- 'cwd-unreachable'
+ (await classifyRipgrepLaunchFailure(
+ rootPath,
+ [command, pathRipgrepCommand()],
+ env
+ )) === 'cwd-unreachable'
? ripgrepMissingCwdError(rootPath)
: new RipgrepUnavailableError()
)
}
)
}
- children.push({
- child,
- isDone: () => passDone,
- reject: rejectPass
- })
+ children.push({ child, isDone: () => passDone, reject: rejectPass })
timer = setTimeout(() => {
// Discard residual buffer on abnormal exit — a truncated byte
diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts
index d2454aa7372c..1bc43923a878 100644
--- a/src/relay/fs-handler-utils.ts
+++ b/src/relay/fs-handler-utils.ts
@@ -126,11 +126,12 @@ export function searchWithRg(
}
// Why a second binding: the closures below capture it, and narrowing does not reach them.
const command: string = resolvedRgCommand
+ const env = buildRelayCommandEnv()
let child: ReturnType
try {
child = spawn(command, rgArgs, {
cwd: rootPath,
- env: buildRelayCommandEnv(),
+ env,
stdio: ['ignore', 'pipe', 'pipe'],
windowsHide: true
})
@@ -185,8 +186,11 @@ export function searchWithRg(
// ripgrep. The workspace moving would otherwise look like a successful empty scan.
if (settle()) {
reject(
- (await classifyRipgrepLaunchFailure(rootPath, [command, pathRipgrepCommand()])) ===
- 'cwd-unreachable'
+ (await classifyRipgrepLaunchFailure(
+ rootPath,
+ [command, pathRipgrepCommand()],
+ env
+ )) === 'cwd-unreachable'
? ripgrepMissingCwdError(rootPath)
: new RipgrepUnavailableError()
)
diff --git a/src/relay/relay-ripgrep-cwd-env.test.ts b/src/relay/relay-ripgrep-cwd-env.test.ts
new file mode 100644
index 000000000000..38734ca63e67
--- /dev/null
+++ b/src/relay/relay-ripgrep-cwd-env.test.ts
@@ -0,0 +1,42 @@
+import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import { listFilesWithRg } from './fs-handler-list-files'
+import { searchWithRg } from './fs-handler-utils'
+import { configureRelayBundledRipgrep } from './relay-bundled-ripgrep'
+
+describe.runIf(process.platform !== 'win32')(
+ 'relay ripgrep launch classification environment',
+ () => {
+ let dir: string
+
+ beforeEach(() => {
+ dir = mkdtempSync(join(tmpdir(), 'relay-rg-cwd-env-'))
+ writeFileSync(join(dir, 'found.txt'), 'needle')
+ const cargo = join(dir, 'cargo')
+ mkdirSync(join(cargo, 'bin'), { recursive: true })
+ writeFileSync(join(cargo, 'bin', 'rg'), '#!/bin/sh\necho found.txt\n', { mode: 0o755 })
+ vi.stubEnv('PATH', join(dir, 'empty-path'))
+ vi.stubEnv('CARGO_HOME', cargo)
+ configureRelayBundledRipgrep(undefined)
+ })
+
+ afterEach(() => {
+ vi.unstubAllEnvs()
+ configureRelayBundledRipgrep(undefined)
+ rmSync(dir, { recursive: true, force: true })
+ })
+
+ it('uses the search PATH to distinguish a moved root from missing ripgrep', async () => {
+ await expect(listFilesWithRg(dir, [], { maxResults: 10 })).resolves.toContain('found.txt')
+ const missing = join(dir, 'moved-root')
+ await expect(listFilesWithRg(missing)).rejects.toThrow(
+ `Search root is not reachable: ${missing}`
+ )
+ await expect(searchWithRg(missing, 'needle', { maxResults: 10 })).rejects.toThrow(
+ `Search root is not reachable: ${missing}`
+ )
+ })
+ }
+)
diff --git a/src/shared/orcad-artifacts.test.ts b/src/shared/orcad-artifacts.test.ts
new file mode 100644
index 000000000000..61d57f385516
--- /dev/null
+++ b/src/shared/orcad-artifacts.test.ts
@@ -0,0 +1,29 @@
+import { readdirSync } from 'node:fs'
+import { join } from 'node:path'
+import { describe, expect, it } from 'vitest'
+import { BUNDLED_RIPGREP_PLATFORMS, bundledRipgrepBinaryName } from './bundled-ripgrep'
+import {
+ ORCAD_RIPGREP_ARTIFACTS,
+ ORCAD_RIPGREP_LICENSE_ARTIFACTS,
+ orcadArtifactFilenames
+} from './orcad-artifacts'
+
+describe('standalone runtime artifacts', () => {
+ it('ships search binaries for every SSH host and includes them in the install identity', () => {
+ const expected = BUNDLED_RIPGREP_PLATFORMS.map(
+ (platform) => `ripgrep/${platform}/${bundledRipgrepBinaryName(platform)}`
+ )
+ expect(ORCAD_RIPGREP_ARTIFACTS).toEqual(expected)
+ expect(orcadArtifactFilenames()).toEqual(expect.arrayContaining(expected))
+ })
+
+ it('ships the binary redistribution notices with every install', () => {
+ const sourceDir = join(__dirname, '../../resources/licenses/ripgrep')
+ expect(ORCAD_RIPGREP_LICENSE_ARTIFACTS.map((path) => path.split('/').at(-1)).sort()).toEqual(
+ readdirSync(sourceDir).sort()
+ )
+ expect(orcadArtifactFilenames()).toEqual(
+ expect.arrayContaining([...ORCAD_RIPGREP_LICENSE_ARTIFACTS])
+ )
+ })
+})
diff --git a/src/shared/orcad-artifacts.ts b/src/shared/orcad-artifacts.ts
index 259b9d17eda2..d5c291a464b2 100644
--- a/src/shared/orcad-artifacts.ts
+++ b/src/shared/orcad-artifacts.ts
@@ -11,6 +11,26 @@
export const ORCAD_VERSION = '0.1.0'
+// Kept here because build-orcad.mjs imports this manifest directly under Node type stripping.
+export const ORCAD_RIPGREP_ARTIFACTS = [
+ 'ripgrep/linux-x64/rg',
+ 'ripgrep/linux-arm64/rg',
+ 'ripgrep/darwin-x64/rg',
+ 'ripgrep/darwin-arm64/rg',
+ 'ripgrep/win32-x64/rg.exe',
+ 'ripgrep/win32-arm64/rg.exe'
+] as const
+
+export const ORCAD_RIPGREP_LICENSE_ARTIFACTS = [
+ 'ripgrep/licenses/JEMALLOC-COPYING',
+ 'ripgrep/licenses/LICENSE-MIT',
+ 'ripgrep/licenses/LLVM-LIBUNWIND-LICENSE.TXT',
+ 'ripgrep/licenses/MUSL-COPYRIGHT',
+ 'ripgrep/licenses/PCRE2-LICENCE.md',
+ 'ripgrep/licenses/README.md',
+ 'ripgrep/licenses/UNLICENSE'
+] as const
+
export type OrcadArtifact = {
filename: string
/**
@@ -26,7 +46,9 @@ export const ORCAD_ARTIFACTS: readonly OrcadArtifact[] = [
// Forked so a native @parcel/watcher fault kills the child, not the server.
{ filename: 'parcel-watcher-process-entry.js' },
// Forked so PTYs outlive the runtime process; its absence makes every restart destructive.
- { filename: 'daemon-entry.js' }
+ { filename: 'daemon-entry.js' },
+ ...ORCAD_RIPGREP_ARTIFACTS.map((filename) => ({ filename })),
+ ...ORCAD_RIPGREP_LICENSE_ARTIFACTS.map((filename) => ({ filename }))
]
/** Written after the artifacts, so it is never an input to its own hash. */
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index 9e58e6de6b9b..6a8ea6e0a2fe 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -77,12 +77,12 @@ export async function isRipgrepSpawnCwdUsable(cwd: string): Promise {
}
}
-function probeRipgrepVersion(command: string): Promise {
+function probeRipgrepVersion(command: string, env: NodeJS.ProcessEnv): Promise {
return new Promise((resolve) => {
let child: ChildProcess
try {
// windowsHide: a probe must never flash a console window on Windows.
- child = spawn(command, ['--version'], { stdio: 'ignore', windowsHide: true })
+ child = spawn(command, ['--version'], { env, stdio: 'ignore', windowsHide: true })
} catch {
resolve(false)
return
@@ -128,13 +128,14 @@ function probeRipgrepVersion(command: string): Promise {
*/
export async function classifyRipgrepLaunchFailure(
cwd: string,
- candidates: readonly (string | null)[]
+ candidates: readonly (string | null)[],
+ env: NodeJS.ProcessEnv
): Promise<'cwd-unreachable' | 'ripgrep-unavailable'> {
if (await isRipgrepSpawnCwdUsable(cwd)) {
return 'ripgrep-unavailable'
}
for (const command of new Set(candidates.filter((entry) => entry !== null))) {
- if (await probeRipgrepVersion(command)) {
+ if (await probeRipgrepVersion(command, env)) {
return 'cwd-unreachable'
}
}
From aa1d9407fbaff2cc938f87fb552939814351acda Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 21:15:37 -0700
Subject: [PATCH 18/25] test(relay): pin the probe's env now that it inherits
the relay's PATH
8d6759a threaded the relay env into probeRipgrepVersion -- correctly, since the
probe decides whether a launch failure was the binary or the root and so has to
resolve the same rg the failed spawn would have. It left the assertion that
pins the probe's spawn arguments behind, which is what CI caught.
Asserting buildRelayCommandEnv() rather than loosening the match to any object:
under process.env the probe could resolve a different rg, or none, which is the
regression the change exists to prevent.
---
src/relay/fs-handler-list-files-ignored.test.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/relay/fs-handler-list-files-ignored.test.ts b/src/relay/fs-handler-list-files-ignored.test.ts
index ddcd97360c3b..a5661fa8bfe6 100644
--- a/src/relay/fs-handler-list-files-ignored.test.ts
+++ b/src/relay/fs-handler-list-files-ignored.test.ts
@@ -17,6 +17,7 @@ import { listFilesWithGit } from './fs-handler-git-fallback'
import { listFilesWithRg } from './fs-handler-list-files'
import { searchWithRg } from './fs-handler-utils'
import { RipgrepUnavailableError } from '../shared/ripgrep-process-availability'
+import { buildRelayCommandEnv } from './relay-command-env'
import { configureRelayBundledRipgrep } from './relay-bundled-ripgrep'
import {
ListFilesScanCoordinator,
@@ -658,11 +659,14 @@ describe('relay quick open ignored file listing', () => {
listFirst.emit('error', listError)
await vi.waitFor(() => expect(spawnMock).toHaveBeenCalledTimes(2))
+ // Why assert the relay env and not just its presence: the probe decides whether a launch
+ // failure was the binary or the root, so it has to resolve the same `rg` the failed spawn
+ // would have. Under process.env it could find a different one, or none.
expect(spawnMock.mock.calls[1]).toEqual([
'rg',
['--version'],
// windowsHide: the probe must never flash a console window on Windows.
- { stdio: 'ignore', windowsHide: true }
+ { env: buildRelayCommandEnv(), stdio: 'ignore', windowsHide: true }
])
listProbe.emit('close', 0, null)
await expect(listing).rejects.toThrow(`Search root is not reachable: ${missingRoot}`)
From e506bf34af4ae3a5da98a12269454c7803dd7764 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 22:12:59 -0700
Subject: [PATCH 19/25] feat(ssh): collect remote ripgrep builds by reference,
not by age
Nothing collected `~/.orca-remote/ripgrep/`: the version GC matches only
`relay-*`, so every change to the shipped bytes left another ~5 MB on every SSH
host, permanently. The age window this replaces was the wrong instrument --
a directory's mtime is when it was written, not when it was last used, so it
cannot tell a superseded build from the one a live relay was launched against.
Deleting the latter is not graceful degradation: without a PATH ripgrep remote
text search rejects outright, and listing drops to the capped walk this PR
exists to remove.
So the question is reference. Each relay directory now records the build it
runs against in `.ripgrep-ref`, written only once that binary is confirmed
present, and the GC collects a build only when no installation names it.
The discipline is ssh-relay-native-deps-cache-gc.ts': anything the pass cannot
account for blocks the whole pass. A relay directory with no readable marker is
an older Orca's, possibly running right now against a binary it never recorded,
so the pass declines rather than guessing. Those directories are removed by the
version GC in time, which is what makes their builds collectable -- hence
running after it, not beside it. Deletion is the same tombstone, recheck under
the rename, then remove, so a deploy that takes a reference mid-pass gets its
tree restored. Windows has no pass yet, matching the native-deps cache's gate.
One test note: the first version of the "unaccountable blocks the pass" test
passed against a deliberately broken guard, because the tombstone recheck
masked its absence. The test now puts a readable recheck behind an unreadable
first scan, which is the only shape that fails when that guard is removed.
Recording the reference lives inside ensureRemoteBundledRipgrep rather than at
the call site: it is the same concern, and it keeps the deploy's ripgrep
surface to one call for the tests that mock it to protect their exec queues.
---
.../ssh-relay-deploy-staged-upload.test.ts | 2 +
.../ssh/ssh-relay-deploy-windows-pipe.test.ts | 2 +
src/main/ssh/ssh-relay-deploy.test.ts | 2 +
src/main/ssh/ssh-relay-deploy.ts | 9 +-
.../ssh/ssh-relay-native-deps-install.test.ts | 2 +
.../ssh/ssh-relay-ripgrep-cache-gc.test.ts | 166 +++++++++++++
src/main/ssh/ssh-relay-ripgrep-cache-gc.ts | 221 ++++++++++++++++++
.../ssh/ssh-relay-ripgrep-install.test.ts | 25 ++
src/main/ssh/ssh-relay-ripgrep-install.ts | 58 ++++-
9 files changed, 485 insertions(+), 2 deletions(-)
create mode 100644 src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
create mode 100644 src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
diff --git a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
index f28855b360e0..bc120a9c4117 100644
--- a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
@@ -50,6 +50,8 @@ vi.mock('./ssh-remote-node-resolution', () => ({
}))
// Why: the post-launch ripgrep install is fire-and-forget and would drain the queued exec mocks.
+// Why: the post-launch ripgrep cache GC is fire-and-forget and would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
diff --git a/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
index 0b62763c501a..eee31d8d8ca2 100644
--- a/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
@@ -62,6 +62,8 @@ vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
}))
// Why: the fire-and-forget ripgrep install would drain the queued exec mocks.
+// Why: the post-launch ripgrep cache GC is fire-and-forget and would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index d7bc91e361ae..dba5fd0fa61f 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -60,6 +60,8 @@ vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
}))
// Why: the fire-and-forget ripgrep install would drain the queued exec mocks.
+// Why: the post-launch ripgrep cache GC is fire-and-forget and would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index 2a331db55f5f..528d0be7ac89 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -25,6 +25,7 @@ import {
import { createRelayInstallMarkerFileName } from './ssh-relay-install-marker'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
import { ensureRemoteBundledRipgrep, remoteRipgrepLayout } from './ssh-relay-ripgrep-install'
+import { gcRemoteRipgrepCache } from './ssh-relay-ripgrep-cache-gc'
import {
readLocalFullVersion,
computeRemoteRelayDir,
@@ -609,8 +610,10 @@ async function deployAndLaunchRelayAttempt(
// different trees (`ripgrep/` is owned by no version GC), and neither delays connect.
// Why deploySignal is safe on a fire-and-forget call: the controller aborts only on the deploy
// timeout, never on success, so this cancels a still-running upload when the deploy gives up.
+ const ripgrepEntry = remoteRipgrepLayout(hostPlatform, remoteHome)?.entryName
void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, {
- signal: deploySignal
+ signal: deploySignal,
+ relayDir: remoteRelayDir
}).catch(() => {})
void execHostCommand(
@@ -656,6 +659,10 @@ async function deployAndLaunchRelayAttempt(
].filter((key): key is string => key !== null)
})
)
+ // Why after the version GC and not beside it: that pass is what removes the relay directories
+ // holding the references, so running second is what lets a superseded build become collectable
+ // in the same connect rather than the next one.
+ .then(() => gcRemoteRipgrepCache(conn, hostPlatform, remoteHome, { pinnedEntry: ripgrepEntry }))
.catch(() => {})
return {
diff --git a/src/main/ssh/ssh-relay-native-deps-install.test.ts b/src/main/ssh/ssh-relay-native-deps-install.test.ts
index 0ac5a0ea7877..4528b8a2fd2f 100644
--- a/src/main/ssh/ssh-relay-native-deps-install.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-install.test.ts
@@ -44,6 +44,8 @@ vi.mock('./ssh-relay-install-marker', async (importOriginal) => ({
}))
// Why: the post-launch ripgrep install would consume this file's queued exec mocks.
+// Why: the post-launch ripgrep cache GC is fire-and-forget and would drain the queued exec mocks.
+vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
new file mode 100644
index 000000000000..12d4a6a39f4f
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
@@ -0,0 +1,166 @@
+import { describe, expect, it, vi } from 'vitest'
+
+const { execCommandMock } = vi.hoisted(() => ({ execCommandMock: vi.fn() }))
+vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execCommandMock }))
+
+import type { SshConnection } from './ssh-connection'
+import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { gcRemoteRipgrepCache, supportsRipgrepCacheGc } from './ssh-relay-ripgrep-cache-gc'
+
+const LINUX = getRemoteHostPlatform('linux-x64')
+const WINDOWS = getRemoteHostPlatform('win32-x64')
+const CURRENT = 'c0ffee0123456789-linux-x64'
+const SUPERSEDED = 'dead000000000000-linux-x64'
+
+// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the GC only issues exec commands; nothing else on the connection is reached.
+const conn = {} as unknown as SshConnection
+
+function scripts(): string[] {
+ return execCommandMock.mock.calls.map(([, command]) => String(command))
+}
+
+// Why exclude `find`: the entry listing carries its own `rm -rf` sweep for stale tombstones, and
+// counting that as a collection would make every assertion here pass for the wrong reason.
+function removedTrees(): string[] {
+ return scripts().filter(
+ (s) => s.includes('rm -rf') && s.includes('.rg-gc-') && !s.includes('find ')
+ )
+}
+
+function reply(entries: readonly string[], refs: readonly string[] | 'unreadable'): void {
+ execCommandMock.mockReset()
+ execCommandMock.mockImplementation((_conn: unknown, command: string) => {
+ const text = String(command)
+ if (text.includes('ENTRY %s')) {
+ return Promise.resolve(
+ `${entries.map((e) => `ENTRY ${e}`).join('\n')}\n__ORCA_RG_CACHE__LIST_OK`
+ )
+ }
+ if (text.includes('REF %s')) {
+ return Promise.resolve(
+ refs === 'unreadable'
+ ? '__ORCA_RG_CACHE__REFS_ERR'
+ : `${refs.map((r) => `REF ${r}`).join('\n')}\n__ORCA_RG_CACHE__REFS_OK`
+ )
+ }
+ if (text.includes('MOVED')) {
+ return Promise.resolve('MOVED')
+ }
+ return Promise.resolve('')
+ })
+}
+
+describe('remote ripgrep cache GC', () => {
+ it('collects a build no relay installation references', async () => {
+ reply([CURRENT, SUPERSEDED], [CURRENT])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toHaveLength(1)
+ expect(removedTrees()[0]).toContain(SUPERSEDED)
+ })
+
+ // Why: the reference is the whole safety argument. A build a live relay was launched against
+ // must survive, however old its directory is.
+ it('keeps a referenced build', async () => {
+ reply([CURRENT, SUPERSEDED], [CURRENT, SUPERSEDED])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toEqual([])
+ })
+
+ // Why the whole pass and not just that directory: a relay deployed by an older Orca records no
+ // reference, so its binary cannot be identified -- and guessing is what breaks a live search.
+ it('collects nothing when any relay directory cannot be accounted for', async () => {
+ reply([CURRENT, SUPERSEDED], 'unreadable')
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toEqual([])
+ })
+
+ // Why a readable RECHECK behind an unreadable first scan: with both unreadable, the restore in
+ // removeUnreferencedEntry hides a missing up-front guard, and the test passes either way. This
+ // shape is the only one that fails if the pass stops treating an unaccountable scan as fatal.
+ it('does not even tombstone when the first reference scan is unreadable', async () => {
+ execCommandMock.mockReset()
+ let refCalls = 0
+ execCommandMock.mockImplementation((_conn: unknown, command: string) => {
+ const text = String(command)
+ if (text.includes('ENTRY %s')) {
+ return Promise.resolve(`ENTRY ${SUPERSEDED}\n__ORCA_RG_CACHE__LIST_OK`)
+ }
+ if (text.includes('REF %s')) {
+ refCalls += 1
+ return Promise.resolve(
+ refCalls === 1 ? '__ORCA_RG_CACHE__REFS_ERR' : '__ORCA_RG_CACHE__REFS_OK'
+ )
+ }
+ if (text.includes('MOVED')) {
+ return Promise.resolve('MOVED')
+ }
+ return Promise.resolve('')
+ })
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', {})
+
+ expect(removedTrees()).toEqual([])
+ expect(scripts().filter((s) => s.includes('MOVED'))).toEqual([])
+ })
+
+ it('keeps the pinned build even when nothing references it yet', async () => {
+ reply([CURRENT], [])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toEqual([])
+ })
+
+ // Why restore rather than proceed: a deploy that read the entry as present can still be writing
+ // its marker, and the recheck is the only place that race becomes visible.
+ it('restores a tombstoned build when the recheck finds a new reference', async () => {
+ execCommandMock.mockReset()
+ let refCalls = 0
+ execCommandMock.mockImplementation((_conn: unknown, command: string) => {
+ const text = String(command)
+ if (text.includes('ENTRY %s')) {
+ return Promise.resolve(`ENTRY ${SUPERSEDED}\n__ORCA_RG_CACHE__LIST_OK`)
+ }
+ if (text.includes('REF %s')) {
+ refCalls += 1
+ return Promise.resolve(
+ refCalls === 1
+ ? '__ORCA_RG_CACHE__REFS_OK'
+ : `REF ${SUPERSEDED}\n__ORCA_RG_CACHE__REFS_OK`
+ )
+ }
+ if (text.includes('MOVED')) {
+ return Promise.resolve('MOVED')
+ }
+ return Promise.resolve('')
+ })
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', {})
+
+ expect(removedTrees()).toEqual([])
+ // Moved out, then moved back.
+ expect(scripts().filter((s) => s.includes('MOVED'))).toHaveLength(2)
+ })
+
+ it('only mints entry names it could have written', async () => {
+ reply([CURRENT, '../../etc', 'not-an-entry'], [CURRENT])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toEqual([])
+ })
+
+ it('has no pass on Windows remotes yet', async () => {
+ execCommandMock.mockReset()
+
+ expect(supportsRipgrepCacheGc(WINDOWS)).toBe(false)
+ await gcRemoteRipgrepCache(conn, WINDOWS, 'C:/Users/me', {})
+ expect(execCommandMock).not.toHaveBeenCalled()
+ })
+})
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
new file mode 100644
index 000000000000..2296df91942b
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
@@ -0,0 +1,221 @@
+/**
+ * Garbage collection for the remote ripgrep cache.
+ *
+ * Nothing else collects this tree: the version GC in `remote-install-gc.ts` only matches
+ * `relay-*`, so every change to the shipped ripgrep bytes used to leave another ~5 MB on every
+ * SSH host, permanently. Age cannot decide it -- a directory's mtime is when it was written, not
+ * when it was last used, so an old entry may still be the binary a live relay was launched with.
+ * Deleting that one is not a graceful degradation: without a PATH ripgrep, remote text search
+ * fails outright and listing falls back to the capped walk this PR exists to remove.
+ *
+ * So the question is reference, not age, and the discipline is `ssh-relay-native-deps-cache-gc.ts`':
+ * **anything this pass cannot account for blocks the whole pass.** A relay directory whose
+ * reference marker is missing or unreadable aborts it, because a relay deployed by an older Orca
+ * holds a binary it never recorded -- and inferring which one is exactly the guess that breaks a
+ * live search. Those directories are removed by the version GC in time, and an entry becomes
+ * collectable once the installations referencing it are gone.
+ *
+ * Deletion is the same three-step move: rename to a tombstone, re-read the references under the
+ * rename, and only then remove.
+ */
+import { shellEscape } from './ssh-connection-utils'
+import type { SshConnection } from './ssh-connection'
+import { execCommand } from './ssh-relay-deploy-helpers'
+import {
+ REMOTE_RIPGREP_CACHE_DIR_NAME,
+ remoteRipgrepRefFileName
+} from './ssh-relay-ripgrep-install'
+import { RELAY_REMOTE_DIR } from './relay-protocol'
+import { moveRemoteTreeCommand, removeRemoteTreeCommand } from './ssh-remote-commands'
+import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform'
+
+const LIST_OK = '__ORCA_RG_CACHE__LIST_OK'
+const REFS_OK = '__ORCA_RG_CACHE__REFS_OK'
+const REFS_ERR = '__ORCA_RG_CACHE__REFS_ERR'
+const TOMBSTONE_PREFIX = '.rg-gc-'
+/** Bounds every listing, the way MAX_RELAY_GC_LISTING_ENTRIES bounds version dirs. */
+const MAX_LISTING_ENTRIES = 64
+/** An entry name is `<16-hex-content-hash>--`; only names this client mints are eligible. */
+const ENTRY_NAME = /^[0-9a-f]{16}-(?:linux|darwin|win32)-(?:x64|arm64)$/
+
+/** Windows remotes have no pass yet, matching the native-deps cache's own POSIX gate. */
+export function supportsRipgrepCacheGc(host: RemoteHostPlatform): boolean {
+ return !isWindowsRemoteHost(host)
+}
+
+function cacheDir(host: RemoteHostPlatform, remoteHome: string): string {
+ return joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR, REMOTE_RIPGREP_CACHE_DIR_NAME)
+}
+
+function exec(conn: SshConnection, host: RemoteHostPlatform, command: string): Promise {
+ return execCommand(conn, command, { wrapCommand: !isWindowsRemoteHost(host) })
+}
+
+function listEntriesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ const dir = shellEscape(cacheDir(host, remoteHome))
+ return [
+ `d=${dir}`,
+ `[ -d "$d" ] || { printf '%s\\n' ${LIST_OK}; exit 0; }`,
+ // A tombstone older than any in-flight pass is drained here, the way the stage sweep drains.
+ `find "$d" -mindepth 1 -maxdepth 1 -type d -name '${TOMBSTONE_PREFIX}*' -mmin +30 -exec rm -rf {} + 2>/dev/null`,
+ 'for e in "$d"/*; do',
+ ' [ -d "$e" ] || continue',
+ ` printf 'ENTRY %s\\n' "$(basename "$e")"`,
+ 'done',
+ `printf '%s\\n' ${LIST_OK}`
+ ].join('\n')
+}
+
+/**
+ * Every relay directory's recorded ripgrep entry.
+ *
+ * A relay directory with no readable marker answers `REFS_ERR`: it may be an older Orca's relay,
+ * running right now against a binary it never recorded.
+ */
+function listReferencesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ const root = shellEscape(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
+ return [
+ `root=${root}`,
+ `[ -d "$root" ] || { printf '%s\\n' ${REFS_OK}; exit 0; }`,
+ 'n=0',
+ 'for d in "$root"/relay-*; do',
+ ' [ -d "$d" ] || continue',
+ ` f="$d"/${remoteRipgrepRefFileName()}`,
+ ` [ -f "$f" ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
+ ' t=$(cat "$f" 2>/dev/null) || t=""',
+ ` [ -n "$t" ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
+ ` printf 'REF %s\\n' "$t"`,
+ ' n=$((n+1))',
+ ` if [ "$n" -ge ${MAX_LISTING_ENTRIES} ]; then printf '%s\\n' ${REFS_ERR}; exit 0; fi`,
+ 'done',
+ `printf '%s\\n' ${REFS_OK}`
+ ].join('\n')
+}
+
+type ReferenceScan = { readable: true; referenced: Set } | { readable: false }
+
+function parseEntries(output: string): string[] {
+ const lines = output.split(/\r?\n/).map((line) => line.trim())
+ if (!lines.includes(LIST_OK)) {
+ return []
+ }
+ const entries: string[] = []
+ for (const line of lines) {
+ if (!line.startsWith('ENTRY ')) {
+ continue
+ }
+ const name = line.slice('ENTRY '.length)
+ // Why re-validate a name the host produced: it is about to be interpolated into `mv` and
+ // `rm -rf`. Only names this client could itself have minted are eligible.
+ if (ENTRY_NAME.test(name) && entries.length < MAX_LISTING_ENTRIES) {
+ entries.push(name)
+ }
+ }
+ return entries
+}
+
+async function scanReferences(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ remoteHome: string
+): Promise {
+ let output: string
+ try {
+ output = await exec(conn, host, listReferencesCommand(host, remoteHome))
+ } catch {
+ return { readable: false }
+ }
+ const lines = output.split(/\r?\n/).map((line) => line.trim())
+ if (lines.includes(REFS_ERR) || !lines.includes(REFS_OK)) {
+ return { readable: false }
+ }
+ const referenced = new Set()
+ for (const line of lines) {
+ if (!line.startsWith('REF ')) {
+ continue
+ }
+ const name = line.slice('REF '.length).trim()
+ // An unrecognised marker is a reference this client cannot attribute, so it blocks the pass
+ // rather than being ignored.
+ if (!ENTRY_NAME.test(name)) {
+ return { readable: false }
+ }
+ referenced.add(name)
+ }
+ return { readable: true, referenced }
+}
+
+/** Collect ripgrep builds that no relay installation references. Never throws. */
+export async function gcRemoteRipgrepCache(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ remoteHome: string,
+ options: { pinnedEntry?: string | undefined } = {}
+): Promise {
+ if (!supportsRipgrepCacheGc(host)) {
+ return
+ }
+ try {
+ const entries = parseEntries(await exec(conn, host, listEntriesCommand(host, remoteHome)))
+ if (entries.length === 0) {
+ return
+ }
+ const scan = await scanReferences(conn, host, remoteHome)
+ if (!scan.readable) {
+ return
+ }
+ const removed: string[] = []
+ for (const entry of entries) {
+ if (scan.referenced.has(entry) || entry === options.pinnedEntry) {
+ continue
+ }
+ if (await removeUnreferencedEntry(conn, host, remoteHome, entry)) {
+ removed.push(entry)
+ }
+ }
+ if (removed.length > 0) {
+ console.log(`[ssh-relay] ripgrep cache GC: removed ${removed.length}: ${removed.join(', ')}`)
+ }
+ } catch {
+ /* Never fails a deploy; the next connect tries again. */
+ }
+}
+
+async function removeUnreferencedEntry(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ remoteHome: string,
+ entry: string
+): Promise {
+ const base = cacheDir(host, remoteHome)
+ const entryDir = joinRemotePath(host, base, entry)
+ const tombstone = joinRemotePath(
+ host,
+ base,
+ `${TOMBSTONE_PREFIX}${entry}.${process.pid}.${Date.now()}`
+ )
+ try {
+ if (
+ (await exec(conn, host, moveRemoteTreeCommand(host, entryDir, tombstone))).trim() !== 'MOVED'
+ ) {
+ return false
+ }
+ } catch {
+ return false
+ }
+ // Why recheck under the rename: a deploy that read this entry as present can still be writing
+ // its marker. Its reference now names a path that no longer exists, so restoring the tree is
+ // the only outcome that leaves that relay with a working ripgrep.
+ const recheck = await scanReferences(conn, host, remoteHome)
+ if (!recheck.readable || recheck.referenced.has(entry)) {
+ await exec(conn, host, moveRemoteTreeCommand(host, tombstone, entryDir)).catch(() => {})
+ return false
+ }
+ try {
+ await exec(conn, host, removeRemoteTreeCommand(host, tombstone))
+ return true
+ } catch {
+ // The sweep in the entry listing drains a tombstone this pass could not remove.
+ return false
+ }
+}
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
index ddf144cd09f8..336e4e7c2d9d 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -103,6 +103,31 @@ describe('ensureRemoteBundledRipgrep', () => {
expect(uploadRelayDirectoryMock).not.toHaveBeenCalled()
})
+ // Why the marker matters: it is the only thing that tells the cache GC this build is in use.
+ // Without it the GC cannot distinguish "nobody uses this" from "nobody recorded it", and the
+ // safe answer to the second is to collect nothing at all.
+ it('records which build the relay directory runs against', async () => {
+ execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
+
+ await ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me', {
+ relayDir: '/home/me/.orca-remote/relay-1.2.3'
+ })
+
+ const ref = execScripts().find((script) => script.includes('.ripgrep-ref'))
+ expect(ref).toContain('c0ffee0123456789-linux-x64')
+ expect(ref).toContain('/home/me/.orca-remote/relay-1.2.3/.ripgrep-ref')
+ })
+
+ it('records nothing when the host has no bundled build to reference', async () => {
+ resolveBundledRipgrepPathMock.mockReturnValue(null)
+
+ await ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me', {
+ relayDir: '/home/me/.orca-remote/relay-1.2.3'
+ })
+
+ expect(execScripts().some((script) => script.includes('.ripgrep-ref'))).toBe(false)
+ })
+
it('uploads into a private stage, then verifies, chmods and renames into place', async () => {
execCommandMock
.mockResolvedValueOnce('ORCA-RG-STAGED\n')
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index 27409b601e86..91305c4fb001 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -42,8 +42,47 @@ import {
type BundledRipgrepPlatform
} from '../../shared/bundled-ripgrep'
-/** Sibling of `relay-`, `orcad-` and `native/`; owned by no version GC. */
+/** Sibling of `relay-`, `orcad-` and `native/`. */
export const REMOTE_RIPGREP_CACHE_DIR_NAME = 'ripgrep'
+
+/**
+ * Marker a relay directory carries naming the ripgrep entry it was launched against.
+ *
+ * Why a recorded reference and not an age heuristic: the cache GC has to tell "no one uses this"
+ * from "no one has touched the directory lately", and only the first is a licence to delete. A
+ * relay directory without this file is an older Orca's, so the GC treats it as unaccountable and
+ * declines to collect anything -- see `ssh-relay-ripgrep-cache-gc.ts`.
+ */
+export function remoteRipgrepRefFileName(): string {
+ return '.ripgrep-ref'
+}
+
+/** Record which ripgrep build a relay directory runs against. Best-effort: never fails a deploy. */
+export async function recordRemoteRipgrepReference(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ relayDir: string,
+ entryName: string
+): Promise {
+ const refPath = joinRemotePath(host, relayDir, remoteRipgrepRefFileName())
+ try {
+ assertSafeRemotePathSegment(entryName, host.pathFlavor)
+ await execCommand(
+ conn,
+ isWindowsRemoteHost(host)
+ ? powerShellCommand(
+ `Set-Content -LiteralPath ${powerShellLiteral(refPath)} -Value ${powerShellLiteral(entryName)} -NoNewline -Encoding ascii`
+ )
+ : `printf %s ${shellEscape(entryName)} > ${shellEscape(refPath)}`,
+ { wrapCommand: !isWindowsRemoteHost(host) }
+ )
+ } catch (error) {
+ console.warn(
+ '[ssh-relay] Could not record the ripgrep reference; its build stays uncollectable:',
+ error instanceof Error ? error.message : String(error)
+ )
+ }
+}
const UPLOAD_STAGE_PREFIX = '.upload-'
// Why an hour: long enough that no live upload of ~5 MB is still writing, short enough to drain crashes.
const STALE_UPLOAD_STAGE_MINUTES = 60
@@ -83,6 +122,23 @@ export function remoteRipgrepLayout(
/** Make sure the host has Orca's ripgrep at `remoteRipgrepLayout().binaryPath`; never throws. */
export async function ensureRemoteBundledRipgrep(
+ conn: SshConnection,
+ host: RemoteHostPlatform,
+ remoteHome: string,
+ options: { signal?: AbortSignal; relayDir?: string } = {}
+): Promise {
+ const outcome = await installOrReport(conn, host, remoteHome, options)
+ // Why here and not at the call site: recording which build a relay runs against is the same
+ // concern as putting it there, and keeping them together leaves the deploy one ripgrep call to
+ // mock rather than three that drain its queued exec responses.
+ const entryName = remoteRipgrepLayout(host, remoteHome)?.entryName
+ if (options.relayDir && entryName && (outcome === 'present' || outcome === 'installed')) {
+ await recordRemoteRipgrepReference(conn, host, options.relayDir, entryName)
+ }
+ return outcome
+}
+
+async function installOrReport(
conn: SshConnection,
host: RemoteHostPlatform,
remoteHome: string,
From 29b65342f45c873a7040790bfdc28b1822849641 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 23 Sep 2026 23:54:51 -0700
Subject: [PATCH 20/25] feat(ssh): collect Windows remotes too, and ship the
Rust crate notices
Three items previously left documented-but-open.
Windows remote accumulation. The cache GC was POSIX-gated, so the leak did not
go away -- it moved to the platform with the larger binary (rg.exe is 5.43 MB on
win32-x64, against 4.77 MB for linux-arm64). The PowerShell dialect now does the
same reference scan: entries and references carry token prefixes, because
PowerShell writes every uncaptured value to stdout and an untokenised listing
would feed Remove-Item whatever a cmdlet happened to emit.
Verified on a real Windows host rather than a mock: the listing emits its
ENTRY/LIST_OK tokens, a relay directory carrying a marker yields REF ,
and a relay directory without one yields REFS_ERR -- the safety path, on the
real interpreter.
Rust crate notices. The crate set was read out of the shipped binary's symbols
and the licence identifiers taken from crates.io rather than assumed. Where a
crate offers the Unlicense, Orca elects it: a public-domain dedication carries
no notice obligation, and that covers eight of them. The four that do not offer
it get their MIT text reproduced. encoding_rs carries a BSD-3-Clause notice for
its WHATWG-derived encoding data that is joined by AND, not OR, so electing MIT
does not discharge it.
Release-only validation, corrected rather than repeated. Linux AppImage/deb/rpm
already runs in CI's package job on every PR, and Windows signing was already
rehearsed on this branch. macOS notarization is the only item a release must
still exercise, and the exposure is narrow: notarization requires signatures on
Mach-O binaries, and of the six bundled builds only the two darwin ones are
Mach-O -- `file` reports ELF for linux and PE32+ for win32 -- so signIgnore
excludes only files the notary never asks about.
orcad-artifacts.test.ts caught the new notice file missing from the standalone
runtime's shipped list, which is exactly the gap that test exists to catch: a
notice committed to the repo but never actually shipped.
---
resources/licenses/ripgrep/README.md | 7 +-
.../licenses/ripgrep/RUST-CRATE-NOTICES.txt | 185 ++++++++++++++++++
.../ssh/ssh-relay-ripgrep-cache-gc.test.ts | 44 ++++-
src/main/ssh/ssh-relay-ripgrep-cache-gc.ts | 39 +++-
src/shared/orcad-artifacts.ts | 1 +
5 files changed, 269 insertions(+), 7 deletions(-)
create mode 100644 resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
diff --git a/resources/licenses/ripgrep/README.md b/resources/licenses/ripgrep/README.md
index d0375cac0fc3..1b0f16d9f122 100644
--- a/resources/licenses/ripgrep/README.md
+++ b/resources/licenses/ripgrep/README.md
@@ -11,5 +11,10 @@ for local, WSL, and SSH-remote search.
- LLVM libunwind, statically linked into the Linux builds by Rust's musl target:
Apache-2.0 WITH LLVM-exception (`LLVM-LIBUNWIND-LICENSE.TXT`).
-The last two apply to the Linux binaries only; `strings` finds their symbols in
+- The Rust crates ripgrep itself links: `RUST-CRATE-NOTICES.txt`. Orca elects the Unlicense
+ wherever a crate offers it (no notice obligation), and reproduces the MIT text for the four that
+ do not. `encoding_rs` additionally carries a non-optional BSD-3-Clause notice for its
+ WHATWG-derived encoding data.
+
+The jemalloc and libunwind notices apply to the Linux binaries only; `strings` finds their symbols in
`linux-x64` and `linux-arm64` and in neither the darwin nor win32 builds.
diff --git a/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt b/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
new file mode 100644
index 000000000000..970e1ed7b3b5
--- /dev/null
+++ b/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
@@ -0,0 +1,185 @@
+Third-party Rust crates statically linked into the bundled ripgrep binaries.
+
+Ripgrep is built as a static executable, so its dependency tree ships inside
+`Resources/ripgrep//rg[.exe]` rather than as separate files. The crates
+below were confirmed present by their symbol and string signatures in the shipped
+binaries; each is listed with the licence Orca elects under its dual offer.
+
+Where a crate offers the Unlicense, Orca elects it: the Unlicense is a public-domain
+dedication with no notice obligation, and its text already ships as `UNLICENSE` for
+ripgrep itself. Those crates are:
+
+ aho-corasick, globset, grep-searcher, ignore, memchr, same-file, termcolor, walkdir
+
+The remainder carry obligations, reproduced in full below.
+
+ bstr MIT (elected over Apache-2.0)
+ regex-automata MIT (elected over Apache-2.0)
+ crossbeam-channel MIT (elected over Apache-2.0)
+ log MIT (elected over Apache-2.0)
+ encoding_rs MIT (elected over Apache-2.0), AND BSD-3-Clause for its
+ WHATWG-derived encoding data, which is not optional
+
+================================================================================
+bstr — MIT
+================================================================================
+The MIT License (MIT)
+
+Copyright (c) 2018-2019 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+regex-automata — MIT
+================================================================================
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+crossbeam-channel — MIT
+================================================================================
+The MIT License (MIT)
+
+Copyright (c) 2019 The Crossbeam Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+log — MIT
+================================================================================
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+encoding_rs — MIT, and BSD-3-Clause for the WHATWG encoding data
+================================================================================
+encoding_rs is copyright Mozilla Foundation.
+
+Licensed under the Apache License, Version 2.0
+ or the MIT
+license ,
+at your option. All files in the project carrying such
+notice may not be copied, modified, or distributed except
+according to those terms.
+
+This crate includes data derived from the data files supplied
+with the WHATWG Encoding Standard, which, when incorporated into
+source code, are licensed under the BSD 3-Clause License
+.
+
+Test code within encoding_rs is dedicated to the Public Domain when so
+designated (see the individual files for PD/CC0-dedicated sections).
+
+--- WHATWG Encoding Standard data (BSD-3-Clause) ---
+
+Copyright © WHATWG (Apple, Google, Mozilla, Microsoft).
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
index 12d4a6a39f4f..6f692424cc24 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
@@ -5,6 +5,7 @@ vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execCommandMock }))
import type { SshConnection } from './ssh-connection'
import { getRemoteHostPlatform } from './ssh-remote-platform'
+import { decodeRemotePowerShellScript } from './ssh-remote-powershell'
import { gcRemoteRipgrepCache, supportsRipgrepCacheGc } from './ssh-relay-ripgrep-cache-gc'
const LINUX = getRemoteHostPlatform('linux-x64')
@@ -156,11 +157,48 @@ describe('remote ripgrep cache GC', () => {
expect(removedTrees()).toEqual([])
})
- it('has no pass on Windows remotes yet', async () => {
+ // Why Windows gets the same coverage and not a gate: leaving one dialect uncollected means the
+ // leak simply moves to Windows remotes, where a `.exe` is the larger of the two builds.
+ it('collects an unreferenced build on Windows remotes too', async () => {
+ const WIN_CURRENT = 'c0ffee0123456789-win32-x64'
+ const WIN_OLD = 'dead000000000000-win32-x64'
execCommandMock.mockReset()
+ execCommandMock.mockImplementation((_conn: unknown, command: string) => {
+ const text = decodeRemotePowerShellScript(String(command)) ?? String(command)
+ if (text.includes("'ENTRY '")) {
+ return Promise.resolve(`ENTRY ${WIN_CURRENT}\nENTRY ${WIN_OLD}\n__ORCA_RG_CACHE__LIST_OK`)
+ }
+ if (text.includes("'REF '")) {
+ return Promise.resolve(`REF ${WIN_CURRENT}\n__ORCA_RG_CACHE__REFS_OK`)
+ }
+ if (text.includes('MOVED')) {
+ return Promise.resolve('MOVED')
+ }
+ return Promise.resolve('')
+ })
+
+ expect(supportsRipgrepCacheGc(WINDOWS)).toBe(true)
+ await gcRemoteRipgrepCache(conn, WINDOWS, 'C:/Users/me', { pinnedEntry: WIN_CURRENT })
+
+ const removals = scripts()
+ .map((s) => decodeRemotePowerShellScript(s) ?? s)
+ .filter(
+ (s) => s.includes('Remove-Item') && s.includes('.rg-gc-') && !s.includes('AddMinutes')
+ )
+ expect(removals).toHaveLength(1)
+ expect(removals[0]).toContain(WIN_OLD)
+ })
+
+ // Why: PowerShell writes every uncaptured value to stdout, so a listing that forgot its token
+ // prefix would mix cmdlet output into the entry list and feed `Remove-Item` a foreign name.
+ it('prefixes every Windows listing line with its token', async () => {
+ execCommandMock.mockReset()
+ execCommandMock.mockResolvedValue('__ORCA_RG_CACHE__LIST_OK')
- expect(supportsRipgrepCacheGc(WINDOWS)).toBe(false)
await gcRemoteRipgrepCache(conn, WINDOWS, 'C:/Users/me', {})
- expect(execCommandMock).not.toHaveBeenCalled()
+
+ const listing = decodeRemotePowerShellScript(scripts()[0]) ?? ''
+ expect(listing).toContain("'ENTRY ' + $_.Name")
+ expect(listing).toContain('__ORCA_RG_CACHE__LIST_OK')
})
})
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
index 2296df91942b..44af5b7aa731 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
@@ -27,6 +27,7 @@ import {
} from './ssh-relay-ripgrep-install'
import { RELAY_REMOTE_DIR } from './relay-protocol'
import { moveRemoteTreeCommand, removeRemoteTreeCommand } from './ssh-remote-commands'
+import { powerShellCommand, powerShellLiteral } from './ssh-remote-powershell'
import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform'
const LIST_OK = '__ORCA_RG_CACHE__LIST_OK'
@@ -36,11 +37,12 @@ const TOMBSTONE_PREFIX = '.rg-gc-'
/** Bounds every listing, the way MAX_RELAY_GC_LISTING_ENTRIES bounds version dirs. */
const MAX_LISTING_ENTRIES = 64
/** An entry name is `<16-hex-content-hash>--`; only names this client mints are eligible. */
+const RIPGREP_REF_FILE_NAME = remoteRipgrepRefFileName()
const ENTRY_NAME = /^[0-9a-f]{16}-(?:linux|darwin|win32)-(?:x64|arm64)$/
-/** Windows remotes have no pass yet, matching the native-deps cache's own POSIX gate. */
-export function supportsRipgrepCacheGc(host: RemoteHostPlatform): boolean {
- return !isWindowsRemoteHost(host)
+/** Both dialects are implemented; the export stays so callers can ask rather than assume. */
+export function supportsRipgrepCacheGc(_host: RemoteHostPlatform): boolean {
+ return true
}
function cacheDir(host: RemoteHostPlatform, remoteHome: string): string {
@@ -52,6 +54,19 @@ function exec(conn: SshConnection, host: RemoteHostPlatform, command: string): P
}
function listEntriesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ if (isWindowsRemoteHost(host)) {
+ const dir = powerShellLiteral(cacheDir(host, remoteHome))
+ return powerShellCommand(
+ [
+ `if (-not (Test-Path -LiteralPath ${dir})) { '${LIST_OK}'; exit 0 }`,
+ `Get-ChildItem -LiteralPath ${dir} -Directory -Filter '${TOMBSTONE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-30) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
+ // Why the ENTRY prefix and not bare names: PowerShell writes every uncaptured value to
+ // stdout, so the token is what separates this listing from anything else a cmdlet emits.
+ `Get-ChildItem -LiteralPath ${dir} -Directory -ErrorAction SilentlyContinue | ForEach-Object { 'ENTRY ' + $_.Name }`,
+ `'${LIST_OK}'`
+ ].join('\n')
+ )
+ }
const dir = shellEscape(cacheDir(host, remoteHome))
return [
`d=${dir}`,
@@ -73,6 +88,24 @@ function listEntriesCommand(host: RemoteHostPlatform, remoteHome: string): strin
* running right now against a binary it never recorded.
*/
function listReferencesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ if (isWindowsRemoteHost(host)) {
+ const root = powerShellLiteral(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
+ return powerShellCommand(
+ [
+ `if (-not (Test-Path -LiteralPath ${root})) { '${REFS_OK}'; exit 0 }`,
+ `$dirs = @(Get-ChildItem -LiteralPath ${root} -Directory -Filter 'relay-*' -ErrorAction SilentlyContinue)`,
+ `if ($dirs.Count -ge ${MAX_LISTING_ENTRIES}) { '${REFS_ERR}'; exit 0 }`,
+ 'foreach ($d in $dirs) {',
+ ` $f = Join-Path $d.FullName '${RIPGREP_REF_FILE_NAME}'`,
+ ` if (-not (Test-Path -LiteralPath $f -PathType Leaf)) { '${REFS_ERR}'; exit 0 }`,
+ ' $t = (Get-Content -LiteralPath $f -Raw -ErrorAction SilentlyContinue)',
+ ` if ([string]::IsNullOrWhiteSpace($t)) { '${REFS_ERR}'; exit 0 }`,
+ " 'REF ' + $t.Trim()",
+ '}',
+ `'${REFS_OK}'`
+ ].join('\n')
+ )
+ }
const root = shellEscape(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
return [
`root=${root}`,
diff --git a/src/shared/orcad-artifacts.ts b/src/shared/orcad-artifacts.ts
index d5c291a464b2..a4385e942f16 100644
--- a/src/shared/orcad-artifacts.ts
+++ b/src/shared/orcad-artifacts.ts
@@ -28,6 +28,7 @@ export const ORCAD_RIPGREP_LICENSE_ARTIFACTS = [
'ripgrep/licenses/MUSL-COPYRIGHT',
'ripgrep/licenses/PCRE2-LICENCE.md',
'ripgrep/licenses/README.md',
+ 'ripgrep/licenses/RUST-CRATE-NOTICES.txt',
'ripgrep/licenses/UNLICENSE'
] as const
From 0d144cfbaf82b709f0d074fd88fcb6839435eb1a Mon Sep 17 00:00:00 2001
From: Neil
Date: Thu, 24 Sep 2026 15:34:13 -0700
Subject: [PATCH 21/25] fix(search): protect relay cache references and handle
failed spawns
---
src/main/ipc/filesystem-list-files.test.ts | 9 +
src/main/ipc/filesystem-list-files.ts | 30 +--
src/main/ipc/filesystem-search-file-paths.ts | 23 ++-
.../ipc/filesystem-search-rg-timeout.test.ts | 18 ++
.../filesystem/filesystem-search-handlers.ts | 31 ++-
src/main/ripgrep/fd-exhausted-spawn.test.ts | 36 ++++
.../ripgrep/synchronous-spawn-failure.test.ts | 78 ++++++++
.../runtime/orca-runtime-files-search.test.ts | 17 ++
...ile-commands-search-local-runtime-files.ts | 31 ++-
.../ssh-relay-deploy-staged-upload.test.ts | 3 +-
.../ssh/ssh-relay-deploy-windows-pipe.test.ts | 3 +-
src/main/ssh/ssh-relay-deploy.test.ts | 17 +-
src/main/ssh/ssh-relay-deploy.ts | 28 ++-
.../ssh/ssh-relay-native-deps-install.test.ts | 3 +-
.../ssh-relay-ripgrep-cache-gc-commands.ts | 113 +++++++++++
.../ssh-relay-ripgrep-cache-gc-real.test.ts | 127 +++++++++++++
.../ssh/ssh-relay-ripgrep-cache-gc.test.ts | 55 +++++-
src/main/ssh/ssh-relay-ripgrep-cache-gc.ts | 176 ++++++------------
.../ssh/ssh-relay-ripgrep-install.test.ts | 17 +-
src/main/ssh/ssh-relay-ripgrep-install.ts | 37 ++--
.../fs-handler-list-files-ignored.test.ts | 8 +
src/relay/fs-handler-list-files.ts | 10 +-
src/relay/fs-handler-utils.ts | 10 +-
src/shared/ripgrep-process-availability.ts | 20 ++
24 files changed, 687 insertions(+), 213 deletions(-)
create mode 100644 src/main/ripgrep/fd-exhausted-spawn.test.ts
create mode 100644 src/main/ripgrep/synchronous-spawn-failure.test.ts
create mode 100644 src/main/ssh/ssh-relay-ripgrep-cache-gc-commands.ts
create mode 100644 src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
diff --git a/src/main/ipc/filesystem-list-files.test.ts b/src/main/ipc/filesystem-list-files.test.ts
index baf9996f8e80..e9a4d406d7f9 100644
--- a/src/main/ipc/filesystem-list-files.test.ts
+++ b/src/main/ipc/filesystem-list-files.test.ts
@@ -63,6 +63,7 @@ function createMockProcess(): ChildProcess {
function createMissingRipgrepProcess(): ChildProcess {
const child = createMockProcess()
Object.defineProperty(child, 'pid', { value: undefined })
+ Object.defineProperties(child, { stdout: { value: undefined }, stderr: { value: undefined } })
void Promise.resolve().then(() => child.emit('close', -2, null))
return child
}
@@ -87,6 +88,14 @@ describe('filesystem-list-files', () => {
)
})
+ it('rejects a synchronous launch failure before cleanup has been initialized', async () => {
+ spawnMock.mockImplementationOnce(() => {
+ throw Object.assign(new Error('spawn EMFILE'), { code: 'EMFILE' })
+ })
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: authorization and workspace lookup are mocked above.
+ await expect(listQuickOpenFiles('/repo', {} as Store)).rejects.toThrow('EMFILE')
+ })
+
// Why close(97) and not a spawn error: this is the WSL wrapper's "cd failed" code. It is above
// rg's own 0/1/2, so a handler that checks it after the unavailable branch reports a broken
// install instead -- a regression this file would otherwise not catch.
diff --git a/src/main/ipc/filesystem-list-files.ts b/src/main/ipc/filesystem-list-files.ts
index 36ca50d129ac..f1e8fb56334e 100644
--- a/src/main/ipc/filesystem-list-files.ts
+++ b/src/main/ipc/filesystem-list-files.ts
@@ -21,6 +21,7 @@ import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ classifySynchronousRipgrepSpawnFailure,
isRipgrepMissingCwdExit,
isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError,
@@ -123,12 +124,19 @@ export async function listQuickOpenFiles(
return maxResults !== undefined && files.size >= maxResults
}
- const child = spawnBundledRipgrep(args, {
- cwd: authorizedRootPath,
- wslDistro: localGitOptions.wslDistro,
- wslDistroForOutput,
- stdio: ['ignore', 'pipe', 'pipe']
- })
+ // A synchronous spawn failure has no child to clean up.
+ let child: ReturnType
+ try {
+ child = spawnBundledRipgrep(args, {
+ cwd: authorizedRootPath,
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
+ stdio: ['ignore', 'pipe', 'pipe']
+ })
+ } catch (error) {
+ void classifySynchronousRipgrepSpawnFailure(error, authorizedRootPath).then(reject, reject)
+ return
+ }
let timer: ReturnType
const handleStdoutData = (chunk: string): void => {
buf += chunk
@@ -226,8 +234,8 @@ export async function listQuickOpenFiles(
clearTimeout(timer)
// Why: child.kill() is advisory. If rg ignores it, detach our
// closures so repeated Quick Open attempts do not retain old scans.
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
+ child.stdout?.off('data', handleStdoutData)
+ child.stderr?.off('data', handleStderrData)
child.off('error', handleError)
child.off('close', handleClose)
signal?.removeEventListener('abort', handleAbort)
@@ -249,9 +257,9 @@ export async function listQuickOpenFiles(
children.push({ child, isDone: () => done, finish })
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
+ child.stdout?.setEncoding('utf-8')
+ child.stdout?.on('data', handleStdoutData)
+ child.stderr?.on('data', handleStderrData)
child.once('error', handleError)
child.once('close', handleClose)
timer = setTimeout(() => {
diff --git a/src/main/ipc/filesystem-search-file-paths.ts b/src/main/ipc/filesystem-search-file-paths.ts
index ff1875863585..4a003aa17c5e 100644
--- a/src/main/ipc/filesystem-search-file-paths.ts
+++ b/src/main/ipc/filesystem-search-file-paths.ts
@@ -13,6 +13,7 @@ import { isQuickOpenQueryTooLarge, QuickOpenPathRanker } from '../../shared/quic
import {
absorbPendingRipgrepSpawnError,
isRipgrepUnavailableExit,
+ classifySynchronousRipgrepSpawnFailure,
isRipgrepMissingCwdExit,
isRipgrepSpawnCwdUsable,
isTransientRipgrepSpawnError,
@@ -123,11 +124,13 @@ function scanRipgrepPaths(args: {
stdio: ['ignore', 'pipe', 'pipe']
})
} catch (error) {
- throw isTransientRipgrepSpawnError(error)
- ? new RipgrepLaunchFailureError(
- `rg failed to start (${(error as NodeJS.ErrnoException).code})`
- )
- : error
+ // Why route through the classifier: a sync throw skips the 'error' handler, and ENOTDIR --
+ // a search root that is a file -- should read the same here as it does there.
+ void classifySynchronousRipgrepSpawnFailure(error, args.authorizedRootPath).then(
+ reject,
+ reject
+ )
+ return
}
let timer: ReturnType
@@ -153,8 +156,8 @@ function scanRipgrepPaths(args: {
}
const cleanup = (): void => {
clearTimeout(timer)
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
+ child.stdout?.off('data', handleStdoutData)
+ child.stderr?.off('data', handleStderrData)
child.off('error', handleError)
child.off('close', handleClose)
args.signal?.removeEventListener('abort', handleAbort)
@@ -246,9 +249,9 @@ function scanRipgrepPaths(args: {
finish(fileListingCancellationError(args.signal))
}
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
+ child.stdout?.setEncoding('utf-8')
+ child.stdout?.on('data', handleStdoutData)
+ child.stderr?.on('data', handleStderrData)
child.once('error', handleError)
child.once('close', handleClose)
args.signal?.addEventListener('abort', handleAbort, { once: true })
diff --git a/src/main/ipc/filesystem-search-rg-timeout.test.ts b/src/main/ipc/filesystem-search-rg-timeout.test.ts
index b0c4b1f2e9bf..9c37bacb20a7 100644
--- a/src/main/ipc/filesystem-search-rg-timeout.test.ts
+++ b/src/main/ipc/filesystem-search-rg-timeout.test.ts
@@ -116,6 +116,23 @@ describe('filesystem rg search timeout', () => {
)
})
+ it('rejects a synchronous launch failure without invoking child cleanup', async () => {
+ wslAwareSpawnMock.mockImplementationOnce(() => {
+ throw Object.assign(new Error('spawn EMFILE'), { code: 'EMFILE' })
+ })
+ // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: all store access is mocked for this handler.
+ registerFilesystemHandlers({} as never)
+ await expect(
+ handlers.get('fs:search')!(
+ { sender: { id: 7 } },
+ {
+ rootPath: '/repo',
+ query: 'needle'
+ }
+ )
+ ).rejects.toThrow('EMFILE')
+ })
+
it('settles and detaches when rg ignores the timeout kill', async () => {
vi.useFakeTimers()
@@ -154,6 +171,7 @@ describe('filesystem rg search timeout', () => {
async (order) => {
const child = createMockProcess()
Object.defineProperty(child, 'pid', { value: undefined })
+ Object.defineProperties(child, { stdout: { value: undefined }, stderr: { value: undefined } })
wslAwareSpawnMock.mockReturnValue(child)
registerFilesystemHandlers({} as never)
diff --git a/src/main/ipc/filesystem/filesystem-search-handlers.ts b/src/main/ipc/filesystem/filesystem-search-handlers.ts
index 311d7e22d0ee..9212200e151f 100644
--- a/src/main/ipc/filesystem/filesystem-search-handlers.ts
+++ b/src/main/ipc/filesystem/filesystem-search-handlers.ts
@@ -12,6 +12,7 @@ import {
} from '../../../shared/text-search'
import {
absorbPendingRipgrepSpawnError,
+ classifySynchronousRipgrepSpawnFailure,
isRipgrepMissingCwdExit,
isRipgrepSpawnCwdUsable,
isRipgrepUnavailableExit,
@@ -63,7 +64,7 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
const searchKey = `${event.sender.id}:${rootPath}`
const wslDistroForOutput = parseWslPath(rootPath)?.distro ?? localGitOptions.wslDistro
- return new Promise((resolvePromise) => {
+ return new Promise((resolvePromise, rejectPromise) => {
const rgArgs = buildRgArgs(args.query, rootPath, args)
// Why: kill the prior rg so it stops parsing thousands of matches on the main thread (the large-repo freeze) after the UI moved on.
const previousChild = activeTextSearches.get(searchKey)
@@ -117,12 +118,22 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
}
}
- const nextChild = spawnBundledRipgrep(rgArgs, {
- cwd: rootPath,
- wslDistro: localGitOptions.wslDistro,
- wslDistroForOutput,
- stdio: ['ignore', 'pipe', 'pipe']
- })
+ // A synchronous spawn failure has no child to clean up.
+ let nextChild: ReturnType
+ try {
+ nextChild = spawnBundledRipgrep(rgArgs, {
+ cwd: rootPath,
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
+ stdio: ['ignore', 'pipe', 'pipe']
+ })
+ } catch (error) {
+ void classifySynchronousRipgrepSpawnFailure(error, rootPath).then(
+ rejectPromise,
+ rejectPromise
+ )
+ return
+ }
child = nextChild
activeTextSearches.set(searchKey, nextChild)
@@ -189,9 +200,9 @@ export function registerFilesystemSearchHandlers(context: FilesystemHandlerConte
resolveOnce()
}
- nextChild.stdout!.setEncoding('utf-8')
- nextChild.stdout!.on('data', handleStdoutData)
- nextChild.stderr!.on('data', handleStderrData)
+ nextChild.stdout?.setEncoding('utf-8')
+ nextChild.stdout?.on('data', handleStdoutData)
+ nextChild.stderr?.on('data', handleStderrData)
nextChild.once('error', handleError)
nextChild.once('close', handleClose)
diff --git a/src/main/ripgrep/fd-exhausted-spawn.test.ts b/src/main/ripgrep/fd-exhausted-spawn.test.ts
new file mode 100644
index 000000000000..7509dc5f1893
--- /dev/null
+++ b/src/main/ripgrep/fd-exhausted-spawn.test.ts
@@ -0,0 +1,36 @@
+import { execFileSync } from 'node:child_process'
+import { describe, expect, it } from 'vitest'
+
+// Exhaust descriptors in a bounded subprocess so the test runner keeps its own handles.
+describe.runIf(process.platform !== 'win32')('descriptor-exhausted ripgrep spawn', () => {
+ it('can attach the error listener when a failed spawn has no stdout', () => {
+ const script = `
+ const { spawn } = require('node:child_process');
+ const { openSync, closeSync } = require('node:fs');
+ const descriptors = [];
+ try { while (true) descriptors.push(openSync('/dev/null', 'r')); } catch {}
+ let result;
+ try {
+ const child = spawn(process.execPath, ['-e', ''], { stdio: ['ignore', 'pipe', 'pipe'] });
+ result = { hasStdout: Boolean(child.stdout), hasPid: Boolean(child.pid) };
+ child.stdout?.setEncoding('utf8');
+ child.stderr?.resume();
+ child.once('error', (error) => console.log(JSON.stringify({ ...result, code: error.code })));
+ } catch (error) {
+ result = { code: error.code };
+ process.nextTick(() => console.log(JSON.stringify(result)));
+ } finally {
+ for (const descriptor of descriptors) closeSync(descriptor);
+ }
+ `
+ const output = execFileSync(
+ '/bin/sh',
+ ['-c', 'ulimit -n 128; exec "$@"', 'sh', process.execPath, '-e', script],
+ {
+ encoding: 'utf8',
+ timeout: 10_000
+ }
+ )
+ expect(JSON.parse(output)).toMatchObject({ code: 'EMFILE' })
+ })
+})
diff --git a/src/main/ripgrep/synchronous-spawn-failure.test.ts b/src/main/ripgrep/synchronous-spawn-failure.test.ts
new file mode 100644
index 000000000000..9f6a20af1cee
--- /dev/null
+++ b/src/main/ripgrep/synchronous-spawn-failure.test.ts
@@ -0,0 +1,78 @@
+import { spawn } from 'node:child_process'
+import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterEach, describe, expect, it } from 'vitest'
+import {
+ classifySynchronousRipgrepSpawnFailure,
+ RipgrepLaunchFailureError,
+ RipgrepUnavailableError
+} from '../../shared/ripgrep-process-availability'
+
+const dirs: string[] = []
+
+afterEach(() => {
+ for (const dir of dirs.splice(0)) {
+ rmSync(dir, { recursive: true, force: true })
+ }
+})
+
+function fileAsSearchRoot(): string {
+ const dir = mkdtempSync(join(tmpdir(), 'rg-sync-'))
+ dirs.push(dir)
+ const path = join(dir, 'not-a-directory')
+ writeFileSync(path, '')
+ return path
+}
+
+describe('synchronous ripgrep spawn failures', () => {
+ // Why a real spawn: the whole reason this path exists is that Node throws inline for errnos
+ // outside its async set. Asserting against a hand-made error would not prove that happens.
+ it.skipIf(process.platform === 'win32')(
+ 'throws inline rather than emitting error when the root is a file',
+ () => {
+ const root = fileAsSearchRoot()
+
+ expect(() => spawn(process.execPath, ['-e', ''], { cwd: root, stdio: 'ignore' })).toThrow(
+ expect.objectContaining({ code: 'ENOTDIR' })
+ )
+ }
+ )
+
+ it.skipIf(process.platform === 'win32')(
+ 'names the unreachable root instead of surfacing a raw spawn errno',
+ async () => {
+ const root = fileAsSearchRoot()
+ let thrown: unknown
+ try {
+ spawn(process.execPath, ['-e', ''], { cwd: root, stdio: 'ignore' })
+ } catch (error) {
+ thrown = error
+ }
+
+ const verdict = await classifySynchronousRipgrepSpawnFailure(thrown, root)
+
+ expect(verdict.message).toBe(`Search root is not reachable: ${root}`)
+ }
+ )
+
+ it('reports fd/process pressure as retryable, not as a broken install', async () => {
+ const verdict = await classifySynchronousRipgrepSpawnFailure(
+ Object.assign(new Error('spawn EMFILE'), { code: 'EMFILE' }),
+ process.cwd()
+ )
+
+ expect(verdict).toBeInstanceOf(RipgrepLaunchFailureError)
+ expect(verdict.message).toContain('EMFILE')
+ })
+
+ // Why: a caller that already reached a verdict has more context than a cwd probe does, and
+ // re-diagnosing it would turn "the binary is broken" into "your workspace moved".
+ it('passes an already-classified error straight through', async () => {
+ const original = new RipgrepUnavailableError()
+
+ expect(await classifySynchronousRipgrepSpawnFailure(original, '/definitely/not/here')).toBe(
+ original
+ )
+ })
+})
diff --git a/src/main/runtime/orca-runtime-files-search.test.ts b/src/main/runtime/orca-runtime-files-search.test.ts
index 047b505f8112..fb6a8d969004 100644
--- a/src/main/runtime/orca-runtime-files-search.test.ts
+++ b/src/main/runtime/orca-runtime-files-search.test.ts
@@ -63,6 +63,22 @@ async function flushRuntimeSearchMicrotasks(): Promise {
describe('RuntimeFileCommands', () => {
useRuntimeFileCommandsLifecycle()
+ it('rejects a synchronous launch failure without invoking child cleanup', async () => {
+ const { commands } = createRuntimeFileCommands({
+ resolveRuntimeFileTarget: vi.fn(async () => ({
+ worktree: { id: 'wt-1', repoId: 'repo-1', path: '/repo' },
+ executionHostId: 'local'
+ }))
+ })
+ resolveAuthorizedPathMock.mockResolvedValue('/repo')
+ wslAwareSpawnMock.mockImplementationOnce(() => {
+ throw Object.assign(new Error('spawn EMFILE'), { code: 'EMFILE' })
+ })
+ await expect(commands.searchRuntimeFiles('id:wt-1', { query: 'needle' })).rejects.toThrow(
+ 'EMFILE'
+ )
+ })
+
it('keeps byte-budgeted legacy listings count-bounded across an SSH hop', async () => {
const listFiles = vi.fn().mockResolvedValue(['src/index.ts'])
getSshFilesystemProviderMock.mockReturnValue({ listFiles })
@@ -131,6 +147,7 @@ describe('RuntimeFileCommands', () => {
const { commands } = createRuntimeFileCommands({ resolveRuntimeFileTarget })
const child = createRuntimeSearchChild()
Object.defineProperty(child, 'pid', { value: undefined })
+ Object.defineProperties(child, { stdout: { value: undefined }, stderr: { value: undefined } })
// Why a root that exists: an ENOENT spawn failure is also what a vanished workspace looks
// like, so this stays about the binary only while the search root is reachable.
resolveAuthorizedPathMock.mockResolvedValue(process.cwd())
diff --git a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
index 88066cd2bceb..8ed435fddc70 100644
--- a/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
+++ b/src/main/runtime/runtime-file-commands-search-local-runtime-files.ts
@@ -17,6 +17,7 @@ import { bundledRipgrepUnavailableError } from '../ripgrep/bundled-ripgrep-path'
import { spawnBundledRipgrep } from '../ripgrep/bundled-ripgrep-spawn'
import {
absorbPendingRipgrepSpawnError,
+ classifySynchronousRipgrepSpawnFailure,
isRipgrepMissingCwdExit,
isRipgrepSpawnCwdUsable,
isRipgrepUnavailableExit,
@@ -47,7 +48,7 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
)
const wslDistroForOutput = parseWslPath(authorizedRootPath)?.distro ?? localGitOptions.wslDistro
- return new Promise((resolvePromise) => {
+ return new Promise((resolvePromise, rejectPromise) => {
const searchKey = `${this.host.getRuntimeId()}:${authorizedRootPath}`
const rgArgs = buildRgArgs(options.query, authorizedRootPath, options)
const previousChild = this.activeRuntimeTextSearches.get(searchKey)
@@ -111,16 +112,26 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
}
}
- const nextChild = spawnBundledRipgrep(rgArgs, {
- cwd: authorizedRootPath,
- wslDistro: localGitOptions.wslDistro,
- wslDistroForOutput,
- stdio: ['ignore', 'pipe', 'pipe']
- })
+ // A synchronous spawn failure has no child to clean up.
+ let nextChild: ReturnType
+ try {
+ nextChild = spawnBundledRipgrep(rgArgs, {
+ cwd: authorizedRootPath,
+ wslDistro: localGitOptions.wslDistro,
+ wslDistroForOutput,
+ stdio: ['ignore', 'pipe', 'pipe']
+ })
+ } catch (error) {
+ void classifySynchronousRipgrepSpawnFailure(error, authorizedRootPath).then(
+ rejectPromise,
+ rejectPromise
+ )
+ return
+ }
child = nextChild
this.activeRuntimeTextSearches.set(searchKey, nextChild)
- nextChild.stdout!.setEncoding('utf-8')
+ nextChild.stdout?.setEncoding('utf-8')
const onStdoutData = (chunk: string): void => {
lines.push(chunk, processLine)
}
@@ -186,8 +197,8 @@ export class RuntimeFileCommandsWithSearchLocalRuntimeFiles extends RuntimeFileC
resolveOnce()
}
- nextChild.stdout!.on('data', onStdoutData)
- nextChild.stderr!.on('data', onStderrData)
+ nextChild.stdout?.on('data', onStdoutData)
+ nextChild.stderr?.on('data', onStderrData)
nextChild.once('error', onError)
nextChild.once('close', onClose)
diff --git a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
index bc120a9c4117..467ddc5f7888 100644
--- a/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-staged-upload.test.ts
@@ -54,7 +54,8 @@ vi.mock('./ssh-remote-node-resolution', () => ({
vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
- ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present'),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(true)
}))
vi.mock('./ssh-relay-versioned-install', () => ({
diff --git a/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
index eee31d8d8ca2..4c9132341175 100644
--- a/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-windows-pipe.test.ts
@@ -66,7 +66,8 @@ vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
- ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present'),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(true)
}))
// Why: the versioned-install modules shell out for install state, locking,
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index dba5fd0fa61f..cbb6c4d77cf1 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -64,7 +64,8 @@ vi.mock('../ripgrep/bundled-ripgrep-path', () => ({
vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
- ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present'),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(true)
}))
// Why: the versioned-install modules shell out for install state, locking,
@@ -100,7 +101,10 @@ import { execCommand, waitForSentinel } from './ssh-relay-deploy-helpers'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
import { isRelayAlreadyInstalled } from './ssh-relay-versioned-install'
import { acquireInstallLock } from './ssh-relay-install-lock'
-import { ensureRemoteBundledRipgrep } from './ssh-relay-ripgrep-install'
+import {
+ ensureRemoteBundledRipgrep,
+ recordRemoteRipgrepReference
+} from './ssh-relay-ripgrep-install'
import * as DeployTiming from './ssh-relay-deploy-timing'
import type { SshConnection } from './ssh-connection'
import type * as SshRemoteNodeResolution from './ssh-remote-node-resolution'
@@ -521,6 +525,15 @@ describe('deployAndLaunchRelay', () => {
expect(launchCommand).not.toContain('.pty-source-credit-policy')
})
+ it('does not launch or upload an unprotected binary when recording its reference fails', async () => {
+ const conn = makeMockConnection()
+ queueFreshLinuxDeploy()
+ vi.mocked(recordRemoteRipgrepReference).mockResolvedValueOnce(false)
+ await deployAndLaunchRelay(conn)
+ expect(detachedLaunchCommand(conn)).not.toContain('--ripgrep-path')
+ expect(ensureRemoteBundledRipgrep).not.toHaveBeenCalled()
+ })
+
it('allows an unlimited SSH disconnect grace window', async () => {
const conn = makeMockConnection()
queueFreshLinuxDeploy()
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index 528d0be7ac89..e33af66ca110 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -24,7 +24,11 @@ import {
} from './ssh-relay-install-namespace'
import { createRelayInstallMarkerFileName } from './ssh-relay-install-marker'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
-import { ensureRemoteBundledRipgrep, remoteRipgrepLayout } from './ssh-relay-ripgrep-install'
+import {
+ ensureRemoteBundledRipgrep,
+ remoteRipgrepLayout,
+ recordRemoteRipgrepReference
+} from './ssh-relay-ripgrep-install'
import { gcRemoteRipgrepCache } from './ssh-relay-ripgrep-cache-gc'
import {
readLocalFullVersion,
@@ -575,6 +579,15 @@ async function deployAndLaunchRelayAttempt(
}
}
+ const ripgrepLayout = remoteRipgrepLayout(hostPlatform, remoteHome)
+ const ripgrepReferenced =
+ ripgrepLayout &&
+ (await recordRemoteRipgrepReference(
+ conn,
+ hostPlatform,
+ remoteRelayDir,
+ ripgrepLayout.entryName
+ ))
let launched: Awaited>
let launchLivenessObserved = false
try {
@@ -589,7 +602,7 @@ async function deployAndLaunchRelayAttempt(
graceTimeSeconds,
relayInstanceId,
deploySignal,
- remoteRipgrepLayout(hostPlatform, remoteHome)?.binaryPath
+ ripgrepReferenced ? ripgrepLayout.binaryPath : undefined
)
launchLivenessObserved = true
} finally {
@@ -610,11 +623,12 @@ async function deployAndLaunchRelayAttempt(
// different trees (`ripgrep/` is owned by no version GC), and neither delays connect.
// Why deploySignal is safe on a fire-and-forget call: the controller aborts only on the deploy
// timeout, never on success, so this cancels a still-running upload when the deploy gives up.
- const ripgrepEntry = remoteRipgrepLayout(hostPlatform, remoteHome)?.entryName
- void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, {
- signal: deploySignal,
- relayDir: remoteRelayDir
- }).catch(() => {})
+ const ripgrepEntry = ripgrepLayout?.entryName
+ if (ripgrepReferenced) {
+ void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, {
+ signal: deploySignal
+ }).catch(() => {})
+ }
void execHostCommand(
conn,
diff --git a/src/main/ssh/ssh-relay-native-deps-install.test.ts b/src/main/ssh/ssh-relay-native-deps-install.test.ts
index 4528b8a2fd2f..f97658f5c753 100644
--- a/src/main/ssh/ssh-relay-native-deps-install.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-install.test.ts
@@ -48,7 +48,8 @@ vi.mock('./ssh-relay-install-marker', async (importOriginal) => ({
vi.mock('./ssh-relay-ripgrep-cache-gc', () => ({ gcRemoteRipgrepCache: vi.fn() }))
vi.mock('./ssh-relay-ripgrep-install', async (importOriginal) => ({
...(await importOriginal()),
- ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present')
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue('present'),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(true)
}))
vi.mock('./ssh-relay-versioned-install', () => ({
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc-commands.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc-commands.ts
new file mode 100644
index 000000000000..509ba9a0ebd9
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc-commands.ts
@@ -0,0 +1,113 @@
+import { shellEscape } from './ssh-connection-utils'
+import {
+ REMOTE_RIPGREP_CACHE_DIR_NAME,
+ REMOTE_RIPGREP_REF_PREFIX
+} from './ssh-relay-ripgrep-install'
+import { RELAY_REMOTE_DIR } from './relay-protocol'
+import { powerShellCommand, powerShellLiteral } from './ssh-remote-powershell'
+import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform'
+
+export const LIST_OK = '__ORCA_RG_CACHE__LIST_OK'
+export const REFS_OK = '__ORCA_RG_CACHE__REFS_OK'
+export const REFS_ERR = '__ORCA_RG_CACHE__REFS_ERR'
+export const TOMBSTONE_PREFIX = '.rg-gc-'
+export const MAX_LISTING_ENTRIES = 64
+
+export function cacheDir(host: RemoteHostPlatform, remoteHome: string): string {
+ return joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR, REMOTE_RIPGREP_CACHE_DIR_NAME)
+}
+
+export function listEntriesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ if (isWindowsRemoteHost(host)) {
+ const dir = powerShellLiteral(cacheDir(host, remoteHome))
+ return powerShellCommand(
+ [
+ "$ErrorActionPreference = 'Stop'",
+ `if (-not (Test-Path -LiteralPath ${dir})) { '${LIST_OK}'; exit 0 }`,
+
+ // Why the ENTRY prefix and not bare names: PowerShell writes every uncaptured value to
+ // stdout, so the token is what separates this listing from anything else a cmdlet emits.
+ `Get-ChildItem -LiteralPath ${dir} -Directory -Force -ErrorAction Stop | ForEach-Object { 'ENTRY ' + $_.Name }`,
+ `'${LIST_OK}'`
+ ].join('\n')
+ )
+ }
+ const dir = shellEscape(cacheDir(host, remoteHome))
+ return [
+ `d=${dir}`,
+ `[ -d "$d" ] || { printf '%s\\n' ${LIST_OK}; exit 0; }`,
+ `for e in "$d"/* "$d"/${TOMBSTONE_PREFIX}*; do`,
+ ' [ -d "$e" ] || continue',
+ ` printf 'ENTRY %s\\n' "$(basename "$e")"`,
+ 'done',
+ `printf '%s\\n' ${LIST_OK}`
+ ].join('\n')
+}
+
+/**
+ * Every relay directory's recorded ripgrep entry.
+ *
+ * A relay directory with no readable marker answers `REFS_ERR`: it may be an older Orca's relay,
+ * running right now against a binary it never recorded.
+ */
+export function listReferencesCommand(host: RemoteHostPlatform, remoteHome: string): string {
+ if (isWindowsRemoteHost(host)) {
+ const root = powerShellLiteral(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
+ return powerShellCommand(
+ [
+ "$ErrorActionPreference = 'Stop'",
+ `if (-not (Test-Path -LiteralPath ${root})) { '${REFS_OK}'; exit 0 }`,
+ `$dirs = @(Get-ChildItem -LiteralPath ${root} -Directory -Force -Filter 'relay-*' -ErrorAction Stop)`,
+ `if ($dirs.Count -ge ${MAX_LISTING_ENTRIES}) { '${REFS_ERR}'; exit 0 }`,
+ 'foreach ($d in $dirs) {',
+ // Why PSIsContainer and not `-File`: the remote-payload invariant test greps for that switch,
+ // because `powershell.exe -File` is execution-policy gated on the host. This is
+ // Get-ChildItem's unrelated filter, but the guard is worth more than the shorter spelling.
+ ` $refs = @(Get-ChildItem -LiteralPath $d.FullName -Force -Filter '${REMOTE_RIPGREP_REF_PREFIX}*' -ErrorAction Stop | Where-Object { -not $_.PSIsContainer })`,
+ `$legacy = Join-Path $d.FullName '.ripgrep-ref'`,
+ `if (Test-Path -LiteralPath $legacy -PathType Leaf) { 'REF ' + (Get-Content -LiteralPath $legacy -Raw -ErrorAction Stop).Trim() } elseif ($refs.Count -eq 0) { '${REFS_ERR}'; exit 0 }`,
+ ` foreach ($r in $refs) { 'REF ' + $r.Name.Substring(${REMOTE_RIPGREP_REF_PREFIX.length}) }`,
+ '}',
+ `'${REFS_OK}'`
+ ].join('\n')
+ )
+ }
+ const root = shellEscape(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
+ return [
+ `root=${root}`,
+ `[ -d "$root" ] || { printf '%s\\n' ${REFS_OK}; exit 0; }`,
+ `[ -r "$root" ] && [ -x "$root" ] && ls -A "$root" >/dev/null 2>&1 || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
+ 'n=0',
+ 'for d in "$root"/relay-*; do',
+ ' [ -d "$d" ] || continue',
+ ` [ -r "$d" ] && [ -x "$d" ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
+ ' found=0',
+ ` if [ -e "$d/.ripgrep-ref" ]; then t=$(cat "$d/.ripgrep-ref") || { printf '%s\\n' ${REFS_ERR}; exit 0; }; printf 'REF %s\\n' "$t"; found=1; fi`,
+ ` for f in "$d"/${REMOTE_RIPGREP_REF_PREFIX}*; do`,
+ ' [ -f "$f" ] || continue',
+ ' found=1',
+ // Why the filename and not the contents: the name is what this client minted, and reading it
+ // costs nothing extra. The entry is re-validated against ENTRY_NAME before any deletion.
+ ` printf 'REF %s\\n' "\${f##*/${REMOTE_RIPGREP_REF_PREFIX}}"`,
+ ' done',
+ ` [ "$found" = 1 ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
+ ' n=$((n+1))',
+ ` if [ "$n" -ge ${MAX_LISTING_ENTRIES} ]; then printf '%s\\n' ${REFS_ERR}; exit 0; fi`,
+ 'done',
+ `printf '%s\\n' ${REFS_OK}`
+ ].join('\n')
+}
+
+// A concurrent installer may already have recreated the original directory.
+export function restoreEntryCommand(
+ host: RemoteHostPlatform,
+ source: string,
+ destination: string
+): string {
+ if (isWindowsRemoteHost(host)) {
+ return powerShellCommand(
+ `if (-not (Test-Path -LiteralPath ${powerShellLiteral(destination)})) { Move-Item -LiteralPath ${powerShellLiteral(source)} -Destination ${powerShellLiteral(destination)} -ErrorAction Stop; 'MOVED' } else { 'BUSY' }`
+ )
+ }
+ return `if [ ! -e ${shellEscape(destination)} ]; then mv ${shellEscape(source)} ${shellEscape(destination)} && echo MOVED; else echo BUSY; fi`
+}
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
new file mode 100644
index 000000000000..314f9fc4d9f8
--- /dev/null
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
@@ -0,0 +1,127 @@
+import { execFileSync } from 'node:child_process'
+import {
+ chmodSync,
+ existsSync,
+ mkdirSync,
+ mkdtempSync,
+ readdirSync,
+ rmSync,
+ writeFileSync
+} from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+
+const { execMock } = vi.hoisted(() => ({ execMock: vi.fn() }))
+vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execMock }))
+import { gcRemoteRipgrepCache } from './ssh-relay-ripgrep-cache-gc'
+import { recordRemoteRipgrepReference } from './ssh-relay-ripgrep-install'
+import { decodeRemotePowerShellScript } from './ssh-remote-powershell'
+import { getRemoteHostPlatform } from './ssh-remote-platform'
+import type { SshConnection } from './ssh-connection'
+
+const platform = process.platform === 'win32' ? 'win32-x64' : 'linux-x64'
+const host = getRemoteHostPlatform(platform)
+const FIRST = `1111111111111111-${platform}`
+const SECOND = `2222222222222222-${platform}`
+// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: only execCommand touches the connection, and it is replaced with a local shell.
+const conn = {} as SshConnection
+
+function runShell(command: string): string {
+ return process.platform === 'win32'
+ ? execFileSync(
+ 'powershell.exe',
+ ['-NoProfile', '-NonInteractive', '-Command', decodeRemotePowerShellScript(command)],
+ { encoding: 'utf8', timeout: 15_000 }
+ )
+ : execFileSync('/bin/sh', ['-c', command], { encoding: 'utf8', timeout: 15_000 })
+}
+
+describe('ripgrep cache shell transactions', () => {
+ let home: string
+ let root: string
+ let cache: string
+ let relay: string
+
+ beforeEach(() => {
+ home = mkdtempSync(join(tmpdir(), 'orca rg gc '))
+ root = join(home, '.orca-remote')
+ cache = join(root, 'ripgrep')
+ relay = join(root, 'relay-0.1.0+abc')
+ mkdirSync(relay, { recursive: true })
+ for (const entry of [FIRST, SECOND]) {
+ mkdirSync(join(cache, entry), { recursive: true })
+ writeFileSync(join(cache, entry, 'rg'), entry)
+ }
+ execMock
+ .mockReset()
+ .mockImplementation(async (_conn: unknown, command: string) => runShell(command))
+ })
+
+ afterEach(() => {
+ chmodSync(root, 0o755)
+ rmSync(home, { recursive: true, force: true })
+ })
+
+ it('keeps both binaries recorded in one relay directory and collects them after that directory goes', async () => {
+ await recordRemoteRipgrepReference(conn, host, relay, FIRST)
+ await recordRemoteRipgrepReference(conn, host, relay, SECOND)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(readdirSync(cache).sort()).toEqual([FIRST, SECOND])
+ rmSync(relay, { recursive: true })
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(readdirSync(cache)).toEqual([])
+ })
+
+ it('preserves a legacy reference beside newer per-entry markers', async () => {
+ writeFileSync(join(relay, '.ripgrep-ref'), FIRST)
+ await recordRemoteRipgrepReference(conn, host, relay, SECOND)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(readdirSync(cache).sort()).toEqual([FIRST, SECOND])
+ })
+
+ it.skipIf(process.platform === 'win32' || process.getuid?.() === 0)(
+ 'preserves binaries when the relay directory listing is unreadable',
+ async () => {
+ await recordRemoteRipgrepReference(conn, host, relay, FIRST)
+ chmodSync(root, 0o111)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(existsSync(join(cache, FIRST, 'rg'))).toBe(true)
+ expect(existsSync(join(cache, SECOND, 'rg'))).toBe(true)
+ }
+ )
+
+ it('keeps abandoned tombstones while their references are unknown, then collects unreferenced ones', async () => {
+ const tombstone = `.rg-gc-${SECOND}.123.${Date.now() - 60 * 60_000}`
+ mkdirSync(join(cache, tombstone))
+ writeFileSync(join(cache, tombstone, 'rg'), SECOND)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(existsSync(join(cache, tombstone, 'rg'))).toBe(true)
+ await recordRemoteRipgrepReference(conn, host, relay, FIRST)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(readdirSync(cache)).toEqual([FIRST])
+ })
+
+ it('does not nest a tombstone inside a directory recreated by a concurrent installer', async () => {
+ await recordRemoteRipgrepReference(conn, host, relay, FIRST)
+ let raced = false
+ execMock.mockImplementation(async (_conn: unknown, command: string) => {
+ const output = runShell(command)
+ const script = process.platform === 'win32' ? decodeRemotePowerShellScript(command) : command
+ if (
+ !raced &&
+ (script.startsWith('mv ') || script.includes('Move-Item')) &&
+ script.includes(SECOND)
+ ) {
+ raced = true
+ await recordRemoteRipgrepReference(conn, host, relay, SECOND)
+ mkdirSync(join(cache, SECOND))
+ writeFileSync(join(cache, SECOND, 'rg'), SECOND)
+ }
+ return output
+ })
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(raced).toBe(true)
+ expect(readdirSync(join(cache, SECOND))).toEqual(['rg'])
+ })
+})
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
index 6f692424cc24..8296d67bbd61 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
@@ -4,9 +4,10 @@ const { execCommandMock } = vi.hoisted(() => ({ execCommandMock: vi.fn() }))
vi.mock('./ssh-relay-deploy-helpers', () => ({ execCommand: execCommandMock }))
import type { SshConnection } from './ssh-connection'
+import { BUNDLED_RIPGREP_PLATFORMS } from '../../shared/bundled-ripgrep'
import { getRemoteHostPlatform } from './ssh-remote-platform'
import { decodeRemotePowerShellScript } from './ssh-remote-powershell'
-import { gcRemoteRipgrepCache, supportsRipgrepCacheGc } from './ssh-relay-ripgrep-cache-gc'
+import { gcRemoteRipgrepCache } from './ssh-relay-ripgrep-cache-gc'
const LINUX = getRemoteHostPlatform('linux-x64')
const WINDOWS = getRemoteHostPlatform('win32-x64')
@@ -71,6 +72,41 @@ describe('remote ripgrep cache GC', () => {
expect(removedTrees()).toEqual([])
})
+ // Why this case exists: the relay directory is named from a hash of the relay bytes, and
+ // ripgrep is not among them, so a release that bumps only the ripgrep package -- the monthly
+ // Dependabot PR -- shares a relay directory with its predecessor while minting a new entry.
+ // With a single marker slot the second client overwrote the first's reference and this pass
+ // then collected the binary the first client's relay was still running against.
+ it('keeps both builds when two clients share one relay directory', async () => {
+ reply([CURRENT, SUPERSEDED], [CURRENT, SUPERSEDED])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', { pinnedEntry: CURRENT })
+
+ expect(removedTrees()).toEqual([])
+ })
+
+ // Why assert the shell and not just the parse: the marker is per entry, so a scan that read a
+ // single fixed filename would silently see only one of the two references above.
+ it('scans every marker in a relay directory, not one fixed name', async () => {
+ execCommandMock.mockReset()
+ execCommandMock.mockResolvedValue('__ORCA_RG_CACHE__LIST_OK')
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', {})
+ execCommandMock.mockReset()
+ execCommandMock.mockImplementation((_c: unknown, command: string) => {
+ const text = String(command)
+ if (text.includes('ENTRY %s')) {
+ return Promise.resolve(`ENTRY ${SUPERSEDED}\n__ORCA_RG_CACHE__LIST_OK`)
+ }
+ return Promise.resolve('__ORCA_RG_CACHE__REFS_OK')
+ })
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', {})
+
+ const refScan = scripts().find((s) => s.includes('REF %s')) ?? ''
+ expect(refScan).toContain('.ripgrep-ref-*')
+ expect(refScan).toContain('${f##*/.ripgrep-ref-}')
+ })
+
// Why the whole pass and not just that directory: a relay deployed by an older Orca records no
// reference, so its binary cannot be identified -- and guessing is what breaks a live search.
it('collects nothing when any relay directory cannot be accounted for', async () => {
@@ -149,6 +185,22 @@ describe('remote ripgrep cache GC', () => {
expect(scripts().filter((s) => s.includes('MOVED'))).toHaveLength(2)
})
+ // Why tie this to the platform list: a platform the entry pattern did not know would make the
+ // reference scan read as unreadable, and the pass then collects nothing at all -- every
+ // superseded build on that host leaks, silently, with no other test failing.
+ it('accepts an entry for every bundled platform', async () => {
+ for (const platform of BUNDLED_RIPGREP_PLATFORMS) {
+ const entry = `c0ffee0123456789-${platform}`
+ reply([entry], [entry])
+
+ await gcRemoteRipgrepCache(conn, LINUX, '/home/me', {})
+
+ // Referenced, so not collected -- but it had to parse as an entry to be considered at all.
+ expect(removedTrees()).toEqual([])
+ expect(scripts().some((s) => s.includes('REF %s'))).toBe(true)
+ }
+ })
+
it('only mints entry names it could have written', async () => {
reply([CURRENT, '../../etc', 'not-an-entry'], [CURRENT])
@@ -177,7 +229,6 @@ describe('remote ripgrep cache GC', () => {
return Promise.resolve('')
})
- expect(supportsRipgrepCacheGc(WINDOWS)).toBe(true)
await gcRemoteRipgrepCache(conn, WINDOWS, 'C:/Users/me', { pinnedEntry: WIN_CURRENT })
const removals = scripts()
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
index 44af5b7aa731..f9bf9f71c766 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
@@ -1,128 +1,45 @@
-/**
- * Garbage collection for the remote ripgrep cache.
- *
- * Nothing else collects this tree: the version GC in `remote-install-gc.ts` only matches
- * `relay-*`, so every change to the shipped ripgrep bytes used to leave another ~5 MB on every
- * SSH host, permanently. Age cannot decide it -- a directory's mtime is when it was written, not
- * when it was last used, so an old entry may still be the binary a live relay was launched with.
- * Deleting that one is not a graceful degradation: without a PATH ripgrep, remote text search
- * fails outright and listing falls back to the capped walk this PR exists to remove.
- *
- * So the question is reference, not age, and the discipline is `ssh-relay-native-deps-cache-gc.ts`':
- * **anything this pass cannot account for blocks the whole pass.** A relay directory whose
- * reference marker is missing or unreadable aborts it, because a relay deployed by an older Orca
- * holds a binary it never recorded -- and inferring which one is exactly the guess that breaks a
- * live search. Those directories are removed by the version GC in time, and an entry becomes
- * collectable once the installations referencing it are gone.
- *
- * Deletion is the same three-step move: rename to a tombstone, re-read the references under the
- * rename, and only then remove.
- */
-import { shellEscape } from './ssh-connection-utils'
+import {
+ LIST_OK,
+ REFS_OK,
+ REFS_ERR,
+ TOMBSTONE_PREFIX,
+ MAX_LISTING_ENTRIES,
+ cacheDir,
+ listEntriesCommand,
+ listReferencesCommand,
+ restoreEntryCommand
+} from './ssh-relay-ripgrep-cache-gc-commands'
+// Relay installation references protect binaries until version GC removes their owners.
+// Unknown references block deletion; tombstones are rechecked before removal.
import type { SshConnection } from './ssh-connection'
import { execCommand } from './ssh-relay-deploy-helpers'
-import {
- REMOTE_RIPGREP_CACHE_DIR_NAME,
- remoteRipgrepRefFileName
-} from './ssh-relay-ripgrep-install'
-import { RELAY_REMOTE_DIR } from './relay-protocol'
+import { BUNDLED_RIPGREP_PLATFORMS } from '../../shared/bundled-ripgrep'
import { moveRemoteTreeCommand, removeRemoteTreeCommand } from './ssh-remote-commands'
-import { powerShellCommand, powerShellLiteral } from './ssh-remote-powershell'
import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform'
-const LIST_OK = '__ORCA_RG_CACHE__LIST_OK'
-const REFS_OK = '__ORCA_RG_CACHE__REFS_OK'
-const REFS_ERR = '__ORCA_RG_CACHE__REFS_ERR'
-const TOMBSTONE_PREFIX = '.rg-gc-'
-/** Bounds every listing, the way MAX_RELAY_GC_LISTING_ENTRIES bounds version dirs. */
-const MAX_LISTING_ENTRIES = 64
-/** An entry name is `<16-hex-content-hash>--`; only names this client mints are eligible. */
-const RIPGREP_REF_FILE_NAME = remoteRipgrepRefFileName()
-const ENTRY_NAME = /^[0-9a-f]{16}-(?:linux|darwin|win32)-(?:x64|arm64)$/
-
-/** Both dialects are implemented; the export stays so callers can ask rather than assume. */
-export function supportsRipgrepCacheGc(_host: RemoteHostPlatform): boolean {
- return true
-}
-
-function cacheDir(host: RemoteHostPlatform, remoteHome: string): string {
- return joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR, REMOTE_RIPGREP_CACHE_DIR_NAME)
+function entryNamePattern(): RegExp {
+ const platforms = BUNDLED_RIPGREP_PLATFORMS.map((platform) =>
+ platform.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
+ ).join('|')
+ return new RegExp(`^[0-9a-f]{16}-(?:${platforms})$`)
}
-function exec(conn: SshConnection, host: RemoteHostPlatform, command: string): Promise {
- return execCommand(conn, command, { wrapCommand: !isWindowsRemoteHost(host) })
-}
+const ENTRY_NAME = entryNamePattern()
-function listEntriesCommand(host: RemoteHostPlatform, remoteHome: string): string {
- if (isWindowsRemoteHost(host)) {
- const dir = powerShellLiteral(cacheDir(host, remoteHome))
- return powerShellCommand(
- [
- `if (-not (Test-Path -LiteralPath ${dir})) { '${LIST_OK}'; exit 0 }`,
- `Get-ChildItem -LiteralPath ${dir} -Directory -Filter '${TOMBSTONE_PREFIX}*' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddMinutes(-30) } | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue`,
- // Why the ENTRY prefix and not bare names: PowerShell writes every uncaptured value to
- // stdout, so the token is what separates this listing from anything else a cmdlet emits.
- `Get-ChildItem -LiteralPath ${dir} -Directory -ErrorAction SilentlyContinue | ForEach-Object { 'ENTRY ' + $_.Name }`,
- `'${LIST_OK}'`
- ].join('\n')
- )
+// Recover abandoned deletions only after the owning pass has had time to finish.
+function staleTombstoneEntry(name: string): string | null {
+ if (!name.startsWith(TOMBSTONE_PREFIX)) {
+ return null
}
- const dir = shellEscape(cacheDir(host, remoteHome))
- return [
- `d=${dir}`,
- `[ -d "$d" ] || { printf '%s\\n' ${LIST_OK}; exit 0; }`,
- // A tombstone older than any in-flight pass is drained here, the way the stage sweep drains.
- `find "$d" -mindepth 1 -maxdepth 1 -type d -name '${TOMBSTONE_PREFIX}*' -mmin +30 -exec rm -rf {} + 2>/dev/null`,
- 'for e in "$d"/*; do',
- ' [ -d "$e" ] || continue',
- ` printf 'ENTRY %s\\n' "$(basename "$e")"`,
- 'done',
- `printf '%s\\n' ${LIST_OK}`
- ].join('\n')
+ const match = /^(.*)\.(\d+)\.(\d+)$/.exec(name.slice(TOMBSTONE_PREFIX.length))
+ if (!match || !ENTRY_NAME.test(match[1]) || Date.now() - Number(match[3]) < 30 * 60_000) {
+ return null
+ }
+ return match[1]
}
-/**
- * Every relay directory's recorded ripgrep entry.
- *
- * A relay directory with no readable marker answers `REFS_ERR`: it may be an older Orca's relay,
- * running right now against a binary it never recorded.
- */
-function listReferencesCommand(host: RemoteHostPlatform, remoteHome: string): string {
- if (isWindowsRemoteHost(host)) {
- const root = powerShellLiteral(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
- return powerShellCommand(
- [
- `if (-not (Test-Path -LiteralPath ${root})) { '${REFS_OK}'; exit 0 }`,
- `$dirs = @(Get-ChildItem -LiteralPath ${root} -Directory -Filter 'relay-*' -ErrorAction SilentlyContinue)`,
- `if ($dirs.Count -ge ${MAX_LISTING_ENTRIES}) { '${REFS_ERR}'; exit 0 }`,
- 'foreach ($d in $dirs) {',
- ` $f = Join-Path $d.FullName '${RIPGREP_REF_FILE_NAME}'`,
- ` if (-not (Test-Path -LiteralPath $f -PathType Leaf)) { '${REFS_ERR}'; exit 0 }`,
- ' $t = (Get-Content -LiteralPath $f -Raw -ErrorAction SilentlyContinue)',
- ` if ([string]::IsNullOrWhiteSpace($t)) { '${REFS_ERR}'; exit 0 }`,
- " 'REF ' + $t.Trim()",
- '}',
- `'${REFS_OK}'`
- ].join('\n')
- )
- }
- const root = shellEscape(joinRemotePath(host, remoteHome, RELAY_REMOTE_DIR))
- return [
- `root=${root}`,
- `[ -d "$root" ] || { printf '%s\\n' ${REFS_OK}; exit 0; }`,
- 'n=0',
- 'for d in "$root"/relay-*; do',
- ' [ -d "$d" ] || continue',
- ` f="$d"/${remoteRipgrepRefFileName()}`,
- ` [ -f "$f" ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
- ' t=$(cat "$f" 2>/dev/null) || t=""',
- ` [ -n "$t" ] || { printf '%s\\n' ${REFS_ERR}; exit 0; }`,
- ` printf 'REF %s\\n' "$t"`,
- ' n=$((n+1))',
- ` if [ "$n" -ge ${MAX_LISTING_ENTRIES} ]; then printf '%s\\n' ${REFS_ERR}; exit 0; fi`,
- 'done',
- `printf '%s\\n' ${REFS_OK}`
- ].join('\n')
+function exec(conn: SshConnection, host: RemoteHostPlatform, command: string): Promise {
+ return execCommand(conn, command, { wrapCommand: !isWindowsRemoteHost(host) })
}
type ReferenceScan = { readable: true; referenced: Set } | { readable: false }
@@ -140,7 +57,10 @@ function parseEntries(output: string): string[] {
const name = line.slice('ENTRY '.length)
// Why re-validate a name the host produced: it is about to be interpolated into `mv` and
// `rm -rf`. Only names this client could itself have minted are eligible.
- if (ENTRY_NAME.test(name) && entries.length < MAX_LISTING_ENTRIES) {
+ if (
+ (ENTRY_NAME.test(name) || staleTombstoneEntry(name)) &&
+ entries.length < MAX_LISTING_ENTRIES
+ ) {
entries.push(name)
}
}
@@ -185,9 +105,6 @@ export async function gcRemoteRipgrepCache(
remoteHome: string,
options: { pinnedEntry?: string | undefined } = {}
): Promise {
- if (!supportsRipgrepCacheGc(host)) {
- return
- }
try {
const entries = parseEntries(await exec(conn, host, listEntriesCommand(host, remoteHome)))
if (entries.length === 0) {
@@ -198,11 +115,20 @@ export async function gcRemoteRipgrepCache(
return
}
const removed: string[] = []
- for (const entry of entries) {
+ for (const name of entries) {
+ const entry = staleTombstoneEntry(name) ?? name
if (scan.referenced.has(entry) || entry === options.pinnedEntry) {
continue
}
- if (await removeUnreferencedEntry(conn, host, remoteHome, entry)) {
+ if (
+ await removeUnreferencedEntry(
+ conn,
+ host,
+ remoteHome,
+ entry,
+ name === entry ? undefined : name
+ )
+ ) {
removed.push(entry)
}
}
@@ -218,17 +144,19 @@ async function removeUnreferencedEntry(
conn: SshConnection,
host: RemoteHostPlatform,
remoteHome: string,
- entry: string
+ entry: string,
+ abandonedTombstone?: string
): Promise {
const base = cacheDir(host, remoteHome)
const entryDir = joinRemotePath(host, base, entry)
const tombstone = joinRemotePath(
host,
base,
- `${TOMBSTONE_PREFIX}${entry}.${process.pid}.${Date.now()}`
+ abandonedTombstone ?? `${TOMBSTONE_PREFIX}${entry}.${process.pid}.${Date.now()}`
)
try {
if (
+ !abandonedTombstone &&
(await exec(conn, host, moveRemoteTreeCommand(host, entryDir, tombstone))).trim() !== 'MOVED'
) {
return false
@@ -241,14 +169,14 @@ async function removeUnreferencedEntry(
// the only outcome that leaves that relay with a working ripgrep.
const recheck = await scanReferences(conn, host, remoteHome)
if (!recheck.readable || recheck.referenced.has(entry)) {
- await exec(conn, host, moveRemoteTreeCommand(host, tombstone, entryDir)).catch(() => {})
+ await exec(conn, host, restoreEntryCommand(host, tombstone, entryDir)).catch(() => {})
return false
}
try {
await exec(conn, host, removeRemoteTreeCommand(host, tombstone))
return true
} catch {
- // The sweep in the entry listing drains a tombstone this pass could not remove.
+ // A later pass retries after verifying references again.
return false
}
}
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.test.ts b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
index 336e4e7c2d9d..dc41c281db2c 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.test.ts
@@ -106,18 +106,29 @@ describe('ensureRemoteBundledRipgrep', () => {
// Why the marker matters: it is the only thing that tells the cache GC this build is in use.
// Without it the GC cannot distinguish "nobody uses this" from "nobody recorded it", and the
// safe answer to the second is to collect nothing at all.
- it('records which build the relay directory runs against', async () => {
- execCommandMock.mockResolvedValueOnce('ORCA-RG-PRESENT\n')
+ it('records the reference before checking or installing its binary', async () => {
+ execCommandMock.mockResolvedValueOnce('').mockResolvedValueOnce('ORCA-RG-PRESENT\n')
await ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me', {
relayDir: '/home/me/.orca-remote/relay-1.2.3'
})
- const ref = execScripts().find((script) => script.includes('.ripgrep-ref'))
+ const ref = execScripts()[0]
expect(ref).toContain('c0ffee0123456789-linux-x64')
expect(ref).toContain('/home/me/.orca-remote/relay-1.2.3/.ripgrep-ref')
})
+ it('does not inspect or upload the binary after its reference write fails', async () => {
+ execCommandMock.mockRejectedValueOnce(new Error('read-only relay directory'))
+ await expect(
+ ensureRemoteBundledRipgrep(connection(), LINUX, '/home/me', {
+ relayDir: '/home/me/.orca-remote/relay-1.2.3'
+ })
+ ).resolves.toBe('failed')
+ expect(execCommandMock).toHaveBeenCalledTimes(1)
+ expect(uploadRelayDirectoryMock).not.toHaveBeenCalled()
+ })
+
it('records nothing when the host has no bundled build to reference', async () => {
resolveBundledRipgrepPathMock.mockReturnValue(null)
diff --git a/src/main/ssh/ssh-relay-ripgrep-install.ts b/src/main/ssh/ssh-relay-ripgrep-install.ts
index 91305c4fb001..02992ac811b1 100644
--- a/src/main/ssh/ssh-relay-ripgrep-install.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-install.ts
@@ -45,16 +45,11 @@ import {
/** Sibling of `relay-`, `orcad-` and `native/`. */
export const REMOTE_RIPGREP_CACHE_DIR_NAME = 'ripgrep'
-/**
- * Marker a relay directory carries naming the ripgrep entry it was launched against.
- *
- * Why a recorded reference and not an age heuristic: the cache GC has to tell "no one uses this"
- * from "no one has touched the directory lately", and only the first is a licence to delete. A
- * relay directory without this file is an older Orca's, so the GC treats it as unaccountable and
- * declines to collect anything -- see `ssh-relay-ripgrep-cache-gc.ts`.
- */
-export function remoteRipgrepRefFileName(): string {
- return '.ripgrep-ref'
+// Ripgrep-only updates share relay bytes, so one relay directory can reference multiple builds.
+export const REMOTE_RIPGREP_REF_PREFIX = '.ripgrep-ref-'
+
+export function remoteRipgrepRefFileName(entryName: string): string {
+ return `${REMOTE_RIPGREP_REF_PREFIX}${entryName}`
}
/** Record which ripgrep build a relay directory runs against. Best-effort: never fails a deploy. */
@@ -63,8 +58,8 @@ export async function recordRemoteRipgrepReference(
host: RemoteHostPlatform,
relayDir: string,
entryName: string
-): Promise {
- const refPath = joinRemotePath(host, relayDir, remoteRipgrepRefFileName())
+): Promise {
+ const refPath = joinRemotePath(host, relayDir, remoteRipgrepRefFileName(entryName))
try {
assertSafeRemotePathSegment(entryName, host.pathFlavor)
await execCommand(
@@ -76,11 +71,13 @@ export async function recordRemoteRipgrepReference(
: `printf %s ${shellEscape(entryName)} > ${shellEscape(refPath)}`,
{ wrapCommand: !isWindowsRemoteHost(host) }
)
+ return true
} catch (error) {
console.warn(
- '[ssh-relay] Could not record the ripgrep reference; its build stays uncollectable:',
+ '[ssh-relay] Could not record the ripgrep reference; skipping the bundled binary:',
error instanceof Error ? error.message : String(error)
)
+ return false
}
}
const UPLOAD_STAGE_PREFIX = '.upload-'
@@ -127,15 +124,13 @@ export async function ensureRemoteBundledRipgrep(
remoteHome: string,
options: { signal?: AbortSignal; relayDir?: string } = {}
): Promise {
- const outcome = await installOrReport(conn, host, remoteHome, options)
- // Why here and not at the call site: recording which build a relay runs against is the same
- // concern as putting it there, and keeping them together leaves the deploy one ripgrep call to
- // mock rather than three that drain its queued exec responses.
- const entryName = remoteRipgrepLayout(host, remoteHome)?.entryName
- if (options.relayDir && entryName && (outcome === 'present' || outcome === 'installed')) {
- await recordRemoteRipgrepReference(conn, host, options.relayDir, entryName)
+ const layout = remoteRipgrepLayout(host, remoteHome)
+ if (options.relayDir && layout && resolveBundledRipgrepPath(layout.platform)) {
+ if (!(await recordRemoteRipgrepReference(conn, host, options.relayDir, layout.entryName))) {
+ return 'failed'
+ }
}
- return outcome
+ return installOrReport(conn, host, remoteHome, options)
}
async function installOrReport(
diff --git a/src/relay/fs-handler-list-files-ignored.test.ts b/src/relay/fs-handler-list-files-ignored.test.ts
index a5661fa8bfe6..3123d35241a1 100644
--- a/src/relay/fs-handler-list-files-ignored.test.ts
+++ b/src/relay/fs-handler-list-files-ignored.test.ts
@@ -651,6 +651,10 @@ describe('relay quick open ignored file listing', () => {
const listFirst = createMockProcess()
const listProbe = createMockProcess()
Object.defineProperty(listFirst, 'pid', { value: undefined })
+ Object.defineProperties(listFirst, {
+ stdout: { value: undefined },
+ stderr: { value: undefined }
+ })
Object.defineProperty(listProbe, 'pid', { value: 1 })
let callIndex = 0
spawnMock.mockImplementation(() => [listFirst, listProbe][callIndex++])
@@ -675,6 +679,10 @@ describe('relay quick open ignored file listing', () => {
const searchChild = createMockProcess()
const searchProbe = createMockProcess()
Object.defineProperty(searchChild, 'pid', { value: undefined })
+ Object.defineProperties(searchChild, {
+ stdout: { value: undefined },
+ stderr: { value: undefined }
+ })
Object.defineProperty(searchProbe, 'pid', { value: 1 })
spawnMock.mockReturnValueOnce(searchChild).mockReturnValueOnce(searchProbe)
const search = searchWithRg(missingRoot, 'ok', { maxResults: 100 })
diff --git a/src/relay/fs-handler-list-files.ts b/src/relay/fs-handler-list-files.ts
index 6257b685e79a..d2b4732777c5 100644
--- a/src/relay/fs-handler-list-files.ts
+++ b/src/relay/fs-handler-list-files.ts
@@ -132,8 +132,8 @@ export function listFilesWithRg(
clearTimeout(timer)
timer = null
}
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
+ child.stdout?.off('data', handleStdoutData)
+ child.stderr?.off('data', handleStderrData)
child.off('error', handleError)
child.off('close', handleClose)
absorbPendingRipgrepSpawnError(child, {
@@ -268,9 +268,9 @@ export function listFilesWithRg(
}
}
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
+ child.stdout?.setEncoding('utf-8')
+ child.stdout?.on('data', handleStdoutData)
+ child.stderr?.on('data', handleStderrData)
child.once('error', handleError)
child.once('close', handleClose)
})
diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts
index 1bc43923a878..8b93c6ac82e7 100644
--- a/src/relay/fs-handler-utils.ts
+++ b/src/relay/fs-handler-utils.ts
@@ -151,8 +151,8 @@ export function searchWithRg(
clearTimeout(killTimeout)
// Why: child.kill() is advisory over SSH; detach listeners if the
// process ignores timeout kill so old searches cannot retain closures.
- child.stdout!.off('data', handleStdoutData)
- child.stderr!.off('data', handleStderrData)
+ child.stdout?.off('data', handleStdoutData)
+ child.stderr?.off('data', handleStderrData)
child.off('error', handleError)
child.off('close', handleClose)
absorbPendingRipgrepSpawnError(child, {
@@ -240,9 +240,9 @@ export function searchWithRg(
resolveOnce()
}
- child.stdout!.setEncoding('utf-8')
- child.stdout!.on('data', handleStdoutData)
- child.stderr!.on('data', handleStderrData)
+ child.stdout?.setEncoding('utf-8')
+ child.stdout?.on('data', handleStdoutData)
+ child.stderr?.on('data', handleStderrData)
child.once('error', handleError)
child.once('close', handleClose)
diff --git a/src/shared/ripgrep-process-availability.ts b/src/shared/ripgrep-process-availability.ts
index 6a8ea6e0a2fe..4c39916aed8b 100644
--- a/src/shared/ripgrep-process-availability.ts
+++ b/src/shared/ripgrep-process-availability.ts
@@ -158,6 +158,26 @@ export function ripgrepMissingCwdError(cwd: string): Error {
return new Error(`Search root is not reachable: ${cwd}`)
}
+// ENOTDIR and some resource failures throw before a ChildProcess can emit an error.
+export async function classifySynchronousRipgrepSpawnFailure(
+ error: unknown,
+ cwd: string
+): Promise {
+ // Why pass an already-classified error straight through: this only diagnoses raw spawn errnos.
+ // A caller that threw a verdict of its own has more context than a cwd probe does.
+ if (error instanceof RipgrepUnavailableError || error instanceof RipgrepLaunchFailureError) {
+ return error
+ }
+ if (isTransientRipgrepSpawnError(error)) {
+ const code = error instanceof Error && 'code' in error ? String(error.code) : 'unknown'
+ return new RipgrepLaunchFailureError(`rg failed to start (${code})`)
+ }
+ if (!(await isRipgrepSpawnCwdUsable(cwd))) {
+ return ripgrepMissingCwdError(cwd)
+ }
+ return error instanceof Error ? error : new Error(String(error))
+}
+
export function isRipgrepUnavailableExit(
child: ChildProcess,
code: number | null,
From eb6c375833a1b9d7cd3d2260791f0612b131793f Mon Sep 17 00:00:00 2001
From: Neil
Date: Thu, 24 Sep 2026 15:50:45 -0700
Subject: [PATCH 22/25] fix(ripgrep): close review gaps and repair deployment
fixtures
---
resources/licenses/ripgrep/README.md | 16 +-
.../licenses/ripgrep/RUST-CRATE-NOTICES.txt | 2021 ++++++++++++++++-
resources/licenses/ripgrep/SLJIT-LICENSE | 23 +
.../bare-ripgrep-spawn-boundary.test.ts | 11 +-
src/main/ripgrep/bundled-ripgrep-path.test.ts | 25 +-
src/main/ripgrep/bundled-ripgrep-path.ts | 4 +-
src/main/ssh/relay-socket-path-limit.test.ts | 6 +
...ssh-relay-deploy-incumbent-verdict.test.ts | 6 +
src/main/ssh/ssh-relay-deploy.test.ts | 26 +-
src/main/ssh/ssh-relay-deploy.ts | 33 +-
...ssh-relay-native-deps-cache-deploy.test.ts | 6 +
.../ssh/ssh-relay-native-deps-install.test.ts | 2 +
...sh-relay-native-deps-probe-verdict.test.ts | 6 +
.../ssh-relay-node-pty-spawn-repair.test.ts | 6 +
...h-relay-pty-master-cloexec-install.test.ts | 6 +
.../ssh-relay-sftp-namespace-install.test.ts | 6 +
src/shared/orcad-artifacts.ts | 1 +
17 files changed, 2123 insertions(+), 81 deletions(-)
create mode 100644 resources/licenses/ripgrep/SLJIT-LICENSE
diff --git a/resources/licenses/ripgrep/README.md b/resources/licenses/ripgrep/README.md
index 1b0f16d9f122..35e6067ea837 100644
--- a/resources/licenses/ripgrep/README.md
+++ b/resources/licenses/ripgrep/README.md
@@ -10,11 +10,19 @@ for local, WSL, and SSH-remote search.
- jemalloc, ripgrep's allocator on the musl builds: BSD-2-Clause (`JEMALLOC-COPYING`).
- LLVM libunwind, statically linked into the Linux builds by Rust's musl target:
Apache-2.0 WITH LLVM-exception (`LLVM-LIBUNWIND-LICENSE.TXT`).
+- PCRE2's sljit compiler: BSD-2-Clause (`SLJIT-LICENSE`).
+- Rust dependencies: `RUST-CRATE-NOTICES.txt`, sourced from the ripgrep 15.0.0
+ `Cargo.lock` and checksum-verified crate archives. This includes build and test
+ dependencies as a conservative superset of the six shipped targets. MIT is
+ selected wherever offered; `ryu` uses BSL-1.0. Additional WHATWG, Unicode and
+ Crossbeam third-party notices are included.
-- The Rust crates ripgrep itself links: `RUST-CRATE-NOTICES.txt`. Orca elects the Unlicense
- wherever a crate offers it (no notice obligation), and reproduces the MIT text for the four that
- do not. `encoding_rs` additionally carries a non-optional BSD-3-Clause notice for its
- WHATWG-derived encoding data.
+The sljit notice is copied from the `sljitLir.c` header in the checksum-verified
+`pcre2-sys-0.2.10` archive (which omits the standalone sljit license file).
+
+When updating `@vscode/ripgrep-universal`, check the matching upstream lockfile
+and refresh these notices from the exact crate archives; binary strings alone
+cannot enumerate dependencies reliably.
The jemalloc and libunwind notices apply to the Linux binaries only; `strings` finds their symbols in
`linux-x64` and `linux-arm64` and in neither the darwin nor win32 builds.
diff --git a/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt b/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
index 970e1ed7b3b5..ac79c03559af 100644
--- a/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
+++ b/resources/licenses/ripgrep/RUST-CRATE-NOTICES.txt
@@ -1,28 +1,111 @@
-Third-party Rust crates statically linked into the bundled ripgrep binaries.
+Rust crate notices for ripgrep 15.0.0 (@vscode/ripgrep-universal 1.18.0).
-Ripgrep is built as a static executable, so its dependency tree ships inside
-`Resources/ripgrep//rg[.exe]` rather than as separate files. The crates
-below were confirmed present by their symbol and string signatures in the shipped
-binaries; each is listed with the licence Orca elects under its dual offer.
+Source: https://github.com/BurntSushi/ripgrep/blob/15.0.0/Cargo.lock
+Each crate archive was fetched from https://static.crates.io/crates/NAME/NAME-VERSION.crate
+and verified against its Cargo.lock SHA-256 checksum. License texts below are copied
+from those archives, with MIT elected wherever offered and BSL-1.0 elected for ryu.
+Additional third-party terms are preserved alongside the elected license.
-Where a crate offers the Unlicense, Orca elects it: the Unlicense is a public-domain
-dedication with no notice obligation, and its text already ships as `UNLICENSE` for
-ripgrep itself. Those crates are:
+This is a conservative superset: it includes build and test dependencies as well as
+runtime dependencies for macOS, Linux and Windows. The EFI/WASI-only packages r-efi,
+wasip2 and wit-bindgen are excluded because Orca ships no EFI or WASI ripgrep target.
+Ripgrep's workspace crates use its MIT/Unlicense terms, supplied separately in
+LICENSE-MIT and UNLICENSE. Native-library notices are supplied alongside this file.
- aho-corasick, globset, grep-searcher, ignore, memchr, same-file, termcolor, walkdir
+================================================================================
+aho-corasick 1.1.3
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+anyhow 1.0.100
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+arbitrary 1.4.2
+================================================================================
+LICENSE-MIT
+
+MIT License
+
+Copyright (c) 2019 Manish Goregaokar
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
-The remainder carry obligations, reproduced in full below.
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
- bstr MIT (elected over Apache-2.0)
- regex-automata MIT (elected over Apache-2.0)
- crossbeam-channel MIT (elected over Apache-2.0)
- log MIT (elected over Apache-2.0)
- encoding_rs MIT (elected over Apache-2.0), AND BSD-3-Clause for its
- WHATWG-derived encoding data, which is not optional
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
================================================================================
-bstr — MIT
+bstr 1.12.0
================================================================================
+LICENSE-MIT
+
The MIT License (MIT)
Copyright (c) 2018-2019 Andrew Gallant
@@ -46,9 +129,42 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================================================
-regex-automata — MIT
+cc 1.2.41
================================================================================
-Copyright (c) 2014 The Rust Project Developers
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+cfg-if 1.0.4
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
@@ -75,8 +191,10 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
================================================================================
-crossbeam-channel — MIT
+crossbeam-channel 0.5.15
================================================================================
+LICENSE-MIT
+
The MIT License (MIT)
Copyright (c) 2019 The Crossbeam Project Developers
@@ -105,10 +223,610 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
+LICENSE-THIRD-PARTY
+
+===============================================================================
+
+matching.go
+https://creativecommons.org/licenses/by/3.0/legalcode
+
+Creative Commons Legal Code
+
+Attribution 3.0 Unported
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+ DAMAGES RESULTING FROM ITS USE.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
+TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
+BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
+CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+CONDITIONS.
+
+1. Definitions
+
+ a. "Adaptation" means a work based upon the Work, or upon the Work and
+ other pre-existing works, such as a translation, adaptation,
+ derivative work, arrangement of music or other alterations of a
+ literary or artistic work, or phonogram or performance and includes
+ cinematographic adaptations or any other form in which the Work may be
+ recast, transformed, or adapted including in any form recognizably
+ derived from the original, except that a work that constitutes a
+ Collection will not be considered an Adaptation for the purpose of
+ this License. For the avoidance of doubt, where the Work is a musical
+ work, performance or phonogram, the synchronization of the Work in
+ timed-relation with a moving image ("synching") will be considered an
+ Adaptation for the purpose of this License.
+ b. "Collection" means a collection of literary or artistic works, such as
+ encyclopedias and anthologies, or performances, phonograms or
+ broadcasts, or other works or subject matter other than works listed
+ in Section 1(f) below, which, by reason of the selection and
+ arrangement of their contents, constitute intellectual creations, in
+ which the Work is included in its entirety in unmodified form along
+ with one or more other contributions, each constituting separate and
+ independent works in themselves, which together are assembled into a
+ collective whole. A work that constitutes a Collection will not be
+ considered an Adaptation (as defined above) for the purposes of this
+ License.
+ c. "Distribute" means to make available to the public the original and
+ copies of the Work or Adaptation, as appropriate, through sale or
+ other transfer of ownership.
+ d. "Licensor" means the individual, individuals, entity or entities that
+ offer(s) the Work under the terms of this License.
+ e. "Original Author" means, in the case of a literary or artistic work,
+ the individual, individuals, entity or entities who created the Work
+ or if no individual or entity can be identified, the publisher; and in
+ addition (i) in the case of a performance the actors, singers,
+ musicians, dancers, and other persons who act, sing, deliver, declaim,
+ play in, interpret or otherwise perform literary or artistic works or
+ expressions of folklore; (ii) in the case of a phonogram the producer
+ being the person or legal entity who first fixes the sounds of a
+ performance or other sounds; and, (iii) in the case of broadcasts, the
+ organization that transmits the broadcast.
+ f. "Work" means the literary and/or artistic work offered under the terms
+ of this License including without limitation any production in the
+ literary, scientific and artistic domain, whatever may be the mode or
+ form of its expression including digital form, such as a book,
+ pamphlet and other writing; a lecture, address, sermon or other work
+ of the same nature; a dramatic or dramatico-musical work; a
+ choreographic work or entertainment in dumb show; a musical
+ composition with or without words; a cinematographic work to which are
+ assimilated works expressed by a process analogous to cinematography;
+ a work of drawing, painting, architecture, sculpture, engraving or
+ lithography; a photographic work to which are assimilated works
+ expressed by a process analogous to photography; a work of applied
+ art; an illustration, map, plan, sketch or three-dimensional work
+ relative to geography, topography, architecture or science; a
+ performance; a broadcast; a phonogram; a compilation of data to the
+ extent it is protected as a copyrightable work; or a work performed by
+ a variety or circus performer to the extent it is not otherwise
+ considered a literary or artistic work.
+ g. "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License with
+ respect to the Work, or who has received express permission from the
+ Licensor to exercise rights under this License despite a previous
+ violation.
+ h. "Publicly Perform" means to perform public recitations of the Work and
+ to communicate to the public those public recitations, by any means or
+ process, including by wire or wireless means or public digital
+ performances; to make available to the public Works in such a way that
+ members of the public may access these Works from a place and at a
+ place individually chosen by them; to perform the Work to the public
+ by any means or process and the communication to the public of the
+ performances of the Work, including by public digital performance; to
+ broadcast and rebroadcast the Work by any means including signs,
+ sounds or images.
+ i. "Reproduce" means to make copies of the Work by any means including
+ without limitation by sound or visual recordings and the right of
+ fixation and reproducing fixations of the Work, including storage of a
+ protected performance or phonogram in digital form or other electronic
+ medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce,
+limit, or restrict any uses free from copyright or rights arising from
+limitations or exceptions that are provided for in connection with the
+copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License,
+Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+perpetual (for the duration of the applicable copyright) license to
+exercise the rights in the Work as stated below:
+
+ a. to Reproduce the Work, to incorporate the Work into one or more
+ Collections, and to Reproduce the Work as incorporated in the
+ Collections;
+ b. to create and Reproduce Adaptations provided that any such Adaptation,
+ including any translation in any medium, takes reasonable steps to
+ clearly label, demarcate or otherwise identify that changes were made
+ to the original Work. For example, a translation could be marked "The
+ original work was translated from English to Spanish," or a
+ modification could indicate "The original work has been modified.";
+ c. to Distribute and Publicly Perform the Work including as incorporated
+ in Collections; and,
+ d. to Distribute and Publicly Perform Adaptations.
+ e. For the avoidance of doubt:
+
+ i. Non-waivable Compulsory License Schemes. In those jurisdictions in
+ which the right to collect royalties through any statutory or
+ compulsory licensing scheme cannot be waived, the Licensor
+ reserves the exclusive right to collect such royalties for any
+ exercise by You of the rights granted under this License;
+ ii. Waivable Compulsory License Schemes. In those jurisdictions in
+ which the right to collect royalties through any statutory or
+ compulsory licensing scheme can be waived, the Licensor waives the
+ exclusive right to collect such royalties for any exercise by You
+ of the rights granted under this License; and,
+ iii. Voluntary License Schemes. The Licensor waives the right to
+ collect royalties, whether individually or, in the event that the
+ Licensor is a member of a collecting society that administers
+ voluntary licensing schemes, via that society, from any exercise
+ by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now
+known or hereafter devised. The above rights include the right to make
+such modifications as are technically necessary to exercise the rights in
+other media and formats. Subject to Section 8(f), all rights not expressly
+granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made
+subject to and limited by the following restrictions:
+
+ a. You may Distribute or Publicly Perform the Work only under the terms
+ of this License. You must include a copy of, or the Uniform Resource
+ Identifier (URI) for, this License with every copy of the Work You
+ Distribute or Publicly Perform. You may not offer or impose any terms
+ on the Work that restrict the terms of this License or the ability of
+ the recipient of the Work to exercise the rights granted to that
+ recipient under the terms of the License. You may not sublicense the
+ Work. You must keep intact all notices that refer to this License and
+ to the disclaimer of warranties with every copy of the Work You
+ Distribute or Publicly Perform. When You Distribute or Publicly
+ Perform the Work, You may not impose any effective technological
+ measures on the Work that restrict the ability of a recipient of the
+ Work from You to exercise the rights granted to that recipient under
+ the terms of the License. This Section 4(a) applies to the Work as
+ incorporated in a Collection, but this does not require the Collection
+ apart from the Work itself to be made subject to the terms of this
+ License. If You create a Collection, upon notice from any Licensor You
+ must, to the extent practicable, remove from the Collection any credit
+ as required by Section 4(b), as requested. If You create an
+ Adaptation, upon notice from any Licensor You must, to the extent
+ practicable, remove from the Adaptation any credit as required by
+ Section 4(b), as requested.
+ b. If You Distribute, or Publicly Perform the Work or any Adaptations or
+ Collections, You must, unless a request has been made pursuant to
+ Section 4(a), keep intact all copyright notices for the Work and
+ provide, reasonable to the medium or means You are utilizing: (i) the
+ name of the Original Author (or pseudonym, if applicable) if supplied,
+ and/or if the Original Author and/or Licensor designate another party
+ or parties (e.g., a sponsor institute, publishing entity, journal) for
+ attribution ("Attribution Parties") in Licensor's copyright notice,
+ terms of service or by other reasonable means, the name of such party
+ or parties; (ii) the title of the Work if supplied; (iii) to the
+ extent reasonably practicable, the URI, if any, that Licensor
+ specifies to be associated with the Work, unless such URI does not
+ refer to the copyright notice or licensing information for the Work;
+ and (iv) , consistent with Section 3(b), in the case of an Adaptation,
+ a credit identifying the use of the Work in the Adaptation (e.g.,
+ "French translation of the Work by Original Author," or "Screenplay
+ based on original Work by Original Author"). The credit required by
+ this Section 4 (b) may be implemented in any reasonable manner;
+ provided, however, that in the case of a Adaptation or Collection, at
+ a minimum such credit will appear, if a credit for all contributing
+ authors of the Adaptation or Collection appears, then as part of these
+ credits and in a manner at least as prominent as the credits for the
+ other contributing authors. For the avoidance of doubt, You may only
+ use the credit required by this Section for the purpose of attribution
+ in the manner set out above and, by exercising Your rights under this
+ License, You may not implicitly or explicitly assert or imply any
+ connection with, sponsorship or endorsement by the Original Author,
+ Licensor and/or Attribution Parties, as appropriate, of You or Your
+ use of the Work, without the separate, express prior written
+ permission of the Original Author, Licensor and/or Attribution
+ Parties.
+ c. Except as otherwise agreed in writing by the Licensor or as may be
+ otherwise permitted by applicable law, if You Reproduce, Distribute or
+ Publicly Perform the Work either by itself or as part of any
+ Adaptations or Collections, You must not distort, mutilate, modify or
+ take other derogatory action in relation to the Work which would be
+ prejudicial to the Original Author's honor or reputation. Licensor
+ agrees that in those jurisdictions (e.g. Japan), in which any exercise
+ of the right granted in Section 3(b) of this License (the right to
+ make Adaptations) would be deemed to be a distortion, mutilation,
+ modification or other derogatory action prejudicial to the Original
+ Author's honor and reputation, the Licensor will waive or not assert,
+ as appropriate, this Section, to the fullest extent permitted by the
+ applicable national law, to enable You to reasonably exercise Your
+ right under Section 3(b) of this License (right to make Adaptations)
+ but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
+OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
+KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
+OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
+LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
+ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+ a. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Adaptations or Collections
+ from You under this License, however, will not have their licenses
+ terminated provided such individuals or entities remain in full
+ compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
+ survive any termination of this License.
+ b. Subject to the above terms and conditions, the license granted here is
+ perpetual (for the duration of the applicable copyright in the Work).
+ Notwithstanding the above, Licensor reserves the right to release the
+ Work under different license terms or to stop distributing the Work at
+ any time; provided, however that any such election will not serve to
+ withdraw this License (or any other license that has been, or is
+ required to be, granted under the terms of this License), and this
+ License will continue in full force and effect unless terminated as
+ stated above.
+
+8. Miscellaneous
+
+ a. Each time You Distribute or Publicly Perform the Work or a Collection,
+ the Licensor offers to the recipient a license to the Work on the same
+ terms and conditions as the license granted to You under this License.
+ b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
+ offers to the recipient a license to the original Work on the same
+ terms and conditions as the license granted to You under this License.
+ c. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of
+ the remainder of the terms of this License, and without further action
+ by the parties to this agreement, such provision shall be reformed to
+ the minimum extent necessary to make such provision valid and
+ enforceable.
+ d. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in writing
+ and signed by the party to be charged with such waiver or consent.
+ e. This License constitutes the entire agreement between the parties with
+ respect to the Work licensed here. There are no understandings,
+ agreements or representations with respect to the Work not specified
+ here. Licensor shall not be bound by any additional provisions that
+ may appear in any communication from You. This License may not be
+ modified without the mutual written agreement of the Licensor and You.
+ f. The rights granted under, and the subject matter referenced, in this
+ License were drafted utilizing the terminology of the Berne Convention
+ for the Protection of Literary and Artistic Works (as amended on
+ September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
+ Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
+ and the Universal Copyright Convention (as revised on July 24, 1971).
+ These rights and subject matter take effect in the relevant
+ jurisdiction in which the License terms are sought to be enforced
+ according to the corresponding provisions of the implementation of
+ those treaty provisions in the applicable national law. If the
+ standard suite of rights granted under applicable copyright law
+ includes additional rights not granted under this License, such
+ additional rights are deemed to be included in the License; this
+ License is not intended to restrict the license of any rights under
+ applicable law.
+
+
+Creative Commons Notice
+
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+
+ Except for the limited purpose of indicating to the public that the
+ Work is licensed under the CCPL, Creative Commons does not authorize
+ the use by either party of the trademark "Creative Commons" or any
+ related trademark or logo of Creative Commons without the prior
+ written consent of Creative Commons. Any permitted use will be in
+ compliance with Creative Commons' then-current trademark usage
+ guidelines, as may be published on its website or otherwise made
+ available upon request from time to time. For the avoidance of doubt,
+ this trademark restriction does not form part of this License.
+
+ Creative Commons may be contacted at https://creativecommons.org/.
+
+===============================================================================
+
+The Go Programming Language
+https://golang.org/LICENSE
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
+
+The Rust Programming Language
+https://github.com/rust-lang/rust/blob/master/LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+===============================================================================
+
+The Rust Programming Language
+https://github.com/rust-lang/rust/blob/master/LICENSE-APACHE
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
================================================================================
-log — MIT
+crossbeam-deque 0.8.6
================================================================================
-Copyright (c) 2014 The Rust Project Developers
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2019 The Crossbeam Project Developers
Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
@@ -135,51 +853,1246 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
================================================================================
-encoding_rs — MIT, and BSD-3-Clause for the WHATWG encoding data
+crossbeam-epoch 0.9.18
================================================================================
-encoding_rs is copyright Mozilla Foundation.
-
-Licensed under the Apache License, Version 2.0
- or the MIT
-license ,
-at your option. All files in the project carrying such
-notice may not be copied, modified, or distributed except
-according to those terms.
+LICENSE-MIT
-This crate includes data derived from the data files supplied
-with the WHATWG Encoding Standard, which, when incorporated into
-source code, are licensed under the BSD 3-Clause License
-.
+The MIT License (MIT)
-Test code within encoding_rs is dedicated to the Public Domain when so
-designated (see the individual files for PD/CC0-dedicated sections).
+Copyright (c) 2019 The Crossbeam Project Developers
---- WHATWG Encoding Standard data (BSD-3-Clause) ---
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
-Copyright © WHATWG (Apple, Google, Mozilla, Microsoft).
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
+================================================================================
+crossbeam-utils 0.8.21
+================================================================================
+LICENSE-MIT
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
+The MIT License (MIT)
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
+Copyright (c) 2019 The Crossbeam Project Developers
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+derive_arbitrary 1.4.2
+================================================================================
+LICENSE-MIT
+
+MIT License
+
+Copyright (c) 2019 Manish Goregaokar
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+encoding_rs 0.8.35
+================================================================================
+LICENSE-MIT
+
+Copyright Mozilla Foundation
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+LICENSE-WHATWG
+
+Copyright © WHATWG (Apple, Google, Mozilla, Microsoft).
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+================================================================================
+encoding_rs_io 0.1.7
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+find-msvc-tools 0.1.4
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+getrandom 0.3.4
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2018-2025 The rust-random Project Developers
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+glob 0.3.3
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+itoa 1.0.15
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+jobserver 0.1.34
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+lexopt 0.3.1
+================================================================================
+LICENSE
+
+Copyright (c) 2021 Jan Verbeek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+libc 0.2.177
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014-2020 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+log 0.4.28
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+memchr 2.7.6
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+memmap2 0.9.8
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2020 Yevhenii Reizner
+Copyright (c) 2015 Dan Burkert
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+pcre2 0.2.11
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+pcre2-sys 0.2.10
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+pkg-config 0.3.32
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+proc-macro2 1.0.101
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+quote 1.0.41
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+regex 1.12.2
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+regex-automata 0.4.13
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+regex-syntax 0.8.8
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+ryu 1.0.20
+================================================================================
+LICENSE-BOOST
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+same-file 1.0.6
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+serde 1.0.228
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+serde_core 1.0.228
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+serde_derive 1.0.228
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+serde_json 1.0.145
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+shlex 1.3.0
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Nicholas Allegra (comex).
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+syn 2.0.106
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+termcolor 1.4.1
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+textwrap 0.16.2
+================================================================================
+LICENSE
+
+MIT License
+
+Copyright (c) 2016 Martin Geisler
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+================================================================================
+tikv-jemalloc-sys 0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+tikv-jemallocator 0.6.0
+================================================================================
+LICENSE-MIT
+
+Copyright (c) 2014 Alex Crichton
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+================================================================================
+unicode-ident 1.0.19
+================================================================================
+LICENSE-MIT
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+LICENSE-UNICODE
+
+UNICODE LICENSE V3
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2023 Unicode, Inc.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
+SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
+DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of data files and any associated documentation (the "Data Files") or
+software and any associated documentation (the "Software") to deal in the
+Data Files or Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
+copies of the Data Files or Software, and to permit persons to whom the
+Data Files or Software are furnished to do so, provided that either (a)
+this copyright and permission notice appear with all copies of the Data
+Files or Software, or (b) this copyright and permission notice appear in
+associated Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+THIRD PARTY RIGHTS.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
+FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in these Data Files or Software without prior written
+authorization of the copyright holder.
+
+================================================================================
+walkdir 2.5.0
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+winapi-util 0.1.11
+================================================================================
+LICENSE-MIT
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Andrew Gallant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+windows-link 0.2.1
+================================================================================
+license-mit
+
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+
+================================================================================
+windows-sys 0.61.2
+================================================================================
+license-mit
+
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
diff --git a/resources/licenses/ripgrep/SLJIT-LICENSE b/resources/licenses/ripgrep/SLJIT-LICENSE
new file mode 100644
index 000000000000..a9a4bded0626
--- /dev/null
+++ b/resources/licenses/ripgrep/SLJIT-LICENSE
@@ -0,0 +1,23 @@
+Stack-less Just-In-Time compiler
+
+ Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are
+permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of
+ conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ of conditions and the following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
index 3492302f1b89..543c4b54e140 100644
--- a/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
+++ b/src/main/ripgrep/bare-ripgrep-spawn-boundary.test.ts
@@ -25,7 +25,7 @@ const ALLOWED_BARE_RIPGREP_SPAWNS: readonly string[] = []
// this guard, and `spawn(PATH_RIPGREP_COMMAND, args, { cwd: userRepo })` is exactly the hijack
// this file exists to catch.
const BARE_SPAWN_PATTERN =
- /\b(?:spawn|spawnSync|exec|execFile|execFileSync|execSync)\w*\(\s*(?:['"]rg['"]|PATH_RIPGREP_COMMAND)/
+ /\b(?:wslAwareSpawn|runProcess|spawn|spawnSync|exec|execFile|execFileSync|execSync)\w*\(\s*(?:['"]rg['"]|PATH_RIPGREP_COMMAND)/
const SCANNED_EXTENSIONS = ['.ts', '.tsx']
const IGNORED_DIRECTORIES = new Set([
@@ -81,6 +81,15 @@ describe('bare ripgrep spawn boundary', () => {
.filter((path) => !isTestFile(path))
.filter((path) => BARE_SPAWN_PATTERN.test(codeText(readFileSync(join(repoRoot, path), 'utf8'))))
+ it.each(['wslAwareSpawn', 'spawnProcess', 'runProcess', 'spawn', 'execFile'])(
+ 'rejects a bare ripgrep command through %s',
+ (spawnName) => {
+ expect(BARE_SPAWN_PATTERN.test(`${spawnName}('rg', args, { cwd })`)).toBe(true)
+ expect(BARE_SPAWN_PATTERN.test(`${spawnName}(PATH_RIPGREP_COMMAND, args)`)).toBe(true)
+ expect(BARE_SPAWN_PATTERN.test(`${spawnName}(bundledCommand, args)`)).toBe(false)
+ }
+ )
+
it('scans a plausible number of files', () => {
// A broken root or extension list would make the guard silently vacuous.
expect(files.length).toBeGreaterThan(500)
diff --git a/src/main/ripgrep/bundled-ripgrep-path.test.ts b/src/main/ripgrep/bundled-ripgrep-path.test.ts
index 1786ee8b36e8..e05c1ba706df 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.test.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.test.ts
@@ -10,6 +10,7 @@ import {
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
+import { runProcess } from '../../shared/child-process/run-process'
import { toBundledRipgrepPlatform } from '../../shared/bundled-ripgrep'
import {
bundledRipgrepCommand,
@@ -75,14 +76,34 @@ describe('bundled ripgrep path', () => {
expect(bundledRipgrepContentKey('win32-x64')).not.toBe(key)
})
- it('picks the distro-arch Linux build via wslpath, else the distro rg', () => {
+ it('picks the distro-arch Linux build and fails closed when its drive is unavailable', () => {
const { wslShellCommand } = bundledRipgrepWslSpawnOptions(
'C:\\Program Files\\Orca\\resources\\ripgrep\\linux-x64\\rg'
)
expect(wslShellCommand).toContain(`wslpath -u 'C:\\Program Files\\Orca\\resources\\ripgrep'`)
expect(wslShellCommand).toContain('aarch64|arm64) a=linux-arm64')
- expect(wslShellCommand).toContain('else printf rg')
+ expect(wslShellCommand).toContain('printf %s "$d/$a/rg"')
+ expect(wslShellCommand).toContain('else printf /dev/null/orca-ripgrep-unavailable')
+ expect(wslShellCommand).not.toContain('else printf rg')
expect(bundledRipgrepWslSpawnOptions('rg')).toEqual({})
})
+
+ it.skipIf(process.platform === 'win32')(
+ 'never executes a PATH ripgrep when WSL cannot translate the install drive',
+ async () => {
+ const { wslShellCommand } = bundledRipgrepWslSpawnOptions(
+ 'C:\\Orca\\resources\\ripgrep\\linux-x64\\rg'
+ )
+ const result = await runProcess({
+ program: '/bin/bash',
+ args: [
+ '-c',
+ `wslpath() { return 1; }; rg() { echo WRONG_RIPGREP; }; ${wslShellCommand} --version`
+ ]
+ })
+ expect(result.code).toBeGreaterThan(2)
+ expect(result.stdout).not.toContain('WRONG_RIPGREP')
+ }
+ )
})
diff --git a/src/main/ripgrep/bundled-ripgrep-path.ts b/src/main/ripgrep/bundled-ripgrep-path.ts
index a355968fceb5..e52a83d90764 100644
--- a/src/main/ripgrep/bundled-ripgrep-path.ts
+++ b/src/main/ripgrep/bundled-ripgrep-path.ts
@@ -100,7 +100,7 @@ export function bundledRipgrepCommand(options: { wsl?: boolean } = {}): string {
/**
* Spawn options for a WSL-routed rg: inside the distro, pick the Linux build matching its own
* architecture (Windows-on-ARM runs x64 Orca beside arm64 distros) from the Windows install via
- * wslpath (custom automount roots), else the distro's own rg when the install drive is not mounted.
+ * wslpath (custom automount roots). An inaccessible install fails through the missing-tool path.
*/
export function bundledRipgrepWslSpawnOptions(command: string): { wslShellCommand?: string } {
const ripgrepRoot = command.replace(/[\\/][^\\/]+[\\/][^\\/]+$/, '')
@@ -108,7 +108,7 @@ export function bundledRipgrepWslSpawnOptions(command: string): { wslShellComman
return {}
}
return {
- wslShellCommand: `"$(d=$(wslpath -u ${quotePosixShell(ripgrepRoot)} 2>/dev/null); case "$(uname -m)" in aarch64|arm64) a=linux-arm64;; *) a=linux-x64;; esac; if [ -n "$d" ] && [ -x "$d/$a/rg" ]; then printf %s "$d/$a/rg"; else printf rg; fi)"`
+ wslShellCommand: `"$(d=$(wslpath -u ${quotePosixShell(ripgrepRoot)} 2>/dev/null); case "$(uname -m)" in aarch64|arm64) a=linux-arm64;; *) a=linux-x64;; esac; if [ -n "$d" ]; then printf %s "$d/$a/rg"; else printf /dev/null/orca-ripgrep-unavailable; fi)"`
}
}
diff --git a/src/main/ssh/relay-socket-path-limit.test.ts b/src/main/ssh/relay-socket-path-limit.test.ts
index 7334ff9d9148..ce878765e8dc 100644
--- a/src/main/ssh/relay-socket-path-limit.test.ts
+++ b/src/main/ssh/relay-socket-path-limit.test.ts
@@ -1,5 +1,11 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
}))
diff --git a/src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts b/src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts
index aca050275b1a..ef90e829f7b7 100644
--- a/src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts
+++ b/src/main/ssh/ssh-relay-deploy-incumbent-verdict.test.ts
@@ -1,5 +1,11 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
}))
diff --git a/src/main/ssh/ssh-relay-deploy.test.ts b/src/main/ssh/ssh-relay-deploy.test.ts
index cbb6c4d77cf1..f2fdaee4ed2b 100644
--- a/src/main/ssh/ssh-relay-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-deploy.test.ts
@@ -99,7 +99,7 @@ vi.mock('./ssh-connection-utils', () => ({
import { deployAndLaunchRelay } from './ssh-relay-deploy'
import { execCommand, waitForSentinel } from './ssh-relay-deploy-helpers'
import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
-import { isRelayAlreadyInstalled } from './ssh-relay-versioned-install'
+import { isRelayAlreadyInstalled, gcOldRelayVersions } from './ssh-relay-versioned-install'
import { acquireInstallLock } from './ssh-relay-install-lock'
import {
ensureRemoteBundledRipgrep,
@@ -525,6 +525,30 @@ describe('deployAndLaunchRelay', () => {
expect(launchCommand).not.toContain('.pty-source-credit-policy')
})
+ it.each([false, true])(
+ 'waits for the ripgrep upload before cleanup (upload failure: %s)',
+ async (fails) => {
+ const conn = makeMockConnection()
+ vi.mocked(conn.canRunConcurrentExecCommands).mockReturnValue(false)
+ queueFreshLinuxDeploy()
+ let finishUpload = (): void => {}
+ vi.mocked(ensureRemoteBundledRipgrep).mockImplementationOnce(
+ () =>
+ new Promise((resolve, reject) => {
+ finishUpload = () => (fails ? reject(new Error('upload failed')) : resolve('present'))
+ })
+ )
+ await deployAndLaunchRelay(conn)
+ expect(ensureRemoteBundledRipgrep).toHaveBeenCalledOnce()
+ const execCount = vi.mocked(execCommand).mock.calls.length
+ await new Promise((resolve) => setImmediate(resolve))
+ expect(execCommand).toHaveBeenCalledTimes(execCount)
+ expect(gcOldRelayVersions).not.toHaveBeenCalled()
+ finishUpload()
+ await vi.waitFor(() => expect(gcOldRelayVersions).toHaveBeenCalledOnce())
+ }
+ )
+
it('does not launch or upload an unprotected binary when recording its reference fails', async () => {
const conn = makeMockConnection()
queueFreshLinuxDeploy()
diff --git a/src/main/ssh/ssh-relay-deploy.ts b/src/main/ssh/ssh-relay-deploy.ts
index e33af66ca110..aab5e6c39d30 100644
--- a/src/main/ssh/ssh-relay-deploy.ts
+++ b/src/main/ssh/ssh-relay-deploy.ts
@@ -617,24 +617,23 @@ async function deployAndLaunchRelayAttempt(
}
console.log('[ssh-relay] Relay started successfully')
- // Why its own statement rather than the head of the chain below: bounded Quick Open search needs
- // rg, but on a cold host this is a multi-MB upload, and chaining the sweep behind it would leave
- // stale stages and superseded version dirs on the remote for its whole duration. The two touch
- // different trees (`ripgrep/` is owned by no version GC), and neither delays connect.
- // Why deploySignal is safe on a fire-and-forget call: the controller aborts only on the deploy
- // timeout, never on success, so this cancels a still-running upload when the deploy gives up.
+ // Keep background commands serial for SSH transports that allow only one exec at a time.
const ripgrepEntry = ripgrepLayout?.entryName
- if (ripgrepReferenced) {
- void ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, {
- signal: deploySignal
- }).catch(() => {})
- }
-
- void execHostCommand(
- conn,
- hostPlatform,
- recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
- )
+ const ripgrepInstall = (
+ ripgrepReferenced
+ ? ensureRemoteBundledRipgrep(conn, hostPlatform, remoteHome, { signal: deploySignal })
+ : Promise.resolve()
+ ).catch(() => {})
+ const cleanupReady = conn.canRunConcurrentExecCommands() ? Promise.resolve() : ripgrepInstall
+
+ void cleanupReady
+ .then(() =>
+ execHostCommand(
+ conn,
+ hostPlatform,
+ recoverOneStaleRelayUploadStageCommand(hostPlatform, uploadStagePoolDir)
+ )
+ )
.catch(() => {})
// Why before GC: a superseded relay pins its version dir via the live-socket probe, so the
// sweep has to settle first or GC keeps every orphan's tree forever.
diff --git a/src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts b/src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts
index 90f81fcbf06a..ffc859df2232 100644
--- a/src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-cache-deploy.test.ts
@@ -35,6 +35,12 @@ vi.mock('./ssh-relay-deploy-helpers', () => ({
execCommand: vi.fn()
}))
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('./ssh-remote-node-resolution', () => ({
resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
}))
diff --git a/src/main/ssh/ssh-relay-native-deps-install.test.ts b/src/main/ssh/ssh-relay-native-deps-install.test.ts
index f97658f5c753..df15135963a2 100644
--- a/src/main/ssh/ssh-relay-native-deps-install.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-install.test.ts
@@ -88,6 +88,7 @@ import { resolveRemoteNodePath } from './ssh-remote-node-resolution'
import {
abandonInstall,
finalizeInstall,
+ gcOldRelayVersions,
isRelayAlreadyInstalled
} from './ssh-relay-versioned-install'
import { acquireInstallLock } from './ssh-relay-install-lock'
@@ -629,6 +630,7 @@ describe('installNativeDeps (via deployAndLaunchRelay)', () => {
const conn1 = makeMockConnection(sftpCapture)
feed(makeExecResponses({ npmInstall: 'ok', probe: 'ok' }))
await deployAndLaunchRelay(conn1)
+ await vi.waitFor(() => expect(gcOldRelayVersions).toHaveBeenCalled())
const firstPath = sftpCapture.paths.find((p) => p.endsWith('/package.json')) as string
const first = sftpCapture.contents[firstPath]
diff --git a/src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts b/src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts
index b4b3a22d8174..395aed06f951 100644
--- a/src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts
+++ b/src/main/ssh/ssh-relay-native-deps-probe-verdict.test.ts
@@ -35,6 +35,12 @@ vi.mock('./ssh-relay-deploy-helpers', () => ({
execCommand: vi.fn()
}))
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('./ssh-remote-node-resolution', () => ({
resolveRemoteNodePath: vi.fn().mockResolvedValue('/usr/bin/node')
}))
diff --git a/src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts b/src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts
index 5b045d69227f..1f8fd69b8dd8 100644
--- a/src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts
+++ b/src/main/ssh/ssh-relay-node-pty-spawn-repair.test.ts
@@ -6,6 +6,12 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RelayInstallMarkerModule from './ssh-relay-install-marker'
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
}))
diff --git a/src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts b/src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts
index 1fa97df78127..5b2a42d87c7b 100644
--- a/src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts
+++ b/src/main/ssh/ssh-relay-pty-master-cloexec-install.test.ts
@@ -1,6 +1,12 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RelayInstallMarkerModule from './ssh-relay-install-marker'
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
}))
diff --git a/src/main/ssh/ssh-relay-sftp-namespace-install.test.ts b/src/main/ssh/ssh-relay-sftp-namespace-install.test.ts
index 4ec2e9eec4de..65459b8bcbaa 100644
--- a/src/main/ssh/ssh-relay-sftp-namespace-install.test.ts
+++ b/src/main/ssh/ssh-relay-sftp-namespace-install.test.ts
@@ -7,6 +7,12 @@ import { EventEmitter } from 'node:events'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import type * as RelayInstallMarkerModule from './ssh-relay-install-marker'
+vi.mock('./ssh-relay-ripgrep-install', () => ({
+ remoteRipgrepLayout: vi.fn().mockReturnValue(null),
+ recordRemoteRipgrepReference: vi.fn().mockResolvedValue(false),
+ ensureRemoteBundledRipgrep: vi.fn().mockResolvedValue(undefined)
+}))
+
vi.mock('electron', () => ({
app: { getAppPath: () => '/mock/app' }
}))
diff --git a/src/shared/orcad-artifacts.ts b/src/shared/orcad-artifacts.ts
index a4385e942f16..9a2598caefbf 100644
--- a/src/shared/orcad-artifacts.ts
+++ b/src/shared/orcad-artifacts.ts
@@ -29,6 +29,7 @@ export const ORCAD_RIPGREP_LICENSE_ARTIFACTS = [
'ripgrep/licenses/PCRE2-LICENCE.md',
'ripgrep/licenses/README.md',
'ripgrep/licenses/RUST-CRATE-NOTICES.txt',
+ 'ripgrep/licenses/SLJIT-LICENSE',
'ripgrep/licenses/UNLICENSE'
] as const
From 3ebc309f660806b4255edc9d5415082aed23e23e Mon Sep 17 00:00:00 2001
From: Neil
Date: Thu, 24 Sep 2026 15:52:19 -0700
Subject: [PATCH 23/25] test(mobile): refresh merged session module census
---
.../scripts/mobile-web-app-session-terminal-closure.test.mjs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
index 5afefa965ef0..de0f261c6a87 100644
--- a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
+++ b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
@@ -460,7 +460,8 @@ const MERMAID_PACKAGE = 'node_modules/mermaid/'
* modules 4221 -> 4219 (-2)
* local modules 1035 -> 1033 (-2)
*/
-const SESSION_ROUTE_MODULES = 4219
+// Main adds four agent-session modules and replaces three browser-frame modules with one.
+const SESSION_ROUTE_MODULES = 4221
/** What the page enters this route through once the route is a switch with a `.web.tsx` sibling. */
const ROUTE_ENTRY = [
From 6382f9f66f218702bb5500d4be84c565bb74a76a Mon Sep 17 00:00:00 2001
From: Neil
Date: Thu, 24 Sep 2026 16:22:04 -0700
Subject: [PATCH 24/25] fix(ssh): preserve ripgrep caches with empty legacy
references
---
src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts | 10 ++++++++++
src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts | 12 ++++++++++++
src/main/ssh/ssh-relay-ripgrep-cache-gc.ts | 3 ++-
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
index 314f9fc4d9f8..8b3e657e523e 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc-real.test.ts
@@ -80,6 +80,16 @@ describe('ripgrep cache shell transactions', () => {
expect(readdirSync(cache).sort()).toEqual([FIRST, SECOND])
})
+ it.each(['', ' \t\r\n'])(
+ 'blocks collection when a legacy marker is empty or whitespace: %j',
+ async (contents) => {
+ writeFileSync(join(relay, '.ripgrep-ref'), contents)
+ await recordRemoteRipgrepReference(conn, host, relay, SECOND)
+ await gcRemoteRipgrepCache(conn, host, home)
+ expect(readdirSync(cache).sort()).toEqual([FIRST, SECOND])
+ }
+ )
+
it.skipIf(process.platform === 'win32' || process.getuid?.() === 0)(
'preserves binaries when the relay directory listing is unreadable',
async () => {
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
index 8296d67bbd61..d69bdb497f1a 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.test.ts
@@ -62,6 +62,18 @@ describe('remote ripgrep cache GC', () => {
expect(removedTrees()[0]).toContain(SUPERSEDED)
})
+ it.each([LINUX, WINDOWS])(
+ 'rejects an empty reference on %j before any mutation',
+ async (host) => {
+ execCommandMock.mockReset()
+ execCommandMock
+ .mockResolvedValueOnce(`ENTRY ${SUPERSEDED}\r\n__ORCA_RG_CACHE__LIST_OK`)
+ .mockResolvedValueOnce('REF \t\r\n__ORCA_RG_CACHE__REFS_OK')
+ await gcRemoteRipgrepCache(conn, host, '/home/me')
+ expect(execCommandMock).toHaveBeenCalledTimes(2)
+ }
+ )
+
// Why: the reference is the whole safety argument. A build a live relay was launched against
// must survive, however old its directory is.
it('keeps a referenced build', async () => {
diff --git a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
index f9bf9f71c766..18cca2c4f5f8 100644
--- a/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
+++ b/src/main/ssh/ssh-relay-ripgrep-cache-gc.ts
@@ -79,7 +79,8 @@ async function scanReferences(
return { readable: false }
}
const lines = output.split(/\r?\n/).map((line) => line.trim())
- if (lines.includes(REFS_ERR) || !lines.includes(REFS_OK)) {
+ // An empty legacy marker is unknown ownership, not an empty reference set.
+ if (lines.includes(REFS_ERR) || lines.includes('REF') || !lines.includes(REFS_OK)) {
return { readable: false }
}
const referenced = new Set()
From f211cbfbfe9bb0b855126becf83dfb56dd27ea40 Mon Sep 17 00:00:00 2001
From: Neil
Date: Thu, 24 Sep 2026 16:43:57 -0700
Subject: [PATCH 25/25] test(mobile): assert bundle boundaries instead of
global module count
---
.../mobile-web-app-session-terminal-closure.test.mjs | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
index de0f261c6a87..8146aa13f0ca 100644
--- a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
+++ b/config/scripts/mobile-web-app-session-terminal-closure.test.mjs
@@ -460,9 +460,6 @@ const MERMAID_PACKAGE = 'node_modules/mermaid/'
* modules 4221 -> 4219 (-2)
* local modules 1035 -> 1033 (-2)
*/
-// Main adds four agent-session modules and replaces three browser-frame modules with one.
-const SESSION_ROUTE_MODULES = 4221
-
/** What the page enters this route through once the route is a switch with a `.web.tsx` sibling. */
const ROUTE_ENTRY = [
'app/h/[hostId]/session/[worktreeId].web.tsx',
@@ -524,10 +521,8 @@ describeClosure(
const { modules } = await mobileWebAppRouteClosure(SESSION_ROUTE)
// The engine is here, as the one artifact the loader imports.
expect(artifactModules(modules)).toHaveLength(1)
- // And the package's own file tree is not, anywhere: it is inside that artifact. Meaningful
- // only beside the line above, which is why the two sit together.
+ // Package sources stay inside that artifact; unrelated module counts are not this boundary.
expect(packageModules(modules)).toEqual([])
- expect(modules).toHaveLength(SESSION_ROUTE_MODULES)
const download = await mobileWebAppRouteChunkClosure(SESSION_ROUTE)
// The fence: nothing of the engine is reachable from the route's own chunk by an import