import type { AgentConfig, AgentEvent, AgentHooks, AgentResult, AgentTool, BasicLogger, ITelemetryService, RuntimeConfigExtensionKind, ToolApprovalRequest, ToolApprovalResult } from "@cline/shared"; import type { UserInstructionConfigService } from "../../extensions/config"; import type { ToolExecutors } from "../../extensions/tools"; import type { AgentTeamsRuntime, DelegatedAgentConfigProvider, SubAgentEndContext, SubAgentStartContext, TeamEvent } from "../../extensions/tools/team"; import type { WorkspaceManager } from "../../services/workspace/workspace-manager"; import type { CoreSessionConfig } from "../../types/config"; /** * Internal structural alias for the lead-agent handle that * {@link BuiltRuntime.registerLeadAgent} hands off to * `runtime-builder.ts`. Narrowed to only the `.addTools()` surface the * callback exercises; avoids depending on `@cline/agents`' `Agent` * class during the PLAN.md §3.6 Step 5 type-only migration. When * SessionRuntime is rebuilt in Step 6, this field is expected to be * dropped entirely per §3.5 row #2. */ type LeadAgentHandle = { addTools(tools: AgentTool[]): unknown; }; export interface BuiltRuntime { tools: AgentTool[]; hooks?: AgentHooks; logger?: BasicLogger; telemetry?: ITelemetryService; teamRuntime?: AgentTeamsRuntime; teamRestoredFromPersistence?: boolean; delegatedAgentConfigProvider?: DelegatedAgentConfigProvider; extensions?: AgentConfig["extensions"]; completionPolicy?: AgentConfig["completionPolicy"]; registerLeadAgent?: (agent: LeadAgentHandle) => void; shutdown: (reason: string) => Promise | void; } export interface RuntimeBuilderInput { config: CoreSessionConfig; hooks?: AgentHooks; extensions?: AgentConfig["extensions"]; onTeamEvent?: (event: TeamEvent) => void; onSubAgentEvent?: (event: AgentEvent) => void; onSubAgentStart?: (context: SubAgentStartContext) => void | Promise; onSubAgentEnd?: (context: SubAgentEndContext) => void | Promise; createSpawnTool?: () => AgentTool; onTeamRestored?: () => void; userInstructionService?: UserInstructionConfigService; pluginSkillDirectories?: ReadonlyArray; configExtensions?: RuntimeConfigExtensionKind[]; toolExecutors?: Partial; toolPolicies?: CoreSessionConfig["toolPolicies"]; workspaceManager?: WorkspaceManager; logger?: BasicLogger; telemetry?: ITelemetryService; requestToolApproval?: (request: ToolApprovalRequest) => Promise | ToolApprovalResult; } export interface RuntimeBuilder { build(input: RuntimeBuilderInput): Promise | BuiltRuntime; } export interface SessionRuntime { start(config: CoreSessionConfig): Promise<{ sessionId: string; }>; send(sessionId: string, prompt: string): Promise; abort(sessionId: string, reason?: unknown): Promise; stop(sessionId: string): Promise; poll(): Promise; } export {};