/** * Type definitions for the provider abstraction layer */ import type { StreamCallback, PermissionHandler, AskUserQuestionHandler } from '../claude/types.js'; import type { AgentResponse, PermissionMode } from '../models/types.js'; /** Common options for all providers */ export interface ProviderCallOptions { cwd: string; sessionId?: string; model?: string; systemPrompt?: string; allowedTools?: string[]; /** Maximum number of agentic turns */ maxTurns?: number; /** Permission mode for tool execution (from workflow step) */ permissionMode?: PermissionMode; onStream?: StreamCallback; onPermissionRequest?: PermissionHandler; onAskUserQuestion?: AskUserQuestionHandler; bypassPermissions?: boolean; /** Anthropic API key for Claude provider */ anthropicApiKey?: string; /** OpenAI API key for Codex provider */ openaiApiKey?: string; } /** Provider interface - all providers must implement this */ export interface Provider { /** Call the provider with a prompt (using systemPrompt from options if provided) */ call(agentName: string, prompt: string, options: ProviderCallOptions): Promise; /** Call the provider with explicit system prompt */ callCustom(agentName: string, prompt: string, systemPrompt: string, options: ProviderCallOptions): Promise; } /** Provider type */ export type ProviderType = 'claude' | 'codex' | 'mock';