/**
 * MessageDispatcher
 *
 * Handles incoming user messages — the routing logic that decides whether to
 * start a new session, queue to an existing one, or restart on model/agent change.
 *
 * Extracted from `InteractiveSessionService` in Phase 6 of the strangler refactor.
 * See `docs/plans/2026-04-14-interactive-session-service-refactor.md`.
 */
import type { IInteractiveSessionRepository } from '../../../../application/ports/output/repositories/interactive-session-repository.interface.js';
import type { IInteractiveMessageRepository } from '../../../../application/ports/output/repositories/interactive-message-repository.interface.js';
import type { InteractiveMessage } from '../../../../domain/generated/output.js';
import type { SessionRegistry } from '../core/session-registry.js';
import type { SessionPersistence } from '../core/session-persistence.js';
import type { SessionBootstrapper } from '../lifecycle/session-bootstrapper.js';
import type { SessionTerminator } from '../lifecycle/session-terminator.js';
import type { TurnExecutor } from '../runtime/turn.executor.js';
export declare class MessageDispatcher {
    private readonly sessionRepo;
    private readonly messageRepo;
    private readonly registry;
    private readonly persistence;
    private readonly bootstrapper;
    private readonly terminator;
    private readonly turnExecutor;
    constructor(sessionRepo: IInteractiveSessionRepository, messageRepo: IInteractiveMessageRepository, registry: SessionRegistry, persistence: SessionPersistence, bootstrapper: SessionBootstrapper, terminator: SessionTerminator, turnExecutor: TurnExecutor);
    /**
     * Send a message to an already-identified session (by session ID).
     * Validates session is ready, persists user message, enqueues turn.
     */
    sendMessage(sessionId: string, content: string): Promise<InteractiveMessage>;
    /**
     * Feature-scoped send — the primary entry point used by the UI.
     * Routes to the appropriate action: boot new session, enqueue to ready session,
     * queue to booting session, or restart on model/agent change.
     */
    sendUserMessage(featureId: string, content: string, worktreePath: string, model?: string, agentType?: string, systemPrompt?: string, agentKickoffOverride?: string, persistUserMessage?: boolean): Promise<InteractiveMessage>;
}
//# sourceMappingURL=message-dispatcher.d.ts.map