/**
 * `opensquid setup wizard hooks` — write Claude Code hook entries.
 *
 * Two-stage wizard:
 *   1. Discover-and-preview — read existing `~/.claude/settings.json` and
 *      (when present) `<project>/.claude/settings.json`, project the
 *      proposed change, render a counts summary to stdout. If `--dry-run`
 *      was passed, exit here.
 *   2. Commit — call `writeOpensquidHooks(...)` on each target; print
 *      the resolved counters per file.
 *
 * Target selection:
 *   - user scope: ALWAYS targeted (`~/.claude/settings.json`).
 *   - project scope: targeted when `resolveProjectScopeRoot(cwd)` finds a
 *     `.opensquid/` ancestor — then `<projectRoot>/../.claude/settings.json`
 *     gets written too. Wait — `.opensquid/` lives at the project root, not
 *     `.claude/`. So we write to `dirname(projectScopeRoot)/.claude/settings.json`.
 *
 * Idempotent: re-running the command after the first pass produces a
 * byte-identical `~/.claude/settings.json` (verified by a test fixture).
 *
 * Flags:
 *   --dry-run    Render counts + projected output without writing.
 *   --user-only  Only write `~/.claude/settings.json`; skip project scope.
 *
 * Imports from: commander, node:path, ../wizard/settings-writer, ../../runtime/paths.
 * Imported by: src/cli.ts (via `registerSetupWizard`).
 */
import { type WriteResult } from '../wizard/settings-writer.js';
import type { Command } from 'commander';
export interface HooksCliDeps {
    /** Test injection — override the writer. Defaults to the real impl. */
    writer?: (path: string) => Promise<WriteResult>;
    /** Test injection — override the preview reader. Defaults to the real impl. */
    reader?: (path: string) => Promise<unknown>;
    /** Test injection — override `process.cwd()`. */
    cwd?: () => string;
    /** Test injection — override `homedir()` for ~/.claude resolution. */
    home?: () => string;
    stdout?: (s: string) => void;
    stderr?: (s: string) => void;
}
export interface HooksCliFlags {
    dryRun?: boolean;
    userOnly?: boolean;
}
/**
 * Resolve the two candidate settings.json paths. User-scope is always
 * present (file may not exist yet — `readSettingsJson` returns `{}`).
 * Project-scope is null when there's no `.opensquid/` ancestor.
 */
export declare function resolveTargets(deps: {
    cwd: () => string;
    home: () => string;
}): Promise<{
    user: string;
    project: string | null;
}>;
/**
 * Run the hooks wizard. Pulled out of the commander action so tests can
 * call it directly without spinning a Command tree.
 */
export declare function runHooksWizard(flags: HooksCliFlags, deps?: HooksCliDeps): Promise<void>;
/**
 * Register the `wizard hooks` subcommand under the supplied `setup` parent.
 * Returns the wizard subgroup so callers can chain additional wizards.
 */
export declare function registerSetupWizard(setup: Command, deps?: HooksCliDeps): Command;
//# sourceMappingURL=hooks.d.ts.map