/** * Forgen — Dynamic hooks.json Generator * * hook-registry + hook-config + plugin-detector를 조합하여 * hooks/hooks.json을 동적으로 생성합니다. * * 생성 시점: * - postinstall (npm install 후) * - forgen config hooks (사용자 설정 변경 후) * - forgen install (플러그인 설치 후) */ import type { RuntimeHost } from '../core/types.js'; interface HookCommand { type: 'command'; command: string; timeout: number; } interface HookMatcher { matcher: string; hooks: HookCommand[]; } interface HooksJson { description: string; hooks: Record; } interface GenerateOptions { /** 프로젝트 cwd (플러그인 감지에 사용) */ cwd?: string; /** 훅 실행 스크립트의 루트 경로 */ pluginRoot?: string; /** 런타임 (claude|codex) */ runtime?: RuntimeHost; /** * 환경 독립 산출물 모드 (W4, 2026-04-27). * true 시 plugin 감지 + hook-config 비활성화 모두 건너뛰어 모든 hook 이 active. * 배포(prepack), 테스트 결정론, runtime 환경 분리에 사용. */ releaseMode?: boolean; } /** * 활성 훅만 포함한 hooks.json 객체를 생성합니다. * * 동작: * 1. 다른 플러그인 감지 * 2. 충돌 훅 식별 * 3. hook-config.json 설정 적용 * 4. 활성 훅만 hooks.json 구조로 변환 * * releaseMode: 환경 독립 산출물 모드 (W4, 2026-04-27). * - true 시 plugin 감지를 건너뛰고, hook-config.json 의 사용자 비활성화도 무시한다. * - 결과는 항상 모든 hook active — 배포 산출물 결정론화 + 테스트 안정화. * - prepack-hooks.cjs 는 이미 HOME swap 으로 같은 효과를 내지만, 본 옵션은 * 명시적 API 로 동일 보장을 제공해 테스트가 환경 독립 검증 가능. * - 자기증거: 본 세션이 사용자 HOME 에서 19/21 active 산출물을 받아 우회한 * 사례 — docs/issues/W4-W5-self-evidence.md 박제. */ export declare function generateHooksJson(options?: GenerateOptions): HooksJson; /** * hooks.json 파일을 생성하여 저장합니다. * @returns 생성된 훅 수와 비활성화된 훅 수 */ export declare function writeHooksJson(hooksDir: string, options?: GenerateOptions): { active: number; disabled: number; }; export {};