/**
 * Ouroboros routing policy for OMK.
 *
 * Resolves whether to prefer the embedded Ouroboros spec-first flow
 * for goal/spec/orchestration intents.  Detection is non-fatal and
 * never triggers network access or implicit installs.
 */
export type OuroborosMode = "always" | "auto" | "off";
/**
 * Read the OMK_OUROBOROS env var and normalise it into a mode.
 *
 * - unset / anything other than the known tokens  → "always" (default)
 * - "auto"                                        → "auto"
 * - "off" / "0" / "false" (case-insensitive)      → "off"
 */
export declare function resolveOuroborosMode(env?: NodeJS.ProcessEnv): OuroborosMode;
export interface OuroborosAvailability {
    available: boolean;
    via: "mcp" | "binary" | "none";
    detail: string;
}
interface DetectOpts {
    env?: NodeJS.ProcessEnv;
    mcpConfigPath?: string;
    which?: (cmd: string) => Promise<string | null>;
}
/**
 * Check whether Ouroboros is reachable without network or installs.
 *
 * Strategy (non-fatal):
 *   1. Look for an `ouroboros` key in ~/.omk/agent/mcp.json  (global)
 *      and/or .omk/mcp.json  (project-scoped).
 *   2. Optionally check for an `ouroboros` binary via an injectable which().
 *
 * Any I/O error silently yields `{ available: false, via: "none" }`.
 */
export declare function detectOuroborosAvailable(opts?: DetectOpts): Promise<OuroborosAvailability>;
export interface OuroborosDecision {
    use: boolean;
    mode: OuroborosMode;
    availability: OuroborosAvailability;
    reason: string;
}
interface DecisionInput {
    intent: string;
    env?: NodeJS.ProcessEnv;
    detect?: () => Promise<OuroborosAvailability>;
}
/**
 * Decide whether the current run should route through Ouroboros.
 *
 * - use=true only when mode≠off AND available AND intent matches.
 * - When mode=always but unavailable → use=false with fallback reason.
 * - Never throws.
 */
export declare function resolveOuroborosDecision(input: DecisionInput): Promise<OuroborosDecision>;
export {};
