import type { AssistantRequirement } from "../types/assistant"; import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer"; import type { AssistantExecutionPlanItem } from "./assistantQueryPlanning"; import type { DomainPolarityGuardAudit, TemporalGuardAudit } from "./assistantRuntimeGuards"; export interface AssistantRequirementExtractionLike { requirements: AssistantRequirement[]; byFragment: Map; } export interface AssistantPlanEnforcementAuditLike { executionPlan: AssistantExecutionPlanItem[]; audit: AssistantLiveRoutePlanAudit | null; } export interface AssistantLiveRoutePlanAudit extends Record { required_live_calls: string[]; route_adjustments_applied: number; rescued_no_route_fragments: number; replaced_routes: string[]; route_gap_reason: string | null; } export interface BuildAssistantDeepTurnExecutionPlanInput { routeSummary: RouteHintSummary | null; normalizedPayload: NormalizeResponsePayload["normalized"]; userMessage: string; claimType: string; temporalGuard: TemporalGuardAudit; domainPolarityGuardInitial: DomainPolarityGuardAudit; extractRequirements: ( routeSummary: RouteHintSummary | null, normalizedPayload: NormalizeResponsePayload["normalized"], userMessage: string ) => AssistantRequirementExtractionLike; toExecutionPlan: ( routeSummary: RouteHintSummary | null, normalizedPayload: NormalizeResponsePayload["normalized"], userMessage: string, requirementByFragment: Map ) => AssistantExecutionPlanItem[]; enforceRbpLiveRoutePlan: (input: { executionPlan: AssistantExecutionPlanItem[]; claimType: string; temporalGuard: TemporalGuardAudit; }) => AssistantPlanEnforcementAuditLike; enforceFaLiveRoutePlan: (input: { executionPlan: AssistantExecutionPlanItem[]; claimType: string; temporalGuard: TemporalGuardAudit; }) => AssistantPlanEnforcementAuditLike; applyTemporalHintToExecutionPlan: ( executionPlan: AssistantExecutionPlanItem[], temporalGuard: TemporalGuardAudit ) => AssistantExecutionPlanItem[]; applyPolarityHintToExecutionPlan: ( executionPlan: AssistantExecutionPlanItem[], domainPolarityGuardInitial: DomainPolarityGuardAudit ) => AssistantExecutionPlanItem[]; } export interface BuildAssistantDeepTurnExecutionPlanOutput { requirementExtraction: AssistantRequirementExtractionLike; executionPlan: AssistantExecutionPlanItem[]; rbpRoutePlanEnforcement: AssistantPlanEnforcementAuditLike; faRoutePlanEnforcement: AssistantPlanEnforcementAuditLike; } export function buildAssistantDeepTurnExecutionPlan( input: BuildAssistantDeepTurnExecutionPlanInput ): BuildAssistantDeepTurnExecutionPlanOutput { const requirementExtraction = input.extractRequirements(input.routeSummary, input.normalizedPayload, input.userMessage); let executionPlan = input.toExecutionPlan( input.routeSummary, input.normalizedPayload, input.userMessage, requirementExtraction.byFragment ); const rbpRoutePlanEnforcement = input.enforceRbpLiveRoutePlan({ executionPlan, claimType: input.claimType, temporalGuard: input.temporalGuard }); executionPlan = rbpRoutePlanEnforcement.executionPlan; const faRoutePlanEnforcement = input.enforceFaLiveRoutePlan({ executionPlan, claimType: input.claimType, temporalGuard: input.temporalGuard }); executionPlan = faRoutePlanEnforcement.executionPlan; executionPlan = input.applyTemporalHintToExecutionPlan(executionPlan, input.temporalGuard); executionPlan = input.applyPolarityHintToExecutionPlan(executionPlan, input.domainPolarityGuardInitial); return { requirementExtraction, executionPlan, rbpRoutePlanEnforcement, faRoutePlanEnforcement }; }