import type { Migration, MigrationContext, MigrationResult } from "./migration.interface.js";
/**
 * Migration: reconcile Lisa stack plugins in `.claude/settings.json` against
 * the project's currently detected types.
 *
 * Lisa enables `lisa-<type>@lisa` stack plugins by deep-merging each detected
 * stack's `merge/.claude/settings.json` template. Because the merge only ever
 * adds keys, a stack plugin enabled by a past apply persists forever even after
 * the project's nature changes — e.g. a project that once detected as TypeScript
 * but is now Rails keeps a stale `lisa-typescript@lisa`, and a TS backend that
 * briefly looked like Nest keeps a stale `lisa-nestjs@lisa`. This migration runs
 * after the merge strategies and prunes any managed stack plugin whose type is
 * no longer detected, while ensuring the detected stacks' plugins are present.
 * Non-stack plugins (`lisa@lisa`, `lisa-wiki@lisa`) and third-party marketplace
 * plugins are never touched.
 */
export declare class ReconcileClaudeStackPluginsMigration implements Migration {
    readonly name = "reconcile-claude-stack-plugins";
    readonly description = "Prune stale Lisa stack plugins from .claude/settings.json that no longer match detected types";
    /**
     * Whether reconciliation would change any managed stack plugin key.
     * @param ctx - Migration context
     * @returns True when a managed stack plugin would be added or removed
     */
    applies(ctx: MigrationContext): Promise<boolean>;
    /**
     * Reconcile the managed stack plugins and write the result back.
     * @param ctx - Migration context
     * @returns Result describing the keys removed and added
     */
    apply(ctx: MigrationContext): Promise<MigrationResult>;
}
//# sourceMappingURL=reconcile-claude-stack-plugins.d.ts.map