/**
 * olam substrate — Manage the operator-facing deployment substrate.
 *
 * Phase 1b A2 of olam-host-suite-phase-1b-k3s-beta-flavour (plan
 * ~/.claude/plans/olam-host-suite-phase-1b-k3s-beta-flavour.md).
 *
 * Subcommands:
 *   olam substrate get               — print active substrate (+ flavor + beta-expiry)
 *   olam substrate set <substrate>   — switch to compose | kubernetes
 *
 * Decisions consumed:
 *   D1 — `~/.olam/config.json` schema-versioned seam (host.substrate)
 *   D2 — user-facing vocab is `compose | kubernetes` (NOT docker | k3s)
 *   D7 — telemetry is opt-in stdout-emission (stderr `OLAM_INSTR`)
 *   D21 — canonical instrumentation event schema (olam.instr.v1)
 *
 * Risk mitigations:
 *   T2 — pre-flight via `runDoctor` programmatically with `engine: <target>` override.
 *        Refuses with actionable remediation if prereqs fail.
 *   T3 — refuses if worlds exist on current substrate (operator must `olam destroy --all`).
 *
 * Beta-expiry date: 2026-11-16 (Phase 1b ship-date + 6 months per Falsifiable
 * signal section; surfaced in `get` output so operators see the commitment).
 */
import type { Command } from 'commander';
import { readConfig, writeConfig } from '../lib/config.js';
import { emitSubstrateSet } from '../lib/instrumentation.js';
import { type RunDoctorDeps } from './doctor.js';
export declare const BETA_EXPIRY_DATE: "2026-11-16";
type DoctorRunner = (opts: {
    json?: boolean;
}, deps?: RunDoctorDeps) => Promise<{
    exitCode: number;
}>;
/** Narrowed k8s preflight runner type (matches runK8sPreflight signature). */
type K8sPreflightRunner = (opts: {
    json?: boolean;
}) => Promise<{
    exitCode: number;
}>;
/** Narrowed compose preflight runner type (matches runComposePreflight signature). */
type ComposePreflightRunner = (opts: {
    json?: boolean;
}) => Promise<{
    exitCode: number;
}>;
type WorldsCounter = () => Promise<number>;
export type SubstrateDeps = {
    readonly readConfig?: typeof readConfig;
    readonly writeConfig?: typeof writeConfig;
    readonly emit?: typeof emitSubstrateSet;
    /**
     * Full doctor runner. Kept on the deps surface for tests that want to assert
     * the narrowed preflights bypass full doctor on substrate-switch. The handler
     * itself no longer routes through this for substrate set; both directions use
     * the narrowed preflights below.
     */
    readonly runDoctor?: DoctorRunner;
    /** Narrowed k8s preflight runner (Issue #713). When omitted defaults to runK8sPreflight. */
    readonly runK8sPreflightFn?: K8sPreflightRunner;
    /**
     * Narrowed compose preflight runner. Mirrors Issue #713 for the compose
     * direction — only checks the docker daemon is reachable (the one gate an
     * operator can satisfy BEFORE `olam bootstrap`). When omitted defaults to
     * runComposePreflight.
     */
    readonly runComposePreflightFn?: ComposePreflightRunner;
    readonly countWorlds?: WorldsCounter;
    readonly stdout?: NodeJS.WritableStream;
    readonly stderr?: NodeJS.WritableStream;
};
/**
 * Implementation of `olam substrate get`. Reads the config + prints a single
 * human-readable line. Exported for testability.
 */
export declare function handleGet(deps?: SubstrateDeps): Promise<number>;
/**
 * Implementation of `olam substrate set <substrate>`. Validates target, runs
 * pre-flight via doctor with the target engine, refuses on worlds-exist OR
 * doctor-fail, persists config, emits instrumentation. Exported for testability.
 *
 * Returns the desired process exit code (0 = success, 1 = refused/fail).
 */
export declare function handleSet(target: string, deps?: SubstrateDeps): Promise<number>;
export declare function registerSubstrate(program: Command): void;
export {};
//# sourceMappingURL=substrate.d.ts.map