ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.50: вынос resolveSessionOrganizationScopeContext(...) + related scope sanitation в отдельный runtime-adapter, чтобы добить верхний слой assistantService.

This commit is contained in:
2026-04-11 00:52:46 +03:00
parent ca467cdecc
commit 5e4cc0ed67
6 changed files with 261 additions and 45 deletions
@@ -0,0 +1,61 @@
export interface AssistantSessionOrganizationScopeContext {
knownOrganizations: string[];
selectedOrganization: string | null;
activeOrganization: string | null;
}
export interface ResolveSessionOrganizationScopeContextRuntimeInput<ItemType = unknown> {
userMessage: string;
items: ItemType[];
extractKnownOrganizationsFromHistory: (items: ItemType[]) => string[];
resolveOrganizationSelectionFromMessage: (userMessage: string, knownOrganizations: string[]) => string | null;
findLastAssistantActiveOrganization: (items: ItemType[]) => string | null;
normalizeOrganizationScopeValue: (value: unknown) => string | null;
}
export interface MergeFollowupContextWithOrganizationScopeRuntimeInput {
followupContext: unknown;
organization: unknown;
normalizeOrganizationScopeValue: (value: unknown) => string | null;
toNonEmptyString: (value: unknown) => string | null;
}
export function resolveSessionOrganizationScopeContextRuntime<ItemType = unknown>(
input: ResolveSessionOrganizationScopeContextRuntimeInput<ItemType>
): AssistantSessionOrganizationScopeContext {
const knownOrganizations = input.extractKnownOrganizationsFromHistory(input.items);
const selectedOrganization = input.resolveOrganizationSelectionFromMessage(
input.userMessage,
knownOrganizations
);
const lastActiveOrganization = input.findLastAssistantActiveOrganization(input.items);
const activeOrganization = selectedOrganization ?? input.normalizeOrganizationScopeValue(lastActiveOrganization);
return {
knownOrganizations,
selectedOrganization,
activeOrganization
};
}
export function mergeFollowupContextWithOrganizationScopeRuntime(
input: MergeFollowupContextWithOrganizationScopeRuntimeInput
): Record<string, unknown> | null {
const normalizedOrganization = input.normalizeOrganizationScopeValue(input.organization);
const hasBase = input.followupContext && typeof input.followupContext === "object";
const base = hasBase ? { ...(input.followupContext as Record<string, unknown>) } : {};
if (!normalizedOrganization) {
return hasBase ? base : null;
}
const previousFiltersRaw = base.previous_filters;
const previousFilters =
previousFiltersRaw && typeof previousFiltersRaw === "object"
? { ...(previousFiltersRaw as Record<string, unknown>) }
: {};
if (!input.toNonEmptyString(previousFilters.organization)) {
previousFilters.organization = normalizedOrganization;
}
base.previous_filters = previousFilters;
return base;
}
@@ -19,6 +19,7 @@ import * as assistantCanon_1 from "./assistantCanon";
import * as assistantAddressAttemptRuntimeAdapter_1 from "./assistantAddressAttemptRuntimeAdapter";
import * as assistantCoverageGrounding_1 from "./assistantCoverageGrounding";
import * as assistantDeepTurnAttemptRuntimeAdapter_1 from "./assistantDeepTurnAttemptRuntimeAdapter";
import * as assistantOrganizationScopeRuntimeAdapter_1 from "./assistantOrganizationScopeRuntimeAdapter";
import * as assistantTurnAttemptRuntimeAdapter_1 from "./assistantTurnAttemptRuntimeAdapter";
import * as assistantTurnRuntimeDepsAdapter_1 from "./assistantTurnRuntimeDepsAdapter";
import * as assistantTurnRuntimeInputBuilder_1 from "./assistantTurnRuntimeInputBuilder";
@@ -3727,30 +3728,22 @@ function resolveOrganizationSelectionFromMessage(userMessage, knownOrganizations
return best.organization;
}
function resolveSessionOrganizationScopeContext(userMessage, items) {
const knownOrganizations = extractKnownOrganizationsFromHistory(items);
const selectedOrganization = resolveOrganizationSelectionFromMessage(userMessage, knownOrganizations);
const lastActiveOrganization = findLastAssistantActiveOrganization(items);
const activeOrganization = selectedOrganization ?? normalizeOrganizationScopeValue(lastActiveOrganization);
return {
knownOrganizations,
selectedOrganization,
activeOrganization
};
return (0, assistantOrganizationScopeRuntimeAdapter_1.resolveSessionOrganizationScopeContextRuntime)({
userMessage,
items,
extractKnownOrganizationsFromHistory,
resolveOrganizationSelectionFromMessage,
findLastAssistantActiveOrganization,
normalizeOrganizationScopeValue
});
}
function mergeFollowupContextWithOrganizationScope(followupContext, organization) {
const normalizedOrganization = normalizeOrganizationScopeValue(organization);
const base = followupContext && typeof followupContext === "object" ? { ...followupContext } : {};
if (!normalizedOrganization) {
return followupContext && typeof followupContext === "object" ? base : null;
}
const previousFilters = base.previous_filters && typeof base.previous_filters === "object"
? { ...base.previous_filters }
: {};
if (!toNonEmptyString(previousFilters.organization)) {
previousFilters.organization = normalizedOrganization;
}
base.previous_filters = previousFilters;
return base;
return (0, assistantOrganizationScopeRuntimeAdapter_1.mergeFollowupContextWithOrganizationScopeRuntime)({
followupContext,
organization,
normalizeOrganizationScopeValue,
toNonEmptyString
});
}
export function resolveSessionOrganizationScopeContextForTests(userMessage, items) {
return resolveSessionOrganizationScopeContext(userMessage, items);