Skip to content

Commit 85122de

Browse files
KJ7LNWEric Wheeler
authored andcommitted
feat: add VSCode terminal environment inheritance setting (RooCodeInc#2862)
Co-authored-by: Eric Wheeler <[email protected]>
1 parent 41e7b6e commit 85122de

File tree

20 files changed

+450
-133
lines changed

20 files changed

+450
-133
lines changed

src/core/webview/webviewMessageHandler.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,37 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
592592
await updateGlobalState("fuzzyMatchThreshold", message.value)
593593
await provider.postStateToWebview()
594594
break
595+
case "updateVSCodeSetting": {
596+
// Allowlist of VSCode settings that can be updated
597+
// Add new settings here when needed for future expansion
598+
const ALLOWED_VSCODE_SETTINGS = ["terminal.integrated.inheritEnv"] as const
599+
600+
if (message.setting && message.value !== undefined) {
601+
if (!ALLOWED_VSCODE_SETTINGS.includes(message.setting as (typeof ALLOWED_VSCODE_SETTINGS)[number])) {
602+
provider.log(`Attempted to update restricted VSCode setting: ${message.setting}`)
603+
vscode.window.showErrorMessage(`Cannot update restricted VSCode setting: ${message.setting}`)
604+
break
605+
}
606+
await vscode.workspace.getConfiguration().update(message.setting, message.value, true)
607+
}
608+
break
609+
}
610+
case "getVSCodeSetting":
611+
if (message.setting) {
612+
try {
613+
const value = vscode.workspace.getConfiguration().get(message.setting)
614+
await provider.postMessageToWebview({ type: "vsCodeSetting", setting: message.setting, value })
615+
} catch (error) {
616+
console.error(`Failed to get VSCode setting ${message.setting}:`, error)
617+
await provider.postMessageToWebview({
618+
type: "vsCodeSetting",
619+
setting: message.setting,
620+
error: `Failed to get setting: ${error.message}`,
621+
value: undefined,
622+
})
623+
}
624+
}
625+
break
595626
case "alwaysApproveResubmit":
596627
await updateGlobalState("alwaysApproveResubmit", message.bool ?? false)
597628
await provider.postStateToWebview()

src/shared/ExtensionMessage.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export interface ExtensionMessage {
6868
| "acceptInput"
6969
| "setHistoryPreviewCollapsed"
7070
| "commandExecutionStatus"
71+
| "vsCodeSetting"
7172
text?: string
7273
action?:
7374
| "chatButtonClicked"
@@ -104,6 +105,9 @@ export interface ExtensionMessage {
104105
promptText?: string
105106
results?: { path: string; type: "file" | "folder"; label?: string }[]
106107
error?: string
108+
setting?: string
109+
value?: any
110+
vscodeSettingValue?: unknown
107111
}
108112

109113
export type ExtensionState = Pick<

src/shared/WebviewMessage.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ export interface WebviewMessage {
5151
| "openFile"
5252
| "openMention"
5353
| "cancelTask"
54+
| "updateVSCodeSetting"
55+
| "getVSCodeSetting"
56+
| "vsCodeSetting"
5457
| "alwaysAllowBrowser"
5558
| "alwaysAllowMcp"
5659
| "alwaysAllowModeSwitch"
@@ -134,6 +137,7 @@ export interface WebviewMessage {
134137
images?: string[]
135138
bool?: boolean
136139
value?: number
140+
vscodeSettingValue?: unknown
137141
commands?: string[]
138142
audioType?: AudioType
139143
serverName?: string
@@ -145,6 +149,7 @@ export interface WebviewMessage {
145149
dataUrls?: string[]
146150
values?: Record<string, any>
147151
query?: string
152+
setting?: string
148153
slug?: string
149154
modeConfig?: ModeConfig
150155
timeout?: number

0 commit comments

Comments
 (0)