/**
 * Slash command registry for interactive mode.
 *
 * Each command is a standalone handler function that receives a CommandContext.
 * Commands are testable in isolation — no TUI or InteractiveMode instance required.
 */
import type { Component, MarkdownTheme, SelectItem, TUI } from '../../tui/index.js';
import type { ReadonlyFooterDataProvider } from '../footer-data-provider.js';
import type { KeybindingsManager } from '../keybindings.js';
import type { ResourceDisplayHelpers } from '../presentation/resource-display.js';
import type { SlashCommandSessionClient, SlashCommandSessionInfoStore, SlashCommandSettingsStore } from '../session-client.js';
/** Feedback methods for showing messages in the chat area. */
export interface CommandFeedback {
    showStatus(message: string, style?: 'dim' | 'normal' | 'error'): void;
    showError(message: string): void;
    showWarning(message: string): void;
    showInfo(message: string): void;
}
/** Chat area for rendering content. */
export interface CommandChat {
    addChild(component: Component): void;
    clear(): void;
}
export interface CollabCommandClient {
    readonly inRoom: boolean;
    createRoom: (displayName: string) => Promise<{
        roomId: string;
    }>;
    currentDisplayName: () => string | null | undefined;
    getDisplayName: () => {
        name: string;
        isNew: boolean;
    };
    getStatus: () => {
        roomId: string | null;
        peers: Array<{
            displayName: string;
            sheets?: Array<{
                name: string;
                cellCount: number;
                usedRange?: string | null;
            }>;
        }>;
    };
    joinRoom: (roomId: string, displayName: string) => Promise<{
        roomId: string;
        peers: Array<{
            displayName: string;
        }>;
    }>;
    leave: () => void;
    setDisplayName: (name: string) => void;
}
/**
 * The context passed to every slash command handler.
 * Kept deliberately narrow — commands should not reach into InteractiveMode internals.
 */
export interface CommandContext {
    session: SlashCommandSessionClient;
    settingsManager: SlashCommandSettingsStore;
    sessionManager: SlashCommandSessionInfoStore;
    feedback: CommandFeedback;
    chat: CommandChat;
    ui: TUI;
    requestRender(): void;
    getMarkdownTheme(): MarkdownTheme;
    keybindings: KeybindingsManager;
    footerDataProvider: ReadonlyFooterDataProvider;
    /** Update footer and editor border after model/thinking changes. */
    refreshModelDisplay(): void;
    /** Update the terminal title bar. */
    updateTerminalTitle(): void;
    /** Resource display helpers (formatting, scope groups). */
    resourceDisplay: ResourceDisplayHelpers;
    /** Get or lazily create the collaboration command client. */
    getCollabClient(): CollabCommandClient;
    /** Stop any active Super Fight game (called on /collab leave). */
    stopSuperFight?(): void;
    /** Open the interactive skill visibility selector when supported by the shell. */
    showSkillsSelector?(): void;
    selectOption?(title: string, options: SelectItem[]): Promise<string | undefined>;
}
export type SlashCommandHandler = (args: string, ctx: CommandContext) => void | Promise<void>;
export interface SlashCommandDefinition {
    name: string;
    description: string;
    handler: SlashCommandHandler;
}
export declare function copyCommand(_args: string, ctx: CommandContext): void;
export declare function nameCommand(args: string, ctx: CommandContext): void;
export declare function sessionCommand(_args: string, ctx: CommandContext): void;
export declare function budgetCommand(args: string, ctx: CommandContext): Promise<void>;
export declare function autonomousCommand(args: string, ctx: CommandContext): Promise<void>;
export declare function changelogCommand(_args: string, ctx: CommandContext): void;
export declare function hotkeysCommand(_args: string, ctx: CommandContext): void;
export declare function skillsCommand(_args: string, ctx: CommandContext): void;
export declare function hideThinkingCommand(_args: string, ctx: CommandContext): void;
/** Commands that need chat to be rebuilt after execution (e.g. thinking toggle). */
export declare const REBUILD_CHAT_COMMANDS: Set<string>;
/**
 * Build the default command registry.
 * Commands that need deep InteractiveMode access (clear, reload, compact, model,
 * thinking, settings, tree, resume, login, logout, quit, download-skills, upload-skills)
 * are registered by InteractiveMode itself via registerCommand().
 */
export declare function buildDefaultCommands(additionalCommands?: ReadonlyArray<SlashCommandDefinition>): Map<string, SlashCommandHandler>;
//# sourceMappingURL=slash-commands.d.ts.map