import type { RunAssistantAddressAttemptRuntimeInput } from "./assistantAddressAttemptRuntimeAdapter"; import type { RunAssistantDeepTurnAttemptRuntimeInput } from "./assistantDeepTurnAttemptRuntimeAdapter"; import type { RunAssistantTurnAttemptRuntimeAddressInput, RunAssistantTurnAttemptRuntimeDeepInput } from "./assistantTurnAttemptRuntimeAdapter"; import type { AssistantUserTurnBootstrapPayloadLike, RunAssistantUserTurnBootstrapRuntimeInput } from "./assistantUserTurnBootstrapRuntimeAdapter"; type AddressAttemptRuntimeInput = RunAssistantAddressAttemptRuntimeInput; type DeepTurnAttemptRuntimeInput = RunAssistantDeepTurnAttemptRuntimeInput; export interface AssistantTurnRuntimeBuilderDeps { ensureSession: RunAssistantUserTurnBootstrapRuntimeInput["ensureSession"]; appendItem: RunAssistantUserTurnBootstrapRuntimeInput["appendItem"]; getSession: RunAssistantUserTurnBootstrapRuntimeInput["getSession"]; persistSession: RunAssistantUserTurnBootstrapRuntimeInput["persistSession"]; compactWhitespace: RunAssistantUserTurnBootstrapRuntimeInput["compactWhitespace"]; repairAddressMojibake: RunAssistantUserTurnBootstrapRuntimeInput["repairAddressMojibake"]; resolveRuntimeAnalysisContext: RunAssistantUserTurnBootstrapRuntimeInput["resolveRuntimeAnalysisContext"]; runAddressLlmPreDecompose: ( payload: AddressAttemptRuntimeInput["payload"], userMessage: string ) => Promise>; tryAddressQueryHandle: AddressAttemptRuntimeInput["runAddressQueryTryHandle"]; setInvestigationState: DeepTurnAttemptRuntimeInput["persistInvestigationState"]; normalize: DeepTurnAttemptRuntimeInput["normalize"]; executeRouteRuntime: DeepTurnAttemptRuntimeInput["executeRouteRuntime"]; chatClient: AddressAttemptRuntimeInput["chatClient"]; messageIdFactory: AddressAttemptRuntimeInput["messageIdFactory"]; nowIso: AddressAttemptRuntimeInput["nowIso"]; defaultApiKey: NonNullable["defaultApiKey"]>; logEvent: AddressAttemptRuntimeInput["logEvent"]; featureAssistantAddressQueryV1: AddressAttemptRuntimeInput["featureAssistantAddressQueryV1"]; featureAddressLlmPredecomposeV1: AddressAttemptRuntimeInput["featureAddressLlmPredecomposeV1"]; featureInvestigationStateV1: DeepTurnAttemptRuntimeInput["featureInvestigationStateV1"]; featureStateFollowupBindingV1: DeepTurnAttemptRuntimeInput["featureStateFollowupBindingV1"]; featureContractsV11: DeepTurnAttemptRuntimeInput["featureContractsV11"]; featureAnswerPolicyV11: DeepTurnAttemptRuntimeInput["featureAnswerPolicyV11"]; featureProblemCentricAnswerV1: DeepTurnAttemptRuntimeInput["featureProblemCentricAnswerV1"]; featureLifecycleAnswerV1: DeepTurnAttemptRuntimeInput["featureLifecycleAnswerV1"]; defaultModel: AddressAttemptRuntimeInput["defaultModel"]; defaultBaseUrl: AddressAttemptRuntimeInput["defaultBaseUrl"]; buildAddressLlmPredecomposeContractV1: AddressAttemptRuntimeInput["buildAddressLlmPredecomposeContractV1"]; sanitizeAddressMessageForFallback: AddressAttemptRuntimeInput["sanitizeAddressMessageForFallback"]; toNonEmptyString: AddressAttemptRuntimeInput["toNonEmptyString"]; resolveAddressFollowupCarryoverContext: AddressAttemptRuntimeInput["resolveAddressFollowupCarryoverContext"]; resolveAssistantOrchestrationDecision: AddressAttemptRuntimeInput["resolveAssistantOrchestrationDecision"]; buildAddressDialogContinuationContractV2: AddressAttemptRuntimeInput["buildAddressDialogContinuationContractV2"]; mergeFollowupContextWithOrganizationScope: AddressAttemptRuntimeInput["mergeFollowupContextWithOrganizationScope"]; isRetryableAddressLimitedResult: AddressAttemptRuntimeInput["isRetryableAddressLimitedResult"]; mergeKnownOrganizations: AddressAttemptRuntimeInput["mergeKnownOrganizations"]; hasAssistantDataScopeMetaQuestionSignal: AddressAttemptRuntimeInput["hasAssistantDataScopeMetaQuestionSignal"]; shouldHandleAsAssistantCapabilityMetaQuery: AddressAttemptRuntimeInput["shouldHandleAsAssistantCapabilityMetaQuery"]; hasDestructiveDataActionSignal: AddressAttemptRuntimeInput["hasDestructiveDataActionSignal"]; hasDangerOrCoercionSignal: AddressAttemptRuntimeInput["hasDangerOrCoercionSignal"]; hasOperationalAdminActionRequestSignal: AddressAttemptRuntimeInput["hasOperationalAdminActionRequestSignal"]; hasOrganizationFactLookupSignal: AddressAttemptRuntimeInput["hasOrganizationFactLookupSignal"]; hasOrganizationFactFollowupSignal: AddressAttemptRuntimeInput["hasOrganizationFactFollowupSignal"]; hasLivingChatSignal: AddressAttemptRuntimeInput["hasLivingChatSignal"]; shouldEmitOrganizationSelectionReply: AddressAttemptRuntimeInput["shouldEmitOrganizationSelectionReply"]; hasAssistantCapabilityQuestionSignal: AddressAttemptRuntimeInput["hasAssistantCapabilityQuestionSignal"]; resolveDataScopeProbe: AddressAttemptRuntimeInput["resolveDataScopeProbe"]; applyScriptGuard: AddressAttemptRuntimeInput["applyScriptGuard"]; applyGroundingGuard: AddressAttemptRuntimeInput["applyGroundingGuard"]; buildAssistantSafetyRefusalReply: AddressAttemptRuntimeInput["buildAssistantSafetyRefusalReply"]; buildAssistantDataScopeContractReply: AddressAttemptRuntimeInput["buildAssistantDataScopeContractReply"]; buildAssistantProactiveOrganizationOfferReply: AddressAttemptRuntimeInput["buildAssistantProactiveOrganizationOfferReply"]; buildAssistantOrganizationFactBoundaryReply: AddressAttemptRuntimeInput["buildAssistantOrganizationFactBoundaryReply"]; buildAssistantDataScopeSelectionReply: AddressAttemptRuntimeInput["buildAssistantDataScopeSelectionReply"]; buildAssistantOperationalBoundaryReply: AddressAttemptRuntimeInput["buildAssistantOperationalBoundaryReply"]; buildAssistantCapabilityContractReply: AddressAttemptRuntimeInput["buildAssistantCapabilityContractReply"]; loadAssistantCanonExcerpt: AddressAttemptRuntimeInput["loadAssistantCanonExcerpt"]; sanitizeOutgoingAssistantText: AddressAttemptRuntimeInput["sanitizeOutgoingAssistantText"]; buildAddressDebugPayload: AddressAttemptRuntimeInput["buildAddressDebugPayload"]; buildAddressFollowupOffer: AddressAttemptRuntimeInput["buildAddressFollowupOffer"]; buildFollowupStateBinding: DeepTurnAttemptRuntimeInput["buildFollowupStateBinding"]; resolveBusinessScopeAlignment: DeepTurnAttemptRuntimeInput["resolveBusinessScopeAlignment"]; inferP0DomainFromMessage: DeepTurnAttemptRuntimeInput["inferP0DomainFromMessage"]; resolveBusinessScopeFromLiveContext: DeepTurnAttemptRuntimeInput["resolveBusinessScopeFromLiveContext"]; extractRequirements: DeepTurnAttemptRuntimeInput["extractRequirements"]; toExecutionPlan: DeepTurnAttemptRuntimeInput["toExecutionPlan"]; enforceRbpLiveRoutePlan: DeepTurnAttemptRuntimeInput["enforceRbpLiveRoutePlan"]; enforceFaLiveRoutePlan: DeepTurnAttemptRuntimeInput["enforceFaLiveRoutePlan"]; mapNoRouteReason: DeepTurnAttemptRuntimeInput["mapNoRouteReason"]; buildSkippedResult: DeepTurnAttemptRuntimeInput["buildSkippedResult"]; evaluateCoverage: DeepTurnAttemptRuntimeInput["evaluateCoverage"]; checkGrounding: DeepTurnAttemptRuntimeInput["checkGrounding"]; collectRbpLiveRouteAudit: DeepTurnAttemptRuntimeInput["collectRbpLiveRouteAudit"]; collectFaLiveRouteAudit: DeepTurnAttemptRuntimeInput["collectFaLiveRouteAudit"]; hasExplicitPeriodAnchorFromNormalized: DeepTurnAttemptRuntimeInput["hasExplicitPeriodAnchor"]; extractDroppedIntentSegments: DeepTurnAttemptRuntimeInput["extractDroppedIntentSegments"]; toDebugRoutes: DeepTurnAttemptRuntimeInput["buildDebugRoutes"]; extractExecutionState: DeepTurnAttemptRuntimeInput["extractExecutionState"]; } export function buildAssistantUserTurnBootstrapRuntimeInput( payload: AssistantUserTurnBootstrapPayloadLike, deps: AssistantTurnRuntimeBuilderDeps ): RunAssistantUserTurnBootstrapRuntimeInput { return { payload, ensureSession: deps.ensureSession, appendItem: deps.appendItem, getSession: deps.getSession, persistSession: deps.persistSession, compactWhitespace: deps.compactWhitespace, repairAddressMojibake: deps.repairAddressMojibake, resolveRuntimeAnalysisContext: deps.resolveRuntimeAnalysisContext, messageIdFactory: deps.messageIdFactory, nowIso: deps.nowIso }; } export function buildAssistantAddressAttemptRuntimeInput( runtimeInput: RunAssistantTurnAttemptRuntimeAddressInput["payload"]>, deps: AssistantTurnRuntimeBuilderDeps ): RunAssistantAddressAttemptRuntimeInput { return { featureAssistantAddressQueryV1: deps.featureAssistantAddressQueryV1, sessionId: runtimeInput.sessionId, userMessage: runtimeInput.userMessage, sessionItems: runtimeInput.sessionItems, sessionAddressNavigationState: runtimeInput.sessionAddressNavigationState, payload: runtimeInput.payload, sessionScope: { knownOrganizations: runtimeInput.sessionOrganizationScope.knownOrganizations, selectedOrganization: runtimeInput.sessionOrganizationScope.selectedOrganization, activeOrganization: runtimeInput.sessionOrganizationScope.activeOrganization }, featureAddressLlmPredecomposeV1: deps.featureAddressLlmPredecomposeV1, runAddressLlmPreDecompose: async () => deps.runAddressLlmPreDecompose(runtimeInput.payload, runtimeInput.userMessage), buildAddressLlmPredecomposeContractV1: deps.buildAddressLlmPredecomposeContractV1, sanitizeAddressMessageForFallback: deps.sanitizeAddressMessageForFallback, toNonEmptyString: deps.toNonEmptyString, resolveAddressFollowupCarryoverContext: deps.resolveAddressFollowupCarryoverContext, resolveAssistantOrchestrationDecision: deps.resolveAssistantOrchestrationDecision, buildAddressDialogContinuationContractV2: deps.buildAddressDialogContinuationContractV2, runtimeAnalysisContextAsOfDate: runtimeInput.runtimeAnalysisContext.as_of_date, compactWhitespace: deps.compactWhitespace, mergeFollowupContextWithOrganizationScope: deps.mergeFollowupContextWithOrganizationScope, runAddressQueryTryHandle: deps.tryAddressQueryHandle, isRetryableAddressLimitedResult: deps.isRetryableAddressLimitedResult, mergeKnownOrganizations: deps.mergeKnownOrganizations, hasAssistantDataScopeMetaQuestionSignal: deps.hasAssistantDataScopeMetaQuestionSignal, shouldHandleAsAssistantCapabilityMetaQuery: deps.shouldHandleAsAssistantCapabilityMetaQuery, hasDestructiveDataActionSignal: deps.hasDestructiveDataActionSignal, hasDangerOrCoercionSignal: deps.hasDangerOrCoercionSignal, hasOperationalAdminActionRequestSignal: deps.hasOperationalAdminActionRequestSignal, hasOrganizationFactLookupSignal: deps.hasOrganizationFactLookupSignal, hasOrganizationFactFollowupSignal: deps.hasOrganizationFactFollowupSignal, hasLivingChatSignal: deps.hasLivingChatSignal, shouldEmitOrganizationSelectionReply: deps.shouldEmitOrganizationSelectionReply, hasAssistantCapabilityQuestionSignal: deps.hasAssistantCapabilityQuestionSignal, resolveDataScopeProbe: deps.resolveDataScopeProbe, applyScriptGuard: deps.applyScriptGuard, applyGroundingGuard: deps.applyGroundingGuard, buildAssistantSafetyRefusalReply: deps.buildAssistantSafetyRefusalReply, buildAssistantDataScopeContractReply: deps.buildAssistantDataScopeContractReply, buildAssistantProactiveOrganizationOfferReply: deps.buildAssistantProactiveOrganizationOfferReply, buildAssistantOrganizationFactBoundaryReply: deps.buildAssistantOrganizationFactBoundaryReply, buildAssistantDataScopeSelectionReply: deps.buildAssistantDataScopeSelectionReply, buildAssistantOperationalBoundaryReply: deps.buildAssistantOperationalBoundaryReply, buildAssistantCapabilityContractReply: deps.buildAssistantCapabilityContractReply, chatClient: deps.chatClient, loadAssistantCanonExcerpt: deps.loadAssistantCanonExcerpt, sanitizeOutgoingAssistantText: deps.sanitizeOutgoingAssistantText, defaultModel: deps.defaultModel, defaultBaseUrl: deps.defaultBaseUrl, defaultApiKey: deps.defaultApiKey, buildAddressDebugPayload: deps.buildAddressDebugPayload, buildAddressFollowupOffer: deps.buildAddressFollowupOffer, appendItem: deps.appendItem, getSession: deps.getSession, persistSession: deps.persistSession, cloneConversation: (items) => items.map((item) => ({ ...item })), logEvent: deps.logEvent, messageIdFactory: deps.messageIdFactory, nowIso: deps.nowIso }; } export function buildAssistantDeepTurnAttemptRuntimeInput( runtimeInput: RunAssistantTurnAttemptRuntimeDeepInput["payload"]> & { runtimeAnalysisContext: DeepTurnAttemptRuntimeInput["runtimeAnalysisContext"]; sessionInvestigationState: DeepTurnAttemptRuntimeInput["sessionInvestigationState"]; }, deps: AssistantTurnRuntimeBuilderDeps ): RunAssistantDeepTurnAttemptRuntimeInput { return { sessionId: runtimeInput.sessionId, questionId: runtimeInput.questionId, userMessage: runtimeInput.userMessage, payload: runtimeInput.payload, runtimeAnalysisContext: runtimeInput.runtimeAnalysisContext, sessionInvestigationState: runtimeInput.sessionInvestigationState, addressRuntimeMetaForDeep: runtimeInput.addressRuntimeMetaForDeep, featureInvestigationStateV1: deps.featureInvestigationStateV1, featureStateFollowupBindingV1: deps.featureStateFollowupBindingV1, featureContractsV11: deps.featureContractsV11, featureAnswerPolicyV11: deps.featureAnswerPolicyV11, featureProblemCentricAnswerV1: deps.featureProblemCentricAnswerV1, featureLifecycleAnswerV1: deps.featureLifecycleAnswerV1, buildFollowupStateBinding: deps.buildFollowupStateBinding, normalize: deps.normalize, resolveBusinessScopeAlignment: deps.resolveBusinessScopeAlignment, inferP0DomainFromMessage: deps.inferP0DomainFromMessage, resolveBusinessScopeFromLiveContext: deps.resolveBusinessScopeFromLiveContext, extractRequirements: deps.extractRequirements, toExecutionPlan: deps.toExecutionPlan, enforceRbpLiveRoutePlan: deps.enforceRbpLiveRoutePlan, enforceFaLiveRoutePlan: deps.enforceFaLiveRoutePlan, executeRouteRuntime: deps.executeRouteRuntime, mapNoRouteReason: deps.mapNoRouteReason, buildSkippedResult: deps.buildSkippedResult, evaluateCoverage: deps.evaluateCoverage, checkGrounding: deps.checkGrounding, collectRbpLiveRouteAudit: deps.collectRbpLiveRouteAudit, collectFaLiveRouteAudit: deps.collectFaLiveRouteAudit, hasExplicitPeriodAnchor: deps.hasExplicitPeriodAnchorFromNormalized, extractDroppedIntentSegments: deps.extractDroppedIntentSegments, buildDebugRoutes: deps.toDebugRoutes, extractExecutionState: deps.extractExecutionState, sanitizeReply: deps.sanitizeOutgoingAssistantText, persistInvestigationState: deps.setInvestigationState, messageIdFactory: deps.messageIdFactory, appendItem: deps.appendItem, getSession: deps.getSession, persistSession: deps.persistSession, cloneConversation: (items) => items.map((item) => ({ ...item })), logEvent: deps.logEvent }; }