// type that represents json data that is sent from extension to webview, called ExtensionMessage and has 'type' enum which can be 'plusButtonClicked' or 'settingsButtonClicked' or 'hello' import { ApiConfiguration, ModelInfo } from "./api" import { HistoryItem } from "./HistoryItem" import { McpServer } from "./mcp" // webview will hold state export interface ExtensionMessage { type: | "action" | "state" | "selectedImages" | "ollamaModels" | "lmStudioModels" | "theme" | "workspaceUpdated" | "invoke" | "partialMessage" | "glamaModels" | "openRouterModels" | "openAiModels" | "mcpServers" | "enhancedPrompt" text?: string action?: | "chatButtonClicked" | "mcpButtonClicked" | "settingsButtonClicked" | "historyButtonClicked" | "didBecomeVisible" invoke?: "sendMessage" | "primaryButtonClick" | "secondaryButtonClick" state?: ExtensionState images?: string[] ollamaModels?: string[] lmStudioModels?: string[] filePaths?: string[] partialMessage?: ClineMessage glamaModels?: Record openRouterModels?: Record openAiModels?: string[] mcpServers?: McpServer[] } export interface ExtensionState { version: string clineMessages: ClineMessage[] taskHistory: HistoryItem[] shouldShowAnnouncement: boolean apiConfiguration?: ApiConfiguration customInstructions?: string alwaysAllowReadOnly?: boolean alwaysAllowWrite?: boolean alwaysAllowExecute?: boolean alwaysAllowBrowser?: boolean alwaysAllowMcp?: boolean uriScheme?: string allowedCommands?: string[] soundEnabled?: boolean soundVolume?: number diffEnabled?: boolean browserViewportSize?: string screenshotQuality?: number fuzzyMatchThreshold?: number preferredLanguage: string writeDelayMs: number terminalOutputLineLimit?: number mcpEnabled: boolean } export interface ClineMessage { ts: number type: "ask" | "say" ask?: ClineAsk say?: ClineSay text?: string images?: string[] partial?: boolean } export type ClineAsk = | "followup" | "command" | "command_output" | "completion_result" | "tool" | "api_req_failed" | "resume_task" | "resume_completed_task" | "mistake_limit_reached" | "browser_action_launch" | "use_mcp_server" export type ClineSay = | "task" | "error" | "api_req_started" | "api_req_finished" | "text" | "completion_result" | "user_feedback" | "user_feedback_diff" | "api_req_retried" | "command_output" | "tool" | "shell_integration_warning" | "browser_action" | "browser_action_result" | "command" | "mcp_server_request_started" | "mcp_server_response" export interface ClineSayTool { tool: | "editedExistingFile" | "appliedDiff" | "newFileCreated" | "readFile" | "listFilesTopLevel" | "listFilesRecursive" | "listCodeDefinitionNames" | "searchFiles" path?: string diff?: string content?: string regex?: string filePattern?: string } // must keep in sync with system prompt export const browserActions = ["launch", "click", "type", "scroll_down", "scroll_up", "close"] as const export type BrowserAction = (typeof browserActions)[number] export interface ClineSayBrowserAction { action: BrowserAction coordinate?: string text?: string } export type BrowserActionResult = { screenshot?: string logs?: string currentUrl?: string currentMousePosition?: string } export interface ClineAskUseMcpServer { serverName: string type: "use_mcp_tool" | "access_mcp_resource" toolName?: string arguments?: string uri?: string } export interface ClineApiReqInfo { request?: string tokensIn?: number tokensOut?: number cacheWrites?: number cacheReads?: number cost?: number cancelReason?: ClineApiReqCancelReason streamingFailedMessage?: string } export type ClineApiReqCancelReason = "streaming_failed" | "user_cancelled"