АРЧ АП11 - Архитектура: протянуть continuity snapshot в living-chat organization authority и добавить оценку риска правки в AGENTS

This commit is contained in:
2026-04-18 15:10:48 +03:00
parent 21738f8662
commit d8ce2b7d88
6 changed files with 188 additions and 4 deletions
@@ -3,6 +3,7 @@ import {
buildInventoryHistoryCapabilityFollowupReply as buildInventoryHistoryCapabilityFollowupReplyFromPolicy,
resolveAssistantLivingChatMemoryContext
} from "./assistantMemoryRecapPolicy";
import { resolveAssistantContinuitySnapshot } from "./assistantContinuityPolicy";
export interface AssistantLivingChatSessionScopeInput {
knownOrganizations?: unknown[];
@@ -248,6 +249,10 @@ export async function runAssistantLivingChatRuntime(
input: AssistantLivingChatRuntimeInput
): Promise<AssistantLivingChatRuntimeOutput> {
const userMessage = String(input.userMessage ?? "");
const continuitySnapshot = resolveAssistantContinuitySnapshot({
sessionItems: input.sessionItems,
toNonEmptyString: input.toNonEmptyString
});
const dataScopeMetaQuery = input.hasAssistantDataScopeMetaQuestionSignal(userMessage);
const capabilityMetaQuery = input.shouldHandleAsAssistantCapabilityMetaQuery(userMessage);
const destructiveSignal = input.hasDestructiveDataActionSignal(userMessage);
@@ -262,9 +267,13 @@ export async function runAssistantLivingChatRuntime(
let livingChatGroundingGuardApplied = false;
let livingChatGroundingGuardReason: string | null = null;
let livingChatProactiveScopeOfferApplied = false;
let knownOrganizations = input.mergeKnownOrganizations(input.sessionScope.knownOrganizations ?? []);
const continuityActiveOrganization = input.toNonEmptyString(continuitySnapshot.activeOrganization);
let knownOrganizations = input.mergeKnownOrganizations([
...(Array.isArray(input.sessionScope.knownOrganizations) ? input.sessionScope.knownOrganizations : []),
continuityActiveOrganization
]);
let selectedOrganization = input.toNonEmptyString(input.sessionScope.selectedOrganization);
let activeOrganization = input.toNonEmptyString(input.sessionScope.activeOrganization);
let activeOrganization = input.toNonEmptyString(input.sessionScope.activeOrganization) ?? continuityActiveOrganization;
const memoryRecapContext = resolveAssistantLivingChatMemoryContext({
modeDecisionReason: input.modeDecision?.reason ?? null,
sessionItems: input.sessionItems
@@ -362,6 +371,7 @@ export async function runAssistantLivingChatRuntime(
const shouldOfferProactiveOrganizationScope =
!selectedOrganization &&
!activeOrganization &&
!continuitySnapshot.hasGroundedAddressContext &&
!hasPriorAssistantTurn(input.sessionItems) &&
input.modeDecision?.mode === "chat" &&
input.hasLivingChatSignal(userMessage);
@@ -432,6 +442,8 @@ export async function runAssistantLivingChatRuntime(
? input.mergeKnownOrganizations(dataScopeProbe.organizations as unknown[])
: [],
living_chat_data_scope_probe_error: dataScopeProbe?.error ?? null,
living_chat_continuity_grounded_context_detected: continuitySnapshot.hasGroundedAddressContext,
living_chat_continuity_active_organization: continuityActiveOrganization,
living_chat_selected_organization: selectedOrganization ?? null,
assistant_known_organizations: knownOrganizations,
assistant_active_organization: activeOrganization ?? null,