import { type ConfigurationDefinition, type ConfigurationOverride, type ConfigurationScope, type EffectiveConfiguration, type MutationContext, type ProjectId } from "@awp/contracts";
import type { Clock, IdGenerator } from "./ports/runtime.js";
import type { ApplicationTransaction, UnitOfWork } from "./ports/repositories.js";
export declare const SYSTEM_CONFIGURATION_SCOPE_ID = "system";
export interface ConfigurationScopeRef {
    readonly scopeType: ConfigurationScope;
    readonly scopeId: string;
}
export interface ProjectExecutionConfiguration {
    readonly enabled: boolean;
    readonly defaultModel?: string;
}
export interface ProjectPlanningInterviewerConfiguration {
    readonly providerId?: string;
    readonly accountId?: string;
    readonly model?: string;
    readonly reasoningEffort?: string;
    readonly providerSource?: ConfigurationScopeRef;
    readonly accountSource?: ConfigurationScopeRef;
    readonly modelSource?: ConfigurationScopeRef;
    readonly reasoningEffortSource?: ConfigurationScopeRef;
}
export interface SystemWorkspaceConfiguration {
    readonly nativeAcpEnabled: boolean;
    readonly namespace: string;
    readonly image: string;
}
export interface ProjectExecutionConfigurationResolver {
    resolveProjectExecutionInTransaction(tx: ApplicationTransaction, projectId: ProjectId): Promise<ProjectExecutionConfiguration>;
}
export interface SetConfigurationOverrideInput {
    readonly definitionKey: string;
    readonly scopeType: ConfigurationScope;
    readonly scopeId: string;
    readonly value: unknown;
    readonly context: MutationContext;
}
export declare class ConfigurationAuthorityService implements ProjectExecutionConfigurationResolver {
    private readonly uow;
    private readonly ids;
    private readonly clock;
    constructor(uow: UnitOfWork, ids: IdGenerator, clock: Clock);
    ensureDefinitions(): Promise<void>;
    listDefinitions(): Promise<readonly ConfigurationDefinition<unknown>[]>;
    listOverrides(definitionKey: string): Promise<readonly ConfigurationOverride<unknown>[]>;
    resolve(definitionKey: string, scopes: readonly ConfigurationScopeRef[]): Promise<EffectiveConfiguration<unknown> | undefined>;
    resolveInTransaction(tx: ApplicationTransaction, definitionKey: string, scopes: readonly ConfigurationScopeRef[]): Promise<EffectiveConfiguration<unknown> | undefined>;
    resolveProjectExecutionInTransaction(tx: ApplicationTransaction, projectId: ProjectId): Promise<ProjectExecutionConfiguration>;
    resolveProjectPlanningInterviewer(projectId: ProjectId): Promise<ProjectPlanningInterviewerConfiguration>;
    resolveSystemWorkspaceConfiguration(): Promise<SystemWorkspaceConfiguration>;
    importDeploymentSystemValue(definitionKey: string, value: unknown, context: MutationContext): Promise<ConfigurationOverride<unknown>>;
    setOverride(input: SetConfigurationOverrideInput): Promise<ConfigurationOverride<unknown>>;
    deleteOverride(definitionKey: string, scopeType: ConfigurationScope, scopeIdInput: string, context: MutationContext): Promise<void>;
}
//# sourceMappingURL=configuration.d.ts.map