/**
 * WIZ.5 — `opensquid setup chat` commander wiring.
 *
 * Thin shim: parses three flags (--dry-run, --replace, --skip-test) and
 * delegates to `runChatSetupWizard()` from `./chat_actions.ts`. Mirrors the
 * registration shape of `permissions.ts` / `triggers.ts` / `schedule.ts`.
 *
 * Flag semantics (locked per WIZ.5 spec):
 *   --dry-run    Walk the wizard, render the plan preview, then EXIT without
 *                writing. Maps to `WizardDeps.dryRun = true`. The wizard
 *                short-circuits before `executePlan`. No backups created,
 *                no files modified.
 *   --replace    Skip the existing-config (idempotency) branch — proceed
 *                straight to authoring fresh config. Maps to
 *                `WizardDeps.replace = true`. The user still sees the
 *                dry-run preview + confirm before any write happens.
 *   --skip-test  Skip the WIZ.4 channel-test step. Implemented by setting
 *                `OPENSQUID_NO_BILLED_CALLS=1` in the wizard's env BEFORE
 *                invocation — the test step already honors this env var.
 *                We restore the prior value on exit so adjacent CLI calls
 *                in the same process aren't poisoned.
 *
 * Exit codes (inherited from `runChatSetupWizard`):
 *   0    completed | no_changes | dry_run
 *   1    concurrent_lock (another wizard running)
 *   2    malformed models.yaml (detection-time abort)
 *   3    write failure (rollback engaged)
 *
 * Default `setup` action: if a user runs `opensquid setup` with no
 * subcommand, commander prints the help text and exits 1 (commander's
 * default for "unknown subcommand"). We do NOT auto-start the chat wizard
 * from the bare `setup` verb — per WIZ.5 risk callout, the wizard must
 * be explicitly opt-in.
 *
 * Imports from: commander, ./chat_actions.
 * Imported by: src/cli.ts.
 */
import { type WizardDeps, type WizardResult } from './chat_actions.js';
import type { Command } from 'commander';
export interface ChatCliDeps {
    /** Test injection — override the wizard runner. Defaults to the real
     *  `runChatSetupWizard`. Tests substitute a stub that records its args. */
    runWizard?: (deps: WizardDeps) => Promise<WizardResult>;
    /** Test injection — override env access (read + write of OPENSQUID_NO_BILLED_CALLS).
     *  Defaults to `process.env`. */
    env?: NodeJS.ProcessEnv;
}
export interface ChatCliFlags {
    dryRun?: boolean;
    replace?: boolean;
    skipTest?: boolean;
}
/**
 * Register the `setup chat` subcommand on the supplied `setup` parent
 * group. Returns the registered subcommand so callers can chain or inspect.
 */
export declare function registerChat(parent: Command, deps?: ChatCliDeps): Command;
/**
 * Register the `setup` parent verb group + all of its subcommands.
 *
 * Currently only `chat` lives here; future setup wizards (`setup channels`,
 * `setup permissions-wizard`, etc.) register against the same parent via
 * this function so `src/cli.ts` stays a one-liner.
 *
 * Bare `opensquid setup` prints help (per WIZ.5 risk callout — never
 * auto-run a wizard from an ambiguous verb).
 */
export declare function registerSetup(parent: Command, deps?: ChatCliDeps): Command;
//# sourceMappingURL=chat.d.ts.map