mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
- Add selection context fields to WebviewMessage and ExtensionMessage types - Implement selection capture in ChatView on component mount - Add backend message handler to capture editor selection with line numbers - Store selection context in Task instance for use in environment details - Include selection context at start of environment details sent to LLM - Automatically clear selection context after use to prevent persistence - Add comprehensive tests for selection context functionality - Convert VSCode 0-based line numbers to 1-based for user-friendly display - Handle both workspace-relative and absolute file paths This allows users to select text in the editor and ask questions like "fix this" or "what does this do" without explicitly pasting code. The selection is automatically included as hidden context for the LLM.
295 lines
7.6 KiB
TypeScript
295 lines
7.6 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import {
|
|
type RooCodeSettings,
|
|
type ProviderSettings,
|
|
type PromptComponent,
|
|
type ModeConfig,
|
|
type InstallMarketplaceItemOptions,
|
|
type MarketplaceItem,
|
|
type ShareVisibility,
|
|
type QueuedMessage,
|
|
marketplaceItemSchema,
|
|
} from "@roo-code/types"
|
|
|
|
import { Mode } from "./modes"
|
|
|
|
export type ClineAskResponse = "yesButtonClicked" | "noButtonClicked" | "messageResponse" | "objectResponse"
|
|
|
|
export type PromptMode = Mode | "enhance"
|
|
|
|
export type AudioType = "notification" | "celebration" | "progress_loop"
|
|
|
|
export interface UpdateTodoListPayload {
|
|
todos: any[]
|
|
}
|
|
|
|
export type EditQueuedMessagePayload = Pick<QueuedMessage, "id" | "text" | "images">
|
|
|
|
export interface WebviewMessage {
|
|
type:
|
|
| "updateTodoList"
|
|
| "deleteMultipleTasksWithIds"
|
|
| "currentApiConfigName"
|
|
| "saveApiConfiguration"
|
|
| "upsertApiConfiguration"
|
|
| "deleteApiConfiguration"
|
|
| "loadApiConfiguration"
|
|
| "loadApiConfigurationById"
|
|
| "renameApiConfiguration"
|
|
| "getListApiConfiguration"
|
|
| "customInstructions"
|
|
| "webviewDidLaunch"
|
|
| "newTask"
|
|
| "askResponse"
|
|
| "terminalOperation"
|
|
| "clearTask"
|
|
| "didShowAnnouncement"
|
|
| "selectImages"
|
|
| "exportCurrentTask"
|
|
| "shareCurrentTask"
|
|
| "showTaskWithId"
|
|
| "deleteTaskWithId"
|
|
| "exportTaskWithId"
|
|
| "importSettings"
|
|
| "exportSettings"
|
|
| "resetState"
|
|
| "flushRouterModels"
|
|
| "requestRouterModels"
|
|
| "requestOpenAiModels"
|
|
| "requestOllamaModels"
|
|
| "requestLmStudioModels"
|
|
| "requestRooModels"
|
|
| "requestVsCodeLmModels"
|
|
| "requestHuggingFaceModels"
|
|
| "openImage"
|
|
| "saveImage"
|
|
| "openFile"
|
|
| "openMention"
|
|
| "cancelTask"
|
|
| "updateVSCodeSetting"
|
|
| "getVSCodeSetting"
|
|
| "vsCodeSetting"
|
|
| "updateCondensingPrompt"
|
|
| "playSound"
|
|
| "playTts"
|
|
| "stopTts"
|
|
| "ttsEnabled"
|
|
| "ttsSpeed"
|
|
| "openKeyboardShortcuts"
|
|
| "openMcpSettings"
|
|
| "openProjectMcpSettings"
|
|
| "restartMcpServer"
|
|
| "refreshAllMcpServers"
|
|
| "toggleToolAlwaysAllow"
|
|
| "toggleToolEnabledForPrompt"
|
|
| "toggleMcpServer"
|
|
| "updateMcpTimeout"
|
|
| "enhancePrompt"
|
|
| "enhancedPrompt"
|
|
| "draggedImages"
|
|
| "deleteMessage"
|
|
| "deleteMessageConfirm"
|
|
| "submitEditedMessage"
|
|
| "editMessageConfirm"
|
|
| "enableMcpServerCreation"
|
|
| "remoteControlEnabled"
|
|
| "taskSyncEnabled"
|
|
| "searchCommits"
|
|
| "setApiConfigPassword"
|
|
| "mode"
|
|
| "updatePrompt"
|
|
| "getSystemPrompt"
|
|
| "copySystemPrompt"
|
|
| "systemPrompt"
|
|
| "enhancementApiConfigId"
|
|
| "autoApprovalEnabled"
|
|
| "updateCustomMode"
|
|
| "deleteCustomMode"
|
|
| "setopenAiCustomModelInfo"
|
|
| "openCustomModesSettings"
|
|
| "checkpointDiff"
|
|
| "checkpointRestore"
|
|
| "deleteMcpServer"
|
|
| "humanRelayResponse"
|
|
| "humanRelayCancel"
|
|
| "codebaseIndexEnabled"
|
|
| "telemetrySetting"
|
|
| "testBrowserConnection"
|
|
| "browserConnectionResult"
|
|
| "searchFiles"
|
|
| "toggleApiConfigPin"
|
|
| "hasOpenedModeSelector"
|
|
| "cloudButtonClicked"
|
|
| "rooCloudSignIn"
|
|
| "cloudLandingPageSignIn"
|
|
| "rooCloudSignOut"
|
|
| "rooCloudManualUrl"
|
|
| "switchOrganization"
|
|
| "condenseTaskContextRequest"
|
|
| "requestIndexingStatus"
|
|
| "startIndexing"
|
|
| "clearIndexData"
|
|
| "indexingStatusUpdate"
|
|
| "indexCleared"
|
|
| "focusPanelRequest"
|
|
| "openExternal"
|
|
| "filterMarketplaceItems"
|
|
| "marketplaceButtonClicked"
|
|
| "installMarketplaceItem"
|
|
| "installMarketplaceItemWithParameters"
|
|
| "cancelMarketplaceInstall"
|
|
| "removeInstalledMarketplaceItem"
|
|
| "marketplaceInstallResult"
|
|
| "fetchMarketplaceData"
|
|
| "switchTab"
|
|
| "shareTaskSuccess"
|
|
| "exportMode"
|
|
| "exportModeResult"
|
|
| "importMode"
|
|
| "importModeResult"
|
|
| "checkRulesDirectory"
|
|
| "checkRulesDirectoryResult"
|
|
| "saveCodeIndexSettingsAtomic"
|
|
| "requestCodeIndexSecretStatus"
|
|
| "requestCommands"
|
|
| "openCommandFile"
|
|
| "deleteCommand"
|
|
| "createCommand"
|
|
| "insertTextIntoTextarea"
|
|
| "showMdmAuthRequiredNotification"
|
|
| "imageGenerationSettings"
|
|
| "queueMessage"
|
|
| "removeQueuedMessage"
|
|
| "editQueuedMessage"
|
|
| "dismissUpsell"
|
|
| "getDismissedUpsells"
|
|
| "updateSettings"
|
|
| "requestSelectionContext"
|
|
text?: string
|
|
selectedText?: string
|
|
selectionFilePath?: string
|
|
selectionStartLine?: number
|
|
selectionEndLine?: number
|
|
editedMessageContent?: string
|
|
tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
|
|
disabled?: boolean
|
|
context?: string
|
|
dataUri?: string
|
|
askResponse?: ClineAskResponse
|
|
apiConfiguration?: ProviderSettings
|
|
images?: string[]
|
|
bool?: boolean
|
|
value?: number
|
|
commands?: string[]
|
|
audioType?: AudioType
|
|
serverName?: string
|
|
toolName?: string
|
|
alwaysAllow?: boolean
|
|
isEnabled?: boolean
|
|
mode?: Mode
|
|
promptMode?: PromptMode
|
|
customPrompt?: PromptComponent
|
|
dataUrls?: string[]
|
|
values?: Record<string, any>
|
|
query?: string
|
|
setting?: string
|
|
slug?: string
|
|
modeConfig?: ModeConfig
|
|
timeout?: number
|
|
payload?: WebViewMessagePayload
|
|
source?: "global" | "project"
|
|
requestId?: string
|
|
ids?: string[]
|
|
hasSystemPromptOverride?: boolean
|
|
terminalOperation?: "continue" | "abort"
|
|
messageTs?: number
|
|
restoreCheckpoint?: boolean
|
|
historyPreviewCollapsed?: boolean
|
|
filters?: { type?: string; search?: string; tags?: string[] }
|
|
settings?: any
|
|
url?: string // For openExternal
|
|
mpItem?: MarketplaceItem
|
|
mpInstallOptions?: InstallMarketplaceItemOptions
|
|
config?: Record<string, any> // Add config to the payload
|
|
visibility?: ShareVisibility // For share visibility
|
|
hasContent?: boolean // For checkRulesDirectoryResult
|
|
checkOnly?: boolean // For deleteCustomMode check
|
|
upsellId?: string // For dismissUpsell
|
|
list?: string[] // For dismissedUpsells response
|
|
organizationId?: string | null // For organization switching
|
|
codeIndexSettings?: {
|
|
// Global state settings
|
|
codebaseIndexEnabled: boolean
|
|
codebaseIndexQdrantUrl: string
|
|
codebaseIndexEmbedderProvider:
|
|
| "openai"
|
|
| "ollama"
|
|
| "openai-compatible"
|
|
| "gemini"
|
|
| "mistral"
|
|
| "vercel-ai-gateway"
|
|
| "openrouter"
|
|
codebaseIndexEmbedderBaseUrl?: string
|
|
codebaseIndexEmbedderModelId: string
|
|
codebaseIndexEmbedderModelDimension?: number // Generic dimension for all providers
|
|
codebaseIndexOpenAiCompatibleBaseUrl?: string
|
|
codebaseIndexSearchMaxResults?: number
|
|
codebaseIndexSearchMinScore?: number
|
|
|
|
// Secret settings
|
|
codeIndexOpenAiKey?: string
|
|
codeIndexQdrantApiKey?: string
|
|
codebaseIndexOpenAiCompatibleApiKey?: string
|
|
codebaseIndexGeminiApiKey?: string
|
|
codebaseIndexMistralApiKey?: string
|
|
codebaseIndexVercelAiGatewayApiKey?: string
|
|
codebaseIndexOpenRouterApiKey?: string
|
|
}
|
|
updatedSettings?: RooCodeSettings
|
|
}
|
|
|
|
export const checkoutDiffPayloadSchema = z.object({
|
|
ts: z.number().optional(),
|
|
previousCommitHash: z.string().optional(),
|
|
commitHash: z.string(),
|
|
mode: z.enum(["full", "checkpoint", "from-init", "to-current"]),
|
|
})
|
|
|
|
export type CheckpointDiffPayload = z.infer<typeof checkoutDiffPayloadSchema>
|
|
|
|
export const checkoutRestorePayloadSchema = z.object({
|
|
ts: z.number(),
|
|
commitHash: z.string(),
|
|
mode: z.enum(["preview", "restore"]),
|
|
})
|
|
|
|
export type CheckpointRestorePayload = z.infer<typeof checkoutRestorePayloadSchema>
|
|
|
|
export interface IndexingStatusPayload {
|
|
state: "Standby" | "Indexing" | "Indexed" | "Error"
|
|
message: string
|
|
}
|
|
|
|
export interface IndexClearedPayload {
|
|
success: boolean
|
|
error?: string
|
|
}
|
|
|
|
export const installMarketplaceItemWithParametersPayloadSchema = z.object({
|
|
item: marketplaceItemSchema,
|
|
parameters: z.record(z.string(), z.any()),
|
|
})
|
|
|
|
export type InstallMarketplaceItemWithParametersPayload = z.infer<
|
|
typeof installMarketplaceItemWithParametersPayloadSchema
|
|
>
|
|
|
|
export type WebViewMessagePayload =
|
|
| CheckpointDiffPayload
|
|
| CheckpointRestorePayload
|
|
| IndexingStatusPayload
|
|
| IndexClearedPayload
|
|
| InstallMarketplaceItemWithParametersPayload
|
|
| UpdateTodoListPayload
|
|
| EditQueuedMessagePayload
|