76 lines
3.3 KiB
JavaScript
76 lines
3.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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";
|
|
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";
|
|
}
|
|
async function runAssistantMcpDiscoveryRuntimeBridge(input) {
|
|
const planner = (0, assistantMcpDiscoveryPlanner_1.planAssistantMcpDiscovery)({
|
|
semanticDataNeed: input.semanticDataNeed,
|
|
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 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");
|
|
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,
|
|
user_facing_response_allowed: bridgeStatus !== "blocked",
|
|
business_fact_answer_allowed: businessFactAnswerAllowed(answerDraft),
|
|
requires_user_clarification: bridgeStatus === "needs_clarification",
|
|
reason_codes: reasonCodes
|
|
};
|
|
}
|