fix(vscode): compare workspace folders through the shared path helper

The add-folder dedup normalized the drive letter to uppercase on one side and compared it with Uri.fsPath, which VS Code lowercases again. On Windows an already-open folder therefore never matched and was re-added. Uses pathsEqualWithNormalizedDriveLetter so both sides normalize.
This commit is contained in:
Bohdan Triapitsyn
2026-09-05 14:47:10 +03:00
parent 6c3e51956a
commit 904334de88
+4 -4
View File
@@ -10,7 +10,7 @@ import { credentialStatus, deleteCredential, importCursorCredential, normalizeCr
import { getSessionActivitySnapshot } from './sessionActivityWatcher';
import { getOpenCodeUpgradeStatus, upgradeManagedOpenCode } from './opencode-upgrade-runtime';
import { buildDeferredRestartResponse } from './config-mutation-response';
import { normalizeWindowsDriveLetter } from './pathUtils';
import { normalizeWindowsDriveLetter, pathsEqualWithNormalizedDriveLetter } from './pathUtils';
import { resolveWorkspaceFolders } from './workspaceResolver';
import type { BridgeContext, BridgeResponse } from './bridge';
@@ -608,10 +608,10 @@ export async function handleSystemBridgeMessage(
}
const folders = vscode.workspace.workspaceFolders ?? [];
const uri = vscode.Uri.file(normalizeWindowsDriveLetter(targetPath.trim()));
// VS Code reports workspace folder paths with lowercase Windows drive
// letters (see pathUtils), so normalize both sides before comparing.
// `Uri.fsPath` lowercases the Windows drive letter again, so both sides
// have to go through the shared comparison (see pathUtils).
const alreadyAdded = folders.some(
(folder) => normalizeWindowsDriveLetter(folder.uri.fsPath) === uri.fsPath,
(folder) => pathsEqualWithNormalizedDriveLetter(folder.uri.fsPath, uri.fsPath),
);
if (!alreadyAdded) {
const updated = await vscode.workspace.updateWorkspaceFolders(folders.length, null, { uri });