export interface PersonaModel { provider: string; model: string; description?: string; } export type PersonaModelsMap = Record; export interface PhaseConfig { "model-override"?: string | PersonaModel; } export interface PipelineConfig { "persona-models"?: PersonaModelsMap; /** Phase overrides keyed by role string. */ phases?: Record; } export interface SkillCurationConfig { /** * FORGE-S24 SKILL-CURATION pipeline rollout flag. Default false. * When false, the four T08–T11 modules (skill-retriever, skill-usage-tracker, * skill-curator-subagent, friction-emit) no-op at entry. Wired into the * orchestrator handlers (run-task / fix-bug) so a flag-off run is * byte-identical to pre-FORGE-S24 behaviour. */ enabled?: boolean; } export interface ForgeCliFeatureFlags { skillCuration?: SkillCurationConfig; } export interface GlobalConfig { "persona-models"?: PersonaModelsMap; forgeCli?: ForgeCliFeatureFlags; } export interface ProjectConfig { "persona-models"?: PersonaModelsMap; forgeCli?: ForgeCliFeatureFlags; pipelines?: Record; } export interface MergedConfig { /** Shallow-merged persona-models (project wins on key collision). */ "persona-models"?: PersonaModelsMap; /** Project-only pipelines (L3/L4 config lives here). */ pipelines?: Record; /** The raw global config for L1 lookups — null if absent or invalid. */ _global: GlobalConfig | null; /** The raw project config for L2 lookups — null if absent or invalid. */ _project: ProjectConfig | null; } export interface LayeredConfig { global: GlobalConfig | null; project: ProjectConfig | null; merged: MergedConfig; errors: string[]; } export declare function loadLayeredConfig(cwd: string): LayeredConfig;