@besales/mcp 0.46.0 → 0.47.1
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.
- package/README.md +96 -55
- package/dist/auth/connection-store.d.ts +21 -1
- package/dist/auth/connection-store.js +46 -2
- package/dist/auth/connection-store.js.map +1 -1
- package/dist/auth/oauth-client.d.ts +5 -1
- package/dist/auth/oauth-client.js +22 -12
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/cli.js +14 -5
- package/dist/cli.js.map +1 -1
- package/dist/http/api-client.d.ts +16 -1
- package/dist/http/api-client.js +50 -2
- package/dist/http/api-client.js.map +1 -1
- package/dist/instructions/server-instructions.d.ts +4 -13
- package/dist/instructions/server-instructions.js +76 -274
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/prompts/registry.d.ts +15 -0
- package/dist/prompts/registry.js +83 -0
- package/dist/prompts/registry.js.map +1 -0
- package/dist/resources/concepts/feedback-sheets.md +7 -4
- package/dist/resources/concepts/handoff.md +4 -1
- package/dist/resources/concepts/sandbox.md +14 -5
- package/dist/resources/concepts/triggers.md +6 -2
- package/dist/resources/concepts/workbook-classification.md +26 -21
- package/dist/resources/docs/campaigns.md +20 -0
- package/dist/resources/docs/follow-up.md +19 -0
- package/dist/resources/docs/platforms.md +2 -2
- package/dist/resources/docs/routing.md +18 -0
- package/dist/resources/docs/task-state.md +30 -0
- package/dist/resources/docs/trigger-actions.md +28 -0
- package/dist/resources/docs/variables.md +18 -0
- package/dist/resources/registry.js +51 -2
- package/dist/resources/registry.js.map +1 -1
- package/dist/resources/workflows/extract-from-document.md +8 -1
- package/dist/resources/workflows/iterate-with-sandbox.md +5 -2
- package/dist/resources/workflows/platform-setup-from-scratch.md +90 -2
- package/dist/resources/workflows/production-readiness-check.md +22 -18
- package/dist/schemas/mcp-tools.json +1139 -96
- package/dist/server.d.ts +2 -0
- package/dist/server.js +8 -2
- package/dist/server.js.map +1 -1
- package/dist/tasks/task-state-store.d.ts +68 -0
- package/dist/tasks/task-state-store.js +278 -0
- package/dist/tasks/task-state-store.js.map +1 -0
- package/dist/tools/annotations.d.ts +7 -0
- package/dist/tools/annotations.js +16 -0
- package/dist/tools/annotations.js.map +1 -0
- package/dist/tools/contracts.js +7 -1
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/definitions/agent-design.d.ts +41 -20
- package/dist/tools/definitions/agent-design.js +189 -19
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/analytics.d.ts +40 -0
- package/dist/tools/definitions/analytics.js +233 -0
- package/dist/tools/definitions/analytics.js.map +1 -0
- package/dist/tools/definitions/broadcast-analytics.js +12 -0
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +2 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js +10 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +14 -1
- package/dist/tools/definitions/broadcast-scheduler.js +148 -12
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
- package/dist/tools/definitions/contacts.d.ts +15 -0
- package/dist/tools/definitions/contacts.js +84 -0
- package/dist/tools/definitions/contacts.js.map +1 -0
- package/dist/tools/definitions/crm-platform.d.ts +2 -0
- package/dist/tools/definitions/crm-platform.js +75 -5
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/datasource.d.ts +1 -0
- package/dist/tools/definitions/datasource.js +16 -1
- package/dist/tools/definitions/datasource.js.map +1 -1
- package/dist/tools/definitions/dialogue-audit.d.ts +2 -2
- package/dist/tools/definitions/dialogue-audit.js +54 -16
- package/dist/tools/definitions/dialogue-audit.js.map +1 -1
- package/dist/tools/definitions/dialogue-export.d.ts +1 -1
- package/dist/tools/definitions/dialogue-export.js +12 -0
- package/dist/tools/definitions/dialogue-export.js.map +1 -1
- package/dist/tools/definitions/external-api-channels.js +39 -12
- package/dist/tools/definitions/external-api-channels.js.map +1 -1
- package/dist/tools/definitions/follow-up-funnel-test.js +4 -0
- package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
- package/dist/tools/definitions/follow-up-setup.js +3 -0
- package/dist/tools/definitions/follow-up-setup.js.map +1 -1
- package/dist/tools/definitions/follow-up.d.ts +2 -1
- package/dist/tools/definitions/follow-up.js +11 -0
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +3 -0
- package/dist/tools/definitions/getcourse-anchor-refresh.js +29 -2
- package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +12 -2
- package/dist/tools/definitions/getcourse-cold-welcome.js +79 -4
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/getcourse-wave.js +14 -0
- package/dist/tools/definitions/getcourse-wave.js.map +1 -1
- package/dist/tools/definitions/help.d.ts +8 -0
- package/dist/tools/definitions/help.js +219 -0
- package/dist/tools/definitions/help.js.map +1 -0
- package/dist/tools/definitions/knowledge.d.ts +27 -5
- package/dist/tools/definitions/knowledge.js +200 -33
- package/dist/tools/definitions/knowledge.js.map +1 -1
- package/dist/tools/definitions/link-tracking.js +9 -0
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/model-comparison.js +6 -0
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/operational-overview.d.ts +3 -0
- package/dist/tools/definitions/operational-overview.js +23 -0
- package/dist/tools/definitions/operational-overview.js.map +1 -0
- package/dist/tools/definitions/operator-workflow.d.ts +20 -0
- package/dist/tools/definitions/operator-workflow.js +114 -0
- package/dist/tools/definitions/operator-workflow.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +26 -3
- package/dist/tools/definitions/platform-setup.js +209 -7
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/scheduled-tasks.js +2 -0
- package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
- package/dist/tools/definitions/session.js +103 -5
- package/dist/tools/definitions/session.js.map +1 -1
- package/dist/tools/definitions/shared.d.ts +154 -11
- package/dist/tools/definitions/shared.js +67 -9
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/task-state.d.ts +76 -0
- package/dist/tools/definitions/task-state.js +301 -0
- package/dist/tools/definitions/task-state.js.map +1 -0
- package/dist/tools/definitions/trigger-contact-claims.js +2 -0
- package/dist/tools/definitions/trigger-contact-claims.js.map +1 -1
- package/dist/tools/definitions.d.ts +273 -31
- package/dist/tools/definitions.js +12 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/description-localization.d.ts +2 -0
- package/dist/tools/description-localization.js +46 -0
- package/dist/tools/description-localization.js.map +1 -0
- package/dist/tools/incomplete-list.d.ts +23 -0
- package/dist/tools/incomplete-list.js +39 -0
- package/dist/tools/incomplete-list.js.map +1 -0
- package/dist/tools/inventory.d.ts +10 -0
- package/dist/tools/inventory.js +49 -0
- package/dist/tools/inventory.js.map +1 -0
- package/dist/tools/registry-mapping-cases-core.js +197 -2
- package/dist/tools/registry-mapping-cases-core.js.map +1 -1
- package/dist/tools/registry-mapping-cases-platform.js +69 -0
- package/dist/tools/registry-mapping-cases-platform.js.map +1 -1
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +60 -8
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/result-envelope.d.ts +46 -0
- package/dist/tools/result-envelope.js +184 -0
- package/dist/tools/result-envelope.js.map +1 -0
- package/dist/tools/result.d.ts +41 -3
- package/dist/tools/result.js +229 -27
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/tool-title.d.ts +2 -0
- package/dist/tools/tool-title.js +12 -0
- package/dist/tools/tool-title.js.map +1 -0
- package/dist/tools/toolsets.d.ts +37 -0
- package/dist/tools/toolsets.js +64 -0
- package/dist/tools/toolsets.js.map +1 -0
- package/dist/tools/verify-with.d.ts +5 -0
- package/dist/tools/verify-with.js +36 -0
- package/dist/tools/verify-with.js.map +1 -0
- package/dist/types/api-contract.gen.d.ts +1433 -74
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +64 -8
- package/dist/utils/logger.js.map +1 -1
- package/docs/agent-usage-guide.full.ru.md +20 -15
- package/docs/agent-usage-guide.ru.md +29 -16
- package/docs/async-operation-lifecycle.md +46 -0
- package/docs/connect.ru.md +120 -0
- package/docs/evals/model-behavior-scorecard.md +80 -0
- package/docs/failure-semantics.md +56 -0
- package/docs/help-navigation.md +48 -0
- package/docs/host-compatibility-matrix.md +153 -0
- package/docs/host-setup.md +22 -6
- package/docs/operation-coverage.md +114 -0
- package/docs/pii-policy.md +46 -0
- package/docs/response-size-budget.md +150 -0
- package/docs/task-state.md +58 -0
- package/docs/tool-effects.md +46 -0
- package/docs/tool-surface.md +91 -0
- package/package.json +6 -2
- package/scripts/model-eval-server.js +213 -0
- package/scripts/probe-mcp-protocol.js +134 -0
- package/scripts/run-model-eval.js +447 -0
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { assertCompleteList } from '../incomplete-list.js';
|
|
2
3
|
import { followUpSetupTools } from './follow-up-setup.js';
|
|
3
4
|
import { getCourseWaveTools } from './getcourse-wave.js';
|
|
4
5
|
import { normalizeTriggerActions } from '../trigger-action-config.js';
|
|
5
|
-
import { agentOutputConfigSchema, agentRuntimeConfigSchema, agentScopeSchema, agentToolPatchSchema, anyObjectSchema, behaviorErrorHandlingSchema, behaviorGreetingSchema, behaviorMediaHandlingSchema, behaviorMessageFilterSchema, behaviorMessageSplittingSchema, behaviorOperatorScheduleSchema, behaviorPrivacySchema, behaviorTypingBehaviorSchema, behaviorUrlHandlingSchema, buildListQuery, compactObject, defineTool, feedbackSheetRowSchema, mapBehaviorErrorHandlingInput, mapBehaviorGreetingInput, mapBehaviorMediaHandlingInput, mapBehaviorOperatorScheduleInput, mapBehaviorTypingInput, mapBehaviorUrlHandlingInput, mapOutputConfigInput, mapPipelineAutoFinishInput, mapPipelineCrmBehaviorInput, mapPlatformAccessControlInput, mapPlatformBitrix24BotSettingsInput, mapPlatformCrmBehaviorInput, mapPlatformGeneralSettingsInput, mapPlatformGetcourseSettingsInput, mapPlatformFunnelAnalyticsInput, mapPlatformInstagramCommentInput, mapPlatformSalebotSettingsInput, mapPlatformSmsgorodSettingsInput, mapPlatformVariablesConfigInput, mapPlatformWidgetMarketingInput, mapRuntimeConfigInput, modelLaneSchema, pipelineAutoFinishSchema, pipelineCrmBehaviorSchema, platformAccessControlSchema, platformBitrix24BotSettingsSchema, platformCrmBehaviorSchema, platformGeneralSettingsSchema, platformGetcourseSettingsSchema, platformFunnelAnalyticsSchema, platformInstagramCommentSchema, platformSalebotSettingsSchema, platformSetupConfirmationSchema, platformSmsgorodSettingsSchema, platformVariablesConfigSchema, mapPromptPatchOperationInput, platformWidgetMarketingSchema, PROMPT_BATCH_IDEMPOTENCY_KEY_MAX_LENGTH, PROMPT_BATCH_MAX_AGENTS, PROMPT_DIFF_MAX_LINES_LIMIT, promptPatchOperationSchema, routingRuleConditionSchema, routingRuleLeadStatusSchema, routingStrategySchema, setupConfirmation, triggerScopeSchema, uuidSchema, withInstructions, } from './shared.js';
|
|
6
|
+
import { PLATFORM_AGENTS_MAX_PAGE_SIZE, agentOutputConfigSchema, agentRuntimeConfigSchema, agentScopeSchema, agentToolPatchSchema, anyObjectSchema, behaviorErrorHandlingSchema, behaviorGreetingSchema, behaviorMediaHandlingSchema, behaviorMessageFilterSchema, behaviorMessageSplittingSchema, behaviorOperatorScheduleSchema, behaviorPrivacySchema, behaviorTypingBehaviorSchema, behaviorUrlHandlingSchema, buildListQuery, compactObject, defineTool, feedbackSheetRowSchema, mapBehaviorErrorHandlingInput, mapBehaviorGreetingInput, mapBehaviorMediaHandlingInput, mapBehaviorOperatorScheduleInput, mapBehaviorTypingInput, mapBehaviorUrlHandlingInput, mapOutputConfigInput, mapPipelineAutoFinishInput, mapPipelineCrmBehaviorInput, mapPlatformAccessControlInput, mapPlatformBitrix24BotSettingsInput, mapPlatformCrmBehaviorInput, mapPlatformGeneralSettingsInput, mapPlatformGetcourseSettingsInput, mapPlatformFunnelAnalyticsInput, mapPlatformInstagramCommentInput, mapPlatformSalebotSettingsInput, mapPlatformSmsgorodSettingsInput, mapPlatformVariablesConfigInput, mapPlatformWidgetMarketingInput, mapRuntimeConfigInput, modelLaneSchema, pipelineAutoFinishSchema, pipelineCrmBehaviorSchema, platformAccessControlSchema, platformBitrix24BotSettingsSchema, platformCrmBehaviorSchema, platformGeneralSettingsSchema, platformGetcourseSettingsSchema, platformFunnelAnalyticsSchema, platformInstagramCommentSchema, platformSalebotSettingsSchema, platformSetupConfirmationSchema, platformSmsgorodSettingsSchema, platformVariablesConfigSchema, mapPromptPatchOperationInput, platformWidgetMarketingSchema, PROMPT_BATCH_IDEMPOTENCY_KEY_MAX_LENGTH, PROMPT_BATCH_MAX_AGENTS, PROMPT_DIFF_MAX_LINES_LIMIT, promptPatchOperationSchema, routingRuleConditionSchema, routingRuleLeadStatusSchema, routingStrategySchema, setupConfirmation, triggerScopeSchema, uuidSchema, withInstructions, } from './shared.js';
|
|
7
|
+
/**
|
|
8
|
+
* Потолки названия и условия триггера — зеркала `AGENT_TRIGGER_NAME_MAX_LENGTH` и
|
|
9
|
+
* `AGENT_TRIGGER_CONDITION_MAX_LENGTH` бэкенда. Границы общие с формой интерфейса: форма шлёт
|
|
10
|
+
* все поля целиком на каждом сохранении, и записанное здесь значение длиннее потолка оператор
|
|
11
|
+
* уже не смог бы сохранить из неё.
|
|
12
|
+
*/
|
|
13
|
+
const TRIGGER_NAME_MAX_LENGTH = 100;
|
|
14
|
+
const TRIGGER_CONDITION_MAX_LENGTH = 4000;
|
|
6
15
|
export const platformSetupTools = [
|
|
7
16
|
defineTool({
|
|
8
17
|
name: 'besales_workspace_overview',
|
|
18
|
+
sideEffect: 'none',
|
|
9
19
|
requiredFields: [],
|
|
10
20
|
defaultWorkspaceId: true,
|
|
11
21
|
schema: z.object({
|
|
@@ -22,36 +32,178 @@ export const platformSetupTools = [
|
|
|
22
32
|
'После overview перейди на drill-down: `besales_platform_context_get` для конкретной платформы, `besales_agent_list` для агентов внутри неё.',
|
|
23
33
|
]),
|
|
24
34
|
}),
|
|
35
|
+
defineTool({
|
|
36
|
+
name: 'besales_workspace_navigate',
|
|
37
|
+
sideEffect: 'none',
|
|
38
|
+
closedWorld: true,
|
|
39
|
+
requiredFields: ['intent'],
|
|
40
|
+
defaultWorkspaceId: true,
|
|
41
|
+
resultPolicy: { neverTruncate: true },
|
|
42
|
+
schema: z
|
|
43
|
+
.object({
|
|
44
|
+
workspace_id: uuidSchema.optional(),
|
|
45
|
+
intent: z.enum([
|
|
46
|
+
'CREATE_BOT',
|
|
47
|
+
'IMPROVE_AGENT',
|
|
48
|
+
'DIAGNOSE_CONTACT',
|
|
49
|
+
'AUDIT_DIALOGUES',
|
|
50
|
+
'CAMPAIGN_REPORT',
|
|
51
|
+
'CONNECT_CRM',
|
|
52
|
+
'CONNECT_DATASOURCE',
|
|
53
|
+
'CONFIGURE_FOLLOWUP',
|
|
54
|
+
'CONTINUE_TASK',
|
|
55
|
+
'FREEFORM',
|
|
56
|
+
]),
|
|
57
|
+
bot_type: z.enum(['FAQ', 'SALES', 'BOOKING', 'OUTBOUND', 'SUPPORT', 'UNKNOWN']).optional(),
|
|
58
|
+
platform_id: uuidSchema.optional(),
|
|
59
|
+
agent_id: uuidSchema.optional(),
|
|
60
|
+
contact_id: uuidSchema.optional(),
|
|
61
|
+
task_id: uuidSchema.optional(),
|
|
62
|
+
question: z.string().trim().min(2).max(500).optional(),
|
|
63
|
+
})
|
|
64
|
+
.strict(),
|
|
65
|
+
createRequest: (input) => ({
|
|
66
|
+
method: 'POST',
|
|
67
|
+
path: `/workspaces/${input.workspace_id}/navigation`,
|
|
68
|
+
body: compactObject({
|
|
69
|
+
intent: input.intent,
|
|
70
|
+
botType: input.bot_type,
|
|
71
|
+
platformId: input.platform_id,
|
|
72
|
+
agentId: input.agent_id,
|
|
73
|
+
contactId: input.contact_id,
|
|
74
|
+
taskId: input.task_id,
|
|
75
|
+
question: input.question,
|
|
76
|
+
}),
|
|
77
|
+
}),
|
|
78
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
79
|
+
'next.tool и next.arguments — один адресный следующий шаг; placeholders перечислены в requiredUserInput и не должны угадываться.',
|
|
80
|
+
'Сохранённый overview — evidence только на момент ответа. Перед записью перечитай выбранный объект, а после записи выполни next.verifyWith.',
|
|
81
|
+
'CREATE_BOT учитывает bot_type: FAQ не требует ICP/CRM автоматически, SALES/BOOKING/OUTBOUND требуют ICP и условий до доказательства готовности.',
|
|
82
|
+
'FREEFORM возвращает help route и не запускает обязательный шестишаговый мастер.',
|
|
83
|
+
]),
|
|
84
|
+
}),
|
|
25
85
|
defineTool({
|
|
26
86
|
name: 'besales_platform_context_get',
|
|
87
|
+
sideEffect: 'none',
|
|
27
88
|
requiredFields: ['platform_id'],
|
|
89
|
+
resultPolicy: {
|
|
90
|
+
neverTruncate: true,
|
|
91
|
+
droppablePaths: ['agents[].baseSystemPrompt'],
|
|
92
|
+
narrowingHint: 'Снимок канала отдаётся целиком и на канале с десятками агентов не помещается в ответ. Работайте по одному агенту: besales_agent_list для перечня, besales_prompt_patch_get для промпта.',
|
|
93
|
+
},
|
|
28
94
|
schema: z.object({
|
|
29
95
|
platform_id: uuidSchema,
|
|
96
|
+
sections: z
|
|
97
|
+
.array(z.enum([
|
|
98
|
+
'platform',
|
|
99
|
+
'agent_summaries',
|
|
100
|
+
'agents_full',
|
|
101
|
+
'router',
|
|
102
|
+
'behavior',
|
|
103
|
+
'follow_up',
|
|
104
|
+
'pipeline_settings',
|
|
105
|
+
'readiness',
|
|
106
|
+
]))
|
|
107
|
+
.min(1)
|
|
108
|
+
.optional(),
|
|
30
109
|
}),
|
|
31
110
|
createRequest: (input) => ({
|
|
32
111
|
method: 'GET',
|
|
33
|
-
path: `/platforms/${input.platform_id}/setup/context
|
|
112
|
+
path: `/platforms/${input.platform_id}/setup/context` +
|
|
113
|
+
(input.sections
|
|
114
|
+
? `?sections=${encodeURIComponent(input.sections.join(','))}`
|
|
115
|
+
: ''),
|
|
34
116
|
}),
|
|
35
117
|
enhanceResponse: (response) => withInstructions(response, [
|
|
36
|
-
'
|
|
118
|
+
'Для точечного чтения передай sections; agent_summaries не содержит полный промпт, agents_full содержит.',
|
|
37
119
|
'Read readiness flags, then call targeted mutation tools. Do not ask the user for workspace_id.',
|
|
38
120
|
'Prompt content changes still go through besales_prompt_* tools and besales_prompt_finalize.',
|
|
39
121
|
]),
|
|
40
122
|
}),
|
|
123
|
+
defineTool({
|
|
124
|
+
name: 'besales_trigger_action_catalog_get',
|
|
125
|
+
sideEffect: 'none',
|
|
126
|
+
requiredFields: ['platform_id'],
|
|
127
|
+
resultPolicy: { neverTruncate: true },
|
|
128
|
+
schema: z.object({
|
|
129
|
+
platform_id: uuidSchema,
|
|
130
|
+
action_type: z.string().trim().min(1).optional(),
|
|
131
|
+
}),
|
|
132
|
+
createRequest: (input) => ({
|
|
133
|
+
method: 'GET',
|
|
134
|
+
path: `/platforms/${input.platform_id}/setup/trigger-action-catalog` +
|
|
135
|
+
(input.action_type ? `?actionType=${encodeURIComponent(input.action_type)}` : ''),
|
|
136
|
+
}),
|
|
137
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
138
|
+
'Каталог построен из боевого CreateTriggerActionDto и канона TRIGGER_ACTION_CONFIG.',
|
|
139
|
+
'Перед созданием нового actionType запроси его отдельно через action_type и используй minimalExample без угадывания имени config-поля.',
|
|
140
|
+
'После записи выполни verification из записи каталога; перечитывание контекста проверяет сохранение, но не внешний эффект.',
|
|
141
|
+
]),
|
|
142
|
+
}),
|
|
41
143
|
defineTool({
|
|
42
144
|
name: 'besales_agent_list',
|
|
145
|
+
sideEffect: 'none',
|
|
43
146
|
requiredFields: ['platform_id'],
|
|
147
|
+
resultPolicy: { neverTruncate: true },
|
|
44
148
|
schema: z.object({
|
|
45
149
|
platform_id: uuidSchema,
|
|
150
|
+
limit: z.number().int().min(1).max(PLATFORM_AGENTS_MAX_PAGE_SIZE).optional(),
|
|
151
|
+
cursor: z.string().min(1).optional(),
|
|
152
|
+
query: z.string().min(1).optional(),
|
|
153
|
+
}),
|
|
154
|
+
createRequest: (input) => {
|
|
155
|
+
const query = new URLSearchParams();
|
|
156
|
+
if (input.limit !== undefined)
|
|
157
|
+
query.set('limit', String(input.limit));
|
|
158
|
+
if (input.cursor)
|
|
159
|
+
query.set('cursor', input.cursor);
|
|
160
|
+
if (input.query)
|
|
161
|
+
query.set('q', input.query);
|
|
162
|
+
const suffix = query.size > 0 ? `?${query.toString()}` : '';
|
|
163
|
+
return { method: 'GET', path: `/platforms/${input.platform_id}/agents${suffix}` };
|
|
164
|
+
},
|
|
165
|
+
enhanceResponse: (response, input) => assertCompleteList(response, {
|
|
166
|
+
pageRequested: input.limit !== undefined || input.cursor !== undefined,
|
|
167
|
+
toolName: 'besales_agent_list',
|
|
168
|
+
howToPage: `Повтори вызов с limit до ${PLATFORM_AGENTS_MAX_PAGE_SIZE} и cursor из ответа, пока cursor не станет пустым.`,
|
|
169
|
+
}),
|
|
170
|
+
}),
|
|
171
|
+
defineTool({
|
|
172
|
+
name: 'besales_agent_get',
|
|
173
|
+
sideEffect: 'none',
|
|
174
|
+
requiredFields: ['agent_id'],
|
|
175
|
+
resultPolicy: { neverTruncate: true },
|
|
176
|
+
schema: z.object({
|
|
177
|
+
agent_id: uuidSchema,
|
|
46
178
|
}),
|
|
47
179
|
createRequest: (input) => ({
|
|
48
180
|
method: 'GET',
|
|
49
|
-
path: `/
|
|
181
|
+
path: `/agents/${input.agent_id}`,
|
|
50
182
|
}),
|
|
51
183
|
}),
|
|
184
|
+
defineTool({
|
|
185
|
+
name: 'besales_agent_readiness_get',
|
|
186
|
+
sideEffect: 'none',
|
|
187
|
+
closedWorld: true,
|
|
188
|
+
requiredFields: ['agent_id'],
|
|
189
|
+
resultPolicy: { neverTruncate: true },
|
|
190
|
+
schema: z.object({ agent_id: uuidSchema }).strict(),
|
|
191
|
+
createRequest: (input) => ({
|
|
192
|
+
method: 'GET',
|
|
193
|
+
path: `/agents/${input.agent_id}/readiness`,
|
|
194
|
+
}),
|
|
195
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
196
|
+
'Сейчас readiness всегда отвечает NOT_PROVEN: API не фиксирует версию зависимых настроек (behavior, routing, triggers, knowledge, ICP), и повтор sandbox этого не снимает. Не обещай пользователю READY.',
|
|
197
|
+
'Выполни адресные пункты missing и перечитай readiness; promptAndAgentCurrent=true означает только актуальность промпта и записи агента.',
|
|
198
|
+
'passRate не является quality. Нужны COMPLETED, свежая конфигурация, findings, qualityRate и checksRate с expectations.',
|
|
199
|
+
'crmAuthorization=NOT_EVALUATED не подтверждает live-доступ CRM; проверяй его отдельной health/authorization операцией, если CRM нужна сценарию.',
|
|
200
|
+
]),
|
|
201
|
+
}),
|
|
52
202
|
defineTool({
|
|
53
203
|
name: 'besales_agent_variable_overrides_get',
|
|
204
|
+
sideEffect: 'none',
|
|
54
205
|
requiredFields: ['platform_id', 'agent_id'],
|
|
206
|
+
resultPolicy: { neverTruncate: true },
|
|
55
207
|
schema: z.object({
|
|
56
208
|
platform_id: uuidSchema,
|
|
57
209
|
agent_id: uuidSchema,
|
|
@@ -68,6 +220,7 @@ export const platformSetupTools = [
|
|
|
68
220
|
}),
|
|
69
221
|
defineTool({
|
|
70
222
|
name: 'besales_getcourse_departments_list',
|
|
223
|
+
sideEffect: 'none',
|
|
71
224
|
requiredFields: ['platform_id'],
|
|
72
225
|
schema: z.object({
|
|
73
226
|
platform_id: uuidSchema,
|
|
@@ -84,6 +237,7 @@ export const platformSetupTools = [
|
|
|
84
237
|
...getCourseWaveTools,
|
|
85
238
|
defineTool({
|
|
86
239
|
name: 'besales_wazzup_templates_list',
|
|
240
|
+
sideEffect: 'none',
|
|
87
241
|
requiredFields: ['platform_id'],
|
|
88
242
|
defaultWorkspaceId: true,
|
|
89
243
|
schema: z.object({
|
|
@@ -102,6 +256,7 @@ export const platformSetupTools = [
|
|
|
102
256
|
}),
|
|
103
257
|
defineTool({
|
|
104
258
|
name: 'besales_wazzup_wave_import',
|
|
259
|
+
sideEffect: 'spend',
|
|
105
260
|
requiredFields: ['platform_id', 'template_guid', 'contacts'],
|
|
106
261
|
defaultWorkspaceId: true,
|
|
107
262
|
schema: z
|
|
@@ -168,6 +323,7 @@ export const platformSetupTools = [
|
|
|
168
323
|
}),
|
|
169
324
|
defineTool({
|
|
170
325
|
name: 'besales_wazzup_wave_status',
|
|
326
|
+
sideEffect: 'none',
|
|
171
327
|
requiredFields: ['job_id'],
|
|
172
328
|
defaultWorkspaceId: true,
|
|
173
329
|
schema: z.object({
|
|
@@ -187,6 +343,7 @@ export const platformSetupTools = [
|
|
|
187
343
|
}),
|
|
188
344
|
defineTool({
|
|
189
345
|
name: 'besales_agent_create',
|
|
346
|
+
sideEffect: 'write',
|
|
190
347
|
requiredFields: ['platform_id', 'name', 'model_lane'],
|
|
191
348
|
schema: z.object({
|
|
192
349
|
platform_id: uuidSchema,
|
|
@@ -233,6 +390,7 @@ export const platformSetupTools = [
|
|
|
233
390
|
}),
|
|
234
391
|
defineTool({
|
|
235
392
|
name: 'besales_agent_clone',
|
|
393
|
+
sideEffect: 'write',
|
|
236
394
|
requiredFields: ['platform_id', 'source_agent_id', 'name'],
|
|
237
395
|
schema: z.object({
|
|
238
396
|
// Платформа-источник; клон приземляется на неё же (cross-platform не поддерживается).
|
|
@@ -260,6 +418,7 @@ export const platformSetupTools = [
|
|
|
260
418
|
}),
|
|
261
419
|
defineTool({
|
|
262
420
|
name: 'besales_agent_update',
|
|
421
|
+
sideEffect: 'write',
|
|
263
422
|
requiredFields: ['platform_id', 'agent_id'],
|
|
264
423
|
schema: z.object({
|
|
265
424
|
platform_id: uuidSchema,
|
|
@@ -325,6 +484,7 @@ export const platformSetupTools = [
|
|
|
325
484
|
// В v2 заменён post_processors (Routing Studio Critic node) + post_processor_bindings.
|
|
326
485
|
defineTool({
|
|
327
486
|
name: 'besales_agent_tools_update',
|
|
487
|
+
sideEffect: 'write',
|
|
328
488
|
requiredFields: ['platform_id', 'agent_id', 'tools'],
|
|
329
489
|
schema: z.object({
|
|
330
490
|
platform_id: uuidSchema,
|
|
@@ -346,6 +506,7 @@ export const platformSetupTools = [
|
|
|
346
506
|
}),
|
|
347
507
|
defineTool({
|
|
348
508
|
name: 'besales_router_update',
|
|
509
|
+
sideEffect: 'write',
|
|
349
510
|
requiredFields: ['platform_id'],
|
|
350
511
|
schema: z.object({
|
|
351
512
|
platform_id: uuidSchema,
|
|
@@ -377,6 +538,7 @@ export const platformSetupTools = [
|
|
|
377
538
|
}),
|
|
378
539
|
defineTool({
|
|
379
540
|
name: 'besales_routing_rule_upsert',
|
|
541
|
+
sideEffect: 'write',
|
|
380
542
|
requiredFields: ['platform_id', 'routing_strategy', 'custom_router_prompt'],
|
|
381
543
|
schema: z.object({
|
|
382
544
|
platform_id: uuidSchema,
|
|
@@ -437,13 +599,15 @@ export const platformSetupTools = [
|
|
|
437
599
|
}),
|
|
438
600
|
defineTool({
|
|
439
601
|
name: 'besales_trigger_upsert',
|
|
602
|
+
sideEffect: 'write',
|
|
440
603
|
requiredFields: ['platform_id', 'agent_id'],
|
|
441
604
|
schema: z.object({
|
|
442
605
|
platform_id: uuidSchema,
|
|
443
606
|
agent_id: uuidSchema,
|
|
444
607
|
trigger_id: uuidSchema.optional(),
|
|
445
|
-
|
|
446
|
-
|
|
608
|
+
// `.trim()` — как у формы и бэкенда: строка из пробелов пустая, «Оплата » равна «Оплата».
|
|
609
|
+
name: z.string().trim().min(1).max(TRIGGER_NAME_MAX_LENGTH).optional(),
|
|
610
|
+
condition: z.string().trim().min(1).max(TRIGGER_CONDITION_MAX_LENGTH).optional(),
|
|
447
611
|
is_enabled: z.boolean().optional(),
|
|
448
612
|
priority: z.number().int().min(1).max(100).optional(),
|
|
449
613
|
stop_propagation: z.boolean().optional(),
|
|
@@ -530,6 +694,7 @@ export const platformSetupTools = [
|
|
|
530
694
|
}),
|
|
531
695
|
defineTool({
|
|
532
696
|
name: 'besales_trigger_delete',
|
|
697
|
+
sideEffect: 'write',
|
|
533
698
|
requiredFields: ['platform_id', 'agent_id', 'trigger_id', 'explicit_confirmation'],
|
|
534
699
|
schema: z
|
|
535
700
|
.object({
|
|
@@ -552,6 +717,7 @@ export const platformSetupTools = [
|
|
|
552
717
|
}),
|
|
553
718
|
defineTool({
|
|
554
719
|
name: 'besales_behavior_update',
|
|
720
|
+
sideEffect: 'write',
|
|
555
721
|
requiredFields: ['platform_id'],
|
|
556
722
|
schema: z
|
|
557
723
|
.object({
|
|
@@ -615,6 +781,7 @@ export const platformSetupTools = [
|
|
|
615
781
|
...followUpSetupTools,
|
|
616
782
|
defineTool({
|
|
617
783
|
name: 'besales_pipeline_settings_update',
|
|
784
|
+
sideEffect: 'write',
|
|
618
785
|
requiredFields: ['platform_id'],
|
|
619
786
|
schema: z
|
|
620
787
|
.object({
|
|
@@ -639,6 +806,7 @@ export const platformSetupTools = [
|
|
|
639
806
|
}),
|
|
640
807
|
defineTool({
|
|
641
808
|
name: 'besales_platform_settings_update',
|
|
809
|
+
sideEffect: 'write',
|
|
642
810
|
requiredFields: ['platform_id'],
|
|
643
811
|
schema: z
|
|
644
812
|
.object({
|
|
@@ -721,6 +889,7 @@ export const platformSetupTools = [
|
|
|
721
889
|
}),
|
|
722
890
|
defineTool({
|
|
723
891
|
name: 'besales_audit_revert',
|
|
892
|
+
sideEffect: 'write',
|
|
724
893
|
requiredFields: ['audit_log_id'],
|
|
725
894
|
defaultWorkspaceId: true,
|
|
726
895
|
schema: z
|
|
@@ -752,6 +921,7 @@ export const platformSetupTools = [
|
|
|
752
921
|
}),
|
|
753
922
|
defineTool({
|
|
754
923
|
name: 'besales_feedback_sheet_link',
|
|
924
|
+
sideEffect: 'write',
|
|
755
925
|
requiredFields: ['agent_id', 'source_url'],
|
|
756
926
|
schema: z.object({
|
|
757
927
|
agent_id: uuidSchema,
|
|
@@ -775,6 +945,7 @@ export const platformSetupTools = [
|
|
|
775
945
|
}),
|
|
776
946
|
defineTool({
|
|
777
947
|
name: 'besales_feedback_sheet_list',
|
|
948
|
+
sideEffect: 'none',
|
|
778
949
|
requiredFields: ['agent_id'],
|
|
779
950
|
schema: z.object({
|
|
780
951
|
agent_id: uuidSchema,
|
|
@@ -786,6 +957,7 @@ export const platformSetupTools = [
|
|
|
786
957
|
}),
|
|
787
958
|
defineTool({
|
|
788
959
|
name: 'besales_feedback_sheet_read',
|
|
960
|
+
sideEffect: 'none',
|
|
789
961
|
requiredFields: ['agent_id', 'feedback_sheet_id'],
|
|
790
962
|
schema: z.object({
|
|
791
963
|
agent_id: uuidSchema,
|
|
@@ -803,6 +975,7 @@ export const platformSetupTools = [
|
|
|
803
975
|
}),
|
|
804
976
|
defineTool({
|
|
805
977
|
name: 'besales_feedback_sheet_unlink',
|
|
978
|
+
sideEffect: 'write',
|
|
806
979
|
requiredFields: ['agent_id', 'feedback_sheet_id'],
|
|
807
980
|
schema: z.object({
|
|
808
981
|
agent_id: uuidSchema,
|
|
@@ -815,6 +988,7 @@ export const platformSetupTools = [
|
|
|
815
988
|
}),
|
|
816
989
|
defineTool({
|
|
817
990
|
name: 'besales_feedback_sheet_row_update',
|
|
991
|
+
sideEffect: 'write',
|
|
818
992
|
requiredFields: ['agent_id', 'feedback_sheet_id', 'rows'],
|
|
819
993
|
schema: z.object({
|
|
820
994
|
agent_id: uuidSchema,
|
|
@@ -846,6 +1020,7 @@ export const platformSetupTools = [
|
|
|
846
1020
|
// S4.13 — besales_facts_classify_and_migrate
|
|
847
1021
|
defineTool({
|
|
848
1022
|
name: 'besales_facts_classify_and_migrate',
|
|
1023
|
+
sideEffect: 'spend',
|
|
849
1024
|
requiredFields: ['agent_id'],
|
|
850
1025
|
schema: z.object({
|
|
851
1026
|
agent_id: uuidSchema,
|
|
@@ -866,6 +1041,7 @@ export const platformSetupTools = [
|
|
|
866
1041
|
// S2.5 extra — besales_agent_facts_set
|
|
867
1042
|
defineTool({
|
|
868
1043
|
name: 'besales_agent_facts_set',
|
|
1044
|
+
sideEffect: 'write',
|
|
869
1045
|
requiredFields: ['agent_id', 'factual_context'],
|
|
870
1046
|
schema: z.object({
|
|
871
1047
|
agent_id: uuidSchema,
|
|
@@ -888,6 +1064,11 @@ export const platformSetupTools = [
|
|
|
888
1064
|
// ─────────────────────────────────────────────────────────────────
|
|
889
1065
|
defineTool({
|
|
890
1066
|
name: 'besales_prompt_patch_start',
|
|
1067
|
+
// Ответ несёт ПОЛНЫЙ текст промпта — до 80 000 символов по боевой границе платформы, то
|
|
1068
|
+
// есть до ~160 КБ кириллицей. Общий потолок в 64 КБ отказывал бы на штатном промпте, а
|
|
1069
|
+
// текст здесь незаменим: по нему строят якоря правок, и усечённый даёт промах якоря.
|
|
1070
|
+
resultPolicy: { neverTruncate: true, maxResultBytes: 400_000 },
|
|
1071
|
+
sideEffect: 'write',
|
|
891
1072
|
requiredFields: ['agent_id'],
|
|
892
1073
|
schema: z.object({
|
|
893
1074
|
agent_id: uuidSchema,
|
|
@@ -906,6 +1087,11 @@ export const platformSetupTools = [
|
|
|
906
1087
|
}),
|
|
907
1088
|
defineTool({
|
|
908
1089
|
name: 'besales_prompt_patch_get',
|
|
1090
|
+
// Ответ несёт ПОЛНЫЙ текст промпта — до 80 000 символов по боевой границе платформы, то
|
|
1091
|
+
// есть до ~160 КБ кириллицей. Общий потолок в 64 КБ отказывал бы на штатном промпте, а
|
|
1092
|
+
// текст здесь незаменим: по нему строят якоря правок, и усечённый даёт промах якоря.
|
|
1093
|
+
resultPolicy: { neverTruncate: true, maxResultBytes: 400_000 },
|
|
1094
|
+
sideEffect: 'none',
|
|
909
1095
|
requiredFields: ['agent_id', 'draft_id'],
|
|
910
1096
|
schema: z.object({
|
|
911
1097
|
agent_id: uuidSchema,
|
|
@@ -920,6 +1106,7 @@ export const platformSetupTools = [
|
|
|
920
1106
|
// mcp-tools.json (registry.spec проверяет parity), поэтому вставка строго после _patch_get.
|
|
921
1107
|
defineTool({
|
|
922
1108
|
name: 'besales_prompt_headroom',
|
|
1109
|
+
sideEffect: 'none',
|
|
923
1110
|
requiredFields: ['agent_id'],
|
|
924
1111
|
// .strict() — иначе опечатка `draftId` вместо `draft_id` молча отбрасывается zod'ом,
|
|
925
1112
|
// и тулза измеряет закоммиченный промпт вместо черновика.
|
|
@@ -943,6 +1130,8 @@ export const platformSetupTools = [
|
|
|
943
1130
|
}),
|
|
944
1131
|
defineTool({
|
|
945
1132
|
name: 'besales_prompt_diff',
|
|
1133
|
+
sideEffect: 'none',
|
|
1134
|
+
closedWorld: true,
|
|
946
1135
|
requiredFields: ['agent_id', 'compare_agent_id'],
|
|
947
1136
|
schema: z
|
|
948
1137
|
.object({
|
|
@@ -965,6 +1154,11 @@ export const platformSetupTools = [
|
|
|
965
1154
|
}),
|
|
966
1155
|
defineTool({
|
|
967
1156
|
name: 'besales_prompt_patch_apply',
|
|
1157
|
+
// Ответ несёт ПОЛНЫЙ текст промпта — до 80 000 символов по боевой границе платформы, то
|
|
1158
|
+
// есть до ~160 КБ кириллицей. Общий потолок в 64 КБ отказывал бы на штатном промпте, а
|
|
1159
|
+
// текст здесь незаменим: по нему строят якоря правок, и усечённый даёт промах якоря.
|
|
1160
|
+
resultPolicy: { neverTruncate: true, maxResultBytes: 400_000 },
|
|
1161
|
+
sideEffect: 'write',
|
|
968
1162
|
requiredFields: ['agent_id', 'draft_id', 'operations'],
|
|
969
1163
|
schema: z.object({
|
|
970
1164
|
agent_id: uuidSchema,
|
|
@@ -990,6 +1184,7 @@ export const platformSetupTools = [
|
|
|
990
1184
|
}),
|
|
991
1185
|
defineTool({
|
|
992
1186
|
name: 'besales_prompt_patch_commit',
|
|
1187
|
+
sideEffect: 'write',
|
|
993
1188
|
requiredFields: ['agent_id', 'draft_id'],
|
|
994
1189
|
schema: z.object({
|
|
995
1190
|
agent_id: uuidSchema,
|
|
@@ -1012,6 +1207,7 @@ export const platformSetupTools = [
|
|
|
1012
1207
|
}),
|
|
1013
1208
|
defineTool({
|
|
1014
1209
|
name: 'besales_prompt_patch_discard',
|
|
1210
|
+
sideEffect: 'write',
|
|
1015
1211
|
requiredFields: ['agent_id', 'draft_id'],
|
|
1016
1212
|
schema: z.object({
|
|
1017
1213
|
agent_id: uuidSchema,
|
|
@@ -1026,7 +1222,8 @@ export const platformSetupTools = [
|
|
|
1026
1222
|
// mcp-tools.json — registry.spec сверяет имена позиционно.
|
|
1027
1223
|
defineTool({
|
|
1028
1224
|
name: 'besales_prompt_batch_start',
|
|
1029
|
-
|
|
1225
|
+
sideEffect: 'spend',
|
|
1226
|
+
requiredFields: ['agent_ids', 'operations', 'explicit_confirmation'],
|
|
1030
1227
|
schema: z
|
|
1031
1228
|
.object({
|
|
1032
1229
|
agent_ids: z.array(uuidSchema).min(1).max(PROMPT_BATCH_MAX_AGENTS),
|
|
@@ -1034,6 +1231,7 @@ export const platformSetupTools = [
|
|
|
1034
1231
|
all_or_nothing: z.boolean().optional(),
|
|
1035
1232
|
idempotency_key: z.string().max(PROMPT_BATCH_IDEMPOTENCY_KEY_MAX_LENGTH).optional(),
|
|
1036
1233
|
platform_id: uuidSchema.optional(),
|
|
1234
|
+
explicit_confirmation: z.literal(true),
|
|
1037
1235
|
})
|
|
1038
1236
|
.strict(),
|
|
1039
1237
|
createRequest: (input) => ({
|
|
@@ -1056,6 +1254,7 @@ export const platformSetupTools = [
|
|
|
1056
1254
|
}),
|
|
1057
1255
|
defineTool({
|
|
1058
1256
|
name: 'besales_prompt_batch_status',
|
|
1257
|
+
sideEffect: 'none',
|
|
1059
1258
|
requiredFields: ['run_id'],
|
|
1060
1259
|
schema: z.object({ run_id: uuidSchema }).strict(),
|
|
1061
1260
|
createRequest: (input) => ({
|
|
@@ -1065,6 +1264,7 @@ export const platformSetupTools = [
|
|
|
1065
1264
|
}),
|
|
1066
1265
|
defineTool({
|
|
1067
1266
|
name: 'besales_prompt_batch_resume',
|
|
1267
|
+
sideEffect: 'spend',
|
|
1068
1268
|
requiredFields: ['run_id'],
|
|
1069
1269
|
schema: z.object({ run_id: uuidSchema }).strict(),
|
|
1070
1270
|
createRequest: (input) => ({
|
|
@@ -1079,6 +1279,8 @@ export const platformSetupTools = [
|
|
|
1079
1279
|
// S2.6 extra — besales_prompt_lint (после patches, чтобы matched catalog order)
|
|
1080
1280
|
defineTool({
|
|
1081
1281
|
name: 'besales_prompt_lint',
|
|
1282
|
+
sideEffect: 'none',
|
|
1283
|
+
closedWorld: true,
|
|
1082
1284
|
requiredFields: ['prompt_text'],
|
|
1083
1285
|
defaultWorkspaceId: true,
|
|
1084
1286
|
schema: z.object({
|