import { getExecuteCommandDescription } from "./execute-command" import { getReadFileDescription } from "./read-file" import { getWriteToFileDescription } from "./write-to-file" import { getSearchFilesDescription } from "./search-files" import { getListFilesDescription } from "./list-files" import { getListCodeDefinitionNamesDescription } from "./list-code-definition-names" import { getBrowserActionDescription } from "./browser-action" import { getAskFollowupQuestionDescription } from "./ask-followup-question" import { getAttemptCompletionDescription } from "./attempt-completion" import { getUseMcpToolDescription } from "./use-mcp-tool" import { getAccessMcpResourceDescription } from "./access-mcp-resource" import { DiffStrategy } from "../../diff/DiffStrategy" import { McpHub } from "../../../services/mcp/McpHub" import { Mode, ToolName, getModeConfig, isToolAllowedForMode } from "../../../shared/modes" import { ToolArgs } from "./types" // Map of tool names to their description functions const toolDescriptionMap: Record string | undefined> = { execute_command: (args) => getExecuteCommandDescription(args), read_file: (args) => getReadFileDescription(args), write_to_file: (args) => getWriteToFileDescription(args), search_files: (args) => getSearchFilesDescription(args), list_files: (args) => getListFilesDescription(args), list_code_definition_names: (args) => getListCodeDefinitionNamesDescription(args), browser_action: (args) => getBrowserActionDescription(args), ask_followup_question: () => getAskFollowupQuestionDescription(), attempt_completion: () => getAttemptCompletionDescription(), use_mcp_tool: (args) => getUseMcpToolDescription(args), access_mcp_resource: (args) => getAccessMcpResourceDescription(args), apply_diff: (args) => args.diffStrategy ? args.diffStrategy.getToolDescription({ cwd: args.cwd, toolOptions: args.toolOptions }) : "", } export function getToolDescriptionsForMode( mode: Mode, cwd: string, supportsComputerUse: boolean, diffStrategy?: DiffStrategy, browserViewportSize?: string, mcpHub?: McpHub, ): string { const config = getModeConfig(mode) const args: ToolArgs = { cwd, supportsComputerUse, diffStrategy, browserViewportSize, mcpHub, } // Map tool descriptions in the exact order specified in the mode's tools array const descriptions = config.tools.map(([toolName, toolOptions]) => { const descriptionFn = toolDescriptionMap[toolName] if (!descriptionFn || !isToolAllowedForMode(toolName as ToolName, mode)) { return undefined } return descriptionFn({ ...args, toolOptions, }) }) return `# Tools\n\n${descriptions.filter(Boolean).join("\n\n")}` } // Export individual description functions for backward compatibility export { getExecuteCommandDescription, getReadFileDescription, getWriteToFileDescription, getSearchFilesDescription, getListFilesDescription, getListCodeDefinitionNamesDescription, getBrowserActionDescription, getAskFollowupQuestionDescription, getAttemptCompletionDescription, getUseMcpToolDescription, getAccessMcpResourceDescription, }