import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
import { type PjmDoctorOptions } from '../pjm/doctor.js';
import { type OatConfig, type OatLocalConfig, type UserConfig } from '../../config/oat-config.js';
import { type Manifest } from '../../manifest/index.js';
import { type MatrixCellAvailabilityResponse, type ValidateMatrixCellOptions } from '../../providers/identity/availability.js';
import { createDispatchValidationPassContext, validateDispatchMatrixRefs } from '../../providers/identity/dispatch-validation.js';
import type { ConcreteScope } from '../../shared/types.js';
import { type DoctorCheck } from '../../ui/output.js';
import { Command } from 'commander';
interface DoctorDependencies {
    buildCommandContext: (options: GlobalOptions) => CommandContext;
    resolveScopeRoot: (scope: ConcreteScope, context: CommandContext) => Promise<string>;
    pathExists: (path: string) => Promise<boolean>;
    loadManifest: (manifestPath: string) => Promise<Manifest>;
    checkSymlinkSupport: (scopeRoot: string) => Promise<boolean>;
    checkProviders: (scopeRoot: string) => Promise<Array<{
        name: string;
        detected: boolean;
        version: string | null;
    }>>;
    readFile: (path: string) => Promise<string>;
    resolveAssetsRoot: () => Promise<string>;
    readOatConfig: (repoRoot: string) => Promise<OatConfig>;
    readOatLocalConfig: (repoRoot: string) => Promise<OatLocalConfig>;
    readUserConfig: (userConfigDir: string) => Promise<UserConfig>;
    validateMatrixCell: (provider: string, value: string, options: ValidateMatrixCellOptions) => Promise<MatrixCellAvailabilityResponse>;
    createDispatchValidationPassContext: typeof createDispatchValidationPassContext;
    validateDispatchMatrixRefs: typeof validateDispatchMatrixRefs;
    processEnv: NodeJS.ProcessEnv;
    runPjmDoctorChecks: (repoRoot: string, options?: PjmDoctorOptions) => Promise<DoctorCheck[]>;
    checkSkillVersions: (scopeRoot: string, assetsRoot: string, pathExists: (path: string) => Promise<boolean>) => Promise<SkillVersionReport>;
    checkStaleInvocations: (repoRoot: string) => Promise<DoctorCheck>;
}
interface OutdatedSkillVersion {
    skill: string;
    installedVersion: string | null;
    bundledVersion: string | null;
}
interface SkillVersionReport {
    installedSkillCount: number;
    skippedMissingBundledCount: number;
    outdatedSkills: OutdatedSkillVersion[];
}
export declare function createDoctorCommand(overrides?: Partial<DoctorDependencies>): Command;
export {};
//# sourceMappingURL=index.d.ts.map