/** * Forgen — Plugin Detector * * 다른 Claude Code 플러그인이 설치되어 있는지 감지하고, * forgen와 기능이 중복되는 스킬/훅 목록을 반환합니다. * * 감지 방법: * 1. ~/.claude/plugins/ 디렉토리에서 설치된 플러그인 스캔 * 2. 알려진 플러그인의 파일 시그니처 (.omc/, .claude-mem/ 등) 확인 * 3. 결과를 ~/.forgen/state/detected-plugins.json에 캐시 (1시간 TTL) * * 설계 결정: * - 감지는 읽기 전용 — 다른 플러그인의 파일을 수정하지 않음 * - 실패 시 빈 배열 반환 (failure-tolerant) — 감지 실패 = 충돌 없음으로 간주 * - 캐시 TTL 1시간 — 플러그인 설치/제거 빈도가 낮으므로 충분 */ export interface DetectedPlugin { name: string; /** 이 플러그인과 중복되는 forgen 스킬 이름 */ overlappingSkills: string[]; /** 이 플러그인과 중복되는 forgen 훅 이름 */ overlappingHooks: string[]; /** 감지 방법 (디버깅용) */ detectedBy: 'plugin-dir' | 'signature' | 'both'; } /** * 설치된 다른 플러그인을 감지합니다. * 캐시가 유효하면 캐시를 반환합니다 (1시간 TTL). */ export declare function detectInstalledPlugins(cwd?: string): DetectedPlugin[]; /** forgen와 중복되는 스킬 이름 → 충돌 플러그인 이름 매핑 */ export declare function getSkillConflicts(cwd?: string): Map; /** forgen와 중복되는 훅 이름 → 충돌 플러그인 이름 매핑 */ export declare function getHookConflicts(cwd?: string): Map; /** * 컨텍스트를 상시 주입하는 다른 플러그인이 있는지 확인합니다. * * 판정 기준: overlappingHooks가 있는 플러그인만 "컨텍스트 주입" 간주. * MCP 기반 플러그인(claude-mem 등)이나 스킬만 중복되는 플러그인은 * 온디맨드 호출이므로 상시 컨텍스트를 점유하지 않아 제외합니다. */ export declare function hasContextInjectingPlugins(cwd?: string): boolean; /** 감지 캐시를 무효화합니다 (플러그인 설치/제거 후 호출) */ export declare function invalidatePluginCache(): void;