/**
 * olam implode — destroy ALL local olam global install + configs so the
 * next `npm install -g @pleri/olam-cli` lands on a clean machine.
 *
 * Wipes (in order):
 *   1. Docker containers matching `olam-*` (worlds first, then stack).
 *   2. Docker images matching `olam-*:*` and `ghcr.io/pleri/olam-*:*`.
 *   3. Docker volumes matching `olam-*`.
 *   4. Docker networks matching `olam-*`.
 *   5. The `~/.olam/` tree (worlds, vault, workspaces, cache, log).
 *   6. The global npm package `@pleri/olam-cli` (last — the command
 *      uninstalls itself, so anything after this never runs).
 *
 * Default invocation is dry-run. `--yes` actually destroys after a
 * typed-confirmation prompt ("type implode to proceed"). `--include-dirty`
 * is REQUIRED if any world has uncommitted/unpushed work — the dirty list
 * is printed so the operator can see what's about to disappear.
 *
 * NEVER touches:
 *   - `~/.claude/` (Claude Code operator config — not olam's).
 *   - Any project-level `.olam/` directories.
 *   - Repos in `~/Projects/`.
 *
 * The `--keep-X` flags scope the destruction. `--keep-images` skips step 2,
 * `--keep-vault` preserves `~/.olam/auth-data/` while still wiping the rest
 * of `~/.olam/`, `--keep-npm` skips step 6, etc.
 */
import type { Command } from 'commander';
export interface ExecResult {
    readonly exitCode: number;
    readonly stdout: string;
    readonly stderr: string;
}
export type ExecFn = (cmd: string, args: readonly string[]) => ExecResult;
export interface ImplodeOptions {
    readonly yes: boolean;
    readonly includeDirty: boolean;
    readonly keepWorlds: boolean;
    readonly keepImages: boolean;
    readonly keepVault: boolean;
    readonly keepNpm: boolean;
    readonly keepVolumes: boolean;
    readonly keepNetworks: boolean;
    readonly json: boolean;
    /** Test seam: skip the typed-confirmation prompt and use this answer. */
    readonly confirmAnswer?: string;
    /** Test seam: inject docker / npm exec calls. */
    readonly exec?: ExecFn;
    /** Test seam: override `~/.olam` for sandboxed runs. */
    readonly olamHome?: string;
}
export interface WorldEntry {
    readonly id: string;
    readonly bytes: number;
    readonly dirty: boolean;
    readonly note: string;
    readonly path: string;
}
export interface Survey {
    readonly containers: readonly string[];
    readonly images: readonly string[];
    readonly volumes: readonly string[];
    readonly networks: readonly string[];
    readonly worlds: readonly WorldEntry[];
    readonly homeBytesNonWorld: number;
    readonly npmInstalled: boolean;
    readonly npmGlobalRoot: string | null;
}
/**
 * Build a complete survey of every olam-owned resource on the machine.
 * Pure function — no destruction. Safe to call any time.
 */
export declare function surveyOlam(opts?: {
    exec?: ExecFn;
    olamHome?: string;
}): Survey;
export declare function renderSurvey(survey: Survey, opts: ImplodeOptions): string;
export interface ImplodeResult {
    readonly removed: string[];
    readonly skipped: string[];
    readonly errors: string[];
}
export declare function executeImplode(survey: Survey, opts: ImplodeOptions): Promise<ImplodeResult>;
export declare function registerImplode(program: Command): void;
export declare function runImplode(opts: ImplodeOptions): Promise<number>;
//# sourceMappingURL=implode.d.ts.map