| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- import { z } from "zod"
- import { RooCodeEventName } from "./events.js"
- import type { RooCodeSettings } from "./global-settings.js"
- import type { ClineMessage, QueuedMessage, TokenUsage } from "./message.js"
- import type { ToolUsage, ToolName } from "./tool.js"
- import type { StaticAppProperties, GitProperties, TelemetryProperties } from "./telemetry.js"
- import type { TodoItem } from "./todo.js"
- /**
- * TaskProviderLike
- */
- export interface TaskProviderLike {
- // Tasks
- getCurrentTask(): TaskLike | undefined
- getRecentTasks(): string[]
- createTask(
- text?: string,
- images?: string[],
- parentTask?: TaskLike,
- options?: CreateTaskOptions,
- configuration?: RooCodeSettings,
- ): Promise<TaskLike>
- cancelTask(): Promise<void>
- clearTask(): Promise<void>
- resumeTask(taskId: string): void
- // Modes
- getModes(): Promise<{ slug: string; name: string }[]>
- getMode(): Promise<string>
- setMode(mode: string): Promise<void>
- // Provider Profiles
- getProviderProfiles(): Promise<{ name: string; provider?: string }[]>
- getProviderProfile(): Promise<string>
- setProviderProfile(providerProfile: string): Promise<void>
- // Telemetry
- readonly appProperties: StaticAppProperties
- readonly gitProperties: GitProperties | undefined
- getTelemetryProperties(): Promise<TelemetryProperties>
- readonly cwd: string
- // Event Emitter
- on<K extends keyof TaskProviderEvents>(
- event: K,
- listener: (...args: TaskProviderEvents[K]) => void | Promise<void>,
- ): this
- off<K extends keyof TaskProviderEvents>(
- event: K,
- listener: (...args: TaskProviderEvents[K]) => void | Promise<void>,
- ): this
- // @TODO: Find a better way to do this.
- postStateToWebview(): Promise<void>
- }
- export type TaskProviderEvents = {
- [RooCodeEventName.TaskCreated]: [task: TaskLike]
- [RooCodeEventName.TaskStarted]: [taskId: string]
- [RooCodeEventName.TaskCompleted]: [taskId: string, tokenUsage: TokenUsage, toolUsage: ToolUsage]
- [RooCodeEventName.TaskAborted]: [taskId: string]
- [RooCodeEventName.TaskFocused]: [taskId: string]
- [RooCodeEventName.TaskUnfocused]: [taskId: string]
- [RooCodeEventName.TaskActive]: [taskId: string]
- [RooCodeEventName.TaskInteractive]: [taskId: string]
- [RooCodeEventName.TaskResumable]: [taskId: string]
- [RooCodeEventName.TaskIdle]: [taskId: string]
- [RooCodeEventName.TaskPaused]: [taskId: string]
- [RooCodeEventName.TaskUnpaused]: [taskId: string]
- [RooCodeEventName.TaskSpawned]: [taskId: string]
- [RooCodeEventName.TaskDelegated]: [parentTaskId: string, childTaskId: string]
- [RooCodeEventName.TaskDelegationCompleted]: [parentTaskId: string, childTaskId: string, summary: string]
- [RooCodeEventName.TaskDelegationResumed]: [parentTaskId: string, childTaskId: string]
- [RooCodeEventName.TaskUserMessage]: [taskId: string]
- [RooCodeEventName.TaskTokenUsageUpdated]: [taskId: string, tokenUsage: TokenUsage, toolUsage: ToolUsage]
- [RooCodeEventName.ModeChanged]: [mode: string]
- [RooCodeEventName.ProviderProfileChanged]: [config: { name: string; provider?: string }]
- }
- /**
- * TaskLike
- */
- export interface CreateTaskOptions {
- enableCheckpoints?: boolean
- consecutiveMistakeLimit?: number
- experiments?: Record<string, boolean>
- initialTodos?: TodoItem[]
- /** Initial status for the task's history item (e.g., "active" for child tasks) */
- initialStatus?: "active" | "delegated" | "completed"
- }
- export enum TaskStatus {
- Running = "running",
- Interactive = "interactive",
- Resumable = "resumable",
- Idle = "idle",
- None = "none",
- }
- export const taskMetadataSchema = z.object({
- task: z.string().optional(),
- images: z.array(z.string()).optional(),
- })
- export type TaskMetadata = z.infer<typeof taskMetadataSchema>
- export interface TaskLike {
- readonly taskId: string
- readonly rootTaskId?: string
- readonly parentTaskId?: string
- readonly childTaskId?: string
- readonly metadata: TaskMetadata
- readonly taskStatus: TaskStatus
- readonly taskAsk: ClineMessage | undefined
- readonly queuedMessages: QueuedMessage[]
- readonly tokenUsage: TokenUsage | undefined
- on<K extends keyof TaskEvents>(event: K, listener: (...args: TaskEvents[K]) => void | Promise<void>): this
- off<K extends keyof TaskEvents>(event: K, listener: (...args: TaskEvents[K]) => void | Promise<void>): this
- approveAsk(options?: { text?: string; images?: string[] }): void
- denyAsk(options?: { text?: string; images?: string[] }): void
- submitUserMessage(text: string, images?: string[], mode?: string, providerProfile?: string): Promise<void>
- abortTask(): void
- }
- export type TaskEvents = {
- // Task Lifecycle
- [RooCodeEventName.TaskStarted]: []
- [RooCodeEventName.TaskCompleted]: [taskId: string, tokenUsage: TokenUsage, toolUsage: ToolUsage]
- [RooCodeEventName.TaskAborted]: []
- [RooCodeEventName.TaskFocused]: []
- [RooCodeEventName.TaskUnfocused]: []
- [RooCodeEventName.TaskActive]: [taskId: string]
- [RooCodeEventName.TaskInteractive]: [taskId: string]
- [RooCodeEventName.TaskResumable]: [taskId: string]
- [RooCodeEventName.TaskIdle]: [taskId: string]
- // Subtask Lifecycle
- [RooCodeEventName.TaskPaused]: [taskId: string]
- [RooCodeEventName.TaskUnpaused]: [taskId: string]
- [RooCodeEventName.TaskSpawned]: [taskId: string]
- // Task Execution
- [RooCodeEventName.Message]: [{ action: "created" | "updated"; message: ClineMessage }]
- [RooCodeEventName.TaskModeSwitched]: [taskId: string, mode: string]
- [RooCodeEventName.TaskAskResponded]: []
- [RooCodeEventName.TaskUserMessage]: [taskId: string]
- [RooCodeEventName.QueuedMessagesUpdated]: [taskId: string, messages: QueuedMessage[]]
- // Task Analytics
- [RooCodeEventName.TaskToolFailed]: [taskId: string, tool: ToolName, error: string]
- [RooCodeEventName.TaskTokenUsageUpdated]: [taskId: string, tokenUsage: TokenUsage, toolUsage: ToolUsage]
- }
|