/**
 * Conversation Manager
 *
 * Handles conversation identification, state persistence, and coordination
 * between components. Generates unique conversation identifiers from
 * project path + git branch combination.
 */
import type { IPersistence } from './persistence-interface.js';
import type { ConversationState, ConversationContext } from './types.js';
import { WorkflowManager } from './workflow-manager.js';
export declare class ConversationManager {
    private database;
    private projectPath;
    private workflowManager;
    constructor(database: IPersistence, workflowManager: WorkflowManager, projectPath: string);
    /**
     * Get conversation state by ID
     */
    getConversationState(conversationId: string): Promise<ConversationState | null>;
    /**
     * Get the current conversation context
     *
     * Detects the current project path and git branch, then retrieves an existing
     * conversation state for this context. Does NOT create a new conversation.
     *
     * @throws Error if no conversation exists for this context
     */
    getConversationContext(): Promise<ConversationContext>;
    /**
     * Create a new conversation context
     *
     * This should only be called by the start_development tool to explicitly
     * create a new conversation with a selected workflow.
     *
     * @param workflowName - The workflow to use for this conversation
     * @param projectPathOverride - Optional project path override
     * @returns The newly created conversation context
     */
    createConversationContext(workflowName: string, projectPathOverride?: string): Promise<ConversationContext>;
    /**
     * Update the conversation state
     *
     * @param conversationId - ID of the conversation to update
     * @param updates - Partial state updates to apply
     */
    updateConversationState(conversationId: string, updates: Partial<Pick<ConversationState, 'currentPhase' | 'planFilePath' | 'workflowName' | 'gitCommitConfig' | 'requireReviewsBeforePhaseTransition'>>): Promise<void>;
    /**
     * Create a new conversation state
     *
     * @param conversationId - ID for the new conversation
     * @param projectPath - Path to the project
     * @param gitBranch - Git branch name
     */
    private createNewConversationState;
    /**
     * Generate a unique conversation ID based on project path and git branch
     *
     * @param projectPath - Path to the project
     * @param gitBranch - Git branch name
     */
    private generateConversationId;
    /**
     * Get the current project path
     */
    private getProjectPath;
    /**
     * Get the current git branch for a project
     *
     * @param projectPath - Path to the project
     */
    private getGitBranch;
    /**
     * Check if a conversation has any previous interactions
     * Used to determine if this is the first interaction in a conversation
     */
    hasInteractions(conversationId: string): Promise<boolean>;
    /**
     * Reset conversation data (hybrid approach)
     */
    resetConversation(confirm: boolean, reason?: string): Promise<{
        success: boolean;
        resetItems: string[];
        conversationId: string;
        message: string;
    }>;
    /**
     * Validate reset request parameters
     */
    private validateResetRequest;
    /**
     * Verify that reset cleanup was successful
     */
    private verifyResetCleanup;
    /**
     * Clean up conversation data (used internally)
     */
    cleanupConversationData(conversationId: string): Promise<void>;
}
