@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,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,9 +9,29 @@ const DAILY_CAP_MAX = 5000;
|
|
|
9
9
|
*/
|
|
10
10
|
const FRESHNESS_DAYS_MAX = 78;
|
|
11
11
|
const COOLDOWN_DAYS_MAX = 365;
|
|
12
|
+
/**
|
|
13
|
+
* Окно свежести строк без расписания в «Пуле сегодня» — паритет с `POOL_TODAY_WINDOW_DAYS_MAX`
|
|
14
|
+
* бэкенда: окно регистраций строки (окно + 14 суток запаса) обязано уложиться в общую выкачку
|
|
15
|
+
* (30 суток). Больше сервер отвергнет 400.
|
|
16
|
+
*/
|
|
17
|
+
const POOL_TODAY_WINDOW_DAYS_MAX = 16;
|
|
12
18
|
const WAIT_HOURS_MAX = 720;
|
|
13
19
|
/** Локальная дата площадки — та же форма, что у бэкенда. */
|
|
14
20
|
const LOCAL_DATE_RE = /^\d{4}-\d{2}-\d{2}$/u;
|
|
21
|
+
/**
|
|
22
|
+
* Списки фильтров — ОДНА форма у расписания и у «Пула сегодня»: `'all'` либо список кодов.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ Границы повторяют DTO бэкенда (`POOL_TODAY_FUNNELS_MAX`, `POOL_TODAY_PRODUCTS_MAX`,
|
|
25
|
+
* `POOL_TODAY_FILTER_VALUE_MAX_LENGTH`): разойдясь, схема пропускала бы то, что сервер отвергает
|
|
26
|
+
* 400-м, и модель узнавала бы о границе из ошибки.
|
|
27
|
+
*/
|
|
28
|
+
const FILTER_VALUE_MAX_LENGTH = 64;
|
|
29
|
+
const FUNNELS_MAX = 100;
|
|
30
|
+
const PRODUCTS_MAX = 50;
|
|
31
|
+
const filterListSchema = (max) => z.union([
|
|
32
|
+
z.literal('all'),
|
|
33
|
+
z.array(z.string().trim().min(1).max(FILTER_VALUE_MAX_LENGTH)).max(max),
|
|
34
|
+
]);
|
|
15
35
|
const orderSchema = z.enum(['FRESH_FIRST', 'OLD_FIRST']);
|
|
16
36
|
const anchorSchema = z.enum([
|
|
17
37
|
'SERIES_END',
|
|
@@ -49,10 +69,8 @@ const scheduleShape = {
|
|
|
49
69
|
mailing_variant_id: uuidSchema,
|
|
50
70
|
platform_id: uuidSchema,
|
|
51
71
|
mechanism: z.literal('cold_welcome'),
|
|
52
|
-
funnels:
|
|
53
|
-
product_codes:
|
|
54
|
-
.union([z.literal('all'), z.array(z.string().trim().min(1).max(64)).max(50)])
|
|
55
|
-
.optional(),
|
|
72
|
+
funnels: filterListSchema(FUNNELS_MAX).optional(),
|
|
73
|
+
product_codes: filterListSchema(PRODUCTS_MAX).optional(),
|
|
56
74
|
freshness_days: z.number().int().min(1).max(FRESHNESS_DAYS_MAX),
|
|
57
75
|
window_mode: z.enum(['ROLLING', 'FIXED']).optional(),
|
|
58
76
|
// ⚠️ ЛОКАЛЬНАЯ дата площадки, а не момент: момент сдвинул бы границу на смещение зоны.
|
|
@@ -71,6 +89,7 @@ const scheduleShape = {
|
|
|
71
89
|
daily_cap: z.number().int().min(1).max(DAILY_CAP_MAX),
|
|
72
90
|
selection_order: orderSchema,
|
|
73
91
|
cooldown_days: z.number().int().min(0).max(COOLDOWN_DAYS_MAX),
|
|
92
|
+
handoff_from_school_platforms: z.boolean().optional().describe('ПЕРЕДАЧА: забирать людей с ДРУГИХ площадок GetCourse той же школы. Включённый флаг меняет смысл отбора: берутся ТОЛЬКО люди, чья карточка живёт на других площадках школы (и те, кого прошлая попытка уже перевезла, но сообщение не ушло), а перед отправкой карточка переносится сюда — с перепином на заказ сегмента и остановкой цепочек прежней площадки. Площадки-источники считает сам отбор («вся школа минус своя»), поэтому новая площадка школы подхватывается без правки расписания. Требует сегмента-ПРОДОЛЖЕНИЯ (снят «только нетронутым», без правила повтора): у человека с соседней площадки право первого сообщения уже сожжено. Ещё требует заполненного домена школы у площадки расписания и хотя бы одной другой площадки GetCourse в школе. Выключено — передачи нет.'),
|
|
74
93
|
channels: z
|
|
75
94
|
// ⚠️ Канон транспортов, а не свободная строка: иначе про допустимые значения модель узнаёт
|
|
76
95
|
// из 400-й ошибки. Ровно этот дефект уже закрыт parity-тестом контракта для соседних тулов.
|
|
@@ -107,6 +126,7 @@ const toScheduleBody = (input) => compactObject({
|
|
|
107
126
|
dailyCap: input.daily_cap,
|
|
108
127
|
selectionOrder: input.selection_order,
|
|
109
128
|
cooldownDays: input.cooldown_days,
|
|
129
|
+
handoffFromSchoolPlatforms: input.handoff_from_school_platforms,
|
|
110
130
|
channels: input.channels,
|
|
111
131
|
// ⚠️ Режим передаётся ТОЛЬКО если его задал вызывающий: сам он на поведение не влияет, но
|
|
112
132
|
// подставлять сюда `RESTRICT` значит записать в строку расписания решение, которого никто
|
|
@@ -124,6 +144,7 @@ const toScheduleBody = (input) => compactObject({
|
|
|
124
144
|
export const broadcastSchedulerTools = [
|
|
125
145
|
defineTool({
|
|
126
146
|
name: 'besales_broadcast_schedule_list',
|
|
147
|
+
sideEffect: 'none',
|
|
127
148
|
requiredFields: [],
|
|
128
149
|
defaultWorkspaceId: true,
|
|
129
150
|
schema: z.object({ workspace_id: uuidSchema.optional() }).strict(),
|
|
@@ -138,6 +159,7 @@ export const broadcastSchedulerTools = [
|
|
|
138
159
|
}),
|
|
139
160
|
defineTool({
|
|
140
161
|
name: 'besales_broadcast_schedule_preview',
|
|
162
|
+
sideEffect: 'none',
|
|
141
163
|
requiredFields: [
|
|
142
164
|
'segment_id',
|
|
143
165
|
'mailing_variant_id',
|
|
@@ -158,11 +180,19 @@ export const broadcastSchedulerTools = [
|
|
|
158
180
|
}),
|
|
159
181
|
enhanceResponse: (response) => withInstructions(response, [
|
|
160
182
|
'Ничего не отправляет и не пишет: считает ТЕМ ЖЕ путём, что и крон — тот же источник фактов, тот же компилятор правила, те же исключения.',
|
|
161
|
-
'⚠️ Показывай пользователю excludedBy числами. alreadySentSegment — этим сегментом уже слали; alreadyGreeted — человек уже получал «Первое сообщение» (одно на контакт навсегда, любым сегментом; прежнее имя ключа coldWelcomeClaimed приходит от старого бэкенда в окне выкатки); journal — контакт подавался этим расписанием и ждёт паузы; cooldown — получал любую нашу рассылку в окне.',
|
|
183
|
+
'⚠️ Показывай пользователю excludedBy числами. alreadySentSegment — этим сегментом уже слали; alreadyGreeted — человек уже получал «Первое сообщение» (одно на контакт навсегда, любым сегментом; прежнее имя ключа coldWelcomeClaimed приходит от старого бэкенда в окне выкатки); activeEpisode — человека уже ведёт автоприём регистраций (приветствие должны и не отдали, либо подготовлен повторный вход на новый эфир); touchClaimed — это касание уже занято в журнале; journal — контакт подавался этим расписанием и ждёт паузы; cooldown — получал любую нашу рассылку в окне.',
|
|
162
184
|
'⚠️⚠️ productNotInList — у расписания задан список продуктов, а у этих людей продукт другой или не указан вовсе. Прежде этот отсев шёл МОЛЧА: строка выбрасывалась без счётчика, и часть пула исчезала без причины. Чинится списком продуктов в расписании.',
|
|
163
185
|
'⚠️⚠️ notReachable — ни один из ВЫБРАННЫХ каналов до человека не доходит, и это подтвердил ответ школы. Про невыбранные каналы число не говорит ничего. Чинится составом каналов расписания или рассылки, а не правилом сегмента: вердикт записывается вместе с набором каналов и перестаёт держать паузу, как только набор изменили.',
|
|
164
186
|
'⚠️⚠️ factsUnknown — НЕ отсев: эти люди в пуле. Число значит «школу про них ещё не спрашивали», и без него ноль в notReachable читается как «все достижимы». Доставки оно НЕ обещает: тот же прогон опрашивает школу перед подачей (по 300 за раз) и часть из них тогда отсеет — в отчёте прогона эти числа уже пересчитаны.',
|
|
165
187
|
'⚠️ Если notReachable равен размеру пула, сперва проверь площадку: когда НИ ОДИН выбранный канал ею не обслуживается, недостижимы будут все до единого, и чинится это в настройках площадки, а не в расписании. Предпросмотр в этом случае показывает отдельное предупреждение, а прогон закрывается своей причиной.', '⚠️ unverifiable — «нечем проверить», а НЕ «не подходит»: нет назначения серии, серия ещё идёт, нет длительности просмотра. Эти люди в рассылку не идут, и это правильно: отсутствие данных о явке не равно отсутствию человека на эфире.',
|
|
188
|
+
'⚠️⚠️ truncatedSeriesSkipped — ЕДИНСТВЕННАЯ источниковая причина, которую чинит сам оператор: выборка упёрлась в потолок строк, и запись о явке серии могла остаться за его границей, поэтому судить о ней нечем. Чинится окном расписания за минуту — сузить свежесть, список воронок или продуктов. До 10.09.2026 это число складывалось с unverifiable и читалось как жалоба на данные школы: не путай их снова.',
|
|
189
|
+
'⚠️⚠️ claimedByHigherPriority — НЕ отсев по данным, а приоритет: человек подходит и под сегмент с БОЛЬШИМ приоритетом, у которого на этой площадке включено расписание ТОГО ЖЕ механизма, он в его окне и фильтрах, и то расписание его возьмёт — или уже отправило ему свой текст, в том числе волной школы. Исключение одно: старшее пишет только нетронутым, а этому человеку мы уже писали ДРУГИМ сегментом — тогда он остаётся младшему. Большое число — не поломка, а мера пересечения; меняется приоритетами сегментов. ⚠️ Число НЕ обещает, что человеку вообще что-то уйдёт: (1) потолок и день запуска старшего не проверяются — упрётся старшее в потолок, излишек ждёт следующего запуска, а при FRESH_FIRST самые старые из него выходят из окна ни с чем; (2) если текст старшего уже ушёл волной школы, подхватить человека может только расписание ПОВТОРА старшего сегмента, и его надо завести отдельно; (3) человек без живой карточки на этой площадке не получит ничего ни от кого — повтор старшего отсечёт его причиной repeatNoCard; (4) если у расписаний РАЗНЫЕ списки воронок, разведение неполно: воронки отсекаются на стороне источника фактов, и строк человека из чужой воронки в снимке нет вовсе — ставь пересекающимся сегментам одинаковые воронки.',
|
|
190
|
+
'⚠️⚠️ repeatNoCard — кандидат на ПОВТОР (прошлое касание годится), но живой карточки на ЭТОЙ площадке у человека нет: чаще всего волну школы записали на эту площадку, а карточка у него на соседней. Без карточки не проверить ответы и дожимы, а импорт карточку здесь не заведёт (обновит соседнюю), поэтому такие люди исключаются. Расписанием это не чинится.',
|
|
191
|
+
'⚠️⚠️ cardOnSiblingPlatform — человек живёт на СОСЕДНЕЙ площадке той же школы GetCourse, а на площадке расписания карточки у него нет. Импорт её сюда не перенесёт: он ищет человека по школе и обновляет ту карточку, что уже есть, — поэтому такие люди исключаются, а не уезжают в импорт (иначе каждый месяц они занимали бы слот дневного потолка и закрывались исходом NOT_IMPORTED). Расписанием не чинится: рассылать надо с той площадки, где человек живёт. Большое число у расписания на новой площадке — норма: люди школы живут на старой.',
|
|
192
|
+
'⚠️⚠️ noMessengerVerdict — школа УЖЕ отвечала, что привязанных мессенджеров у человека нет, и ответ ещё в силе. Карточки в базе у него нет, импорт её не заведёт, поэтому подача сожгла бы слот дневного потолка и слот импортов воркспейса и закрылась бы исходом NOT_IMPORTED на 30 суток. Срок доверия ответу задаётся у ПЛОЩАДКИ (getcourse_settings.reachability_ttl_days, по умолчанию 7 суток; 0 — спрашивать школу каждый раз); когда он истечёт, человек снова уедет в импорт и школу спросят заново. Чинится почтой, но включать её надо В ДВУХ местах: в allowlist ПЛОЩАДКИ (getcourse_settings.available_transports) и в каналах рассылки/расписания. Гейт сужает каналы по allowlist площадки, поэтому Email только в рассылке ничего не меняет — и это верно: канал вне allowlist школа не отправит никогда.',
|
|
193
|
+
'⚠️⚠️ notHandoffCandidate — расписание ПЕРЕДАЧИ (у него включён handoff_from_school_platforms) берёт только людей, чья карточка живёт на ДРУГИХ площадках той же школы и чья серия там уже закончилась (последний шаг календарной цепочки источника позади). Остальные — свои люди площадки, люди без карточек и те, у кого серия ещё идёт, — уходят в это число. У обычного расписания оно всегда ноль.',
|
|
194
|
+
'⚠️⚠️ handoffReturn — этого человека передача уже увозила С ЭТОЙ площадки, и в рамках текущего входа в сегмент он сюда не вернётся: иначе два расписания-продолжения возили бы его по кругу, а каждый переезд необратим. Новый вход спустя время запрету не подлежит. Ненулевое число означает, что у вас кольцо из двух расписаний передачи — это настройка, а не сбой данных.',
|
|
195
|
+
'⚠️⚠️ handoffBlocked — карточку не перенесли: предохранитель школы (идёт серия, действующая заявка, оплата), контактом занят человек (бан, оператор, мьют), личность занята другим процессом либо на площадке-адресате уже есть карточка с этим внешним id (последнее — навсегда). Такие люди в подачу не идут и получают исход HANDOFF_BLOCKED в журнале подач.',
|
|
166
196
|
'factsAsOf — момент, на который источник считает данные полными. Сильно устаревшее значение означает, что аналитика отстаёт и «не пришедшие» могут быть ложными.',
|
|
167
197
|
'⚠️⚠️ overlaps — контакты, которых за последнюю неделю подавали ДРУГИЕ расписания. Непустой список означает, что человек рискует получить несколько сообщений: разведи расписания кулдауном или приоритетом сегментов, прежде чем включать.',
|
|
168
198
|
'byProduct показывает, как отбор разложится по продуктам — крон нарежет подачу этими же блоками.',
|
|
@@ -170,6 +200,7 @@ export const broadcastSchedulerTools = [
|
|
|
170
200
|
}),
|
|
171
201
|
defineTool({
|
|
172
202
|
name: 'besales_broadcast_schedule_upsert',
|
|
203
|
+
sideEffect: 'write',
|
|
173
204
|
requiredFields: [
|
|
174
205
|
'segment_id',
|
|
175
206
|
'mailing_variant_id',
|
|
@@ -207,6 +238,7 @@ export const broadcastSchedulerTools = [
|
|
|
207
238
|
}),
|
|
208
239
|
defineTool({
|
|
209
240
|
name: 'besales_broadcast_schedule_delete',
|
|
241
|
+
sideEffect: 'write',
|
|
210
242
|
requiredFields: ['schedule_id', 'explicit_confirmation'],
|
|
211
243
|
defaultWorkspaceId: true,
|
|
212
244
|
schema: z
|
|
@@ -227,6 +259,7 @@ export const broadcastSchedulerTools = [
|
|
|
227
259
|
}),
|
|
228
260
|
defineTool({
|
|
229
261
|
name: 'besales_broadcast_schedule_runs',
|
|
262
|
+
sideEffect: 'none',
|
|
230
263
|
requiredFields: ['schedule_id'],
|
|
231
264
|
defaultWorkspaceId: true,
|
|
232
265
|
schema: z
|
|
@@ -236,10 +269,14 @@ export const broadcastSchedulerTools = [
|
|
|
236
269
|
limit: z.number().int().min(1).max(100).optional(),
|
|
237
270
|
})
|
|
238
271
|
.strict(),
|
|
272
|
+
// ⚠️⚠️ Параметр клеится в ПУТЬ. Транспорт (`ApiToolRequest`) знает только method/path/body,
|
|
273
|
+
// поля `query` в нём нет — оно выбрасывалось МОЛЧА, и `limit` не доезжал до бэкенда никогда:
|
|
274
|
+
// сколько бы прогонов агент ни просил, приходило серверных 30, без ошибки и без признака
|
|
275
|
+
// усечения. Тот же приём уже применён в `follow-up.ts` и `platform-setup.ts`.
|
|
239
276
|
createRequest: (input) => ({
|
|
240
277
|
method: 'GET',
|
|
241
|
-
path: `/workspaces/${input.workspace_id}/broadcast-schedules/${input.schedule_id}/runs
|
|
242
|
-
|
|
278
|
+
path: `/workspaces/${input.workspace_id}/broadcast-schedules/${input.schedule_id}/runs` +
|
|
279
|
+
buildListQuery({ limit: input.limit }),
|
|
243
280
|
}),
|
|
244
281
|
enhanceResponse: (response) => withInstructions(response, [
|
|
245
282
|
'periodBucket — локальная ДАТА площадки: один прогон на сутки, повтор в тот же день невозможен.',
|
|
@@ -248,8 +285,96 @@ export const broadcastSchedulerTools = [
|
|
|
248
285
|
'attempts растёт на каждом WAITING_RESOURCE: большое число означает, что воркспейс постоянно занят и расписание стоит передвинуть по времени.',
|
|
249
286
|
]),
|
|
250
287
|
}),
|
|
288
|
+
/**
|
|
289
|
+
* «Пул сегодня»: сегменты с правилом на площадке — сколько сейчас в пуле и сколько уйдёт.
|
|
290
|
+
*
|
|
291
|
+
* ⚠️⚠️ Считает СЕРВЕР фоном, одной выкачкой источника фактов на площадку: живой предпросмотр
|
|
292
|
+
* боевого расписания в таймаут MCP не укладывается (замер 09.09.2026). Вызов заказывает расчёт
|
|
293
|
+
* и сразу отдаёт последний посчитанный; повторный вызов с теми же параметрами — опрос, новый
|
|
294
|
+
* расчёт не заводится. С `local_day` — чтение утреннего расчёта того дня (история).
|
|
295
|
+
*
|
|
296
|
+
* ⚠️⚠️ Побочный эффект ЕСТЬ, и инструмент не читающий: вызов без `local_day` — это POST,
|
|
297
|
+
* который заводит расчёт (строка живёт до двух недель) и снимает прежние неначатые заказы того
|
|
298
|
+
* же ключа. Пометка «только чтение» отдала бы его хосту в профиль, где вызовы одобряются без
|
|
299
|
+
* спроса. Идемпотентность объявлена честно: повтор с теми же параметрами переиспользует живой
|
|
300
|
+
* и свежий (до 5 минут) расчёт — на этом и держится опрос; исключение — `force`, он и назван
|
|
301
|
+
* «только после своей правки».
|
|
302
|
+
*/
|
|
303
|
+
defineTool({
|
|
304
|
+
name: 'besales_broadcast_pool_today',
|
|
305
|
+
sideEffect: 'write',
|
|
306
|
+
reversible: true,
|
|
307
|
+
idempotent: true,
|
|
308
|
+
requiredFields: [],
|
|
309
|
+
defaultWorkspaceId: true,
|
|
310
|
+
schema: z
|
|
311
|
+
.object({
|
|
312
|
+
workspace_id: uuidSchema.optional(),
|
|
313
|
+
platform_id: uuidSchema
|
|
314
|
+
.optional()
|
|
315
|
+
.describe('GetCourse-площадка. Не передан — первая активная площадка с расписанием.'),
|
|
316
|
+
window_days: z.number().int().min(1).max(POOL_TODAY_WINDOW_DAYS_MAX).optional(),
|
|
317
|
+
funnels: filterListSchema(FUNNELS_MAX).optional(),
|
|
318
|
+
product_codes: filterListSchema(PRODUCTS_MAX).optional(),
|
|
319
|
+
channels: z.array(getcourseTransportEnum).max(getcourseTransportEnum.options.length).optional(),
|
|
320
|
+
cooldown_days: z.number().int().min(0).max(COOLDOWN_DAYS_MAX).optional(),
|
|
321
|
+
// ⚠️ Проверяется только ФОРМА: существование даты сверяет сервер.
|
|
322
|
+
local_day: z.string().regex(LOCAL_DATE_RE, 'local_day: дата ГГГГ-ММ-ДД').optional(),
|
|
323
|
+
force: z.boolean().optional(),
|
|
324
|
+
})
|
|
325
|
+
.strict()
|
|
326
|
+
.superRefine((input, ctx) => {
|
|
327
|
+
// ⚠️ Утренний расчёт дня считан с настройками по умолчанию: фильтры рядом с днём сервер
|
|
328
|
+
// отвергает 400-й, и узнавать об этом из ошибки модель не должна.
|
|
329
|
+
const withSettings = input.window_days !== undefined ||
|
|
330
|
+
input.funnels !== undefined ||
|
|
331
|
+
input.product_codes !== undefined ||
|
|
332
|
+
input.channels !== undefined ||
|
|
333
|
+
input.cooldown_days !== undefined ||
|
|
334
|
+
input.force !== undefined;
|
|
335
|
+
if (input.local_day !== undefined && withSettings) {
|
|
336
|
+
ctx.addIssue({
|
|
337
|
+
code: z.ZodIssueCode.custom,
|
|
338
|
+
path: ['local_day'],
|
|
339
|
+
message: 'local_day читает утренний расчёт дня с настройками по умолчанию — окно, воронки, продукты, каналы, кулдаун и force с ним не передаются',
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}),
|
|
343
|
+
createRequest: (input) => input.local_day !== undefined
|
|
344
|
+
? {
|
|
345
|
+
method: 'GET',
|
|
346
|
+
path: `/workspaces/${input.workspace_id}/broadcast-pool` +
|
|
347
|
+
buildListQuery({ platformId: input.platform_id, day: input.local_day }),
|
|
348
|
+
}
|
|
349
|
+
: {
|
|
350
|
+
method: 'POST',
|
|
351
|
+
path: `/workspaces/${input.workspace_id}/broadcast-pool/refresh`,
|
|
352
|
+
body: compactObject({
|
|
353
|
+
platformId: input.platform_id,
|
|
354
|
+
windowDays: input.window_days,
|
|
355
|
+
funnels: toList(input.funnels),
|
|
356
|
+
products: toList(input.product_codes),
|
|
357
|
+
channels: input.channels,
|
|
358
|
+
cooldownDays: input.cooldown_days,
|
|
359
|
+
force: input.force,
|
|
360
|
+
}),
|
|
361
|
+
},
|
|
362
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
363
|
+
'⚠️⚠️ activeRun не пуст — идёт расчёт этих настроек: вызови инструмент ЕЩЁ РАЗ через минуту с теми же параметрами. Повторный вызов — опрос, новый расчёт он не заказывает. run — последний ПОСЧИТАННЫЙ расчёт этих настроек (run.finishedAt — когда); run=null — ещё не считали.',
|
|
364
|
+
'⚠️⚠️ Строка с расписанием (scheduleId не null) считается ТЕМ ЖЕ путём, что его тик: окно, воронки, продукты, каналы и тихий период — самого расписания; параметры вызова на неё не действуют. У выключенного расписания selectedCount значит «уйдёт, если включить». Строка без расписания считается по параметрам вызова (окно window_days, по умолчанию 3 суток; воронки, продукты, каналы, кулдаун), без рассылки и с потолком одного запуска — это верхняя граница того, что дало бы расписание.',
|
|
365
|
+
'Числа строки: poolSize — кандидаты после гейтов источника; selectedCount — отобрано на момент расчёта (не «уедет сегодня»); отсеяно = poolSize − selectedCount, причины — preview.excludedBy тем же реестром, что у besales_broadcast_schedule_preview; preview.unverifiable — «нечем проверить», отсев источника ДО пула, а не причина отбора.',
|
|
366
|
+
'⚠️ status: COMPUTED — посчитана; FAILED — не смогли (причина в error, числа null, а не 0); SKIPPED — не считается по правилу, код в skip.reason: REPEAT_NEEDS_SCHEDULE (повторному касанию нужно окно не короче skip.minDays — считается только расписанием), WINDOW_NOT_SHARED (окно регистраций шире общей выборки — только расписанием), PLATFORM_SERVES_NO_CHANNELS (площадка не обслуживает ни одного канала), DEADLINE (расчёт упёрся в потолок skip.deadlineMinutes раньше, чем дошёл до строки).',
|
|
367
|
+
'⚠️ preview.truncated=true — «не весь пул»: выборка источника не дошла до начала окна строки, самые давние регистрации не рассмотрены. Совет «сузить свежесть» здесь не годится: выборку обрезал общий расчёт площадки.',
|
|
368
|
+
'failedRun — отказ (status=FAILED, причина в error) или замена новым заказом того же заказчика (CANCELLED), случившиеся ПОСЛЕ показанного расчёта. factsSource ≠ READY — источник фактов не настроен или выключен: расчёта не будет вовсе.',
|
|
369
|
+
'force=true — только после своей правки расписания, правила сегмента или запуска: без него свежий (до 5 минут) расчёт тех же настроек переиспользуется. Опрашивая идущий расчёт, force НЕ передавай — он заказал бы ещё один расчёт следом. local_day — утренний расчёт того дня (история «сегмент × день»), всегда с настройками по умолчанию.',
|
|
370
|
+
'⚠️ Вызов с ДРУГИМИ параметрами снимает твой прежний неначатый заказ (расчёт идёт по одному на всю систему). Сравнивая площадки или окна, дождись готовности одной комбинации и только потом заказывай следующую — иначе ни одна не досчитается.',
|
|
371
|
+
'Суммы по строкам не называй «людьми»: человек в двух сегментах посчитан дважды. Поимённых списков в ответе нет — людей смотрят в интерфейсе, под правом на контакты.',
|
|
372
|
+
'Сводка выкачки у run: fetchedRows (строк источника), fetchTruncated (выборка упёрлась в бюджет — у строк она отзывается preview.truncated), registeredFrom/registeredTo (окно регистраций), trigger (MORNING — утренний расчёт истории, ON_DEMAND — заказанный), settings (настройки строк без расписания). Называй их, объясняя расхождение чисел между днями.',
|
|
373
|
+
]),
|
|
374
|
+
}),
|
|
251
375
|
defineTool({
|
|
252
376
|
name: 'besales_broadcast_segment_rule_set',
|
|
377
|
+
sideEffect: 'write',
|
|
253
378
|
requiredFields: ['segment_id', 'facets', 'freshness_anchor'],
|
|
254
379
|
defaultWorkspaceId: true,
|
|
255
380
|
schema: z
|
|
@@ -269,10 +394,11 @@ export const broadcastSchedulerTools = [
|
|
|
269
394
|
// приходят непроверяемыми, и людям не уйдёт ничего.
|
|
270
395
|
prelist: z.enum(['YES', 'NO', 'ANY']).optional(),
|
|
271
396
|
/**
|
|
272
|
-
* ⚠️⚠️ ПОВТОРНОЕ касание. Сегмент уходит тем, у кого `key` был ПОСЛЕДНИМ
|
|
273
|
-
*
|
|
274
|
-
* единственную структурную защиту от второго
|
|
275
|
-
* порог снизу зеркалит серверную константу и здесь:
|
|
397
|
+
* ⚠️⚠️ ПОВТОРНОЕ касание. Сегмент уходит тем, у кого `key` был ПОСЛЕДНИМ касанием —
|
|
398
|
+
* нашей отправкой или волной школы на этой площадке — и кто нам не ответил. Снимает
|
|
399
|
+
* вечный одноразовый claim приветствия — единственную структурную защиту от второго
|
|
400
|
+
* сообщения живому человеку, — поэтому порог снизу зеркалит серверную константу и здесь:
|
|
401
|
+
* ниже 30 суток сервер откажет.
|
|
276
402
|
*/
|
|
277
403
|
previousSegment: z
|
|
278
404
|
.object({
|
|
@@ -281,6 +407,15 @@ export const broadcastSchedulerTools = [
|
|
|
281
407
|
})
|
|
282
408
|
.strict()
|
|
283
409
|
.optional(),
|
|
410
|
+
/**
|
|
411
|
+
* Право первого касания: сегмент уходит только тем, кому мы ещё НИКОГДА не писали.
|
|
412
|
+
*
|
|
413
|
+
* ⚠️⚠️ Молчание значит `true` — это сегодняшнее поведение платформы. Выключение
|
|
414
|
+
* осознанное и снимает ровно одну защиту: человеку, уже получившему от нас холодное
|
|
415
|
+
* приветствие, уйдёт ВТОРОЕ первое сообщение. Остальные гейты (ответ, оператор,
|
|
416
|
+
* тихий период, «этим сегментом уже слали») продолжают работать.
|
|
417
|
+
*/
|
|
418
|
+
untouchedOnly: z.boolean().optional(),
|
|
284
419
|
// ⚠️⚠️ ОБЯЗАТЕЛЬНЫ на сервере (`SEGMENT_FACETS_REQUIRED_GUARDS`): необязательное
|
|
285
420
|
// поле с дефолтом «неважно» делало законным правило целиком из умолчаний, а такое
|
|
286
421
|
// правило матчит КАЖДОГО в окне — рассылка ушла бы и людям с живой заявкой у
|
|
@@ -311,6 +446,7 @@ export const broadcastSchedulerTools = [
|
|
|
311
446
|
'wait_after_series_end_hours — сколько ждать после эфира, прежде чем считать отсутствие явки доказанным. Дефолт 1 час: касание свежее, но явка к этому моменту досчитана у меньшинства (6 ч → 56 %, 24 ч → 74 %, 48 ч → 81 %), и недосчитанный контакт в отбор не попадает. Поэтому при коротком ожидании ставьте freshness_days от 3: при 1 человека смотрят ровно один раз.',
|
|
312
447
|
'application=CANCELLED требует отменённой заявки И отсутствия живой: с человеком, у которого заявка в работе, разговаривает менеджер.',
|
|
313
448
|
'payment=NOT_ANYWHERE исключает всех, кто когда-либо успешно платил — включая тех, кому потом сделали возврат: он действительно платил.',
|
|
449
|
+
'untouchedOnly не указан = true: сегмент уходит только тем, кому мы никогда не писали. Ставьте false осознанно — это разрешает второе первое сообщение человеку, уже получившему от нас холодное приветствие в другой воронке.',
|
|
314
450
|
]),
|
|
315
451
|
}),
|
|
316
452
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-scheduler.js","sourceRoot":"","sources":["../../../src/tools/definitions/broadcast-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,gGAAgG;AAChG,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,4DAA4D;AAC5D,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AACzD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1B,YAAY;IACZ,sBAAsB;IACtB,kBAAkB;IAClB,cAAc;IACd,yFAAyF;IACzF,0FAA0F;IAC1F,SAAS;CACV,CAAC,CAAC;AAEH;;;GAGG;AACH;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,CAC7B,KAA4D,EAC5D,GAAoB,EACd,EAAE;IACR,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,eAAe,CAAC;YACvB,OAAO,EACL,iFAAiF;gBACjF,+DAA+D;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,UAAU;IAC9B,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnG,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5E,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,uFAAuF;IACvF,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oCAAoC,CAAC,CAAC,QAAQ,EAAE;IACnG,iEAAiE;IACjE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC,QAAQ,EAAE;IAC/F,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,KAAK,CAAC,6BAA6B,EAAE,8CAA8C,CAAC;IACvF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvE,gGAAgG;IAChG,iGAAiG;IACjG,8FAA8F;IAC9F,sBAAsB;IACtB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;IACrD,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7D,QAAQ,EAAE,CAAC;QACT,2FAA2F;QAC3F,4FAA4F;SAC3F,KAAK,CAAC,sBAAsB,CAAC;SAC7B,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CACP,sLAAsL,CACvL;IACH,aAAa,EAAE,CAAC;SACb,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACzB,QAAQ,EAAE;SACV,QAAQ,CACP,gVAAgV,CACjV;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;AAEF,uEAAuE;AACvE,MAAM,MAAM,GAAG,CAAC,KAAwB,EAAwB,EAAE;IAChE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAoBvB,EAAE,EAAE,CACH,aAAa,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC,UAAU;IAC3B,gBAAgB,EAAE,KAAK,CAAC,kBAAkB;IAC1C,UAAU,EAAE,KAAK,CAAC,WAAW;IAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;IAC1B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;IACzC,aAAa,EAAE,KAAK,CAAC,cAAc;IACnC,UAAU,EAAE,KAAK,CAAC,WAAW;IAC7B,eAAe,EAAE,KAAK,CAAC,iBAAiB;IACxC,aAAa,EAAE,KAAK,CAAC,eAAe;IACpC,SAAS,EAAE,KAAK,CAAC,UAAU;IAC3B,UAAU,EAAE,KAAK,CAAC,YAAY;IAC9B,WAAW,EAAE,KAAK,CAAC,aAAa;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS;IACzB,cAAc,EAAE,KAAK,CAAC,eAAe;IACrC,YAAY,EAAE,KAAK,CAAC,aAAa;IACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,0FAA0F;IAC1F,0FAA0F;IAC1F,kEAAkE;IAClE,YAAY,EAAE,KAAK,CAAC,aAAa;IACjC,SAAS,EAAE,KAAK,CAAC,UAAU;CAC5B,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,UAAU,CAAC;QACT,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,EAAE;QAClB,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QAClE,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,sBAAsB;SAC9D,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,yHAAyH;YACzH,gJAAgJ;SACjJ,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,oCAAoC;QAC1C,cAAc,EAAE;YACd,YAAY;YACZ,oBAAoB;YACpB,aAAa;YACb,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,WAAW;YACX,iBAAiB;YACjB,eAAe;SAChB;QACD,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,sBAAsB,CAAC;QAC5E,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,8BAA8B;YACrE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;SAC5B,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,0IAA0I;YAC1I,8XAA8X;YAC9X,4PAA4P;YAC5P,sUAAsU;YACtU,6TAA6T;YAC7T,qTAAqT,EAAS,0OAA0O;YACxiB,iKAAiK;YACjK,4OAA4O;YAC5O,iGAAiG;SAClG,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,mCAAmC;QACzC,cAAc,EAAE;YACd,YAAY;YACZ,oBAAoB;YACpB,aAAa;YACb,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,WAAW;YACX,iBAAiB;YACjB,eAAe;SAChB;QACD,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC;aACN,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;aAChE,MAAM,EAAE;aACR,WAAW,CAAC,sBAAsB,CAAC;QACtC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CACvB,KAAK,CAAC,WAAW;YACf,CAAC,CAAC;gBACE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,wBAAwB,KAAK,CAAC,WAAW,EAAE;gBAClF,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;aAC5B;YACH,CAAC,CAAC;gBACE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,sBAAsB;gBAC7D,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;aAC5B;QACP,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,4JAA4J;YAC5J,kGAAkG;YAClG,gLAAgL;YAChL,+HAA+H;YAC/H,qIAAqI;SACtI,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,mCAAmC;QACzC,cAAc,EAAE,CAAC,aAAa,EAAE,uBAAuB,CAAC;QACxD,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE;YACnC,WAAW,EAAE,UAAU;YACvB,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;SACvC,CAAC;aACD,MAAM,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,wBAAwB,KAAK,CAAC,WAAW,EAAE;SACnF,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,qOAAqO;YACrO,6FAA6F;SAC9F,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE;YACnC,WAAW,EAAE,UAAU;YACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACnD,CAAC;aACD,MAAM,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,wBAAwB,KAAK,CAAC,WAAW,OAAO;YACvF,KAAK,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;SAC7C,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,gGAAgG;YAChG,6SAA6S;YAC7S,iMAAiM;YACjM,8IAA8I;SAC/I,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,oCAAoC;QAC1C,cAAc,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC;QAC5D,kBAAkB,EAAE,IAAI;QACxB,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE;YACnC,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,CAAC;iBACN,MAAM,CAAC;gBACN,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACjD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACpD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACpD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACjD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACjD,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACpD,oFAAoF;gBACpF,sFAAsF;gBACtF,oDAAoD;gBACpD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAChD;;;;;mBAKG;gBACH,eAAe,EAAE,CAAC;qBACf,MAAM,CAAC;oBACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC/C,CAAC;qBACD,MAAM,EAAE;qBACR,QAAQ,EAAE;gBACb,iFAAiF;gBACjF,kFAAkF;gBAClF,6EAA6E;gBAC7E,oEAAoE;gBACpE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBACjD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;aAC1D,CAAC;iBACD,MAAM,EAAE;YACX,gBAAgB,EAAE,YAAY;YAC9B,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;YACnF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SAC3D,CAAC;aACD,MAAM,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,iCAAiC,KAAK,CAAC,UAAU,OAAO;YAC/F,IAAI,EAAE,aAAa,CAAC;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,eAAe,EAAE,KAAK,CAAC,gBAAgB;gBACvC,uBAAuB,EAAE,KAAK,CAAC,2BAA2B;gBAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC;SACH,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,mOAAmO;YACnO,+NAA+N;YAC/N,yHAAyH;YACzH,8WAA8W;YAC9W,sIAAsI;YACtI,wIAAwI;SACzI,CAAC;KACL,CAAC;CACH,CAAC"}
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,CAAC;QACT,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;YACrE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC1C,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SAClC,CAAC;aACD,MAAM,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,WAAW;gBAAE,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAClE,IAAI,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,UAAU;gBAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,KAAK,CAAC,YAAY,YAAY,MAAM,EAAE,EAAE,CAAC;QACxF,CAAC;QACD,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CACnC,kBAAkB,CAAC,QAAQ,EAAE;YAC3B,aAAa,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YACtE,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,4BAA4B,sBAAsB,oDAAoD;SAClH,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,CAAC,YAAY,CAAC;QAC9B,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACrD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;KACrF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,iCAAiC;QACvC,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,CAAC,YAAY,CAAC;QAC9B,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,UAAU,EAAE,UAAU;YACtB,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SAClC,CAAC;aACD,MAAM,EAAE;QACX,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EACF,aAAa,KAAK,CAAC,UAAU,cAAc;gBAC3C,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,wFAAwF;YACxF,4FAA4F;YAC5F,qGAAqG;YACrG,0HAA0H;SAC3H,CAAC;KACL,CAAC;CACH,CAAC"}
|
|
@@ -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;
|