/** * Candidate generation and hard policy filtering. * * Candidates are generated ONLY from configured and authorized components * (provider profiles, model registry, subagent registry, skill registry, * retrieval policies, budget classes). The engine never invents a provider, * model, skill or agent. Hard-policy filtering runs before scoring and cannot * be overcome by a higher evaluation score. */ import type { ExecutionTopology, OrchestrationCandidate, OrchestrationCandidateRejection, SelectionPolicy } from "./types.js"; export interface HardPolicyInput { workspaceBoundary: boolean; requiredLocalOnly: boolean; providerAllowlist: readonly string[]; modelAllowlist: readonly string[]; maxCostUsd?: number; maxModelCalls?: number; maxSubagents?: number; maxAffectedFiles?: number; networkPolicy: "allow_all" | "local_only" | "none"; allowLiveProviders: boolean; } export interface CandidateSource { providerProfile: string; configuredModel: string; thinkingLevel?: string; executionTopology: ExecutionTopology; skillIds: string[]; subagentDefinitions: string[]; retrievalPolicy: string; budgetClass: string; fallbackPolicy: string; } /** Build the candidate cartesian set from configured components, then intersect permission. */ export declare function generateCandidates(input: { providerProfiles: string[]; models: { provider: string; model: string; }[]; topologies: ExecutionTopology[]; skills: string[]; subagents: string[]; retrievalPolicies: string[]; budgetClasses: string[]; fallbackPolicies: string[]; operatorSelectionPolicy: SelectionPolicy; }): { candidates: OrchestrationCandidate[]; warnings: string[]; }; /** * Apply hard policy filters. Returns the surviving candidates and a rejection * list for every filtered candidate. Filtering is deterministic and ordered. */ export declare function applyHardPolicy(candidates: OrchestrationCandidate[], input: HardPolicyInput): { accepted: OrchestrationCandidate[]; rejected: OrchestrationCandidateRejection[]; }; //# sourceMappingURL=candidates.d.ts.map