ExtensionMessage.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. // 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'
  2. import { ApiConfiguration, ApiProvider, ModelInfo } from "./api"
  3. import { HistoryItem } from "./HistoryItem"
  4. import { McpServer } from "./mcp"
  5. import { GitCommit } from "../utils/git"
  6. import { Mode, CustomModePrompts, ModeConfig } from "./modes"
  7. import { CustomSupportPrompts } from "./support-prompt"
  8. import { ExperimentId } from "./experiments"
  9. import { CheckpointStorage } from "./checkpoints"
  10. import { TelemetrySetting } from "./TelemetrySetting"
  11. export interface LanguageModelChatSelector {
  12. vendor?: string
  13. family?: string
  14. version?: string
  15. id?: string
  16. }
  17. // webview will hold state
  18. export interface ExtensionMessage {
  19. type:
  20. | "action"
  21. | "state"
  22. | "selectedImages"
  23. | "ollamaModels"
  24. | "lmStudioModels"
  25. | "theme"
  26. | "workspaceUpdated"
  27. | "invoke"
  28. | "partialMessage"
  29. | "openRouterModels"
  30. | "glamaModels"
  31. | "unboundModels"
  32. | "requestyModels"
  33. | "openAiModels"
  34. | "mcpServers"
  35. | "enhancedPrompt"
  36. | "commitSearchResults"
  37. | "listApiConfig"
  38. | "vsCodeLmModels"
  39. | "vsCodeLmApiAvailable"
  40. | "requestVsCodeLmModels"
  41. | "updatePrompt"
  42. | "systemPrompt"
  43. | "autoApprovalEnabled"
  44. | "updateCustomMode"
  45. | "deleteCustomMode"
  46. | "currentCheckpointUpdated"
  47. | "showHumanRelayDialog"
  48. | "humanRelayResponse"
  49. | "humanRelayCancel"
  50. | "browserToolEnabled"
  51. text?: string
  52. action?:
  53. | "chatButtonClicked"
  54. | "mcpButtonClicked"
  55. | "settingsButtonClicked"
  56. | "historyButtonClicked"
  57. | "promptsButtonClicked"
  58. | "didBecomeVisible"
  59. invoke?: "sendMessage" | "primaryButtonClick" | "secondaryButtonClick" | "setChatBoxMessage"
  60. state?: ExtensionState
  61. images?: string[]
  62. ollamaModels?: string[]
  63. lmStudioModels?: string[]
  64. vsCodeLmModels?: { vendor?: string; family?: string; version?: string; id?: string }[]
  65. filePaths?: string[]
  66. openedTabs?: Array<{
  67. label: string
  68. isActive: boolean
  69. path?: string
  70. }>
  71. partialMessage?: ClineMessage
  72. openRouterModels?: Record<string, ModelInfo>
  73. glamaModels?: Record<string, ModelInfo>
  74. unboundModels?: Record<string, ModelInfo>
  75. requestyModels?: Record<string, ModelInfo>
  76. openAiModels?: string[]
  77. mcpServers?: McpServer[]
  78. commits?: GitCommit[]
  79. listApiConfig?: ApiConfigMeta[]
  80. mode?: Mode
  81. customMode?: ModeConfig
  82. slug?: string
  83. }
  84. export interface ApiConfigMeta {
  85. id: string
  86. name: string
  87. apiProvider?: ApiProvider
  88. }
  89. export interface ExtensionState {
  90. version: string
  91. clineMessages: ClineMessage[]
  92. taskHistory: HistoryItem[]
  93. shouldShowAnnouncement: boolean
  94. apiConfiguration?: ApiConfiguration
  95. currentApiConfigName?: string
  96. listApiConfigMeta?: ApiConfigMeta[]
  97. customInstructions?: string
  98. customModePrompts?: CustomModePrompts
  99. customSupportPrompts?: CustomSupportPrompts
  100. alwaysAllowReadOnly?: boolean
  101. alwaysAllowWrite?: boolean
  102. alwaysAllowExecute?: boolean
  103. alwaysAllowBrowser?: boolean
  104. alwaysAllowMcp?: boolean
  105. alwaysApproveResubmit?: boolean
  106. alwaysAllowModeSwitch?: boolean
  107. alwaysAllowSubtasks?: boolean
  108. browserToolEnabled?: boolean
  109. requestDelaySeconds: number
  110. rateLimitSeconds: number // Minimum time between successive requests (0 = disabled)
  111. uriScheme?: string
  112. currentTaskItem?: HistoryItem
  113. allowedCommands?: string[]
  114. soundEnabled?: boolean
  115. soundVolume?: number
  116. diffEnabled?: boolean
  117. enableCheckpoints: boolean
  118. checkpointStorage: CheckpointStorage
  119. browserViewportSize?: string
  120. screenshotQuality?: number
  121. remoteBrowserHost?: string
  122. fuzzyMatchThreshold?: number
  123. preferredLanguage: string
  124. writeDelayMs: number
  125. terminalOutputLimit?: number
  126. mcpEnabled: boolean
  127. enableMcpServerCreation: boolean
  128. mode: Mode
  129. modeApiConfigs?: Record<Mode, string>
  130. enhancementApiConfigId?: string
  131. experiments: Record<ExperimentId, boolean> // Map of experiment IDs to their enabled state
  132. autoApprovalEnabled?: boolean
  133. customModes: ModeConfig[]
  134. toolRequirements?: Record<string, boolean> // Map of tool names to their requirements (e.g. {"apply_diff": true} if diffEnabled)
  135. maxOpenTabsContext: number // Maximum number of VSCode open tabs to include in context (0-500)
  136. cwd?: string // Current working directory
  137. telemetrySetting: TelemetrySetting
  138. telemetryKey?: string
  139. machineId?: string
  140. showRooIgnoredFiles: boolean // Whether to show .rooignore'd files in listings
  141. }
  142. export interface ClineMessage {
  143. ts: number
  144. type: "ask" | "say"
  145. ask?: ClineAsk
  146. say?: ClineSay
  147. text?: string
  148. images?: string[]
  149. partial?: boolean
  150. reasoning?: string
  151. conversationHistoryIndex?: number
  152. checkpoint?: Record<string, unknown>
  153. progressStatus?: ToolProgressStatus
  154. }
  155. export type ClineAsk =
  156. | "followup"
  157. | "command"
  158. | "command_output"
  159. | "completion_result"
  160. | "tool"
  161. | "api_req_failed"
  162. | "resume_task"
  163. | "resume_completed_task"
  164. | "mistake_limit_reached"
  165. | "browser_action_launch"
  166. | "use_mcp_server"
  167. | "finishTask"
  168. export type ClineSay =
  169. | "task"
  170. | "error"
  171. | "api_req_started"
  172. | "api_req_finished"
  173. | "api_req_retried"
  174. | "api_req_retry_delayed"
  175. | "api_req_deleted"
  176. | "text"
  177. | "reasoning"
  178. | "completion_result"
  179. | "user_feedback"
  180. | "user_feedback_diff"
  181. | "command_output"
  182. | "tool"
  183. | "shell_integration_warning"
  184. | "browser_action"
  185. | "browser_action_result"
  186. | "command"
  187. | "mcp_server_request_started"
  188. | "mcp_server_response"
  189. | "new_task_started"
  190. | "new_task"
  191. | "checkpoint_saved"
  192. | "rooignore_error"
  193. export interface ClineSayTool {
  194. tool:
  195. | "editedExistingFile"
  196. | "appliedDiff"
  197. | "newFileCreated"
  198. | "readFile"
  199. | "listFilesTopLevel"
  200. | "listFilesRecursive"
  201. | "listCodeDefinitionNames"
  202. | "searchFiles"
  203. | "switchMode"
  204. | "newTask"
  205. | "finishTask"
  206. path?: string
  207. diff?: string
  208. content?: string
  209. regex?: string
  210. filePattern?: string
  211. mode?: string
  212. reason?: string
  213. }
  214. // must keep in sync with system prompt
  215. export const browserActions = ["launch", "click", "type", "scroll_down", "scroll_up", "close"] as const
  216. export type BrowserAction = (typeof browserActions)[number]
  217. export interface ClineSayBrowserAction {
  218. action: BrowserAction
  219. coordinate?: string
  220. text?: string
  221. }
  222. export type BrowserActionResult = {
  223. screenshot?: string
  224. logs?: string
  225. currentUrl?: string
  226. currentMousePosition?: string
  227. }
  228. export interface ClineAskUseMcpServer {
  229. serverName: string
  230. type: "use_mcp_tool" | "access_mcp_resource"
  231. toolName?: string
  232. arguments?: string
  233. uri?: string
  234. }
  235. export interface ClineApiReqInfo {
  236. request?: string
  237. tokensIn?: number
  238. tokensOut?: number
  239. cacheWrites?: number
  240. cacheReads?: number
  241. cost?: number
  242. cancelReason?: ClineApiReqCancelReason
  243. streamingFailedMessage?: string
  244. }
  245. // Human relay related message types
  246. export interface ShowHumanRelayDialogMessage {
  247. type: "showHumanRelayDialog"
  248. requestId: string
  249. promptText: string
  250. }
  251. export interface HumanRelayResponseMessage {
  252. type: "humanRelayResponse"
  253. requestId: string
  254. text: string
  255. }
  256. export interface HumanRelayCancelMessage {
  257. type: "humanRelayCancel"
  258. requestId: string
  259. }
  260. export type ClineApiReqCancelReason = "streaming_failed" | "user_cancelled"
  261. export type ToolProgressStatus = {
  262. icon?: string
  263. text?: string
  264. }