import { Agent } from './database/index.js';
/**
 * Default workspace directory for persistent agents (fallback if no theme)
 */
export declare const DEFAULT_AGENTS_DIR = "staff";
/**
 * Default directory for ephemeral agents (fallback if no theme)
 */
export declare const TEMP_AGENTS_DIR = "temp";
/**
 * Default theme for ephemeral agent name generation
 */
export declare const DEFAULT_EPHEMERAL_THEME = "billionaires";
/**
 * Adjectives for ephemeral agent name generation
 * ~100 short, positive adjectives for readable agent names
 */
export declare const AGENT_ADJECTIVES: string[];
/**
 * Validate an agent name
 * Agent names must be alphanumeric with optional hyphens/underscores (case-insensitive for uniqueness)
 */
export declare function isValidAgentName(name: string): boolean;
/**
 * Normalize a name to valid agent name format:
 * - Trim whitespace
 * - Replace spaces with dashes
 * - Remove any invalid characters
 * Note: Preserves case - uniqueness is enforced case-insensitively elsewhere
 */
export declare function normalizeAgentName(name: string): string;
/**
 * Get the canonical (lowercase) form of a name for uniqueness comparisons
 */
export declare function canonicalAgentName(name: string): string;
/**
 * Get suggested agent names (for interactive selection when no theme)
 */
export declare function getSuggestedAgentNames(): string[];
export interface BuiltinThemeDefinition {
    id: string;
    name: string;
    displayName: string;
    description: string;
    names: string[];
    /** Directory for persistent/staff agents (default: 'staff') */
    persistentDir: string;
    /** Directory for ephemeral/temp agents (default: 'temp') */
    ephemeralDir: string;
}
export declare const BUILTIN_THEMES: BuiltinThemeDefinition[];
/**
 * Ensure built-in themes are seeded in the database
 * Called lazily when themes are first used
 */
export declare function ensureBuiltinThemes(workspacePath: string): void;
/**
 * Get a built-in theme by ID (from constants, not database)
 */
export declare function getBuiltinTheme(themeId: string): BuiltinThemeDefinition | undefined;
/**
 * Check if a theme ID is a built-in theme
 */
export declare function isBuiltinTheme(themeId: string): boolean;
/**
 * Get the persistent agents directory name for a theme
 * Falls back to DEFAULT_AGENTS_DIR if theme not found
 */
export declare function getThemePersistentDir(themeId?: string): string;
/**
 * Get the ephemeral agents directory name for a theme
 * Falls back to TEMP_AGENTS_DIR if theme not found
 */
export declare function getThemeEphemeralDir(themeId?: string): string;
/**
 * Get both directory names for a theme
 */
export declare function getThemeDirectories(themeId?: string): {
    persistentDir: string;
    ephemeralDir: string;
};
/**
 * Pick a random adjective from the list
 */
export declare function pickAdjective(): string;
/**
 * Pick a random theme name from a specific theme
 */
export declare function pickThemeName(themeId: string): string;
/**
 * Pick a random theme name from any available theme
 */
export declare function pickRandomThemeName(): {
    themeName: string;
    themeId: string;
};
/**
 * Options for ephemeral agent name generation
 */
export interface GenerateEphemeralNameOptions {
    themeId?: string;
    /**
     * Optional callback to check if a candidate name conflicts with external resources.
     * Returns { conflict: true, reason: string } if there's a conflict, or { conflict: false } if not.
     * This allows checking for tmux sessions, directories, etc. that aren't in the database.
     */
    checkExternalConflict?: (name: string) => {
        conflict: boolean;
        reason?: string;
    };
    /**
     * Optional callback for logging/messaging when conflicts are detected
     */
    onConflictSkipped?: (name: string, reason: string) => void;
    /**
     * Optional set of base names currently in use by active agents.
     * If provided, the generator will prefer base names NOT in this set.
     */
    inUseBaseNames?: Set<string>;
}
/**
 * Generate a unique ephemeral agent name.
 * Format: {adjective}-{theme_name} or {adjective}-{theme_name}-{number}
 * Example: "bold-bezos", "keen-camry", "bold-bezos-2" (if bold-bezos exists)
 *
 * @param existingNames - Set of existing agent names (for uniqueness checking)
 * @param options - Optional configuration for name generation
 */
export declare function generateEphemeralAgentName(existingNames: Set<string>, options?: GenerateEphemeralNameOptions | string): string;
/**
 * Check if a name looks like an ephemeral agent name.
 * Ephemeral names follow pattern: {adjective}-{name} or {adjective}-{name}-{number}
 */
export declare function isEphemeralAgentName(name: string): boolean;
/**
 * Extract the base name from an ephemeral agent name.
 * Handles both formats: "bold-bezos" -> "bezos", "bold-bezos-2" -> "bezos"
 */
export declare function extractBaseName(agentName: string): string;
/**
 * Get the base name for any agent type.
 * - If agent has explicit base_name, use it
 * - If ephemeral, extract from name pattern
 * - Otherwise (staff), use agent name directly
 */
export declare function getAgentBaseName(agent: Agent): string;
