import { type ModelCatalog, type ModelRoutingConfig, type ModelTarget } from "./model-routing.js"; import { type ValidationProfile } from "../core/validation-budget.js"; export interface ReflectionConfiguration { readonly enabled: boolean; readonly layers: { readonly run: boolean; readonly project: boolean; readonly global: boolean; }; readonly maxInjectedEntries: number; /** Token budget for the dynamic SORTIE_PROCESS_REFLECTIONS heading and persisted entry lines; excludes the governing REFLECTION_POLICY. */ readonly maxInjectedTokens: number; } export type ReflectionPolicyInput = Partial> & { layers?: Partial; }; export interface SortieDogsPluginOptions { operationManifestPath?: string; handoffPaths?: readonly string[]; /** * Host-specific tool names that never change project files, such as MCP tools. Names accumulate * across layers because each layer describes a different part of the same environment. */ readOnlyTools?: readonly string[]; /** * The serial model every dedicated worker role resolves to. The Luna fabric route remains separate; * a host that cannot serve the shipped serial target declares its own here. */ dedicatedWorkerModel?: ModelTarget; modelRouting?: ModelRoutingConfig; modelCatalog?: ModelCatalog; /** Ordered, global last-resort models. An empty list disables free-tier fallback. */ freeTierFallbackModels?: readonly string[]; consultation?: ConsultationPolicyInput; /** * Bounded batch continuation. The shipped defaults already resolve to a working route, so a host * only states this to raise the ceiling, choose a compaction model, or switch continuation off. */ continuation?: ContinuationPolicyInput; reflection?: ReflectionPolicyInput; /** Validation depth policy. Full-suite execution still requires release context or explicit risk. */ validationProfile?: ValidationProfile; } export type ContinuationPolicyInput = Partial; export interface ContinuationConfiguration { readonly enabled: boolean; /** Only the packaged coordinator may be resumed on the user's behalf. */ readonly agent: string; readonly capability: string; readonly maxAutoContinues: number; /** Root coordinator inactivity allowed while an implementation Task is outstanding. */ readonly taskWatchdogMilliseconds: number; /** Absent reuses the latest coordinator model observed for this session. */ readonly summarizeModel?: ModelTarget; } export interface ConsultationPolicyInput { readonly strategy?: Partial; readonly sourceReview?: Partial; } export interface StrategyConsultationPolicy { readonly agent: string; readonly required: boolean; readonly maxCallsPerCandidate: number; } export interface SourceReviewConsultationPolicy { readonly agent: string; readonly requiredPolicy: "risk-based"; readonly unavailable: "block-required-only"; /** Maximum calls in each explicit initial or verification phase. */ readonly maxCallsPerCandidate: number; readonly maxArtifactBytes: number; } export interface ConsultationPolicy { readonly strategy: StrategyConsultationPolicy; readonly sourceReview: SourceReviewConsultationPolicy; } export interface ConfiguredPlugin { kind: "configured"; operationManifestPath: string; handoffPaths: readonly string[]; readOnlyTools: readonly string[]; dedicatedWorkerModel: ModelTarget; modelRouting: ModelRoutingConfig; modelCatalog: ModelCatalog; freeTierFallbackModels: readonly string[]; consultation: ConsultationPolicy; continuation: ContinuationConfiguration; reflection: ReflectionConfiguration; validationProfile: ValidationProfile; } export type PluginConfiguration = ConfiguredPlugin | { kind: "invalid"; }; export interface ConfiguredPluginSources extends ConfiguredPlugin { localModelRouting: ModelRoutingConfig; globalModelRouting: ModelRoutingConfig; } export type PluginConfigurationSources = ConfiguredPluginSources | { kind: "invalid"; }; export declare const DEFAULT_PLUGIN_OPTIONS: Readonly, "consultation" | "continuation"> & { consultation: ConsultationPolicy; continuation: ContinuationConfiguration; }>; /** Merge defaults, optional project/env configuration, then the host override. */ export declare function resolvePluginConfiguration(...values: readonly unknown[]): PluginConfiguration; /** Resolve the plugin's fixed source boundaries: project-local first, environment and host global. */ export declare function resolvePluginConfigurationSources(projectValue: unknown, environmentValue: unknown, hostValue: unknown): PluginConfigurationSources; export declare function resolvePluginConfigurationSourcesWithGlobal(globalValue: unknown, projectValue: unknown, environmentValue: unknown, hostValue: unknown): PluginConfigurationSources;