"use strict"; // @ts-nocheck Object.defineProperty(exports, "__esModule", { value: true }); exports.createAssistantTurnMeaningPolicy = createAssistantTurnMeaningPolicy; const SUPPORTED_ADDRESS_INTENTS = new Set([ "receivables_confirmed_as_of_date", "payables_confirmed_as_of_date", "list_documents_by_counterparty", "customer_revenue_and_payments", "inventory_on_hand_as_of_date" ]); function fallbackCompactWhitespace(value) { return String(value ?? "").replace(/\s+/g, " ").trim(); } function normalizeTurnText(value, deps) { const compactWhitespace = typeof deps?.compactWhitespace === "function" ? deps.compactWhitespace : fallbackCompactWhitespace; const repaired = typeof deps?.repairAddressMojibake === "function" ? deps.repairAddressMojibake(String(value ?? "")) : String(value ?? ""); return compactWhitespace(repaired.toLowerCase()) .replace(/\u0451/gu, "\u0435") .replace(/(^|[^\p{L}0-9_])\u043d\u0430\u043c\u0441(?=$|[^\p{L}0-9_])/giu, "$1\u043d\u0430\u043c") .replace(/(^|[^\p{L}0-9_])\u043a\u0430\u043a\u0438\u0435\u043a(?=$|[^\p{L}0-9_])/giu, "$1\u043a\u0430\u043a\u0438\u0435"); } function toNonEmptyString(value, deps) { if (typeof deps?.toNonEmptyString === "function") { return deps.toNonEmptyString(value); } if (value === null || value === undefined) { return null; } const text = String(value).trim(); return text.length > 0 ? text : null; } function detectSupportedIntent(text, deps) { const resolved = typeof deps?.resolveAddressIntent === "function" ? deps.resolveAddressIntent(text) : null; const resolverIntent = toNonEmptyString(resolved?.intent, deps); if (resolverIntent && resolverIntent !== "unknown" && SUPPORTED_ADDRESS_INTENTS.has(resolverIntent)) { return { intent: resolverIntent, confidence: toNonEmptyString(resolved?.confidence, deps) ?? "medium", reason: "address_intent_resolver_current_turn_signal" }; } if (/(?:\u043a\u0442\u043e\s+\u043d\u0430\u043c\s+\u0434\u043e\u043b\u0436|\u043d\u0430\u043c\s+\u043a\u0442\u043e\s+\u0434\u043e\u043b\u0436|\u0434\u0435\u0431\u0438\u0442\u043e\u0440|\u0434\u0435\u0431\u0438\u0442\u043e\u0440\u0441\u043a|\breceivables?\b)/iu.test(text)) { return { intent: "receivables_confirmed_as_of_date", confidence: "high", reason: "receivables_current_turn_meaning_signal" }; } if (/(?:\u043a\u043e\u043c\u0443\s+\u043c\u044b\s+\u0434\u043e\u043b\u0436|\u043c\u044b\s+\u043a\u043e\u043c\u0443\s+\u0434\u043e\u043b\u0436|\u043c\u044b\s+\u0434\u043e\u043b\u0436\u043d|\u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0440|\bpayables?\b)/iu.test(text)) { return { intent: "payables_confirmed_as_of_date", confidence: "high", reason: "payables_current_turn_meaning_signal" }; } if (/(?:\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442|\u0434\u043e\u043a\u0438|docs?|documents?)/iu.test(text) && /(?:\u043f\u043e|by)\s+[\p{L}0-9._-]{2,}/iu.test(text)) { return { intent: "list_documents_by_counterparty", confidence: "medium", reason: "counterparty_documents_current_turn_signal" }; } if (/(?:\u043e\u0441\u0442\u0430\u0442|\u0441\u043a\u043b\u0430\u0434|inventory|stock)/iu.test(text)) { return { intent: "inventory_on_hand_as_of_date", confidence: "medium", reason: "inventory_snapshot_current_turn_signal" }; } return null; } function detectCounterpartyTurnoverFamily(text) { const hasTurnoverCue = /(?:\u043e\u0431\u043e\u0440\u043e\u0442|\u0432\u044b\u0440\u0443\u0447\u043a|\u0434\u043e\u0445\u043e\u0434|turnover|revenue)/iu.test(text); if (!hasTurnoverCue) { return null; } const explicitEntityMatch = text.match(/(?:\u043f\u043e|by|for)?\s*([\p{L}0-9._-]{2,})\s*$/iu); const rawEntity = explicitEntityMatch?.[1] ?? null; const ignored = new Set([ "\u043e\u0431\u043e\u0440\u043e\u0442", "\u0432\u044b\u0440\u0443\u0447\u043a\u0430", "\u0434\u043e\u0445\u043e\u0434", "\u0431\u044b\u043b", "\u0431\u044b\u043b\u0430", "turnover", "revenue" ]); const entity = rawEntity && !ignored.has(rawEntity) ? rawEntity : null; return { family: "counterparty_value_or_turnover", entity }; } function buildEntityCandidates(counterpartyTurnover) { if (!counterpartyTurnover?.entity) { return []; } return [ { type: "counterparty", value: counterpartyTurnover.entity, source: "current_turn_loose_entity_tail" } ]; } function createAssistantTurnMeaningPolicy(deps = {}) { function resolveAssistantTurnMeaning(input = {}) { const rawMessage = String(input?.rawUserMessage ?? input?.userMessage ?? ""); const effectiveMessage = String(input?.effectiveAddressUserMessage ?? rawMessage); const rawText = normalizeTurnText(rawMessage, deps); const effectiveText = normalizeTurnText(effectiveMessage, deps); const joinedText = fallbackCompactWhitespace(`${rawText} ${effectiveText}`); const supportedIntent = detectSupportedIntent(joinedText, deps); const counterpartyTurnover = detectCounterpartyTurnoverFamily(joinedText); const llmIntent = toNonEmptyString(input?.llmPreDecomposeMeta?.predecomposeContract?.intent, deps); const explicitIntentCandidate = supportedIntent?.intent ?? (llmIntent && llmIntent !== "unknown" ? llmIntent : null); const unsupportedFamily = !explicitIntentCandidate && counterpartyTurnover?.family ? counterpartyTurnover.family : null; const reasonCodes = []; if (supportedIntent?.reason) { reasonCodes.push(supportedIntent.reason); } if (counterpartyTurnover?.family) { reasonCodes.push("counterparty_turnover_current_turn_signal"); } if (rawText !== normalizeTurnText(rawMessage, { ...deps, repairAddressMojibake: (value) => String(value ?? "") })) { reasonCodes.push("mojibake_repair_applied"); } if (rawText.includes("\u043d\u0430\u043c") && /(^|[^\p{L}0-9_])\u043d\u0430\u043c\u0441(?=$|[^\p{L}0-9_])/iu.test(String(rawMessage ?? ""))) { reasonCodes.push("known_turn_typo_normalized"); } const askedDomainFamily = explicitIntentCandidate?.startsWith("receivables_") ? "receivables" : explicitIntentCandidate?.startsWith("payables_") ? "payables" : explicitIntentCandidate?.startsWith("inventory_") ? "inventory" : explicitIntentCandidate?.includes("counterparty") ? "counterparty" : counterpartyTurnover?.family ? "counterparty" : null; const askedActionFamily = explicitIntentCandidate === "receivables_confirmed_as_of_date" || explicitIntentCandidate === "payables_confirmed_as_of_date" || explicitIntentCandidate === "inventory_on_hand_as_of_date" ? "confirmed_snapshot" : explicitIntentCandidate === "list_documents_by_counterparty" ? "list_documents" : counterpartyTurnover?.family ? "counterparty_value_or_turnover" : null; const staleReplayForbidden = Boolean(unsupportedFamily || (counterpartyTurnover?.entity && !explicitIntentCandidate)); return { schema_version: "assistant_turn_meaning_v1", raw_message: rawMessage, effective_message: effectiveMessage, normalized_raw_message: rawText, normalized_effective_message: effectiveText, asked_domain_family: askedDomainFamily, asked_action_family: askedActionFamily, explicit_intent_candidate: explicitIntentCandidate, explicit_entity_candidates: buildEntityCandidates(counterpartyTurnover), meaning_confidence: supportedIntent?.confidence ?? (counterpartyTurnover?.family ? "medium" : "low"), intent_override_strength: explicitIntentCandidate ? "explicit_current_turn_intent" : staleReplayForbidden ? "explicit_new_action_or_entity" : "none", carryover_budget: staleReplayForbidden ? "none" : explicitIntentCandidate ? "matching_family_only" : "normal", unsupported_but_understood_family: unsupportedFamily, stale_replay_forbidden: staleReplayForbidden, reason_codes: reasonCodes }; } return { resolveAssistantTurnMeaning }; }