@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
@@ -104,6 +104,7 @@ function buildConfig(input) {
104
104
  export const scheduledTaskTools = [
105
105
  defineTool({
106
106
  name: 'besales_scheduled_task_list',
107
+ sideEffect: 'none',
107
108
  requiredFields: ['platform_id'],
108
109
  schema: z
109
110
  .object({
@@ -123,6 +124,7 @@ export const scheduledTaskTools = [
123
124
  }),
124
125
  defineTool({
125
126
  name: 'besales_scheduled_task_update',
127
+ sideEffect: 'write',
126
128
  requiredFields: ['platform_id', 'is_enabled'],
127
129
  schema: z
128
130
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-tasks.js","sourceRoot":"","sources":["../../../src/tools/definitions/scheduled-tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduled-tasks.js","sourceRoot":"","sources":["../../../src/tools/definitions/scheduled-tasks.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { z } from 'zod';
2
- import { WorkspaceResolutionError } from '../../auth/connection-store.js';
2
+ import { WorkspaceResolutionError, } from '../../auth/connection-store.js';
3
3
  import { getSessionWorkspaceId, setSessionWorkspaceId, } from '../../auth/session-workspace.js';
4
+ import { ApiClientError } from '../../http/api-client.js';
4
5
  import { defineTool, uuidSchema } from './shared.js';
6
+ const WORKSPACE_LABEL_TTL_MS = 24 * 60 * 60 * 1000;
5
7
  /**
6
8
  * v0.5 — пер-сессионная привязка воркспейса для GUI-хостов.
7
9
  *
@@ -13,6 +15,8 @@ import { defineTool, uuidSchema } from './shared.js';
13
15
  export const sessionTools = [
14
16
  defineTool({
15
17
  name: 'besales_workspace_use',
18
+ sideEffect: 'write',
19
+ closedWorld: true,
16
20
  requiredFields: ['workspace_id'],
17
21
  schema: z.object({
18
22
  workspace_id: uuidSchema,
@@ -23,15 +27,25 @@ export const sessionTools = [
23
27
  throw new WorkspaceResolutionError(`This session is pinned via BESALES_WORKSPACE_ID=${envPin}; in-session switch is disabled. ` +
24
28
  'Remove the env pin to use besales_workspace_use.');
25
29
  }
26
- const connections = await ctx.store.list();
27
- if (!connections.some((connection) => connection.workspaceId === input.workspace_id)) {
28
- const connected = connections.map((connection) => connection.workspaceId).join(', ') || '(none)';
30
+ const connections = await refreshConnectionLabels(ctx);
31
+ const selected = connections.find((connection) => connection.workspaceId === input.workspace_id);
32
+ if (!selected) {
33
+ const connected = connections
34
+ .map((connection) => `${connection.workspaceName ?? '(name unknown)'} [${connection.workspaceId}]`)
35
+ .join(', ') || '(none)';
29
36
  throw new WorkspaceResolutionError(`Workspace ${input.workspace_id} is not connected. Connected: ${connected}. ` +
30
37
  'Run `besales-mcp connect` for it first.');
31
38
  }
32
39
  setSessionWorkspaceId(input.workspace_id);
33
40
  return {
34
41
  workspace_id: input.workspace_id,
42
+ workspace_name: selected.workspaceName ?? null,
43
+ account_label: selected.accountLabel ?? null,
44
+ label_status: selected.labelStatus,
45
+ label_updated_at: selected.labelUpdatedAt ?? null,
46
+ label_refresh_error: selected.labelRefreshError,
47
+ effective_scopes: selected.grantedScopes ?? null,
48
+ scopes_source: selected.grantedScopes ? 'current_connection' : 'unknown',
35
49
  scope: 'session',
36
50
  message: 'This Claude session is now bound to the workspace (in-memory, until the session ends). ' +
37
51
  'Other sessions and the global default are unaffected.',
@@ -40,10 +54,13 @@ export const sessionTools = [
40
54
  }),
41
55
  defineTool({
42
56
  name: 'besales_workspace_current',
57
+ // Локальный инструмент без HTTP: только читает выбор сессии и содержимое хранилища ключей.
58
+ sideEffect: 'none',
59
+ closedWorld: true,
43
60
  requiredFields: [],
44
61
  schema: z.object({}),
45
62
  localHandler: async (_input, ctx) => {
46
- const connections = await ctx.store.list();
63
+ const connections = await refreshConnectionLabels(ctx);
47
64
  const isConnected = (id) => connections.some((connection) => connection.workspaceId === id);
48
65
  const envPin = ctx.env.BESALES_WORKSPACE_ID?.trim() || null;
49
66
  const sessionOverride = getSessionWorkspaceId() ?? null;
@@ -70,8 +87,18 @@ export const sessionTools = [
70
87
  else if (connections.length > 1) {
71
88
  source = 'ambiguous';
72
89
  }
90
+ const selected = workspaceId
91
+ ? connections.find((connection) => connection.workspaceId === workspaceId)
92
+ : undefined;
73
93
  return {
74
94
  workspace_id: workspaceId,
95
+ workspace_name: selected?.workspaceName ?? null,
96
+ account_label: selected?.accountLabel ?? null,
97
+ label_status: selected?.labelStatus ?? 'unknown',
98
+ label_updated_at: selected?.labelUpdatedAt ?? null,
99
+ label_refresh_error: selected?.labelRefreshError ?? null,
100
+ effective_scopes: selected?.grantedScopes ?? null,
101
+ scopes_source: selected?.grantedScopes ? 'current_connection' : 'unknown',
75
102
  source,
76
103
  env_pin: envPin,
77
104
  session_override: sessionOverride,
@@ -80,9 +107,80 @@ export const sessionTools = [
80
107
  workspace_id: connection.workspaceId,
81
108
  key_prefix: connection.keyPrefix,
82
109
  connected_at: connection.connectedAt,
110
+ workspace_name: connection.workspaceName ?? null,
111
+ account_label: connection.accountLabel ?? null,
112
+ label_status: connection.labelStatus,
113
+ label_updated_at: connection.labelUpdatedAt ?? null,
114
+ label_refresh_error: connection.labelRefreshError,
115
+ effective_scopes: connection.grantedScopes ?? null,
116
+ scopes_source: connection.grantedScopes ? 'current_connection' : 'unknown',
83
117
  })),
84
118
  };
85
119
  },
86
120
  }),
87
121
  ];
122
+ async function refreshConnectionLabels(ctx) {
123
+ const connections = await ctx.store.list();
124
+ return Promise.all(connections.map((connection) => refreshConnectionLabel(connection, ctx)));
125
+ }
126
+ async function refreshConnectionLabel(connection, ctx) {
127
+ if (isLabelFresh(connection.labelUpdatedAt)) {
128
+ return { ...connection, labelStatus: 'cached', labelRefreshError: null };
129
+ }
130
+ const apiKey = await ctx.store.getKey(connection.workspaceId);
131
+ if (!apiKey) {
132
+ return labelRefreshFailure(connection, 'credential_missing');
133
+ }
134
+ try {
135
+ const response = await ctx.apiClient.request('GET', '/auth/mcp-context', apiKey);
136
+ const labels = parseConnectionLabels(response, connection.workspaceId);
137
+ const updated = await ctx.store.updateLabels(connection.workspaceId, labels);
138
+ return { ...updated, labelStatus: 'current', labelRefreshError: null };
139
+ }
140
+ catch (error) {
141
+ return labelRefreshFailure(connection, classifyLabelRefreshError(error));
142
+ }
143
+ }
144
+ function isLabelFresh(value) {
145
+ if (!value)
146
+ return false;
147
+ const timestamp = Date.parse(value);
148
+ return Number.isFinite(timestamp) && Date.now() - timestamp < WORKSPACE_LABEL_TTL_MS;
149
+ }
150
+ function parseConnectionLabels(value, expectedWorkspaceId) {
151
+ if (!value || typeof value !== 'object') {
152
+ throw new Error('Invalid workspace context response');
153
+ }
154
+ const response = value;
155
+ if (response.workspace_id !== expectedWorkspaceId ||
156
+ typeof response.workspace_name !== 'string' ||
157
+ (response.account_label !== null && typeof response.account_label !== 'string') ||
158
+ !Array.isArray(response.scopes) ||
159
+ !response.scopes.every((scope) => typeof scope === 'string')) {
160
+ throw new Error('Invalid workspace context response');
161
+ }
162
+ return {
163
+ workspaceName: response.workspace_name,
164
+ accountLabel: response.account_label,
165
+ grantedScopes: response.scopes,
166
+ };
167
+ }
168
+ function classifyLabelRefreshError(error) {
169
+ if (error instanceof ApiClientError) {
170
+ if (error.status === 401)
171
+ return 'credential_expired_or_revoked';
172
+ if (error.status === 403)
173
+ return 'insufficient_scope';
174
+ if (error.status === 404)
175
+ return 'backend_update_required';
176
+ }
177
+ return 'refresh_failed';
178
+ }
179
+ function labelRefreshFailure(connection, reason) {
180
+ return {
181
+ ...connection,
182
+ labelStatus: connection.labelUpdatedAt ? 'stale' : 'unknown',
183
+ labelRefreshError: reason,
184
+ };
185
+ }
88
186
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/definitions/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/definitions/session.ts"],"names":[],"mappings":"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"}
@@ -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,16 +262,76 @@ 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>>;
199
- }, z.core.$strip>;
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
+ }>>;
200
335
  /**
201
336
  * Машинные ожидания реплики: что раннер песочницы обязан увидеть в ответе агента на неё.
202
337
  *
@@ -283,27 +418,32 @@ export declare const generatedScenarioSchema: z.ZodPipe<z.ZodObject<{
283
418
  }>>;
284
419
  export declare const sandboxFindingSchema: z.ZodObject<{
285
420
  scenario_id: z.ZodOptional<z.ZodString>;
421
+ scenarioId: z.ZodOptional<z.ZodString>;
286
422
  category: z.ZodEnum<{
287
423
  other: "other";
288
424
  hallucination: "hallucination";
289
425
  wrong_action: "wrong_action";
290
426
  bad_tone: "bad_tone";
427
+ missed_context: "missed_context";
291
428
  wrong_routing: "wrong_routing";
292
- missed_trigger: "missed_trigger";
293
- wrong_pipeline_transition: "wrong_pipeline_transition";
294
429
  rag_miss: "rag_miss";
295
430
  }>;
296
431
  severity: z.ZodEnum<{
432
+ critical: "critical";
297
433
  low: "low";
298
434
  medium: "medium";
299
- critical: "critical";
300
435
  }>;
301
- 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>;
302
440
  suggestion: z.ZodOptional<z.ZodString>;
303
441
  turn_index: z.ZodOptional<z.ZodNumber>;
442
+ turnIndex: z.ZodOptional<z.ZodNumber>;
304
443
  }, z.core.$strip>;
305
444
  export declare const simulationFindingSchema: z.ZodObject<{
306
445
  dialogue_id: z.ZodOptional<z.ZodString>;
446
+ dialogueId: z.ZodOptional<z.ZodString>;
307
447
  category: z.ZodEnum<{
308
448
  other: "other";
309
449
  hallucination: "hallucination";
@@ -314,13 +454,14 @@ export declare const simulationFindingSchema: z.ZodObject<{
314
454
  off_topic: "off_topic";
315
455
  }>;
316
456
  severity: z.ZodEnum<{
457
+ critical: "critical";
317
458
  low: "low";
318
459
  medium: "medium";
319
- critical: "critical";
320
460
  }>;
321
461
  message: z.ZodString;
322
462
  suggestion: z.ZodOptional<z.ZodString>;
323
463
  reference_message_index: z.ZodOptional<z.ZodNumber>;
464
+ referenceMessageIndex: z.ZodOptional<z.ZodNumber>;
324
465
  }, z.core.$strip>;
325
466
  export declare const routingRuleLeadStatusSchema: z.ZodObject<{
326
467
  lead_status_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -913,6 +1054,7 @@ export declare const platformGetcourseSettingsSchema: z.ZodObject<{
913
1054
  WARN: "WARN";
914
1055
  BLOCK: "BLOCK";
915
1056
  }>>>;
1057
+ quiet_days: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
916
1058
  delivery_field_map: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
917
1059
  Site: "Site";
918
1060
  Email: "Email";
@@ -956,7 +1098,7 @@ export declare function setupConfirmation(input: {
956
1098
  export declare function withInstructions(response: unknown, instructions: readonly string[]): unknown;
957
1099
  export declare function buildKnowledgeSpaceListQuery(scopeType?: string, channelId?: string): string;
958
1100
  export declare function buildListQuery(params: Record<string, string | number | boolean | string[] | undefined>): string;
959
- 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;
960
1102
  export declare function buildVariableScopeQuery(scope: 'WORKSPACE' | 'CHANNEL', platformId?: string): string;
961
1103
  export declare function buildFileListQuery(input: {
962
1104
  file_type?: string;
@@ -15,6 +15,13 @@ export const modelLaneSchema = z.enum(['CHEAP', 'STANDARD', 'DEEP']);
15
15
  export const MAX_FILE_UPLOAD_BYTES = 40 * 1024 * 1024;
16
16
  /** Верхняя граница `max_lines` в `besales_prompt_diff` — должна совпадать с DTO бэкенда. */
17
17
  export const PROMPT_DIFF_MAX_LINES_LIMIT = 1000;
18
+ /**
19
+ * Верхняя граница страницы перечня переменных — совпадает с `VARIABLES_LIST_MAX_LIMIT` бэкенда.
20
+ * Больший `limit` сервер отвергнет валидацией, поэтому граница объявлена и здесь.
21
+ */
22
+ export const VARIABLES_MAX_PAGE_SIZE = 200;
23
+ /** Максимальный размер явно запрошенной страницы списка агентов платформы. */
24
+ export const PLATFORM_AGENTS_MAX_PAGE_SIZE = 200;
18
25
  /** Потолок агентов в одном пакетном прогоне — должен совпадать с `PROMPT_BATCH_MAX_AGENTS`. */
19
26
  export const PROMPT_BATCH_MAX_AGENTS = 200;
20
27
  /** Длина ключа идемпотентности пакетного прогона — должна совпадать с DTO бэкенда. */
@@ -129,7 +136,8 @@ export const promptAnalysisStageOutputSchema = z.object({
129
136
  name: z.enum(['grammar', 'industry', 'structure', 'aggregation']),
130
137
  output: anyObjectSchema,
131
138
  });
132
- export const icpAnalysisSegmentSchema = z.object({
139
+ export const icpAnalysisSegmentSchema = z
140
+ .object({
133
141
  id: uuidSchema.optional(),
134
142
  name: z.string(),
135
143
  description: z.string().optional(),
@@ -137,16 +145,35 @@ export const icpAnalysisSegmentSchema = z.object({
137
145
  pains: z.array(z.unknown()).optional(),
138
146
  motivations: z.array(z.unknown()).optional(),
139
147
  language_style: optionalAnyObjectSchema,
140
- });
141
- export const icpAnalysisPersonaSchema = z.object({
148
+ languageStyle: optionalAnyObjectSchema,
149
+ })
150
+ .transform(({ language_style, languageStyle, ...rest }) => ({
151
+ ...rest,
152
+ language_style: language_style ?? languageStyle,
153
+ }));
154
+ export const icpAnalysisPersonaSchema = z
155
+ .object({
142
156
  name: z.string(),
143
- segment_id: uuidSchema,
157
+ segment_id: uuidSchema.optional(),
158
+ segmentId: uuidSchema.optional(),
144
159
  description: z.string().optional(),
145
160
  pain_points: z.array(z.unknown()).optional(),
161
+ painPoints: z.array(z.unknown()).optional(),
146
162
  goals: z.array(z.unknown()).optional(),
147
163
  objections: optionalAnyObjectSchema,
148
164
  messaging_hints: optionalAnyObjectSchema,
149
- });
165
+ messagingHints: optionalAnyObjectSchema,
166
+ })
167
+ .refine((persona) => persona.segment_id !== undefined || persona.segmentId !== undefined, {
168
+ message: 'segmentId is required',
169
+ path: ['segmentId'],
170
+ })
171
+ .transform(({ segment_id, segmentId, pain_points, painPoints, messaging_hints, messagingHints, ...rest }) => ({
172
+ ...rest,
173
+ segment_id: segment_id ?? segmentId,
174
+ pain_points: pain_points ?? painPoints,
175
+ messaging_hints: messaging_hints ?? messagingHints,
176
+ }));
150
177
  /**
151
178
  * Машинные ожидания реплики: что раннер песочницы обязан увидеть в ответе агента на неё.
152
179
  *
@@ -184,23 +211,31 @@ export const generatedScenarioSchema = z
184
211
  }));
185
212
  export const sandboxFindingSchema = z.object({
186
213
  scenario_id: uuidSchema.optional(),
214
+ scenarioId: uuidSchema.optional(),
187
215
  category: z.enum([
188
216
  'hallucination',
189
217
  'wrong_action',
190
218
  'wrong_routing',
191
- 'missed_trigger',
192
- 'wrong_pipeline_transition',
219
+ 'missed_context',
193
220
  'rag_miss',
194
221
  'bad_tone',
195
222
  'other',
196
223
  ]),
197
224
  severity: z.enum(['low', 'medium', 'critical']),
198
- message: z.string(),
225
+ description: z.string().optional(),
226
+ message: z.string().optional(),
227
+ evidence: z.string().optional(),
228
+ recommendation: z.string().optional(),
199
229
  suggestion: z.string().optional(),
200
230
  turn_index: z.number().int().optional(),
231
+ turnIndex: z.number().int().optional(),
232
+ }).refine((finding) => finding.description !== undefined || finding.message !== undefined, {
233
+ message: 'description is required',
234
+ path: ['description'],
201
235
  });
202
236
  export const simulationFindingSchema = z.object({
203
237
  dialogue_id: uuidSchema.optional(),
238
+ dialogueId: uuidSchema.optional(),
204
239
  category: z.enum([
205
240
  'hallucination',
206
241
  'wrong_action',
@@ -214,6 +249,7 @@ export const simulationFindingSchema = z.object({
214
249
  message: z.string(),
215
250
  suggestion: z.string().optional(),
216
251
  reference_message_index: z.number().int().optional(),
252
+ referenceMessageIndex: z.number().int().optional(),
217
253
  });
218
254
  export const routingRuleLeadStatusSchema = z.object({
219
255
  lead_status_name: z.string().nullable().optional(),
@@ -668,6 +704,13 @@ export const platformGetcourseSettingsSchema = z
668
704
  guard_active_series: guardModeEnum.nullable().optional(),
669
705
  guard_active_application: guardModeEnum.nullable().optional(),
670
706
  guard_paid: guardModeEnum.nullable().optional(),
707
+ /**
708
+ * ТИХИЙ ПЕРИОД площадки в сутках: не писать человеку N суток после НАШЕГО касания —
709
+ * отправки или шага календарной цепочки. Считается ПО ЧЕЛОВЕКУ; волна школы касанием НЕ
710
+ * считается. `null` = «не настраивали», действующее значение 0 (правила нет); рекомендация
711
+ * владельца — 7. Расписание судится своим `cooldown_days`, а не этим числом.
712
+ */
713
+ quiet_days: z.number().int().min(0).nullable().optional(),
671
714
  // «Транспорт → точное НАЗВАНИЕ кастомного поля сделки» (id в read-API GetCourse нет):
672
715
  // { "Telegram": "Отправлено ТГ", "VK": "Отправлено ВК" }. Очистка — пустым объектом {}.
673
716
  delivery_field_map: z.record(getcourseTransportEnum, z.string()).optional(),
@@ -764,7 +807,7 @@ export function buildListQuery(params) {
764
807
  const query = search.toString();
765
808
  return query.length > 0 ? `?${query}` : '';
766
809
  }
767
- export function buildVariableListQuery(scope, platformId, filter) {
810
+ export function buildVariableListQuery(scope, platformId, filter, limit, cursor) {
768
811
  const params = new URLSearchParams();
769
812
  params.set('scope', scope);
770
813
  if (platformId) {
@@ -773,6 +816,12 @@ export function buildVariableListQuery(scope, platformId, filter) {
773
816
  if (filter) {
774
817
  params.set('filter', filter);
775
818
  }
819
+ if (limit !== undefined) {
820
+ params.set('limit', String(limit));
821
+ }
822
+ if (cursor) {
823
+ params.set('cursor', cursor);
824
+ }
776
825
  const queryString = params.toString();
777
826
  return queryString ? `?${queryString}` : '';
778
827
  }
@@ -1072,6 +1121,7 @@ export function mapPlatformGetcourseSettingsInput(input) {
1072
1121
  guardActiveSeries: input.guard_active_series,
1073
1122
  guardActiveApplication: input.guard_active_application,
1074
1123
  guardPaid: input.guard_paid,
1124
+ quietDays: input.quiet_days,
1075
1125
  // Ключи map — значения enum транспортов (совпадают с camelCase-контрактом бэка) → as-is
1076
1126
  deliveryFieldMap: input.delivery_field_map,
1077
1127
  // Ручной мьют GetCourse: null → очистить поле; undefined → не трогать (compactObject стрипнет).