@besales/mcp 0.45.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +68 -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/crm-integration.md +3 -1
- 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/compare-models.md +4 -3
- package/dist/resources/workflows/connect-crm-from-scratch.md +8 -0
- 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 +1537 -177
- 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 +49 -20
- package/dist/tools/definitions/agent-design.js +192 -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.d.ts +5 -4
- package/dist/tools/definitions/broadcast-analytics.js +26 -4
- 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 +20 -1
- package/dist/tools/definitions/broadcast-scheduler.js +134 -8
- 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 +95 -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 +1 -1
- package/dist/tools/definitions/follow-up.js +6 -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 +20 -2
- package/dist/tools/definitions/getcourse-cold-welcome.js +128 -7
- 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 +31 -0
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/model-comparison.js +12 -3
- 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 +54 -3
- package/dist/tools/definitions/platform-setup.js +211 -5
- 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 +272 -10
- package/dist/tools/definitions/shared.js +154 -8
- 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.d.ts +7 -0
- package/dist/tools/definitions/trigger-contact-claims.js +60 -0
- package/dist/tools/definitions/trigger-contact-claims.js.map +1 -0
- package/dist/tools/definitions.d.ts +334 -35
- package/dist/tools/definitions.js +14 -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 +122 -4
- 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/trigger-action-config.js +4 -0
- package/dist/tools/trigger-action-config.js.map +1 -1
- 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 +2612 -332
- 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 +21 -15
- package/docs/agent-usage-guide.ru.md +24 -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
|
@@ -43,6 +43,11 @@ const variantContentShape = {
|
|
|
43
43
|
// ⚠️ УСТАРЕЛО с 23.08.2026 и на поведение НЕ влияет: режим убран, поле принимается ради
|
|
44
44
|
// обратной совместимости и игнорируется сервером.
|
|
45
45
|
cold_welcome_channels_mode: coldWelcomeChannelsModeEnum.optional(),
|
|
46
|
+
// ПЕРЕКРЫТИЕ тихого периода этой рассылкой, в сутках. `0` = «этот текст можно слать внутри
|
|
47
|
+
// тихого периода» — это и есть разрешение. `null` = рассылка не перекрывает (действует
|
|
48
|
+
// площадка, затем воркспейс, затем 0). ⚠️ `null` и `0` — РАЗНЫЕ значения: не подставляй ноль
|
|
49
|
+
// вместо «не задано».
|
|
50
|
+
quiet_days_override: z.number().int().min(0).nullable().optional(),
|
|
46
51
|
default_deal_fields: z
|
|
47
52
|
.union([
|
|
48
53
|
z.record(z.string().regex(/^\d+$/, 'Ключ default_deal_fields обязан быть числовым fieldId GetCourse'), z.union([z.string(), z.number(), z.boolean(), z.null()])),
|
|
@@ -60,11 +65,13 @@ const variantContentBody = (input) => ({
|
|
|
60
65
|
defaultChannels: input.default_channels,
|
|
61
66
|
coldWelcomeChannels: input.cold_welcome_channels,
|
|
62
67
|
coldWelcomeChannelsMode: input.cold_welcome_channels_mode,
|
|
68
|
+
quietDaysOverride: input.quiet_days_override,
|
|
63
69
|
defaultDealFields: input.default_deal_fields,
|
|
64
70
|
});
|
|
65
71
|
export const broadcastMailingVariantTools = [
|
|
66
72
|
defineTool({
|
|
67
73
|
name: 'besales_broadcast_mailing_variant_list',
|
|
74
|
+
sideEffect: 'none',
|
|
68
75
|
requiredFields: [],
|
|
69
76
|
defaultWorkspaceId: true,
|
|
70
77
|
schema: z
|
|
@@ -85,6 +92,7 @@ export const broadcastMailingVariantTools = [
|
|
|
85
92
|
}),
|
|
86
93
|
defineTool({
|
|
87
94
|
name: 'besales_broadcast_mailing_variant_create',
|
|
95
|
+
sideEffect: 'write',
|
|
88
96
|
requiredFields: ['name'],
|
|
89
97
|
defaultWorkspaceId: true,
|
|
90
98
|
schema: z
|
|
@@ -112,6 +120,7 @@ export const broadcastMailingVariantTools = [
|
|
|
112
120
|
}),
|
|
113
121
|
defineTool({
|
|
114
122
|
name: 'besales_broadcast_mailing_variant_update',
|
|
123
|
+
sideEffect: 'write',
|
|
115
124
|
requiredFields: ['mailing_variant_id'],
|
|
116
125
|
defaultWorkspaceId: true,
|
|
117
126
|
schema: z
|
|
@@ -162,6 +171,7 @@ export const broadcastMailingVariantTools = [
|
|
|
162
171
|
}),
|
|
163
172
|
defineTool({
|
|
164
173
|
name: 'besales_broadcast_mailing_variant_delete',
|
|
174
|
+
sideEffect: 'write',
|
|
165
175
|
requiredFields: ['mailing_variant_id', 'explicit_confirmation'],
|
|
166
176
|
defaultWorkspaceId: true,
|
|
167
177
|
schema: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-mailing-variants.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-mailing-variants.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"broadcast-mailing-variants.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-mailing-variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,11 @@ export declare const broadcastSchedulerTools: (import("./shared.js").ToolDefinit
|
|
|
20
20
|
workspace_id?: string | undefined;
|
|
21
21
|
funnels?: string[] | "all" | undefined;
|
|
22
22
|
product_codes?: string[] | "all" | undefined;
|
|
23
|
+
window_mode?: "FIXED" | "ROLLING" | undefined;
|
|
24
|
+
window_from_local?: string | undefined;
|
|
25
|
+
window_to_local?: string | undefined;
|
|
23
26
|
days_of_week?: number[] | undefined;
|
|
27
|
+
days_of_month?: number[] | undefined;
|
|
24
28
|
channels?: ("Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX")[] | undefined;
|
|
25
29
|
channels_mode?: "RESTRICT" | "ADD" | undefined;
|
|
26
30
|
is_enabled?: boolean | undefined;
|
|
@@ -38,7 +42,11 @@ export declare const broadcastSchedulerTools: (import("./shared.js").ToolDefinit
|
|
|
38
42
|
workspace_id?: string | undefined;
|
|
39
43
|
funnels?: string[] | "all" | undefined;
|
|
40
44
|
product_codes?: string[] | "all" | undefined;
|
|
45
|
+
window_mode?: "FIXED" | "ROLLING" | undefined;
|
|
46
|
+
window_from_local?: string | undefined;
|
|
47
|
+
window_to_local?: string | undefined;
|
|
41
48
|
days_of_week?: number[] | undefined;
|
|
49
|
+
days_of_month?: number[] | undefined;
|
|
42
50
|
channels?: ("Site" | "Email" | "SMS" | "Telegram" | "Facebook" | "VK" | "Chatium" | "WhatsApp" | "Viber" | "MAX")[] | undefined;
|
|
43
51
|
channels_mode?: "RESTRICT" | "ADD" | undefined;
|
|
44
52
|
is_enabled?: boolean | undefined;
|
|
@@ -50,6 +58,11 @@ export declare const broadcastSchedulerTools: (import("./shared.js").ToolDefinit
|
|
|
50
58
|
schedule_id: string;
|
|
51
59
|
workspace_id?: string | undefined;
|
|
52
60
|
limit?: number | undefined;
|
|
61
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
62
|
+
workspace_id?: string | undefined;
|
|
63
|
+
from?: string | undefined;
|
|
64
|
+
to?: string | undefined;
|
|
65
|
+
limit?: number | undefined;
|
|
53
66
|
}> | import("./shared.js").ToolDefinition<{
|
|
54
67
|
segment_id: string;
|
|
55
68
|
facets: {
|
|
@@ -61,8 +74,14 @@ export declare const broadcastSchedulerTools: (import("./shared.js").ToolDefinit
|
|
|
61
74
|
webinarDayMin?: number | undefined;
|
|
62
75
|
webinarDayMax?: number | undefined;
|
|
63
76
|
bannerClick?: "ANY" | "YES" | "NO" | undefined;
|
|
77
|
+
prelist?: "ANY" | "YES" | "NO" | undefined;
|
|
78
|
+
previousSegment?: {
|
|
79
|
+
key: string;
|
|
80
|
+
minDaysSince: number;
|
|
81
|
+
} | undefined;
|
|
82
|
+
untouchedOnly?: boolean | undefined;
|
|
64
83
|
};
|
|
65
|
-
freshness_anchor: "SERIES_END" | "SERIES_END_PLUS_WAIT" | "LAST_APPLICATION" | "
|
|
84
|
+
freshness_anchor: "REGISTRATION" | "SERIES_END" | "SERIES_END_PLUS_WAIT" | "LAST_APPLICATION" | "PRELIST";
|
|
66
85
|
workspace_id?: string | undefined;
|
|
67
86
|
wait_after_series_end_hours?: number | undefined;
|
|
68
87
|
priority?: number | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { compactObject, defineTool, getcourseTransportEnum, uuidSchema, withInstructions, } from './shared.js';
|
|
2
|
+
import { buildListQuery, compactObject, defineTool, getcourseTransportEnum, uuidSchema, withInstructions, } from './shared.js';
|
|
3
3
|
/** Границы — паритет с DTO бэкенда: расхождение даёт 400 уже после подтверждения оператором. */
|
|
4
4
|
const DAILY_CAP_MAX = 5000;
|
|
5
5
|
/**
|
|
@@ -9,18 +9,48 @@ const DAILY_CAP_MAX = 5000;
|
|
|
9
9
|
*/
|
|
10
10
|
const FRESHNESS_DAYS_MAX = 78;
|
|
11
11
|
const COOLDOWN_DAYS_MAX = 365;
|
|
12
|
+
/**
|
|
13
|
+
* Потолок строк в выдаче снимков — паритет с `POOL_SNAPSHOT_LIST_LIMIT` бэкенда.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️⚠️ Границу обязан знать ИМЕННО агент, а не только сервер: ответ печатается целиком, и полный
|
|
16
|
+
* период на две тысячи строк со счётчиками — это мегабайты текста. Инструмент заведён из-за
|
|
17
|
+
* таймаута предпросмотра; без потолка он упёрся бы в предел того же рода с другой стороны.
|
|
18
|
+
*/
|
|
19
|
+
const POOL_SNAPSHOT_LIST_LIMIT = 2000;
|
|
12
20
|
const WAIT_HOURS_MAX = 720;
|
|
21
|
+
/** Локальная дата площадки — та же форма, что у бэкенда. */
|
|
22
|
+
const LOCAL_DATE_RE = /^\d{4}-\d{2}-\d{2}$/u;
|
|
13
23
|
const orderSchema = z.enum(['FRESH_FIRST', 'OLD_FIRST']);
|
|
14
24
|
const anchorSchema = z.enum([
|
|
15
25
|
'SERIES_END',
|
|
16
26
|
'SERIES_END_PLUS_WAIT',
|
|
17
27
|
'LAST_APPLICATION',
|
|
18
28
|
'REGISTRATION',
|
|
29
|
+
// ⚠️ Схема СТРОГАЯ: значение, объявленное на сервере и забытое здесь, отвергается ещё до
|
|
30
|
+
// запроса — фича остаётся недостижимой через MCP, и выглядит это как ошибка ввода агента.
|
|
31
|
+
'PRELIST',
|
|
19
32
|
]);
|
|
20
33
|
/**
|
|
21
34
|
* Тело расписания. `funnels`/`product_codes` принимают литерал `all` — обычный пользователь
|
|
22
35
|
* говорит «шли по всем воронкам», и заставлять его перечислять их руками незачем.
|
|
23
36
|
*/
|
|
37
|
+
/**
|
|
38
|
+
* Пара «дни недели + числа месяца» запрещена.
|
|
39
|
+
*
|
|
40
|
+
* ⚠️ Правило продублировано в схеме намеренно: бэкенд и CHECK базы её тоже не пускают, но модель
|
|
41
|
+
* узнавала бы об этом из 400-й — а описание инструмента для того и существует, чтобы правило было
|
|
42
|
+
* известно ДО вызова.
|
|
43
|
+
*/
|
|
44
|
+
const assertSingleRepeatAxis = (input, ctx) => {
|
|
45
|
+
if ((input.days_of_week?.length ?? 0) > 0 && (input.days_of_month?.length ?? 0) > 0) {
|
|
46
|
+
ctx.addIssue({
|
|
47
|
+
code: z.ZodIssueCode.custom,
|
|
48
|
+
path: ['days_of_month'],
|
|
49
|
+
message: 'Повтор задаётся ЛИБО days_of_week, ЛИБО days_of_month: вместе они дают «31-е и ' +
|
|
50
|
+
'понедельник», то есть расписание, которое не сработает годами',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
};
|
|
24
54
|
const scheduleShape = {
|
|
25
55
|
workspace_id: uuidSchema.optional(),
|
|
26
56
|
segment_id: uuidSchema,
|
|
@@ -32,10 +62,20 @@ const scheduleShape = {
|
|
|
32
62
|
.union([z.literal('all'), z.array(z.string().trim().min(1).max(64)).max(50)])
|
|
33
63
|
.optional(),
|
|
34
64
|
freshness_days: z.number().int().min(1).max(FRESHNESS_DAYS_MAX),
|
|
65
|
+
window_mode: z.enum(['ROLLING', 'FIXED']).optional(),
|
|
66
|
+
// ⚠️ ЛОКАЛЬНАЯ дата площадки, а не момент: момент сдвинул бы границу на смещение зоны.
|
|
67
|
+
window_from_local: z.string().regex(LOCAL_DATE_RE, 'window_from_local: дата ГГГГ-ММ-ДД').optional(),
|
|
68
|
+
// Конец ВКЛЮЧИТЕЛЬНО: «по 20 августа» берёт весь двадцатый день.
|
|
69
|
+
window_to_local: z.string().regex(LOCAL_DATE_RE, 'window_to_local: дата ГГГГ-ММ-ДД').optional(),
|
|
35
70
|
time_local: z
|
|
36
71
|
.string()
|
|
37
72
|
.regex(/^([01]\d|2[0-3]):([0-5]\d)$/, 'time_local: формат HH:mm в таймзоне площадки'),
|
|
38
73
|
days_of_week: z.array(z.number().int().min(1).max(7)).max(7).optional(),
|
|
74
|
+
// ⚠️ Взаимоисключимо с `days_of_week`: вместе они означают «31-е И понедельник». Пару отвергает
|
|
75
|
+
// и бэкенд 400-й, и CHECK базы — но узнавать об этом из ошибки сервера модель не должна, поэтому
|
|
76
|
+
// запрет продублирован схемой (см. `superRefine` ниже). Число больше длины месяца попадает на
|
|
77
|
+
// ПОСЛЕДНИЙ его день.
|
|
78
|
+
days_of_month: z.array(z.number().int().min(1).max(31)).max(31).optional(),
|
|
39
79
|
daily_cap: z.number().int().min(1).max(DAILY_CAP_MAX),
|
|
40
80
|
selection_order: orderSchema,
|
|
41
81
|
cooldown_days: z.number().int().min(0).max(COOLDOWN_DAYS_MAX),
|
|
@@ -66,8 +106,12 @@ const toScheduleBody = (input) => compactObject({
|
|
|
66
106
|
funnels: toList(input.funnels),
|
|
67
107
|
productCodes: toList(input.product_codes),
|
|
68
108
|
freshnessDays: input.freshness_days,
|
|
109
|
+
windowMode: input.window_mode,
|
|
110
|
+
windowFromLocal: input.window_from_local,
|
|
111
|
+
windowToLocal: input.window_to_local,
|
|
69
112
|
timeLocal: input.time_local,
|
|
70
113
|
daysOfWeek: input.days_of_week,
|
|
114
|
+
daysOfMonth: input.days_of_month,
|
|
71
115
|
dailyCap: input.daily_cap,
|
|
72
116
|
selectionOrder: input.selection_order,
|
|
73
117
|
cooldownDays: input.cooldown_days,
|
|
@@ -88,6 +132,7 @@ const toScheduleBody = (input) => compactObject({
|
|
|
88
132
|
export const broadcastSchedulerTools = [
|
|
89
133
|
defineTool({
|
|
90
134
|
name: 'besales_broadcast_schedule_list',
|
|
135
|
+
sideEffect: 'none',
|
|
91
136
|
requiredFields: [],
|
|
92
137
|
defaultWorkspaceId: true,
|
|
93
138
|
schema: z.object({ workspace_id: uuidSchema.optional() }).strict(),
|
|
@@ -102,6 +147,7 @@ export const broadcastSchedulerTools = [
|
|
|
102
147
|
}),
|
|
103
148
|
defineTool({
|
|
104
149
|
name: 'besales_broadcast_schedule_preview',
|
|
150
|
+
sideEffect: 'none',
|
|
105
151
|
requiredFields: [
|
|
106
152
|
'segment_id',
|
|
107
153
|
'mailing_variant_id',
|
|
@@ -114,7 +160,7 @@ export const broadcastSchedulerTools = [
|
|
|
114
160
|
'cooldown_days',
|
|
115
161
|
],
|
|
116
162
|
defaultWorkspaceId: true,
|
|
117
|
-
schema: z.object(scheduleShape).strict(),
|
|
163
|
+
schema: z.object(scheduleShape).strict().superRefine(assertSingleRepeatAxis),
|
|
118
164
|
createRequest: (input) => ({
|
|
119
165
|
method: 'POST',
|
|
120
166
|
path: `/workspaces/${input.workspace_id}/broadcast-schedules/preview`,
|
|
@@ -122,8 +168,12 @@ export const broadcastSchedulerTools = [
|
|
|
122
168
|
}),
|
|
123
169
|
enhanceResponse: (response) => withInstructions(response, [
|
|
124
170
|
'Ничего не отправляет и не пишет: считает ТЕМ ЖЕ путём, что и крон — тот же источник фактов, тот же компилятор правила, те же исключения.',
|
|
125
|
-
'⚠️ Показывай пользователю excludedBy числами. alreadySentSegment — этим сегментом уже слали; coldWelcomeClaimed —
|
|
126
|
-
'
|
|
171
|
+
'⚠️ Показывай пользователю excludedBy числами. alreadySentSegment — этим сегментом уже слали; alreadyGreeted — человек уже получал «Первое сообщение» (одно на контакт навсегда, любым сегментом; прежнее имя ключа coldWelcomeClaimed приходит от старого бэкенда в окне выкатки); activeEpisode — человека уже ведёт автоприём регистраций (приветствие должны и не отдали, либо подготовлен повторный вход на новый эфир); touchClaimed — это касание уже занято в журнале; journal — контакт подавался этим расписанием и ждёт паузы; cooldown — получал любую нашу рассылку в окне.',
|
|
172
|
+
'⚠️⚠️ productNotInList — у расписания задан список продуктов, а у этих людей продукт другой или не указан вовсе. Прежде этот отсев шёл МОЛЧА: строка выбрасывалась без счётчика, и часть пула исчезала без причины. Чинится списком продуктов в расписании.',
|
|
173
|
+
'⚠️⚠️ notReachable — ни один из ВЫБРАННЫХ каналов до человека не доходит, и это подтвердил ответ школы. Про невыбранные каналы число не говорит ничего. Чинится составом каналов расписания или рассылки, а не правилом сегмента: вердикт записывается вместе с набором каналов и перестаёт держать паузу, как только набор изменили.',
|
|
174
|
+
'⚠️⚠️ factsUnknown — НЕ отсев: эти люди в пуле. Число значит «школу про них ещё не спрашивали», и без него ноль в notReachable читается как «все достижимы». Доставки оно НЕ обещает: тот же прогон опрашивает школу перед подачей (по 300 за раз) и часть из них тогда отсеет — в отчёте прогона эти числа уже пересчитаны.',
|
|
175
|
+
'⚠️ Если notReachable равен размеру пула, сперва проверь площадку: когда НИ ОДИН выбранный канал ею не обслуживается, недостижимы будут все до единого, и чинится это в настройках площадки, а не в расписании. Предпросмотр в этом случае показывает отдельное предупреждение, а прогон закрывается своей причиной.', '⚠️ unverifiable — «нечем проверить», а НЕ «не подходит»: нет назначения серии, серия ещё идёт, нет длительности просмотра. Эти люди в рассылку не идут, и это правильно: отсутствие данных о явке не равно отсутствию человека на эфире.',
|
|
176
|
+
'⚠️⚠️ truncatedSeriesSkipped — ЕДИНСТВЕННАЯ источниковая причина, которую чинит сам оператор: выборка упёрлась в потолок строк, и запись о явке серии могла остаться за его границей, поэтому судить о ней нечем. Чинится окном расписания за минуту — сузить свежесть, список воронок или продуктов. До 10.09.2026 это число складывалось с unverifiable и читалось как жалоба на данные школы: не путай их снова.',
|
|
127
177
|
'factsAsOf — момент, на который источник считает данные полными. Сильно устаревшее значение означает, что аналитика отстаёт и «не пришедшие» могут быть ложными.',
|
|
128
178
|
'⚠️⚠️ overlaps — контакты, которых за последнюю неделю подавали ДРУГИЕ расписания. Непустой список означает, что человек рискует получить несколько сообщений: разведи расписания кулдауном или приоритетом сегментов, прежде чем включать.',
|
|
129
179
|
'byProduct показывает, как отбор разложится по продуктам — крон нарежет подачу этими же блоками.',
|
|
@@ -131,6 +181,7 @@ export const broadcastSchedulerTools = [
|
|
|
131
181
|
}),
|
|
132
182
|
defineTool({
|
|
133
183
|
name: 'besales_broadcast_schedule_upsert',
|
|
184
|
+
sideEffect: 'write',
|
|
134
185
|
requiredFields: [
|
|
135
186
|
'segment_id',
|
|
136
187
|
'mailing_variant_id',
|
|
@@ -143,7 +194,10 @@ export const broadcastSchedulerTools = [
|
|
|
143
194
|
'cooldown_days',
|
|
144
195
|
],
|
|
145
196
|
defaultWorkspaceId: true,
|
|
146
|
-
schema: z
|
|
197
|
+
schema: z
|
|
198
|
+
.object({ ...scheduleShape, schedule_id: uuidSchema.optional() })
|
|
199
|
+
.strict()
|
|
200
|
+
.superRefine(assertSingleRepeatAxis),
|
|
147
201
|
createRequest: (input) => input.schedule_id
|
|
148
202
|
? {
|
|
149
203
|
method: 'PUT',
|
|
@@ -165,6 +219,7 @@ export const broadcastSchedulerTools = [
|
|
|
165
219
|
}),
|
|
166
220
|
defineTool({
|
|
167
221
|
name: 'besales_broadcast_schedule_delete',
|
|
222
|
+
sideEffect: 'write',
|
|
168
223
|
requiredFields: ['schedule_id', 'explicit_confirmation'],
|
|
169
224
|
defaultWorkspaceId: true,
|
|
170
225
|
schema: z
|
|
@@ -185,6 +240,7 @@ export const broadcastSchedulerTools = [
|
|
|
185
240
|
}),
|
|
186
241
|
defineTool({
|
|
187
242
|
name: 'besales_broadcast_schedule_runs',
|
|
243
|
+
sideEffect: 'none',
|
|
188
244
|
requiredFields: ['schedule_id'],
|
|
189
245
|
defaultWorkspaceId: true,
|
|
190
246
|
schema: z
|
|
@@ -194,10 +250,14 @@ export const broadcastSchedulerTools = [
|
|
|
194
250
|
limit: z.number().int().min(1).max(100).optional(),
|
|
195
251
|
})
|
|
196
252
|
.strict(),
|
|
253
|
+
// ⚠️⚠️ Параметр клеится в ПУТЬ. Транспорт (`ApiToolRequest`) знает только method/path/body,
|
|
254
|
+
// поля `query` в нём нет — оно выбрасывалось МОЛЧА, и `limit` не доезжал до бэкенда никогда:
|
|
255
|
+
// сколько бы прогонов агент ни просил, приходило серверных 30, без ошибки и без признака
|
|
256
|
+
// усечения. Тот же приём уже применён в `follow-up.ts` и `platform-setup.ts`.
|
|
197
257
|
createRequest: (input) => ({
|
|
198
258
|
method: 'GET',
|
|
199
|
-
path: `/workspaces/${input.workspace_id}/broadcast-schedules/${input.schedule_id}/runs
|
|
200
|
-
|
|
259
|
+
path: `/workspaces/${input.workspace_id}/broadcast-schedules/${input.schedule_id}/runs` +
|
|
260
|
+
buildListQuery({ limit: input.limit }),
|
|
201
261
|
}),
|
|
202
262
|
enhanceResponse: (response) => withInstructions(response, [
|
|
203
263
|
'periodBucket — локальная ДАТА площадки: один прогон на сутки, повтор в тот же день невозможен.',
|
|
@@ -206,8 +266,47 @@ export const broadcastSchedulerTools = [
|
|
|
206
266
|
'attempts растёт на каждом WAITING_RESOURCE: большое число означает, что воркспейс постоянно занят и расписание стоит передвинуть по времени.',
|
|
207
267
|
]),
|
|
208
268
|
}),
|
|
269
|
+
/**
|
|
270
|
+
* Суточные снимки пула.
|
|
271
|
+
*
|
|
272
|
+
* ⚠️⚠️ Существует ровно потому, что `besales_broadcast_schedule_preview` боевого расписания НЕ
|
|
273
|
+
* укладывается в таймаут MCP (замер 09.09.2026): он ходит во внешний источник фактов и обходит
|
|
274
|
+
* десятки тысяч строк. Снимок читается из своей таблицы мгновенно. Это не замена предпросмотру:
|
|
275
|
+
* предпросмотр отвечает «как будет, если поменять правило», снимок — «что было вчера».
|
|
276
|
+
*/
|
|
277
|
+
defineTool({
|
|
278
|
+
name: 'besales_broadcast_schedule_pool_snapshots',
|
|
279
|
+
sideEffect: 'none',
|
|
280
|
+
requiredFields: [],
|
|
281
|
+
defaultWorkspaceId: true,
|
|
282
|
+
schema: z
|
|
283
|
+
.object({
|
|
284
|
+
workspace_id: uuidSchema.optional(),
|
|
285
|
+
// ⚠️ Проверяется только ФОРМА: `2026-02-30` регуляркой проходит, существование даты
|
|
286
|
+
// сверяет сервер. Форма здесь ради того же, ради чего и остальные границы в этом файле —
|
|
287
|
+
// чтобы правило было известно ДО вызова, а не приезжало 400-й.
|
|
288
|
+
from: z.string().regex(LOCAL_DATE_RE).optional(),
|
|
289
|
+
to: z.string().regex(LOCAL_DATE_RE).optional(),
|
|
290
|
+
limit: z.number().int().min(1).max(POOL_SNAPSHOT_LIST_LIMIT).optional(),
|
|
291
|
+
})
|
|
292
|
+
.strict(),
|
|
293
|
+
createRequest: (input) => ({
|
|
294
|
+
method: 'GET',
|
|
295
|
+
path: `/workspaces/${input.workspace_id}/broadcast-schedules/pool-snapshots` +
|
|
296
|
+
buildListQuery({ from: input.from, to: input.to, limit: input.limit }),
|
|
297
|
+
}),
|
|
298
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
299
|
+
'⚠️⚠️ Три состояния РАЗНЫЕ, и схлопывать их в ноль нельзя: строки за день нет — снимок не считали; status=FAILED — считали и не смогли (причина в error), poolSize и selectedCount при этом null, а не 0; truncated=true — снимок упёрся в бюджет строк источника, то есть показано НАЧАЛО окна, а не окно.',
|
|
300
|
+
'⚠️ truncated в КОРНЕ ответа, рядом с rows, — про ВЫДАЧУ, а не про пул. Потолков два и лечатся они противоположным: если ты передал limit — строк больше ТВОЕГО потолка, подними limit; если не передал — упёрлись в общий потолок выдачи, сузь from/to. Одноимённое поле ВНУТРИ строки — про пул того дня.',
|
|
301
|
+
'⚠️ selectedCount значит «отобрано на момент расчёта», а не «уедет сегодня»: день мог быть нерабочим по расписанию, площадка — неактивной, а части отобранных прогон сперва заведёт карточку.',
|
|
302
|
+
'Снимок берётся раз в сутки утром по зоне ПЛОЩАДКИ и ПРИБЛИЖАЕТ момент тика, но с ним не совпадает: скользящее окно свежести привязано к «сейчас» расчёта, а тик срабатывает в своё timeLocal. Точный час — константа бэкенда, наизусть его не называй.',
|
|
303
|
+
'Строки живут дольше расписаний: внешнего ключа нет намеренно, и снимки удалённого расписания остаются в истории — scheduleId в ответе может не найтись в besales_broadcast_schedule_list.',
|
|
304
|
+
'⚠️ Ответ печатается ЦЕЛИКОМ. Строк в сутки столько же, сколько расписаний, и без from/limit за год наберутся мегабайты текста: спрашивай окно, которое собираешься читать.',
|
|
305
|
+
]),
|
|
306
|
+
}),
|
|
209
307
|
defineTool({
|
|
210
308
|
name: 'besales_broadcast_segment_rule_set',
|
|
309
|
+
sideEffect: 'write',
|
|
211
310
|
requiredFields: ['segment_id', 'facets', 'freshness_anchor'],
|
|
212
311
|
defaultWorkspaceId: true,
|
|
213
312
|
schema: z
|
|
@@ -222,6 +321,32 @@ export const broadcastSchedulerTools = [
|
|
|
222
321
|
webinarDayMin: z.number().int().min(0).optional(),
|
|
223
322
|
webinarDayMax: z.number().int().min(0).optional(),
|
|
224
323
|
bannerClick: z.enum(['YES', 'NO', 'ANY']).optional(),
|
|
324
|
+
// Применимость и метки заказа предсписка объявляет ВОРОНКА в источнике фактов, а не
|
|
325
|
+
// мы: у нас настройки больше нет. Правила у воронки нет или данные не готовы — строки
|
|
326
|
+
// приходят непроверяемыми, и людям не уйдёт ничего.
|
|
327
|
+
prelist: z.enum(['YES', 'NO', 'ANY']).optional(),
|
|
328
|
+
/**
|
|
329
|
+
* ⚠️⚠️ ПОВТОРНОЕ касание. Сегмент уходит тем, у кого `key` был ПОСЛЕДНИМ нашим
|
|
330
|
+
* касанием и кто нам не ответил. Снимает вечный одноразовый claim приветствия —
|
|
331
|
+
* единственную структурную защиту от второго сообщения живому человеку, — поэтому
|
|
332
|
+
* порог снизу зеркалит серверную константу и здесь: ниже 30 суток сервер откажет.
|
|
333
|
+
*/
|
|
334
|
+
previousSegment: z
|
|
335
|
+
.object({
|
|
336
|
+
key: z.string().min(1).max(64),
|
|
337
|
+
minDaysSince: z.number().int().min(30).max(78),
|
|
338
|
+
})
|
|
339
|
+
.strict()
|
|
340
|
+
.optional(),
|
|
341
|
+
/**
|
|
342
|
+
* Право первого касания: сегмент уходит только тем, кому мы ещё НИКОГДА не писали.
|
|
343
|
+
*
|
|
344
|
+
* ⚠️⚠️ Молчание значит `true` — это сегодняшнее поведение платформы. Выключение
|
|
345
|
+
* осознанное и снимает ровно одну защиту: человеку, уже получившему от нас холодное
|
|
346
|
+
* приветствие, уйдёт ВТОРОЕ первое сообщение. Остальные гейты (ответ, оператор,
|
|
347
|
+
* тихий период, «этим сегментом уже слали») продолжают работать.
|
|
348
|
+
*/
|
|
349
|
+
untouchedOnly: z.boolean().optional(),
|
|
225
350
|
// ⚠️⚠️ ОБЯЗАТЕЛЬНЫ на сервере (`SEGMENT_FACETS_REQUIRED_GUARDS`): необязательное
|
|
226
351
|
// поле с дефолтом «неважно» делало законным правило целиком из умолчаний, а такое
|
|
227
352
|
// правило матчит КАЖДОГО в окне — рассылка ушла бы и людям с живой заявкой у
|
|
@@ -249,9 +374,10 @@ export const broadcastSchedulerTools = [
|
|
|
249
374
|
'⚠️⚠️ 409 означает, что сегментом УЖЕ отправляли и правило заморожено. Это не ошибка доступа: строки отчётов уже несут это имя, и правка правила задним числом сделала бы разрез несопоставимым сам с собой. Заведи НОВЫЙ сегмент.',
|
|
250
375
|
'attended=NO проходит только достоверный «не пришёл». Человек, про которого данных нет (серия ещё идёт, назначения нет), в сегмент НЕ попадает — и это защита: отсутствие данных о явке не равно отсутствию человека на эфире.',
|
|
251
376
|
'Секунды, а не минуты: «от 120 минут» — это activeSecondsMin=7200. Контакт без известной длительности порог не проходит.',
|
|
252
|
-
'wait_after_series_end_hours — сколько ждать после эфира, прежде чем считать отсутствие явки доказанным.
|
|
377
|
+
'wait_after_series_end_hours — сколько ждать после эфира, прежде чем считать отсутствие явки доказанным. Дефолт 1 час: касание свежее, но явка к этому моменту досчитана у меньшинства (6 ч → 56 %, 24 ч → 74 %, 48 ч → 81 %), и недосчитанный контакт в отбор не попадает. Поэтому при коротком ожидании ставьте freshness_days от 3: при 1 человека смотрят ровно один раз.',
|
|
253
378
|
'application=CANCELLED требует отменённой заявки И отсутствия живой: с человеком, у которого заявка в работе, разговаривает менеджер.',
|
|
254
379
|
'payment=NOT_ANYWHERE исключает всех, кто когда-либо успешно платил — включая тех, кому потом сделали возврат: он действительно платил.',
|
|
380
|
+
'untouchedOnly не указан = true: сегмент уходит только тем, кому мы никогда не писали. Ставьте false осознанно — это разрешает второе первое сообщение человеку, уже получившему от нас холодное приветствие в другой воронке.',
|
|
255
381
|
]),
|
|
256
382
|
}),
|
|
257
383
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-scheduler.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-scheduler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"broadcast-scheduler.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const contactTools: (import("./shared.js").ToolDefinition<{
|
|
2
|
+
workspace_id?: string | undefined;
|
|
3
|
+
limit?: number | undefined;
|
|
4
|
+
cursor?: string | undefined;
|
|
5
|
+
search?: string | undefined;
|
|
6
|
+
external_id?: string | undefined;
|
|
7
|
+
phone?: string | undefined;
|
|
8
|
+
email?: string | undefined;
|
|
9
|
+
channel_id?: string | undefined;
|
|
10
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
11
|
+
contact_id: string;
|
|
12
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
13
|
+
contact_id: string;
|
|
14
|
+
message_id?: string | undefined;
|
|
15
|
+
}>)[];
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { assertCompleteList } from '../incomplete-list.js';
|
|
3
|
+
import { defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
4
|
+
const CONTACTS_MAX_PAGE_SIZE = 50;
|
|
5
|
+
export const contactTools = [
|
|
6
|
+
defineTool({
|
|
7
|
+
name: 'besales_contact_search',
|
|
8
|
+
sideEffect: 'none',
|
|
9
|
+
closedWorld: true,
|
|
10
|
+
defaultWorkspaceId: true,
|
|
11
|
+
requiredFields: [],
|
|
12
|
+
resultPolicy: { neverTruncate: true },
|
|
13
|
+
schema: z
|
|
14
|
+
.object({
|
|
15
|
+
workspace_id: uuidSchema.optional(),
|
|
16
|
+
limit: z.number().int().min(1).max(CONTACTS_MAX_PAGE_SIZE).optional(),
|
|
17
|
+
cursor: z.string().min(1).optional(),
|
|
18
|
+
search: z.string().trim().min(1).optional(),
|
|
19
|
+
external_id: z.string().trim().min(1).optional(),
|
|
20
|
+
phone: z.string().trim().min(1).optional(),
|
|
21
|
+
email: z.string().trim().min(1).optional(),
|
|
22
|
+
channel_id: uuidSchema.optional(),
|
|
23
|
+
})
|
|
24
|
+
.strict(),
|
|
25
|
+
createRequest: (input) => {
|
|
26
|
+
const query = new URLSearchParams();
|
|
27
|
+
if (input.limit !== undefined)
|
|
28
|
+
query.set('limit', String(input.limit));
|
|
29
|
+
if (input.cursor)
|
|
30
|
+
query.set('cursor', input.cursor);
|
|
31
|
+
if (input.search)
|
|
32
|
+
query.set('search', input.search);
|
|
33
|
+
if (input.external_id)
|
|
34
|
+
query.set('externalId', input.external_id);
|
|
35
|
+
if (input.phone)
|
|
36
|
+
query.set('phone', input.phone);
|
|
37
|
+
if (input.email)
|
|
38
|
+
query.set('email', input.email);
|
|
39
|
+
if (input.channel_id)
|
|
40
|
+
query.set('channelId', input.channel_id);
|
|
41
|
+
const suffix = query.size > 0 ? `?${query.toString()}` : '';
|
|
42
|
+
return { method: 'GET', path: `/workspaces/${input.workspace_id}/contacts${suffix}` };
|
|
43
|
+
},
|
|
44
|
+
enhanceResponse: (response, input) => assertCompleteList(response, {
|
|
45
|
+
pageRequested: input.limit !== undefined || input.cursor !== undefined,
|
|
46
|
+
toolName: 'besales_contact_search',
|
|
47
|
+
howToPage: `Повтори вызов с limit до ${CONTACTS_MAX_PAGE_SIZE} и cursor из ответа, пока cursor не станет пустым.`,
|
|
48
|
+
}),
|
|
49
|
+
}),
|
|
50
|
+
defineTool({
|
|
51
|
+
name: 'besales_contact_get',
|
|
52
|
+
sideEffect: 'none',
|
|
53
|
+
closedWorld: true,
|
|
54
|
+
requiredFields: ['contact_id'],
|
|
55
|
+
resultPolicy: { neverTruncate: true },
|
|
56
|
+
schema: z.object({ contact_id: uuidSchema }).strict(),
|
|
57
|
+
createRequest: (input) => ({ method: 'GET', path: `/contacts/${input.contact_id}` }),
|
|
58
|
+
}),
|
|
59
|
+
defineTool({
|
|
60
|
+
name: 'besales_contact_diagnostics_get',
|
|
61
|
+
sideEffect: 'none',
|
|
62
|
+
closedWorld: true,
|
|
63
|
+
requiredFields: ['contact_id'],
|
|
64
|
+
resultPolicy: { neverTruncate: true },
|
|
65
|
+
schema: z
|
|
66
|
+
.object({
|
|
67
|
+
contact_id: uuidSchema,
|
|
68
|
+
message_id: uuidSchema.optional(),
|
|
69
|
+
})
|
|
70
|
+
.strict(),
|
|
71
|
+
createRequest: (input) => ({
|
|
72
|
+
method: 'GET',
|
|
73
|
+
path: `/contacts/${input.contact_id}/diagnostics` +
|
|
74
|
+
(input.message_id ? `?messageId=${encodeURIComponent(input.message_id)}` : ''),
|
|
75
|
+
}),
|
|
76
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
77
|
+
'Evidence-first: silence/operator/routing/transport описывают только сохранённые факты.',
|
|
78
|
+
'rag=not_recorded означает отсутствие durable production trace, а не ноль найденных знаний.',
|
|
79
|
+
'Tool executions связаны с контактом по времени; не называй их точным событием выбранного сообщения.',
|
|
80
|
+
'Для следующего шага используй contact/platform/agent/message IDs из ответа; не повторяй отправку по неизвестному исходу.',
|
|
81
|
+
]),
|
|
82
|
+
}),
|
|
83
|
+
];
|
|
84
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../src/tools/definitions/contacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ export declare const crmPlatformTools: (import("./shared.js").ToolDefinition<{
|
|
|
3
3
|
workspace_id?: string | undefined;
|
|
4
4
|
platform_id?: string | undefined;
|
|
5
5
|
filter?: "all" | "variables" | "constants" | undefined;
|
|
6
|
+
limit?: number | undefined;
|
|
7
|
+
cursor?: string | undefined;
|
|
6
8
|
}> | import("./shared.js").ToolDefinition<{
|
|
7
9
|
scope: "WORKSPACE" | "CHANNEL";
|
|
8
10
|
name: string;
|