@besales/mcp 0.46.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 (182) 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/follow-up.md +19 -0
  26. package/dist/resources/docs/platforms.md +2 -2
  27. package/dist/resources/docs/routing.md +18 -0
  28. package/dist/resources/docs/task-state.md +30 -0
  29. package/dist/resources/docs/trigger-actions.md +28 -0
  30. package/dist/resources/docs/variables.md +18 -0
  31. package/dist/resources/registry.js +51 -2
  32. package/dist/resources/registry.js.map +1 -1
  33. package/dist/resources/workflows/extract-from-document.md +8 -1
  34. package/dist/resources/workflows/iterate-with-sandbox.md +5 -2
  35. package/dist/resources/workflows/platform-setup-from-scratch.md +90 -2
  36. package/dist/resources/workflows/production-readiness-check.md +22 -18
  37. package/dist/schemas/mcp-tools.json +1058 -99
  38. package/dist/server.d.ts +2 -0
  39. package/dist/server.js +8 -2
  40. package/dist/server.js.map +1 -1
  41. package/dist/tasks/task-state-store.d.ts +68 -0
  42. package/dist/tasks/task-state-store.js +278 -0
  43. package/dist/tasks/task-state-store.js.map +1 -0
  44. package/dist/tools/annotations.d.ts +7 -0
  45. package/dist/tools/annotations.js +16 -0
  46. package/dist/tools/annotations.js.map +1 -0
  47. package/dist/tools/contracts.js +7 -1
  48. package/dist/tools/contracts.js.map +1 -1
  49. package/dist/tools/definitions/agent-design.d.ts +41 -20
  50. package/dist/tools/definitions/agent-design.js +189 -19
  51. package/dist/tools/definitions/agent-design.js.map +1 -1
  52. package/dist/tools/definitions/analytics.d.ts +40 -0
  53. package/dist/tools/definitions/analytics.js +233 -0
  54. package/dist/tools/definitions/analytics.js.map +1 -0
  55. package/dist/tools/definitions/broadcast-analytics.js +12 -0
  56. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  57. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +2 -0
  58. package/dist/tools/definitions/broadcast-mailing-variants.js +10 -0
  59. package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
  60. package/dist/tools/definitions/broadcast-scheduler.d.ts +7 -1
  61. package/dist/tools/definitions/broadcast-scheduler.js +71 -4
  62. package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
  63. package/dist/tools/definitions/contacts.d.ts +15 -0
  64. package/dist/tools/definitions/contacts.js +84 -0
  65. package/dist/tools/definitions/contacts.js.map +1 -0
  66. package/dist/tools/definitions/crm-platform.d.ts +2 -0
  67. package/dist/tools/definitions/crm-platform.js +75 -5
  68. package/dist/tools/definitions/crm-platform.js.map +1 -1
  69. package/dist/tools/definitions/datasource.d.ts +1 -0
  70. package/dist/tools/definitions/datasource.js +16 -1
  71. package/dist/tools/definitions/datasource.js.map +1 -1
  72. package/dist/tools/definitions/dialogue-audit.d.ts +2 -2
  73. package/dist/tools/definitions/dialogue-audit.js +54 -16
  74. package/dist/tools/definitions/dialogue-audit.js.map +1 -1
  75. package/dist/tools/definitions/dialogue-export.d.ts +1 -1
  76. package/dist/tools/definitions/dialogue-export.js +12 -0
  77. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  78. package/dist/tools/definitions/external-api-channels.js +39 -12
  79. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  80. package/dist/tools/definitions/follow-up-funnel-test.js +4 -0
  81. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  82. package/dist/tools/definitions/follow-up-setup.js +3 -0
  83. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  84. package/dist/tools/definitions/follow-up.d.ts +1 -1
  85. package/dist/tools/definitions/follow-up.js +4 -0
  86. package/dist/tools/definitions/follow-up.js.map +1 -1
  87. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +3 -0
  88. package/dist/tools/definitions/getcourse-anchor-refresh.js +29 -2
  89. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  90. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +12 -2
  91. package/dist/tools/definitions/getcourse-cold-welcome.js +79 -4
  92. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  93. package/dist/tools/definitions/getcourse-wave.js +14 -0
  94. package/dist/tools/definitions/getcourse-wave.js.map +1 -1
  95. package/dist/tools/definitions/help.d.ts +8 -0
  96. package/dist/tools/definitions/help.js +219 -0
  97. package/dist/tools/definitions/help.js.map +1 -0
  98. package/dist/tools/definitions/knowledge.d.ts +27 -5
  99. package/dist/tools/definitions/knowledge.js +200 -33
  100. package/dist/tools/definitions/knowledge.js.map +1 -1
  101. package/dist/tools/definitions/link-tracking.js +9 -0
  102. package/dist/tools/definitions/link-tracking.js.map +1 -1
  103. package/dist/tools/definitions/model-comparison.js +6 -0
  104. package/dist/tools/definitions/model-comparison.js.map +1 -1
  105. package/dist/tools/definitions/operational-overview.d.ts +3 -0
  106. package/dist/tools/definitions/operational-overview.js +23 -0
  107. package/dist/tools/definitions/operational-overview.js.map +1 -0
  108. package/dist/tools/definitions/operator-workflow.d.ts +20 -0
  109. package/dist/tools/definitions/operator-workflow.js +114 -0
  110. package/dist/tools/definitions/operator-workflow.js.map +1 -0
  111. package/dist/tools/definitions/platform-setup.d.ts +25 -3
  112. package/dist/tools/definitions/platform-setup.js +198 -5
  113. package/dist/tools/definitions/platform-setup.js.map +1 -1
  114. package/dist/tools/definitions/scheduled-tasks.js +2 -0
  115. package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
  116. package/dist/tools/definitions/session.js +103 -5
  117. package/dist/tools/definitions/session.js.map +1 -1
  118. package/dist/tools/definitions/shared.d.ts +153 -11
  119. package/dist/tools/definitions/shared.js +59 -9
  120. package/dist/tools/definitions/shared.js.map +1 -1
  121. package/dist/tools/definitions/task-state.d.ts +76 -0
  122. package/dist/tools/definitions/task-state.js +301 -0
  123. package/dist/tools/definitions/task-state.js.map +1 -0
  124. package/dist/tools/definitions/trigger-contact-claims.js +2 -0
  125. package/dist/tools/definitions/trigger-contact-claims.js.map +1 -1
  126. package/dist/tools/definitions.d.ts +265 -31
  127. package/dist/tools/definitions.js +12 -0
  128. package/dist/tools/definitions.js.map +1 -1
  129. package/dist/tools/description-localization.d.ts +2 -0
  130. package/dist/tools/description-localization.js +46 -0
  131. package/dist/tools/description-localization.js.map +1 -0
  132. package/dist/tools/incomplete-list.d.ts +23 -0
  133. package/dist/tools/incomplete-list.js +39 -0
  134. package/dist/tools/incomplete-list.js.map +1 -0
  135. package/dist/tools/inventory.d.ts +10 -0
  136. package/dist/tools/inventory.js +49 -0
  137. package/dist/tools/inventory.js.map +1 -0
  138. package/dist/tools/registry-mapping-cases-core.js +111 -2
  139. package/dist/tools/registry-mapping-cases-core.js.map +1 -1
  140. package/dist/tools/registry-mapping-cases-platform.js +69 -0
  141. package/dist/tools/registry-mapping-cases-platform.js.map +1 -1
  142. package/dist/tools/registry.d.ts +2 -0
  143. package/dist/tools/registry.js +60 -8
  144. package/dist/tools/registry.js.map +1 -1
  145. package/dist/tools/result-envelope.d.ts +46 -0
  146. package/dist/tools/result-envelope.js +184 -0
  147. package/dist/tools/result-envelope.js.map +1 -0
  148. package/dist/tools/result.d.ts +41 -3
  149. package/dist/tools/result.js +229 -27
  150. package/dist/tools/result.js.map +1 -1
  151. package/dist/tools/tool-title.d.ts +2 -0
  152. package/dist/tools/tool-title.js +12 -0
  153. package/dist/tools/tool-title.js.map +1 -0
  154. package/dist/tools/toolsets.d.ts +37 -0
  155. package/dist/tools/toolsets.js +64 -0
  156. package/dist/tools/toolsets.js.map +1 -0
  157. package/dist/tools/verify-with.d.ts +5 -0
  158. package/dist/tools/verify-with.js +36 -0
  159. package/dist/tools/verify-with.js.map +1 -0
  160. package/dist/types/api-contract.gen.d.ts +1421 -80
  161. package/dist/utils/logger.d.ts +11 -0
  162. package/dist/utils/logger.js +64 -8
  163. package/dist/utils/logger.js.map +1 -1
  164. package/docs/agent-usage-guide.full.ru.md +20 -15
  165. package/docs/agent-usage-guide.ru.md +24 -16
  166. package/docs/async-operation-lifecycle.md +46 -0
  167. package/docs/connect.ru.md +120 -0
  168. package/docs/evals/model-behavior-scorecard.md +80 -0
  169. package/docs/failure-semantics.md +56 -0
  170. package/docs/help-navigation.md +48 -0
  171. package/docs/host-compatibility-matrix.md +153 -0
  172. package/docs/host-setup.md +22 -6
  173. package/docs/operation-coverage.md +114 -0
  174. package/docs/pii-policy.md +46 -0
  175. package/docs/response-size-budget.md +150 -0
  176. package/docs/task-state.md +58 -0
  177. package/docs/tool-effects.md +46 -0
  178. package/docs/tool-surface.md +91 -0
  179. package/package.json +6 -2
  180. package/scripts/model-eval-server.js +213 -0
  181. package/scripts/probe-mcp-protocol.js +134 -0
  182. package/scripts/run-model-eval.js +447 -0
@@ -3,6 +3,23 @@
3
3
  * Do not make direct changes to the file.
4
4
  */
5
5
  export interface paths {
6
+ "/api/v2/agents/{agentId}/readiness": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /** Доказательная готовность выбранного агента и текущей версии конфигурации */
14
+ get: operations["AgentReadinessController_get"];
15
+ put?: never;
16
+ post?: never;
17
+ delete?: never;
18
+ options?: never;
19
+ head?: never;
20
+ patch?: never;
21
+ trace?: never;
22
+ };
6
23
  "/api/v2/auth/login": {
7
24
  parameters: {
8
25
  query?: never;
@@ -235,8 +252,8 @@ export interface paths {
235
252
  /** @description PKCE S256 challenge — SHA256(code_verifier) base64url-encoded */
236
253
  code_challenge: string;
237
254
  code_challenge_method: "S256";
238
- /** @description Requested scopes: base `mcp:*` plus any subset of the optional scopes, in the canonical order `mcp:platform-setup`, `mcp:funnel-test`, `read:campaigns`, `launch:campaigns`. `mcp:*` enables PromptHub/ICP/Sandbox/Knowledge tools; `mcp:platform-setup` enables Platform Setup Bridge mutations; `mcp:funnel-test` permits frozen-plan funnel tests that can send real messages; `read:campaigns` covers cold-welcome preview and broadcast reads; `launch:campaigns` covers cold-welcome/broadcast launches. `besales-mcp connect` always requests the widest string. INVARIANT: a new scope is APPENDED to the optional list — never swapped in for an existing one, or every reconnect silently narrows live keys. */
239
- scope: "mcp:*" | "mcp:* mcp:platform-setup" | "mcp:* mcp:funnel-test" | "mcp:* mcp:platform-setup mcp:funnel-test" | "mcp:* read:campaigns" | "mcp:* mcp:platform-setup read:campaigns" | "mcp:* mcp:funnel-test read:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns" | "mcp:* launch:campaigns" | "mcp:* mcp:platform-setup launch:campaigns" | "mcp:* mcp:funnel-test launch:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test launch:campaigns" | "mcp:* read:campaigns launch:campaigns" | "mcp:* mcp:platform-setup read:campaigns launch:campaigns" | "mcp:* mcp:funnel-test read:campaigns launch:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns launch:campaigns";
255
+ /** @description Requested scopes: base `mcp:*` plus any subset of the optional scopes, in the canonical order `mcp:platform-setup`, `mcp:funnel-test`, `read:campaigns`, `launch:campaigns`, `read:contacts`, `write:operators`. `mcp:*` enables PromptHub/ICP/Sandbox/Knowledge tools; `mcp:platform-setup` enables Platform Setup Bridge mutations; `mcp:funnel-test` permits frozen-plan funnel tests that can send real messages; `read:campaigns` covers cold-welcome preview and broadcast reads; `launch:campaigns` covers cold-welcome/broadcast launches; `read:contacts` covers contact search, cards and safe diagnostics; `write:operators` permits a CAS-protected local workspace-operator assignment without sending messages. `besales-mcp connect` always requests the widest string. INVARIANT: a new scope is APPENDED to the optional list — never swapped in for an existing one, or every reconnect silently narrows live keys. */
256
+ scope: "mcp:*" | "mcp:* mcp:platform-setup" | "mcp:* mcp:funnel-test" | "mcp:* mcp:platform-setup mcp:funnel-test" | "mcp:* read:campaigns" | "mcp:* mcp:platform-setup read:campaigns" | "mcp:* mcp:funnel-test read:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns" | "mcp:* launch:campaigns" | "mcp:* mcp:platform-setup launch:campaigns" | "mcp:* mcp:funnel-test launch:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test launch:campaigns" | "mcp:* read:campaigns launch:campaigns" | "mcp:* mcp:platform-setup read:campaigns launch:campaigns" | "mcp:* mcp:funnel-test read:campaigns launch:campaigns" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns launch:campaigns" | "mcp:* read:contacts" | "mcp:* mcp:platform-setup read:contacts" | "mcp:* mcp:funnel-test read:contacts" | "mcp:* mcp:platform-setup mcp:funnel-test read:contacts" | "mcp:* read:campaigns read:contacts" | "mcp:* mcp:platform-setup read:campaigns read:contacts" | "mcp:* mcp:funnel-test read:campaigns read:contacts" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns read:contacts" | "mcp:* launch:campaigns read:contacts" | "mcp:* mcp:platform-setup launch:campaigns read:contacts" | "mcp:* mcp:funnel-test launch:campaigns read:contacts" | "mcp:* mcp:platform-setup mcp:funnel-test launch:campaigns read:contacts" | "mcp:* read:campaigns launch:campaigns read:contacts" | "mcp:* mcp:platform-setup read:campaigns launch:campaigns read:contacts" | "mcp:* mcp:funnel-test read:campaigns launch:campaigns read:contacts" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns launch:campaigns read:contacts" | "mcp:* write:operators" | "mcp:* mcp:platform-setup write:operators" | "mcp:* mcp:funnel-test write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test write:operators" | "mcp:* read:campaigns write:operators" | "mcp:* mcp:platform-setup read:campaigns write:operators" | "mcp:* mcp:funnel-test read:campaigns write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns write:operators" | "mcp:* launch:campaigns write:operators" | "mcp:* mcp:platform-setup launch:campaigns write:operators" | "mcp:* mcp:funnel-test launch:campaigns write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test launch:campaigns write:operators" | "mcp:* read:campaigns launch:campaigns write:operators" | "mcp:* mcp:platform-setup read:campaigns launch:campaigns write:operators" | "mcp:* mcp:funnel-test read:campaigns launch:campaigns write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns launch:campaigns write:operators" | "mcp:* read:contacts write:operators" | "mcp:* mcp:platform-setup read:contacts write:operators" | "mcp:* mcp:funnel-test read:contacts write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test read:contacts write:operators" | "mcp:* read:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup read:campaigns read:contacts write:operators" | "mcp:* mcp:funnel-test read:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns read:contacts write:operators" | "mcp:* launch:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup launch:campaigns read:contacts write:operators" | "mcp:* mcp:funnel-test launch:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test launch:campaigns read:contacts write:operators" | "mcp:* read:campaigns launch:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup read:campaigns launch:campaigns read:contacts write:operators" | "mcp:* mcp:funnel-test read:campaigns launch:campaigns read:contacts write:operators" | "mcp:* mcp:platform-setup mcp:funnel-test read:campaigns launch:campaigns read:contacts write:operators";
240
257
  };
241
258
  header?: never;
242
259
  path?: never;
@@ -450,6 +467,10 @@ export interface paths {
450
467
  api_key: string;
451
468
  /** Format: uuid */
452
469
  workspace_id: string;
470
+ /** @description Workspace name captured at token exchange for local human-readable selection */
471
+ workspace_name: string;
472
+ /** @description Masked account email (for example, o***@example.com); never contains the raw email */
473
+ account_label: string | null;
453
474
  /**
454
475
  * Format: date-time
455
476
  * @description API key expiration (90 days from now)
@@ -477,6 +498,59 @@ export interface paths {
477
498
  patch?: never;
478
499
  trace?: never;
479
500
  };
501
+ "/api/v2/auth/mcp-context": {
502
+ parameters: {
503
+ query?: never;
504
+ header?: never;
505
+ path?: never;
506
+ cookie?: never;
507
+ };
508
+ /**
509
+ * Read safe labels for the current MCP connection
510
+ * @description Lightweight alternative to workspace overview for local workspace selection.
511
+ */
512
+ get: {
513
+ parameters: {
514
+ query?: never;
515
+ header?: never;
516
+ path?: never;
517
+ cookie?: never;
518
+ };
519
+ requestBody?: never;
520
+ responses: {
521
+ /** @description Current workspace and masked account label */
522
+ 200: {
523
+ headers: {
524
+ [name: string]: unknown;
525
+ };
526
+ content: {
527
+ "application/json": {
528
+ /** Format: uuid */
529
+ workspace_id: string;
530
+ workspace_name: string;
531
+ account_label: string | null;
532
+ /** @description Effective scopes of this exact MCP key */
533
+ scopes: string[];
534
+ };
535
+ };
536
+ };
537
+ /** @description MCP key is missing, revoked, or belongs to another workspace */
538
+ 403: {
539
+ headers: {
540
+ [name: string]: unknown;
541
+ };
542
+ content?: never;
543
+ };
544
+ };
545
+ };
546
+ put?: never;
547
+ post?: never;
548
+ delete?: never;
549
+ options?: never;
550
+ head?: never;
551
+ patch?: never;
552
+ trace?: never;
553
+ };
480
554
  "/api/v2/auth/mcp-connections": {
481
555
  parameters: {
482
556
  query?: never;
@@ -890,6 +964,28 @@ export interface paths {
890
964
  patch?: never;
891
965
  trace?: never;
892
966
  };
967
+ "/api/v2/workspaces/{workspaceId}/navigation": {
968
+ parameters: {
969
+ query?: never;
970
+ header?: never;
971
+ path?: never;
972
+ cookie?: never;
973
+ };
974
+ get?: never;
975
+ put?: never;
976
+ /**
977
+ * Выбрать один следующий шаг по намерению и живому overview
978
+ * @description Read-only навигатор. Учитывает тип бота, уже выбранные объекты и текущее состояние
979
+ * workspace. Возвращает конкретный MCP tool, аргументы, необходимый ввод человека и способ
980
+ * проверки; сам мутацию не выполняет и readiness не подменяет.
981
+ */
982
+ post: operations["navigateWorkspaceTask"];
983
+ delete?: never;
984
+ options?: never;
985
+ head?: never;
986
+ patch?: never;
987
+ trace?: never;
988
+ };
893
989
  "/api/v2/setup-sessions": {
894
990
  parameters: {
895
991
  query?: never;
@@ -5422,7 +5518,10 @@ export interface paths {
5422
5518
  /** Sanitized setup context with readiness flags */
5423
5519
  get: {
5424
5520
  parameters: {
5425
- query?: never;
5521
+ query?: {
5522
+ /** @description Секции снимка через запятую; agent_summaries исключает полный промпт. */
5523
+ sections?: string;
5524
+ };
5426
5525
  header?: never;
5427
5526
  path: {
5428
5527
  platformId: components["parameters"]["PlatformIdPath"];
@@ -5449,6 +5548,49 @@ export interface paths {
5449
5548
  patch?: never;
5450
5549
  trace?: never;
5451
5550
  };
5551
+ "/api/v2/platforms/{platformId}/setup/trigger-action-catalog": {
5552
+ parameters: {
5553
+ query?: never;
5554
+ header?: never;
5555
+ path?: never;
5556
+ cookie?: never;
5557
+ };
5558
+ /**
5559
+ * Current trigger action schemas, examples and dependencies
5560
+ * @description Каталог строится из боевого `CreateTriggerActionDto` и `TRIGGER_ACTION_CONFIG`.
5561
+ * `actionType` позволяет запросить один тип без загрузки всех схем.
5562
+ */
5563
+ get: {
5564
+ parameters: {
5565
+ query?: {
5566
+ actionType?: string;
5567
+ };
5568
+ header?: never;
5569
+ path: {
5570
+ platformId: components["parameters"]["PlatformIdPath"];
5571
+ };
5572
+ cookie?: never;
5573
+ };
5574
+ requestBody?: never;
5575
+ responses: {
5576
+ 200: {
5577
+ headers: {
5578
+ [name: string]: unknown;
5579
+ };
5580
+ content: {
5581
+ "application/json": components["schemas"]["TriggerActionCatalogResponse"];
5582
+ };
5583
+ };
5584
+ };
5585
+ };
5586
+ put?: never;
5587
+ post?: never;
5588
+ delete?: never;
5589
+ options?: never;
5590
+ head?: never;
5591
+ patch?: never;
5592
+ trace?: never;
5593
+ };
5452
5594
  "/api/v2/platforms/{platformId}/agents": {
5453
5595
  parameters: {
5454
5596
  query?: never;
@@ -5459,7 +5601,14 @@ export interface paths {
5459
5601
  /** List agents attached to existing platform */
5460
5602
  get: {
5461
5603
  parameters: {
5462
- query?: never;
5604
+ query?: {
5605
+ /** @description Размер страницы; без него список отдаётся целиком. */
5606
+ limit?: number;
5607
+ /** @description Курсор из предыдущего ответа. */
5608
+ cursor?: string;
5609
+ /** @description Поиск без учёта регистра по name или displayName. */
5610
+ q?: string;
5611
+ };
5463
5612
  header?: never;
5464
5613
  path: {
5465
5614
  platformId: components["parameters"]["PlatformIdPath"];
@@ -6340,6 +6489,26 @@ export interface paths {
6340
6489
  patch?: never;
6341
6490
  trace?: never;
6342
6491
  };
6492
+ "/api/v2/workspaces/{workspaceId}/getcourse-cold-welcome/touch-history/{gcUserId}": {
6493
+ parameters: {
6494
+ query?: never;
6495
+ header?: never;
6496
+ path?: never;
6497
+ cookie?: never;
6498
+ };
6499
+ /**
6500
+ * What we have already sent this person, and by what right
6501
+ * @description Three sources with DIFFERENT keys, joined into one answer. `touches` is the touch journal: a RIGHT taken BEFORE transport, so a row exists even for an attempt that never sent (UNKNOWN, stuck CLAIMED). `sends` is the recipient registry: written AFTER delivery and best-effort, so its absence does NOT prove non-delivery. `firstWelcomeAt` is the earliest mark across the person cards. Do not add `touches` and `sends` together — they answer different questions.
6502
+ */
6503
+ get: operations["getContactTouchHistory"];
6504
+ put?: never;
6505
+ post?: never;
6506
+ delete?: never;
6507
+ options?: never;
6508
+ head?: never;
6509
+ patch?: never;
6510
+ trace?: never;
6511
+ };
6343
6512
  "/api/v2/workspaces/{workspaceId}/getcourse-cold-welcome/preview": {
6344
6513
  parameters: {
6345
6514
  query?: never;
@@ -6537,6 +6706,49 @@ export interface paths {
6537
6706
  patch?: never;
6538
6707
  trace?: never;
6539
6708
  };
6709
+ "/api/v2/workspaces/{workspaceId}/getcourse-anchor-refresh/{correlationId}": {
6710
+ parameters: {
6711
+ query?: never;
6712
+ header?: never;
6713
+ path?: never;
6714
+ cookie?: never;
6715
+ };
6716
+ /**
6717
+ * Статус фонового перечитывания календарных якорей
6718
+ * @description Retained 24 часа. STALLED означает, что фоновый процесс больше не владеет lock; часть дат могла быть переписана, поэтому перед повтором нужен аудит по correlationId. Отмены нет: уже выполненные частичные перезаписи необратимы. Scope `read:campaigns`.
6719
+ */
6720
+ get: {
6721
+ parameters: {
6722
+ query?: never;
6723
+ header?: never;
6724
+ path: {
6725
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
6726
+ correlationId: string;
6727
+ };
6728
+ cookie?: never;
6729
+ };
6730
+ requestBody?: never;
6731
+ responses: {
6732
+ /** @description Состояние и terminal result/error */
6733
+ 200: {
6734
+ headers: {
6735
+ [name: string]: unknown;
6736
+ };
6737
+ content: {
6738
+ "application/json": components["schemas"]["GetCourseAnchorRefreshStatusResponse"];
6739
+ };
6740
+ };
6741
+ 404: components["responses"]["NotFound"];
6742
+ };
6743
+ };
6744
+ put?: never;
6745
+ post?: never;
6746
+ delete?: never;
6747
+ options?: never;
6748
+ head?: never;
6749
+ patch?: never;
6750
+ trace?: never;
6751
+ };
6540
6752
  "/api/v2/workspaces/{workspaceId}/getcourse-cold-welcome/batch": {
6541
6753
  parameters: {
6542
6754
  query?: never;
@@ -8774,8 +8986,8 @@ export interface paths {
8774
8986
  get?: never;
8775
8987
  put?: never;
8776
8988
  /**
8777
- * Создать External API канал (provisioning)
8778
- * @description Возвращает apiKey + webhookSecret ОДИН раз. Scope `mcp:platform-setup` (или UI JWT).
8989
+ * Создать External API канал и выдать browser-handoff ссылку
8990
+ * @description Секреты не проходят через API/MCP-ответ. Scope `mcp:platform-setup` (или UI JWT).
8779
8991
  */
8780
8992
  post: {
8781
8993
  parameters: {
@@ -8792,13 +9004,13 @@ export interface paths {
8792
9004
  };
8793
9005
  };
8794
9006
  responses: {
8795
- /** @description Канал создан (ключ и секрет показываются один раз) */
9007
+ /** @description Канал создан; credentials покажет вошедшему человеку одноразовая страница */
8796
9008
  201: {
8797
9009
  headers: {
8798
9010
  [name: string]: unknown;
8799
9011
  };
8800
9012
  content: {
8801
- "application/json": components["schemas"]["ProvisionedExternalApiChannel"];
9013
+ "application/json": components["schemas"]["ExternalApiChannelCreated"];
8802
9014
  };
8803
9015
  };
8804
9016
  };
@@ -8818,7 +9030,7 @@ export interface paths {
8818
9030
  };
8819
9031
  get?: never;
8820
9032
  put?: never;
8821
- /** Перевыпустить bsl-ключ канала (старый отзывается) */
9033
+ /** Выдать browser-handoff ссылку на перевыпуск bsl-ключа */
8822
9034
  post: {
8823
9035
  parameters: {
8824
9036
  query?: never;
@@ -8831,15 +9043,13 @@ export interface paths {
8831
9043
  };
8832
9044
  requestBody?: never;
8833
9045
  responses: {
8834
- /** @description Новый ключ (показывается один раз) */
9046
+ /** @description Ротация произойдёт только при открытии одноразовой страницы */
8835
9047
  201: {
8836
9048
  headers: {
8837
9049
  [name: string]: unknown;
8838
9050
  };
8839
9051
  content: {
8840
- "application/json": {
8841
- apiKey: string;
8842
- };
9052
+ "application/json": components["schemas"]["IssuedCredentialReveal"];
8843
9053
  };
8844
9054
  };
8845
9055
  };
@@ -8859,7 +9069,7 @@ export interface paths {
8859
9069
  };
8860
9070
  get?: never;
8861
9071
  put?: never;
8862
- /** Перевыпустить webhook-secret канала */
9072
+ /** Выдать browser-handoff ссылку на замену webhook-secret */
8863
9073
  post: {
8864
9074
  parameters: {
8865
9075
  query?: never;
@@ -8872,15 +9082,13 @@ export interface paths {
8872
9082
  };
8873
9083
  requestBody?: never;
8874
9084
  responses: {
8875
- /** @description Новый секрет (показывается один раз) */
9085
+ /** @description Замена произойдёт только при открытии одноразовой страницы */
8876
9086
  201: {
8877
9087
  headers: {
8878
9088
  [name: string]: unknown;
8879
9089
  };
8880
9090
  content: {
8881
- "application/json": {
8882
- webhookSecret: string;
8883
- };
9091
+ "application/json": components["schemas"]["IssuedCredentialReveal"];
8884
9092
  };
8885
9093
  };
8886
9094
  };
@@ -9158,6 +9366,81 @@ export interface paths {
9158
9366
  patch?: never;
9159
9367
  trace?: never;
9160
9368
  };
9369
+ "/api/v2/contacts/{contactId}/diagnostics": {
9370
+ parameters: {
9371
+ query?: never;
9372
+ header?: never;
9373
+ path?: never;
9374
+ cookie?: never;
9375
+ };
9376
+ /**
9377
+ * Диагностика причин молчания, operator workflow, действий и доставки
9378
+ * @description MCP-only read: возвращает метаданные и сохранённые evidence без тел сообщений, аргументов/результатов инструментов и raw error text. Отсутствующий production RAG trace помечается unknown, а не нулём.
9379
+ */
9380
+ get: {
9381
+ parameters: {
9382
+ query?: {
9383
+ messageId?: string;
9384
+ };
9385
+ header?: never;
9386
+ path: {
9387
+ contactId: string;
9388
+ };
9389
+ cookie?: never;
9390
+ };
9391
+ requestBody?: never;
9392
+ responses: {
9393
+ 200: {
9394
+ headers: {
9395
+ [name: string]: unknown;
9396
+ };
9397
+ content: {
9398
+ "application/json": {
9399
+ contact: {
9400
+ [key: string]: unknown;
9401
+ };
9402
+ platform: {
9403
+ [key: string]: unknown;
9404
+ } | null;
9405
+ message: {
9406
+ [key: string]: unknown;
9407
+ } | null;
9408
+ agent: {
9409
+ [key: string]: unknown;
9410
+ } | null;
9411
+ operatorEvents: {
9412
+ [key: string]: unknown;
9413
+ }[];
9414
+ triggerExecutions: {
9415
+ [key: string]: unknown;
9416
+ }[];
9417
+ toolExecutions: {
9418
+ [key: string]: unknown;
9419
+ }[];
9420
+ evidence: {
9421
+ [key: string]: unknown;
9422
+ };
9423
+ limitations: string[];
9424
+ };
9425
+ };
9426
+ };
9427
+ /** @description Контакт или выбранное сообщение не найдено в workspace */
9428
+ 404: {
9429
+ headers: {
9430
+ [name: string]: unknown;
9431
+ };
9432
+ content?: never;
9433
+ };
9434
+ };
9435
+ };
9436
+ put?: never;
9437
+ post?: never;
9438
+ delete?: never;
9439
+ options?: never;
9440
+ head?: never;
9441
+ patch?: never;
9442
+ trace?: never;
9443
+ };
9161
9444
  "/api/v2/contacts/import": {
9162
9445
  parameters: {
9163
9446
  query?: never;
@@ -9246,35 +9529,77 @@ export interface paths {
9246
9529
  patch?: never;
9247
9530
  trace?: never;
9248
9531
  };
9249
- "/api/v2/contacts/export": {
9532
+ "/api/v2/workspaces/{workspaceId}/getcourse-contact-imports/{jobId}": {
9250
9533
  parameters: {
9251
9534
  query?: never;
9252
9535
  header?: never;
9253
9536
  path?: never;
9254
9537
  cookie?: never;
9255
9538
  };
9256
- get?: never;
9257
- put?: never;
9258
- /** Export contacts by filter */
9259
- post: {
9539
+ /**
9540
+ * Статус импорта GetCourse-контактов или одиночной cold-welcome отправки
9541
+ * @description Возвращает только ImportJob типа GETCOURSE_CONTACTS в указанном workspace. PARTIAL и FAILED выводятся из terminal counters. Scope `launch:campaigns`, потому что этот же ключ запускает обе операции и `mcp:*` намеренно не включает массовое чтение контактов.
9542
+ */
9543
+ get: {
9260
9544
  parameters: {
9261
9545
  query?: never;
9262
9546
  header?: never;
9263
- path?: never;
9264
- cookie?: never;
9265
- };
9266
- requestBody?: {
9267
- content: {
9268
- "application/json": components["schemas"]["ContactExportRequest"];
9547
+ path: {
9548
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
9549
+ jobId: string;
9269
9550
  };
9551
+ cookie?: never;
9270
9552
  };
9553
+ requestBody?: never;
9271
9554
  responses: {
9272
- 202: {
9555
+ 200: {
9273
9556
  headers: {
9274
9557
  [name: string]: unknown;
9275
9558
  };
9276
9559
  content: {
9277
- "application/json": components["schemas"]["AsyncJobResponse"];
9560
+ "application/json": components["schemas"]["GetCourseContactImportStatusResponse"];
9561
+ };
9562
+ };
9563
+ 404: components["responses"]["NotFound"];
9564
+ };
9565
+ };
9566
+ put?: never;
9567
+ post?: never;
9568
+ delete?: never;
9569
+ options?: never;
9570
+ head?: never;
9571
+ patch?: never;
9572
+ trace?: never;
9573
+ };
9574
+ "/api/v2/contacts/export": {
9575
+ parameters: {
9576
+ query?: never;
9577
+ header?: never;
9578
+ path?: never;
9579
+ cookie?: never;
9580
+ };
9581
+ get?: never;
9582
+ put?: never;
9583
+ /** Export contacts by filter */
9584
+ post: {
9585
+ parameters: {
9586
+ query?: never;
9587
+ header?: never;
9588
+ path?: never;
9589
+ cookie?: never;
9590
+ };
9591
+ requestBody?: {
9592
+ content: {
9593
+ "application/json": components["schemas"]["ContactExportRequest"];
9594
+ };
9595
+ };
9596
+ responses: {
9597
+ 202: {
9598
+ headers: {
9599
+ [name: string]: unknown;
9600
+ };
9601
+ content: {
9602
+ "application/json": components["schemas"]["AsyncJobResponse"];
9278
9603
  };
9279
9604
  };
9280
9605
  };
@@ -12402,6 +12727,71 @@ export interface paths {
12402
12727
  patch?: never;
12403
12728
  trace?: never;
12404
12729
  };
12730
+ "/api/v2/workspaces/{workspaceId}/workbooks/{workbookId}/sheets/read": {
12731
+ parameters: {
12732
+ query?: never;
12733
+ header?: never;
12734
+ path?: never;
12735
+ cookie?: never;
12736
+ };
12737
+ /**
12738
+ * Постранично прочитать диапазон листа без записи в знания
12739
+ * @description Inspect возвращает только sample. Этот endpoint читает поздние строки и колонки,
12740
+ * возвращает явные признаки продолжения и fingerprint страницы. Для Google Sheets
12741
+ * точные total могут быть неизвестны и тогда возвращаются null.
12742
+ */
12743
+ get: {
12744
+ parameters: {
12745
+ query?: {
12746
+ sheetTitle?: string;
12747
+ sheetGid?: number;
12748
+ sheetIndex?: number;
12749
+ rowOffset?: number;
12750
+ rowLimit?: number;
12751
+ columnOffset?: number;
12752
+ columnLimit?: number;
12753
+ };
12754
+ header?: never;
12755
+ path: {
12756
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
12757
+ workbookId: string;
12758
+ };
12759
+ cookie?: never;
12760
+ };
12761
+ requestBody?: never;
12762
+ responses: {
12763
+ 200: {
12764
+ headers: {
12765
+ [name: string]: unknown;
12766
+ };
12767
+ content: {
12768
+ "application/json": components["schemas"]["WorkbookSheetPage"];
12769
+ };
12770
+ };
12771
+ /** @description Селектор листа неоднозначен или не подходит типу книги */
12772
+ 400: {
12773
+ headers: {
12774
+ [name: string]: unknown;
12775
+ };
12776
+ content?: never;
12777
+ };
12778
+ /** @description SourceWorkbook */
12779
+ 404: {
12780
+ headers: {
12781
+ [name: string]: unknown;
12782
+ };
12783
+ content?: never;
12784
+ };
12785
+ };
12786
+ };
12787
+ put?: never;
12788
+ post?: never;
12789
+ delete?: never;
12790
+ options?: never;
12791
+ head?: never;
12792
+ patch?: never;
12793
+ trace?: never;
12794
+ };
12405
12795
  "/api/v2/workspaces/{workspaceId}/workbooks/{workbookId}/extract-amocrm-leads": {
12406
12796
  parameters: {
12407
12797
  query?: never;
@@ -12782,7 +13172,7 @@ export interface paths {
12782
13172
  put?: never;
12783
13173
  /**
12784
13174
  * Переиндексация knowledge space (re-embed Qa + KnowledgeChunk → Pinecone)
12785
- * @description Идемпотентная фоновая пересборка векторов из Postgres — восстанавливает поиск после рассинхрона Postgres↔Pinecone (v1.5 Increment 15). Возвращает job_id сразу; итог фоновой BullMQ-задачи `knowledge-namespace-reindex` — в логах воркера.
13175
+ * @description Идемпотентная фоновая пересборка векторов из Postgres — восстанавливает поиск после рассинхрона Postgres↔Pinecone (v1.5 Increment 15). Возвращает job_id сразу; итог фоновой BullMQ-задачи доступен через status endpoint в течение 24 часов.
12786
13176
  */
12787
13177
  post: {
12788
13178
  parameters: {
@@ -12816,6 +13206,44 @@ export interface paths {
12816
13206
  patch?: never;
12817
13207
  trace?: never;
12818
13208
  };
13209
+ "/api/v2/workspaces/{workspaceId}/knowledge-spaces/{knowledgeSpaceId}/reindex/status": {
13210
+ parameters: {
13211
+ query?: never;
13212
+ header?: never;
13213
+ path?: never;
13214
+ cookie?: never;
13215
+ };
13216
+ /** Статус фоновой переиндексации knowledge space */
13217
+ get: {
13218
+ parameters: {
13219
+ query?: never;
13220
+ header?: never;
13221
+ path: {
13222
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
13223
+ knowledgeSpaceId: string;
13224
+ };
13225
+ cookie?: never;
13226
+ };
13227
+ requestBody?: never;
13228
+ responses: {
13229
+ 200: {
13230
+ headers: {
13231
+ [name: string]: unknown;
13232
+ };
13233
+ content: {
13234
+ "application/json": components["schemas"]["AsyncJobStatusResponse"];
13235
+ };
13236
+ };
13237
+ };
13238
+ };
13239
+ put?: never;
13240
+ post?: never;
13241
+ delete?: never;
13242
+ options?: never;
13243
+ head?: never;
13244
+ patch?: never;
13245
+ trace?: never;
13246
+ };
12819
13247
  "/api/v2/workspaces/{workspaceId}/knowledge-spaces/{knowledgeSpaceId}/channel-links": {
12820
13248
  parameters: {
12821
13249
  query?: never;
@@ -13800,6 +14228,45 @@ export interface paths {
13800
14228
  patch?: never;
13801
14229
  trace?: never;
13802
14230
  };
14231
+ "/api/v2/workspaces/{workspaceId}/knowledge-spaces/{knowledgeSpaceId}/tables/{tableId}/reindex/status": {
14232
+ parameters: {
14233
+ query?: never;
14234
+ header?: never;
14235
+ path?: never;
14236
+ cookie?: never;
14237
+ };
14238
+ /** Статус фоновой переиндексации knowledge table */
14239
+ get: {
14240
+ parameters: {
14241
+ query?: never;
14242
+ header?: never;
14243
+ path: {
14244
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
14245
+ knowledgeSpaceId: string;
14246
+ tableId: string;
14247
+ };
14248
+ cookie?: never;
14249
+ };
14250
+ requestBody?: never;
14251
+ responses: {
14252
+ 200: {
14253
+ headers: {
14254
+ [name: string]: unknown;
14255
+ };
14256
+ content: {
14257
+ "application/json": components["schemas"]["AsyncJobStatusResponse"];
14258
+ };
14259
+ };
14260
+ };
14261
+ };
14262
+ put?: never;
14263
+ post?: never;
14264
+ delete?: never;
14265
+ options?: never;
14266
+ head?: never;
14267
+ patch?: never;
14268
+ trace?: never;
14269
+ };
13803
14270
  "/api/v2/workspaces/{workspaceId}/variables": {
13804
14271
  parameters: {
13805
14272
  query?: never;
@@ -19352,6 +19819,91 @@ export interface paths {
19352
19819
  patch?: never;
19353
19820
  trace?: never;
19354
19821
  };
19822
+ "/api/v2/workspaces/{workspaceId}/analytics/inbound/{report}": {
19823
+ parameters: {
19824
+ query?: never;
19825
+ header?: never;
19826
+ path?: never;
19827
+ cookie?: never;
19828
+ };
19829
+ /** Агрегаты органических входящих диалогов */
19830
+ get: operations["getInboundAnalytics"];
19831
+ put?: never;
19832
+ post?: never;
19833
+ delete?: never;
19834
+ options?: never;
19835
+ head?: never;
19836
+ patch?: never;
19837
+ trace?: never;
19838
+ };
19839
+ "/api/v2/workspaces/{workspaceId}/analytics/funnel/{report}": {
19840
+ parameters: {
19841
+ query?: never;
19842
+ header?: never;
19843
+ path?: never;
19844
+ cookie?: never;
19845
+ };
19846
+ /** Мета, сводка или недельные когорты воронки площадки */
19847
+ get: operations["getFunnelAnalytics"];
19848
+ put?: never;
19849
+ post?: never;
19850
+ delete?: never;
19851
+ options?: never;
19852
+ head?: never;
19853
+ patch?: never;
19854
+ trace?: never;
19855
+ };
19856
+ "/api/v2/workspaces/{workspaceId}/analytics/costs/{report}": {
19857
+ parameters: {
19858
+ query?: never;
19859
+ header?: never;
19860
+ path?: never;
19861
+ cookie?: never;
19862
+ };
19863
+ /** Фактический AI usage ledger и его разрезы */
19864
+ get: operations["getAiCosts"];
19865
+ put?: never;
19866
+ post?: never;
19867
+ delete?: never;
19868
+ options?: never;
19869
+ head?: never;
19870
+ patch?: never;
19871
+ trace?: never;
19872
+ };
19873
+ "/api/v2/workspaces/{workspaceId}/custom-reports": {
19874
+ parameters: {
19875
+ query?: never;
19876
+ header?: never;
19877
+ path?: never;
19878
+ cookie?: never;
19879
+ };
19880
+ /** Список сохранённых кастомных отчётов */
19881
+ get: operations["listCustomReports"];
19882
+ put?: never;
19883
+ post?: never;
19884
+ delete?: never;
19885
+ options?: never;
19886
+ head?: never;
19887
+ patch?: never;
19888
+ trace?: never;
19889
+ };
19890
+ "/api/v2/workspaces/{workspaceId}/custom-reports/{reportId}": {
19891
+ parameters: {
19892
+ query?: never;
19893
+ header?: never;
19894
+ path?: never;
19895
+ cookie?: never;
19896
+ };
19897
+ /** Определение сохранённого кастомного отчёта */
19898
+ get: operations["getCustomReport"];
19899
+ put?: never;
19900
+ post?: never;
19901
+ delete?: never;
19902
+ options?: never;
19903
+ head?: never;
19904
+ patch?: never;
19905
+ trace?: never;
19906
+ };
19355
19907
  "/api/v2/workspaces/{workspaceId}/custom-reports/{reportId}/report": {
19356
19908
  parameters: {
19357
19909
  query?: never;
@@ -19372,7 +19924,7 @@ export interface paths {
19372
19924
  patch?: never;
19373
19925
  trace?: never;
19374
19926
  };
19375
- "/api/v2/workspaces/{workspaceId}/custom-reports/{reportId}/drilldown": {
19927
+ "/api/v2/workspaces/{workspaceId}/operational-overview": {
19376
19928
  parameters: {
19377
19929
  query?: never;
19378
19930
  header?: never;
@@ -19380,10 +19932,10 @@ export interface paths {
19380
19932
  cookie?: never;
19381
19933
  };
19382
19934
  /**
19383
- * Контакты и сделки за числом сохранённой таблицы
19384
- * @description Возвращает конкретные исполнения, контакты или сделки за числовой ячейкой источников «Обзор», «Фоллоу-апы» и «Перс воронка». Сервер перечитывает определение отчёта и проверяет updatedAt; сводная передаёт полный путь строки. Snapshot и fingerprint обязательны только для personalized-источника. Для процентной колонки раскрывается фактический числитель.
19935
+ * Эксплуатационная сводка воркспейса
19936
+ * @description Возвращает состояние follow-up цепочек, расписаний и последних задач, безопасные метаданные ошибок действий и предупреждения с drill-down. Очередь операторов включается только когда effective scopes текущего вызова содержат read:conversations; иначе ответ явно сообщает missingScope.
19385
19937
  */
19386
- get: operations["getCustomReportDrilldown"];
19938
+ get: operations["getWorkspaceOperationalOverview"];
19387
19939
  put?: never;
19388
19940
  post?: never;
19389
19941
  delete?: never;
@@ -19392,28 +19944,103 @@ export interface paths {
19392
19944
  patch?: never;
19393
19945
  trace?: never;
19394
19946
  };
19395
- }
19396
- export type webhooks = Record<string, never>;
19397
- export interface components {
19398
- schemas: {
19399
- TriggerContactClaim: {
19400
- /** Format: uuid */
19401
- triggerId: string;
19402
- triggerName: string;
19403
- /** Format: uuid */
19404
- agentId: string;
19405
- agentName: string | null;
19406
- /** @enum {string} */
19407
- status: "IN_PROGRESS" | "COMPLETED";
19408
- /** Format: date-time */
19409
- claimedAt: string;
19410
- /** @description false у status=IN_PROGRESS — право держит владелец */
19411
- canReset: boolean;
19412
- /** @enum {string|null} */
19413
- blockedReason: "RUNNING" | null;
19414
- triggerIsEnabled: boolean;
19415
- /** @description Осталась ли включённой настройка «сработать один раз». Право переживает её выключение: тогда строка висит, но триггер срабатывает как обычный. */
19416
- stillOneTime: boolean;
19947
+ "/api/v2/workspaces/{workspaceId}/workspace-operators": {
19948
+ parameters: {
19949
+ query?: never;
19950
+ header?: never;
19951
+ path?: never;
19952
+ cookie?: never;
19953
+ };
19954
+ /** Системные операторы Besales для фильтра и назначения */
19955
+ get: operations["listWorkspaceOperatorsForWorkflow"];
19956
+ put?: never;
19957
+ post?: never;
19958
+ delete?: never;
19959
+ options?: never;
19960
+ head?: never;
19961
+ patch?: never;
19962
+ trace?: never;
19963
+ };
19964
+ "/api/v2/workspaces/{workspaceId}/operator-queue": {
19965
+ parameters: {
19966
+ query?: never;
19967
+ header?: never;
19968
+ path?: never;
19969
+ cookie?: never;
19970
+ };
19971
+ /** Пагинированная очередь живых операторов */
19972
+ get: operations["listWorkspaceOperatorQueue"];
19973
+ put?: never;
19974
+ post?: never;
19975
+ delete?: never;
19976
+ options?: never;
19977
+ head?: never;
19978
+ patch?: never;
19979
+ trace?: never;
19980
+ };
19981
+ "/api/v2/workspaces/{workspaceId}/chats/{contactId}/operator-assignment": {
19982
+ parameters: {
19983
+ query?: never;
19984
+ header?: never;
19985
+ path?: never;
19986
+ cookie?: never;
19987
+ };
19988
+ /** Текущее назначение оператора и CAS-версия */
19989
+ get: operations["getWorkspaceOperatorAssignment"];
19990
+ put?: never;
19991
+ post?: never;
19992
+ delete?: never;
19993
+ options?: never;
19994
+ head?: never;
19995
+ /**
19996
+ * Назначить, переназначить или снять системного оператора
19997
+ * @description CAS-операция меняет только локальное назначение Besales. Она не меняет CRM operator, operatorStatus и не отправляет сообщение.
19998
+ */
19999
+ patch: operations["updateWorkspaceOperatorAssignment"];
20000
+ trace?: never;
20001
+ };
20002
+ "/api/v2/workspaces/{workspaceId}/custom-reports/{reportId}/drilldown": {
20003
+ parameters: {
20004
+ query?: never;
20005
+ header?: never;
20006
+ path?: never;
20007
+ cookie?: never;
20008
+ };
20009
+ /**
20010
+ * Контакты и сделки за числом сохранённой таблицы
20011
+ * @description Возвращает конкретные исполнения, контакты или сделки за числовой ячейкой источников «Обзор», «Фоллоу-апы» и «Перс воронка». Сервер перечитывает определение отчёта и проверяет updatedAt; сводная передаёт полный путь строки. Snapshot и fingerprint обязательны только для personalized-источника. Для процентной колонки раскрывается фактический числитель.
20012
+ */
20013
+ get: operations["getCustomReportDrilldown"];
20014
+ put?: never;
20015
+ post?: never;
20016
+ delete?: never;
20017
+ options?: never;
20018
+ head?: never;
20019
+ patch?: never;
20020
+ trace?: never;
20021
+ };
20022
+ }
20023
+ export type webhooks = Record<string, never>;
20024
+ export interface components {
20025
+ schemas: {
20026
+ TriggerContactClaim: {
20027
+ /** Format: uuid */
20028
+ triggerId: string;
20029
+ triggerName: string;
20030
+ /** Format: uuid */
20031
+ agentId: string;
20032
+ agentName: string | null;
20033
+ /** @enum {string} */
20034
+ status: "IN_PROGRESS" | "COMPLETED";
20035
+ /** Format: date-time */
20036
+ claimedAt: string;
20037
+ /** @description false у status=IN_PROGRESS — право держит владелец */
20038
+ canReset: boolean;
20039
+ /** @enum {string|null} */
20040
+ blockedReason: "RUNNING" | null;
20041
+ triggerIsEnabled: boolean;
20042
+ /** @description Осталась ли включённой настройка «сработать один раз». Право переживает её выключение: тогда строка висит, но триггер срабатывает как обычный. */
20043
+ stillOneTime: boolean;
19417
20044
  };
19418
20045
  TriggerContactClaimsPage: {
19419
20046
  claims: components["schemas"]["TriggerContactClaim"][];
@@ -19469,6 +20096,125 @@ export interface components {
19469
20096
  dayOffset?: number;
19470
20097
  atTime?: string;
19471
20098
  };
20099
+ /** @description Pass-through ответа канонической UI-витрины. Конкретная форма зависит от report и сохраняется без пересчёта адаптером; nullable и unknown-поля имеют доменный смысл. */
20100
+ AnalyticsAggregateResponse: {
20101
+ [key: string]: unknown;
20102
+ };
20103
+ OperationalOverviewWarning: {
20104
+ /** @enum {string} */
20105
+ severity: "info" | "warning" | "critical";
20106
+ code: string;
20107
+ sourceType: string;
20108
+ sourceId: string;
20109
+ /** Format: date-time */
20110
+ occurredAt: string | null;
20111
+ reason: string;
20112
+ drilldown: {
20113
+ type: string;
20114
+ id: string;
20115
+ };
20116
+ };
20117
+ OperationalOverviewResponse: {
20118
+ /** Format: date-time */
20119
+ generatedAt: string;
20120
+ summary: {
20121
+ [key: string]: number;
20122
+ };
20123
+ followUp: {
20124
+ [key: string]: unknown;
20125
+ };
20126
+ schedules: {
20127
+ [key: string]: unknown;
20128
+ }[];
20129
+ jobs: {
20130
+ [key: string]: unknown;
20131
+ }[];
20132
+ actionErrors: {
20133
+ [key: string]: unknown;
20134
+ }[];
20135
+ operatorQueue: {
20136
+ [key: string]: unknown;
20137
+ };
20138
+ warnings: components["schemas"]["OperationalOverviewWarning"][];
20139
+ };
20140
+ WorkspaceOperatorOption: {
20141
+ /** Format: uuid */
20142
+ id: string;
20143
+ displayName: string | null;
20144
+ assignable: boolean;
20145
+ /** @enum {string} */
20146
+ operatorType: "WORKSPACE";
20147
+ };
20148
+ WorkspaceOperatorIdentity: {
20149
+ /** Format: uuid */
20150
+ id: string;
20151
+ displayName: string | null;
20152
+ };
20153
+ OperatorWorkflowEvidence: {
20154
+ /** Format: uuid */
20155
+ id: string;
20156
+ /** @enum {string} */
20157
+ eventType: "OPERATOR_TAKEOVER" | "FINISH_RESOLVED";
20158
+ /** Format: date-time */
20159
+ occurredAt: string;
20160
+ };
20161
+ WorkspaceOperatorAssignmentState: {
20162
+ /** Format: uuid */
20163
+ contactId: string;
20164
+ /** @enum {string|null} */
20165
+ status: "WAITING_OPERATOR" | "IN_PROGRESS" | "WAITING_CUSTOMER" | "RESOLVED" | null;
20166
+ /** Format: date-time */
20167
+ statusUpdatedAt: string | null;
20168
+ /** Format: uuid */
20169
+ workspaceOperatorId: string | null;
20170
+ /** Format: date-time */
20171
+ assignedAt: string | null;
20172
+ operatorDisplayName: string | null;
20173
+ workflowEvidence: components["schemas"]["OperatorWorkflowEvidence"] | null;
20174
+ };
20175
+ OperatorQueueResponse: {
20176
+ data: {
20177
+ [key: string]: unknown;
20178
+ }[];
20179
+ page: number;
20180
+ limit: number;
20181
+ total: number;
20182
+ hasMore: boolean;
20183
+ };
20184
+ UpdateWorkspaceOperatorAssignment: {
20185
+ /** Format: uuid */
20186
+ workspaceOperatorId: string | null;
20187
+ /** Format: uuid */
20188
+ expectedWorkspaceOperatorId: string | null;
20189
+ /** Format: date-time */
20190
+ expectedAssignedOperatorAt: string | null;
20191
+ };
20192
+ WorkspaceOperatorAssignmentResult: {
20193
+ changed: boolean;
20194
+ assignedOperator: components["schemas"]["WorkspaceOperatorIdentity"] | null;
20195
+ /** Format: date-time */
20196
+ assignedOperatorAt: string | null;
20197
+ };
20198
+ CustomReportDefinition: {
20199
+ /** Format: uuid */
20200
+ id: string;
20201
+ name: string;
20202
+ sourceKey: string;
20203
+ section: string;
20204
+ view: string;
20205
+ filters: {
20206
+ [key: string]: unknown;
20207
+ };
20208
+ dimensionValues: string[];
20209
+ rowDimensions: string[];
20210
+ metricKeys: string[];
20211
+ /** Format: date-time */
20212
+ archivedAt?: string | null;
20213
+ /** Format: date-time */
20214
+ createdAt?: string;
20215
+ /** Format: date-time */
20216
+ updatedAt: string;
20217
+ };
19472
20218
  CustomReportDataResponse: {
19473
20219
  metricKeys: string[];
19474
20220
  dimensionValues: string[];
@@ -19751,6 +20497,10 @@ export interface components {
19751
20497
  createdAfter?: string;
19752
20498
  contacts?: components["schemas"]["GetCourseColdWelcomeContact"][];
19753
20499
  channels?: components["schemas"]["GetCourseTransport"][];
20500
+ /** @description Метка сегмента запуска. Ею считается правило «этим сегментом человеку уже уходило»: без неё прогноз правил (policyForecast) по этому правилу структурно пуст, и ноль читается как «проверили, никого». Аудиторию метка не отбирает. */
20501
+ segment?: string;
20502
+ /** @description Разовый текст запуска — им считается правило «тот же текст не дважды» (журнал касаний ключуется отпечатком шаблона). Для запуска с сохранённой рассылкой не нужен: текст берётся из неё тем же резолвером, что на старте, включая посегментные тексты. */
20503
+ message?: string;
19754
20504
  /** @deprecated */
19755
20505
  channelsMode?: components["schemas"]["ColdWelcomeChannelsMode"];
19756
20506
  };
@@ -19761,6 +20511,23 @@ export interface components {
19761
20511
  */
19762
20512
  ColdWelcomeChannelsMode: "RESTRICT" | "ADD";
19763
20513
  GetCourseColdWelcomePreviewResponse: {
20514
+ /** @description ПРОГНОЗ ПРАВИЛ ОТПРАВКИ на момент запроса, а не обещание. Блокирует одна точка — пересчёт правил постранично вплотную к транспорту, и между предпросмотром и отправкой человек успевает зарегистрироваться на эфир или получить это же касание другим запуском. Причины ВЗАИМНО ИСКЛЮЧАЮТ друг друга (сервер возвращает первую сработавшую), поэтому сумма — это ЛЮДИ, а не срабатывания. Считается по МЕТКЕ и ТЕКСТУ запроса: без segment (и без message у запуска разовым текстом) соответствующие правила дают нули. */
20515
+ policyForecast?: {
20516
+ blockedBy: {
20517
+ /** @description Этим сегментом человеку уже уходило НАШЕЙ отправкой. Периметр строго наш (волна школы тем же ярлыком отправкой здесь не считается — иначе запрет накрыл бы 37 % отправок; замер прода 10.09.2026). */
20518
+ alreadySentSegment: number;
20519
+ /** @description Уже получал «Первое сообщение» — оно одноразово НА ЧЕЛОВЕКА. */
20520
+ alreadyGreeted: number;
20521
+ /** @description Идёт эпизод регистрации: приветствие ДОЛЖНЫ и не отдали либо подготовлен повторный вход на новый эфир. Считается ПО ЧЕЛОВЕКУ, без скоупа площадки. */
20522
+ activeEpisode: number;
20523
+ /** @description Тихий период: человека трогали (нашей отправкой либо шагом календарной цепочки) внутри окна. Окно резолвится настройками — перекрытие рассылки, затем площадка, затем воркспейс, затем 0. По умолчанию 0, то есть правило выключено, пока оператор его не выставит; рекомендация — 7 суток. Волна школы касанием НЕ считается. Расписания судятся своим cooldownDays. */
20524
+ cooldown: number;
20525
+ };
20526
+ /** @description Тот же ТЕКСТ уже занят в журнале касаний под ДРУГИМ ярлыком. Отдельно от blockedBy: это не правило владельца, а атомарное право — «тот же текст не дважды» держится строкой журнала, а не читающей проверкой. */
20527
+ touchClaimed: number;
20528
+ /** @description ИНФОРМАЦИЯ, а не запрет: этим же ярлыком человека рассылал ВНЕШНИЙ механизм — волна школы своими процессами либо шаблон Wazzup. Наш догон в мессенджерах уйдёт как обычно: так работает штатный процесс. В отсев это число НЕ входит. */
20529
+ externalWaveTouched: number;
20530
+ };
19764
20531
  /** @description Выбранные каналы, которых НЕТ в allowlist площадки: они не уедут ни в каком режиме. Чинится галочкой в настройках площадки, поэтому возвращаются ИМЕНАМИ, а не числом. */
19765
20532
  channelsNotAllowedByPlatform?: components["schemas"]["GetCourseTransport"][];
19766
20533
  /** @description Сколько ещё МОЖЕТ получить первое сообщение. */
@@ -19809,6 +20576,28 @@ export interface components {
19809
20576
  alreadyRunning: boolean;
19810
20577
  refreshableVariables: string[];
19811
20578
  };
20579
+ GetCourseAnchorRefreshStatusResponse: {
20580
+ correlationId: string;
20581
+ /** Format: uuid */
20582
+ platformId: string;
20583
+ /** @enum {string} */
20584
+ status: "RUNNING" | "COMPLETED" | "FAILED" | "STALLED";
20585
+ result: {
20586
+ correlationId: string;
20587
+ contactsScanned: number;
20588
+ outcomes: {
20589
+ [key: string]: number;
20590
+ };
20591
+ changedByVariable: {
20592
+ [key: string]: number;
20593
+ };
20594
+ } | null;
20595
+ error: string | null;
20596
+ /** Format: date-time */
20597
+ startedAt: string;
20598
+ /** Format: date-time */
20599
+ finishedAt: string | null;
20600
+ };
19812
20601
  /** @description Ровно один источник текста (message ЛИБО mailingVariantId) и ровно одна аудитория (createdAfter ЛИБО contacts). */
19813
20602
  GetCourseColdWelcomeLaunchRequest: {
19814
20603
  /**
@@ -20181,6 +20970,32 @@ export interface components {
20181
20970
  } & {
20182
20971
  [key: string]: unknown;
20183
20972
  };
20973
+ TriggerActionCatalogItem: {
20974
+ actionType: string;
20975
+ title: string;
20976
+ configInputKey: string | null;
20977
+ responseRelation: string | null;
20978
+ configRequired: boolean;
20979
+ /** @enum {string} */
20980
+ requiredScope: "mcp:platform-setup";
20981
+ requiredRelations: string[];
20982
+ effect: string;
20983
+ verification: string;
20984
+ actionSchema: {
20985
+ [key: string]: unknown;
20986
+ };
20987
+ minimalExample: {
20988
+ [key: string]: unknown;
20989
+ };
20990
+ };
20991
+ TriggerActionCatalogResponse: {
20992
+ /** @enum {string} */
20993
+ source: "CreateTriggerActionDto+TRIGGER_ACTION_CONFIG";
20994
+ /** @enum {boolean} */
20995
+ complete: true;
20996
+ total: number;
20997
+ items: components["schemas"]["TriggerActionCatalogItem"][];
20998
+ };
20184
20999
  ConfirmableSetupMutation: {
20185
21000
  explicitConfirmation?: boolean;
20186
21001
  confirmationReason?: string;
@@ -20864,6 +21679,8 @@ export interface components {
20864
21679
  guardActiveSeries?: components["schemas"]["OutboundGuardMode"];
20865
21680
  guardActiveApplication?: components["schemas"]["OutboundGuardMode"];
20866
21681
  guardPaid?: components["schemas"]["OutboundGuardMode"];
21682
+ /** @description Quiet period in days after ANY touch OF OURS (a send or a calendar-chain follow-up step). Counted PER PERSON across the workspace; a school wave does NOT count as a touch (measured: the wide perimeter would have blocked 15.3% of our sends). null = not configured, effective value 0 (rule disabled); the owner recommends 7. Schedules are NOT judged by this number — they have their own cooldownDays. */
21683
+ quietDays?: number | null;
20867
21684
  /** @description Transport → exact deal custom field NAME (read API returns no field ids). Clear with {}. */
20868
21685
  deliveryFieldMap?: {
20869
21686
  [key: string]: string;
@@ -21049,6 +21866,50 @@ export interface components {
21049
21866
  suggestedNextPhase: "1" | "2" | "3" | "4" | "5" | "6" | null;
21050
21867
  };
21051
21868
  };
21869
+ WorkspaceNavigationRequest: {
21870
+ /** @enum {string} */
21871
+ intent: "CREATE_BOT" | "IMPROVE_AGENT" | "DIAGNOSE_CONTACT" | "AUDIT_DIALOGUES" | "CAMPAIGN_REPORT" | "CONNECT_CRM" | "CONNECT_DATASOURCE" | "CONFIGURE_FOLLOWUP" | "CONTINUE_TASK" | "FREEFORM";
21872
+ /** @enum {string} */
21873
+ botType?: "FAQ" | "SALES" | "BOOKING" | "OUTBOUND" | "SUPPORT" | "UNKNOWN";
21874
+ /** Format: uuid */
21875
+ platformId?: string;
21876
+ /** Format: uuid */
21877
+ agentId?: string;
21878
+ /** Format: uuid */
21879
+ contactId?: string;
21880
+ /** Format: uuid */
21881
+ taskId?: string;
21882
+ question?: string;
21883
+ };
21884
+ WorkspaceNavigationResponse: {
21885
+ objective: string;
21886
+ intent: components["schemas"]["WorkspaceNavigationRequest"]["intent"];
21887
+ /** @enum {string|null} */
21888
+ botType: "FAQ" | "SALES" | "BOOKING" | "OUTBOUND" | "SUPPORT" | "UNKNOWN" | null;
21889
+ selectedObjects: {
21890
+ type: string;
21891
+ id: string;
21892
+ label: string | null;
21893
+ }[];
21894
+ completed: string[];
21895
+ missing: string[];
21896
+ requiredUserInput: {
21897
+ field: string;
21898
+ reason: string;
21899
+ options?: string[];
21900
+ }[];
21901
+ next: {
21902
+ tool: string;
21903
+ arguments: {
21904
+ [key: string]: unknown;
21905
+ };
21906
+ reason: string;
21907
+ verifyWith: string;
21908
+ } | null;
21909
+ finishCondition: string;
21910
+ /** @enum {string} */
21911
+ evidenceSource: "live_workspace_overview";
21912
+ };
21052
21913
  CreateSetupSessionRequest: {
21053
21914
  /** Format: uuid */
21054
21915
  workspaceId: string;
@@ -21447,6 +22308,8 @@ export interface components {
21447
22308
  writtenAt?: string;
21448
22309
  };
21449
22310
  StartSandboxRunRequest: {
22311
+ /** @description Неактивированный системный промпт для изолированной проверки. Допустим только при options.mode=single_agent, действует лишь внутри sandbox run и не меняет production AgentChat или PromptVersion. */
22312
+ candidatePrompt?: string;
21450
22313
  /** @description Test scenarios to run (default — all linked to agent's ICP) */
21451
22314
  scenarioIds?: string[];
21452
22315
  options?: {
@@ -22247,15 +23110,21 @@ export interface components {
22247
23110
  callbackUrl?: string;
22248
23111
  sourceChannel?: string;
22249
23112
  };
22250
- ProvisionedExternalApiChannel: {
23113
+ IssuedCredentialReveal: {
23114
+ /** @description Одноразовая ссылка для вошедшего человека */
23115
+ revealUrl: string;
23116
+ /** Format: date-time */
23117
+ revealExpiresAt: string;
23118
+ };
23119
+ ExternalApiChannelCreated: {
22251
23120
  /** Format: uuid */
22252
23121
  channelId: string;
22253
- /** @description Bearer-ключ партнёра для входящих (показывается ОДИН раз) */
22254
- apiKey: string;
22255
- /** @description Секрет HMAC-подписи колбэков (показывается ОДИН раз) */
22256
- webhookSecret: string;
22257
23122
  /** @description Путь приёма входящих: /api/v2/channels/{channelId}/messages */
22258
23123
  ingestPath: string;
23124
+ /** @description Одноразовая ссылка для вошедшего человека */
23125
+ revealUrl: string;
23126
+ /** Format: date-time */
23127
+ revealExpiresAt: string;
22259
23128
  };
22260
23129
  /** @enum {string} */
22261
23130
  CallDirection: "Inbound" | "Outbound";
@@ -23690,6 +24559,23 @@ export interface components {
23690
24559
  checkerEnabled?: boolean;
23691
24560
  errorReasons?: string[];
23692
24561
  };
24562
+ GetCourseContactImportStatusResponse: {
24563
+ /** Format: uuid */
24564
+ id: string;
24565
+ /** Format: uuid */
24566
+ workspaceId: string;
24567
+ /** @enum {string} */
24568
+ status: "RUNNING" | "COMPLETED" | "PARTIAL" | "FAILED";
24569
+ totalRows: number;
24570
+ processedRows: number;
24571
+ successCount: number;
24572
+ failedCount: number;
24573
+ errorReasons: string[];
24574
+ /** Format: date-time */
24575
+ createdAt: string;
24576
+ /** Format: date-time */
24577
+ completedAt: string | null;
24578
+ };
23693
24579
  ContactExportRequest: {
23694
24580
  /** Format: uuid */
23695
24581
  workspaceId?: string;
@@ -23935,6 +24821,8 @@ export interface components {
23935
24821
  defaultPlatformId: string | null;
23936
24822
  defaultChannels: string[];
23937
24823
  defaultDealFields: Record<string, never> | null;
24824
+ /** @description Quiet-period override for this mailing, in days. 0 means "this text may be sent inside the quiet period" — that IS the permission. null means the mailing does not override; the platform setting applies, then the workspace one, then 0. */
24825
+ quietDaysOverride: number | null;
23938
24826
  };
23939
24827
  CreateBroadcastMailingVariantRequest: {
23940
24828
  name: string;
@@ -23951,6 +24839,8 @@ export interface components {
23951
24839
  defaultPlatformId?: string | null;
23952
24840
  defaultChannels?: string[];
23953
24841
  defaultDealFields?: Record<string, never> | null;
24842
+ /** @description Quiet-period override for this mailing, in days. 0 means "this text may be sent inside the quiet period" — that IS the permission. null means the mailing does not override; the platform setting applies, then the workspace one, then 0. */
24843
+ quietDaysOverride?: number | null;
23954
24844
  };
23955
24845
  UpdateBroadcastMailingVariantRequest: {
23956
24846
  name?: string;
@@ -23968,6 +24858,8 @@ export interface components {
23968
24858
  defaultPlatformId?: string | null;
23969
24859
  defaultChannels?: string[];
23970
24860
  defaultDealFields?: Record<string, never> | null;
24861
+ /** @description Quiet-period override for this mailing, in days. 0 means "this text may be sent inside the quiet period" — that IS the permission. null means the mailing does not override; the platform setting applies, then the workspace one, then 0. */
24862
+ quietDaysOverride?: number | null;
23971
24863
  };
23972
24864
  WorkspaceLinkDomain: {
23973
24865
  /**
@@ -24268,7 +25160,9 @@ export interface components {
24268
25160
  indirect: number;
24269
25161
  indirectAmount: number;
24270
25162
  notSent: {
24271
- total: number;
25163
+ /** @description Всего не отправлено по этой волне. null — «не выяснено», а НЕ ноль: активен фильтр по измерению (воронка/сегмент/продукт), а снимок волны его не несёт — волна охватила несколько воронок. Отсев принадлежит ВОЛНЕ, у отсеянного своей воронки нет (он отсеян до отправки), поэтому какой воронке достался этот отсев — неизвестно. Ноль означал бы «никого не отсеяли», а полное число волны — цифру, за которой откроется пустой список. */
25164
+ total: number | null;
25165
+ /** @description Пусто, когда total = null. */
24272
25166
  byReason: {
24273
25167
  [key: string]: number;
24274
25168
  };
@@ -24300,6 +25194,8 @@ export interface components {
24300
25194
  total: number;
24301
25195
  failedDelivery: number;
24302
25196
  byDayProduct: components["schemas"]["BroadcastSkipDayProduct"][];
25197
+ /** @description Отсев волн, который выбранный фильтр по измерению не относит ни к одному своему значению: волна охватила несколько воронок/сегментов/продуктов, и снимок оставил ось пустой. Отсев принадлежит ВОЛНЕ — у отсеянного контакта своей воронки нет, он отсеян до отправки и строки реестра не имеет. Показывать обязательно: у Ксаматы за август 2026 таких 7157 из 9674, то есть разрез по воронкам покрывает лишь четверть отсева. 0 — фильтра по измерению нет либо распределено всё. */
25198
+ unattributed: number;
24303
25199
  };
24304
25200
  BroadcastRecipientItem: {
24305
25201
  /** Format: uuid */
@@ -25276,13 +26172,14 @@ export interface components {
25276
26172
  SandboxFinding: {
25277
26173
  /** Format: uuid */
25278
26174
  scenarioId?: string | null;
26175
+ turnIndex?: number;
25279
26176
  /** @enum {string} */
25280
- category: "hallucination" | "wrong_action" | "wrong_routing" | "missed_trigger" | "wrong_pipeline_transition" | "rag_miss" | "bad_tone" | "other";
26177
+ category: "hallucination" | "wrong_action" | "wrong_routing" | "missed_context" | "rag_miss" | "bad_tone" | "off_topic" | "contradiction" | "other";
25281
26178
  /** @enum {string} */
25282
26179
  severity: "low" | "medium" | "critical";
25283
- message: string;
25284
- suggestion?: string;
25285
- turnIndex?: number;
26180
+ description: string;
26181
+ evidence?: string;
26182
+ recommendation?: string;
25286
26183
  };
25287
26184
  /** @enum {string} */
25288
26185
  SourceWorkbookKind: "XLSX_UPLOAD" | "GOOGLE_SHEETS";
@@ -25337,11 +26234,22 @@ export interface components {
25337
26234
  /** @description Для Google Sheets — числовой gid */
25338
26235
  sheetGid?: number;
25339
26236
  sheetIndex: number;
25340
- rowCount: number;
25341
- columnCount: number;
26237
+ rowCount: number | null;
26238
+ columnCount: number | null;
26239
+ dimensionsKnown: boolean;
26240
+ /** @description Источник содержит строки за доступной parser-границей. */
26241
+ rowsTruncated?: boolean;
26242
+ /** @description Граница полного обхода Google grid; может включать пустые строки. */
26243
+ scanUpperBoundRowCount?: number;
26244
+ /** @description Граница полного обхода Google grid; может включать пустые колонки. */
26245
+ scanUpperBoundColumnCount?: number;
25342
26246
  sampleRows: components["schemas"]["SheetCellMetadata"][][];
25343
26247
  hyperlinkStats: components["schemas"]["ColumnLinkStats"][];
25344
26248
  truncated: boolean;
26249
+ readError?: {
26250
+ code: string;
26251
+ message: string;
26252
+ };
25345
26253
  };
25346
26254
  InspectWorkbookResponse: {
25347
26255
  workbook: components["schemas"]["SourceWorkbook"];
@@ -25349,6 +26257,35 @@ export interface components {
25349
26257
  totalSampleCells: number;
25350
26258
  globallyTruncated: boolean;
25351
26259
  };
26260
+ WorkbookSheetPage: {
26261
+ /** Format: uuid */
26262
+ workbookId: string;
26263
+ sourceIdentity: string;
26264
+ sheetTitle: string;
26265
+ sheetGid?: number;
26266
+ sheetIndex: number;
26267
+ rowOffset: number;
26268
+ rowLimit: number;
26269
+ returnedRowCount: number;
26270
+ columnOffset: number;
26271
+ columnLimit: number;
26272
+ returnedColumnCount: number;
26273
+ totalRowCount: number | null;
26274
+ totalColumnCount: number | null;
26275
+ dimensionsKnown: boolean;
26276
+ /** @description Часть источника лежит за доступной scan-границей; полный вывод делать нельзя. */
26277
+ sourceTruncated?: boolean;
26278
+ /** @description Граница, до которой надо пройти rowOffset для полного обхода. */
26279
+ scanUpperBoundRowCount: number;
26280
+ /** @description Граница, до которой надо пройти columnOffset для полного обхода. */
26281
+ scanUpperBoundColumnCount: number;
26282
+ rows: components["schemas"]["SheetCellMetadata"][][];
26283
+ hasMoreRows: boolean;
26284
+ hasMoreColumns: boolean;
26285
+ nextRowOffset: number | null;
26286
+ nextColumnOffset: number | null;
26287
+ pageFingerprint: string;
26288
+ };
25352
26289
  WorkbookInspectError: {
25353
26290
  /** @enum {string} */
25354
26291
  error: "google_sheets_not_shared";
@@ -25794,8 +26731,9 @@ export interface components {
25794
26731
  limit?: number;
25795
26732
  };
25796
26733
  KnowledgeTableReindexResponse: {
26734
+ job_id: string;
25797
26735
  /**
25798
- * @description QUEUED — reindex поставлен в фоновую очередь (для крупных источников вроде каталога 1С); опрашивай GET .../tables/:id → last_success_at для подтверждения завершения. INDEXED/SKIPPED — legacy синхронный результат.
26736
+ * @description QUEUED — reindex поставлен в фоновую очередь (для крупных источников вроде каталога 1С); опрашивай GET .../tables/:id/reindex/status для подтверждения завершения. INDEXED/SKIPPED — legacy синхронный результат.
25799
26737
  * @enum {string}
25800
26738
  */
25801
26739
  status: "QUEUED" | "INDEXED" | "SKIPPED";
@@ -25803,6 +26741,20 @@ export interface components {
25803
26741
  /** Format: date-time */
25804
26742
  indexed_at: string;
25805
26743
  };
26744
+ AsyncJobStatusResponse: {
26745
+ job_id: string;
26746
+ /** @enum {string} */
26747
+ status: "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "EXPIRED";
26748
+ progress: unknown;
26749
+ result: unknown;
26750
+ error: string | null;
26751
+ /** Format: date-time */
26752
+ queued_at: string | null;
26753
+ /** Format: date-time */
26754
+ started_at: string | null;
26755
+ /** Format: date-time */
26756
+ finished_at: string | null;
26757
+ };
25806
26758
  /** @enum {string} */
25807
26759
  VariableType: "TEXT" | "NUMBER" | "FLOAT" | "BOOLEAN";
25808
26760
  VariableResponse: {
@@ -26437,21 +27389,66 @@ export interface components {
26437
27389
  }
26438
27390
  export type $defs = Record<string, never>;
26439
27391
  export interface operations {
26440
- startIcpAudioImportRun: {
27392
+ AgentReadinessController_get: {
26441
27393
  parameters: {
26442
27394
  query?: never;
26443
27395
  header?: never;
26444
- path?: never;
26445
- cookie?: never;
26446
- };
26447
- requestBody: {
26448
- content: {
26449
- "application/json": components["schemas"]["StartIcpAudioImportRequest"];
27396
+ path: {
27397
+ agentId: string;
26450
27398
  };
27399
+ cookie?: never;
26451
27400
  };
27401
+ requestBody?: never;
26452
27402
  responses: {
26453
- /** @description Run accepted, items scheduled */
26454
- 202: {
27403
+ /** @description NOT_PROVEN с отдельными gates; configurationCurrent null до фиксации полной версии зависимых настроек, promptAndAgentCurrent проверяет только промпт и запись агента */
27404
+ 200: {
27405
+ headers: {
27406
+ [name: string]: unknown;
27407
+ };
27408
+ content?: never;
27409
+ };
27410
+ };
27411
+ };
27412
+ navigateWorkspaceTask: {
27413
+ parameters: {
27414
+ query?: never;
27415
+ header?: never;
27416
+ path: {
27417
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27418
+ };
27419
+ cookie?: never;
27420
+ };
27421
+ requestBody: {
27422
+ content: {
27423
+ "application/json": components["schemas"]["WorkspaceNavigationRequest"];
27424
+ };
27425
+ };
27426
+ responses: {
27427
+ 200: {
27428
+ headers: {
27429
+ [name: string]: unknown;
27430
+ };
27431
+ content: {
27432
+ "application/json": components["schemas"]["WorkspaceNavigationResponse"];
27433
+ };
27434
+ };
27435
+ };
27436
+ };
27437
+ startIcpAudioImportRun: {
27438
+ parameters: {
27439
+ query?: never;
27440
+ header?: never;
27441
+ path?: never;
27442
+ cookie?: never;
27443
+ };
27444
+ requestBody: {
27445
+ content: {
27446
+ "application/json": components["schemas"]["StartIcpAudioImportRequest"];
27447
+ };
27448
+ };
27449
+ responses: {
27450
+ /** @description Run accepted, items scheduled */
27451
+ 202: {
26455
27452
  headers: {
26456
27453
  [name: string]: unknown;
26457
27454
  };
@@ -26588,6 +27585,62 @@ export interface operations {
26588
27585
  };
26589
27586
  };
26590
27587
  };
27588
+ getContactTouchHistory: {
27589
+ parameters: {
27590
+ query?: never;
27591
+ header?: never;
27592
+ path: {
27593
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27594
+ /** @description GetCourse school-side person id (getcourse_user_id). */
27595
+ gcUserId: number;
27596
+ };
27597
+ cookie?: never;
27598
+ };
27599
+ requestBody?: never;
27600
+ responses: {
27601
+ /** @description OK */
27602
+ 200: {
27603
+ headers: {
27604
+ [name: string]: unknown;
27605
+ };
27606
+ content: {
27607
+ "application/json": {
27608
+ getcourseUserId: number;
27609
+ /** Format: date-time */
27610
+ firstWelcomeAt: string | null;
27611
+ /** @description More journal rows exist than fit in this response. */
27612
+ truncated: boolean;
27613
+ touches: {
27614
+ /** @description Touch name = the right key. Four kinds: a segment label, `text:<template fingerprint>`, `registration:<deal>`, and `legacy:welcome` (a right restored by backfill for the period before the journal existed). */
27615
+ touchKey: string;
27616
+ /** @enum {string} */
27617
+ kind: "FIRST" | "REPEAT" | "REGISTRATION";
27618
+ /** @enum {string} */
27619
+ status: "CLAIMED" | "SENT" | "UNKNOWN" | "RELEASED";
27620
+ /** Format: date-time */
27621
+ claimedAt: string;
27622
+ /** Format: date-time */
27623
+ sentAt: string | null;
27624
+ /** @description Empty for rows written before 2026-09-09 — the column did not exist yet. */
27625
+ mailingName: string | null;
27626
+ /** Format: uuid */
27627
+ platformId: string | null;
27628
+ lastError: string | null;
27629
+ }[];
27630
+ sends: {
27631
+ segment: string | null;
27632
+ /** @enum {string} */
27633
+ mode: "cold_welcome" | "registration_welcome" | "scheduled";
27634
+ /** Format: date-time */
27635
+ receivedAt: string;
27636
+ /** Format: uuid */
27637
+ platformId: string | null;
27638
+ }[];
27639
+ };
27640
+ };
27641
+ };
27642
+ };
27643
+ };
26591
27644
  listWorkspaceDataSources: {
26592
27645
  parameters: {
26593
27646
  query?: never;
@@ -26665,6 +27718,159 @@ export interface operations {
26665
27718
  };
26666
27719
  };
26667
27720
  };
27721
+ getInboundAnalytics: {
27722
+ parameters: {
27723
+ query?: {
27724
+ platformId?: string;
27725
+ channels?: string[];
27726
+ mode?: "all" | "days" | "range";
27727
+ days?: number;
27728
+ from?: string;
27729
+ to?: string;
27730
+ };
27731
+ header?: never;
27732
+ path: {
27733
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27734
+ report: "summary" | "topics" | "speed" | "money" | "cycle" | "quality";
27735
+ };
27736
+ cookie?: never;
27737
+ };
27738
+ requestBody?: never;
27739
+ responses: {
27740
+ /** @description Канонический ответ выбранной входящей витрины; null не заменяется нулём. */
27741
+ 200: {
27742
+ headers: {
27743
+ [name: string]: unknown;
27744
+ };
27745
+ content: {
27746
+ "application/json": components["schemas"]["AnalyticsAggregateResponse"];
27747
+ };
27748
+ };
27749
+ 400: components["responses"]["ValidationError"];
27750
+ 401: components["responses"]["Unauthorized"];
27751
+ 403: components["responses"]["Forbidden"];
27752
+ };
27753
+ };
27754
+ getFunnelAnalytics: {
27755
+ parameters: {
27756
+ query: {
27757
+ platformId: string;
27758
+ from?: string;
27759
+ to?: string;
27760
+ view?: "cohort" | "period";
27761
+ managerId?: number;
27762
+ };
27763
+ header?: never;
27764
+ path: {
27765
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27766
+ report: "meta" | "summary" | "cohorts";
27767
+ };
27768
+ cookie?: never;
27769
+ };
27770
+ requestBody?: never;
27771
+ responses: {
27772
+ /** @description Канонический ответ воронки с неизменным view и зерном. */
27773
+ 200: {
27774
+ headers: {
27775
+ [name: string]: unknown;
27776
+ };
27777
+ content: {
27778
+ "application/json": components["schemas"]["AnalyticsAggregateResponse"];
27779
+ };
27780
+ };
27781
+ 400: components["responses"]["ValidationError"];
27782
+ 401: components["responses"]["Unauthorized"];
27783
+ 403: components["responses"]["Forbidden"];
27784
+ 404: components["responses"]["NotFound"];
27785
+ };
27786
+ };
27787
+ getAiCosts: {
27788
+ parameters: {
27789
+ query?: {
27790
+ mode?: "all" | "days" | "range";
27791
+ days?: number;
27792
+ from?: string;
27793
+ to?: string;
27794
+ scope?: "production" | "with_tests";
27795
+ groupBy?: "customer" | "platform" | "tag" | "operation" | "provider";
27796
+ page?: number;
27797
+ limit?: number;
27798
+ };
27799
+ header?: never;
27800
+ path: {
27801
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27802
+ report: "summary" | "tasks" | "breakdown";
27803
+ };
27804
+ cookie?: never;
27805
+ };
27806
+ requestBody?: never;
27807
+ responses: {
27808
+ /** @description Ledger с отдельным числом priced и unpriced usage events. */
27809
+ 200: {
27810
+ headers: {
27811
+ [name: string]: unknown;
27812
+ };
27813
+ content: {
27814
+ "application/json": components["schemas"]["AnalyticsAggregateResponse"];
27815
+ };
27816
+ };
27817
+ 400: components["responses"]["ValidationError"];
27818
+ 401: components["responses"]["Unauthorized"];
27819
+ 403: components["responses"]["Forbidden"];
27820
+ };
27821
+ };
27822
+ listCustomReports: {
27823
+ parameters: {
27824
+ query?: never;
27825
+ header?: never;
27826
+ path: {
27827
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27828
+ };
27829
+ cookie?: never;
27830
+ };
27831
+ requestBody?: never;
27832
+ responses: {
27833
+ /** @description Неархивированные определения отчётов. */
27834
+ 200: {
27835
+ headers: {
27836
+ [name: string]: unknown;
27837
+ };
27838
+ content: {
27839
+ "application/json": {
27840
+ items: components["schemas"]["CustomReportDefinition"][];
27841
+ };
27842
+ };
27843
+ };
27844
+ 401: components["responses"]["Unauthorized"];
27845
+ 403: components["responses"]["Forbidden"];
27846
+ };
27847
+ };
27848
+ getCustomReport: {
27849
+ parameters: {
27850
+ query?: never;
27851
+ header?: never;
27852
+ path: {
27853
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27854
+ reportId: string;
27855
+ };
27856
+ cookie?: never;
27857
+ };
27858
+ requestBody?: never;
27859
+ responses: {
27860
+ /** @description Определение и версия отчёта. */
27861
+ 200: {
27862
+ headers: {
27863
+ [name: string]: unknown;
27864
+ };
27865
+ content: {
27866
+ "application/json": components["schemas"]["CustomReportDefinition"];
27867
+ };
27868
+ };
27869
+ 401: components["responses"]["Unauthorized"];
27870
+ 403: components["responses"]["Forbidden"];
27871
+ 404: components["responses"]["NotFound"];
27872
+ };
27873
+ };
26668
27874
  getCustomReportData: {
26669
27875
  parameters: {
26670
27876
  query: {
@@ -26696,6 +27902,141 @@ export interface operations {
26696
27902
  404: components["responses"]["NotFound"];
26697
27903
  };
26698
27904
  };
27905
+ getWorkspaceOperationalOverview: {
27906
+ parameters: {
27907
+ query?: never;
27908
+ header?: never;
27909
+ path: {
27910
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27911
+ };
27912
+ cookie?: never;
27913
+ };
27914
+ requestBody?: never;
27915
+ responses: {
27916
+ /** @description Текущее состояние и приоритетные предупреждения. */
27917
+ 200: {
27918
+ headers: {
27919
+ [name: string]: unknown;
27920
+ };
27921
+ content: {
27922
+ "application/json": components["schemas"]["OperationalOverviewResponse"];
27923
+ };
27924
+ };
27925
+ 401: components["responses"]["Unauthorized"];
27926
+ 403: components["responses"]["Forbidden"];
27927
+ };
27928
+ };
27929
+ listWorkspaceOperatorsForWorkflow: {
27930
+ parameters: {
27931
+ query?: never;
27932
+ header?: never;
27933
+ path: {
27934
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27935
+ };
27936
+ cookie?: never;
27937
+ };
27938
+ requestBody?: never;
27939
+ responses: {
27940
+ /** @description Только workspace operators; CRM operators в ответ не входят. */
27941
+ 200: {
27942
+ headers: {
27943
+ [name: string]: unknown;
27944
+ };
27945
+ content: {
27946
+ "application/json": components["schemas"]["WorkspaceOperatorOption"][];
27947
+ };
27948
+ };
27949
+ 401: components["responses"]["Unauthorized"];
27950
+ 403: components["responses"]["Forbidden"];
27951
+ };
27952
+ };
27953
+ listWorkspaceOperatorQueue: {
27954
+ parameters: {
27955
+ query?: {
27956
+ status?: "WAITING_OPERATOR" | "IN_PROGRESS" | "WAITING_CUSTOMER" | "RESOLVED";
27957
+ workspaceOperatorId?: string;
27958
+ contactId?: string;
27959
+ page?: number;
27960
+ limit?: number;
27961
+ };
27962
+ header?: never;
27963
+ path: {
27964
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27965
+ };
27966
+ cookie?: never;
27967
+ };
27968
+ requestBody?: never;
27969
+ responses: {
27970
+ /** @description Текущее состояние и последнее связанное доказательство workflow. */
27971
+ 200: {
27972
+ headers: {
27973
+ [name: string]: unknown;
27974
+ };
27975
+ content: {
27976
+ "application/json": components["schemas"]["OperatorQueueResponse"];
27977
+ };
27978
+ };
27979
+ 401: components["responses"]["Unauthorized"];
27980
+ 403: components["responses"]["Forbidden"];
27981
+ };
27982
+ };
27983
+ getWorkspaceOperatorAssignment: {
27984
+ parameters: {
27985
+ query?: never;
27986
+ header?: never;
27987
+ path: {
27988
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
27989
+ contactId: string;
27990
+ };
27991
+ cookie?: never;
27992
+ };
27993
+ requestBody?: never;
27994
+ responses: {
27995
+ /** @description Назначение, статус и доказательство workflow. */
27996
+ 200: {
27997
+ headers: {
27998
+ [name: string]: unknown;
27999
+ };
28000
+ content: {
28001
+ "application/json": components["schemas"]["WorkspaceOperatorAssignmentState"];
28002
+ };
28003
+ };
28004
+ 401: components["responses"]["Unauthorized"];
28005
+ 403: components["responses"]["Forbidden"];
28006
+ 404: components["responses"]["NotFound"];
28007
+ };
28008
+ };
28009
+ updateWorkspaceOperatorAssignment: {
28010
+ parameters: {
28011
+ query?: never;
28012
+ header?: never;
28013
+ path: {
28014
+ workspaceId: components["parameters"]["WorkspaceIdPath"];
28015
+ contactId: string;
28016
+ };
28017
+ cookie?: never;
28018
+ };
28019
+ requestBody: {
28020
+ content: {
28021
+ "application/json": components["schemas"]["UpdateWorkspaceOperatorAssignment"];
28022
+ };
28023
+ };
28024
+ responses: {
28025
+ /** @description Фактически сохранённое назначение. */
28026
+ 200: {
28027
+ headers: {
28028
+ [name: string]: unknown;
28029
+ };
28030
+ content: {
28031
+ "application/json": components["schemas"]["WorkspaceOperatorAssignmentResult"];
28032
+ };
28033
+ };
28034
+ 401: components["responses"]["Unauthorized"];
28035
+ 403: components["responses"]["Forbidden"];
28036
+ 404: components["responses"]["NotFound"];
28037
+ 409: components["responses"]["Conflict"];
28038
+ };
28039
+ };
26699
28040
  getCustomReportDrilldown: {
26700
28041
  parameters: {
26701
28042
  query: {