@besales/mcp 0.28.0 → 0.32.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.
Files changed (33) hide show
  1. package/README.md +6 -2
  2. package/dist/instructions/server-instructions.d.ts +1 -1
  3. package/dist/instructions/server-instructions.js +14 -0
  4. package/dist/instructions/server-instructions.js.map +1 -1
  5. package/dist/resources/docs/crm-integration.md +2 -2
  6. package/dist/resources/workflows/audit-dialogues.md +12 -0
  7. package/dist/resources/workflows/compare-models.md +1 -1
  8. package/dist/schemas/mcp-tools.json +2315 -1251
  9. package/dist/tools/definitions/broadcast-analytics.d.ts +26 -0
  10. package/dist/tools/definitions/broadcast-analytics.js +89 -0
  11. package/dist/tools/definitions/broadcast-analytics.js.map +1 -0
  12. package/dist/tools/definitions/dialogue-export.js +8 -1
  13. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  14. package/dist/tools/definitions/follow-up.d.ts +84 -0
  15. package/dist/tools/definitions/follow-up.js +161 -0
  16. package/dist/tools/definitions/follow-up.js.map +1 -0
  17. package/dist/tools/definitions/knowledge.d.ts +2 -2
  18. package/dist/tools/definitions/model-comparison.js +1 -1
  19. package/dist/tools/definitions/platform-setup.d.ts +74 -0
  20. package/dist/tools/definitions/platform-setup.js +286 -1
  21. package/dist/tools/definitions/platform-setup.js.map +1 -1
  22. package/dist/tools/definitions/scheduled-tasks.d.ts +24 -0
  23. package/dist/tools/definitions/scheduled-tasks.js +124 -0
  24. package/dist/tools/definitions/scheduled-tasks.js.map +1 -0
  25. package/dist/tools/definitions/shared.d.ts +9 -0
  26. package/dist/tools/definitions/shared.js +34 -0
  27. package/dist/tools/definitions/shared.js.map +1 -1
  28. package/dist/tools/definitions.d.ts +131 -2
  29. package/dist/tools/definitions.js +6 -0
  30. package/dist/tools/definitions.js.map +1 -1
  31. package/docs/host-setup.md +3 -3
  32. package/package.json +2 -2
  33. package/CHANGELOG.md +0 -531
@@ -0,0 +1,26 @@
1
+ export declare const broadcastAnalyticsTools: (import("./shared.js").ToolDefinition<{
2
+ view: "cohort" | "period";
3
+ mode: "all" | "days" | "range";
4
+ workspace_id?: string | undefined;
5
+ days?: number | undefined;
6
+ from?: string | undefined;
7
+ to?: string | undefined;
8
+ platform_id?: string | undefined;
9
+ funnel?: string | undefined;
10
+ funnel_mode?: "none" | undefined;
11
+ segment?: string | undefined;
12
+ product?: string | undefined;
13
+ product_mode?: "none" | undefined;
14
+ }> | import("./shared.js").ToolDefinition<{
15
+ mode: "all" | "days" | "range";
16
+ workspace_id?: string | undefined;
17
+ days?: number | undefined;
18
+ from?: string | undefined;
19
+ to?: string | undefined;
20
+ platform_id?: string | undefined;
21
+ funnel?: string | undefined;
22
+ funnel_mode?: "none" | undefined;
23
+ segment?: string | undefined;
24
+ product?: string | undefined;
25
+ product_mode?: "none" | undefined;
26
+ }>)[];
@@ -0,0 +1,89 @@
1
+ // Read-only агрегаты страницы /broadcast-analytics. Не пересчитывать эти показатели по сообщениям:
2
+ // backend уже держит когортную атрибуцию, delivery-гейт и дедуп событий между соседними волнами.
3
+ import { z } from 'zod';
4
+ import { defineTool, uuidSchema, withInstructions } from './shared.js';
5
+ const calendarDateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/);
6
+ const analyticsQueryFields = {
7
+ workspace_id: uuidSchema.optional(),
8
+ mode: z.enum(['all', 'days', 'range']).default('days'),
9
+ days: z.number().int().min(1).optional(),
10
+ from: calendarDateSchema.optional(),
11
+ to: calendarDateSchema.optional(),
12
+ platform_id: uuidSchema.optional(),
13
+ funnel: z.string().min(1).optional(),
14
+ funnel_mode: z.literal('none').optional(),
15
+ segment: z.string().min(1).optional(),
16
+ product: z.string().min(1).optional(),
17
+ product_mode: z.literal('none').optional(),
18
+ };
19
+ function buildQuery(input) {
20
+ const params = new URLSearchParams();
21
+ const mode = input.mode ?? 'days';
22
+ params.set('mode', mode);
23
+ if (mode === 'days')
24
+ params.set('days', String(input.days ?? 30));
25
+ if (input.from)
26
+ params.set('from', input.from);
27
+ if (input.to)
28
+ params.set('to', input.to);
29
+ if (input.platform_id)
30
+ params.set('platformId', input.platform_id);
31
+ if (input.funnel)
32
+ params.set('funnel', input.funnel);
33
+ if (input.funnel_mode)
34
+ params.set('funnelMode', input.funnel_mode);
35
+ if (input.segment)
36
+ params.set('segment', input.segment);
37
+ if (input.product)
38
+ params.set('product', input.product);
39
+ if (input.product_mode)
40
+ params.set('productMode', input.product_mode);
41
+ if (input.view)
42
+ params.set('view', input.view);
43
+ const query = params.toString();
44
+ return query ? `?${query}` : '';
45
+ }
46
+ export const broadcastAnalyticsTools = [
47
+ defineTool({
48
+ name: 'besales_broadcast_analytics_get',
49
+ requiredFields: [],
50
+ defaultWorkspaceId: true,
51
+ schema: z
52
+ .object({
53
+ ...analyticsQueryFields,
54
+ view: z.enum(['cohort', 'period']).default('period'),
55
+ })
56
+ .strict(),
57
+ createRequest: (input) => ({
58
+ method: 'GET',
59
+ path: `/workspaces/${input.workspace_id}/broadcast-analytics${buildQuery(input)}`,
60
+ }),
61
+ enhanceResponse: (response) => withInstructions(response, [
62
+ 'Это authoritative агрегат той же страницы /broadcast-analytics. НЕ пересчитывай статистику рассылок через besales_dialogues_query или транскрипты.',
63
+ 'Для «сегодня» используй view=period, mode=range, from=to=нужная дата YYYY-MM-DD; даты группируются по МСК.',
64
+ 'Общий итог бери из totals, а не суммой data по каналам: один получатель мультиканальной волны присутствует в нескольких channel-строках.',
65
+ 'sent — строки получателей волн, не число реплик агента и не обязательно уникальные люди между разными волнами.',
66
+ 'received — доставленные строки получателей с учётом platform delivery-гейта.',
67
+ 'enteredDialog — строки получателей, у которых было хотя бы одно входящее после этой волны и до следующей; это НЕ количество входящих сообщений.',
68
+ 'handedOff — успешные GETCOURSE_CREATE_DEAL / GETCOURSE_SET_MANAGER / GETCOURSE_SET_DEAL_MANAGER / GETCOURSE_SET_PERSONAL_MANAGER.',
69
+ 'funnel здесь — бизнес-воронка волны. Названия CRM pipeline при необходимости читай отдельно через besales_crm_list + besales_crm_pipeline_list.',
70
+ ]),
71
+ }),
72
+ defineTool({
73
+ name: 'besales_broadcast_cohorts_list',
74
+ requiredFields: [],
75
+ defaultWorkspaceId: true,
76
+ schema: z.object(analyticsQueryFields).strict(),
77
+ createRequest: (input) => ({
78
+ method: 'GET',
79
+ path: `/workspaces/${input.workspace_id}/broadcast-analytics/cohorts${buildQuery(input)}`,
80
+ }),
81
+ enhanceResponse: (response) => withInstructions(response, [
82
+ 'Каждый items[] — отдельный запуск рассылки (importJobId/cohortId), а не строка сообщения или диалог.',
83
+ 'label — имя запуска; funnel/segment/product/channels — снимок бизнес-разрезов волны.',
84
+ 'sent/delivered/entered/handedOff считаются по получателям этой волны; entered — ответившие получатели, не число их сообщений.',
85
+ 'Для общей статистики по дням используй besales_broadcast_analytics_get; транскрипты нужны только для качественного разбора конкретных диалогов.',
86
+ ]),
87
+ }),
88
+ ];
89
+ //# sourceMappingURL=broadcast-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-analytics.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-analytics.ts"],"names":[],"mappings":"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"}
@@ -103,6 +103,9 @@ export const dialogueExportTools = [
103
103
  'Для точного аудита новых заявок используй action_type=["GETCOURSE_CREATE_DEAL"], action_success=true и action_execution_mode="production".',
104
104
  'GETCOURSE_SEND_PAYMENT_LINK анализируй отдельно: он может обновлять существующий заказ и сам по себе не доказывает создание новой заявки.',
105
105
  'Тексты переписки здесь НЕ отдаются — по каждому conversationId вызывай besales_dialogue_transcript.',
106
+ 'lastWaveSentAt / firstPaidAt / paidAmount — LIFETIME-маркеры контакта, а НЕ одна цепочка: это ПОСЛЕДНЯЯ волна, ПЕРВАЯ оплата и сумма всех прямых оплат. У контакта с несколькими волнами разность firstPaidAt − lastWaveSentAt может выйти отрицательной — вычитать их нельзя.',
107
+ 'Для атрибуции оплаты к конкретной волне бери когортные цифры из besales_broadcast_analytics_get: там оплаты считаются переходами относительно даты волны.',
108
+ 'firstPaidAt/paidAmount заполняются только для GetCourse и только при наличии scope read:analytics; null означает «неизвестно», а не «не платил». paidAmount — прямые оплаты по реестру, косвенные (подтверждённые оператором) в него не входят.',
106
109
  'MCP файлы не пишет: сохрани результаты локально сам (по файлу на диалог).',
107
110
  ]),
108
111
  }),
@@ -138,7 +141,11 @@ export const dialogueExportTools = [
138
141
  enhanceResponse: (response) => withInstructions(response, [
139
142
  'Транскрипт диалога: { conversationId, channelType, contactName, turns[], triggerExecutions[], transcriptMarkdown, cursor }.',
140
143
  'Сохрани transcriptMarkdown в ОТДЕЛЬНЫЙ файл на диалог, напр. dialogs/<conversationId>.md.',
141
- 'Роли реплик: client (клиент) / agent (isAi=true → AI-агент, false → оператор/историческое).',
144
+ 'Роли реплик: client (клиент) / agent. Автора исходящего бери из turn.authorType: AI_AGENT — ответ модели, AUTOMATION — наша рассылка/follow-up/приветствие, HUMAN_OPERATOR — живой человек.',
145
+ 'НЕ считай исходящее операторским по isAi=false: у автоматики он тоже false. Вывод «продажу дожал человек» делай только по authorType=HUMAN_OPERATOR.',
146
+ 'authorType=null — сообщение клиента ИЛИ строка старше 2026-07-20 без разметки; для таких автора считай неизвестным, а не оператором.',
147
+ 'turn.sentAt у agent — фактическое время отправки ответа. У строк старше 2026-07-20 оно равно времени реплики клиента, поэтому интервал «наш ответ → ответ клиента» на старом периоде не вычисляется (получится ноль).',
148
+ 'turn.delivered=false — реплика записана в историю, но клиенту НЕ отправлена (тихий режим, не влезший ответ). Такие реплики исключай из подсчёта касаний и интервалов: их sentAt — время строки, а не отправки.',
142
149
  'turn.messageId связывает реплику с triggerExecutions.messageId. В actions есть type/success/time и только безопасный resultSummary; сырой result не отдаётся.',
143
150
  'Если cursor не null — у диалога есть ещё сообщения: повтори с этим cursor. Первая страница содержит заголовок; последующие — только реплики: дописывай их в тот же файл.',
144
151
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { z } from 'zod';
2
+ export declare const reactivationConfigSchema: z.ZodObject<{
3
+ enabled: z.ZodOptional<z.ZodBoolean>;
4
+ filterMode: z.ZodOptional<z.ZodEnum<{
5
+ status: "status";
6
+ variable: "variable";
7
+ eventType: "eventType";
8
+ }>>;
9
+ sequenceConditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
10
+ variable: z.ZodString;
11
+ op: z.ZodEnum<{
12
+ in: "in";
13
+ eq: "eq";
14
+ neq: "neq";
15
+ }>;
16
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
17
+ }, z.core.$loose>>>;
18
+ steps: z.ZodArray<z.ZodObject<{
19
+ stepType: z.ZodOptional<z.ZodEnum<{
20
+ message: "message";
21
+ webhook: "webhook";
22
+ }>>;
23
+ scheduleMode: z.ZodOptional<z.ZodEnum<{
24
+ offset: "offset";
25
+ clock: "clock";
26
+ }>>;
27
+ anchorMode: z.ZodOptional<z.ZodEnum<{
28
+ variable: "variable";
29
+ last_inbound: "last_inbound";
30
+ }>>;
31
+ anchorVariable: z.ZodOptional<z.ZodString>;
32
+ atTime: z.ZodOptional<z.ZodString>;
33
+ dayOffset: z.ZodOptional<z.ZodNumber>;
34
+ validityMinutes: z.ZodOptional<z.ZodNumber>;
35
+ slotGroup: z.ZodOptional<z.ZodString>;
36
+ conditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
37
+ variable: z.ZodString;
38
+ op: z.ZodEnum<{
39
+ in: "in";
40
+ eq: "eq";
41
+ neq: "neq";
42
+ }>;
43
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
44
+ }, z.core.$loose>>>;
45
+ delayHours: z.ZodOptional<z.ZodNumber>;
46
+ delayMinutes: z.ZodOptional<z.ZodNumber>;
47
+ messageConfig: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
48
+ }, z.core.$loose>>;
49
+ }, z.core.$loose>;
50
+ /**
51
+ * Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
52
+ *
53
+ * Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
54
+ * принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
55
+ * `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
56
+ *
57
+ * @param input - Разобранный ввод тула
58
+ * @param ctx - Контекст zod для добавления ошибок
59
+ */
60
+ export declare const refineFollowUpConfig: (input: {
61
+ type?: unknown;
62
+ config?: unknown;
63
+ }, ctx: z.RefinementCtx) => void;
64
+ export declare const followUpSequenceListSchema: z.ZodObject<{
65
+ platform_id: z.ZodString;
66
+ sequence_id: z.ZodOptional<z.ZodString>;
67
+ include_config: z.ZodOptional<z.ZodBoolean>;
68
+ }, z.core.$strip>;
69
+ export declare const followUpStepStatsSchema: z.ZodObject<{
70
+ platform_id: z.ZodString;
71
+ sequence_id: z.ZodString;
72
+ from: z.ZodOptional<z.ZodString>;
73
+ to: z.ZodOptional<z.ZodString>;
74
+ }, z.core.$strip>;
75
+ export declare const followUpTools: (import("./shared.js").ToolDefinition<{
76
+ platform_id: string;
77
+ sequence_id?: string | undefined;
78
+ include_config?: boolean | undefined;
79
+ }> | import("./shared.js").ToolDefinition<{
80
+ platform_id: string;
81
+ sequence_id: string;
82
+ from?: string | undefined;
83
+ to?: string | undefined;
84
+ }>)[];
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ import { anyObjectSchema, buildListQuery, defineTool, uuidSchema, withInstructions, } from './shared.js';
3
+ /**
4
+ * Схема конфига реактивационной цепочки.
5
+ *
6
+ * ⚠️ Ключи ВНУТРИ `config` — camelCase, в отличие от snake_case параметров тулов: `config`
7
+ * уходит в тело запроса БЕЗ преобразования, а рантайм читает `anchorMode`/`anchorVariable`/
8
+ * `slotGroup`. Назвать их в snake_case значило бы сохранить конфиг, который рантайм не
9
+ * прочитает: календарный шаг молча стал бы обычным offset-шагом.
10
+ *
11
+ * ⚠️ `.passthrough()` на каждом уровне обязателен по двум причинам: legacy-конфиги несут поля
12
+ * вне этой схемы (`finalAction`, `maxCycleCount`, `webhookConfig`, …), и сама схема исполняется
13
+ * на машине оператора — она обновляется независимо от бэкенда и не должна отвергать конфиг,
14
+ * который бэкенд принял бы.
15
+ */
16
+ const variableConditionSchema = z
17
+ .object({
18
+ variable: z.string().describe('Имя per-contact переменной'),
19
+ op: z.enum(['eq', 'neq', 'in']),
20
+ value: z
21
+ .union([z.string(), z.array(z.string())])
22
+ .describe("Строка для eq/neq, непустой массив непустых строк для 'in'"),
23
+ })
24
+ .passthrough();
25
+ const reactivationStepSchema = z
26
+ .object({
27
+ stepType: z.enum(['message', 'webhook']).optional(),
28
+ scheduleMode: z
29
+ .enum(['offset', 'clock'])
30
+ .optional()
31
+ .describe("'clock' — время суток + сдвиг дней вместо задержки от последней активности"),
32
+ anchorMode: z
33
+ .enum(['last_inbound', 'variable'])
34
+ .optional()
35
+ .describe("'variable' — расписание считается от даты из переменной контакта (календарная цепочка)"),
36
+ anchorVariable: z
37
+ .string()
38
+ .optional()
39
+ .describe('Имя переменной с якорной датой. Обязательно при anchorMode=variable; переменная должна ' +
40
+ 'существовать у платформы и НЕ быть константой'),
41
+ atTime: z.string().optional().describe('Время суток "HH:MM" для scheduleMode=clock'),
42
+ dayOffset: z
43
+ .number()
44
+ .int()
45
+ .min(0)
46
+ .max(30)
47
+ .optional()
48
+ .describe('Сдвиг в днях от якоря для scheduleMode=clock'),
49
+ validityMinutes: z
50
+ .number()
51
+ .optional()
52
+ .describe('Окно валидности слота. Меньше 10 минут крон почти всегда промахнётся'),
53
+ slotGroup: z
54
+ .string()
55
+ .optional()
56
+ .describe('Метка взаимоисключающих вариантов одного момента (first-match-wins). Варианты ОБЯЗАНЫ ' +
57
+ 'идти в steps подряд: разнесённые по цепочке перестают быть взаимоисключающими'),
58
+ conditions: z
59
+ .array(variableConditionSchema)
60
+ .max(3)
61
+ .optional()
62
+ .describe('Условия на переменные контакта; не прошли — шаг пропускается'),
63
+ delayHours: z.number().optional(),
64
+ delayMinutes: z.number().optional(),
65
+ messageConfig: anyObjectSchema.optional(),
66
+ })
67
+ .passthrough();
68
+ export const reactivationConfigSchema = z
69
+ .object({
70
+ enabled: z.boolean().optional(),
71
+ filterMode: z
72
+ .enum(['status', 'eventType', 'variable'])
73
+ .optional()
74
+ .describe('Режим отбора контактов. Неизвестное значение НЕ включает ни один фильтр — цепочка уйдёт ' +
75
+ 'всем контактам канала, поэтому бэкенд отвергает такой конфиг'),
76
+ sequenceConditions: z
77
+ .array(variableConditionSchema)
78
+ .optional()
79
+ .describe("Обязателен и непуст при filterMode='variable'"),
80
+ steps: z.array(reactivationStepSchema).min(1),
81
+ })
82
+ .passthrough();
83
+ /**
84
+ * Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
85
+ *
86
+ * Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
87
+ * принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
88
+ * `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
89
+ *
90
+ * @param input - Разобранный ввод тула
91
+ * @param ctx - Контекст zod для добавления ошибок
92
+ */
93
+ export const refineFollowUpConfig = (input, ctx) => {
94
+ if (input.type !== 'INACTIVE_USER_REACTIVATION') {
95
+ return;
96
+ }
97
+ const parsed = reactivationConfigSchema.safeParse(input.config);
98
+ if (parsed.success) {
99
+ return;
100
+ }
101
+ for (const issue of parsed.error.issues) {
102
+ ctx.addIssue({
103
+ code: z.ZodIssueCode.custom,
104
+ path: ['config', ...issue.path],
105
+ message: issue.message,
106
+ });
107
+ }
108
+ };
109
+ export const followUpSequenceListSchema = z.object({
110
+ platform_id: uuidSchema,
111
+ sequence_id: uuidSchema
112
+ .optional()
113
+ .describe('Вернуть одну цепочку вместе с полным конфигом'),
114
+ include_config: z
115
+ .boolean()
116
+ .optional()
117
+ .describe('Отдать конфиги всех цепочек. По умолчанию не отдаются — они объёмные'),
118
+ });
119
+ export const followUpStepStatsSchema = z.object({
120
+ platform_id: uuidSchema,
121
+ sequence_id: uuidSchema,
122
+ from: z.string().optional().describe('Начало окна, ISO-дата. По умолчанию 30 дней назад'),
123
+ to: z.string().optional().describe('Конец окна, ISO-дата. По умолчанию сейчас'),
124
+ });
125
+ export const followUpTools = [
126
+ defineTool({
127
+ name: 'besales_followup_sequence_list',
128
+ requiredFields: ['platform_id'],
129
+ schema: followUpSequenceListSchema,
130
+ // Параметры клеим в путь: транспорт (`ApiToolRequest`) знает только method/path/body, и
131
+ // отдельное поле `query` было бы молча выброшено — тул вернул бы 200 без учёта фильтров.
132
+ createRequest: (input) => ({
133
+ method: 'GET',
134
+ path: `/platforms/${input.platform_id}/follow-up/sequences${buildListQuery({
135
+ sequence_id: input.sequence_id,
136
+ include_config: input.include_config,
137
+ })}`,
138
+ }),
139
+ enhanceResponse: (response) => withInstructions(response, [
140
+ 'besales_followup_sequence_upsert заменяет config ЦЕЛИКОМ: прочитай конфиг здесь (sequence_id) и пришли ПОЛНЫЙ желаемый набор шагов, а не дельту.',
141
+ 'Без sequence_id и include_config конфиги не отдаются — так список остаётся дешёвым по контексту.',
142
+ ]),
143
+ }),
144
+ defineTool({
145
+ name: 'besales_followup_step_stats',
146
+ requiredFields: ['platform_id', 'sequence_id'],
147
+ schema: followUpStepStatsSchema,
148
+ createRequest: (input) => ({
149
+ method: 'GET',
150
+ path: `/platforms/${input.platform_id}/follow-up/sequences/${input.sequence_id}/step-stats${buildListQuery({ from: input.from, to: input.to })}`,
151
+ }),
152
+ enhanceResponse: (response) => withInstructions(response, [
153
+ 'wasSent=false НЕ означает «отправка не удалась»: SEND_FAILED пишется только если до fence не дошло (мьют, стадия CRM, тихий канал).',
154
+ 'SHADOWED — вариант слота, который не оценивался, потому что слот уже закрыт отправкой другого варианта. Это не ошибка.',
155
+ 'SENT_UNVERIFIED — отправка зависла после fence: исходом владеет recovery, повтор запрещён.',
156
+ 'waitingUpperBound — ВЕРХНЯЯ оценка ожидающих: прогресс создаётся всем включённым цепочкам платформы без проверки sequenceConditions.',
157
+ 'Окно по умолчанию — 30 дней; для более раннего периода передай from/to.',
158
+ ]),
159
+ }),
160
+ ];
161
+ //# sourceMappingURL=follow-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-up.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ export declare const knowledgeTools: (import("./shared.js").ToolDefinition<{
65
65
  }> | import("./shared.js").ToolDefinition<{
66
66
  knowledge_space_id: string;
67
67
  workspace_id?: string | undefined;
68
- status?: "LOADED" | "SPLIT" | "EMBEDDINGS_GENERATED" | "VECTOR_DB_UPLOADED" | "COMPLETED" | "FAILED" | "TEXT_EXTRACTED" | "CHUNKS_SAVED" | undefined;
68
+ status?: "FAILED" | "LOADED" | "SPLIT" | "EMBEDDINGS_GENERATED" | "VECTOR_DB_UPLOADED" | "COMPLETED" | "TEXT_EXTRACTED" | "CHUNKS_SAVED" | undefined;
69
69
  page?: number | undefined;
70
70
  limit?: number | undefined;
71
71
  }> | import("./shared.js").ToolDefinition<{
@@ -149,7 +149,7 @@ export declare const knowledgeTools: (import("./shared.js").ToolDefinition<{
149
149
  }> | import("./shared.js").ToolDefinition<{
150
150
  knowledge_space_id: string;
151
151
  workspace_id?: string | undefined;
152
- status?: "COMPLETED" | "FAILED" | "PENDING" | "CRAWLING" | "PROCESSING" | undefined;
152
+ status?: "PENDING" | "FAILED" | "COMPLETED" | "CRAWLING" | "PROCESSING" | undefined;
153
153
  page?: number | undefined;
154
154
  limit?: number | undefined;
155
155
  }> | import("./shared.js").ToolDefinition<{
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
3
3
  // Зеркало MAX_MODELS в prompt-services model-comparison.constants.ts (размер каталога)
4
- const MODEL_COMPARISON_MAX_MODELS = 18;
4
+ const MODEL_COMPARISON_MAX_MODELS = 21;
5
5
  // Оценка ИИ по одной модели (eval-submit). Маппится snake→camel в createRequest.
6
6
  const modelEvalPerModelSchema = z.object({
7
7
  model: z.string(),
@@ -44,6 +44,71 @@ export declare const platformSetupTools: (import("./shared.js").ToolDefinition<{
44
44
  }> | import("./shared.js").ToolDefinition<{
45
45
  job_id: string;
46
46
  workspace_id?: string | undefined;
47
+ }> | import("./shared.js").ToolDefinition<{
48
+ platform_id: string;
49
+ crm_id: string;
50
+ channels: string[];
51
+ contacts: {
52
+ contact_id: string;
53
+ deal_id?: string | undefined;
54
+ transport?: string | undefined;
55
+ dialog_id?: string | undefined;
56
+ lead_last_active_at?: string | undefined;
57
+ segment_entered_at?: string | undefined;
58
+ }[];
59
+ workspace_id?: string | undefined;
60
+ launch_type?: "status" | undefined;
61
+ funnel?: string | undefined;
62
+ segment?: string | undefined;
63
+ cohort_label?: string | undefined;
64
+ message_variant?: string | undefined;
65
+ found_count?: number | undefined;
66
+ product_code?: string | undefined;
67
+ product_name?: string | undefined;
68
+ deal_fields?: Record<string, string | number | boolean | null> | undefined;
69
+ confirm?: boolean | undefined;
70
+ check_messenger_presence?: boolean | undefined;
71
+ dedup_window_days?: number | undefined;
72
+ dedup_scope?: "any" | "same_funnel" | undefined;
73
+ preflight?: {
74
+ enabled?: boolean | undefined;
75
+ product_title?: string | undefined;
76
+ product_match_key?: string | undefined;
77
+ offer_id?: number | undefined;
78
+ other_product_active_deal_mode?: "warn" | "block" | "ignore" | undefined;
79
+ } | undefined;
80
+ chunk_size?: number | undefined;
81
+ explicit_confirmation?: true | undefined;
82
+ confirmation_reason?: string | undefined;
83
+ }> | import("./shared.js").ToolDefinition<{
84
+ run_id: string;
85
+ workspace_id?: string | undefined;
86
+ }> | import("./shared.js").ToolDefinition<{
87
+ run_id: string;
88
+ workspace_id?: string | undefined;
89
+ status?: "PENDING" | "CLAIMED" | "SENT" | "SKIPPED" | "FAILED" | "UNKNOWN" | undefined;
90
+ cursor?: string | undefined;
91
+ limit?: number | undefined;
92
+ }> | import("./shared.js").ToolDefinition<{
93
+ platform_id: string;
94
+ workspace_id?: string | undefined;
95
+ }> | import("./shared.js").ToolDefinition<{
96
+ platform_id: string;
97
+ template_guid: string;
98
+ contacts: {
99
+ phone: string;
100
+ name?: string | undefined;
101
+ }[];
102
+ workspace_id?: string | undefined;
103
+ template_values?: string[] | undefined;
104
+ funnel?: string | undefined;
105
+ segment?: string | undefined;
106
+ product_code?: string | undefined;
107
+ product_name?: string | undefined;
108
+ cohort_label?: string | undefined;
109
+ confirm?: boolean | undefined;
110
+ explicit_confirmation?: true | undefined;
111
+ confirmation_reason?: string | undefined;
47
112
  }> | import("./shared.js").ToolDefinition<{
48
113
  platform_id: string;
49
114
  name: string;
@@ -428,6 +493,7 @@ export declare const platformSetupTools: (import("./shared.js").ToolDefinition<{
428
493
  bot_code?: string | null | undefined;
429
494
  bot_name?: string | undefined;
430
495
  open_line_id?: string | null | undefined;
496
+ ignore_crm_stage_gate?: boolean | undefined;
431
497
  } | undefined;
432
498
  getcourse_settings?: {
433
499
  account_domain?: string | null | undefined;
@@ -447,6 +513,14 @@ export declare const platformSetupTools: (import("./shared.js").ToolDefinition<{
447
513
  target_department_id?: number | null | undefined;
448
514
  delivery_check_enabled?: boolean | undefined;
449
515
  delivery_field_map?: Record<"Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX", string> | undefined;
516
+ manual_mute_enabled?: boolean | undefined;
517
+ manual_mute_field_id?: string | null | undefined;
518
+ manual_mute_value?: string | null | undefined;
519
+ manual_mute_active_value?: string | null | undefined;
520
+ create_missing_deal_enabled?: boolean | undefined;
521
+ create_missing_deal_offer_id?: number | null | undefined;
522
+ create_missing_deal_funnel_id?: number | null | undefined;
523
+ create_missing_deal_stage_id?: number | null | undefined;
450
524
  } | undefined;
451
525
  }> | import("./shared.js").ToolDefinition<{
452
526
  audit_log_id: string;