@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
@@ -1,20 +1,39 @@
1
1
  import { ConnectionStore, WorkspaceResolutionError } from '../auth/connection-store.js';
2
2
  import { getSessionWorkspaceId } from '../auth/session-workspace.js';
3
3
  import { ApiClient } from '../http/api-client.js';
4
+ import { toolAnnotations } from './annotations.js';
4
5
  import { getToolContract } from './contracts.js';
5
6
  import { toolDefinitions } from './definitions.js';
6
- import { jsonToolResult, mapToolError } from './result.js';
7
+ import { acceptedResponseReceipt, jsonToolResult, mapToolError } from './result.js';
8
+ import { isEnvelopeEnabled } from './result-envelope.js';
9
+ import { toolTitle } from './tool-title.js';
10
+ import { resolveVerifyToolName } from './verify-with.js';
11
+ import { TOOLSETS_ENV, assertKnownToolsets, isToolAllowed, parseToolsets } from './toolsets.js';
7
12
  const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
8
13
  export function createTools(options = {}) {
9
14
  const apiClient = options.apiClient ?? new ApiClient();
10
15
  const store = options.store ?? new ConnectionStore();
11
- return toolDefinitions.map((rawDefinition) => {
16
+ const toolsets = options.toolsets === undefined ? parseToolsets(process.env[TOOLSETS_ENV]) : options.toolsets;
17
+ assertKnownToolsets(toolDefinitions, toolsets);
18
+ const allowedDefinitions = toolDefinitions.filter((rawDefinition) => isToolAllowed(rawDefinition, toolsets));
19
+ // Называть скрытый status-tool нельзя: человек получит неисполнимый следующий шаг. Если
20
+ // профиль его не разрешает, OUTCOME_UNKNOWN честно остаётся нерешённым.
21
+ const knownToolNames = new Set(allowedDefinitions.map((one) => one.name));
22
+ // ⛔ Отбор идёт ЗДЕСЬ, до сборки. Тогда и перечисление, и вызов работают с одним набором
23
+ // по построению: второй список нечему разойтись с первым.
24
+ return allowedDefinitions
25
+ .map((rawDefinition) => {
12
26
  const definition = rawDefinition;
13
27
  const contract = getToolContract(definition.name);
14
28
  return {
15
29
  name: contract.name,
30
+ title: toolTitle(contract.description),
16
31
  description: contract.description,
17
32
  inputSchema: contract.inputSchema,
33
+ ...(isEnvelopeEnabled()
34
+ ? { outputSchema: { type: 'object', additionalProperties: true } }
35
+ : {}),
36
+ annotations: toolAnnotations(definition),
18
37
  async handler(args) {
19
38
  let resolvedWorkspaceId;
20
39
  try {
@@ -24,8 +43,10 @@ export function createTools(options = {}) {
24
43
  const localOutput = await definition.localHandler(parsedInput, {
25
44
  store,
26
45
  env: process.env,
46
+ apiClient,
47
+ availableToolNames: knownToolNames,
27
48
  });
28
- return jsonToolResult(localOutput);
49
+ return jsonToolResult(localOutput, definition.resultPolicy, definition.sideEffect);
29
50
  }
30
51
  const { workspaceId, apiKey } = await resolveWorkspace(parsedInput, definition, store);
31
52
  resolvedWorkspaceId = workspaceId;
@@ -37,18 +58,49 @@ export function createTools(options = {}) {
37
58
  const response = request.method
38
59
  ? await apiClient.request(request.method, request.path, apiKey, request.body)
39
60
  : await apiClient.post(request.path, apiKey, request.body);
40
- const output = definition.enhanceResponse
41
- ? definition.enhanceResponse(response, input)
42
- : response;
43
- return jsonToolResult(output);
61
+ try {
62
+ const output = definition.enhanceResponse
63
+ ? definition.enhanceResponse(response, input)
64
+ : response;
65
+ return jsonToolResult(output, definition.resultPolicy, definition.sideEffect);
66
+ }
67
+ catch (error) {
68
+ if (definition.sideEffect !== 'none')
69
+ return acceptedResponseReceipt(response, error);
70
+ throw error;
71
+ }
44
72
  }
45
73
  catch (error) {
46
- return mapToolError(error, definition.restartToolName, resolvedWorkspaceId);
74
+ return mapToolError(error, {
75
+ restartToolName: definition.restartToolName,
76
+ verifyWithToolName: resolveVerifyToolName(definition, knownToolNames),
77
+ sideEffect: definition.sideEffect,
78
+ idempotent: definition.idempotent,
79
+ requestIdentity: safeRequestIdentity(args),
80
+ }, resolvedWorkspaceId);
47
81
  }
48
82
  },
49
83
  };
50
84
  });
51
85
  }
86
+ function safeRequestIdentity(args) {
87
+ const safeKeys = [
88
+ 'id',
89
+ 'operation_id',
90
+ 'run_id',
91
+ 'agent_id',
92
+ 'platform_id',
93
+ 'workspace_id',
94
+ 'idempotency_key',
95
+ ];
96
+ const identity = {};
97
+ for (const key of safeKeys) {
98
+ const value = args[key];
99
+ if (typeof value === 'string' || typeof value === 'number')
100
+ identity[key] = value;
101
+ }
102
+ return Object.keys(identity).length > 0 ? identity : undefined;
103
+ }
52
104
  export const tools = createTools();
53
105
  /**
54
106
  * Выбирает воркспейс и его api_key для вызова. Приоритет (env — authoritative):
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { ToolResultPolicy } from './definitions/shared.js';
2
+ /** Потолок обычного ответа. Покрывает 95 % замеренных ответов с запасом. */
3
+ export declare const DEFAULT_RESULT_BYTES = 64000;
4
+ /**
5
+ * Порог отказа для снимков, которые обрезать нельзя. Заведомо выше наблюдаемого максимума
6
+ * работающих снимков (77,6 КБ), чтобы предохранитель не гасил живые сценарии.
7
+ */
8
+ export declare const NEVER_TRUNCATE_REFUSAL_BYTES = 256000;
9
+ /** Потолок текста ошибки: сообщение бэкенда ничем не ограничено и идёт наружу как есть. */
10
+ export declare const ERROR_MESSAGE_BYTES = 4000;
11
+ /** Потолок одного ресурса — сеть безопасности от роста справочников, а не инструмент обрезки. */
12
+ export declare const RESOURCE_BYTES = 128000;
13
+ /**
14
+ * Конверт включается переменной окружения. Дефолт — ВЫКЛЮЧЕН: README везде рекомендует
15
+ * запуск без пина версии, то есть правка доезжает до всех установок сама, посреди рабочих
16
+ * сессий. Один релиз выключенным, включение — следующим.
17
+ */
18
+ export declare const RESULT_ENVELOPE_ENV = "BESALES_MCP_RESULT_ENVELOPE";
19
+ export declare function isEnvelopeEnabled(env?: NodeJS.ProcessEnv): boolean;
20
+ export declare function byteLength(value: string): number;
21
+ export interface ShapedResult {
22
+ /** Готовый текст ответа. */
23
+ readonly text: string;
24
+ /** Ответ не влез и обрезать его было нельзя — наружу уходит отказ, а не данные. */
25
+ readonly refused: boolean;
26
+ }
27
+ /**
28
+ * Приводит значение к тексту ответа с учётом политики инструмента.
29
+ *
30
+ * Порядок: компактный JSON → влезло? → выбросить объявленные необязательные пути →
31
+ * влезло? → обрезать массив верхнего уровня → влезло? → отказ.
32
+ */
33
+ export declare function shapeToolResult(value: unknown, policy: ToolResultPolicy | undefined, enabled: boolean): ShapedResult;
34
+ /** Текст ошибки проходит тот же потолок: иначе через него уходит неограниченное сообщение. */
35
+ export declare function shapeErrorMessage(message: string): string;
36
+ export declare function shapeResourceText(uri: string, text: string): string;
37
+ interface DropOutcome {
38
+ readonly value: unknown;
39
+ readonly changed: boolean;
40
+ }
41
+ /**
42
+ * Удаляет путь из структуры, не мутируя исходную. Сегмент `[]` означает «каждый элемент
43
+ * массива»: путь `agents[].baseSystemPrompt` снимает промпт у всех агентов сразу.
44
+ */
45
+ export declare function dropPath(value: unknown, path: string): DropOutcome;
46
+ export {};
@@ -0,0 +1,184 @@
1
+ /** Потолок обычного ответа. Покрывает 95 % замеренных ответов с запасом. */
2
+ export const DEFAULT_RESULT_BYTES = 64_000;
3
+ /**
4
+ * Порог отказа для снимков, которые обрезать нельзя. Заведомо выше наблюдаемого максимума
5
+ * работающих снимков (77,6 КБ), чтобы предохранитель не гасил живые сценарии.
6
+ */
7
+ export const NEVER_TRUNCATE_REFUSAL_BYTES = 256_000;
8
+ /** Потолок текста ошибки: сообщение бэкенда ничем не ограничено и идёт наружу как есть. */
9
+ export const ERROR_MESSAGE_BYTES = 4_000;
10
+ /** Потолок одного ресурса — сеть безопасности от роста справочников, а не инструмент обрезки. */
11
+ export const RESOURCE_BYTES = 128_000;
12
+ /**
13
+ * Конверт включается переменной окружения. Дефолт — ВЫКЛЮЧЕН: README везде рекомендует
14
+ * запуск без пина версии, то есть правка доезжает до всех установок сама, посреди рабочих
15
+ * сессий. Один релиз выключенным, включение — следующим.
16
+ */
17
+ export const RESULT_ENVELOPE_ENV = 'BESALES_MCP_RESULT_ENVELOPE';
18
+ export function isEnvelopeEnabled(env = process.env) {
19
+ return (env[RESULT_ENVELOPE_ENV] ?? '').trim().toLowerCase() === 'on';
20
+ }
21
+ export function byteLength(value) {
22
+ return Buffer.byteLength(value, 'utf8');
23
+ }
24
+ /**
25
+ * Приводит значение к тексту ответа с учётом политики инструмента.
26
+ *
27
+ * Порядок: компактный JSON → влезло? → выбросить объявленные необязательные пути →
28
+ * влезло? → обрезать массив верхнего уровня → влезло? → отказ.
29
+ */
30
+ export function shapeToolResult(value, policy, enabled) {
31
+ const text = stringify(value);
32
+ if (!enabled) {
33
+ return { text, refused: false };
34
+ }
35
+ const limit = policy?.maxResultBytes ??
36
+ (policy?.neverTruncate ? NEVER_TRUNCATE_REFUSAL_BYTES : DEFAULT_RESULT_BYTES);
37
+ const size = byteLength(text);
38
+ if (size <= limit) {
39
+ return { text, refused: false };
40
+ }
41
+ const dropped = [];
42
+ let current = value;
43
+ for (const path of policy?.droppablePaths ?? []) {
44
+ const next = dropPath(current, path);
45
+ if (next.changed) {
46
+ dropped.push(path);
47
+ current = next.value;
48
+ // ⚠️ Меряется ИТОГОВАЯ строка, вместе с маркерами и подсказкой. Проверка «влезло ли
49
+ // значение» до их добавления давала ответ чуть больше объявленного потолка ровно в том
50
+ // случае, ради которого потолок и вводился, — на границе.
51
+ const marked = stringify(markDropped(current, dropped, policy));
52
+ if (byteLength(marked) <= limit) {
53
+ return { text: marked, refused: false };
54
+ }
55
+ }
56
+ }
57
+ if (policy?.neverTruncate) {
58
+ return { text: refusal(size, limit, policy), refused: true };
59
+ }
60
+ if (Array.isArray(current)) {
61
+ const kept = fitArray(current, limit, dropped.length > 0 ? dropped : undefined, policy);
62
+ if (kept) {
63
+ return { text: kept, refused: false };
64
+ }
65
+ }
66
+ return { text: refusal(size, limit, policy), refused: true };
67
+ }
68
+ /** Текст ошибки проходит тот же потолок: иначе через него уходит неограниченное сообщение. */
69
+ export function shapeErrorMessage(message) {
70
+ if (byteLength(message) <= ERROR_MESSAGE_BYTES) {
71
+ return message;
72
+ }
73
+ return `${cutToBytes(message, ERROR_MESSAGE_BYTES)}… [сообщение обрезано]`;
74
+ }
75
+ export function shapeResourceText(uri, text) {
76
+ if (byteLength(text) <= RESOURCE_BYTES) {
77
+ return text;
78
+ }
79
+ // Место под пометку резервируется заранее: иначе итог оказался бы длиннее объявленного потолка.
80
+ const notice = `\n\n[Ресурс ${uri} обрезан на ${RESOURCE_BYTES} байтах: целиком он не помещается в ответ. Дочитать нечем — справочник нужно разделить на части.]`;
81
+ return `${cutToBytes(text, RESOURCE_BYTES - byteLength(notice))}${notice}`;
82
+ }
83
+ function stringify(value) {
84
+ return JSON.stringify(value) ?? 'null';
85
+ }
86
+ function refusal(size, limit, policy) {
87
+ const hint = policy?.narrowingHint
88
+ ? ` ${policy.narrowingHint}`
89
+ : ' Сузьте запрос параметрами инструмента.';
90
+ return (`Ответ весит ${size} байт при потолке ${limit}. ` +
91
+ `Обрезать его нельзя: неполный ответ здесь неотличим от полного и приводит к потере данных при обратной записи.${hint}`);
92
+ }
93
+ function markDropped(value, dropped, policy) {
94
+ if (!isPlainObject(value)) {
95
+ return { items: value, _mcpDropped: dropped, ...hintField(policy) };
96
+ }
97
+ return { ...value, _mcpDropped: dropped, ...hintField(policy) };
98
+ }
99
+ /** Подсказка ставится ТОЛЬКО когда у инструмента есть чем сузить: общий текст был бы ложью. */
100
+ function hintField(policy) {
101
+ return policy?.narrowingHint ? { _mcpHint: policy.narrowingHint } : {};
102
+ }
103
+ /**
104
+ * Обрезка массива верхнего уровня — последнее средство и единственная форма, где смена
105
+ * формы ответа допустима: она происходит РОВНО тогда, когда обрезка реально случилась.
106
+ */
107
+ function fitArray(items, limit, dropped, policy) {
108
+ let kept = items.length;
109
+ while (kept > 0) {
110
+ const candidate = {
111
+ items: items.slice(0, kept),
112
+ _mcpTruncated: { keptItems: kept, totalItems: items.length },
113
+ ...(dropped ? { _mcpDropped: dropped } : {}),
114
+ ...hintField(policy),
115
+ };
116
+ const text = stringify(candidate);
117
+ if (byteLength(text) <= limit) {
118
+ return text;
119
+ }
120
+ kept = Math.floor(kept / 2);
121
+ }
122
+ return null;
123
+ }
124
+ /**
125
+ * Удаляет путь из структуры, не мутируя исходную. Сегмент `[]` означает «каждый элемент
126
+ * массива»: путь `agents[].baseSystemPrompt` снимает промпт у всех агентов сразу.
127
+ */
128
+ export function dropPath(value, path) {
129
+ return dropSegments(value, path.split('.').flatMap(splitArraySegment));
130
+ }
131
+ function splitArraySegment(segment) {
132
+ return segment.endsWith('[]') ? [segment.slice(0, -2), '[]'] : [segment];
133
+ }
134
+ function dropSegments(value, segments) {
135
+ const [head, ...rest] = segments;
136
+ if (head === undefined) {
137
+ return { value, changed: false };
138
+ }
139
+ if (head === '[]') {
140
+ if (!Array.isArray(value)) {
141
+ return { value, changed: false };
142
+ }
143
+ let changed = false;
144
+ const next = value.map((item) => {
145
+ const outcome = dropSegments(item, rest);
146
+ changed = changed || outcome.changed;
147
+ return outcome.value;
148
+ });
149
+ return changed ? { value: next, changed: true } : { value, changed: false };
150
+ }
151
+ if (!isPlainObject(value) || !(head in value)) {
152
+ return { value, changed: false };
153
+ }
154
+ if (rest.length === 0) {
155
+ const { [head]: _removed, ...remainder } = value;
156
+ return { value: remainder, changed: true };
157
+ }
158
+ const outcome = dropSegments(value[head], rest);
159
+ return outcome.changed ? { value: { ...value, [head]: outcome.value }, changed: true } : { value, changed: false };
160
+ }
161
+ function isPlainObject(value) {
162
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
163
+ }
164
+ /** Режет по границе кодовой точки: половина суррогатной пары наружу уходить не должна. */
165
+ function cutToBytes(text, limit) {
166
+ if (byteLength(text) <= limit) {
167
+ return text;
168
+ }
169
+ let low = 0;
170
+ let high = text.length;
171
+ while (low < high) {
172
+ const middle = Math.ceil((low + high) / 2);
173
+ if (byteLength(text.slice(0, middle)) <= limit) {
174
+ low = middle;
175
+ }
176
+ else {
177
+ high = middle - 1;
178
+ }
179
+ }
180
+ const cut = text.slice(0, low);
181
+ const lastCode = cut.charCodeAt(cut.length - 1);
182
+ return lastCode >= 0xd800 && lastCode <= 0xdbff ? cut.slice(0, -1) : cut;
183
+ }
184
+ //# sourceMappingURL=result-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-envelope.js","sourceRoot":"","sources":["../../src/tools/result-envelope.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,42 @@
1
1
  import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
- export declare function jsonToolResult(value: unknown): CallToolResult;
3
- export declare function errorToolResult(message: string): CallToolResult;
4
- export declare function mapToolError(error: unknown, restartToolName?: string, workspaceId?: string): CallToolResult;
2
+ import { type SafeApiErrorDetails } from '../http/api-client.js';
3
+ import type { ToolResultPolicy, ToolSideEffect } from './definitions/shared.js';
4
+ /**
5
+ * Единственный формат успешного ответа инструмента.
6
+ *
7
+ * ⚠️ Функция обязана быть ТОТАЛЬНОЙ. Она выполняется ПОСЛЕ успешной мутации: если она
8
+ * бросит, вызывающий увидит ошибку инструмента и повторит платный побочный эффект. Поэтому
9
+ * любой внутренний сбой форматирования отдаёт минимальную квитанцию — и БЕЗ `isError`,
10
+ * иначе получилось бы то же самое приглашение повторить.
11
+ */
12
+ export declare function jsonToolResult(value: unknown, policy?: ToolResultPolicy, sideEffect?: ToolSideEffect): CallToolResult;
13
+ /**
14
+ * Что вернуть, когда сериализовать ответ не удалось: идентификаторы созданной сущности, если
15
+ * они видны на верхнем уровне. Без них вызывающий не смог бы даже сослаться на результат
16
+ * уже состоявшейся мутации.
17
+ */
18
+ export declare function identityOf(value: unknown): Record<string, unknown>;
19
+ /** Безошибочная квитанция, когда API уже ответил, а локальная постобработка сломалась. */
20
+ export declare function acceptedResponseReceipt(value: unknown, _cause: unknown): CallToolResult;
21
+ interface StructuredToolError {
22
+ readonly code: string;
23
+ readonly message: string;
24
+ readonly status?: number;
25
+ readonly details?: SafeApiErrorDetails;
26
+ readonly continuation?: string;
27
+ readonly requestIdentity?: Readonly<Record<string, string | number>>;
28
+ }
29
+ export declare function errorToolResult(message: string, structuredError?: StructuredToolError): CallToolResult;
30
+ /**
31
+ * Что известно об инструменте в момент ошибки. Одного `restartToolName` мало: исход вызова
32
+ * читается по-разному в зависимости от того, мог ли вызов что-то изменить и безопасен ли повтор.
33
+ */
34
+ export interface ToolErrorContext {
35
+ readonly restartToolName?: string;
36
+ readonly verifyWithToolName?: string;
37
+ readonly sideEffect: ToolSideEffect;
38
+ readonly idempotent?: boolean;
39
+ readonly requestIdentity?: Readonly<Record<string, string | number>>;
40
+ }
41
+ export declare function mapToolError(error: unknown, context?: ToolErrorContext, workspaceId?: string): CallToolResult;
42
+ export {};