export type RunnerId = string; export type AgentType = "codex" | "opencode" | "claude-code" | "cursor-agent" | "copilot"; export interface CommonAgentConfig { command?: string; commandArgs?: string[]; env?: Record; model: string; } export type AgentConfig = ({ type: "codex"; } & CommonAgentConfig) | ({ type: "opencode"; } & CommonAgentConfig) | ({ type: "claude-code"; } & CommonAgentConfig) | ({ type: "cursor-agent"; } & CommonAgentConfig) | ({ type: "copilot"; } & CommonAgentConfig); export type CodexAgentConfig = Extract; export type OpenCodeAgentConfig = Extract; export type ClaudeCodeAgentConfig = Extract; export type CursorAgentConfig = Extract; export type CopilotAgentConfig = Extract; export interface RunnerConfig { agent: AgentConfig; } export interface RunnerInfo { id: RunnerId; pathKey: string; agent: { type: AgentType; model: string; }; } export interface ResolvedRunner { id: RunnerId; info: RunnerInfo; config: RunnerConfig; }