fix: Windows terminal fallback defaults to PowerShell 7 instead of legacy PS 5.1

Fixes two bugs causing Windows users with PS7 configured to get legacy
PowerShell 5.1, resulting in UTF-8 encoding issues (mojibake):

1. TerminalProcess.ts: Fix incorrect VS Code config API call that always
   returned null. Changed from getConfiguration("terminal.integrated.defaultProfile")
   .get("windows") to getConfiguration("terminal.integrated").get("defaultProfile.windows").

2. shell.ts: Change PowerShell fallback from legacy PS 5.1 to PS 7 when
   profile name includes "powershell" but has no explicit path or source,
   since VS Code auto-discovers PS7 profiles without those properties.

Closes #11958
This commit is contained in:
Roo Code 2026-03-19 09:33:58 +00:00
parent 137d3f4fd8
commit 1a2c45cba8
3 changed files with 7 additions and 6 deletions

View file

@ -97,8 +97,8 @@ export class TerminalProcess extends BaseTerminalProcess {
// Execute command
const defaultWindowsShellProfile = vscode.workspace
.getConfiguration("terminal.integrated.defaultProfile")
.get("windows")
.getConfiguration("terminal.integrated")
.get<string>("defaultProfile.windows")
const isPowerShell =
process.platform === "win32" &&

View file

@ -139,11 +139,11 @@ describe("Shell Detection Tests", () => {
expect(getShell()).toBe("C:\\Program Files\\PowerShell\\7\\pwsh.exe")
})
it("falls back to legacy PowerShell if profile includes 'powershell' but no path/source", () => {
it("falls back to PowerShell 7 if profile includes 'powershell' but no path/source", () => {
mockVsCodeConfig("windows", "PowerShell", {
PowerShell: {},
})
expect(getShell()).toBe("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe")
expect(getShell()).toBe("C:\\Program Files\\PowerShell\\7\\pwsh.exe")
})
it("uses WSL bash when profile indicates WSL source", () => {

View file

@ -205,8 +205,9 @@ function getWindowsShellFromVSCode(): string | null {
// If the profile is sourced from PowerShell, assume the newest
return SHELL_PATHS.POWERSHELL_7
}
// Otherwise, assume legacy Windows PowerShell
return SHELL_PATHS.POWERSHELL_LEGACY
// Otherwise, default to PowerShell 7 (modern) since VS Code auto-discovers
// PS7 profiles without setting an explicit path or source property
return SHELL_PATHS.POWERSHELL_7
}
// If there's a specific path, return that immediately