/** * Settings merger — apply precedence rules and produce EffectiveSettings with provenance. * * Scalars: last-writer-wins (highest precedence wins). * Permission rules: accumulated per-rule with individual provenance. * * Rule evaluation order (Claude Code): deny → ask → allow (first match wins). * Deny always blocks. Ask always prompts. Allow only fires if no deny/ask matched. */ import type { ManagedSettings, MarketplaceSource, ProjectSettings, UserSettings } from '../schemas/settings.js'; import type { SettingsLevel } from '../types.js'; export interface SettingProvenance { level: SettingsLevel; /** Absolute path to the file this value came from */ file: string; } /** * A scalar setting value with full provenance chain. * `overrode` is the value this replaced — linked list down to the lowest-priority source. */ export interface ProvenanceValue { value: T; provenance: SettingProvenance; overrode?: ProvenanceValue | undefined; } /** * A single permission rule with its source. * Rules ACCUMULATE across levels (unlike scalars which last-writer-wins). */ export interface ProvenanceRule { rule: string; provenance: SettingProvenance; } export interface EffectivePermissions { allow: ProvenanceRule[]; deny: ProvenanceRule[]; ask: ProvenanceRule[]; defaultMode?: ProvenanceValue | undefined; disableBypassPermissionsMode?: ProvenanceValue | undefined; } export interface EffectiveSettings { model?: ProvenanceValue | undefined; availableModels?: ProvenanceValue | undefined; apiKeyHelper?: ProvenanceValue | undefined; forceLoginMethod?: ProvenanceValue | undefined; forceLoginOrgUUID?: ProvenanceValue | undefined; autoUpdatesChannel?: ProvenanceValue | undefined; disableAllHooks?: ProvenanceValue | undefined; allowManagedHooksOnly?: ProvenanceValue | undefined; outputStyle?: ProvenanceValue | undefined; language?: ProvenanceValue | undefined; extraKnownMarketplaces?: ProvenanceValue> | undefined; enabledPlugins?: ProvenanceValue> | undefined; strictKnownMarketplaces?: ProvenanceValue | undefined; permissions: EffectivePermissions; } export interface SettingsLayer { level: SettingsLevel; /** Absolute path to the settings file */ file: string; settings: UserSettings | ProjectSettings | ManagedSettings; } /** * Merge ordered layers (highest precedence first) into EffectiveSettings. * Scalars: highest-precedence layer wins. * Permission rules: accumulated across all layers, each tagged with its source. */ export declare function mergeSettingsLayers(layers: SettingsLayer[]): EffectiveSettings; export { type SettingsLevel } from '../types.js'; //# sourceMappingURL=settings-merger.d.ts.map