@besales/mcp 0.45.0 → 0.47.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 (189) hide show
  1. package/README.md +96 -55
  2. package/dist/auth/connection-store.d.ts +21 -1
  3. package/dist/auth/connection-store.js +46 -2
  4. package/dist/auth/connection-store.js.map +1 -1
  5. package/dist/auth/oauth-client.d.ts +5 -1
  6. package/dist/auth/oauth-client.js +22 -12
  7. package/dist/auth/oauth-client.js.map +1 -1
  8. package/dist/cli.js +14 -5
  9. package/dist/cli.js.map +1 -1
  10. package/dist/http/api-client.d.ts +16 -1
  11. package/dist/http/api-client.js +50 -2
  12. package/dist/http/api-client.js.map +1 -1
  13. package/dist/instructions/server-instructions.d.ts +4 -13
  14. package/dist/instructions/server-instructions.js +68 -274
  15. package/dist/instructions/server-instructions.js.map +1 -1
  16. package/dist/prompts/registry.d.ts +15 -0
  17. package/dist/prompts/registry.js +83 -0
  18. package/dist/prompts/registry.js.map +1 -0
  19. package/dist/resources/concepts/feedback-sheets.md +7 -4
  20. package/dist/resources/concepts/handoff.md +4 -1
  21. package/dist/resources/concepts/sandbox.md +14 -5
  22. package/dist/resources/concepts/triggers.md +6 -2
  23. package/dist/resources/concepts/workbook-classification.md +26 -21
  24. package/dist/resources/docs/campaigns.md +20 -0
  25. package/dist/resources/docs/crm-integration.md +3 -1
  26. package/dist/resources/docs/follow-up.md +19 -0
  27. package/dist/resources/docs/platforms.md +2 -2
  28. package/dist/resources/docs/routing.md +18 -0
  29. package/dist/resources/docs/task-state.md +30 -0
  30. package/dist/resources/docs/trigger-actions.md +28 -0
  31. package/dist/resources/docs/variables.md +18 -0
  32. package/dist/resources/registry.js +51 -2
  33. package/dist/resources/registry.js.map +1 -1
  34. package/dist/resources/workflows/compare-models.md +4 -3
  35. package/dist/resources/workflows/connect-crm-from-scratch.md +8 -0
  36. package/dist/resources/workflows/extract-from-document.md +8 -1
  37. package/dist/resources/workflows/iterate-with-sandbox.md +5 -2
  38. package/dist/resources/workflows/platform-setup-from-scratch.md +90 -2
  39. package/dist/resources/workflows/production-readiness-check.md +22 -18
  40. package/dist/schemas/mcp-tools.json +1537 -177
  41. package/dist/server.d.ts +2 -0
  42. package/dist/server.js +8 -2
  43. package/dist/server.js.map +1 -1
  44. package/dist/tasks/task-state-store.d.ts +68 -0
  45. package/dist/tasks/task-state-store.js +278 -0
  46. package/dist/tasks/task-state-store.js.map +1 -0
  47. package/dist/tools/annotations.d.ts +7 -0
  48. package/dist/tools/annotations.js +16 -0
  49. package/dist/tools/annotations.js.map +1 -0
  50. package/dist/tools/contracts.js +7 -1
  51. package/dist/tools/contracts.js.map +1 -1
  52. package/dist/tools/definitions/agent-design.d.ts +49 -20
  53. package/dist/tools/definitions/agent-design.js +192 -19
  54. package/dist/tools/definitions/agent-design.js.map +1 -1
  55. package/dist/tools/definitions/analytics.d.ts +40 -0
  56. package/dist/tools/definitions/analytics.js +233 -0
  57. package/dist/tools/definitions/analytics.js.map +1 -0
  58. package/dist/tools/definitions/broadcast-analytics.d.ts +5 -4
  59. package/dist/tools/definitions/broadcast-analytics.js +26 -4
  60. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  61. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +2 -0
  62. package/dist/tools/definitions/broadcast-mailing-variants.js +10 -0
  63. package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
  64. package/dist/tools/definitions/broadcast-scheduler.d.ts +20 -1
  65. package/dist/tools/definitions/broadcast-scheduler.js +134 -8
  66. package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
  67. package/dist/tools/definitions/contacts.d.ts +15 -0
  68. package/dist/tools/definitions/contacts.js +84 -0
  69. package/dist/tools/definitions/contacts.js.map +1 -0
  70. package/dist/tools/definitions/crm-platform.d.ts +2 -0
  71. package/dist/tools/definitions/crm-platform.js +95 -5
  72. package/dist/tools/definitions/crm-platform.js.map +1 -1
  73. package/dist/tools/definitions/datasource.d.ts +1 -0
  74. package/dist/tools/definitions/datasource.js +16 -1
  75. package/dist/tools/definitions/datasource.js.map +1 -1
  76. package/dist/tools/definitions/dialogue-audit.d.ts +2 -2
  77. package/dist/tools/definitions/dialogue-audit.js +54 -16
  78. package/dist/tools/definitions/dialogue-audit.js.map +1 -1
  79. package/dist/tools/definitions/dialogue-export.d.ts +1 -1
  80. package/dist/tools/definitions/dialogue-export.js +12 -0
  81. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  82. package/dist/tools/definitions/external-api-channels.js +39 -12
  83. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  84. package/dist/tools/definitions/follow-up-funnel-test.js +4 -0
  85. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  86. package/dist/tools/definitions/follow-up-setup.js +3 -0
  87. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  88. package/dist/tools/definitions/follow-up.d.ts +1 -1
  89. package/dist/tools/definitions/follow-up.js +6 -0
  90. package/dist/tools/definitions/follow-up.js.map +1 -1
  91. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +3 -0
  92. package/dist/tools/definitions/getcourse-anchor-refresh.js +29 -2
  93. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  94. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +20 -2
  95. package/dist/tools/definitions/getcourse-cold-welcome.js +128 -7
  96. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  97. package/dist/tools/definitions/getcourse-wave.js +14 -0
  98. package/dist/tools/definitions/getcourse-wave.js.map +1 -1
  99. package/dist/tools/definitions/help.d.ts +8 -0
  100. package/dist/tools/definitions/help.js +219 -0
  101. package/dist/tools/definitions/help.js.map +1 -0
  102. package/dist/tools/definitions/knowledge.d.ts +27 -5
  103. package/dist/tools/definitions/knowledge.js +200 -33
  104. package/dist/tools/definitions/knowledge.js.map +1 -1
  105. package/dist/tools/definitions/link-tracking.js +31 -0
  106. package/dist/tools/definitions/link-tracking.js.map +1 -1
  107. package/dist/tools/definitions/model-comparison.js +12 -3
  108. package/dist/tools/definitions/model-comparison.js.map +1 -1
  109. package/dist/tools/definitions/operational-overview.d.ts +3 -0
  110. package/dist/tools/definitions/operational-overview.js +23 -0
  111. package/dist/tools/definitions/operational-overview.js.map +1 -0
  112. package/dist/tools/definitions/operator-workflow.d.ts +20 -0
  113. package/dist/tools/definitions/operator-workflow.js +114 -0
  114. package/dist/tools/definitions/operator-workflow.js.map +1 -0
  115. package/dist/tools/definitions/platform-setup.d.ts +54 -3
  116. package/dist/tools/definitions/platform-setup.js +211 -5
  117. package/dist/tools/definitions/platform-setup.js.map +1 -1
  118. package/dist/tools/definitions/scheduled-tasks.js +2 -0
  119. package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
  120. package/dist/tools/definitions/session.js +103 -5
  121. package/dist/tools/definitions/session.js.map +1 -1
  122. package/dist/tools/definitions/shared.d.ts +272 -10
  123. package/dist/tools/definitions/shared.js +154 -8
  124. package/dist/tools/definitions/shared.js.map +1 -1
  125. package/dist/tools/definitions/task-state.d.ts +76 -0
  126. package/dist/tools/definitions/task-state.js +301 -0
  127. package/dist/tools/definitions/task-state.js.map +1 -0
  128. package/dist/tools/definitions/trigger-contact-claims.d.ts +7 -0
  129. package/dist/tools/definitions/trigger-contact-claims.js +60 -0
  130. package/dist/tools/definitions/trigger-contact-claims.js.map +1 -0
  131. package/dist/tools/definitions.d.ts +334 -35
  132. package/dist/tools/definitions.js +14 -0
  133. package/dist/tools/definitions.js.map +1 -1
  134. package/dist/tools/description-localization.d.ts +2 -0
  135. package/dist/tools/description-localization.js +46 -0
  136. package/dist/tools/description-localization.js.map +1 -0
  137. package/dist/tools/incomplete-list.d.ts +23 -0
  138. package/dist/tools/incomplete-list.js +39 -0
  139. package/dist/tools/incomplete-list.js.map +1 -0
  140. package/dist/tools/inventory.d.ts +10 -0
  141. package/dist/tools/inventory.js +49 -0
  142. package/dist/tools/inventory.js.map +1 -0
  143. package/dist/tools/registry-mapping-cases-core.js +122 -4
  144. package/dist/tools/registry-mapping-cases-core.js.map +1 -1
  145. package/dist/tools/registry-mapping-cases-platform.js +69 -0
  146. package/dist/tools/registry-mapping-cases-platform.js.map +1 -1
  147. package/dist/tools/registry.d.ts +2 -0
  148. package/dist/tools/registry.js +60 -8
  149. package/dist/tools/registry.js.map +1 -1
  150. package/dist/tools/result-envelope.d.ts +46 -0
  151. package/dist/tools/result-envelope.js +184 -0
  152. package/dist/tools/result-envelope.js.map +1 -0
  153. package/dist/tools/result.d.ts +41 -3
  154. package/dist/tools/result.js +229 -27
  155. package/dist/tools/result.js.map +1 -1
  156. package/dist/tools/tool-title.d.ts +2 -0
  157. package/dist/tools/tool-title.js +12 -0
  158. package/dist/tools/tool-title.js.map +1 -0
  159. package/dist/tools/toolsets.d.ts +37 -0
  160. package/dist/tools/toolsets.js +64 -0
  161. package/dist/tools/toolsets.js.map +1 -0
  162. package/dist/tools/trigger-action-config.js +4 -0
  163. package/dist/tools/trigger-action-config.js.map +1 -1
  164. package/dist/tools/verify-with.d.ts +5 -0
  165. package/dist/tools/verify-with.js +36 -0
  166. package/dist/tools/verify-with.js.map +1 -0
  167. package/dist/types/api-contract.gen.d.ts +2612 -332
  168. package/dist/utils/logger.d.ts +11 -0
  169. package/dist/utils/logger.js +64 -8
  170. package/dist/utils/logger.js.map +1 -1
  171. package/docs/agent-usage-guide.full.ru.md +21 -15
  172. package/docs/agent-usage-guide.ru.md +24 -16
  173. package/docs/async-operation-lifecycle.md +46 -0
  174. package/docs/connect.ru.md +120 -0
  175. package/docs/evals/model-behavior-scorecard.md +80 -0
  176. package/docs/failure-semantics.md +56 -0
  177. package/docs/help-navigation.md +48 -0
  178. package/docs/host-compatibility-matrix.md +153 -0
  179. package/docs/host-setup.md +22 -6
  180. package/docs/operation-coverage.md +114 -0
  181. package/docs/pii-policy.md +46 -0
  182. package/docs/response-size-budget.md +150 -0
  183. package/docs/task-state.md +58 -0
  184. package/docs/tool-effects.md +46 -0
  185. package/docs/tool-surface.md +91 -0
  186. package/package.json +6 -2
  187. package/scripts/model-eval-server.js +213 -0
  188. package/scripts/probe-mcp-protocol.js +134 -0
  189. package/scripts/run-model-eval.js +447 -0
@@ -10,11 +10,79 @@ export interface ApiToolRequest {
10
10
  export interface LocalToolContext {
11
11
  readonly store: ConnectionStore;
12
12
  readonly env: NodeJS.ProcessEnv;
13
+ readonly apiClient: ToolApiClient;
14
+ /** Имена, доступные этой MCP-сессии после применения tool profile. */
15
+ readonly availableToolNames?: ReadonlySet<string>;
13
16
  }
17
+ /**
18
+ * Как обходиться с ответом инструмента, если он не влезает в потолок. Общего алгоритма нет:
19
+ * что здесь можно потерять, знает только сам инструмент. Числа и классы — `docs/response-size-budget.md`.
20
+ */
21
+ export interface ToolResultPolicy {
22
+ /**
23
+ * Ответ обрезать нельзя ни при каких условиях — при превышении уходит отказ, а не данные.
24
+ * Два случая: (1) ответ является снимком для замещающей записи («прочитай всё → пришли всё
25
+ * обратно»), и усечённый снимок молча удалит непрочитанное; (2) у инструмента уже работает
26
+ * постраничная выдача, и конверт подменил бы исправный механизм тихой потерей.
27
+ */
28
+ readonly neverTruncate?: boolean;
29
+ /**
30
+ * Пути, которые разрешено выбросить при превышении, в порядке готовности расстаться.
31
+ * Путь `agents[].baseSystemPrompt` снимает поле у каждого элемента массива. Объявляется
32
+ * только для того, что читается ОТДЕЛЬНЫМ инструментом, — иначе это потеря, а не сжатие.
33
+ * `requiredPaths` намеренно отсутствует: выбрасывается ровно перечисленное, всё прочее
34
+ * неприкосновенно по построению, и второй список был бы носителем без читателя.
35
+ */
36
+ readonly droppablePaths?: readonly string[];
37
+ /** Потолок именно этого инструмента; без него берётся общий по классу. */
38
+ readonly maxResultBytes?: number;
39
+ /**
40
+ * Чем сузить запрос — уходит в текст отказа и в маркер. Ставится ТОЛЬКО когда у инструмента
41
+ * действительно есть параметры сужения: общая подсказка там, где сузить нечем, — ложь.
42
+ */
43
+ readonly narrowingHint?: string;
44
+ }
45
+ /**
46
+ * Что инструмент делает с состоянием. Проставляется РУКАМИ у каждого определения, потому что
47
+ * ни имя, ни HTTP-метод этого не выводят — и врут в обе стороны:
48
+ * семь `*_get_instructions` — POST, создающий долговечную запись операции (подстрока `_get`
49
+ * увела бы их в «только чтение»); список операторов CRM и проверка живости источника — GET,
50
+ * которые пишут; расхождение промптов, линт и поиск по вопросам-ответам — POST, которые читают.
51
+ *
52
+ * `spend` — тратит деньги или квоту на стороне сервера (обращение к модели, векторизация,
53
+ * отправка людям). Отдельно от `write`, потому что цена ошибки другая: повторный вызов
54
+ * не «перезапишет то же самое», а заплатит второй раз.
55
+ */
56
+ export type ToolSideEffect = 'none' | 'write' | 'spend';
14
57
  export interface ToolDefinition<Input> {
15
58
  readonly name: string;
59
+ readonly sideEffect: ToolSideEffect;
60
+ /**
61
+ * Операция доказуемо обратима — снимает пометку «разрушительная». По спецификации MCP у
62
+ * не-читающего инструмента она подразумевается ИСТИННОЙ, поэтому опасна не пропущенная
63
+ * пометка, а ошибочно снятая: она сделала бы удаление безопасным в глазах хоста,
64
+ * одобряющего вызовы автоматически.
65
+ */
66
+ readonly reversible?: boolean;
67
+ /**
68
+ * Повтор с теми же аргументами даёт тот же результат БЕЗУСЛОВНО. Правило «все `*_upsert`
69
+ * идемпотентны» неверно: без идентификатора они уходят в создание, и автоповтор заводит
70
+ * вторую сущность.
71
+ */
72
+ readonly idempotent?: boolean;
73
+ /** Инструмент заведомо не выходит за пределы Besales. Умолчание — обратное, как худшее. */
74
+ readonly closedWorld?: boolean;
75
+ /**
76
+ * Чем свериться, если исход остался НЕИЗВЕСТЕН: связь оборвалась или сервер ответил отказом
77
+ * уже после того, как запрос до него дошёл. Отсутствие локального подтверждения не
78
+ * доказывает, что операция не состоялась, поэтому вызывающему называют инструмент проверки,
79
+ * а не советуют повтор. Заполняется у неидемпотентных операций, у которых такой инструмент
80
+ * есть; без него текст просто не называет конкретное имя.
81
+ */
82
+ readonly verifyWithToolName?: string;
16
83
  readonly requiredFields: readonly string[];
17
84
  readonly schema: ZodType<Input>;
85
+ readonly resultPolicy?: ToolResultPolicy;
18
86
  readonly defaultWorkspaceId?: boolean;
19
87
  /** API-проксирующие тулы. Взаимоисключающе с `localHandler`. */
20
88
  readonly createRequest?: (input: Input) => ApiToolRequest;
@@ -50,6 +118,13 @@ export declare const modelLaneSchema: z.ZodEnum<{
50
118
  export declare const MAX_FILE_UPLOAD_BYTES: number;
51
119
  /** Верхняя граница `max_lines` в `besales_prompt_diff` — должна совпадать с DTO бэкенда. */
52
120
  export declare const PROMPT_DIFF_MAX_LINES_LIMIT = 1000;
121
+ /**
122
+ * Верхняя граница страницы перечня переменных — совпадает с `VARIABLES_LIST_MAX_LIMIT` бэкенда.
123
+ * Больший `limit` сервер отвергнет валидацией, поэтому граница объявлена и здесь.
124
+ */
125
+ export declare const VARIABLES_MAX_PAGE_SIZE = 200;
126
+ /** Максимальный размер явно запрошенной страницы списка агентов платформы. */
127
+ export declare const PLATFORM_AGENTS_MAX_PAGE_SIZE = 200;
53
128
  /** Потолок агентов в одном пакетном прогоне — должен совпадать с `PROMPT_BATCH_MAX_AGENTS`. */
54
129
  export declare const PROMPT_BATCH_MAX_AGENTS = 200;
55
130
  /** Длина ключа идемпотентности пакетного прогона — должна совпадать с DTO бэкенда. */
@@ -179,7 +254,7 @@ export declare const promptAnalysisStageOutputSchema: z.ZodObject<{
179
254
  }>;
180
255
  output: z.ZodObject<{}, z.core.$loose>;
181
256
  }, z.core.$strip>;
182
- export declare const icpAnalysisSegmentSchema: z.ZodObject<{
257
+ export declare const icpAnalysisSegmentSchema: z.ZodPipe<z.ZodObject<{
183
258
  id: z.ZodOptional<z.ZodString>;
184
259
  name: z.ZodString;
185
260
  description: z.ZodOptional<z.ZodString>;
@@ -187,15 +262,90 @@ export declare const icpAnalysisSegmentSchema: z.ZodObject<{
187
262
  pains: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
188
263
  motivations: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
189
264
  language_style: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
190
- }, z.core.$strip>;
191
- export declare const icpAnalysisPersonaSchema: z.ZodObject<{
265
+ languageStyle: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
266
+ }, z.core.$strip>, z.ZodTransform<{
267
+ language_style: {
268
+ [x: string]: unknown;
269
+ } | undefined;
270
+ name: string;
271
+ id?: string | undefined;
272
+ description?: string | undefined;
273
+ demographics?: {
274
+ [x: string]: unknown;
275
+ } | undefined;
276
+ pains?: unknown[] | undefined;
277
+ motivations?: unknown[] | undefined;
278
+ }, {
279
+ name: string;
280
+ id?: string | undefined;
281
+ description?: string | undefined;
282
+ demographics?: {
283
+ [x: string]: unknown;
284
+ } | undefined;
285
+ pains?: unknown[] | undefined;
286
+ motivations?: unknown[] | undefined;
287
+ language_style?: {
288
+ [x: string]: unknown;
289
+ } | undefined;
290
+ languageStyle?: {
291
+ [x: string]: unknown;
292
+ } | undefined;
293
+ }>>;
294
+ export declare const icpAnalysisPersonaSchema: z.ZodPipe<z.ZodObject<{
192
295
  name: z.ZodString;
193
- segment_id: z.ZodString;
296
+ segment_id: z.ZodOptional<z.ZodString>;
297
+ segmentId: z.ZodOptional<z.ZodString>;
194
298
  description: z.ZodOptional<z.ZodString>;
195
299
  pain_points: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
300
+ painPoints: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
196
301
  goals: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
197
302
  objections: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
198
303
  messaging_hints: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
304
+ messagingHints: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
305
+ }, z.core.$strip>, z.ZodTransform<{
306
+ segment_id: string | undefined;
307
+ pain_points: unknown[] | undefined;
308
+ messaging_hints: {
309
+ [x: string]: unknown;
310
+ } | undefined;
311
+ name: string;
312
+ description?: string | undefined;
313
+ goals?: unknown[] | undefined;
314
+ objections?: {
315
+ [x: string]: unknown;
316
+ } | undefined;
317
+ }, {
318
+ name: string;
319
+ segment_id?: string | undefined;
320
+ segmentId?: string | undefined;
321
+ description?: string | undefined;
322
+ pain_points?: unknown[] | undefined;
323
+ painPoints?: unknown[] | undefined;
324
+ goals?: unknown[] | undefined;
325
+ objections?: {
326
+ [x: string]: unknown;
327
+ } | undefined;
328
+ messaging_hints?: {
329
+ [x: string]: unknown;
330
+ } | undefined;
331
+ messagingHints?: {
332
+ [x: string]: unknown;
333
+ } | undefined;
334
+ }>>;
335
+ /**
336
+ * Машинные ожидания реплики: что раннер песочницы обязан увидеть в ответе агента на неё.
337
+ *
338
+ * ⚠️ Без этой схемы поле не просто «не валидируется», а ИСЧЕЗАЕТ: zod стрипает неизвестные ключи
339
+ * молча, и ожидания не доехали бы до backend вовсе. Вторая точка потери — маппинг сабмита, где
340
+ * реплики пересобираются по явному списку полей.
341
+ */
342
+ export declare const scenarioTurnExpectationSchema: z.ZodObject<{
343
+ triggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
344
+ noTriggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
345
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
346
+ noTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
347
+ answerContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
348
+ answerNotContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
199
349
  }, z.core.$strip>;
200
350
  export declare const scenarioSituationSchema: z.ZodObject<{
201
351
  role: z.ZodEnum<{
@@ -203,6 +353,14 @@ export declare const scenarioSituationSchema: z.ZodObject<{
203
353
  agent: "agent";
204
354
  }>;
205
355
  text: z.ZodString;
356
+ expect: z.ZodOptional<z.ZodObject<{
357
+ triggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
358
+ noTriggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
359
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
360
+ noTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
361
+ answerContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
362
+ answerNotContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
363
+ }, z.core.$strip>>;
206
364
  }, z.core.$strip>;
207
365
  export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
208
366
  name: z.ZodString;
@@ -215,6 +373,14 @@ export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
215
373
  agent: "agent";
216
374
  }>;
217
375
  text: z.ZodString;
376
+ expect: z.ZodOptional<z.ZodObject<{
377
+ triggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
378
+ noTriggers: z.ZodOptional<z.ZodArray<z.ZodString>>;
379
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
380
+ noTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
381
+ answerContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
382
+ answerNotContains: z.ZodOptional<z.ZodArray<z.ZodString>>;
383
+ }, z.core.$strip>>;
218
384
  }, z.core.$strip>>;
219
385
  }, z.core.$strip>, z.ZodTransform<{
220
386
  segment_ids: string[] | undefined;
@@ -222,6 +388,14 @@ export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
222
388
  situations: {
223
389
  role: "client" | "agent";
224
390
  text: string;
391
+ expect?: {
392
+ triggers?: string[] | undefined;
393
+ noTriggers?: string[] | undefined;
394
+ tools?: string[] | undefined;
395
+ noTools?: string[] | undefined;
396
+ answerContains?: string[] | undefined;
397
+ answerNotContains?: string[] | undefined;
398
+ } | undefined;
225
399
  }[];
226
400
  description?: string | undefined;
227
401
  }, {
@@ -229,6 +403,14 @@ export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
229
403
  situations: {
230
404
  role: "client" | "agent";
231
405
  text: string;
406
+ expect?: {
407
+ triggers?: string[] | undefined;
408
+ noTriggers?: string[] | undefined;
409
+ tools?: string[] | undefined;
410
+ noTools?: string[] | undefined;
411
+ answerContains?: string[] | undefined;
412
+ answerNotContains?: string[] | undefined;
413
+ } | undefined;
232
414
  }[];
233
415
  description?: string | undefined;
234
416
  segment_ids?: string[] | undefined;
@@ -236,27 +418,32 @@ export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
236
418
  }>>;
237
419
  export declare const sandboxFindingSchema: z.ZodObject<{
238
420
  scenario_id: z.ZodOptional<z.ZodString>;
421
+ scenarioId: z.ZodOptional<z.ZodString>;
239
422
  category: z.ZodEnum<{
240
423
  other: "other";
241
424
  hallucination: "hallucination";
242
425
  wrong_action: "wrong_action";
243
426
  bad_tone: "bad_tone";
427
+ missed_context: "missed_context";
244
428
  wrong_routing: "wrong_routing";
245
- missed_trigger: "missed_trigger";
246
- wrong_pipeline_transition: "wrong_pipeline_transition";
247
429
  rag_miss: "rag_miss";
248
430
  }>;
249
431
  severity: z.ZodEnum<{
432
+ critical: "critical";
250
433
  low: "low";
251
434
  medium: "medium";
252
- critical: "critical";
253
435
  }>;
254
- message: z.ZodString;
436
+ description: z.ZodOptional<z.ZodString>;
437
+ message: z.ZodOptional<z.ZodString>;
438
+ evidence: z.ZodOptional<z.ZodString>;
439
+ recommendation: z.ZodOptional<z.ZodString>;
255
440
  suggestion: z.ZodOptional<z.ZodString>;
256
441
  turn_index: z.ZodOptional<z.ZodNumber>;
442
+ turnIndex: z.ZodOptional<z.ZodNumber>;
257
443
  }, z.core.$strip>;
258
444
  export declare const simulationFindingSchema: z.ZodObject<{
259
445
  dialogue_id: z.ZodOptional<z.ZodString>;
446
+ dialogueId: z.ZodOptional<z.ZodString>;
260
447
  category: z.ZodEnum<{
261
448
  other: "other";
262
449
  hallucination: "hallucination";
@@ -267,13 +454,14 @@ export declare const simulationFindingSchema: z.ZodObject<{
267
454
  off_topic: "off_topic";
268
455
  }>;
269
456
  severity: z.ZodEnum<{
457
+ critical: "critical";
270
458
  low: "low";
271
459
  medium: "medium";
272
- critical: "critical";
273
460
  }>;
274
461
  message: z.ZodString;
275
462
  suggestion: z.ZodOptional<z.ZodString>;
276
463
  reference_message_index: z.ZodOptional<z.ZodNumber>;
464
+ referenceMessageIndex: z.ZodOptional<z.ZodNumber>;
277
465
  }, z.core.$strip>;
278
466
  export declare const routingRuleLeadStatusSchema: z.ZodObject<{
279
467
  lead_status_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -675,6 +863,51 @@ export declare const platformInstagramCommentSchema: z.ZodObject<{
675
863
  instagram_comment_keywords: z.ZodOptional<z.ZodNullable<z.ZodObject<{}, z.core.$loose>>>;
676
864
  reply_to_story_mentions: z.ZodOptional<z.ZodBoolean>;
677
865
  }, z.core.$strict>;
866
+ /**
867
+ * Ссылка на стадию CRM ПОЛНЫМ композитом.
868
+ *
869
+ * ⚠️ Голый `status_id` не годится: статусы 142/143 и одноимённые стадии есть в КАЖДОЙ
870
+ * воронке, и выбор по номеру попал бы не туда.
871
+ */
872
+ export declare const funnelStageRefSchema: z.ZodObject<{
873
+ pipeline_crm_id: z.ZodString;
874
+ pipeline_id: z.ZodNumber;
875
+ status_id: z.ZodNumber;
876
+ }, z.core.$strict>;
877
+ /**
878
+ * Настройки раздела «Воронка канала».
879
+ *
880
+ * ⚠️ `null` у `decision_gate`/`path_target_stage` — СБРОС; отсутствие поля — «не трогать».
881
+ * Бэкенд ДЕЛЕГИРУЕТ запись сервисам раздела, поэтому здесь нет своей валидации стадий:
882
+ * «стадии разные» и «стадия есть в каталоге площадки» проверяет он, и второй набор правил
883
+ * рядом разошёлся бы с первым.
884
+ */
885
+ export declare const platformFunnelAnalyticsSchema: z.ZodObject<{
886
+ decision_gate: z.ZodOptional<z.ZodNullable<z.ZodObject<{
887
+ submitted: z.ZodObject<{
888
+ pipeline_crm_id: z.ZodString;
889
+ pipeline_id: z.ZodNumber;
890
+ status_id: z.ZodNumber;
891
+ }, z.core.$strict>;
892
+ approved: z.ZodObject<{
893
+ pipeline_crm_id: z.ZodString;
894
+ pipeline_id: z.ZodNumber;
895
+ status_id: z.ZodNumber;
896
+ }, z.core.$strict>;
897
+ rejected: z.ZodObject<{
898
+ pipeline_crm_id: z.ZodString;
899
+ pipeline_id: z.ZodNumber;
900
+ status_id: z.ZodNumber;
901
+ }, z.core.$strict>;
902
+ }, z.core.$strict>>>;
903
+ path_target_stage: z.ZodOptional<z.ZodNullable<z.ZodObject<{
904
+ pipeline_crm_id: z.ZodString;
905
+ pipeline_id: z.ZodNumber;
906
+ status_id: z.ZodNumber;
907
+ }, z.core.$strict>>>;
908
+ engaged_inbound_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
909
+ stuck_threshold_hours: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
910
+ }, z.core.$strict>;
678
911
  export declare const platformGeneralSettingsSchema: z.ZodObject<{
679
912
  name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
680
913
  off_message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -713,6 +946,18 @@ export declare const coldWelcomeChannelsModeEnum: z.ZodEnum<{
713
946
  RESTRICT: "RESTRICT";
714
947
  ADD: "ADD";
715
948
  }>;
949
+ /**
950
+ * Режим правила предохранителя холодных отправок.
951
+ *
952
+ * OFF — правило выключено; WARN — сработавшее правило только записывается в аудит, отправка
953
+ * идёт; BLOCK — отправка останавливается. По умолчанию `active_series` = BLOCK (правило,
954
+ * из-за нарушения которого пришла жалоба клиента), остальные = WARN.
955
+ */
956
+ export declare const guardModeEnum: z.ZodEnum<{
957
+ OFF: "OFF";
958
+ WARN: "WARN";
959
+ BLOCK: "BLOCK";
960
+ }>;
716
961
  export declare const getcourseTransportEnum: z.ZodEnum<{
717
962
  Site: "Site";
718
963
  Email: "Email";
@@ -794,6 +1039,22 @@ export declare const platformGetcourseSettingsSchema: z.ZodObject<{
794
1039
  }, z.core.$strict>>>>;
795
1040
  target_department_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
796
1041
  delivery_check_enabled: z.ZodOptional<z.ZodBoolean>;
1042
+ guard_active_series: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1043
+ OFF: "OFF";
1044
+ WARN: "WARN";
1045
+ BLOCK: "BLOCK";
1046
+ }>>>;
1047
+ guard_active_application: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1048
+ OFF: "OFF";
1049
+ WARN: "WARN";
1050
+ BLOCK: "BLOCK";
1051
+ }>>>;
1052
+ guard_paid: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1053
+ OFF: "OFF";
1054
+ WARN: "WARN";
1055
+ BLOCK: "BLOCK";
1056
+ }>>>;
1057
+ quiet_days: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
797
1058
  delivery_field_map: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
798
1059
  Site: "Site";
799
1060
  Email: "Email";
@@ -837,7 +1098,7 @@ export declare function setupConfirmation(input: {
837
1098
  export declare function withInstructions(response: unknown, instructions: readonly string[]): unknown;
838
1099
  export declare function buildKnowledgeSpaceListQuery(scopeType?: string, channelId?: string): string;
839
1100
  export declare function buildListQuery(params: Record<string, string | number | boolean | string[] | undefined>): string;
840
- export declare function buildVariableListQuery(scope: 'WORKSPACE' | 'CHANNEL', platformId?: string, filter?: 'all' | 'variables' | 'constants'): string;
1101
+ export declare function buildVariableListQuery(scope: 'WORKSPACE' | 'CHANNEL', platformId?: string, filter?: 'all' | 'variables' | 'constants', limit?: number, cursor?: string): string;
841
1102
  export declare function buildVariableScopeQuery(scope: 'WORKSPACE' | 'CHANNEL', platformId?: string): string;
842
1103
  export declare function buildFileListQuery(input: {
843
1104
  file_type?: string;
@@ -862,6 +1123,7 @@ export declare function mapPlatformVariablesConfigInput(input: z.infer<typeof pl
862
1123
  export declare function mapPlatformCrmBehaviorInput(input: z.infer<typeof platformCrmBehaviorSchema>): Record<string, unknown>;
863
1124
  export declare function mapPlatformWidgetMarketingInput(input: z.infer<typeof platformWidgetMarketingSchema>): Record<string, unknown>;
864
1125
  export declare function mapPlatformInstagramCommentInput(input: z.infer<typeof platformInstagramCommentSchema>): Record<string, unknown>;
1126
+ export declare function mapPlatformFunnelAnalyticsInput(input: z.infer<typeof platformFunnelAnalyticsSchema>): Record<string, unknown>;
865
1127
  export declare function mapPlatformGeneralSettingsInput(input: z.infer<typeof platformGeneralSettingsSchema>): Record<string, unknown>;
866
1128
  export declare function mapPlatformSalebotSettingsInput(input: z.infer<typeof platformSalebotSettingsSchema>): Record<string, unknown>;
867
1129
  export declare function mapPlatformSmsgorodSettingsInput(input: z.infer<typeof platformSmsgorodSettingsSchema>): Record<string, unknown>;