/**
 * Chat slash-command router.
 *
 * Centralises all `/command` detection so the `/api/chat` endpoint stays
 * thin. Each handler is a pure async function that returns an SSE-ready
 * response or `null` (= not my command, fall through).
 *
 * Commands are token-free — they never call a model. They compose the
 * harness's existing services so the user can drive everything from the
 * chat box without touching menus, scripts, or terminals.
 */
export interface SlashResult {
    handled: boolean;
    response: string;
    /** SSE reason tag. */
    reason: string;
    /** Structured payload for emitEvent. */
    eventPayload?: Record<string, unknown>;
}
export interface YoloOptions {
    /** Function to set permission mode (from server.ts scope). */
    setPermissionMode: (mode: string, reason: string) => void;
    /** Function to engage timed autonomy. */
    engageTimedAutonomy: (minutes: number, reason: string) => void;
    /** Function to start the autonomy run. */
    startAutonomyRun: (settings: {
        maxIterations: number;
        maxTurns: number;
        timeBudgetMs?: number;
        unproductiveTurnLimit: number;
    }) => Promise<{
        pid?: number;
        started: boolean;
        error?: string;
    }>;
    /** Current permission mode. */
    currentMode: string;
}
/** Call from server.ts startup to wire the server-scoped functions. */
export declare function registerYoloHooks(hooks: YoloOptions): void;
/**
 * Try every registered slash-command handler. Returns the first match
 * or NOT_HANDLED so the caller can fall through to the model.
 *
 * /goal and /priority are handled separately in server.ts because they
 * were wired before this router existed. They could be migrated here in
 * the future.
 */
export declare function routeSlashCommand(messageText: string, projectDir: string): Promise<SlashResult>;
//# sourceMappingURL=slashCommandRouter.d.ts.map