/** * GitHub Copilot CLI Executor * * Executor implementation for GitHub Copilot CLI (@github/copilot). * Uses plain text streaming protocol with session ID discovery via log files. * * @module execution-engine/agents/copilot */ import type { ExecutionTask } from '../../engine/types.js'; import type { AgentCapabilities, SpawnedChild, NormalizedEntry, OutputChunk } from '../types/agent-executor.js'; import { BaseAgentExecutor } from '../base/base-executor.js'; import type { CopilotConfig } from './config.js'; /** * GitHub Copilot CLI Executor * * Implements IAgentExecutor for GitHub Copilot CLI integration. * * **Features**: * - Plain text output with ANSI escape stripping * - Session ID discovery via log file polling * - Session resumption support via `--resume` * - Native MCP support * - Fine-grained tool permissions * - Multiple model support (GPT-4, Claude, etc.) * * **Limitations**: * - No structured output (no tool call tracking, no diffs) * - Session discovery adds ~200ms latency * - Requires authentication setup (`npx @github/copilot` then `/login`) * * @example * ```typescript * const executor = new CopilotExecutor({ * workDir: '/path/to/project', * model: 'gpt-4o', * allowAllTools: true, * }); * * const spawned = await executor.executeTask({ * id: 'task-1', * type: 'issue', * prompt: 'Add user authentication', * workDir: '/path/to/project', * config: {}, * }); * ``` */ export declare class CopilotExecutor extends BaseAgentExecutor { private config; /** * Create a new Copilot executor * * @param config - Copilot-specific configuration */ constructor(config: CopilotConfig); /** * Execute a new task with Copilot CLI * * Spawns Copilot process with --prompt flag for non-interactive execution. * * @param task - Task to execute * @returns Spawned child process */ executeTask(task: ExecutionTask): Promise; /** * Resume a previous session * * @param task - Task with prompt for follow-up * @param sessionId - Session ID from previous execution * @returns Spawned child process */ resumeTask(task: ExecutionTask, sessionId: string): Promise; /** * Normalize Copilot output stream * * Processes plain text output, strips ANSI escapes, batches into paragraphs. * * @param outputStream - Raw output chunks from process * @param _workDir - Working directory (unused for Copilot) * @returns Async iterable of normalized entries */ normalizeOutput(outputStream: AsyncIterable, _workDir: string): AsyncIterable; /** * Get Copilot executor capabilities * * @returns Capabilities object */ getCapabilities(): AgentCapabilities; /** * Check if Copilot CLI is available and authenticated * * Checks for either: * - ~/.copilot/config.json (main config with logged_in_users) * - ~/.copilot/mcp-config.json (MCP configuration) * * @returns True if Copilot is set up */ checkAvailability(): Promise; /** * Get default MCP config path * * @returns Path to ~/.copilot/mcp-config.json or null if home dir not found */ getDefaultMcpConfigPath(): string | null; /** * Build command arguments for Copilot CLI * * @param logDir - Temporary log directory path * @param sessionId - Optional session ID for resumption * @returns Array of command arguments */ private buildArgs; /** * Combine system prompt with user prompt * * @param userPrompt - User's prompt * @returns Combined prompt */ private combinePrompt; /** * Create output normalizer processor * * @returns Configured PlainTextLogProcessor */ private createOutputNormalizer; /** * Start session ID discovery in background * * Polls log directory for session file and injects session ID into stdout. * * @param logDir - Log directory to watch * @param child - Child process to inject session ID into */ private startSessionDiscovery; } //# sourceMappingURL=executor.d.ts.map