Skip to content

Commit f964953

Browse files
committed
refactor(browser): centralize canUseBrowserTool computation; add deprecation TODO for supportsComputerUse; remove stray comment in OpenRouter test
1 parent 0173f06 commit f964953

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

src/api/providers/fetchers/__tests__/openrouter.spec.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ describe("OpenRouter API", () => {
5050

5151
expect(ourCachingModels.sort()).toEqual(expectedCachingModels)
5252

53-
// Computer-use specific assertions removed. We no longer track supportsComputerUse.
54-
5553
expect(
5654
Object.entries(models)
5755
.filter(([_, model]) => model.supportsReasoningEffort)

src/core/task/Task.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import { ClineApiReqCancelReason, ClineApiReqInfo } from "../../shared/Extension
5353
import { getApiMetrics, hasTokenUsageChanged } from "../../shared/getApiMetrics"
5454
import { ClineAskResponse } from "../../shared/WebviewMessage"
5555
import { defaultModeSlug, getModeBySlug, getGroupName } from "../../shared/modes"
56-
import { modelSupportsBrowserCapability } from "../../shared/browserCapability"
56+
import { computeCanUseBrowserTool } from "../../shared/browserCapability"
5757
import { DiffStrategy } from "../../shared/tools"
5858
import { EXPERIMENT_IDS, experiments } from "../../shared/experiments"
5959
import { getModelMaxOutputTokens } from "../../shared/api"
@@ -2420,10 +2420,12 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
24202420
const modeConfig = getModeBySlug(mode ?? defaultModeSlug, customModes)
24212421
const modeSupportsBrowser = modeConfig?.groups.some((group) => getGroupName(group) === "browser") ?? false
24222422

2423-
const canUseBrowserTool =
2424-
modelSupportsBrowserCapability(this.api.getModel().info, apiConfiguration) &&
2425-
modeSupportsBrowser &&
2426-
(browserToolEnabled ?? true)
2423+
const canUseBrowserTool = computeCanUseBrowserTool(
2424+
this.api.getModel().info,
2425+
modeSupportsBrowser,
2426+
browserToolEnabled,
2427+
apiConfiguration,
2428+
)
24272429

24282430
return SYSTEM_PROMPT(
24292431
provider.context,

src/core/webview/generateSystemPrompt.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { WebviewMessage } from "../../shared/WebviewMessage"
33
import { defaultModeSlug, getModeBySlug, getGroupName } from "../../shared/modes"
44
import { buildApiHandler } from "../../api"
55
import { experiments as experimentsModule, EXPERIMENT_IDS } from "../../shared/experiments"
6-
import { modelSupportsBrowserCapability } from "../../shared/browserCapability"
6+
import { computeCanUseBrowserTool } from "../../shared/browserCapability"
77

88
import { SYSTEM_PROMPT } from "../prompts/system"
99
import { MultiSearchReplaceDiffStrategy } from "../diff/strategies/multi-search-replace"
@@ -46,14 +46,13 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
4646
const rooIgnoreInstructions = provider.getCurrentTask()?.rooIgnoreController?.getInstructions()
4747

4848
// Determine if browser tools can be used based on model support, mode, and user settings
49-
let modelSupportsBrowser = false
49+
let modelInfo: any = undefined
5050

5151
// Create a temporary API handler to check if the model supports browser capability
5252
// This avoids relying on an active Cline instance which might not exist during preview
5353
try {
5454
const tempApiHandler = buildApiHandler(apiConfiguration)
55-
const info = tempApiHandler.getModel().info
56-
modelSupportsBrowser = modelSupportsBrowserCapability(info, apiConfiguration)
55+
modelInfo = tempApiHandler.getModel().info
5756
} catch (error) {
5857
console.error("Error checking if model supports browser capability:", error)
5958
}
@@ -64,7 +63,12 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
6463

6564
// Only enable browser tools if the model supports it, the mode includes browser tools,
6665
// and browser tools are enabled in settings
67-
const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? true)
66+
const canUseBrowserTool = computeCanUseBrowserTool(
67+
modelInfo,
68+
modeSupportsBrowser,
69+
browserToolEnabled,
70+
apiConfiguration,
71+
)
6872

6973
const systemPrompt = await SYSTEM_PROMPT(
7074
provider.context,

src/shared/browserCapability.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,26 @@ import type { ProviderSettings } from "@roo-code/types"
99
* browser-capable if either:
1010
* - supportsImages === true (new behavior), OR
1111
* - supportsComputerUse === true (legacy behavior present in some providers)
12+
*
13+
* TODO(techdebt): Remove legacy supportsComputerUse path by 2025-12-31.
14+
* - Follow-up: purge provider tables and type usages, then delete this fallback.
1215
*/
1316
export function modelSupportsBrowserCapability(model: ModelInfo, _settings?: ProviderSettings): boolean {
1417
const supportsImages = (model as any)?.supportsImages === true
1518
// Legacy flag may still exist in some model tables or be read from older code paths
1619
const legacyComputerUse = (model as any)?.supportsComputerUse === true
1720
return supportsImages || legacyComputerUse
1821
}
22+
23+
/**
24+
* Compute whether browser tools should be enabled given model capability,
25+
* mode support, and user settings.
26+
*/
27+
export function computeCanUseBrowserTool(
28+
model: ModelInfo,
29+
modeSupportsBrowser: boolean,
30+
browserToolEnabled?: boolean,
31+
settings?: ProviderSettings,
32+
): boolean {
33+
return modelSupportsBrowserCapability(model, settings) && modeSupportsBrowser && (browserToolEnabled ?? true)
34+
}

0 commit comments

Comments
 (0)