Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Important Review skippedReview was skipped as selected files did not have any reviewable changes. ⛔ Files ignored due to path filters (1)
⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
You can disable this status message by setting the Use the checkbox below for a quick retry:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review. 📝 WalkthroughWalkthroughAdds Cmder as a Windows terminal shell. The change discovers Cmder installations, applies Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to Cmder panes retain their installation root when revived. No actionable issue remains in the supplied change evidence. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
Full details: Linked Issues checkExplanation The PR implements the Cmder shell option, Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Advanced
Run ID: c7552715-6f53-4b42-81be-73cb3336fb0c
⛔ Files ignored due to path filters (1)
src/shared/rpc-contract/rpc-params-catalog.generated.tsis excluded by!**/*.generated.*
📒 Files selected for processing (40)
src/main/cmder.smoke.node-pty.test.tssrc/main/cmder.test.tssrc/main/cmder.tssrc/main/daemon/pty-subprocess/shell-launch-plan.tssrc/main/ipc/app.tssrc/main/ipc/pty/ipc/spawn-options.tssrc/main/ipc/pty/runtime/spawn-options.tssrc/main/providers/local-pty-launch-plan.tssrc/main/providers/local-pty-provider-windows-shell-launch.test.tssrc/main/providers/local-pty-windows-spawn-environment.tssrc/main/providers/windows-shell-args.test.tssrc/main/providers/windows-shell-args.tssrc/main/runtime/rpc/methods/host-capabilities.tssrc/main/runtime/runtime-rpc/runtime-rpc-mobile-method-allowlist.tssrc/main/startup/main-process-ready-foundation.tssrc/preload/api-types.tssrc/preload/api/git-bash-bridge.tssrc/preload/api/runtime-api.tssrc/preload/index.tssrc/relay/pty-handler.tssrc/relay/pty-shell-launch.test.tssrc/relay/pty-shell-launch.tssrc/renderer/src/components/onboarding/WindowsTerminalStep.tsxsrc/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.tssrc/renderer/src/components/settings/TerminalPane.tsxsrc/renderer/src/components/settings/TerminalWindowsShellSection.tsxsrc/renderer/src/components/settings/settings-interface-primary-section-renderers.tsxsrc/renderer/src/components/tab-bar/shell-icons.tsxsrc/renderer/src/components/tab-bar/tab-bar-windows-shell-options.tssrc/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.tssrc/renderer/src/lib/windows-terminal-capabilities.test.tssrc/renderer/src/lib/windows-terminal-capabilities.tssrc/renderer/src/lib/windows-terminal-capability-read.tssrc/renderer/src/lib/windows-terminal-capability-reprobe.tssrc/renderer/src/store/terminals/terminal-workspace-routing.tssrc/renderer/src/web/web-preload-api.tssrc/shared/default-global-settings.tssrc/shared/global-settings-types.tssrc/shared/windows-terminal-shell.test.tssrc/shared/windows-terminal-shell.ts
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.
There was a problem hiding this comment.
ℹ️ No critical issues — one feature gap and a couple of rough edges are worth a look.
Reviewed changes
- Shell sentinel and plumbing — adds
WINDOWS_CMDER_SHELL = 'cmder'to the built-in shells, the override canonical-name map, the startup-family resolver (→cmd), and the CLI/RPC shell allow-list. - Discovery —
src/main/cmder.tsresolves a root from the hiddenterminalWindowsCmderPathsetting,ORCA_CMDER_ROOT,CMDER_ROOT, then guessed Program Files / LocalAppData / Scoop /C:\tools/C:\cmder, requiringvendor\init.bat. - Launch wiring — local provider, daemon subprocess, and SSH relay all map
cmdertocmd.exeand prependcall %ORCA_CMDER_INIT%via env-quoted path; inheritedCMDER_*state is stripped; the configured folder is carried to the daemon asORCA_CMDER_ROOT. - Renderer surfaces — Settings shell section, tab-bar "+" menu, onboarding normalization, telemetry bucket, CMD icon, and the new
cmderAvailablecapability field /host.cmder.isAvailableRPC.
ℹ️ The configured Cmder folder cannot reach a remote host
terminalWindowsCmderPath is only injected as ORCA_CMDER_ROOT on non-connection spawns, and the relay strips ORCA_CMDER_ROOT before resolving, while the relay root resolver reads the relay daemon's own process.env. That is correct for a client-local path, but it means a remote Windows host whose Cmder sits outside the guessed folders always falls back to plain cmd.exe with no signal to the user. Worth deciding whether the override should be host-scoped or whether relay auto-detection is considered sufficient.
Technical details
# Configured Cmder folder does not reach a remote Windows host
## Affected sites
- `src/relay/pty-shell-launch.ts:65` — `getRelayCmderLaunchConfig` calls `resolveCmderRoot()` with no `env`, so it reads only the relay process env + module state; the per-spawn `spawnEnv` is ignored.
- `src/relay/pty-handler.ts:1928` / `:3059` — `stripInheritedCmderState(spawnEnv)` deletes `ORCA_CMDER_ROOT` before the config is built.
- `src/main/ipc/pty/ipc/spawn-options.ts:123`, `src/main/ipc/pty/runtime/spawn-options.ts:153` — `applyConfiguredCmderRootEnv` is gated on `!connectionId`, so the setting is never sent to a relay.
## Required outcome
- Decide whether a remote Windows host should honor a user-specified Cmder folder. If yes, the setting needs a host-scoped path (`hostSettingOverrides`) or the relay must be told which root to use; if no, relay auto-detection (`CMDER_ROOT` on the host env or the guessed folders) is the documented contract.
## Open questions for the human
- Is the hidden `terminalWindowsCmderPath` intended to be local-only, or should it configure the active host?ℹ️ Nitpicks
WindowsTerminalStep.tsxnow preservesterminalWindowsShell: 'cmder'innormalizeWindowsShell, but the onboarding shell cards still have no Cmder option, so such a profile shows no card selected in onboarding.- The new relay test only asserts the empty
{ args: [], env: {} }config on a machine without Cmder, so theargs.length > 0branch (the actualinit.batarg string) is never exercised in CI; the same string is covered bywindows-shell-args.test.ts.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
|
Thanks for the reviews. Addressed in 404a3c8; notes on the review-level points:
|
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Addressed prior feedback —
applyConfiguredCmderRootEnvnow drops a carriedORCA_CMDER_ROOTbefore deciding, so clearing the hidden folder setting can no longer leave a stale path ahead ofCMDER_ROOT; the relay resolves the Cmder root from the pane spawn env ({ ...process.env, ...spawnEnv }) instead of the relay process env alone. - Windows SSH hosts now report Cmder availability — the relay's
detectWindowsTerminalCapabilitiesreturnscmderAvailable, carried by the sharedRemoteWindowsTerminalCapabilitiestype and mirrored in the preload API as optional, so old relays read as "no Cmder" and the Settings/tab-bar gates offer Cmder on a remote Windows host. - Onboarding Cmder card —
WindowsTerminalSteprenders a Cmder option fromcapabilities.cmderAvailable, keeping a saved-but-missing selection visible and disabled exactly as the Git Bash option does. - Tests — new coverage in
cmder.test.ts(stale-key removal),preflight-handler.test.ts(relay capability shape), andpty-shell-launch.test.ts(spawn-env root, win32-gated); formatting-only edits inapp.tsandruntime-api.tsreverted.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟡 Minor · Resolve Cmder from the spawn environment on the local fallback. · local-pty-launch-plan.ts:127-129
src/main/providers/local-pty-launch-plan.ts:127-129
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winResolve Cmder from the spawn environment on the local fallback.
When
orcadcannot start its daemon, it continues with the in-processLocalPtyProvider. Its PTY handlers useterminalWindowsShellto select Cmder and placeterminalWindowsCmderPathinargs.env.ORCA_CMDER_ROOT. This resolver ignoresargs.env, andorcaddoes not initializeconfiguredCmderRoot. A custom root outside the resolver’s other candidates can be missed, socmd.execan start without Cmder’svendor\init.bat.Suggested fix
- const cmderRoot = resolveWindowsCmderShellRoot(shellFamily) + const cmderRoot = resolveWindowsCmderShellRoot(shellFamily, { + env: { ...process.env, ...args.env } + })
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Advanced
Run ID: 80565d5b-bb9c-4dc9-a9dd-8dbb0eb3e2dc
📒 Files selected for processing (11)
src/main/cmder.test.tssrc/main/cmder.tssrc/main/ipc/app.tssrc/main/ipc/preflight-remote-windows-terminal-capabilities.tssrc/preload/api/preflight-api.tssrc/preload/api/runtime-api.tssrc/relay/preflight-handler.test.tssrc/relay/preflight-handler.tssrc/relay/pty-shell-launch.test.tssrc/relay/pty-shell-launch.tssrc/renderer/src/components/onboarding/WindowsTerminalStep.tsx
🚧 Files skipped from review as they are similar to previous changes (6)
- src/renderer/src/components/onboarding/WindowsTerminalStep.tsx
- src/main/cmder.test.ts
- src/relay/pty-shell-launch.test.ts
- src/preload/api/runtime-api.ts
- src/relay/pty-shell-launch.ts
- src/main/cmder.ts
Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.
|
@coderabbitai review |
|
|
@coderabbitai re the outside-diff comment on On the remaining Linked Issues warning: a saved Cmder default stays visible (disabled) when Cmder is missing so the user can see what is selected and change it, the same rule Git Bash and WSL use in Settings and onboarding. Keeping that for consistency. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Resolved Cmder from the spawn environment on the in-process fallback —
createWindowsLocalPtyLaunchPlannow callsresolveWindowsCmderShellRoot(shellFamily, { env: { ...process.env, ...args.env } }), soorcad's fallback honors theORCA_CMDER_ROOTthe setting carries in the spawn env even though that process never callssetConfiguredCmderRoot. This closes the gap where a Cmder root outside the guessed folders would have fallen back to plaincmd.exe. - Added regression coverage — a provider test passing
ORCA_CMDER_ROOTthroughspawn({ env })assertsCMDER_ROOT/ORCA_CMDER_INITland on thecmd.exespawn. It fails without the production change, so it is real coverage rather than a tautology.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
|
@coderabbitai full review |
✅ Action performedFull review finished. |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Advanced
Run ID: aae111f7-e090-4365-bd8c-80e6b44e4a10
⛔ Files ignored due to path filters (1)
src/shared/rpc-contract/rpc-params-catalog.generated.tsis excluded by!**/*.generated.*
📒 Files selected for processing (44)
src/main/cmder.smoke.node-pty.test.tssrc/main/cmder.test.tssrc/main/cmder.tssrc/main/daemon/pty-subprocess/shell-launch-plan.tssrc/main/ipc/app.tssrc/main/ipc/preflight-remote-windows-terminal-capabilities.tssrc/main/ipc/pty/ipc/spawn-options.tssrc/main/ipc/pty/runtime/spawn-options.tssrc/main/providers/local-pty-launch-plan.tssrc/main/providers/local-pty-provider-windows-shell-launch.test.tssrc/main/providers/local-pty-windows-spawn-environment.tssrc/main/providers/windows-shell-args.test.tssrc/main/providers/windows-shell-args.tssrc/main/runtime/rpc/methods/host-capabilities.tssrc/main/runtime/runtime-rpc/runtime-rpc-mobile-method-allowlist.tssrc/main/startup/main-process-ready-foundation.tssrc/preload/api-types.tssrc/preload/api/git-bash-bridge.tssrc/preload/api/preflight-api.tssrc/preload/api/runtime-api.tssrc/preload/index.tssrc/relay/preflight-handler.test.tssrc/relay/preflight-handler.tssrc/relay/pty-handler.tssrc/relay/pty-shell-launch.test.tssrc/relay/pty-shell-launch.tssrc/renderer/src/components/onboarding/WindowsTerminalStep.tsxsrc/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.tssrc/renderer/src/components/settings/TerminalPane.tsxsrc/renderer/src/components/settings/TerminalWindowsShellSection.tsxsrc/renderer/src/components/settings/settings-interface-primary-section-renderers.tsxsrc/renderer/src/components/tab-bar/shell-icons.tsxsrc/renderer/src/components/tab-bar/tab-bar-windows-shell-options.tssrc/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.tssrc/renderer/src/lib/windows-terminal-capabilities.test.tssrc/renderer/src/lib/windows-terminal-capabilities.tssrc/renderer/src/lib/windows-terminal-capability-read.tssrc/renderer/src/lib/windows-terminal-capability-reprobe.tssrc/renderer/src/store/terminals/terminal-workspace-routing.tssrc/renderer/src/web/web-preload-api.tssrc/shared/default-global-settings.tssrc/shared/global-settings-types.tssrc/shared/windows-terminal-shell.test.tssrc/shared/windows-terminal-shell.ts
Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review.
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
ast-grep outline src/main/providers/local-pty-launch-plan.ts --items all --match 'resolve|Cmder' || true
ast-grep outline src/main/providers/local-pty-provider-windows-shell-launch.test.ts --items all --match 'Cmder|cmder' || true
ast-grep outline src/renderer/src/components/settings/TerminalWindowsShellSection.tsx --items all || true
ast-grep outline src/renderer/src/components/onboarding/WindowsTerminalStep.tsx --items all || true
rg -n -C5 'resolveWindowsCmderShellRoot|ORCA_CMDER_ROOT|cmderAvailable|WINDOWS_CMDER_SHELL|gitBashAvailable|wslAvailable' src/main/providers/local-pty-launch-plan.ts src/main/providers/local-pty-provider-windows-shell-launch.test.ts src/renderer/src/components/settings/TerminalWindowsShellSection.tsx src/renderer/src/components/onboarding/WindowsTerminalStep.tsxLength of output: 26636 🏁 Script executed: #!/bin/bash
set -euo pipefail
sed -n '680,720p' src/main/providers/local-pty-provider-windows-shell-launch.test.ts
ast-grep outline src/main/cmder.ts --items all --match 'resolveWindowsCmderShellRoot|resolveCmderRoot|getCmderRootCandidates' || true
rg -n -C5 'function resolveWindowsCmderShellRoot|function resolveCmderRoot|ORCA_CMDER_ROOT_ENV' src/main/cmder.tsLength of output: 5135
The test sets This addresses the If you found this review helpful, would you consider giving us a shout-out on X? Thank you for using CodeRabbit! You are interacting with an AI system. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Persisted the Cmder root across relay revive —
cmderRootnow ridesManagedPtyandSerializedPtyEntry, so a pane whoseCMDER_ROOTarrived only in the spawn environment is re-resolved on revive instead of falling back to plaincmd.exe. Discovery still requiresvendor\init.bat, so a stale root degrades to plain cmd, and the resolved root is re-stored after revive for a second round trip. - Regression coverage — a Windows-only revive test in
pty-handler-revive.test.tsspawnscmderfrom a temp root, serializes, revives, and asserts the revivedcmd.exereceivesORCA_CMDER_INITpointing at that root'svendor\init.bat. It fails without the production change.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
Adds a `cmder` shell choice (settings, new-tab menu, `terminal create --shell cmder`) that spawns cmd.exe and calls Cmder's vendor\init.bat before any startup command, so panes get Clink, Cmder aliases, and the git prompt while staying in the requested cwd. Cmder is found via CMDER_ROOT or common install dirs; hosts without it degrade to plain cmd. The init path is quoted through env vars because node-pty backslash-escapes literal argv quotes that cmd.exe cannot read. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Strip inherited CMDER_CONFIGURED/CMDER_INIT_* so Orca launched from a Cmder console still runs init.bat in new panes. - SSH relay on Windows spawns cmd.exe + init.bat for the `cmder` override instead of trying to exec a file named `cmder` (fresh spawn and revive). - Onboarding keeps a saved `cmder` default instead of resetting to PowerShell. - New Settings > Windows Shell > Cmder Folder (terminalWindowsCmderPath); empty auto-detects. Carried to the daemon as ORCA_CMDER_ROOT and stripped before the shell sees it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Auto-detection (CMDER_ROOT, then standard install dirs) covers the common setups, so the extra Settings row was noise. terminalWindowsCmderPath stays as a hidden override and is still honored by every spawn path. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Drop a carried ORCA_CMDER_ROOT when the Cmder folder setting is cleared. - Resolve the relay Cmder root from the pane spawn env, not only the relay process env. - Report cmderAvailable through the SSH preflight so Windows SSH hosts offer Cmder. - Add a Cmder card to onboarding, disabled when a saved Cmder default is not installed. - Revert formatting-only edits in app.ts and runtime-api.ts. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
orcad's LocalPtyProvider fallback never sets configuredCmderRoot, so read the setting-carried ORCA_CMDER_ROOT from args.env like the daemon path does. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A remote Cmder pane whose CMDER_ROOT came only with its spawn request revived as plain cmd.exe, because serialize() did not save the root. Store it with the pane and feed it back as CMDER_ROOT on revive; discovery still requires vendor\init.bat to exist there. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
58508c3 to
2f32f25
Compare

ELI5
Many Windows developers use Cmder: the normal Command Prompt plus a setup script that adds a git-aware prompt, better line editing (Clink), Unix tools and personal aliases. Orca could only open plain Command Prompt, so all of that was missing. This PR adds Cmder as a shell you can pick for Orca terminals on Windows.
What Changed
Before: the Windows shell choices were PowerShell, Command Prompt, Git Bash and WSL. Cmder users got plain cmd.exe with no aliases, prompt or Clink.
After: when Cmder is installed, Cmder appears in Settings → Terminal → Windows Shell, in the first-run onboarding shell step, in the new-tab "+" menu, and as
orca terminal create --shell cmder. This also works on a Windows machine reached over SSH when that machine has Cmder. A Cmder terminal opens in the project folder with Cmder fully set up. If Cmder is missing, the pane quietly falls back to plain cmd instead of failing to open. If Cmder was saved as the default and later uninstalled, the option stays visible but disabled (as Git Bash does) so the user can see what is selected and change it.Mechanism:
cmderjoins the existing allow-list (src/shared/windows-terminal-shell.ts), so the CLI, theterminal.createRPC and the SSH relay all accept it from one place. Commands typed into it are quoted as cmd.src/main/cmder.tsfinds the install: an optional hidden setting (terminalWindowsCmderPath), thenCMDER_ROOT(set by Cmder's docs and the Scoop package), then standard folders (Program Files,%LOCALAPPDATA%,%USERPROFILE%, Scoop,C:\tools,C:\cmder). It is found whenvendor\init.batexists.ORCA_CMDER_ROOTin the spawn environment (cleared when the setting is emptied), so the out-of-process daemon and the in-process fallback resolve the same folder as the main process.cmderintocmd.exe /K "chcp 65001 > nul & call <init.bat> & …", reusing the existing cmd.exe launch builder (resolveWindowsShellLaunchArgs).init.batpath reaches cmd.exe through environment variables (%ORCA_CMDER_INIT_QUOTE%%ORCA_CMDER_INIT%%ORCA_CMDER_INIT_QUOTE%), the same technique the existing Codex preflight uses, because node-pty backslash-escapes literal quotes in argv and cmd.exe cannot read them. This keeps install paths with spaces working without putting user text on the command line.CMDER_CONFIGURED/CMDER_INIT_*are cleared first. Otherwise, when Orca itself is launched from a Cmder console,init.batsees them and skips its setup.cmder:isAvailableIPC andhost.cmder.isAvailableRPC) decides whether Settings, onboarding and the "+" menu show Cmder. For SSH, the relay's existing Windows capability check (preflight.detectWindowsTerminalCapabilities) now also reportscmderAvailable. The field is optional everywhere, so older hosts and relays simply report no Cmder.cmderto cmd.exe plusinit.batfor both new spawns and revived panes, instead of trying to run a program namedcmder. It finds Cmder using that host's own environment, including aCMDER_ROOTpassed with the pane.Why
AutoRunregistry key: AutoRun applies to every cmd.exe on the machine (scripts, build tools, CI helpers), which is invasive and breaks things. Scoping the setup to Orca's own panes avoids that.\", which cmd.exe doesn't understand. The env-var approach is already proven in this file for the Codex preflight.CMDER_ROOTplus standard folders covered every setup we tried, so a visible field was noise. The hidden setting remains for unusual installs. It applies to this machine only; a remote Windows host finds its own Cmder.Linked Issue
Fixes #22461
Visual Proof
Settings → Terminal → Windows Shell, on a machine with Cmder installed.
Before: PowerShell, Command Prompt and Git Bash only.
After: Cmder appears as an extra option (selected here). It is only shown when Cmder is installed (or already saved as the default); no other layout or style changes.
The new-tab "+" menu and the onboarding shell step list Cmder under the same rule. Behaviour is also covered by a real launch test:
src/main/cmder.smoke.node-pty.test.tsstarts a real terminal with the same launch args and assertsinit.batran and the working folder was kept (runs only when Cmder is installed).Testing
Tested on Windows 11 (LTSC 2024, build 26100) with Cmder 1.3.25 at
C:\programs\cmder,CMDER_ROOTset. Not tested on macOS/Linux (the feature is Windows-only and every new code path is guarded byprocess.platform === 'win32'). SSH was exercised only through unit tests of the relay launch config, not against a live Windows SSH host.pnpm build:unpacksucceeds, including the mobile web bundle.src/main/cmder.test.ts: discovery order, quoting/trailing separators, platform guard, env setup, clearing inherited Cmder state, dropping a stale carried folder when the setting is cleared.windows-shell-args.test.ts: the exact/Kchain with Cmder init plus a startup command.local-pty-provider-windows-shell-launch.test.ts:cmderdefault spawns cmd.exe withinit.batbefore the Codex preflight, with the right env; the in-process fallback honours the carriedORCA_CMDER_ROOT.pty-shell-launch.test.ts(relay):cmdermaps to cmd.exe with a valid launch config; on Windows, a pane-suppliedCMDER_ROOTresolves to the realinit.batargs.preflight-handler.test.ts(relay): the SSH Windows capability check reportscmderAvailable.windows-terminal-capabilities.test.ts: the local probe reports Cmder; results keep their exact shape.windows-terminal-shell.test.ts: allow-list includescmder.cmder.smoke.node-pty.test.ts: real terminal launch (skips when Cmder isn't installed).Checks run locally: typecheck passes;
oxlintclean on changed files;pnpm run check:code-quality:changedpasses (design system, React Doctor, casting rationale);generate:rpc-params-catalogrerun for the new RPC. 274 related test files (1,984 tests) pass.Some suites (for example
src/main/ipc/pty,host-capabilities,provider-dispatch) fail to load on this Windows machine because of vite SSR temp-file EPERM errors; they fail the same way on an untouchedmaincheckout, so I've left that to CI.AI Disclosure
Written with Claude Code (Claude Opus 5.5), reviewed and tested by me.
Review
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
init.batpath travels only through environment variables. The only new input is a local setting (hidden) orCMDER_ROOT, i.e. the same trust as a custom shell path. The new probe answers yes/no only.win32, and non-Windows callers getnull/no-op.host.cmder.isAvailableis added to the mobile allow-list; clients treat a missing method as "no Cmder", andcmderAvailableis optional, so old hosts and new clients (and the reverse) keep working.Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)🤖 Generated with Claude Code