import { z, ZodSchema } from 'zod';
export interface FileInfo {
    path: string;
    name: string;
    extension: string;
    size: number;
    modified: Date;
    type: 'file' | 'directory';
}
export interface OrganizationSuggestion {
    file: FileInfo;
    suggestedPath: string;
    reason: string;
    confidence: number;
    category?: string;
    metadata?: any;
}
export interface OrganizeOptions {
    dryRun?: boolean;
    recursive?: boolean;
    config?: string;
    noCache?: boolean;
}
export interface PreviewOptions {
    recursive?: boolean;
    config?: string;
    noCache?: boolean;
}
/**
 * Generic conversation message types
 */
export type MessageRole = 'user' | 'assistant' | 'system';
export interface ConversationMessage {
    role: MessageRole;
    content: string;
}
/**
 * Configuration for conversation behavior
 */
export interface ConversationConfig {
    /** Maximum number of turns before timeout */
    maxTurns: number;
    /** System prompt template */
    systemPrompt?: string;
    /** Custom prompt parameters */
    promptParams?: Record<string, any>;
    /** Whether to maintain full message history */
    keepFullHistory: boolean;
    /** Maximum context window size */
    maxContextSize?: number;
    /** Temperature for AI responses */
    temperature?: number;
    /** Custom AI provider settings */
    aiSettings?: Record<string, any>;
}
/**
 * Result from an AI conversation turn
 */
export interface ConversationResult<T = any> {
    /** AI response content */
    response: string;
    /** Parsed structured data (if applicable) */
    data?: T;
    /** Whether the conversation needs user input */
    needsInput: boolean;
    /** Specific questions or prompts for user */
    questions?: string[];
    /** Confidence level of the response */
    confidence?: number;
    /** Metadata about the response */
    metadata?: Record<string, any>;
}
/**
 * Clarification phases where AI can ask questions
 */
export declare enum ClarificationPhase {
    INITIAL_ANALYSIS = "analysis",
    SUGGESTIONS = "suggestions",
    REFINEMENT = "refinement"
}
/**
 * Structured clarification data
 */
export interface Clarification {
    id: string;
    phase: ClarificationPhase;
    question: string;
    answer: string;
    context: string;
    timestamp: Date;
}
/**
 * Result from file organization conversation
 */
export interface OrganizationConversationResult extends ConversationResult<OrganizationSuggestion[]> {
    /** Organization suggestions */
    suggestions: OrganizationSuggestion[];
    /** AI-discovered categories */
    discoveredCategories?: Record<string, string[]>;
    /** Whether clarification is needed */
    needsClarification?: {
        questions: string[];
        reason: string;
    };
}
/**
 * User feedback on organization suggestions
 */
export interface OrganizationFeedback {
    approved: boolean;
    feedback?: string;
    specificIssues?: string[];
    selectedSuggestions?: OrganizationSuggestion[];
}
export interface AIAnalysisRequest {
    prompt: string;
    schema?: ZodSchema;
}
export interface AIAnalysisResponse {
    suggestions: Array<{
        file: FileInfo | null;
        suggestedPath: string;
        reason: string;
        confidence: number;
        category?: string;
        metadata?: any;
    }>;
    discoveredCategories?: Record<string, FileInfo[]>;
    reasoning: string;
    clarificationNeeded?: {
        questions: string[];
        reason: string;
    };
    detectedProjects?: DetectedProject[];
}
export interface CategoryConversationResponse {
    question: string;
    inputType: 'choice' | 'freeform';
    choices?: string[];
    reasoning: string;
}
export interface DetectedProject {
    name: string;
    files: FileInfo[];
    type: string;
    rootPath: string;
    indicators: string[];
}
export declare const AIAnalysisResponseSchema: z.ZodObject<{
    discoveredCategories: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
        path: z.ZodString;
        name: z.ZodString;
        extension: z.ZodString;
        size: z.ZodNumber;
        modified: z.ZodString;
        type: z.ZodEnum<["file", "directory"]>;
    }, "strip", z.ZodTypeAny, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }>, "many">>>;
    reasoning: z.ZodString;
    clarificationNeeded: z.ZodNullable<z.ZodObject<{
        questions: z.ZodArray<z.ZodString, "many">;
        reason: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        questions: string[];
        reason: string;
    }, {
        questions: string[];
        reason: string;
    }>>;
}, "strip", z.ZodTypeAny, {
    discoveredCategories: Record<string, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }[]> | null;
    reasoning: string;
    clarificationNeeded: {
        questions: string[];
        reason: string;
    } | null;
}, {
    discoveredCategories: Record<string, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }[]> | null;
    reasoning: string;
    clarificationNeeded: {
        questions: string[];
        reason: string;
    } | null;
}>;
export declare const AISuggestionsResponseSchema: z.ZodObject<{
    suggestions: z.ZodArray<z.ZodObject<{
        file: z.ZodNullable<z.ZodString>;
        suggestedPath: z.ZodString;
        reason: z.ZodString;
        confidence: z.ZodNumber;
        category: z.ZodNullable<z.ZodString>;
        metadata: z.ZodNullable<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }, {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }>, "many">;
    discoveredCategories: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
        path: z.ZodString;
        name: z.ZodString;
        extension: z.ZodString;
        size: z.ZodNumber;
        modified: z.ZodString;
        type: z.ZodEnum<["file", "directory"]>;
    }, "strip", z.ZodTypeAny, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }>, "many">>>;
    reasoning: z.ZodString;
    clarificationNeeded: z.ZodNullable<z.ZodObject<{
        questions: z.ZodArray<z.ZodString, "many">;
        reason: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        questions: string[];
        reason: string;
    }, {
        questions: string[];
        reason: string;
    }>>;
}, "strip", z.ZodTypeAny, {
    suggestions: {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }[];
    discoveredCategories: Record<string, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }[]> | null;
    reasoning: string;
    clarificationNeeded: {
        questions: string[];
        reason: string;
    } | null;
}, {
    suggestions: {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }[];
    discoveredCategories: Record<string, {
        type: "file" | "directory";
        path: string;
        name: string;
        extension: string;
        size: number;
        modified: string;
    }[]> | null;
    reasoning: string;
    clarificationNeeded: {
        questions: string[];
        reason: string;
    } | null;
}>;
export declare const FinalSuggestionsSchema: z.ZodObject<{
    suggestions: z.ZodArray<z.ZodObject<{
        file: z.ZodNullable<z.ZodString>;
        suggestedPath: z.ZodString;
        reason: z.ZodString;
        confidence: z.ZodNumber;
        category: z.ZodNullable<z.ZodString>;
        metadata: z.ZodNullable<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }, {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }>, "many">;
    reasoning: z.ZodString;
}, "strip", z.ZodTypeAny, {
    suggestions: {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }[];
    reasoning: string;
}, {
    suggestions: {
        category: string | null;
        file: string | null;
        reason: string;
        suggestedPath: string;
        confidence: number;
        metadata: {} | null;
    }[];
    reasoning: string;
}>;
export declare const CategoryConversationSchema: z.ZodObject<{
    question: z.ZodString;
    inputType: z.ZodEnum<["choice", "freeform"]>;
    choices: z.ZodNullable<z.ZodArray<z.ZodString, "many">>;
    reasoning: z.ZodString;
}, "strip", z.ZodTypeAny, {
    reasoning: string;
    question: string;
    inputType: "choice" | "freeform";
    choices: string[] | null;
}, {
    reasoning: string;
    question: string;
    inputType: "choice" | "freeform";
    choices: string[] | null;
}>;
export * from './config';
//# sourceMappingURL=index.d.ts.map