import type { AssistantReplyType, AssistantRequirement, AnswerGroundingCheck, RequirementCoverageReport, UnifiedRetrievalResult } from "../types/assistant"; import type { NormalizedPayload, RouteHintSummary } from "../types/normalizer"; import { buildAssistantCoverageContractV1, buildAssistantExecutionPlanContractV1, buildAssistantQueryFrameContractV1, classifyAssistantOutcomeClassV1, type AssistantCoverageContractV1, type AssistantEvidenceBundleContractV1, type AssistantExecutionPlanContractV1, type AssistantOutcomeClassV1, type AssistantQueryFrameContractV1 } from "./assistantOrchestrationContracts"; export interface AssistantContractsBundleV1 { queryFrameContractV1: AssistantQueryFrameContractV1; executionPlanContractV1: AssistantExecutionPlanContractV1; outcomeClassV1: AssistantOutcomeClassV1; coverageContractV1: AssistantCoverageContractV1; assistantOrchestrationContractsV1: { query_frame: AssistantQueryFrameContractV1; execution_plan: AssistantExecutionPlanContractV1; evidence_bundle: AssistantEvidenceBundleContractV1; coverage: AssistantCoverageContractV1; }; } export function assembleAssistantContractsBundleV1(input: { userMessage: string; normalizedQuestion: string; normalized: NormalizedPayload | null; routeSummary: RouteHintSummary | null; droppedIntentSegments: string[]; analysisContext: { as_of_date: string | null; period_from: string | null; period_to: string | null; source: string | null; snapshot_mode: "auto" | "force_snapshot" | "force_live"; } | null; executionPlan: Array<{ fragment_id: string; requirement_ids: string[]; route: string; should_execute: boolean; no_route_reason?: string | null; clarification_reason?: string | null; }>; requirements: AssistantRequirement[]; evidenceBundleContractV1: AssistantEvidenceBundleContractV1; replyType: AssistantReplyType; coverageReport: RequirementCoverageReport; grounding: AnswerGroundingCheck; retrievalResults: UnifiedRetrievalResult[]; }): AssistantContractsBundleV1 { const queryFrameContractV1 = buildAssistantQueryFrameContractV1({ userMessage: input.userMessage, normalizedQuestion: input.normalizedQuestion, normalized: input.normalized, routeSummary: input.routeSummary, droppedIntentSegments: input.droppedIntentSegments, analysisContext: input.analysisContext }); const executionPlanContractV1 = buildAssistantExecutionPlanContractV1({ executionPlan: input.executionPlan, requirements: input.requirements }); const outcomeClassV1 = classifyAssistantOutcomeClassV1({ replyType: input.replyType, coverageReport: input.coverageReport, grounding: input.grounding, retrievalResults: input.retrievalResults }); const coverageContractV1 = buildAssistantCoverageContractV1({ coverageReport: input.coverageReport, grounding: input.grounding, outcomeClass: outcomeClassV1 }); return { queryFrameContractV1, executionPlanContractV1, outcomeClassV1, coverageContractV1, assistantOrchestrationContractsV1: { query_frame: queryFrameContractV1, execution_plan: executionPlanContractV1, evidence_bundle: input.evidenceBundleContractV1, coverage: coverageContractV1 } }; }