@besales/mcp 1.0.0-beta.4 → 1.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +5 -3
  2. package/dist/http/api-client.d.ts +18 -0
  3. package/dist/http/api-client.js +33 -1
  4. package/dist/http/api-client.js.map +1 -1
  5. package/dist/resources/docs/platforms.md +63 -0
  6. package/dist/schemas/mcp-tools.json +847 -30
  7. package/dist/tools/definitions/agent-design.d.ts +2 -0
  8. package/dist/tools/definitions/agent-design.js +5 -0
  9. package/dist/tools/definitions/agent-design.js.map +1 -1
  10. package/dist/tools/definitions/agent-settings.d.ts +1 -0
  11. package/dist/tools/definitions/agent-settings.js +2 -0
  12. package/dist/tools/definitions/agent-settings.js.map +1 -1
  13. package/dist/tools/definitions/api-tool-request.d.ts +4 -2
  14. package/dist/tools/definitions/dialogue-nudge.d.ts +7 -0
  15. package/dist/tools/definitions/dialogue-nudge.js +139 -0
  16. package/dist/tools/definitions/dialogue-nudge.js.map +1 -0
  17. package/dist/tools/definitions/platform-setup.d.ts +1 -0
  18. package/dist/tools/definitions/task-state.d.ts +1 -1
  19. package/dist/tools/definitions/telegram-personal-connect.d.ts +12 -0
  20. package/dist/tools/definitions/telegram-personal-connect.js +61 -0
  21. package/dist/tools/definitions/telegram-personal-connect.js.map +1 -0
  22. package/dist/tools/definitions/telegram-personal-management.d.ts +1 -1
  23. package/dist/tools/definitions/telegram-personal-profile.d.ts +24 -0
  24. package/dist/tools/definitions/telegram-personal-profile.js +154 -0
  25. package/dist/tools/definitions/telegram-personal-profile.js.map +1 -0
  26. package/dist/tools/definitions/telegram-personal-proxies.d.ts +42 -0
  27. package/dist/tools/definitions/telegram-personal-proxies.js +204 -0
  28. package/dist/tools/definitions/telegram-personal-proxies.js.map +1 -0
  29. package/dist/tools/definitions/telegram-proxy-stock.d.ts +34 -0
  30. package/dist/tools/definitions/telegram-proxy-stock.js +129 -0
  31. package/dist/tools/definitions/telegram-proxy-stock.js.map +1 -0
  32. package/dist/tools/definitions.d.ts +98 -2
  33. package/dist/tools/definitions.js +11 -0
  34. package/dist/tools/definitions.js.map +1 -1
  35. package/dist/tools/follow-up-request.js +3 -0
  36. package/dist/tools/follow-up-request.js.map +1 -1
  37. package/dist/tools/operation-recovery.d.ts +1 -1
  38. package/dist/tools/operation-recovery.js +1 -1
  39. package/dist/tools/operation-recovery.js.map +1 -1
  40. package/dist/tools/registry-mapping.cases.js +235 -0
  41. package/dist/tools/registry-mapping.cases.js.map +1 -1
  42. package/dist/tools/registry-test-fixtures.js +5 -1
  43. package/dist/tools/registry-test-fixtures.js.map +1 -1
  44. package/dist/tools/registry.js +18 -4
  45. package/dist/tools/registry.js.map +1 -1
  46. package/dist/tools/result.d.ts +1 -0
  47. package/dist/tools/result.js +57 -5
  48. package/dist/tools/result.js.map +1 -1
  49. package/docs/dialogue-nudge.md +50 -0
  50. package/docs/failure-semantics.md +4 -1
  51. package/docs/help-navigation.md +2 -0
  52. package/docs/telegram-personal-management.md +80 -3
  53. package/docs/telegram-personal-proxies.md +135 -0
  54. package/package.json +1 -1
  55. package/scripts/telegram-personal-profile-mutants.mjs +96 -0
  56. package/scripts/telegram-personal-proxy-mutants.mjs +171 -0
@@ -0,0 +1,154 @@
1
+ import { z } from 'zod';
2
+ import { defineTool, uuidSchema, withInstructions } from './shared.js';
3
+ import { compactObject } from './shared-input.helpers.js';
4
+ // Границы зеркалят DTO ядра (telegram-personal-profile.dto.ts, telegram-personal-usernames.ts):
5
+ // мост не строже ядра там, где решает ферма номеров.
6
+ const MAX_ACCOUNTS = 100;
7
+ const BIO_MAX_LENGTH = 140;
8
+ const USERNAME_PATTERN = /^(?!.*__)[A-Za-z][A-Za-z0-9_]{3,30}[A-Za-z0-9]$/u;
9
+ const username = z.string().min(5).max(32).regex(USERNAME_PATTERN);
10
+ const birthday = z
11
+ .object({
12
+ day: z.int().min(1).max(31),
13
+ month: z.int().min(1).max(12),
14
+ year: z.int().min(1).max(9999).optional(),
15
+ })
16
+ .strict();
17
+ const shape = {
18
+ workspace_id: uuidSchema.optional(),
19
+ channel_id: uuidSchema,
20
+ account_ids: z
21
+ .array(z.uuidv4())
22
+ .min(1)
23
+ .max(MAX_ACCOUNTS)
24
+ .refine((ids) => new Set(ids.map((id) => id.toLowerCase())).size === ids.length, 'Список номеров не должен содержать дубли')
25
+ .optional(),
26
+ all: z.literal(true).optional(),
27
+ first_name: z.string().max(64).optional(),
28
+ last_name: z.string().max(64).optional(),
29
+ bio: z
30
+ .string()
31
+ .refine((value) => Array.from(value).length <= BIO_MAX_LENGTH, `Описание — не больше ${BIO_MAX_LENGTH} знаков`)
32
+ .optional(),
33
+ birthday: birthday.nullable().optional(),
34
+ usernames: z
35
+ .array(z.object({ account_id: z.uuidv4(), username }).strict())
36
+ .min(1)
37
+ .max(MAX_ACCOUNTS)
38
+ .optional(),
39
+ username_base: username.optional(),
40
+ idempotency_key: z
41
+ .string()
42
+ .min(1)
43
+ .max(200)
44
+ .regex(/^[\x21-\x7e]+$/u),
45
+ };
46
+ /** Правила режимов повторяют bulkUsernameMode ядра: нарушение отвергается до HTTP. */
47
+ function checkProfileBulk(input, ctx) {
48
+ const refuse = (path, message) => ctx.addIssue({ code: 'custom', path: [path], message });
49
+ if (input.usernames !== undefined) {
50
+ if (input.username_base !== undefined) {
51
+ refuse('username_base', 'Ники — ровно один режим: usernames по номерам или username_base, но не оба сразу');
52
+ }
53
+ if (input.account_ids !== undefined) {
54
+ refuse('account_ids', 'С usernames номера выбирает сам список: account_ids не передаётся');
55
+ }
56
+ if (input.all !== undefined) {
57
+ refuse('all', 'С usernames номера выбирает сам список: all не передаётся');
58
+ }
59
+ const accounts = new Set(input.usernames.map((entry) => entry.account_id.toLowerCase()));
60
+ const names = new Set(input.usernames.map((entry) => entry.username.toLowerCase()));
61
+ if (accounts.size !== input.usernames.length || names.size !== input.usernames.length) {
62
+ refuse('usernames', 'В usernames номера и ники не должны повторяться');
63
+ }
64
+ }
65
+ else if ((input.account_ids !== undefined) === (input.all === true)) {
66
+ refuse('account_ids', 'Выбери ровно одно: список номеров account_ids или all:true');
67
+ }
68
+ const changes = input.first_name !== undefined ||
69
+ input.last_name !== undefined ||
70
+ input.bio !== undefined ||
71
+ input.birthday !== undefined ||
72
+ input.usernames !== undefined ||
73
+ input.username_base !== undefined;
74
+ if (!changes) {
75
+ ctx.addIssue({
76
+ code: 'custom',
77
+ message: 'Нечего менять: передай хотя бы одно поле профиля или ники',
78
+ });
79
+ }
80
+ }
81
+ const profileBulkSchema = z.object(shape).strict().superRefine(checkProfileBulk);
82
+ function profileBulkRequest(input) {
83
+ const body = {
84
+ patch: compactObject({
85
+ firstName: input.first_name,
86
+ lastName: input.last_name,
87
+ bio: input.bio,
88
+ birthday: input.birthday,
89
+ }),
90
+ };
91
+ if (input.usernames !== undefined) {
92
+ body.usernames = input.usernames.map((entry) => ({
93
+ accountId: entry.account_id,
94
+ username: entry.username,
95
+ }));
96
+ }
97
+ else if (input.account_ids !== undefined) {
98
+ body.accountIds = input.account_ids;
99
+ }
100
+ else {
101
+ body.all = true;
102
+ }
103
+ if (input.username_base !== undefined)
104
+ body.usernameBase = input.username_base;
105
+ return {
106
+ method: 'POST',
107
+ path: `/channels/${input.channel_id}/telegram-personal/profile/bulk`,
108
+ body,
109
+ // Маршрут ядра читает ключ из x-idempotency-key; общий Idempotency-Key он не видит.
110
+ idempotencyKey: input.idempotency_key,
111
+ idempotencyKeyHeader: 'X-Idempotency-Key',
112
+ };
113
+ }
114
+ export const telegramPersonalProfileTools = [
115
+ defineTool({
116
+ name: 'besales_platform_telegram_personal_profile_bulk',
117
+ sideEffect: 'write',
118
+ idempotent: true,
119
+ closedWorld: false,
120
+ defaultWorkspaceId: true,
121
+ requiredFields: ['channel_id', 'idempotency_key'],
122
+ resultPolicy: { neverTruncate: true, maxResultBytes: 16 * 1024 },
123
+ schema: profileBulkSchema,
124
+ createRequest: profileBulkRequest,
125
+ enhanceResponse: (response) => withInstructions(response, [
126
+ 'Ответ — принятие задания фермы, а не итог: state PENDING значит «принято», total — число номеров. Итог по каждому номеру читай в besales_platform_telegram_personal_profile_job по job_id.',
127
+ 'При неизвестном исходе новый ключ автоматически не создавай: повтори вызов с тем же idempotency_key и теми же аргументами — ядро вернёт прежний ответ, профиль второй раз не изменится.',
128
+ ]),
129
+ }),
130
+ defineTool({
131
+ name: 'besales_platform_telegram_personal_profile_job',
132
+ sideEffect: 'none',
133
+ closedWorld: true,
134
+ defaultWorkspaceId: true,
135
+ requiredFields: ['channel_id', 'job_id'],
136
+ resultPolicy: { neverTruncate: true, maxResultBytes: 256 * 1024 },
137
+ schema: z
138
+ .object({
139
+ workspace_id: uuidSchema.optional(),
140
+ channel_id: uuidSchema,
141
+ job_id: z.string().min(1).max(128),
142
+ })
143
+ .strict(),
144
+ createRequest: (input) => ({
145
+ method: 'GET',
146
+ path: `/channels/${input.channel_id}/telegram-personal/profile/bulk/${encodeURIComponent(input.job_id)}`,
147
+ }),
148
+ enhanceResponse: (response) => withInstructions(response, [
149
+ 'Пока state не COMPLETED, итог неполный: повтори чтение позже. Исход номера — items[].state; при SUCCEEDED смотри ещё outcome.fields.<поле>: частичный успех остаётся SUCCEEDED, а отдельное поле может быть FAILED с failure_code.',
150
+ 'TELEGRAM_BIO_TOO_LONG — описание длиннее лимита Telegram (до 70 знаков без Premium, до 140 с Premium). PROFILE_PROVIDER_OUTCOME_UNKNOWN — исход у Telegram неизвестен: не повторяй вслепую, сначала сверь профиль номера.',
151
+ ]),
152
+ }),
153
+ ];
154
+ //# sourceMappingURL=telegram-personal-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-personal-profile.js","sourceRoot":"","sources":["../../../src/tools/definitions/telegram-personal-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export declare const telegramPersonalProxyTools: (import("./shared.js").ToolDefinition<{
2
+ channel_id: string;
3
+ workspace_id?: string | undefined;
4
+ }> | import("./shared.js").ToolDefinition<{
5
+ session_id: string;
6
+ channel_id: string;
7
+ workspace_id?: string | undefined;
8
+ }> | import("./shared.js").ToolDefinition<{
9
+ proxy_id: string;
10
+ explicit_confirmation: true;
11
+ channel_id: string;
12
+ workspace_id?: string | undefined;
13
+ }> | import("./shared.js").ToolDefinition<{
14
+ account_id: string;
15
+ action_id: string;
16
+ proxy_id: string;
17
+ country_change_confirmed: boolean;
18
+ explicit_confirmation: true;
19
+ channel_id: string;
20
+ workspace_id?: string | undefined;
21
+ }>)[];
22
+ export declare const telegramPersonalChannelProxyTools: (import("./shared.js").ToolDefinition<{
23
+ channel_id: string;
24
+ status?: "ACTIVE" | "CHECKING" | "ERROR" | "INACTIVE" | undefined;
25
+ country_code?: string | undefined;
26
+ search?: string | undefined;
27
+ cursor?: string | undefined;
28
+ limit?: number | undefined;
29
+ workspace_id?: string | undefined;
30
+ }> | import("./shared.js").ToolDefinition<{
31
+ action_id: string;
32
+ channel_id: string;
33
+ proxy_ids?: string[] | undefined;
34
+ count?: number | undefined;
35
+ country_code?: string | undefined;
36
+ workspace_id?: string | undefined;
37
+ }> | import("./shared.js").ToolDefinition<{
38
+ proxy_id: string;
39
+ action_id: string;
40
+ channel_id: string;
41
+ workspace_id?: string | undefined;
42
+ }>)[];
@@ -0,0 +1,204 @@
1
+ import { z } from 'zod';
2
+ import { defineTool, uuidSchema, withInstructions } from './shared.js';
3
+ import { telegramProxyListFields, telegramProxyListQuery } from './telegram-proxy-stock.js';
4
+ const channel = { workspace_id: uuidSchema.optional(), channel_id: uuidSchema };
5
+ const resultPolicy = { neverTruncate: true, maxResultBytes: 16 * 1024 };
6
+ const takeSchema = z.object({
7
+ ...channel,
8
+ action_id: uuidSchema,
9
+ proxy_ids: z.array(uuidSchema).min(1).max(50).refine((ids) => new Set(ids.map((id) => id.toLowerCase())).size === ids.length, 'proxy_ids должны быть разными').optional(),
10
+ count: z.int().min(1).max(50).optional(),
11
+ country_code: z.string().regex(/^[A-Z]{2}$/u).optional(),
12
+ }).strict().superRefine((input, ctx) => {
13
+ if (input.proxy_ids !== undefined
14
+ ? input.count !== undefined || input.country_code !== undefined
15
+ : input.count === undefined) {
16
+ ctx.addIssue({ code: 'custom', message: 'Ровно одна форма: proxy_ids или count с необязательной country_code' });
17
+ }
18
+ });
19
+ export const telegramPersonalProxyTools = [
20
+ defineTool({
21
+ name: 'besales_platform_telegram_personal_proxy_import_link',
22
+ sideEffect: 'write',
23
+ closedWorld: true,
24
+ defaultWorkspaceId: true,
25
+ requiredFields: ['channel_id'],
26
+ resultPolicy,
27
+ schema: z.object(channel).strict(),
28
+ createRequest: (input) => ({
29
+ method: 'POST',
30
+ path: `/workspaces/${input.workspace_id}/channels/${input.channel_id}/telegram-proxy-import-sessions`,
31
+ }),
32
+ enhanceResponse: (response) => {
33
+ const link = response;
34
+ return withInstructions({
35
+ session_id: link.session_id,
36
+ setup_page_url: link.setup_page_url,
37
+ expires_at: link.expires_at,
38
+ }, [
39
+ 'Отдай ссылку человеку: он входит в приложение и вводит логины и пароли прокси на защищённой странице, не в чате. Ссылка одноразовая, живёт до expires_at.',
40
+ 'Итог по session_id читай через besales_platform_telegram_personal_proxy_import_status; выдача ссылки ещё не означает загрузку прокси.',
41
+ ]);
42
+ },
43
+ }),
44
+ defineTool({
45
+ name: 'besales_platform_telegram_personal_proxy_import_status',
46
+ sideEffect: 'none',
47
+ closedWorld: true,
48
+ defaultWorkspaceId: true,
49
+ requiredFields: ['channel_id', 'session_id'],
50
+ resultPolicy,
51
+ schema: z.object({ ...channel, session_id: uuidSchema }).strict(),
52
+ createRequest: (input) => ({
53
+ method: 'GET',
54
+ path: `/workspaces/${input.workspace_id}/channels/${input.channel_id}/telegram-proxy-import-sessions/${input.session_id}`,
55
+ }),
56
+ enhanceResponse: (response) => {
57
+ const status = response;
58
+ const summary = status.summary;
59
+ return withInstructions({
60
+ sessionId: status.sessionId,
61
+ status: status.status,
62
+ expiresAt: status.expiresAt,
63
+ summary: summary && {
64
+ total: summary.total,
65
+ pending: summary.pending,
66
+ accepted: summary.accepted,
67
+ duplicates: summary.duplicates,
68
+ invalid: summary.invalid,
69
+ checkFailed: summary.checkFailed,
70
+ rejected: summary.rejected,
71
+ registered: summary.registered,
72
+ },
73
+ }, [
74
+ 'Ответ содержит только состояние и счётчики, без строк прокси. COMPLETED — итог обработки; UNKNOWN не означает успех: повтори чтение позже. EXPIRED и CANCELLED — сессия закрыта.',
75
+ ]);
76
+ },
77
+ }),
78
+ defineTool({
79
+ name: 'besales_platform_telegram_personal_proxy_delete',
80
+ sideEffect: 'write',
81
+ reversible: false,
82
+ closedWorld: false,
83
+ defaultWorkspaceId: true,
84
+ requiredFields: ['channel_id', 'proxy_id', 'explicit_confirmation'],
85
+ resultPolicy,
86
+ schema: z
87
+ .object({
88
+ ...channel,
89
+ proxy_id: uuidSchema,
90
+ explicit_confirmation: z.literal(true).describe('Явное согласие человека на удаление прокси.'),
91
+ })
92
+ .strict(),
93
+ createRequest: (input) => ({
94
+ method: 'DELETE',
95
+ path: `/channels/${input.channel_id}/telegram-personal/proxies/${input.proxy_id}`,
96
+ }),
97
+ enhanceResponse: () => ({ deleted: true }),
98
+ }),
99
+ defineTool({
100
+ name: 'besales_platform_telegram_personal_account_proxy_change',
101
+ sideEffect: 'write',
102
+ idempotent: true,
103
+ closedWorld: false,
104
+ defaultWorkspaceId: true,
105
+ requiredFields: [
106
+ 'channel_id',
107
+ 'account_id',
108
+ 'action_id',
109
+ 'proxy_id',
110
+ 'country_change_confirmed',
111
+ 'explicit_confirmation',
112
+ ],
113
+ resultPolicy,
114
+ schema: z
115
+ .object({
116
+ ...channel,
117
+ account_id: uuidSchema,
118
+ action_id: uuidSchema,
119
+ proxy_id: uuidSchema,
120
+ country_change_confirmed: z.boolean(),
121
+ explicit_confirmation: z.literal(true).describe('Явное согласие человека: номер переподключится.'),
122
+ })
123
+ .strict(),
124
+ createRequest: (input) => ({
125
+ method: 'POST',
126
+ path: `/channels/${input.channel_id}/telegram-personal/accounts/${input.account_id}/change-proxy`,
127
+ body: {
128
+ actionId: input.action_id,
129
+ proxyId: input.proxy_id,
130
+ countryChangeConfirmed: input.country_change_confirmed,
131
+ },
132
+ }),
133
+ enhanceResponse: (response) => {
134
+ const receipt = response;
135
+ return withInstructions({
136
+ message: receipt.message,
137
+ action_id: receipt.action_id,
138
+ state: receipt.state,
139
+ code: receipt.code,
140
+ retry_after_ms: receipt.retry_after_ms,
141
+ }, [
142
+ 'Номер переключён только при state=SUCCEEDED. UNKNOWN и PENDING — исход ещё не подтверждён; FAILED и EXPIRED — отказ, смотри code. Учитывай retry_after_ms.',
143
+ 'Для повтора того же намерения сохрани action_id и все аргументы. Новый action_id автоматически не создавай: номер переподключится.',
144
+ ]);
145
+ },
146
+ }),
147
+ ];
148
+ export const telegramPersonalChannelProxyTools = [
149
+ defineTool({
150
+ name: 'besales_platform_telegram_personal_proxies',
151
+ sideEffect: 'none',
152
+ closedWorld: true,
153
+ defaultWorkspaceId: true,
154
+ requiredFields: ['channel_id'],
155
+ resultPolicy: { neverTruncate: true, maxResultBytes: 1024 * 1024 },
156
+ schema: z.object({ ...channel, ...telegramProxyListFields }).strict(),
157
+ createRequest: (input) => ({
158
+ method: 'GET',
159
+ path: `/channels/${input.channel_id}/telegram-personal/proxies${telegramProxyListQuery(input)}`,
160
+ }),
161
+ }),
162
+ defineTool({
163
+ name: 'besales_platform_telegram_personal_proxy_take_from_stock',
164
+ sideEffect: 'write',
165
+ idempotent: true,
166
+ closedWorld: true,
167
+ defaultWorkspaceId: true,
168
+ requiredFields: ['channel_id', 'action_id'],
169
+ resultPolicy,
170
+ schema: takeSchema,
171
+ createRequest: (input) => ({
172
+ method: 'POST',
173
+ path: `/channels/${input.channel_id}/telegram-personal/proxies/take-from-stock`,
174
+ idempotencyKey: input.action_id,
175
+ idempotencyKeyHeader: 'X-Idempotency-Key',
176
+ body: input.proxy_ids !== undefined
177
+ ? { proxyIds: input.proxy_ids }
178
+ : { count: input.count, ...(input.country_code === undefined ? {} : { countryCode: input.country_code }) },
179
+ }),
180
+ enhanceResponse: (response) => withInstructions(response, [
181
+ 'Переносится весь прокси, атомарно: любой отказ означает, что ничего не перенесено. action_id создаётся один на намерение; новое намерение человека — новый action_id. При 503 исход неизвестен — повтори то же намерение с тем же action_id и теми же аргументами.',
182
+ ]),
183
+ }),
184
+ defineTool({
185
+ name: 'besales_platform_telegram_personal_proxy_return_to_stock',
186
+ sideEffect: 'write',
187
+ idempotent: true,
188
+ closedWorld: true,
189
+ defaultWorkspaceId: true,
190
+ requiredFields: ['channel_id', 'proxy_id', 'action_id'],
191
+ resultPolicy,
192
+ schema: z.object({ ...channel, proxy_id: uuidSchema, action_id: uuidSchema }).strict(),
193
+ createRequest: (input) => ({
194
+ method: 'POST',
195
+ path: `/channels/${input.channel_id}/telegram-personal/proxies/${input.proxy_id}/return-to-stock`,
196
+ idempotencyKey: input.action_id,
197
+ idempotencyKeyHeader: 'X-Idempotency-Key',
198
+ }),
199
+ enhanceResponse: (response) => withInstructions(response, [
200
+ 'Возвращается только свободный прокси. TELEGRAM_PROXY_NOT_EMPTY — освободи его; TELEGRAM_PROXY_ADDRESS_IN_USE — такой адрес уже в запасе, предложи удалить этот прокси из канала. action_id создаётся один на намерение; новое намерение человека — новый action_id. При 503 исход неизвестен: повтори то же намерение с тем же action_id и теми же аргументами.',
201
+ ]),
202
+ }),
203
+ ];
204
+ //# sourceMappingURL=telegram-personal-proxies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-personal-proxies.js","sourceRoot":"","sources":["../../../src/tools/definitions/telegram-personal-proxies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { z } from 'zod';
2
+ export declare const telegramProxyListFields: {
3
+ status: z.ZodOptional<z.ZodEnum<{
4
+ ACTIVE: "ACTIVE";
5
+ CHECKING: "CHECKING";
6
+ ERROR: "ERROR";
7
+ INACTIVE: "INACTIVE";
8
+ }>>;
9
+ country_code: z.ZodOptional<z.ZodString>;
10
+ search: z.ZodOptional<z.ZodString>;
11
+ cursor: z.ZodOptional<z.ZodString>;
12
+ limit: z.ZodOptional<z.ZodInt>;
13
+ };
14
+ export declare function telegramProxyListQuery(input: z.infer<z.ZodObject<typeof telegramProxyListFields>>): string;
15
+ export declare const telegramProxyStockTools: (import("./shared.js").ToolDefinition<{
16
+ status?: "ACTIVE" | "CHECKING" | "ERROR" | "INACTIVE" | undefined;
17
+ country_code?: string | undefined;
18
+ search?: string | undefined;
19
+ cursor?: string | undefined;
20
+ limit?: number | undefined;
21
+ workspace_id?: string | undefined;
22
+ }> | import("./shared.js").ToolDefinition<{
23
+ workspace_id?: string | undefined;
24
+ }> | import("./shared.js").ToolDefinition<{
25
+ session_id: string;
26
+ workspace_id?: string | undefined;
27
+ }> | import("./shared.js").ToolDefinition<{
28
+ proxy_id: string;
29
+ explicit_confirmation: true;
30
+ workspace_id?: string | undefined;
31
+ }> | import("./shared.js").ToolDefinition<{
32
+ proxy_id: string;
33
+ workspace_id?: string | undefined;
34
+ }>)[];
@@ -0,0 +1,129 @@
1
+ import { z } from 'zod';
2
+ import { defineTool, uuidSchema, withInstructions } from './shared.js';
3
+ import { buildListQuery } from './shared-input.helpers.js';
4
+ const workspace = { workspace_id: uuidSchema.optional() };
5
+ const resultPolicy = { neverTruncate: true, maxResultBytes: 16 * 1024 };
6
+ export const telegramProxyListFields = {
7
+ status: z.enum(['ACTIVE', 'CHECKING', 'ERROR', 'INACTIVE']).optional(),
8
+ country_code: z.string().regex(/^[A-Z]{2}$/u).optional(),
9
+ search: z.string().max(200).optional(),
10
+ cursor: uuidSchema.optional(),
11
+ limit: z.int().min(1).max(100).optional(),
12
+ };
13
+ export function telegramProxyListQuery(input) {
14
+ return buildListQuery({
15
+ status: input.status,
16
+ countryCode: input.country_code,
17
+ search: input.search,
18
+ cursor: input.cursor,
19
+ limit: input.limit,
20
+ });
21
+ }
22
+ export const telegramProxyStockTools = [
23
+ defineTool({
24
+ name: 'besales_platform_telegram_personal_proxy_stock_list',
25
+ sideEffect: 'none',
26
+ closedWorld: true,
27
+ defaultWorkspaceId: true,
28
+ requiredFields: [],
29
+ resultPolicy: { neverTruncate: true, maxResultBytes: 1024 * 1024 },
30
+ schema: z.object({ ...workspace, ...telegramProxyListFields }).strict(),
31
+ createRequest: (input) => ({
32
+ method: 'GET',
33
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/proxies${telegramProxyListQuery(input)}`,
34
+ }),
35
+ }),
36
+ defineTool({
37
+ name: 'besales_platform_telegram_personal_proxy_stock_import_link',
38
+ sideEffect: 'write',
39
+ closedWorld: true,
40
+ defaultWorkspaceId: true,
41
+ requiredFields: [],
42
+ resultPolicy,
43
+ schema: z.object(workspace).strict(),
44
+ createRequest: (input) => ({
45
+ method: 'POST',
46
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/import-sessions`,
47
+ }),
48
+ enhanceResponse: (response) => {
49
+ const link = response;
50
+ return withInstructions({ session_id: link.session_id, setup_page_url: link.setup_page_url, expires_at: link.expires_at }, [
51
+ 'Отдай ссылку человеку: он входит в приложение и вводит логины и пароли прокси на защищённой странице общего запаса пространства, не в чате. Ссылка одноразовая, живёт до expires_at.',
52
+ 'Выдача ссылки ещё не означает загрузку. Итог по session_id читай через besales_platform_telegram_personal_proxy_stock_import_status; после обрыва автоматически новую ссылку не создавай.',
53
+ ]);
54
+ },
55
+ }),
56
+ defineTool({
57
+ name: 'besales_platform_telegram_personal_proxy_stock_import_status',
58
+ sideEffect: 'none',
59
+ closedWorld: true,
60
+ defaultWorkspaceId: true,
61
+ requiredFields: ['session_id'],
62
+ resultPolicy,
63
+ schema: z.object({ ...workspace, session_id: uuidSchema }).strict(),
64
+ createRequest: (input) => ({
65
+ method: 'GET',
66
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/import-sessions/${input.session_id}`,
67
+ }),
68
+ enhanceResponse: (response) => {
69
+ const status = response;
70
+ const summary = status.summary;
71
+ return withInstructions({
72
+ sessionId: status.sessionId,
73
+ status: status.status,
74
+ expiresAt: status.expiresAt,
75
+ summary: summary && {
76
+ total: summary.total, pending: summary.pending, accepted: summary.accepted,
77
+ duplicates: summary.duplicates, invalid: summary.invalid, checkFailed: summary.checkFailed,
78
+ rejected: summary.rejected, registered: summary.registered,
79
+ },
80
+ }, ['Ответ содержит только состояние и счётчики, без строк прокси. COMPLETED — обработка завершена, смотри счётчики; UNKNOWN не означает успех: повтори чтение позже. EXPIRED и CANCELLED — сессия закрыта.']);
81
+ },
82
+ }),
83
+ defineTool({
84
+ name: 'besales_platform_telegram_personal_proxy_stock_delete',
85
+ sideEffect: 'write',
86
+ reversible: false,
87
+ closedWorld: true,
88
+ defaultWorkspaceId: true,
89
+ requiredFields: ['proxy_id', 'explicit_confirmation'],
90
+ resultPolicy,
91
+ schema: z.object({
92
+ ...workspace,
93
+ proxy_id: uuidSchema,
94
+ explicit_confirmation: z.literal(true).describe('Явное согласие человека на удаление прокси из запаса.'),
95
+ }).strict(),
96
+ createRequest: (input) => ({
97
+ method: 'DELETE',
98
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/proxies/${input.proxy_id}`,
99
+ }),
100
+ enhanceResponse: () => ({ deleted: true }),
101
+ }),
102
+ defineTool({
103
+ name: 'besales_platform_telegram_personal_proxy_stock_check',
104
+ sideEffect: 'write',
105
+ closedWorld: false,
106
+ defaultWorkspaceId: true,
107
+ requiredFields: ['proxy_id'],
108
+ resultPolicy,
109
+ schema: z.object({ ...workspace, proxy_id: uuidSchema }).strict(),
110
+ createRequest: (input) => ({
111
+ method: 'POST',
112
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/proxies/${input.proxy_id}/check`,
113
+ }),
114
+ }),
115
+ defineTool({
116
+ name: 'besales_platform_telegram_personal_proxy_stock_check_all',
117
+ sideEffect: 'write',
118
+ closedWorld: false,
119
+ defaultWorkspaceId: true,
120
+ requiredFields: [],
121
+ resultPolicy,
122
+ schema: z.object(workspace).strict(),
123
+ createRequest: (input) => ({
124
+ method: 'POST',
125
+ path: `/workspaces/${input.workspace_id}/telegram-proxy-stock/proxies/check-all`,
126
+ }),
127
+ }),
128
+ ];
129
+ //# sourceMappingURL=telegram-proxy-stock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-proxy-stock.js","sourceRoot":"","sources":["../../../src/tools/definitions/telegram-proxy-stock.ts"],"names":[],"mappings":"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"}