Просмотр исходного кода

Add IPC types to roo-code.d.ts (#3568)

Chris Estreich 7 месяцев назад
Родитель
Сommit
8def83192d
8 измененных файлов с 2104 добавлено и 157 удалено
  1. 9 3
      scripts/generate-types.mts
  2. 1 1
      src/exports/api.ts
  3. 46 4
      src/exports/interface.ts
  4. 3 9
      src/exports/ipc.ts
  5. 970 0
      src/exports/roo-code.d.ts
  6. 935 0
      src/exports/types.ts
  7. 140 1
      src/schemas/index.ts
  8. 0 139
      src/schemas/ipc.ts

+ 9 - 3
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 { zodToTs, createTypeAlias, printNode } from "zod-to-ts"
 import { $ } from "execa"
 import { $ } from "execa"
 
 
 import schemas from "../src/schemas"
 import schemas from "../src/schemas"
+
 const { typeDefinitions } = schemas
 const { typeDefinitions } = schemas
 
 
 async function main() {
 async function main() {
@@ -16,12 +18,16 @@ async function main() {
 		types.push(`export type { ${identifier} }`)
 		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 $`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`
 	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()
 main()

+ 1 - 1
src/exports/api.ts

@@ -14,7 +14,7 @@ import {
 	ProviderSettingsEntry,
 	ProviderSettingsEntry,
 	isSecretStateKey,
 	isSecretStateKey,
 } from "../schemas"
 } from "../schemas"
-import { IpcOrigin, IpcMessageType, TaskCommandName, TaskEvent } from "../schemas/ipc"
+import { IpcOrigin, IpcMessageType, TaskCommandName, TaskEvent } from "../schemas"
 
 
 import { RooCodeAPI } from "./interface"
 import { RooCodeAPI } from "./interface"
 import { IpcServer } from "./ipc"
 import { IpcServer } from "./ipc"

+ 46 - 4
src/exports/interface.ts

@@ -1,4 +1,9 @@
 import { EventEmitter } from "events"
 import { EventEmitter } from "events"
+import { Socket } from "node:net"
+
+/**
+ * Types
+ */
 
 
 import type {
 import type {
 	GlobalSettings,
 	GlobalSettings,
@@ -7,22 +12,36 @@ import type {
 	ClineMessage,
 	ClineMessage,
 	TokenUsage,
 	TokenUsage,
 	RooCodeEvents,
 	RooCodeEvents,
+	IpcMessage,
+	TaskCommand,
+	TaskEvent,
 } from "./types"
 } from "./types"
 
 
 export type {
 export type {
-	RooCodeSettings,
 	GlobalSettings,
 	GlobalSettings,
 	ProviderSettings,
 	ProviderSettings,
 	ProviderSettingsEntry,
 	ProviderSettingsEntry,
 	ClineMessage,
 	ClineMessage,
 	TokenUsage,
 	TokenUsage,
 	RooCodeEvents,
 	RooCodeEvents,
+	IpcMessage,
+	TaskCommand,
+	TaskEvent,
 }
 }
 
 
-import { RooCodeEventName } from "../schemas"
-export type { RooCodeEventName }
+/**
+ * Enums
+ */
+
+import { RooCodeEventName, IpcOrigin, IpcMessageType } from "../schemas"
+
+export { RooCodeEventName, IpcOrigin, IpcMessageType }
+
+/**
+ * RooCodeAPI
+ */
 
 
-type RooCodeSettings = GlobalSettings & ProviderSettings
+export type RooCodeSettings = GlobalSettings & ProviderSettings
 
 
 export interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 export interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 	/**
 	/**
@@ -169,3 +188,26 @@ export interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 	 */
 	 */
 	setActiveProfile(name: string): Promise<string | undefined>
 	setActiveProfile(name: string): Promise<string | undefined>
 }
 }
+
+/**
+ * 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<IpcServerEvents> {
+	listen(): void
+
+	broadcast(message: IpcMessage): void
+
+	send(client: string | Socket, message: IpcMessage): void
+
+	get socketPath(): string
+
+	get isListening(): boolean
+}

+ 3 - 9
src/exports/ipc.ts

@@ -4,20 +4,14 @@ import * as crypto from "node:crypto"
 
 
 import ipc from "node-ipc"
 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
  * 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<IpcServerEvents> {
+export class IpcServer extends EventEmitter<IpcServerEvents> implements RooCodeIpcServer {
 	private readonly _socketPath: string
 	private readonly _socketPath: string
 	private readonly _log: (...args: unknown[]) => void
 	private readonly _log: (...args: unknown[]) => void
 	private readonly _clients: Map<string, Socket>
 	private readonly _clients: Map<string, Socket>

+ 970 - 0
src/exports/roo-code.d.ts

@@ -1,4 +1,5 @@
 import { EventEmitter } from "events"
 import { EventEmitter } from "events"
+import { Socket } from "node:net"
 
 
 type GlobalSettings = {
 type GlobalSettings = {
 	currentApiConfigName?: string | undefined
 	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
  * RooCodeEvent
  */
  */
@@ -552,7 +1482,24 @@ declare enum RooCodeEventName {
 	TaskTokenUsageUpdated = "taskTokenUsageUpdated",
 	TaskTokenUsageUpdated = "taskTokenUsageUpdated",
 	TaskToolFailed = "taskToolFailed",
 	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
 type RooCodeSettings = GlobalSettings & ProviderSettings
 interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 	/**
 	/**
@@ -680,15 +1627,38 @@ interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 	 */
 	 */
 	setActiveProfile(name: string): Promise<string | undefined>
 	setActiveProfile(name: string): Promise<string | undefined>
 }
 }
+/**
+ * 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<IpcServerEvents> {
+	listen(): void
+	broadcast(message: IpcMessage): void
+	send(client: string | Socket, message: IpcMessage): void
+	get socketPath(): string
+	get isListening(): boolean
+}
 
 
 export {
 export {
 	type ClineMessage,
 	type ClineMessage,
 	type GlobalSettings,
 	type GlobalSettings,
+	type IpcMessage,
+	IpcMessageType,
+	IpcOrigin,
+	type IpcServerEvents,
 	type ProviderSettings,
 	type ProviderSettings,
 	type ProviderSettingsEntry,
 	type ProviderSettingsEntry,
 	type RooCodeAPI,
 	type RooCodeAPI,
 	RooCodeEventName,
 	RooCodeEventName,
 	type RooCodeEvents,
 	type RooCodeEvents,
+	type RooCodeIpcServer,
 	type RooCodeSettings,
 	type RooCodeSettings,
+	type TaskCommand,
+	type TaskEvent,
 	type TokenUsage,
 	type TokenUsage,
 }
 }

+ 935 - 0
src/exports/types.ts

@@ -547,3 +547,938 @@ type RooCodeEvents = {
 }
 }
 
 
 export 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 }

+ 140 - 1
src/schemas/index.ts

@@ -1062,6 +1062,142 @@ export const rooCodeEventsSchema = z.object({
 
 
 export type RooCodeEvents = z.infer<typeof rooCodeEventsSchema>
 export type RooCodeEvents = z.infer<typeof rooCodeEventsSchema>
 
 
+/**
+ * Ack
+ */
+
+export const ackSchema = z.object({
+	clientId: z.string(),
+	pid: z.number(),
+	ppid: z.number(),
+})
+
+export type Ack = z.infer<typeof ackSchema>
+
+/**
+ * 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<typeof taskCommandSchema>
+
+/**
+ * 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<typeof taskEventSchema>
+
+/**
+ * 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<typeof ipcMessageSchema>
+
 /**
 /**
  * TypeDefinition
  * TypeDefinition
  */
  */
@@ -1078,7 +1214,10 @@ export const typeDefinitions: TypeDefinition[] = [
 	{ schema: clineMessageSchema, identifier: "ClineMessage" },
 	{ schema: clineMessageSchema, identifier: "ClineMessage" },
 	{ schema: tokenUsageSchema, identifier: "TokenUsage" },
 	{ schema: tokenUsageSchema, identifier: "TokenUsage" },
 	{ schema: rooCodeEventsSchema, identifier: "RooCodeEvents" },
 	{ 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 }
 export default { typeDefinitions }

+ 0 - 139
src/schemas/ipc.ts

@@ -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<typeof ackSchema>
-
-/**
- * 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<typeof taskCommandSchema>
-
-/**
- * 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<typeof taskEventSchema>
-
-/**
- * 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<typeof ipcMessageSchema>