| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import * as vscode from "vscode"
- import { WebviewMessage } from "../../shared/WebviewMessage"
- import { defaultModeSlug, getModeBySlug, getGroupName } from "../../shared/modes"
- import { buildApiHandler } from "../../api"
- import { SYSTEM_PROMPT } from "../prompts/system"
- import { MultiSearchReplaceDiffStrategy } from "../diff/strategies/multi-search-replace"
- import { Package } from "../../shared/package"
- import { ClineProvider } from "./ClineProvider"
- export const generateSystemPrompt = async (provider: ClineProvider, message: WebviewMessage) => {
- const {
- apiConfiguration,
- customModePrompts,
- customInstructions,
- browserViewportSize,
- mcpEnabled,
- experiments,
- browserToolEnabled,
- language,
- enableSubfolderRules,
- } = await provider.getState()
- const diffStrategy = new MultiSearchReplaceDiffStrategy()
- const cwd = provider.cwd
- const mode = message.mode ?? defaultModeSlug
- const customModes = await provider.customModesManager.getCustomModes()
- const rooIgnoreInstructions = provider.getCurrentTask()?.rooIgnoreController?.getInstructions()
- // Determine if browser tools can be used based on model support, mode, and user settings
- let modelInfo: any = undefined
- // Create a temporary API handler to check if the model supports browser capability
- // This avoids relying on an active Cline instance which might not exist during preview
- try {
- const tempApiHandler = buildApiHandler(apiConfiguration)
- modelInfo = tempApiHandler.getModel().info
- } catch (error) {
- console.error("Error checking if model supports browser capability:", error)
- }
- // Check if the current mode includes the browser tool group
- const modeConfig = getModeBySlug(mode, customModes)
- const modeSupportsBrowser = modeConfig?.groups.some((group) => getGroupName(group) === "browser") ?? false
- // Check if model supports browser capability (images)
- const modelSupportsBrowser = modelInfo && (modelInfo as any)?.supportsImages === true
- // Only enable browser tools if the model supports it, the mode includes browser tools,
- // and browser tools are enabled in settings
- const canUseBrowserTool = modelSupportsBrowser && modeSupportsBrowser && (browserToolEnabled ?? true)
- const systemPrompt = await SYSTEM_PROMPT(
- provider.context,
- cwd,
- canUseBrowserTool,
- mcpEnabled ? provider.getMcpHub() : undefined,
- diffStrategy,
- browserViewportSize ?? "900x600",
- mode,
- customModePrompts,
- customModes,
- customInstructions,
- experiments,
- language,
- rooIgnoreInstructions,
- {
- todoListEnabled: apiConfiguration?.todoListEnabled ?? true,
- useAgentRules: vscode.workspace.getConfiguration(Package.name).get<boolean>("useAgentRules") ?? true,
- enableSubfolderRules: enableSubfolderRules ?? false,
- newTaskRequireTodos: vscode.workspace
- .getConfiguration(Package.name)
- .get<boolean>("newTaskRequireTodos", false),
- isStealthModel: modelInfo?.isStealthModel,
- },
- undefined, // todoList
- undefined, // modelId
- provider.getSkillsManager(),
- )
- return systemPrompt
- }
|