"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ASSISTANT_MCP_DISCOVERY_LOOP_STATE_SCHEMA_VERSION = exports.ASSISTANT_MCP_DISCOVERY_RUNTIME_BRIDGE_SCHEMA_VERSION = void 0; exports.runAssistantMcpDiscoveryRuntimeBridge = runAssistantMcpDiscoveryRuntimeBridge; const assistantMcpDiscoveryAnswerAdapter_1 = require("./assistantMcpDiscoveryAnswerAdapter"); const assistantMcpDiscoveryPilotExecutor_1 = require("./assistantMcpDiscoveryPilotExecutor"); const assistantMcpDiscoveryPlanner_1 = require("./assistantMcpDiscoveryPlanner"); exports.ASSISTANT_MCP_DISCOVERY_RUNTIME_BRIDGE_SCHEMA_VERSION = "assistant_mcp_discovery_runtime_bridge_v1"; exports.ASSISTANT_MCP_DISCOVERY_LOOP_STATE_SCHEMA_VERSION = "assistant_mcp_discovery_loop_state_v1"; function normalizeReasonCode(value) { const normalized = value .trim() .replace(/[^\p{L}\p{N}_.:-]+/gu, "_") .replace(/^_+|_+$/g, "") .toLowerCase(); return normalized.length > 0 ? normalized.slice(0, 120) : null; } function pushReason(target, value) { const normalized = normalizeReasonCode(value); if (normalized && !target.includes(normalized)) { target.push(normalized); } } function uniqueStrings(values) { const result = []; for (const value of values) { const text = String(value ?? "").trim(); if (text && !result.includes(text)) { result.push(text); } } return result; } function bridgeStatusFor(pilot, draft) { if (draft.answer_mode === "blocked" || pilot.pilot_status === "blocked") { return "blocked"; } if (draft.answer_mode === "needs_clarification" || pilot.pilot_status === "skipped_needs_clarification") { return "needs_clarification"; } if (pilot.pilot_status === "unsupported") { return "unsupported"; } if (draft.answer_mode === "checked_sources_only") { return "checked_sources_only"; } return "answer_draft_ready"; } function businessFactAnswerAllowed(draft) { return draft.answer_mode === "confirmed_with_bounded_inference" || draft.answer_mode === "bounded_inference_only"; } function loopStatusFor(bridgeStatus) { if (bridgeStatus === "needs_clarification") { return "awaiting_clarification"; } if (bridgeStatus === "blocked" || bridgeStatus === "unsupported") { return "blocked"; } return "ready_for_next_hop"; } function flattenAxes(pilot, source) { const result = []; for (const step of pilot.dry_run.execution_steps) { if (source === "provided_axes") { for (const axis of step.provided_axes) { if (axis && !result.includes(axis)) { result.push(axis); } } continue; } for (const option of step.missing_axis_options) { for (const axis of option) { if (axis && !result.includes(axis)) { result.push(axis); } } } } return result; } function entityCandidatesFromPlanner(planner) { const values = planner.discovery_plan.turn_meaning_ref?.explicit_entity_candidates ?? []; return uniqueStrings(values); } function buildLoopState(planner, pilot, bridgeStatus) { const plannerClarificationGaps = planner.discovery_plan.clarification_gaps ?? []; return { schema_version: exports.ASSISTANT_MCP_DISCOVERY_LOOP_STATE_SCHEMA_VERSION, policy_owner: "assistantMcpDiscoveryRuntimeBridge", loop_status: loopStatusFor(bridgeStatus), selected_chain_id: planner.selected_chain_id, catalog_chain_template_matches: [...planner.catalog_chain_template_matches], catalog_chain_template_alignment: planner.catalog_chain_template_alignment, pilot_scope: pilot.pilot_scope, asked_domain_family: planner.discovery_plan.turn_meaning_ref?.asked_domain_family ?? null, asked_action_family: planner.discovery_plan.turn_meaning_ref?.asked_action_family ?? null, unsupported_but_understood_family: planner.discovery_plan.turn_meaning_ref?.unsupported_but_understood_family ?? null, ranking_need: planner.data_need_graph?.ranking_need ?? planner.discovery_plan.turn_meaning_ref?.seeded_ranking_need ?? null, pending_axes: plannerClarificationGaps.length > 0 ? plannerClarificationGaps : flattenAxes(pilot, "missing_axis_options"), provided_axes: flattenAxes(pilot, "provided_axes"), explicit_entity_candidates: entityCandidatesFromPlanner(planner), metadata_scope_hint: planner.discovery_plan.turn_meaning_ref?.metadata_scope_hint ?? planner.data_need_graph?.metadata_scope_hint ?? null, subject_resolution_optional: planner.discovery_plan.turn_meaning_ref?.subject_resolution_optional === true || planner.data_need_graph?.subject_resolution_optional === true, explicit_organization_scope: planner.discovery_plan.turn_meaning_ref?.explicit_organization_scope ?? null, explicit_date_scope: planner.discovery_plan.turn_meaning_ref?.explicit_date_scope ?? null }; } async function runAssistantMcpDiscoveryRuntimeBridge(input) { const planner = (0, assistantMcpDiscoveryPlanner_1.planAssistantMcpDiscovery)({ semanticDataNeed: input.semanticDataNeed, dataNeedGraph: input.dataNeedGraph, metadataSurface: input.metadataSurface, turnMeaning: input.turnMeaning }); const pilot = await (0, assistantMcpDiscoveryPilotExecutor_1.executeAssistantMcpDiscoveryPilot)(planner, input.deps); const answerDraft = (0, assistantMcpDiscoveryAnswerAdapter_1.buildAssistantMcpDiscoveryAnswerDraft)(pilot); const bridgeStatus = bridgeStatusFor(pilot, answerDraft); const loopState = buildLoopState(planner, pilot, bridgeStatus); const reasonCodes = uniqueStrings([...planner.reason_codes, ...pilot.reason_codes, ...answerDraft.reason_codes]); pushReason(reasonCodes, `runtime_bridge_status_${bridgeStatus}`); pushReason(reasonCodes, "runtime_bridge_not_wired_to_hot_assistant_answer"); pushReason(reasonCodes, `runtime_bridge_loop_state_${loopState.loop_status}`); return { schema_version: exports.ASSISTANT_MCP_DISCOVERY_RUNTIME_BRIDGE_SCHEMA_VERSION, policy_owner: "assistantMcpDiscoveryRuntimeBridge", bridge_status: bridgeStatus, hot_runtime_wired: false, planner, pilot, answer_draft: answerDraft, loop_state: loopState, user_facing_response_allowed: bridgeStatus !== "blocked", business_fact_answer_allowed: businessFactAnswerAllowed(answerDraft), requires_user_clarification: bridgeStatus === "needs_clarification", reason_codes: reasonCodes }; }