/**
 * Theme Loader - Unified theme discovery, loading, and metadata for Pennyfarthing
 *
 * This is the ONE canonical implementation of theme loading. All other packages
 * (core CLI, cyclist, Python scripts, bash scripts) should delegate here.
 *
 * Discovery algorithm (checked in order, deduped by theme ID):
 *   1. Core themes: resolvePennyfarthingDist()/personas/themes/
 *   2. Theme packages: node_modules/@pennyfarthing/themes-* /themes/
 *   3. Project custom: {projectRoot}/.claude/pennyfarthing/themes/
 *   4. User custom: ~/.claude/pennyfarthing/themes/
 */
export interface ThemeAgent {
    character: string;
    style: string;
    role: string;
    trait: string;
    catchphrases: string[];
    helper?: string;
}
export interface Theme {
    name: string;
    description: string;
    agents: Record<string, ThemeAgent>;
}
export interface ThemePackageInfo {
    packageName: string;
    themesDir: string;
    portraitsDir: string;
}
export interface ThemeMetadata {
    id: string;
    name: string;
    description: string;
    source: string;
    tier: string | null;
    category: string;
    agentCount: number;
}
export declare const CATEGORY_MAP: Record<string, string>;
/**
 * Derive category from theme ID and source text.
 * Uses CATEGORY_MAP for known themes, falls back to pattern matching.
 */
export declare function deriveCategory(themeId: string, source: string): string;
/**
 * Discover installed @pennyfarthing/themes-* packages.
 * Walks up from projectRoot looking for node_modules/@pennyfarthing/,
 * then checks each themes-* directory for a valid theme pack.
 */
export declare function discoverThemePackages(projectRoot?: string): ThemePackageInfo[];
/**
 * Discover all directories containing theme YAML files.
 * Returns dirs in priority order (core, theme packages, project custom, user custom).
 */
export declare function discoverAllThemeDirs(projectRoot?: string): string[];
/**
 * Resolve the file path for a specific theme across all sources.
 * Returns the first match found in priority order, or null.
 */
export declare function resolveThemePath(themeId: string, projectRoot?: string): string | null;
/**
 * Load metadata for all discoverable themes.
 * Deduplicates by theme ID (first source wins).
 */
export declare function loadAllThemeMetadata(projectRoot?: string): ThemeMetadata[];
/**
 * Load a theme configuration by name.
 * Searches all theme sources in priority order.
 */
export declare function loadTheme(themeName: string): Theme | null;
/**
 * List all available theme IDs across all sources.
 * Deduplicates — first source wins.
 */
export declare function listThemes(projectRoot?: string): string[];
/**
 * Get agent persona from a theme.
 */
export declare function getAgentPersona(themeName: string, agentName: string): ThemeAgent | null;
//# sourceMappingURL=theme-loader.d.ts.map