АРЧ - Ассистент: отделить reference-срез от execution-окна в ответах по lifecycle follow-up

This commit is contained in:
2026-04-15 14:50:16 +03:00
parent 70cc5a99f1
commit 7a6d8eb070
44 changed files with 2394 additions and 118 deletions
@@ -1,6 +1,12 @@
export interface BuildAssistantAddressOrchestrationRuntimeInput {
userMessage: string;
sessionItems: unknown[];
sessionAddressNavigationState?: unknown;
sessionOrganizationScope?: {
knownOrganizations?: unknown;
selectedOrganization?: unknown;
activeOrganization?: unknown;
} | null;
llmProvider: unknown;
useMock: boolean;
featureAddressLlmPredecomposeV1: boolean;
@@ -15,7 +21,8 @@ export interface BuildAssistantAddressOrchestrationRuntimeInput {
userMessage: string,
sessionItems: unknown[],
addressInputMessage: string,
addressPreDecompose: Record<string, unknown>
addressPreDecompose: Record<string, unknown>,
sessionAddressNavigationState?: unknown
) => AssistantAddressCarryoverLike | null;
resolveAssistantOrchestrationDecision: (input: {
rawUserMessage: string;
@@ -23,6 +30,7 @@ export interface BuildAssistantAddressOrchestrationRuntimeInput {
followupContext: unknown;
llmPreDecomposeMeta: Record<string, unknown>;
sessionItems?: unknown[];
sessionOrganizationScope?: unknown;
useMock: boolean;
}) => Record<string, unknown>;
buildAddressDialogContinuationContractV2: (
@@ -57,7 +65,7 @@ function hasSelectedObjectInventorySignal(text: string | null): boolean {
}
function hasSelectedObjectInventoryActionCue(text: string | null): boolean {
return /(?:кому[\s\S]{0,80}продал[аи]?|кому[\s\S]{0,80}реализова[нлт][а-я]*|кому\s+был\s+продан|кто[\s\S]{0,40}купил|кто\s+это\s+поставил|кто\s+поставил|у\s+кого\s+купили|у\s+кого\s+куплено|где\s+мы\s+купили|где\s+куплено|по\s+каким\s+документам|какими\s+документами|покажи\s+документы|документы\s+закупки|buyer|sale\s+trace|supplier|vendor|purchase\s+documents|purchase[\s-]?to[\s-]?sale|old\s+purchase|aged\s+stock)/iu.test(
return /(?:кому[\s\S]{0,80}продал[аи]?|кому[\s\S]{0,80}реализова[нлт][а-я]*|кому\s+был\s+продан|куда[\s\S]{0,80}продал[аи]?|куда[\s\S]{0,80}реализова[нлт][а-я]*|кто[\s\S]{0,40}купил|кто\s+это\s+поставил|кто\s+поставил|у\s+кого\s+купили|у\s+кого\s+куплено|где\s+мы\s+купили|где\s+куплено|по\s+каким\s+документам|какими\s+документами|покажи\s+документы|документы\s+закупки|buyer|sale\s+trace|supplier|vendor|purchase\s+documents|purchase[\s-]?to[\s-]?sale|old\s+purchase|aged\s+stock)/iu.test(
String(text ?? "")
);
}
@@ -154,7 +162,8 @@ export async function buildAssistantAddressOrchestrationRuntime(
input.userMessage,
input.sessionItems,
addressInputMessage,
addressPreDecompose
addressPreDecompose,
input.sessionAddressNavigationState
);
if (
shouldPreferRawFollowupMessage(
@@ -180,7 +189,8 @@ export async function buildAssistantAddressOrchestrationRuntime(
input.userMessage,
input.sessionItems,
addressInputMessage,
addressPreDecompose
addressPreDecompose,
input.sessionAddressNavigationState
);
}
@@ -191,6 +201,7 @@ export async function buildAssistantAddressOrchestrationRuntime(
followupContext,
llmPreDecomposeMeta: addressPreDecompose,
sessionItems: input.sessionItems,
sessionOrganizationScope: input.sessionOrganizationScope ?? null,
useMock: input.useMock
});
const dialogContinuationContract = input.buildAddressDialogContinuationContractV2(