/**
 * Decides which extensions to activate from manifest metadata + config + env.
 */
import type { ManifestRegistry } from './manifest-registry.js';
export type ActivationLoadPhase = 'startup' | 'deferred';
export type ActivationReason = 'explicit_enabled' | 'explicit_disabled' | 'enabled_by_default' | 'model_match' | 'env_var_detected' | 'auto_enable_provider' | 'activation_trigger' | 'not_activated';
export interface ActivationDecision {
    extensionId: string;
    activated: boolean;
    reason: ActivationReason;
    trigger?: string;
}
export interface ActivationContext {
    enabledIds?: string[];
    disabledIds?: string[];
    requestedModelId?: string;
    configuredProviderIds?: string[];
    configuredChannelIds?: string[];
    env?: NodeJS.ProcessEnv;
}
export declare class ActivationPlanner {
    private registry;
    constructor(registry: ManifestRegistry);
    plan(context: ActivationContext): ActivationDecision[];
    getActivatedIds(context: ActivationContext): string[];
    /**
     * Split activated ids by manifest `activation.onStartup`.
     * Extensions without the field remain on the startup path (backward compatible).
     */
    filterActivatedIdsByLoadPhase(activatedIds: readonly string[], phase: ActivationLoadPhase): string[];
    explainPlan(context: ActivationContext): string;
    private findTriggerEnvVar;
}
