From 8def83192dda9c22eade98bd908c8f41e582fa2e Mon Sep 17 00:00:00 2001 From: Chris Estreich Date: Tue, 13 May 2025 12:40:19 -0700 Subject: [PATCH] Add IPC types to roo-code.d.ts (#3568) --- scripts/generate-types.mts | 12 +- src/exports/api.ts | 2 +- src/exports/interface.ts | 50 +- src/exports/ipc.ts | 12 +- src/exports/roo-code.d.ts | 970 +++++++++++++++++++++++++++++++++++++ src/exports/types.ts | 935 +++++++++++++++++++++++++++++++++++ src/schemas/index.ts | 141 +++++- src/schemas/ipc.ts | 139 ------ 8 files changed, 2104 insertions(+), 157 deletions(-) delete mode 100644 src/schemas/ipc.ts diff --git a/scripts/generate-types.mts b/scripts/generate-types.mts index 2ad167b0d8..bc5953d6cf 100644 --- a/scripts/generate-types.mts +++ b/scripts/generate-types.mts @@ -1,9 +1,11 @@ -import fs from "fs/promises" +import path from "path" +import fs from "fs" import { zodToTs, createTypeAlias, printNode } from "zod-to-ts" import { $ } from "execa" import schemas from "../src/schemas" + const { typeDefinitions } = schemas async function main() { @@ -16,12 +18,16 @@ async function main() { types.push(`export type { ${identifier} }`) } - await fs.writeFile("src/exports/types.ts", types.join("\n\n")) + fs.writeFileSync("src/exports/types.ts", types.join("\n\n")) await $`npx tsup src/exports/interface.ts --dts-only -d out` - await fs.copyFile('out/interface.d.ts', 'src/exports/roo-code.d.ts') + fs.writeFileSync("out/interface.d.ts", "src/exports/roo-code.d.ts") await $`npx prettier --write src/exports/types.ts src/exports/roo-code.d.ts` + + if (fs.existsSync(path.join("..", "Roo-Code-Types"))) { + fs.copyFileSync("src/exports/roo-code.d.ts", path.join("..", "Roo-Code-Types", "index.d.ts")) + } } main() diff --git a/src/exports/api.ts b/src/exports/api.ts index ca30c0f3fb..6e050ee227 100644 --- a/src/exports/api.ts +++ b/src/exports/api.ts @@ -14,7 +14,7 @@ import { ProviderSettingsEntry, isSecretStateKey, } from "../schemas" -import { IpcOrigin, IpcMessageType, TaskCommandName, TaskEvent } from "../schemas/ipc" +import { IpcOrigin, IpcMessageType, TaskCommandName, TaskEvent } from "../schemas" import { RooCodeAPI } from "./interface" import { IpcServer } from "./ipc" diff --git a/src/exports/interface.ts b/src/exports/interface.ts index eb30ea1773..ababc64557 100644 --- a/src/exports/interface.ts +++ b/src/exports/interface.ts @@ -1,4 +1,9 @@ import { EventEmitter } from "events" +import { Socket } from "node:net" + +/** + * Types + */ import type { GlobalSettings, @@ -7,22 +12,36 @@ import type { ClineMessage, TokenUsage, RooCodeEvents, + IpcMessage, + TaskCommand, + TaskEvent, } from "./types" export type { - RooCodeSettings, GlobalSettings, ProviderSettings, ProviderSettingsEntry, ClineMessage, TokenUsage, RooCodeEvents, + IpcMessage, + TaskCommand, + TaskEvent, } -import { RooCodeEventName } from "../schemas" -export type { RooCodeEventName } +/** + * Enums + */ -type RooCodeSettings = GlobalSettings & ProviderSettings +import { RooCodeEventName, IpcOrigin, IpcMessageType } from "../schemas" + +export { RooCodeEventName, IpcOrigin, IpcMessageType } + +/** + * RooCodeAPI + */ + +export type RooCodeSettings = GlobalSettings & ProviderSettings export interface RooCodeAPI extends EventEmitter { /** @@ -169,3 +188,26 @@ export interface RooCodeAPI extends EventEmitter { */ setActiveProfile(name: string): Promise } + +/** + * RooCodeIpcServer + */ + +export type IpcServerEvents = { + [IpcMessageType.Connect]: [clientId: string] + [IpcMessageType.Disconnect]: [clientId: string] + [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] + [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] +} + +export interface RooCodeIpcServer extends EventEmitter { + listen(): void + + broadcast(message: IpcMessage): void + + send(client: string | Socket, message: IpcMessage): void + + get socketPath(): string + + get isListening(): boolean +} diff --git a/src/exports/ipc.ts b/src/exports/ipc.ts index 33a5b1ff66..85950c5ee6 100644 --- a/src/exports/ipc.ts +++ b/src/exports/ipc.ts @@ -4,20 +4,14 @@ import * as crypto from "node:crypto" import ipc from "node-ipc" -import { IpcOrigin, IpcMessageType, IpcMessage, ipcMessageSchema, TaskCommand, TaskEvent } from "../schemas/ipc" +import { IpcOrigin, IpcMessageType, type IpcMessage, ipcMessageSchema } from "../schemas" +import type { IpcServerEvents, RooCodeIpcServer } from "./interface" /** * IpcServer */ -type IpcServerEvents = { - [IpcMessageType.Connect]: [clientId: string] - [IpcMessageType.Disconnect]: [clientId: string] - [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] - [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] -} - -export class IpcServer extends EventEmitter { +export class IpcServer extends EventEmitter implements RooCodeIpcServer { private readonly _socketPath: string private readonly _log: (...args: unknown[]) => void private readonly _clients: Map diff --git a/src/exports/roo-code.d.ts b/src/exports/roo-code.d.ts index 3ac8b366f6..51ba6e3494 100644 --- a/src/exports/roo-code.d.ts +++ b/src/exports/roo-code.d.ts @@ -1,4 +1,5 @@ import { EventEmitter } from "events" +import { Socket } from "node:net" type GlobalSettings = { currentApiConfigName?: string | undefined @@ -535,6 +536,935 @@ type RooCodeEvents = { ] } +type IpcMessage = + | { + type: "Ack" + origin: "server" + data: { + clientId: string + pid: number + ppid: number + } + } + | { + type: "TaskCommand" + origin: "client" + clientId: string + data: + | { + commandName: "StartNewTask" + data: { + configuration: { + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + includeMaxTokens?: boolean | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + diffEnabled?: boolean | undefined + fuzzyMatchThreshold?: number | undefined + modelTemperature?: (number | null) | undefined + rateLimitSeconds?: number | undefined + modelMaxTokens?: number | undefined + modelMaxThinkingTokens?: number | undefined + apiModelId?: string | undefined + apiKey?: string | undefined + anthropicBaseUrl?: string | undefined + anthropicUseAuthToken?: boolean | undefined + glamaModelId?: string | undefined + glamaApiKey?: string | undefined + openRouterApiKey?: string | undefined + openRouterModelId?: string | undefined + openRouterBaseUrl?: string | undefined + openRouterSpecificProvider?: string | undefined + openRouterUseMiddleOutTransform?: boolean | undefined + awsAccessKey?: string | undefined + awsSecretKey?: string | undefined + awsSessionToken?: string | undefined + awsRegion?: string | undefined + awsUseCrossRegionInference?: boolean | undefined + awsUsePromptCache?: boolean | undefined + awsProfile?: string | undefined + awsUseProfile?: boolean | undefined + awsCustomArn?: string | undefined + vertexKeyFile?: string | undefined + vertexJsonCredentials?: string | undefined + vertexProjectId?: string | undefined + vertexRegion?: string | undefined + openAiBaseUrl?: string | undefined + openAiApiKey?: string | undefined + openAiLegacyFormat?: boolean | undefined + openAiR1FormatEnabled?: boolean | undefined + openAiModelId?: string | undefined + openAiCustomModelInfo?: + | ({ + maxTokens?: (number | null) | undefined + maxThinkingTokens?: (number | null) | undefined + contextWindow: number + supportsImages?: boolean | undefined + supportsComputerUse?: boolean | undefined + supportsPromptCache: boolean + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + description?: string | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + thinking?: boolean | undefined + minTokensPerCachePoint?: number | undefined + maxCachePoints?: number | undefined + cachableFields?: string[] | undefined + tiers?: + | { + contextWindow: number + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + }[] + | undefined + } | null) + | undefined + openAiUseAzure?: boolean | undefined + azureApiVersion?: string | undefined + openAiStreamingEnabled?: boolean | undefined + enableReasoningEffort?: boolean | undefined + openAiHostHeader?: string | undefined + openAiHeaders?: + | { + [x: string]: string + } + | undefined + ollamaModelId?: string | undefined + ollamaBaseUrl?: string | undefined + vsCodeLmModelSelector?: + | { + vendor?: string | undefined + family?: string | undefined + version?: string | undefined + id?: string | undefined + } + | undefined + lmStudioModelId?: string | undefined + lmStudioBaseUrl?: string | undefined + lmStudioDraftModelId?: string | undefined + lmStudioSpeculativeDecodingEnabled?: boolean | undefined + geminiApiKey?: string | undefined + googleGeminiBaseUrl?: string | undefined + openAiNativeApiKey?: string | undefined + openAiNativeBaseUrl?: string | undefined + mistralApiKey?: string | undefined + mistralCodestralUrl?: string | undefined + deepSeekBaseUrl?: string | undefined + deepSeekApiKey?: string | undefined + unboundApiKey?: string | undefined + unboundModelId?: string | undefined + requestyApiKey?: string | undefined + requestyModelId?: string | undefined + fakeAi?: unknown | undefined + xaiApiKey?: string | undefined + groqApiKey?: string | undefined + chutesApiKey?: string | undefined + litellmBaseUrl?: string | undefined + litellmApiKey?: string | undefined + litellmModelId?: string | undefined + currentApiConfigName?: string | undefined + listApiConfigMeta?: + | { + id: string + name: string + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + }[] + | undefined + pinnedApiConfigs?: + | { + [x: string]: boolean + } + | undefined + lastShownAnnouncementId?: string | undefined + customInstructions?: string | undefined + taskHistory?: + | { + id: string + number: number + ts: number + task: string + tokensIn: number + tokensOut: number + cacheWrites?: number | undefined + cacheReads?: number | undefined + totalCost: number + size?: number | undefined + workspace?: string | undefined + }[] + | undefined + autoApprovalEnabled?: boolean | undefined + alwaysAllowReadOnly?: boolean | undefined + alwaysAllowReadOnlyOutsideWorkspace?: boolean | undefined + alwaysAllowWrite?: boolean | undefined + alwaysAllowWriteOutsideWorkspace?: boolean | undefined + writeDelayMs?: number | undefined + alwaysAllowBrowser?: boolean | undefined + alwaysApproveResubmit?: boolean | undefined + requestDelaySeconds?: number | undefined + alwaysAllowMcp?: boolean | undefined + alwaysAllowModeSwitch?: boolean | undefined + alwaysAllowSubtasks?: boolean | undefined + alwaysAllowExecute?: boolean | undefined + allowedCommands?: string[] | undefined + browserToolEnabled?: boolean | undefined + browserViewportSize?: string | undefined + screenshotQuality?: number | undefined + remoteBrowserEnabled?: boolean | undefined + remoteBrowserHost?: string | undefined + cachedChromeHostUrl?: string | undefined + enableCheckpoints?: boolean | undefined + ttsEnabled?: boolean | undefined + ttsSpeed?: number | undefined + soundEnabled?: boolean | undefined + soundVolume?: number | undefined + maxOpenTabsContext?: number | undefined + maxWorkspaceFiles?: number | undefined + showRooIgnoredFiles?: boolean | undefined + maxReadFileLine?: number | undefined + terminalOutputLineLimit?: number | undefined + terminalShellIntegrationTimeout?: number | undefined + terminalShellIntegrationDisabled?: boolean | undefined + terminalCommandDelay?: number | undefined + terminalPowershellCounter?: boolean | undefined + terminalZshClearEolMark?: boolean | undefined + terminalZshOhMy?: boolean | undefined + terminalZshP10k?: boolean | undefined + terminalZdotdir?: boolean | undefined + terminalCompressProgressBar?: boolean | undefined + experiments?: + | { + powerSteering: boolean + } + | undefined + language?: + | ( + | "ca" + | "de" + | "en" + | "es" + | "fr" + | "hi" + | "it" + | "ja" + | "ko" + | "nl" + | "pl" + | "pt-BR" + | "ru" + | "tr" + | "vi" + | "zh-CN" + | "zh-TW" + ) + | undefined + telemetrySetting?: ("unset" | "enabled" | "disabled") | undefined + mcpEnabled?: boolean | undefined + enableMcpServerCreation?: boolean | undefined + mode?: string | undefined + modeApiConfigs?: + | { + [x: string]: string + } + | undefined + customModes?: + | { + slug: string + name: string + roleDefinition: string + customInstructions?: string | undefined + groups: ( + | ("read" | "edit" | "browser" | "command" | "mcp" | "modes") + | [ + "read" | "edit" | "browser" | "command" | "mcp" | "modes", + { + fileRegex?: string | undefined + description?: string | undefined + }, + ] + )[] + source?: ("global" | "project") | undefined + }[] + | undefined + customModePrompts?: + | { + [x: string]: + | { + roleDefinition?: string | undefined + customInstructions?: string | undefined + } + | undefined + } + | undefined + customSupportPrompts?: + | { + [x: string]: string | undefined + } + | undefined + enhancementApiConfigId?: string | undefined + historyPreviewCollapsed?: boolean | undefined + } + text: string + images?: string[] | undefined + newTab?: boolean | undefined + } + } + | { + commandName: "CancelTask" + data: string + } + | { + commandName: "CloseTask" + data: string + } + } + | { + type: "TaskEvent" + origin: "server" + relayClientId?: string | undefined + data: + | { + eventName: "message" + payload: [ + { + taskId: string + action: "created" | "updated" + message: { + ts: number + type: "ask" | "say" + ask?: + | ( + | "followup" + | "command" + | "command_output" + | "completion_result" + | "tool" + | "api_req_failed" + | "resume_task" + | "resume_completed_task" + | "mistake_limit_reached" + | "browser_action_launch" + | "use_mcp_server" + ) + | undefined + say?: + | ( + | "error" + | "api_req_started" + | "api_req_finished" + | "api_req_retried" + | "api_req_retry_delayed" + | "api_req_deleted" + | "text" + | "reasoning" + | "completion_result" + | "user_feedback" + | "user_feedback_diff" + | "command_output" + | "shell_integration_warning" + | "browser_action" + | "browser_action_result" + | "mcp_server_request_started" + | "mcp_server_response" + | "subtask_result" + | "checkpoint_saved" + | "rooignore_error" + | "diff_error" + ) + | undefined + text?: string | undefined + images?: string[] | undefined + partial?: boolean | undefined + reasoning?: string | undefined + conversationHistoryIndex?: number | undefined + checkpoint?: + | { + [x: string]: unknown + } + | undefined + progressStatus?: + | { + icon?: string | undefined + text?: string | undefined + } + | undefined + } + }, + ] + } + | { + eventName: "taskCreated" + payload: [string] + } + | { + eventName: "taskStarted" + payload: [string] + } + | { + eventName: "taskModeSwitched" + payload: [string, string] + } + | { + eventName: "taskPaused" + payload: [string] + } + | { + eventName: "taskUnpaused" + payload: [string] + } + | { + eventName: "taskAskResponded" + payload: [string] + } + | { + eventName: "taskAborted" + payload: [string] + } + | { + eventName: "taskSpawned" + payload: [string, string] + } + | { + eventName: "taskCompleted" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + { + [x: string]: { + attempts: number + failures: number + } + }, + ] + } + | { + eventName: "taskTokenUsageUpdated" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + ] + } + } + +type TaskCommand = + | { + commandName: "StartNewTask" + data: { + configuration: { + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + includeMaxTokens?: boolean | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + diffEnabled?: boolean | undefined + fuzzyMatchThreshold?: number | undefined + modelTemperature?: (number | null) | undefined + rateLimitSeconds?: number | undefined + modelMaxTokens?: number | undefined + modelMaxThinkingTokens?: number | undefined + apiModelId?: string | undefined + apiKey?: string | undefined + anthropicBaseUrl?: string | undefined + anthropicUseAuthToken?: boolean | undefined + glamaModelId?: string | undefined + glamaApiKey?: string | undefined + openRouterApiKey?: string | undefined + openRouterModelId?: string | undefined + openRouterBaseUrl?: string | undefined + openRouterSpecificProvider?: string | undefined + openRouterUseMiddleOutTransform?: boolean | undefined + awsAccessKey?: string | undefined + awsSecretKey?: string | undefined + awsSessionToken?: string | undefined + awsRegion?: string | undefined + awsUseCrossRegionInference?: boolean | undefined + awsUsePromptCache?: boolean | undefined + awsProfile?: string | undefined + awsUseProfile?: boolean | undefined + awsCustomArn?: string | undefined + vertexKeyFile?: string | undefined + vertexJsonCredentials?: string | undefined + vertexProjectId?: string | undefined + vertexRegion?: string | undefined + openAiBaseUrl?: string | undefined + openAiApiKey?: string | undefined + openAiLegacyFormat?: boolean | undefined + openAiR1FormatEnabled?: boolean | undefined + openAiModelId?: string | undefined + openAiCustomModelInfo?: + | ({ + maxTokens?: (number | null) | undefined + maxThinkingTokens?: (number | null) | undefined + contextWindow: number + supportsImages?: boolean | undefined + supportsComputerUse?: boolean | undefined + supportsPromptCache: boolean + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + description?: string | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + thinking?: boolean | undefined + minTokensPerCachePoint?: number | undefined + maxCachePoints?: number | undefined + cachableFields?: string[] | undefined + tiers?: + | { + contextWindow: number + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + }[] + | undefined + } | null) + | undefined + openAiUseAzure?: boolean | undefined + azureApiVersion?: string | undefined + openAiStreamingEnabled?: boolean | undefined + enableReasoningEffort?: boolean | undefined + openAiHostHeader?: string | undefined + openAiHeaders?: + | { + [x: string]: string + } + | undefined + ollamaModelId?: string | undefined + ollamaBaseUrl?: string | undefined + vsCodeLmModelSelector?: + | { + vendor?: string | undefined + family?: string | undefined + version?: string | undefined + id?: string | undefined + } + | undefined + lmStudioModelId?: string | undefined + lmStudioBaseUrl?: string | undefined + lmStudioDraftModelId?: string | undefined + lmStudioSpeculativeDecodingEnabled?: boolean | undefined + geminiApiKey?: string | undefined + googleGeminiBaseUrl?: string | undefined + openAiNativeApiKey?: string | undefined + openAiNativeBaseUrl?: string | undefined + mistralApiKey?: string | undefined + mistralCodestralUrl?: string | undefined + deepSeekBaseUrl?: string | undefined + deepSeekApiKey?: string | undefined + unboundApiKey?: string | undefined + unboundModelId?: string | undefined + requestyApiKey?: string | undefined + requestyModelId?: string | undefined + fakeAi?: unknown | undefined + xaiApiKey?: string | undefined + groqApiKey?: string | undefined + chutesApiKey?: string | undefined + litellmBaseUrl?: string | undefined + litellmApiKey?: string | undefined + litellmModelId?: string | undefined + currentApiConfigName?: string | undefined + listApiConfigMeta?: + | { + id: string + name: string + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + }[] + | undefined + pinnedApiConfigs?: + | { + [x: string]: boolean + } + | undefined + lastShownAnnouncementId?: string | undefined + customInstructions?: string | undefined + taskHistory?: + | { + id: string + number: number + ts: number + task: string + tokensIn: number + tokensOut: number + cacheWrites?: number | undefined + cacheReads?: number | undefined + totalCost: number + size?: number | undefined + workspace?: string | undefined + }[] + | undefined + autoApprovalEnabled?: boolean | undefined + alwaysAllowReadOnly?: boolean | undefined + alwaysAllowReadOnlyOutsideWorkspace?: boolean | undefined + alwaysAllowWrite?: boolean | undefined + alwaysAllowWriteOutsideWorkspace?: boolean | undefined + writeDelayMs?: number | undefined + alwaysAllowBrowser?: boolean | undefined + alwaysApproveResubmit?: boolean | undefined + requestDelaySeconds?: number | undefined + alwaysAllowMcp?: boolean | undefined + alwaysAllowModeSwitch?: boolean | undefined + alwaysAllowSubtasks?: boolean | undefined + alwaysAllowExecute?: boolean | undefined + allowedCommands?: string[] | undefined + browserToolEnabled?: boolean | undefined + browserViewportSize?: string | undefined + screenshotQuality?: number | undefined + remoteBrowserEnabled?: boolean | undefined + remoteBrowserHost?: string | undefined + cachedChromeHostUrl?: string | undefined + enableCheckpoints?: boolean | undefined + ttsEnabled?: boolean | undefined + ttsSpeed?: number | undefined + soundEnabled?: boolean | undefined + soundVolume?: number | undefined + maxOpenTabsContext?: number | undefined + maxWorkspaceFiles?: number | undefined + showRooIgnoredFiles?: boolean | undefined + maxReadFileLine?: number | undefined + terminalOutputLineLimit?: number | undefined + terminalShellIntegrationTimeout?: number | undefined + terminalShellIntegrationDisabled?: boolean | undefined + terminalCommandDelay?: number | undefined + terminalPowershellCounter?: boolean | undefined + terminalZshClearEolMark?: boolean | undefined + terminalZshOhMy?: boolean | undefined + terminalZshP10k?: boolean | undefined + terminalZdotdir?: boolean | undefined + terminalCompressProgressBar?: boolean | undefined + experiments?: + | { + powerSteering: boolean + } + | undefined + language?: + | ( + | "ca" + | "de" + | "en" + | "es" + | "fr" + | "hi" + | "it" + | "ja" + | "ko" + | "nl" + | "pl" + | "pt-BR" + | "ru" + | "tr" + | "vi" + | "zh-CN" + | "zh-TW" + ) + | undefined + telemetrySetting?: ("unset" | "enabled" | "disabled") | undefined + mcpEnabled?: boolean | undefined + enableMcpServerCreation?: boolean | undefined + mode?: string | undefined + modeApiConfigs?: + | { + [x: string]: string + } + | undefined + customModes?: + | { + slug: string + name: string + roleDefinition: string + customInstructions?: string | undefined + groups: ( + | ("read" | "edit" | "browser" | "command" | "mcp" | "modes") + | [ + "read" | "edit" | "browser" | "command" | "mcp" | "modes", + { + fileRegex?: string | undefined + description?: string | undefined + }, + ] + )[] + source?: ("global" | "project") | undefined + }[] + | undefined + customModePrompts?: + | { + [x: string]: + | { + roleDefinition?: string | undefined + customInstructions?: string | undefined + } + | undefined + } + | undefined + customSupportPrompts?: + | { + [x: string]: string | undefined + } + | undefined + enhancementApiConfigId?: string | undefined + historyPreviewCollapsed?: boolean | undefined + } + text: string + images?: string[] | undefined + newTab?: boolean | undefined + } + } + | { + commandName: "CancelTask" + data: string + } + | { + commandName: "CloseTask" + data: string + } + +type TaskEvent = + | { + eventName: "message" + payload: [ + { + taskId: string + action: "created" | "updated" + message: { + ts: number + type: "ask" | "say" + ask?: + | ( + | "followup" + | "command" + | "command_output" + | "completion_result" + | "tool" + | "api_req_failed" + | "resume_task" + | "resume_completed_task" + | "mistake_limit_reached" + | "browser_action_launch" + | "use_mcp_server" + ) + | undefined + say?: + | ( + | "error" + | "api_req_started" + | "api_req_finished" + | "api_req_retried" + | "api_req_retry_delayed" + | "api_req_deleted" + | "text" + | "reasoning" + | "completion_result" + | "user_feedback" + | "user_feedback_diff" + | "command_output" + | "shell_integration_warning" + | "browser_action" + | "browser_action_result" + | "mcp_server_request_started" + | "mcp_server_response" + | "subtask_result" + | "checkpoint_saved" + | "rooignore_error" + | "diff_error" + ) + | undefined + text?: string | undefined + images?: string[] | undefined + partial?: boolean | undefined + reasoning?: string | undefined + conversationHistoryIndex?: number | undefined + checkpoint?: + | { + [x: string]: unknown + } + | undefined + progressStatus?: + | { + icon?: string | undefined + text?: string | undefined + } + | undefined + } + }, + ] + } + | { + eventName: "taskCreated" + payload: [string] + } + | { + eventName: "taskStarted" + payload: [string] + } + | { + eventName: "taskModeSwitched" + payload: [string, string] + } + | { + eventName: "taskPaused" + payload: [string] + } + | { + eventName: "taskUnpaused" + payload: [string] + } + | { + eventName: "taskAskResponded" + payload: [string] + } + | { + eventName: "taskAborted" + payload: [string] + } + | { + eventName: "taskSpawned" + payload: [string, string] + } + | { + eventName: "taskCompleted" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + { + [x: string]: { + attempts: number + failures: number + } + }, + ] + } + | { + eventName: "taskTokenUsageUpdated" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + ] + } + /** * RooCodeEvent */ @@ -552,7 +1482,24 @@ declare enum RooCodeEventName { TaskTokenUsageUpdated = "taskTokenUsageUpdated", TaskToolFailed = "taskToolFailed", } +/** + * IpcMessage + */ +declare enum IpcMessageType { + Connect = "Connect", + Disconnect = "Disconnect", + Ack = "Ack", + TaskCommand = "TaskCommand", + TaskEvent = "TaskEvent", +} +declare enum IpcOrigin { + Client = "client", + Server = "server", +} +/** + * RooCodeAPI + */ type RooCodeSettings = GlobalSettings & ProviderSettings interface RooCodeAPI extends EventEmitter { /** @@ -680,15 +1627,38 @@ interface RooCodeAPI extends EventEmitter { */ setActiveProfile(name: string): Promise } +/** + * RooCodeIpcServer + */ +type IpcServerEvents = { + [IpcMessageType.Connect]: [clientId: string] + [IpcMessageType.Disconnect]: [clientId: string] + [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] + [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] +} +interface RooCodeIpcServer extends EventEmitter { + listen(): void + broadcast(message: IpcMessage): void + send(client: string | Socket, message: IpcMessage): void + get socketPath(): string + get isListening(): boolean +} export { type ClineMessage, type GlobalSettings, + type IpcMessage, + IpcMessageType, + IpcOrigin, + type IpcServerEvents, type ProviderSettings, type ProviderSettingsEntry, type RooCodeAPI, RooCodeEventName, type RooCodeEvents, + type RooCodeIpcServer, type RooCodeSettings, + type TaskCommand, + type TaskEvent, type TokenUsage, } diff --git a/src/exports/types.ts b/src/exports/types.ts index e19e2fbcdb..7b373e4f92 100644 --- a/src/exports/types.ts +++ b/src/exports/types.ts @@ -547,3 +547,938 @@ type RooCodeEvents = { } export type { RooCodeEvents } + +type IpcMessage = + | { + type: "Ack" + origin: "server" + data: { + clientId: string + pid: number + ppid: number + } + } + | { + type: "TaskCommand" + origin: "client" + clientId: string + data: + | { + commandName: "StartNewTask" + data: { + configuration: { + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + includeMaxTokens?: boolean | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + diffEnabled?: boolean | undefined + fuzzyMatchThreshold?: number | undefined + modelTemperature?: (number | null) | undefined + rateLimitSeconds?: number | undefined + modelMaxTokens?: number | undefined + modelMaxThinkingTokens?: number | undefined + apiModelId?: string | undefined + apiKey?: string | undefined + anthropicBaseUrl?: string | undefined + anthropicUseAuthToken?: boolean | undefined + glamaModelId?: string | undefined + glamaApiKey?: string | undefined + openRouterApiKey?: string | undefined + openRouterModelId?: string | undefined + openRouterBaseUrl?: string | undefined + openRouterSpecificProvider?: string | undefined + openRouterUseMiddleOutTransform?: boolean | undefined + awsAccessKey?: string | undefined + awsSecretKey?: string | undefined + awsSessionToken?: string | undefined + awsRegion?: string | undefined + awsUseCrossRegionInference?: boolean | undefined + awsUsePromptCache?: boolean | undefined + awsProfile?: string | undefined + awsUseProfile?: boolean | undefined + awsCustomArn?: string | undefined + vertexKeyFile?: string | undefined + vertexJsonCredentials?: string | undefined + vertexProjectId?: string | undefined + vertexRegion?: string | undefined + openAiBaseUrl?: string | undefined + openAiApiKey?: string | undefined + openAiLegacyFormat?: boolean | undefined + openAiR1FormatEnabled?: boolean | undefined + openAiModelId?: string | undefined + openAiCustomModelInfo?: + | ({ + maxTokens?: (number | null) | undefined + maxThinkingTokens?: (number | null) | undefined + contextWindow: number + supportsImages?: boolean | undefined + supportsComputerUse?: boolean | undefined + supportsPromptCache: boolean + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + description?: string | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + thinking?: boolean | undefined + minTokensPerCachePoint?: number | undefined + maxCachePoints?: number | undefined + cachableFields?: string[] | undefined + tiers?: + | { + contextWindow: number + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + }[] + | undefined + } | null) + | undefined + openAiUseAzure?: boolean | undefined + azureApiVersion?: string | undefined + openAiStreamingEnabled?: boolean | undefined + enableReasoningEffort?: boolean | undefined + openAiHostHeader?: string | undefined + openAiHeaders?: + | { + [x: string]: string + } + | undefined + ollamaModelId?: string | undefined + ollamaBaseUrl?: string | undefined + vsCodeLmModelSelector?: + | { + vendor?: string | undefined + family?: string | undefined + version?: string | undefined + id?: string | undefined + } + | undefined + lmStudioModelId?: string | undefined + lmStudioBaseUrl?: string | undefined + lmStudioDraftModelId?: string | undefined + lmStudioSpeculativeDecodingEnabled?: boolean | undefined + geminiApiKey?: string | undefined + googleGeminiBaseUrl?: string | undefined + openAiNativeApiKey?: string | undefined + openAiNativeBaseUrl?: string | undefined + mistralApiKey?: string | undefined + mistralCodestralUrl?: string | undefined + deepSeekBaseUrl?: string | undefined + deepSeekApiKey?: string | undefined + unboundApiKey?: string | undefined + unboundModelId?: string | undefined + requestyApiKey?: string | undefined + requestyModelId?: string | undefined + fakeAi?: unknown | undefined + xaiApiKey?: string | undefined + groqApiKey?: string | undefined + chutesApiKey?: string | undefined + litellmBaseUrl?: string | undefined + litellmApiKey?: string | undefined + litellmModelId?: string | undefined + currentApiConfigName?: string | undefined + listApiConfigMeta?: + | { + id: string + name: string + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + }[] + | undefined + pinnedApiConfigs?: + | { + [x: string]: boolean + } + | undefined + lastShownAnnouncementId?: string | undefined + customInstructions?: string | undefined + taskHistory?: + | { + id: string + number: number + ts: number + task: string + tokensIn: number + tokensOut: number + cacheWrites?: number | undefined + cacheReads?: number | undefined + totalCost: number + size?: number | undefined + workspace?: string | undefined + }[] + | undefined + autoApprovalEnabled?: boolean | undefined + alwaysAllowReadOnly?: boolean | undefined + alwaysAllowReadOnlyOutsideWorkspace?: boolean | undefined + alwaysAllowWrite?: boolean | undefined + alwaysAllowWriteOutsideWorkspace?: boolean | undefined + writeDelayMs?: number | undefined + alwaysAllowBrowser?: boolean | undefined + alwaysApproveResubmit?: boolean | undefined + requestDelaySeconds?: number | undefined + alwaysAllowMcp?: boolean | undefined + alwaysAllowModeSwitch?: boolean | undefined + alwaysAllowSubtasks?: boolean | undefined + alwaysAllowExecute?: boolean | undefined + allowedCommands?: string[] | undefined + browserToolEnabled?: boolean | undefined + browserViewportSize?: string | undefined + screenshotQuality?: number | undefined + remoteBrowserEnabled?: boolean | undefined + remoteBrowserHost?: string | undefined + cachedChromeHostUrl?: string | undefined + enableCheckpoints?: boolean | undefined + ttsEnabled?: boolean | undefined + ttsSpeed?: number | undefined + soundEnabled?: boolean | undefined + soundVolume?: number | undefined + maxOpenTabsContext?: number | undefined + maxWorkspaceFiles?: number | undefined + showRooIgnoredFiles?: boolean | undefined + maxReadFileLine?: number | undefined + terminalOutputLineLimit?: number | undefined + terminalShellIntegrationTimeout?: number | undefined + terminalShellIntegrationDisabled?: boolean | undefined + terminalCommandDelay?: number | undefined + terminalPowershellCounter?: boolean | undefined + terminalZshClearEolMark?: boolean | undefined + terminalZshOhMy?: boolean | undefined + terminalZshP10k?: boolean | undefined + terminalZdotdir?: boolean | undefined + terminalCompressProgressBar?: boolean | undefined + experiments?: + | { + powerSteering: boolean + } + | undefined + language?: + | ( + | "ca" + | "de" + | "en" + | "es" + | "fr" + | "hi" + | "it" + | "ja" + | "ko" + | "nl" + | "pl" + | "pt-BR" + | "ru" + | "tr" + | "vi" + | "zh-CN" + | "zh-TW" + ) + | undefined + telemetrySetting?: ("unset" | "enabled" | "disabled") | undefined + mcpEnabled?: boolean | undefined + enableMcpServerCreation?: boolean | undefined + mode?: string | undefined + modeApiConfigs?: + | { + [x: string]: string + } + | undefined + customModes?: + | { + slug: string + name: string + roleDefinition: string + customInstructions?: string | undefined + groups: ( + | ("read" | "edit" | "browser" | "command" | "mcp" | "modes") + | [ + "read" | "edit" | "browser" | "command" | "mcp" | "modes", + { + fileRegex?: string | undefined + description?: string | undefined + }, + ] + )[] + source?: ("global" | "project") | undefined + }[] + | undefined + customModePrompts?: + | { + [x: string]: + | { + roleDefinition?: string | undefined + customInstructions?: string | undefined + } + | undefined + } + | undefined + customSupportPrompts?: + | { + [x: string]: string | undefined + } + | undefined + enhancementApiConfigId?: string | undefined + historyPreviewCollapsed?: boolean | undefined + } + text: string + images?: string[] | undefined + newTab?: boolean | undefined + } + } + | { + commandName: "CancelTask" + data: string + } + | { + commandName: "CloseTask" + data: string + } + } + | { + type: "TaskEvent" + origin: "server" + relayClientId?: string | undefined + data: + | { + eventName: "message" + payload: [ + { + taskId: string + action: "created" | "updated" + message: { + ts: number + type: "ask" | "say" + ask?: + | ( + | "followup" + | "command" + | "command_output" + | "completion_result" + | "tool" + | "api_req_failed" + | "resume_task" + | "resume_completed_task" + | "mistake_limit_reached" + | "browser_action_launch" + | "use_mcp_server" + ) + | undefined + say?: + | ( + | "error" + | "api_req_started" + | "api_req_finished" + | "api_req_retried" + | "api_req_retry_delayed" + | "api_req_deleted" + | "text" + | "reasoning" + | "completion_result" + | "user_feedback" + | "user_feedback_diff" + | "command_output" + | "shell_integration_warning" + | "browser_action" + | "browser_action_result" + | "mcp_server_request_started" + | "mcp_server_response" + | "subtask_result" + | "checkpoint_saved" + | "rooignore_error" + | "diff_error" + ) + | undefined + text?: string | undefined + images?: string[] | undefined + partial?: boolean | undefined + reasoning?: string | undefined + conversationHistoryIndex?: number | undefined + checkpoint?: + | { + [x: string]: unknown + } + | undefined + progressStatus?: + | { + icon?: string | undefined + text?: string | undefined + } + | undefined + } + }, + ] + } + | { + eventName: "taskCreated" + payload: [string] + } + | { + eventName: "taskStarted" + payload: [string] + } + | { + eventName: "taskModeSwitched" + payload: [string, string] + } + | { + eventName: "taskPaused" + payload: [string] + } + | { + eventName: "taskUnpaused" + payload: [string] + } + | { + eventName: "taskAskResponded" + payload: [string] + } + | { + eventName: "taskAborted" + payload: [string] + } + | { + eventName: "taskSpawned" + payload: [string, string] + } + | { + eventName: "taskCompleted" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + { + [x: string]: { + attempts: number + failures: number + } + }, + ] + } + | { + eventName: "taskTokenUsageUpdated" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + ] + } + } + +export type { IpcMessage } + +type TaskCommand = + | { + commandName: "StartNewTask" + data: { + configuration: { + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + includeMaxTokens?: boolean | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + diffEnabled?: boolean | undefined + fuzzyMatchThreshold?: number | undefined + modelTemperature?: (number | null) | undefined + rateLimitSeconds?: number | undefined + modelMaxTokens?: number | undefined + modelMaxThinkingTokens?: number | undefined + apiModelId?: string | undefined + apiKey?: string | undefined + anthropicBaseUrl?: string | undefined + anthropicUseAuthToken?: boolean | undefined + glamaModelId?: string | undefined + glamaApiKey?: string | undefined + openRouterApiKey?: string | undefined + openRouterModelId?: string | undefined + openRouterBaseUrl?: string | undefined + openRouterSpecificProvider?: string | undefined + openRouterUseMiddleOutTransform?: boolean | undefined + awsAccessKey?: string | undefined + awsSecretKey?: string | undefined + awsSessionToken?: string | undefined + awsRegion?: string | undefined + awsUseCrossRegionInference?: boolean | undefined + awsUsePromptCache?: boolean | undefined + awsProfile?: string | undefined + awsUseProfile?: boolean | undefined + awsCustomArn?: string | undefined + vertexKeyFile?: string | undefined + vertexJsonCredentials?: string | undefined + vertexProjectId?: string | undefined + vertexRegion?: string | undefined + openAiBaseUrl?: string | undefined + openAiApiKey?: string | undefined + openAiLegacyFormat?: boolean | undefined + openAiR1FormatEnabled?: boolean | undefined + openAiModelId?: string | undefined + openAiCustomModelInfo?: + | ({ + maxTokens?: (number | null) | undefined + maxThinkingTokens?: (number | null) | undefined + contextWindow: number + supportsImages?: boolean | undefined + supportsComputerUse?: boolean | undefined + supportsPromptCache: boolean + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + description?: string | undefined + reasoningEffort?: ("low" | "medium" | "high") | undefined + thinking?: boolean | undefined + minTokensPerCachePoint?: number | undefined + maxCachePoints?: number | undefined + cachableFields?: string[] | undefined + tiers?: + | { + contextWindow: number + inputPrice?: number | undefined + outputPrice?: number | undefined + cacheWritesPrice?: number | undefined + cacheReadsPrice?: number | undefined + }[] + | undefined + } | null) + | undefined + openAiUseAzure?: boolean | undefined + azureApiVersion?: string | undefined + openAiStreamingEnabled?: boolean | undefined + enableReasoningEffort?: boolean | undefined + openAiHostHeader?: string | undefined + openAiHeaders?: + | { + [x: string]: string + } + | undefined + ollamaModelId?: string | undefined + ollamaBaseUrl?: string | undefined + vsCodeLmModelSelector?: + | { + vendor?: string | undefined + family?: string | undefined + version?: string | undefined + id?: string | undefined + } + | undefined + lmStudioModelId?: string | undefined + lmStudioBaseUrl?: string | undefined + lmStudioDraftModelId?: string | undefined + lmStudioSpeculativeDecodingEnabled?: boolean | undefined + geminiApiKey?: string | undefined + googleGeminiBaseUrl?: string | undefined + openAiNativeApiKey?: string | undefined + openAiNativeBaseUrl?: string | undefined + mistralApiKey?: string | undefined + mistralCodestralUrl?: string | undefined + deepSeekBaseUrl?: string | undefined + deepSeekApiKey?: string | undefined + unboundApiKey?: string | undefined + unboundModelId?: string | undefined + requestyApiKey?: string | undefined + requestyModelId?: string | undefined + fakeAi?: unknown | undefined + xaiApiKey?: string | undefined + groqApiKey?: string | undefined + chutesApiKey?: string | undefined + litellmBaseUrl?: string | undefined + litellmApiKey?: string | undefined + litellmModelId?: string | undefined + currentApiConfigName?: string | undefined + listApiConfigMeta?: + | { + id: string + name: string + apiProvider?: + | ( + | "anthropic" + | "glama" + | "openrouter" + | "bedrock" + | "vertex" + | "openai" + | "ollama" + | "vscode-lm" + | "lmstudio" + | "gemini" + | "openai-native" + | "mistral" + | "deepseek" + | "unbound" + | "requesty" + | "human-relay" + | "fake-ai" + | "xai" + | "groq" + | "chutes" + | "litellm" + ) + | undefined + }[] + | undefined + pinnedApiConfigs?: + | { + [x: string]: boolean + } + | undefined + lastShownAnnouncementId?: string | undefined + customInstructions?: string | undefined + taskHistory?: + | { + id: string + number: number + ts: number + task: string + tokensIn: number + tokensOut: number + cacheWrites?: number | undefined + cacheReads?: number | undefined + totalCost: number + size?: number | undefined + workspace?: string | undefined + }[] + | undefined + autoApprovalEnabled?: boolean | undefined + alwaysAllowReadOnly?: boolean | undefined + alwaysAllowReadOnlyOutsideWorkspace?: boolean | undefined + alwaysAllowWrite?: boolean | undefined + alwaysAllowWriteOutsideWorkspace?: boolean | undefined + writeDelayMs?: number | undefined + alwaysAllowBrowser?: boolean | undefined + alwaysApproveResubmit?: boolean | undefined + requestDelaySeconds?: number | undefined + alwaysAllowMcp?: boolean | undefined + alwaysAllowModeSwitch?: boolean | undefined + alwaysAllowSubtasks?: boolean | undefined + alwaysAllowExecute?: boolean | undefined + allowedCommands?: string[] | undefined + browserToolEnabled?: boolean | undefined + browserViewportSize?: string | undefined + screenshotQuality?: number | undefined + remoteBrowserEnabled?: boolean | undefined + remoteBrowserHost?: string | undefined + cachedChromeHostUrl?: string | undefined + enableCheckpoints?: boolean | undefined + ttsEnabled?: boolean | undefined + ttsSpeed?: number | undefined + soundEnabled?: boolean | undefined + soundVolume?: number | undefined + maxOpenTabsContext?: number | undefined + maxWorkspaceFiles?: number | undefined + showRooIgnoredFiles?: boolean | undefined + maxReadFileLine?: number | undefined + terminalOutputLineLimit?: number | undefined + terminalShellIntegrationTimeout?: number | undefined + terminalShellIntegrationDisabled?: boolean | undefined + terminalCommandDelay?: number | undefined + terminalPowershellCounter?: boolean | undefined + terminalZshClearEolMark?: boolean | undefined + terminalZshOhMy?: boolean | undefined + terminalZshP10k?: boolean | undefined + terminalZdotdir?: boolean | undefined + terminalCompressProgressBar?: boolean | undefined + experiments?: + | { + powerSteering: boolean + } + | undefined + language?: + | ( + | "ca" + | "de" + | "en" + | "es" + | "fr" + | "hi" + | "it" + | "ja" + | "ko" + | "nl" + | "pl" + | "pt-BR" + | "ru" + | "tr" + | "vi" + | "zh-CN" + | "zh-TW" + ) + | undefined + telemetrySetting?: ("unset" | "enabled" | "disabled") | undefined + mcpEnabled?: boolean | undefined + enableMcpServerCreation?: boolean | undefined + mode?: string | undefined + modeApiConfigs?: + | { + [x: string]: string + } + | undefined + customModes?: + | { + slug: string + name: string + roleDefinition: string + customInstructions?: string | undefined + groups: ( + | ("read" | "edit" | "browser" | "command" | "mcp" | "modes") + | [ + "read" | "edit" | "browser" | "command" | "mcp" | "modes", + { + fileRegex?: string | undefined + description?: string | undefined + }, + ] + )[] + source?: ("global" | "project") | undefined + }[] + | undefined + customModePrompts?: + | { + [x: string]: + | { + roleDefinition?: string | undefined + customInstructions?: string | undefined + } + | undefined + } + | undefined + customSupportPrompts?: + | { + [x: string]: string | undefined + } + | undefined + enhancementApiConfigId?: string | undefined + historyPreviewCollapsed?: boolean | undefined + } + text: string + images?: string[] | undefined + newTab?: boolean | undefined + } + } + | { + commandName: "CancelTask" + data: string + } + | { + commandName: "CloseTask" + data: string + } + +export type { TaskCommand } + +type TaskEvent = + | { + eventName: "message" + payload: [ + { + taskId: string + action: "created" | "updated" + message: { + ts: number + type: "ask" | "say" + ask?: + | ( + | "followup" + | "command" + | "command_output" + | "completion_result" + | "tool" + | "api_req_failed" + | "resume_task" + | "resume_completed_task" + | "mistake_limit_reached" + | "browser_action_launch" + | "use_mcp_server" + ) + | undefined + say?: + | ( + | "error" + | "api_req_started" + | "api_req_finished" + | "api_req_retried" + | "api_req_retry_delayed" + | "api_req_deleted" + | "text" + | "reasoning" + | "completion_result" + | "user_feedback" + | "user_feedback_diff" + | "command_output" + | "shell_integration_warning" + | "browser_action" + | "browser_action_result" + | "mcp_server_request_started" + | "mcp_server_response" + | "subtask_result" + | "checkpoint_saved" + | "rooignore_error" + | "diff_error" + ) + | undefined + text?: string | undefined + images?: string[] | undefined + partial?: boolean | undefined + reasoning?: string | undefined + conversationHistoryIndex?: number | undefined + checkpoint?: + | { + [x: string]: unknown + } + | undefined + progressStatus?: + | { + icon?: string | undefined + text?: string | undefined + } + | undefined + } + }, + ] + } + | { + eventName: "taskCreated" + payload: [string] + } + | { + eventName: "taskStarted" + payload: [string] + } + | { + eventName: "taskModeSwitched" + payload: [string, string] + } + | { + eventName: "taskPaused" + payload: [string] + } + | { + eventName: "taskUnpaused" + payload: [string] + } + | { + eventName: "taskAskResponded" + payload: [string] + } + | { + eventName: "taskAborted" + payload: [string] + } + | { + eventName: "taskSpawned" + payload: [string, string] + } + | { + eventName: "taskCompleted" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + { + [x: string]: { + attempts: number + failures: number + } + }, + ] + } + | { + eventName: "taskTokenUsageUpdated" + payload: [ + string, + { + totalTokensIn: number + totalTokensOut: number + totalCacheWrites?: number | undefined + totalCacheReads?: number | undefined + totalCost: number + contextTokens: number + }, + ] + } + +export type { TaskEvent } diff --git a/src/schemas/index.ts b/src/schemas/index.ts index fa3fef0bfc..f03f589c3e 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -1062,6 +1062,142 @@ export const rooCodeEventsSchema = z.object({ export type RooCodeEvents = z.infer +/** + * Ack + */ + +export const ackSchema = z.object({ + clientId: z.string(), + pid: z.number(), + ppid: z.number(), +}) + +export type Ack = z.infer + +/** + * TaskCommand + */ + +export enum TaskCommandName { + StartNewTask = "StartNewTask", + CancelTask = "CancelTask", + CloseTask = "CloseTask", +} + +export const taskCommandSchema = z.discriminatedUnion("commandName", [ + z.object({ + commandName: z.literal(TaskCommandName.StartNewTask), + data: z.object({ + configuration: rooCodeSettingsSchema, + text: z.string(), + images: z.array(z.string()).optional(), + newTab: z.boolean().optional(), + }), + }), + z.object({ + commandName: z.literal(TaskCommandName.CancelTask), + data: z.string(), + }), + z.object({ + commandName: z.literal(TaskCommandName.CloseTask), + data: z.string(), + }), +]) + +export type TaskCommand = z.infer + +/** + * TaskEvent + */ + +export const taskEventSchema = z.discriminatedUnion("eventName", [ + z.object({ + eventName: z.literal(RooCodeEventName.Message), + payload: rooCodeEventsSchema.shape[RooCodeEventName.Message], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskCreated), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCreated], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskStarted), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskStarted], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskModeSwitched), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskModeSwitched], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskPaused), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskPaused], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskUnpaused), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskUnpaused], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskAskResponded), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAskResponded], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskAborted), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAborted], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskSpawned), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskSpawned], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskCompleted), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCompleted], + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskTokenUsageUpdated), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskTokenUsageUpdated], + }), +]) + +export type TaskEvent = z.infer + +/** + * IpcMessage + */ + +export enum IpcMessageType { + Connect = "Connect", + Disconnect = "Disconnect", + Ack = "Ack", + TaskCommand = "TaskCommand", + TaskEvent = "TaskEvent", +} + +export enum IpcOrigin { + Client = "client", + Server = "server", +} + +export const ipcMessageSchema = z.discriminatedUnion("type", [ + z.object({ + type: z.literal(IpcMessageType.Ack), + origin: z.literal(IpcOrigin.Server), + data: ackSchema, + }), + z.object({ + type: z.literal(IpcMessageType.TaskCommand), + origin: z.literal(IpcOrigin.Client), + clientId: z.string(), + data: taskCommandSchema, + }), + z.object({ + type: z.literal(IpcMessageType.TaskEvent), + origin: z.literal(IpcOrigin.Server), + relayClientId: z.string().optional(), + data: taskEventSchema, + }), +]) + +export type IpcMessage = z.infer + /** * TypeDefinition */ @@ -1078,7 +1214,10 @@ export const typeDefinitions: TypeDefinition[] = [ { schema: clineMessageSchema, identifier: "ClineMessage" }, { schema: tokenUsageSchema, identifier: "TokenUsage" }, { schema: rooCodeEventsSchema, identifier: "RooCodeEvents" }, + { schema: ipcMessageSchema, identifier: "IpcMessage" }, + { schema: taskCommandSchema, identifier: "TaskCommand" }, + { schema: taskEventSchema, identifier: "TaskEvent" }, ] -// Also export as default for ESM compatibility +// Also export as default for ESM compatibility. export default { typeDefinitions } diff --git a/src/schemas/ipc.ts b/src/schemas/ipc.ts deleted file mode 100644 index 08ab0c974d..0000000000 --- a/src/schemas/ipc.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { z } from "zod" - -import { RooCodeEventName, rooCodeEventsSchema, rooCodeSettingsSchema } from "./index" - -/** - * Ack - */ - -export const ackSchema = z.object({ - clientId: z.string(), - pid: z.number(), - ppid: z.number(), -}) - -export type Ack = z.infer - -/** - * TaskCommand - */ - -export enum TaskCommandName { - StartNewTask = "StartNewTask", - CancelTask = "CancelTask", - CloseTask = "CloseTask", -} - -export const taskCommandSchema = z.discriminatedUnion("commandName", [ - z.object({ - commandName: z.literal(TaskCommandName.StartNewTask), - data: z.object({ - configuration: rooCodeSettingsSchema, - text: z.string(), - images: z.array(z.string()).optional(), - newTab: z.boolean().optional(), - }), - }), - z.object({ - commandName: z.literal(TaskCommandName.CancelTask), - data: z.string(), - }), - z.object({ - commandName: z.literal(TaskCommandName.CloseTask), - data: z.string(), - }), -]) - -export type TaskCommand = z.infer - -/** - * TaskEvent - */ - -export const taskEventSchema = z.discriminatedUnion("eventName", [ - z.object({ - eventName: z.literal(RooCodeEventName.Message), - payload: rooCodeEventsSchema.shape[RooCodeEventName.Message], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskCreated), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCreated], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskStarted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskStarted], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskModeSwitched), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskModeSwitched], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskPaused), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskPaused], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskUnpaused), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskUnpaused], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskAskResponded), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAskResponded], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskAborted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAborted], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskSpawned), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskSpawned], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskCompleted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCompleted], - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskTokenUsageUpdated), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskTokenUsageUpdated], - }), -]) - -export type TaskEvent = z.infer - -/** - * IpcMessage - */ - -export enum IpcMessageType { - Connect = "Connect", - Disconnect = "Disconnect", - Ack = "Ack", - TaskCommand = "TaskCommand", - TaskEvent = "TaskEvent", -} - -export enum IpcOrigin { - Client = "client", - Server = "server", -} - -export const ipcMessageSchema = z.discriminatedUnion("type", [ - z.object({ - type: z.literal(IpcMessageType.Ack), - origin: z.literal(IpcOrigin.Server), - data: ackSchema, - }), - z.object({ - type: z.literal(IpcMessageType.TaskCommand), - origin: z.literal(IpcOrigin.Client), - clientId: z.string(), - data: taskCommandSchema, - }), - z.object({ - type: z.literal(IpcMessageType.TaskEvent), - origin: z.literal(IpcOrigin.Server), - relayClientId: z.string().optional(), - data: taskEventSchema, - }), -]) - -export type IpcMessage = z.infer