import { EventEmitter } from "events"; import type { SkillManagerOptions, SkillMetadata, Skill, SkillToolArgs, SkillInvocationContext } from "../types/index.js"; import { Container } from "../utils/container.js"; /** * Manages skill discovery and loading */ export declare class SkillManager extends EventEmitter { private container; private personalSkillsPath; private personalClaudeSkillsPath; private personalAgentsSkillsPath; private scanTimeout; private workdir; private skillMetadata; private skillContent; private pluginSkillMetadata; private pluginSkillContent; private initialized; private fileWatcher; private watchEnabled; constructor(container: Container, options?: SkillManagerOptions); /** * Initialize the skill manager by discovering available skills */ initialize(): Promise; /** * Refresh skills by re-discovering them */ private refreshSkills; /** * Setup file watcher for skill directories */ private setupWatcher; /** * Cleanup resources */ destroy(): Promise; /** * Check if the skill manager is initialized */ isInitialized(): boolean; /** * Get all available skills metadata */ getAvailableSkills(): SkillMetadata[]; /** * Get metadata for a specific skill by name */ getSkillMetadata(name: string): SkillMetadata | undefined; /** * Load a specific skill by name * Returns the skill content that was loaded during initialization */ loadSkill(skillName: string): Promise; /** * Discover skills in builtin, personal and project directories */ private discoverSkills; /** * Discover skills in a specific directory */ private discoverSkillCollection; private scanSkillPath; private processSkillDirs; /** * Find all directories that could contain skills */ private findSkillDirectories; /** * Execute a skill by name */ executeSkill(args: SkillToolArgs): Promise<{ content: string; context?: SkillInvocationContext; allowedTools?: string[]; }>; /** * Prepare a skill by name without executing bash commands */ prepareSkill(args: SkillToolArgs): Promise<{ content: string; skill: Skill; } | { content: string; skill?: undefined; }>; /** * Prepare skill content with arguments but without bash execution */ private prepareSkillContent; /** * Execute bash commands in prepared skill content */ private executeBashInSkillContent; /** * Format available skills list for error messages */ private formatAvailableSkills; /** * Register skills provided by a plugin */ registerPluginSkills(pluginName: string, skills: Skill[]): void; }