import type { ApplyOatCoreResult } from '../../init/gitignore.js';
import type { CopyStatus } from '../../init/tools/shared/copy-helpers.js';
import type { ScanToolsOptions } from '../../tools/shared/scan-tools.js';
import type { PackName, ToolInfo } from '../../tools/shared/types.js';
import type { ConcreteScope } from '../../../shared/types.js';
export type UpdateTarget = {
    kind: 'name';
    name: string;
} | {
    kind: 'pack';
    pack: PackName;
} | {
    kind: 'all';
};
export interface PackAssetRefresh {
    name: string;
    type: 'template' | 'script';
    pack: PackName;
    scope: ConcreteScope;
    status: 'planned' | 'refreshed';
}
export interface UpdateResult {
    updated: ToolInfo[];
    current: ToolInfo[];
    newer: ToolInfo[];
    notInstalled: string[];
    notBundled: ToolInfo[];
    assetRefreshes: PackAssetRefresh[];
}
export interface UpdateToolsDependencies {
    scanTools: (options: ScanToolsOptions) => Promise<ToolInfo[]>;
    resolveScopeRoot: (scope: ConcreteScope, cwd: string, home: string) => Promise<string>;
    resolveAssetsRoot: () => Promise<string>;
    copyDirWithStatus: (source: string, destination: string, force: boolean) => Promise<CopyStatus>;
    copyFileWithStatus: (source: string, destination: string, force: boolean) => Promise<CopyStatus>;
    fileExists: (path: string) => Promise<boolean>;
    chmod: (path: string, mode: number) => Promise<void>;
    applyOatCoreGitignore?: (repoRoot: string) => Promise<ApplyOatCoreResult>;
}
export declare function updateTools(target: UpdateTarget, scopes: ConcreteScope[], cwd: string, home: string, dryRun: boolean, dependencies: UpdateToolsDependencies): Promise<UpdateResult>;
//# sourceMappingURL=update-tools.d.ts.map