import type { AssistantRequirement } from "../types/assistant"; import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer"; import type { AssistantExecutionPlanItem } from "./assistantQueryPlanning"; export interface AssistantRequirementExtractionLike { requirements: AssistantRequirement[]; byFragment: Map; } export interface AssistantPlanEnforcementAuditLike { executionPlan: AssistantExecutionPlanItem[]; audit: unknown; } export interface BuildAssistantDeepTurnExecutionPlanInput { routeSummary: RouteHintSummary | null; normalizedPayload: NormalizeResponsePayload["normalized"]; userMessage: string; claimType: string; temporalGuard: unknown; domainPolarityGuardInitial: unknown; 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: unknown; }) => AssistantPlanEnforcementAuditLike; enforceFaLiveRoutePlan: (input: { executionPlan: AssistantExecutionPlanItem[]; claimType: string; temporalGuard: unknown; }) => AssistantPlanEnforcementAuditLike; applyTemporalHintToExecutionPlan: ( executionPlan: AssistantExecutionPlanItem[], temporalGuard: unknown ) => AssistantExecutionPlanItem[]; applyPolarityHintToExecutionPlan: ( executionPlan: AssistantExecutionPlanItem[], domainPolarityGuardInitial: unknown ) => 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 }; }