import { EventEmitter } from 'events';
import { SelfSchedulingConfig, AgentSession } from '../types/orchestration';
import { TmuxManager } from './tmuxManager';
export interface ScheduleEntry {
    id: string;
    agentId: string;
    sessionName: string;
    windowIndex: number;
    scheduledTime: Date;
    interval: number;
    note: string;
    status: 'pending' | 'executed' | 'failed' | 'cancelled';
    processId?: number;
}
export interface SchedulerStats {
    totalScheduled: number;
    executed: number;
    failed: number;
    cancelled: number;
    averageInterval: number;
    adaptiveAdjustments: number;
}
export declare class SelfSchedulingService extends EventEmitter {
    private schedules;
    private tmux;
    private config;
    private stats;
    private workloadMetrics;
    constructor(config: SelfSchedulingConfig, tmux: TmuxManager);
    /**
     * Schedule next check-in for an agent
     */
    scheduleAgentCheckIn(agentSession: AgentSession, interval?: number, note?: string): Promise<ScheduleEntry>;
    /**
     * Calculate adaptive interval based on agent workload
     */
    private calculateAdaptiveInterval;
    /**
     * Update agent workload metrics
     */
    updateWorkloadMetrics(agentId: string, metrics: {
        tasksCompleted: number;
        tasksPending: number;
        blockers: number;
        messagesReceived: number;
    }): void;
    /**
     * Execute schedule using scheduling script
     */
    private executeSchedule;
    /**
     * Cancel a scheduled check-in
     */
    cancelSchedule(agentId: string): Promise<boolean>;
    /**
     * Reschedule an agent with new interval
     */
    reschedule(agentSession: AgentSession, newInterval: number, note?: string): Promise<ScheduleEntry>;
    /**
     * Handle schedule execution (called when schedule fires)
     */
    handleScheduleExecution(agentId: string): Promise<void>;
    /**
     * Get schedule for agent
     */
    getAgentSchedule(agentId: string): ScheduleEntry | undefined;
    /**
     * Get all active schedules
     */
    getActiveSchedules(): ScheduleEntry[];
    /**
     * Update average interval statistic
     */
    private updateAverageInterval;
    /**
     * Get scheduler statistics
     */
    getStats(): SchedulerStats;
    /**
     * Cancel all active schedules
     */
    cancelAllSchedules(): Promise<void>;
    /**
     * Create recovery schedule for crashed agent
     */
    createRecoverySchedule(agentSession: AgentSession, error: Error): Promise<void>;
    /**
     * Generate scheduling script content
     */
    generateSchedulingScript(): string;
}
//# sourceMappingURL=selfScheduler.d.ts.map