Skip to content

Commit e908d8b

Browse files
committed
feat: default browser tool OFF by default and hide Browser auto-approve when disabled; fix dropdown deps
1 parent d9ed33d commit e908d8b

File tree

7 files changed

+43
-20
lines changed

7 files changed

+43
-20
lines changed

src/core/task/Task.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2426,7 +2426,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
24262426
const modelInfo = this.api.getModel().info
24272427
const modelSupportsBrowser = (modelInfo as any)?.supportsImages === true
24282428

2429-
const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? true)
2429+
const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? false)
24302430

24312431
return SYSTEM_PROMPT(
24322432
provider.context,

src/core/webview/ClineProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1911,7 +1911,7 @@ export class ClineProvider
19111911
maxOpenTabsContext: maxOpenTabsContext ?? 20,
19121912
maxWorkspaceFiles: maxWorkspaceFiles ?? 200,
19131913
cwd,
1914-
browserToolEnabled: browserToolEnabled ?? true,
1914+
browserToolEnabled: browserToolEnabled ?? false,
19151915
telemetrySetting,
19161916
telemetryKey,
19171917
machineId,
@@ -2133,7 +2133,7 @@ export class ClineProvider
21332133
maxOpenTabsContext: stateValues.maxOpenTabsContext ?? 20,
21342134
maxWorkspaceFiles: stateValues.maxWorkspaceFiles ?? 200,
21352135
openRouterUseMiddleOutTransform: stateValues.openRouterUseMiddleOutTransform,
2136-
browserToolEnabled: stateValues.browserToolEnabled ?? true,
2136+
browserToolEnabled: stateValues.browserToolEnabled ?? false,
21372137
telemetrySetting: stateValues.telemetrySetting || "unset",
21382138
showRooIgnoredFiles: stateValues.showRooIgnoredFiles ?? false,
21392139
maxReadFileLine: stateValues.maxReadFileLine ?? -1,

src/core/webview/generateSystemPrompt.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
6464
const modelSupportsBrowser = modelInfo && (modelInfo as any)?.supportsImages === true
6565

6666
// Only enable browser tools if the model supports it, the mode includes browser tools,
67-
// and browser tools are enabled in settings
68-
const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? true)
67+
// and browser tools are enabled in settings (default to OFF when unset)
68+
const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? false)
6969

7070
const systemPrompt = await SYSTEM_PROMPT(
7171
provider.context,

src/core/webview/webviewMessageHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1562,7 +1562,7 @@ export const webviewMessageHandler = async (
15621562
await provider.postStateToWebview()
15631563
break
15641564
case "browserToolEnabled":
1565-
await updateGlobalState("browserToolEnabled", message.bool ?? true)
1565+
await updateGlobalState("browserToolEnabled", message.bool ?? false)
15661566
await provider.postStateToWebview()
15671567
break
15681568
case "language":

webview-ui/src/components/chat/AutoApproveDropdown.tsx

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
2323

2424
const {
2525
autoApprovalEnabled,
26+
browserToolEnabled,
2627
setAutoApprovalEnabled,
2728
alwaysApproveResubmit,
2829
setAlwaysAllowReadOnly,
@@ -109,23 +110,31 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
109110
)
110111

111112
const handleSelectAll = React.useCallback(() => {
112-
// Enable all options
113-
Object.keys(autoApproveSettingsConfig).forEach((key) => {
113+
// Enable all visible options based on current browser tool setting
114+
const keys = browserToolEnabled
115+
? Object.keys(autoApproveSettingsConfig)
116+
: Object.keys(autoApproveSettingsConfig).filter((k) => k !== "alwaysAllowBrowser")
117+
118+
keys.forEach((key) => {
114119
onAutoApproveToggle(key as AutoApproveSetting, true)
115120
})
116121
// Enable master auto-approval
117122
if (!autoApprovalEnabled) {
118123
setAutoApprovalEnabled(true)
119124
vscode.postMessage({ type: "autoApprovalEnabled", bool: true })
120125
}
121-
}, [onAutoApproveToggle, autoApprovalEnabled, setAutoApprovalEnabled])
126+
}, [onAutoApproveToggle, autoApprovalEnabled, setAutoApprovalEnabled, browserToolEnabled])
122127

123128
const handleSelectNone = React.useCallback(() => {
124-
// Disable all options
125-
Object.keys(autoApproveSettingsConfig).forEach((key) => {
129+
// Disable all visible options based on current browser tool setting
130+
const keys = browserToolEnabled
131+
? Object.keys(autoApproveSettingsConfig)
132+
: Object.keys(autoApproveSettingsConfig).filter((k) => k !== "alwaysAllowBrowser")
133+
134+
keys.forEach((key) => {
126135
onAutoApproveToggle(key as AutoApproveSetting, false)
127136
})
128-
}, [onAutoApproveToggle])
137+
}, [onAutoApproveToggle, browserToolEnabled])
129138

130139
const handleOpenSettings = React.useCallback(
131140
() =>
@@ -143,21 +152,29 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
143152
// Calculate enabled and total counts as separate properties
144153
const settingsArray = Object.values(autoApproveSettingsConfig)
145154

155+
// Filter out Browser toggle when browser tool is disabled
156+
const visibleSettingsArray = React.useMemo(
157+
() => settingsArray.filter((s) => browserToolEnabled || s.key !== "alwaysAllowBrowser"),
158+
[settingsArray, browserToolEnabled],
159+
)
160+
161+
const visibleKeys = React.useMemo(() => visibleSettingsArray.map((s) => s.key), [visibleSettingsArray])
162+
146163
const enabledCount = React.useMemo(() => {
147-
return Object.values(toggles).filter((value) => !!value).length
148-
}, [toggles])
164+
return visibleKeys.filter((key) => !!toggles[key as keyof typeof toggles]).length
165+
}, [visibleKeys, toggles])
149166

150167
const totalCount = React.useMemo(() => {
151-
return Object.keys(toggles).length
152-
}, [toggles])
168+
return visibleKeys.length
169+
}, [visibleKeys])
153170

154171
const { effectiveAutoApprovalEnabled } = useAutoApprovalState(toggles, autoApprovalEnabled)
155172

156173
const tooltipText =
157174
!effectiveAutoApprovalEnabled || enabledCount === 0
158175
? t("chat:autoApprove.tooltipManage")
159176
: t("chat:autoApprove.tooltipStatus", {
160-
toggles: settingsArray
177+
toggles: visibleSettingsArray
161178
.filter((setting) => toggles[setting.key])
162179
.map((setting) => t(setting.labelKey))
163180
.join(", "),
@@ -216,7 +233,7 @@ export const AutoApproveDropdown = ({ disabled = false, triggerClassName = "" }:
216233
</p>
217234
</div>
218235
<div className="grid grid-cols-1 min-[340px]:grid-cols-2 gap-x-2 gap-y-2 p-3">
219-
{settingsArray.map(({ key, labelKey, descriptionKey, icon }) => {
236+
{visibleSettingsArray.map(({ key, labelKey, descriptionKey, icon }) => {
220237
const isEnabled = toggles[key]
221238
return (
222239
<StandardTooltip key={key} content={t(descriptionKey)}>

webview-ui/src/components/settings/AutoApproveToggle.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { GlobalSettings } from "@roo-code/types"
33
import { useAppTranslation } from "@/i18n/TranslationContext"
44
import { cn } from "@/lib/utils"
55
import { Button, StandardTooltip } from "@/components/ui"
6+
import { useExtensionState } from "@/context/ExtensionStateContext"
67

78
type AutoApproveToggles = Pick<
89
GlobalSettings,
@@ -107,10 +108,15 @@ type AutoApproveToggleProps = AutoApproveToggles & {
107108

108109
export const AutoApproveToggle = ({ onToggle, ...props }: AutoApproveToggleProps) => {
109110
const { t } = useAppTranslation()
111+
const { browserToolEnabled } = useExtensionState()
112+
113+
const visibleConfigs = Object.values(autoApproveSettingsConfig).filter(
114+
(cfg) => browserToolEnabled || cfg.key !== "alwaysAllowBrowser",
115+
)
110116

111117
return (
112118
<div className={cn("flex flex-row flex-wrap gap-2 py-2")}>
113-
{Object.values(autoApproveSettingsConfig).map(({ key, descriptionKey, labelKey, icon, testId }) => (
119+
{visibleConfigs.map(({ key, descriptionKey, labelKey, icon, testId }) => (
114120
<StandardTooltip key={key} content={t(descriptionKey || "")}>
115121
<Button
116122
variant={props[key] ? "default" : "outline"}

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
227227
maxOpenTabsContext: 20,
228228
maxWorkspaceFiles: 200,
229229
cwd: "",
230-
browserToolEnabled: true,
230+
browserToolEnabled: false,
231231
telemetrySetting: "unset",
232232
showRooIgnoredFiles: true, // Default to showing .rooignore'd files with lock symbol (current behavior).
233233
renderContext: "sidebar",

0 commit comments

Comments
 (0)