import type { LogLevel } from "../logger.js"; export type OutputMode = "interactive" | "json"; export interface WingmanConfig { logLevel?: LogLevel; defaultAgent?: string; summarization?: { enabled?: boolean; maxTokensBeforeSummary?: number; messagesToKeep?: number; }; modelRetry?: { enabled?: boolean; maxRetries?: number; backoffFactor?: number; initialDelayMs?: number; maxDelayMs?: number; jitter?: boolean; onFailure?: "continue" | "error"; }; toolRetry?: { enabled?: boolean; maxRetries?: number; backoffFactor?: number; initialDelayMs?: number; maxDelayMs?: number; jitter?: boolean; onFailure?: "continue" | "error"; tools?: string[]; }; humanInTheLoop?: { enabled?: boolean; interruptOn?: Record; description?: string; argsSchema?: Record; }>; }; gateway?: { host?: string; port?: number; stateDir?: string; auth?: { mode?: "token" | "password" | "none"; token?: string; password?: string; allowTailscale?: boolean; }; controlUi?: { enabled?: boolean; port?: number; pairingRequired?: boolean; allowInsecureAuth?: boolean; }; adapters?: { discord?: { enabled?: boolean; token?: string; mentionOnly?: boolean; allowBots?: boolean; allowedGuilds?: string[]; allowedChannels?: string[]; channelSessions?: Record; sessionCommand?: string; gatewayUrl?: string; gatewayToken?: string; gatewayPassword?: string; responseChunkSize?: number; }; teams?: { enabled?: boolean; appId?: string; appPassword?: string; appType?: "MultiTenant" | "SingleTenant" | "UserAssignedMsi" | "UserAssignedMSI"; tenantId?: string; endpointPath?: string; mentionOnly?: boolean; allowBots?: boolean; allowedTeamIds?: string[]; allowedChannelIds?: string[]; channelSessions?: Record; sessionCommand?: string; gatewayUrl?: string; gatewayToken?: string; gatewayPassword?: string; responseChunkSize?: number; }; }; }; agents?: { list?: Array<{ id: string; name?: string; default?: boolean; workspace?: string; agentDir?: string; model?: string; }>; bindings?: Array<{ agentId: string; match: { channel: string; accountId?: string; guildId?: string; teamId?: string; peer?: { kind: "dm" | "group" | "channel"; id: string; }; }; }>; }; cli?: { theme?: string; outputMode?: "auto" | OutputMode; }; } export interface LogEvent { type: "log"; level: LogLevel; message: string; timestamp: string; args?: any[]; } export interface AgentStartEvent { type: "agent-start"; agent: string; prompt: string; timestamp: string; } export interface AgentStreamEvent { type: "agent-stream"; chunk: any; tokenUsage?: { inputTokens: number; outputTokens: number; totalTokens: number; }; estimatedContextTokens?: number; thresholdTokens?: number; timestamp: string; } export interface AgentContextSummarizingEvent { type: "context-summarizing"; timestamp: string; } export interface AgentContextSummarizedEvent { type: "context-summarized"; inputTokens: number; peakInputTokens: number; thresholdTokens?: number; timestamp: string; } export interface AgentCompleteEvent { type: "agent-complete"; result: any; timestamp: string; } export interface AgentErrorEvent { type: "agent-error"; error: string; stack?: string; logFile?: string; timestamp: string; } export interface SkillBrowseEvent { type: "skill-browse"; skills: Array<{ name: string; description: string; }>; timestamp: string; } export interface SkillInstallProgressEvent { type: "skill-install-progress"; skill: string; status: string; timestamp: string; } export interface SkillInstallCompleteEvent { type: "skill-install-complete"; skill: string; path: string; timestamp: string; } export interface SkillListEvent { type: "skill-list"; skills: Array<{ name: string; description: string; path: string; }>; timestamp: string; } export interface SkillRemoveEvent { type: "skill-remove"; skill: string; timestamp: string; } export type OutputEvent = LogEvent | AgentStartEvent | AgentStreamEvent | AgentContextSummarizingEvent | AgentContextSummarizedEvent | AgentCompleteEvent | AgentErrorEvent | SkillBrowseEvent | SkillInstallProgressEvent | SkillInstallCompleteEvent | SkillListEvent | SkillRemoveEvent; export interface TextBlock { content: string; isStreaming: boolean; } export interface ToolCallBlock { name: string; args: Record; status: "running" | "complete" | "error"; startTime: number; endTime?: number; result?: { output: string; truncated: boolean; error?: string; }; } export interface ToolResultBlock { toolCallId: string; output: string; truncated: boolean; error?: string; } export type ContentBlockData = TextBlock | ToolCallBlock | ToolResultBlock; export interface ContentBlock { id: string; type: "text" | "tool-call" | "tool-result"; timestamp: number; data: ContentBlockData; } export interface AgentCommandArgs { agent?: string; verbosity: LogLevel; outputMode: OutputMode; prompt: string; } export interface ParsedArgs { command: string; args: string[]; flags: { agent?: string; verbose?: string; help?: boolean; }; }