@besales/mcp 0.31.0 → 0.33.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.
@@ -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<{
@@ -44,6 +44,93 @@ 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
+ batch_key: string;
94
+ platform_id: string;
95
+ crm_id: string;
96
+ segments: {
97
+ mode: "status";
98
+ contacts: {
99
+ contact_id: string;
100
+ deal_id?: string | undefined;
101
+ transport?: string | undefined;
102
+ dialog_id?: string | undefined;
103
+ lead_last_active_at?: string | undefined;
104
+ segment_entered_at?: string | undefined;
105
+ }[];
106
+ channels: string[];
107
+ deal_fields: Record<string, string | number | boolean | null>;
108
+ funnel?: string | undefined;
109
+ segment?: string | undefined;
110
+ cohort_label?: string | undefined;
111
+ message_variant?: string | undefined;
112
+ found_count?: number | undefined;
113
+ product_code?: string | undefined;
114
+ product_name?: string | undefined;
115
+ preflight?: {
116
+ enabled?: boolean | undefined;
117
+ product_title?: string | undefined;
118
+ product_match_key?: string | undefined;
119
+ offer_id?: number | undefined;
120
+ other_product_active_deal_mode?: "warn" | "block" | "ignore" | undefined;
121
+ } | undefined;
122
+ check_messenger_presence?: boolean | undefined;
123
+ dedup_window_days?: number | undefined;
124
+ dedup_scope?: "any" | "same_funnel" | undefined;
125
+ chunk_size?: number | undefined;
126
+ }[];
127
+ workspace_id?: string | undefined;
128
+ confirm?: boolean | undefined;
129
+ explicit_confirmation?: true | undefined;
130
+ confirmation_reason?: string | undefined;
131
+ }> | import("./shared.js").ToolDefinition<{
132
+ batch_id: string;
133
+ workspace_id?: string | undefined;
47
134
  }> | import("./shared.js").ToolDefinition<{
48
135
  platform_id: string;
49
136
  workspace_id?: string | undefined;
@@ -472,6 +559,10 @@ export declare const platformSetupTools: (import("./shared.js").ToolDefinition<{
472
559
  manual_mute_field_id?: string | null | undefined;
473
560
  manual_mute_value?: string | null | undefined;
474
561
  manual_mute_active_value?: string | null | undefined;
562
+ create_missing_deal_enabled?: boolean | undefined;
563
+ create_missing_deal_offer_id?: number | null | undefined;
564
+ create_missing_deal_funnel_id?: number | null | undefined;
565
+ create_missing_deal_stage_id?: number | null | undefined;
475
566
  } | undefined;
476
567
  }> | import("./shared.js").ToolDefinition<{
477
568
  audit_log_id: string;