/**
 * Doctor Types — Shared interfaces for the mycontext doctor system
 */
export type ProjectType = "nextjs" | "turbo" | "node";
export interface ProjectInfo {
    type: ProjectType;
    name: string;
    root: string;
    version?: string;
    packageManager: "npm" | "pnpm" | "yarn" | "bun" | "unknown";
    isMonorepo: boolean;
    workspaces?: WorkspaceInfo[];
    typescript: boolean;
    nextVersion?: string;
    reactVersion?: string;
    turboVersion?: string;
}
export interface WorkspaceInfo {
    name: string;
    path: string;
    absolutePath: string;
    type: ProjectType;
    hasPackageJson: boolean;
}
export type DoctorCategory = "nextjs" | "turbo" | "node" | "dead" | "security" | "i18n";
export interface Diagnostic {
    ruleId: string;
    filePath: string;
    line?: number;
    column?: number;
    severity: "error" | "warning";
    message: string;
    help: string;
    autoFixable: boolean;
    confidence?: number;
    suggestedFix?: string;
}
export interface RuleContext {
    root: string;
    project: ProjectInfo;
    isWorkspace: boolean;
    readFile(relativePath: string): Promise<string | null>;
    fileExists(relativePath: string): Promise<boolean>;
    findFiles(pattern: RegExp, maxDepth?: number): Promise<string[]>;
    readJson(relativePath: string): Promise<any | null>;
    writeFile(relativePath: string, content: string): Promise<boolean>;
    deleteFile(relativePath: string): Promise<boolean>;
    redTeam?: boolean;
}
export interface DoctorRule {
    id: string;
    name: string;
    category: DoctorCategory;
    severity: "error" | "warning";
    description: string;
    help: string;
    appliesTo: ProjectType[];
    check(ctx: RuleContext): Promise<Diagnostic[]>;
    fix?(ctx: RuleContext, diag: Diagnostic): Promise<boolean>;
}
export interface DoctorResult {
    score: number;
    grade: string;
    diagnostics: Diagnostic[];
    project: ProjectInfo;
    ruleResults: RuleResult[];
    fixedCount?: number;
    duration: number;
}
export interface RuleResult {
    ruleId: string;
    ruleName: string;
    category: DoctorCategory;
    passed: boolean;
    diagnostics: Diagnostic[];
}
export interface DoctorOptions {
    fix?: boolean;
    verbose?: boolean;
    score?: boolean;
    project?: string;
    scope?: string;
    category?: DoctorCategory;
    dryRun?: boolean;
    json?: boolean;
    prune?: boolean;
    redTeam?: boolean;
}
export interface DiagnoseOptions {
    lint?: boolean;
    deadCode?: boolean;
    category?: DoctorCategory;
    project?: string;
    scope?: string;
}
//# sourceMappingURL=types.d.ts.map