@chatman-media/conversation-engine 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dal/conversations.integration.test.d.ts +2 -0
- package/dist/dal/conversations.integration.test.d.ts.map +1 -0
- package/dist/dal/kb-store.integration.test.d.ts +2 -0
- package/dist/dal/kb-store.integration.test.d.ts.map +1 -0
- package/dist/index.js +105 -5
- package/dist/lead-advance.integration.test.d.ts +2 -0
- package/dist/lead-advance.integration.test.d.ts.map +1 -0
- package/dist/reply-strategy/exchange-reply-guard.d.ts +13 -0
- package/dist/reply-strategy/exchange-reply-guard.d.ts.map +1 -0
- package/dist/reply-strategy/exchange-reply-guard.test.d.ts +2 -0
- package/dist/reply-strategy/exchange-reply-guard.test.d.ts.map +1 -0
- package/dist/reply-strategy/llm-reply.d.ts +1 -0
- package/dist/reply-strategy/llm-reply.d.ts.map +1 -1
- package/dist/reply-strategy/rag-reply.d.ts +1 -0
- package/dist/reply-strategy/rag-reply.d.ts.map +1 -1
- package/dist/reply-strategy/rag-reply.test.d.ts +2 -0
- package/dist/reply-strategy/rag-reply.test.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations.integration.test.d.ts","sourceRoot":"","sources":["../../src/dal/conversations.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-store.integration.test.d.ts","sourceRoot":"","sources":["../../src/dal/kb-store.integration.test.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1970,6 +1970,87 @@ ${transcript}` }
|
|
|
1970
1970
|
return raw.trim() || null;
|
|
1971
1971
|
}
|
|
1972
1972
|
|
|
1973
|
+
// src/reply-strategy/exchange-reply-guard.ts
|
|
1974
|
+
var EXCHANGE_SAFE_FALLBACK = "Сейчас уточню у оператора и вернусь с точной суммой/реквизитами.";
|
|
1975
|
+
var QUOTE_TOOLS = new Set(["compute_exchange_quote", "create_exchange_order"]);
|
|
1976
|
+
var REQUISITES_TOOLS = new Set(["fetch_exchange_requisites"]);
|
|
1977
|
+
var PAYOUT_TOOLS = new Set(["issue_exchange_payout"]);
|
|
1978
|
+
var NUMBER_RE = /(?<![A-Za-zА-Яа-я0-9])(?:\d{1,3}(?:[ .,]\d{3})+|\d+)(?:[.,]\d+)?(?![A-Za-zА-Яа-я0-9])/u;
|
|
1979
|
+
var QUOTE_RE = /(?:курс|rate|отда[её]те|получа(?:ете|ешь)|итог(?:овая)?\s+сумм|thb|бат|bhat|rub|руб|usdt|btc|eth|usd|eur)/iu;
|
|
1980
|
+
var REQUISITES_RE = /(?:реквизит|кошел[её]к|wallet|адрес\s+(?:кошелька|для\s+оплаты)|оплат\w*|перев(?:од|ести)|sbp|сбп|qr|карта|card|binance\s*id|trc20|erc20|bep20)/iu;
|
|
1981
|
+
var PAYOUT_RE = /(?:код\s+(?:выдачи|снятия|получения)|payout\s*code|cardless|без\s+карты|банкомат|atm)/iu;
|
|
1982
|
+
var RATE_NEGOTIATION_RE = /(?:договор(?:имся|иться)|скидк|лучше\s+курс|курс\s+лучше|сдела(?:ю|ем)\s+курс|подвин(?:у|ем)\s+курс)/iu;
|
|
1983
|
+
var CRYPTO_ADDRESS_RE = /\b(?:T[A-Za-z0-9]{25,}|0x[a-fA-F0-9]{32,}|bc1[a-z0-9]{20,})\b/u;
|
|
1984
|
+
var CARDISH_RE = /\b(?:\d[ -]?){12,19}\b/u;
|
|
1985
|
+
var URL_PAYMENT_RE = /\bhttps?:\/\/\S+/iu;
|
|
1986
|
+
var CODE_RE = /\b\d{4,8}\b/u;
|
|
1987
|
+
function successfulToolNames(telemetry) {
|
|
1988
|
+
const names = new Set;
|
|
1989
|
+
const calls = telemetry?.toolCalls ?? (telemetry?.toolCall ? [{ ...telemetry.toolCall }] : []);
|
|
1990
|
+
for (const call of calls) {
|
|
1991
|
+
if (!call || "error" in call && call.error)
|
|
1992
|
+
continue;
|
|
1993
|
+
const result = call.result;
|
|
1994
|
+
if (isBlockingToolResult(result))
|
|
1995
|
+
continue;
|
|
1996
|
+
names.add(call.name);
|
|
1997
|
+
}
|
|
1998
|
+
return names;
|
|
1999
|
+
}
|
|
2000
|
+
function isBlockingToolResult(result) {
|
|
2001
|
+
if (typeof result !== "object" || result === null)
|
|
2002
|
+
return false;
|
|
2003
|
+
const obj = result;
|
|
2004
|
+
if (typeof obj.error === "string" && obj.error.trim())
|
|
2005
|
+
return true;
|
|
2006
|
+
if (obj.needsOperator === true)
|
|
2007
|
+
return true;
|
|
2008
|
+
if (obj.needsVerification === true)
|
|
2009
|
+
return true;
|
|
2010
|
+
if (obj.ok === false)
|
|
2011
|
+
return true;
|
|
2012
|
+
return false;
|
|
2013
|
+
}
|
|
2014
|
+
function hasAny(names, allowed) {
|
|
2015
|
+
for (const name of allowed) {
|
|
2016
|
+
if (names.has(name))
|
|
2017
|
+
return true;
|
|
2018
|
+
}
|
|
2019
|
+
return false;
|
|
2020
|
+
}
|
|
2021
|
+
function hasConcreteQuoteClaim(text) {
|
|
2022
|
+
return NUMBER_RE.test(text) && QUOTE_RE.test(text);
|
|
2023
|
+
}
|
|
2024
|
+
function hasConcreteRequisitesClaim(text) {
|
|
2025
|
+
if (CRYPTO_ADDRESS_RE.test(text) || CARDISH_RE.test(text))
|
|
2026
|
+
return true;
|
|
2027
|
+
if (!REQUISITES_RE.test(text))
|
|
2028
|
+
return false;
|
|
2029
|
+
return URL_PAYMENT_RE.test(text) || NUMBER_RE.test(text) || /(?:перев(?:едите|ести)|оплат(?:ите|ить)|адрес|ссылка)/iu.test(text);
|
|
2030
|
+
}
|
|
2031
|
+
function hasConcretePayoutClaim(text) {
|
|
2032
|
+
return PAYOUT_RE.test(text) && CODE_RE.test(text);
|
|
2033
|
+
}
|
|
2034
|
+
function guardExchangeReply(input) {
|
|
2035
|
+
const text = input.text.trim();
|
|
2036
|
+
if (!text)
|
|
2037
|
+
return { ok: true, text };
|
|
2038
|
+
if (RATE_NEGOTIATION_RE.test(text)) {
|
|
2039
|
+
return { ok: false, text: EXCHANGE_SAFE_FALLBACK, reason: "rate_negotiation" };
|
|
2040
|
+
}
|
|
2041
|
+
const tools = successfulToolNames(input.telemetry);
|
|
2042
|
+
if (hasConcreteQuoteClaim(text) && !hasAny(tools, QUOTE_TOOLS)) {
|
|
2043
|
+
return { ok: false, text: EXCHANGE_SAFE_FALLBACK, reason: "unbacked_quote" };
|
|
2044
|
+
}
|
|
2045
|
+
if (hasConcreteRequisitesClaim(text) && !hasAny(tools, REQUISITES_TOOLS)) {
|
|
2046
|
+
return { ok: false, text: EXCHANGE_SAFE_FALLBACK, reason: "unbacked_requisites" };
|
|
2047
|
+
}
|
|
2048
|
+
if (hasConcretePayoutClaim(text) && !hasAny(tools, PAYOUT_TOOLS)) {
|
|
2049
|
+
return { ok: false, text: EXCHANGE_SAFE_FALLBACK, reason: "unbacked_payout_code" };
|
|
2050
|
+
}
|
|
2051
|
+
return { ok: true, text };
|
|
2052
|
+
}
|
|
2053
|
+
|
|
1973
2054
|
// src/reply-strategy/rag-reply.ts
|
|
1974
2055
|
function messagesToChatHistory(history) {
|
|
1975
2056
|
const out = [];
|
|
@@ -2049,7 +2130,11 @@ class RagReplyStrategy {
|
|
|
2049
2130
|
const [skills, directorHooks, tools, reranker, stageGuidance, requestContext, awaitingOperator] = await Promise.all([
|
|
2050
2131
|
this.opts.resolveSkills ? this.opts.resolveSkills({ tenantId }) : Promise.resolve([]),
|
|
2051
2132
|
this.opts.resolveDirectorHooks ? this.opts.resolveDirectorHooks({ tenantId }) : Promise.resolve([]),
|
|
2052
|
-
this.opts.resolveTools ? this.opts.resolveTools({
|
|
2133
|
+
this.opts.resolveTools ? this.opts.resolveTools({
|
|
2134
|
+
tenantId,
|
|
2135
|
+
conversationId: input.conversationId,
|
|
2136
|
+
contactId: input.contactId
|
|
2137
|
+
}) : Promise.resolve([]),
|
|
2053
2138
|
this.opts.resolveReranker ? this.opts.resolveReranker({ tenantId }) : Promise.resolve(null),
|
|
2054
2139
|
this.opts.resolveStageGuidance ? this.opts.resolveStageGuidance({ tenantId, contactId: input.contactId }) : Promise.resolve(null),
|
|
2055
2140
|
this.opts.resolveRequestContext ? this.opts.resolveRequestContext({ tenantId, contactId: input.contactId }) : Promise.resolve(null),
|
|
@@ -2111,11 +2196,15 @@ class RagReplyStrategy {
|
|
|
2111
2196
|
}
|
|
2112
2197
|
];
|
|
2113
2198
|
}
|
|
2199
|
+
const guarded = this.opts.template?.slug === "exchange_v1" ? guardExchangeReply({ text: result.text, telemetry: result.telemetry }) : { ok: true, text: result.text };
|
|
2200
|
+
if (!guarded.ok) {
|
|
2201
|
+
console.warn(`[exchange-reply-guard] tenant=${tenantId} conversation=${input.conversationId} reason=${guarded.reason ?? "unknown"}`);
|
|
2202
|
+
}
|
|
2114
2203
|
return [
|
|
2115
2204
|
{
|
|
2116
2205
|
channelId: String(input.channel.channelId),
|
|
2117
2206
|
externalUserId: input.inbound.externalUserId,
|
|
2118
|
-
parts: [{ kind: "text", text:
|
|
2207
|
+
parts: [{ kind: "text", text: guarded.text }]
|
|
2119
2208
|
}
|
|
2120
2209
|
];
|
|
2121
2210
|
}
|
|
@@ -2721,7 +2810,11 @@ async function processInbound(inbound, deps) {
|
|
|
2721
2810
|
};
|
|
2722
2811
|
}
|
|
2723
2812
|
// src/reply-strategy/llm-reply.ts
|
|
2724
|
-
import {
|
|
2813
|
+
import {
|
|
2814
|
+
buildToolTelemetry,
|
|
2815
|
+
DEFAULT_MAX_TOOL_CYCLES,
|
|
2816
|
+
runToolLoop
|
|
2817
|
+
} from "@chatman-media/kb";
|
|
2725
2818
|
var BASE_SYSTEM_PROMPT = "Ты — операционный бот платформы lead-engine. Отвечай кратко, " + "уважительно, по делу. Никогда не выдумывай факты которых нет в " + "контексте — лучше скажи «уточню у партнёра» и поставь сообщение в очередь оператора.";
|
|
2726
2819
|
function messagesToChatHistory2(history) {
|
|
2727
2820
|
const out = [];
|
|
@@ -2765,7 +2858,8 @@ class LlmReplyStrategy {
|
|
|
2765
2858
|
try {
|
|
2766
2859
|
tools = await this.opts.resolveTools({
|
|
2767
2860
|
tenantId: input.tenant.tenantId,
|
|
2768
|
-
conversationId: input.conversationId
|
|
2861
|
+
conversationId: input.conversationId,
|
|
2862
|
+
contactId: input.contactId
|
|
2769
2863
|
});
|
|
2770
2864
|
} catch {
|
|
2771
2865
|
tools = [];
|
|
@@ -2784,6 +2878,7 @@ class LlmReplyStrategy {
|
|
|
2784
2878
|
...historyMessages
|
|
2785
2879
|
];
|
|
2786
2880
|
let reply;
|
|
2881
|
+
let toolCalls = [];
|
|
2787
2882
|
if (toolsActive) {
|
|
2788
2883
|
const loop = await runToolLoop({
|
|
2789
2884
|
chat,
|
|
@@ -2792,17 +2887,22 @@ class LlmReplyStrategy {
|
|
|
2792
2887
|
llmOpts,
|
|
2793
2888
|
maxCycles: DEFAULT_MAX_TOOL_CYCLES
|
|
2794
2889
|
});
|
|
2890
|
+
toolCalls = loop.toolCalls;
|
|
2795
2891
|
reply = loop.content ?? await chat.complete(msgs, llmOpts);
|
|
2796
2892
|
} else {
|
|
2797
2893
|
reply = await chat.complete(msgs, llmOpts);
|
|
2798
2894
|
}
|
|
2799
2895
|
if (reply.trim().length === 0)
|
|
2800
2896
|
return null;
|
|
2897
|
+
const guarded = this.opts.template.slug === "exchange_v1" ? guardExchangeReply({ text: reply, telemetry: buildToolTelemetry(toolCalls) }) : { ok: true, text: reply };
|
|
2898
|
+
if (!guarded.ok) {
|
|
2899
|
+
console.warn(`[exchange-reply-guard] tenant=${input.tenant.tenantId} conversation=${input.conversationId} reason=${guarded.reason ?? "unknown"}`);
|
|
2900
|
+
}
|
|
2801
2901
|
return [
|
|
2802
2902
|
{
|
|
2803
2903
|
channelId: String(input.channel.channelId),
|
|
2804
2904
|
externalUserId: input.inbound.externalUserId,
|
|
2805
|
-
parts: [{ kind: "text", text:
|
|
2905
|
+
parts: [{ kind: "text", text: guarded.text }]
|
|
2806
2906
|
}
|
|
2807
2907
|
];
|
|
2808
2908
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lead-advance.integration.test.d.ts","sourceRoot":"","sources":["../src/lead-advance.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AnswerTelemetry } from "@chatman-media/kb";
|
|
2
|
+
export declare const EXCHANGE_SAFE_FALLBACK = "\u0421\u0435\u0439\u0447\u0430\u0441 \u0443\u0442\u043E\u0447\u043D\u044E \u0443 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0438 \u0432\u0435\u0440\u043D\u0443\u0441\u044C \u0441 \u0442\u043E\u0447\u043D\u043E\u0439 \u0441\u0443\u043C\u043C\u043E\u0439/\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430\u043C\u0438.";
|
|
3
|
+
export interface ExchangeReplyGuardInput {
|
|
4
|
+
text: string;
|
|
5
|
+
telemetry?: Pick<AnswerTelemetry, "toolCall" | "toolCalls">;
|
|
6
|
+
}
|
|
7
|
+
export interface ExchangeReplyGuardResult {
|
|
8
|
+
ok: boolean;
|
|
9
|
+
text: string;
|
|
10
|
+
reason?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function guardExchangeReply(input: ExchangeReplyGuardInput): ExchangeReplyGuardResult;
|
|
13
|
+
//# sourceMappingURL=exchange-reply-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-reply-guard.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/exchange-reply-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,eAAO,MAAM,sBAAsB,mVACiC,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAuB3F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-reply-guard.test.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/exchange-reply-guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-reply.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/llm-reply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"llm-reply.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/llm-reply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC;IAC9C,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC;CAC5C;AAkBD,qBAAa,gBAAiB,YAAW,aAAa;IAElD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,IAAI,EAAE,oBAAoB,EAC1B,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,YAAY;IAGhE,QAAQ,CAAC,KAAK,EAAE;QACpB,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE;YAAE,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,eAAe,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC;CAyFvC"}
|
|
@@ -134,6 +134,7 @@ export interface RagReplyStrategyOpts {
|
|
|
134
134
|
resolveTools?: (input: {
|
|
135
135
|
tenantId: number;
|
|
136
136
|
conversationId: number;
|
|
137
|
+
contactId?: number;
|
|
137
138
|
}) => Promise<AnyRagTool[]> | AnyRagTool[];
|
|
138
139
|
/**
|
|
139
140
|
* Если true — когда RAG не находит контекста (NO_CONTEXT_MARKER) бот всё
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rag-reply.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/rag-reply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EACV,UAAU,EAEV,eAAe,IAAI,kBAAkB,EACtC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,qBAAqB,EAE1B,KAAK,QAAQ,EAGb,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,KAAK,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"rag-reply.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/rag-reply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag-reply.test.d.ts","sourceRoot":"","sources":["../../src/reply-strategy/rag-reply.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chatman-media/conversation-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Channel-agnostic pipeline обработки inbound сообщений: contact-resolve → conversation lookup → mode routing → AI-reply / queued / human → outbound. Сердце data plane.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@chatman-media/channel-telegram": "1.1.0",
|
|
39
39
|
"@chatman-media/llm-router": "1.1.1",
|
|
40
40
|
"@chatman-media/kb": "1.5.0",
|
|
41
|
-
"@chatman-media/storage": "1.
|
|
41
|
+
"@chatman-media/storage": "1.10.1",
|
|
42
42
|
"@chatman-media/verticals": "1.2.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|