import { Message } from '../types/core.js';
export interface Command<T = React.ReactElement | void> {
    name: string;
    description: string;
    handler: (args: string[], messages: Message[], metadata: {
        provider: string;
        model: string;
        tokens: number;
        getMessageTokens: (message: Message) => number;
        client?: import('../types/core.js').LLMClient | null;
        tune?: import('../types/config.js').TuneConfig;
        developmentMode?: import('../types/core.js').DevelopmentMode;
    }) => Promise<T>;
}
/**
 * A slash command registered without eagerly importing its module. The
 * `load()` thunk is invoked only when the command is first executed, which
 * keeps the ~31 built-in command modules out of startup. Metadata (name,
 * description) must be duplicated here so the command picker can render
 * without triggering the lazy load.
 */
export interface LazyCommand {
    name: string;
    description: string;
    load: () => Promise<Command>;
}
export interface ParsedCommand {
    isCommand: boolean;
    command?: string;
    args?: string[];
    fullCommand?: string;
    isBashCommand?: boolean;
    bashCommand?: string;
}
export interface CustomCommandMetadata {
    description?: string;
    aliases?: string[];
    parameters?: string[];
    tags?: string[];
    triggers?: string[];
    estimatedTokens?: number;
    category?: string;
    version?: string;
    author?: string;
    examples?: string[];
    references?: string[];
    dependencies?: string[];
}
export interface CommandResource {
    name: string;
    path: string;
    type: 'script' | 'template' | 'document' | 'config';
    description?: string;
    executable?: boolean;
}
export interface CustomCommand {
    name: string;
    path: string;
    namespace?: string;
    fullName: string;
    metadata: CustomCommandMetadata;
    content: string;
    source?: 'personal' | 'project';
    lastModified?: Date;
    loadedResources?: CommandResource[];
    /**
     * Event subscriptions declared in the file's frontmatter, if any.
     * Target is implicit (this command). Resolved by the skill registrar.
     */
    subscribe?: import('../types/skills.js').SkillTrigger[];
}
export interface ParsedCustomCommand {
    metadata: CustomCommandMetadata;
    content: string;
    /**
     * Event subscriptions declared in the file's frontmatter, if any. Target
     * is implicit (the command itself) and resolved by the skill registrar.
     */
    subscribe?: import('../types/skills.js').SkillTrigger[];
}
//# sourceMappingURL=commands.d.ts.map