import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
import { type ApplyOatCoreResult } from '../init/gitignore.js';
import { type MultiSelectChoice, type PromptContext, type SelectChoice } from '../shared/shared.prompts.js';
import { type SyncConfig } from '../../config/index.js';
import { type OatConfig, type UserConfig } from '../../config/oat-config.js';
import { type DriftReport } from '../../drift/index.js';
import { type CanonicalEntry, type HookInstallInfo } from '../../engine/index.js';
import type { Manifest } from '../../manifest/manifest.types.js';
import { type ConfigAwareAdaptersResult, type PathMapping, type ProviderAdapter } from '../../providers/shared/index.js';
import type { ConcreteScope } from '../../shared/types.js';
import { Command } from 'commander';
import { type DetectedDocs, type DetectDocsDependencies } from './detect-docs.js';
import { type ToolPack } from './tools/index.js';
export interface InitStrayCandidate {
    provider: string;
    report: DriftReport;
    mapping: PathMapping;
    adoption?: {
        kind: 'codex_role';
        roleName: string;
        description?: string;
    };
}
interface InitDependencies {
    buildCommandContext: (options: GlobalOptions) => CommandContext;
    resolveScopeRoot: (scope: ConcreteScope, context: CommandContext) => Promise<string>;
    ensureCanonicalDirs: (scopeRoot: string, scope: ConcreteScope) => Promise<void>;
    loadManifest: (manifestPath: string) => Promise<Manifest>;
    saveManifest: (manifestPath: string, manifest: Manifest) => Promise<void>;
    scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
    collectStrays: (scopeRoot: string, scope: ConcreteScope, manifest: Manifest, canonicalEntries: CanonicalEntry[], activeAdapters?: ProviderAdapter[]) => Promise<InitStrayCandidate[]>;
    confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
    selectManyWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
    selectProvidersWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
    adoptStray: (scopeRoot: string, stray: InitStrayCandidate, manifest: Manifest, options?: {
        replaceCanonical?: boolean;
    }) => Promise<Manifest>;
    isHookInstalled: (projectRoot: string) => Promise<boolean>;
    getHookInstallInfo: (projectRoot: string) => Promise<HookInstallInfo>;
    configureLocalHooksPath: (projectRoot: string, hooksPath: string) => Promise<void>;
    installHook: (projectRoot: string) => Promise<string>;
    uninstallHook: (projectRoot: string) => Promise<void>;
    getAdapters: () => ProviderAdapter[];
    loadSyncConfig: (configPath: string) => Promise<SyncConfig>;
    readUserConfig: (userConfigDir: string) => Promise<UserConfig>;
    saveSyncConfig: (configPath: string, config: SyncConfig) => Promise<SyncConfig>;
    getConfigAwareAdapters: (adapters: ProviderAdapter[], scopeRoot: string, config: SyncConfig) => Promise<ConfigAwareAdaptersResult>;
    applyOatCoreGitignore: (repoRoot: string) => Promise<ApplyOatCoreResult>;
    dirExists: (dirPath: string) => Promise<boolean>;
    readOatConfig: (repoRoot: string) => Promise<OatConfig>;
    resolveLocalPaths: (config: OatConfig) => string[];
    addLocalPaths: (repoRoot: string, paths: string[]) => Promise<{
        added: string[];
        all: string[];
    }>;
    applyGitignore: (repoRoot: string, localPaths: string[]) => Promise<{
        action: string;
    }>;
    writeOatConfig: (repoRoot: string, config: OatConfig) => Promise<void>;
    detectDefaultBranch: (repoRoot: string) => string;
    detectExistingDocs: (repoRoot: string, deps: DetectDocsDependencies) => Promise<DetectedDocs | null>;
    fileExists: (path: string) => Promise<boolean>;
    inputWithDefault: (message: string, defaultValue: string, ctx: PromptContext) => Promise<string | null>;
    selectWithAbort: <T extends string>(message: string, choices: SelectChoice<T>[], ctx: PromptContext) => Promise<T | null>;
    runGuidedSetup: (context: CommandContext, dependencies: InitDependencies) => Promise<void>;
    runToolPacks: (context: CommandContext) => Promise<ToolPack[]>;
    runProviderSync: (projectRoot: string) => Promise<void>;
}
export declare function createInitCommand(overrides?: Partial<InitDependencies>): Command;
export {};
//# sourceMappingURL=index.d.ts.map