/** * Shared strict runtime/model binding validation for workflow entry points. * * Phase 6 enforces the Phase 5 runtime-model contract only when planning or * execution is about to start. Config editing remains permissive. */ import type { GSDConfig } from '../config.js'; import { type BindingKind, type BindingSource, type RejectionReason, type RuntimeModelResolution } from './runtime-model-contract.js'; export interface BindingValidationIssue { agent: string; runtime: RuntimeModelResolution['runtime']; bindingKind: BindingKind; source: BindingSource; configuredModel: string | null; resolvedModel: string | null; rejectionReason: RejectionReason; reason: string; suggestedFix: string; crossAiExecutionSupported: boolean; crossAiExecutionConfigured: boolean; crossAiExecutionRecommended: boolean; crossAiExecutionSuggestion: string | null; availableAlternative: 'cross_ai_execution' | null; } export interface BindingValidationResult { ok: boolean; agent: string; runtime: RuntimeModelResolution['runtime']; bindingKind: BindingKind; source: BindingSource; configuredModel: string | null; resolvedModel: string | null; issue: BindingValidationIssue | null; binding: RuntimeModelResolution; } export interface RuntimeBindingChannelValidationOptions { hermesDelegateModelChannelAvailable?: boolean; } export interface BindingValidationSummary { ok: boolean; runtime: RuntimeModelResolution['runtime']; agents: string[]; results: BindingValidationResult[]; issues: BindingValidationIssue[]; } export type CrossAiRoutingDecision = 'disabled' | 'forced' | 'required' | 'direct'; export interface CrossAiRoutingResolution { decision: CrossAiRoutingDecision; source: 'cli' | 'config' | 'frontmatter' | 'direct-binding'; shouldUseCrossAi: boolean; crossAiRequired: boolean; directRuntimeBindingValid: boolean; reason: string; } export interface CrossAiSummaryValidationResult { valid: boolean; partial: boolean; missingSections: string[]; } export type CrossAiExecutionFailureKind = 'missing-command' | 'timeout' | 'non-zero-exit' | 'malformed-summary' | 'partial-execution'; export interface CrossAiExecutionResult { ok: boolean; failureKind: CrossAiExecutionFailureKind | null; reason: string; routing: CrossAiRoutingResolution; summaryValidation: CrossAiSummaryValidationResult | null; } export declare function resolveCrossAiRouting(options: { cliForce?: boolean; cliDisabled?: boolean; configCrossAiExecution?: boolean | null; planFrontmatterCrossAi?: boolean | null; directRuntimeBindingValid?: boolean; }): CrossAiRoutingResolution; export declare function validateExternalSummaryContract(summaryText: string | null | undefined): CrossAiSummaryValidationResult; export declare function evaluateCrossAiExecutionResult(options: { routing: CrossAiRoutingResolution; crossAiCommand?: string | null; exitCode: number; timedOut?: boolean; summaryText?: string | null; }): CrossAiExecutionResult; export declare function validateResolvedAgentBinding(binding: RuntimeModelResolution, options?: RuntimeBindingChannelValidationOptions): BindingValidationResult; export declare function validateAgentBinding(config: GSDConfig | Record, agent: string, options?: RuntimeBindingChannelValidationOptions): BindingValidationResult; export declare function validateAgentBindings(config: GSDConfig | Record, agents: string[], options?: RuntimeBindingChannelValidationOptions): BindingValidationSummary; export declare function formatBindingValidationError(summary: BindingValidationSummary, phaseLabel?: string): string; export declare function assertAgentBindingsSupported(config: GSDConfig | Record, agents: string[], phaseLabel?: string, options?: RuntimeBindingChannelValidationOptions): void; //# sourceMappingURL=runtime-model-validation.d.ts.map