mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
* feat: add OpenRouter embedding provider support Implement comprehensive OpenRouter embedding provider support for codebase indexing with the following features: - New OpenRouterEmbedder class with full API compatibility - Support for OpenRouter's OpenAI-compatible embedding endpoint - Rate limiting and retry logic with exponential backoff - Base64 embedding handling to bypass OpenAI package limitations - Global rate limit state management across embedder instances - Configuration updates for API key storage and provider selection - UI integration for OpenRouter provider settings - Comprehensive test suite with mocking - Model dimension support for OpenRouter's embedding models This adds OpenRouter as the 7th supported embedding provider alongside OpenAI, Ollama, OpenAI-compatible, Gemini, Mistral, and Vercel AI Gateway. * Add translation key * Fix mutex double release bug * Add translations * Add more translations * Fix failing tests * code-index(openrouter): fix HTTP-Referer header to RooCodeInc/Roo-Code; i18n: add and wire OpenRouter Code Index strings; test: assert default headers in embedder --------- Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
357 lines
9.2 KiB
TypeScript
357 lines
9.2 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import {
|
|
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"
|
|
| "allowedCommands"
|
|
| "deniedCommands"
|
|
| "alwaysAllowReadOnly"
|
|
| "alwaysAllowReadOnlyOutsideWorkspace"
|
|
| "alwaysAllowWrite"
|
|
| "alwaysAllowWriteOutsideWorkspace"
|
|
| "alwaysAllowWriteProtected"
|
|
| "alwaysAllowExecute"
|
|
| "alwaysAllowFollowupQuestions"
|
|
| "alwaysAllowUpdateTodoList"
|
|
| "followupAutoApproveTimeoutMs"
|
|
| "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"
|
|
| "alwaysAllowBrowser"
|
|
| "alwaysAllowMcp"
|
|
| "alwaysAllowModeSwitch"
|
|
| "allowedMaxRequests"
|
|
| "allowedMaxCost"
|
|
| "alwaysAllowSubtasks"
|
|
| "alwaysAllowUpdateTodoList"
|
|
| "autoCondenseContext"
|
|
| "autoCondenseContextPercent"
|
|
| "condensingApiConfigId"
|
|
| "updateCondensingPrompt"
|
|
| "playSound"
|
|
| "playTts"
|
|
| "stopTts"
|
|
| "soundEnabled"
|
|
| "ttsEnabled"
|
|
| "ttsSpeed"
|
|
| "soundVolume"
|
|
| "diffEnabled"
|
|
| "enableCheckpoints"
|
|
| "checkpointTimeout"
|
|
| "browserViewportSize"
|
|
| "screenshotQuality"
|
|
| "remoteBrowserHost"
|
|
| "openKeyboardShortcuts"
|
|
| "openMcpSettings"
|
|
| "openProjectMcpSettings"
|
|
| "restartMcpServer"
|
|
| "refreshAllMcpServers"
|
|
| "toggleToolAlwaysAllow"
|
|
| "toggleToolEnabledForPrompt"
|
|
| "toggleMcpServer"
|
|
| "updateMcpTimeout"
|
|
| "fuzzyMatchThreshold"
|
|
| "writeDelayMs"
|
|
| "diagnosticsEnabled"
|
|
| "enhancePrompt"
|
|
| "enhancedPrompt"
|
|
| "draggedImages"
|
|
| "deleteMessage"
|
|
| "deleteMessageConfirm"
|
|
| "submitEditedMessage"
|
|
| "editMessageConfirm"
|
|
| "terminalOutputLineLimit"
|
|
| "terminalOutputCharacterLimit"
|
|
| "terminalShellIntegrationTimeout"
|
|
| "terminalShellIntegrationDisabled"
|
|
| "terminalCommandDelay"
|
|
| "terminalPowershellCounter"
|
|
| "terminalZshClearEolMark"
|
|
| "terminalZshOhMy"
|
|
| "terminalZshP10k"
|
|
| "terminalZdotdir"
|
|
| "terminalCompressProgressBar"
|
|
| "mcpEnabled"
|
|
| "enableMcpServerCreation"
|
|
| "remoteControlEnabled"
|
|
| "taskSyncEnabled"
|
|
| "searchCommits"
|
|
| "alwaysApproveResubmit"
|
|
| "requestDelaySeconds"
|
|
| "setApiConfigPassword"
|
|
| "mode"
|
|
| "updatePrompt"
|
|
| "updateSupportPrompt"
|
|
| "getSystemPrompt"
|
|
| "copySystemPrompt"
|
|
| "systemPrompt"
|
|
| "enhancementApiConfigId"
|
|
| "includeTaskHistoryInEnhance"
|
|
| "updateExperimental"
|
|
| "autoApprovalEnabled"
|
|
| "updateCustomMode"
|
|
| "deleteCustomMode"
|
|
| "setopenAiCustomModelInfo"
|
|
| "openCustomModesSettings"
|
|
| "checkpointDiff"
|
|
| "checkpointRestore"
|
|
| "deleteMcpServer"
|
|
| "maxOpenTabsContext"
|
|
| "maxWorkspaceFiles"
|
|
| "humanRelayResponse"
|
|
| "humanRelayCancel"
|
|
| "browserToolEnabled"
|
|
| "codebaseIndexEnabled"
|
|
| "telemetrySetting"
|
|
| "showRooIgnoredFiles"
|
|
| "testBrowserConnection"
|
|
| "browserConnectionResult"
|
|
| "remoteBrowserEnabled"
|
|
| "language"
|
|
| "maxReadFileLine"
|
|
| "maxImageFileSize"
|
|
| "maxTotalImageSize"
|
|
| "maxConcurrentFileReads"
|
|
| "includeDiagnosticMessages"
|
|
| "maxDiagnosticMessages"
|
|
| "includeCurrentTime"
|
|
| "includeCurrentCost"
|
|
| "searchFiles"
|
|
| "toggleApiConfigPin"
|
|
| "setHistoryPreviewCollapsed"
|
|
| "hasOpenedModeSelector"
|
|
| "cloudButtonClicked"
|
|
| "rooCloudSignIn"
|
|
| "cloudLandingPageSignIn"
|
|
| "rooCloudSignOut"
|
|
| "rooCloudManualUrl"
|
|
| "switchOrganization"
|
|
| "condenseTaskContextRequest"
|
|
| "requestIndexingStatus"
|
|
| "startIndexing"
|
|
| "clearIndexData"
|
|
| "indexingStatusUpdate"
|
|
| "indexCleared"
|
|
| "focusPanelRequest"
|
|
| "profileThresholds"
|
|
| "setHistoryPreviewCollapsed"
|
|
| "setReasoningBlockCollapsed"
|
|
| "openExternal"
|
|
| "filterMarketplaceItems"
|
|
| "marketplaceButtonClicked"
|
|
| "installMarketplaceItem"
|
|
| "installMarketplaceItemWithParameters"
|
|
| "cancelMarketplaceInstall"
|
|
| "removeInstalledMarketplaceItem"
|
|
| "marketplaceInstallResult"
|
|
| "fetchMarketplaceData"
|
|
| "switchTab"
|
|
| "profileThresholds"
|
|
| "shareTaskSuccess"
|
|
| "exportMode"
|
|
| "exportModeResult"
|
|
| "importMode"
|
|
| "importModeResult"
|
|
| "checkRulesDirectory"
|
|
| "checkRulesDirectoryResult"
|
|
| "saveCodeIndexSettingsAtomic"
|
|
| "requestCodeIndexSecretStatus"
|
|
| "requestCommands"
|
|
| "openCommandFile"
|
|
| "deleteCommand"
|
|
| "createCommand"
|
|
| "insertTextIntoTextarea"
|
|
| "showMdmAuthRequiredNotification"
|
|
| "imageGenerationSettings"
|
|
| "openRouterImageApiKey"
|
|
| "openRouterImageGenerationSelectedModel"
|
|
| "queueMessage"
|
|
| "removeQueuedMessage"
|
|
| "editQueuedMessage"
|
|
| "dismissUpsell"
|
|
| "getDismissedUpsells"
|
|
text?: string
|
|
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
|
|
}
|
|
}
|
|
|
|
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
|