@pachca/cli 2026.6.3 → 2026.7.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +3 -0
  3. package/dist/commands/bots/create.js +26 -3
  4. package/dist/commands/bots/delete.js +45 -0
  5. package/dist/commands/bots/get.js +0 -3
  6. package/dist/commands/bots/list.js +97 -0
  7. package/dist/commands/bots/update.js +21 -3
  8. package/dist/commands/chats/create.js +9 -3
  9. package/dist/commands/chats/get.js +0 -3
  10. package/dist/commands/chats/list.js +3 -3
  11. package/dist/commands/chats/update.js +8 -1
  12. package/dist/commands/group-tags/create.js +9 -3
  13. package/dist/commands/group-tags/list.js +0 -1
  14. package/dist/commands/group-tags/update.js +8 -1
  15. package/dist/commands/members/add.js +2 -2
  16. package/dist/commands/members/list.js +1 -3
  17. package/dist/commands/members/remove.js +0 -1
  18. package/dist/commands/members/update.js +1 -2
  19. package/dist/commands/messages/delete.js +1 -3
  20. package/dist/commands/messages/get.js +2 -2
  21. package/dist/commands/messages/list.js +1 -3
  22. package/dist/commands/messages/pin.js +1 -2
  23. package/dist/commands/messages/unpin.js +0 -1
  24. package/dist/commands/messages/update.js +2 -2
  25. package/dist/commands/profile/delete-avatar.js +0 -1
  26. package/dist/commands/profile/delete-status.js +0 -1
  27. package/dist/commands/profile/get-status.js +0 -4
  28. package/dist/commands/profile/update-avatar.js +1 -2
  29. package/dist/commands/profile/update-status.js +5 -3
  30. package/dist/commands/reactions/add.js +1 -2
  31. package/dist/commands/reactions/list.js +0 -4
  32. package/dist/commands/reactions/remove.js +0 -1
  33. package/dist/commands/search/list-users.js +1 -1
  34. package/dist/commands/security/list.js +1 -1
  35. package/dist/commands/tasks/create.js +1 -1
  36. package/dist/commands/tasks/delete.js +1 -3
  37. package/dist/commands/tasks/get.js +1 -3
  38. package/dist/commands/tasks/list.js +0 -2
  39. package/dist/commands/tasks/update.js +0 -1
  40. package/dist/commands/threads/create.js +23 -0
  41. package/dist/commands/users/create.js +31 -9
  42. package/dist/commands/users/delete.js +1 -3
  43. package/dist/commands/users/get-status.js +1 -3
  44. package/dist/commands/users/get.js +1 -3
  45. package/dist/commands/users/list.js +1 -1
  46. package/dist/commands/users/remove-avatar.js +0 -1
  47. package/dist/commands/users/remove-status.js +0 -2
  48. package/dist/commands/users/update-avatar.js +1 -2
  49. package/dist/commands/users/update-status.js +5 -4
  50. package/dist/commands/users/update.js +28 -7
  51. package/dist/data/alternatives.json +3 -0
  52. package/dist/data/changelog.json +47 -0
  53. package/dist/data/endpoints.json +1 -1
  54. package/dist/data/workflows.json +14 -0
  55. package/oclif.manifest.json +1 -1
  56. package/package.json +1 -1
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class ProfileUpdateStatus extends BaseCommand {
6
6
  static description = "Новый свой статус";
7
7
  static examples = [
8
- "Установить статус:\n $ pachca profile update-status",
9
- "Сбросить статус:\n $ pachca profile delete-status"
8
+ "Установить статус:\n $ pachca profile update-status"
10
9
  ];
11
10
  static scope = "profile_status:write";
12
11
  static apiMethod = "PUT";
@@ -20,7 +19,7 @@ export default class ProfileUpdateStatus extends BaseCommand {
20
19
  description: "Emoji символ статуса",
21
20
  }),
22
21
  'title': Flags.string({
23
- description: "Текст статуса",
22
+ description: "Текст статуса (макс. 50 символов)",
24
23
  }),
25
24
  'expires-at': Flags.string({
26
25
  description: "Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ",
@@ -64,6 +63,9 @@ export default class ProfileUpdateStatus extends BaseCommand {
64
63
  }
65
64
  }
66
65
  const validationErrors = [];
66
+ if (flags['title'] && String(flags['title']).length > 50) {
67
+ validationErrors.push({ message: `--title: максимум 50 символов (передано: ${String(flags['title']).length})`, flag: 'title' });
68
+ }
67
69
  if (flags['away-message'] && String(flags['away-message']).length > 1024) {
68
70
  validationErrors.push({ message: `--away-message: максимум 1024 символов (передано: ${String(flags['away-message']).length})`, flag: 'away-message' });
69
71
  }
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class ReactionsAdd extends BaseCommand {
6
6
  static description = "Добавление реакции";
7
7
  static examples = [
8
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
9
- "Добавить реакцию на сообщение:\n $ pachca reactions remove"
8
+ "Добавить реакцию на сообщение:\n $ pachca reactions add"
10
9
  ];
11
10
  static scope = "reactions:write";
12
11
  static apiMethod = "POST";
@@ -3,10 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ReactionsList extends BaseCommand {
5
5
  static description = "Список реакций";
6
- static examples = [
7
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
8
- "Добавить реакцию на сообщение:\n $ pachca reactions remove"
9
- ];
10
6
  static scope = "reactions:read";
11
7
  static apiMethod = "GET";
12
8
  static apiPath = "/messages/{id}/reactions";
@@ -5,7 +5,6 @@ import * as clack from '@clack/prompts';
5
5
  export default class ReactionsRemove extends BaseCommand {
6
6
  static description = "Удаление реакции";
7
7
  static examples = [
8
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
9
8
  "Добавить реакцию на сообщение:\n $ pachca reactions remove"
10
9
  ];
11
10
  static scope = "reactions:write";
@@ -20,7 +20,7 @@ export default class SearchListUsers extends BaseCommand {
20
20
  }),
21
21
  'sort': Flags.string({
22
22
  description: "Сортировка результатов",
23
- options: ["by_score", "alphabetical"],
23
+ options: ["by_score", "alphabetical", "creation"],
24
24
  }),
25
25
  'order': Flags.string({
26
26
  description: "Направление сортировки",
@@ -24,7 +24,7 @@ export default class SecurityList extends BaseCommand {
24
24
  }),
25
25
  'event-key': Flags.string({
26
26
  description: "Фильтр по конкретному типу события",
27
- options: ["user_login", "user_logout", "user_2fa_fail", "user_2fa_success", "user_created", "user_deleted", "user_role_changed", "user_updated", "tag_created", "tag_deleted", "user_added_to_tag", "user_removed_from_tag", "chat_created", "chat_renamed", "chat_permission_changed", "user_chat_join", "user_chat_leave", "tag_added_to_chat", "tag_removed_from_chat", "message_updated", "message_deleted", "message_created", "reaction_created", "reaction_deleted", "thread_created", "access_token_created", "access_token_updated", "access_token_destroy", "kms_encrypt", "kms_decrypt", "audit_events_accessed", "dlp_violation_detected", "search_users_api", "search_chats_api", "search_messages_api", "bot_scopes_updated", "bot_webhook_settings_updated", "bot_token_recreated"],
27
+ options: ["user_login", "user_logout", "user_2fa_fail", "user_2fa_success", "user_created", "user_deleted", "user_role_changed", "user_updated", "tag_created", "tag_deleted", "user_added_to_tag", "user_removed_from_tag", "chat_created", "chat_renamed", "chat_permission_changed", "user_chat_join", "user_chat_leave", "tag_added_to_chat", "tag_removed_from_chat", "message_updated", "message_deleted", "message_created", "reaction_created", "reaction_deleted", "thread_created", "access_token_created", "access_token_updated", "access_token_destroy", "kms_encrypt", "kms_decrypt", "audit_events_accessed", "dlp_violation_detected", "search_users_api", "search_chats_api", "search_messages_api", "bot_scopes_updated", "bot_webhook_settings_updated", "bot_token_recreated", "bot_deleted", "video_call_started", "video_call_finished", "video_call_recording_ready"],
28
28
  }),
29
29
  'actor-id': Flags.string({
30
30
  description: "Идентификатор пользователя, выполнившего действие",
@@ -7,7 +7,7 @@ export default class TasksCreate extends BaseCommand {
7
7
  static examples = [
8
8
  "Форма заявки/запроса:\n $ pachca tasks create",
9
9
  "Создать напоминание:\n $ pachca tasks create",
10
- "Получить список предстоящих задач:\n $ pachca tasks list"
10
+ "Создать серию напоминаний:\n $ pachca tasks create"
11
11
  ];
12
12
  static scope = "tasks:create";
13
13
  static apiMethod = "POST";
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class TasksDelete extends BaseCommand {
6
6
  static description = "Удаление напоминания";
7
7
  static examples = [
8
- "Получить задачу по ID:\n $ pachca tasks get",
9
- "Отметить задачу выполненной:\n $ pachca tasks update",
10
- "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
8
+ "Удалить задачу:\n $ pachca tasks delete"
11
9
  ];
12
10
  static scope = "tasks:delete";
13
11
  static apiMethod = "DELETE";
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksGet extends BaseCommand {
5
5
  static description = "Информация о напоминании";
6
6
  static examples = [
7
- "Получить задачу по ID:\n $ pachca tasks get",
8
- "Отметить задачу выполненной:\n $ pachca tasks update",
9
- "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
7
+ "Получить задачу по ID:\n $ pachca tasks get"
10
8
  ];
11
9
  static scope = "tasks:read";
12
10
  static apiMethod = "GET";
@@ -4,8 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksList extends BaseCommand {
5
5
  static description = "Список напоминаний";
6
6
  static examples = [
7
- "Форма заявки/запроса:\n $ pachca tasks create",
8
- "Создать напоминание:\n $ pachca tasks create",
9
7
  "Получить список предстоящих задач:\n $ pachca tasks list"
10
8
  ];
11
9
  static scope = "tasks:read";
@@ -4,7 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksUpdate extends BaseCommand {
5
5
  static description = "Редактирование напоминания";
6
6
  static examples = [
7
- "Получить задачу по ID:\n $ pachca tasks get",
8
7
  "Отметить задачу выполненной:\n $ pachca tasks update",
9
8
  "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
10
9
  ];
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ThreadsCreate extends BaseCommand {
3
+ static description = "Новый самостоятельный тред";
4
+ static scope = "threads:create";
5
+ static apiMethod = "POST";
6
+ static apiPath = "/threads";
7
+ static defaultColumns = ["id", "chat_id", "message_id", "message_chat_id", "updated_at"];
8
+ static args = {};
9
+ static flags = {
10
+ ...BaseCommand.baseFlags,
11
+ };
12
+ async run() {
13
+ const { args, flags } = await this.parse(ThreadsCreate);
14
+ this.parsedFlags = flags;
15
+ const { data } = await this.apiRequest({
16
+ method: 'POST',
17
+ path: '/threads',
18
+ });
19
+ const responseBody = data;
20
+ const result = responseBody.data ?? responseBody;
21
+ this.output(result);
22
+ }
23
+ }
@@ -5,9 +5,9 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersCreate extends BaseCommand {
6
6
  static description = "Новый сотрудник";
7
7
  static examples = [
8
- "Проверить, кто прочитал сообщение:\n $ pachca users list",
9
- "Разослать уведомление нескольким пользователям:\n $ pachca users list",
10
- "Массовое создание сотрудников с тегами:\n $ pachca users create"
8
+ "Массовое создание сотрудников с тегами:\n $ pachca users create",
9
+ "Создать гостя в чат:\n $ pachca users create",
10
+ "Онбординг нового сотрудника:\n $ pachca users create"
11
11
  ];
12
12
  static scope = "users:create";
13
13
  static apiMethod = "POST";
@@ -18,22 +18,22 @@ export default class UsersCreate extends BaseCommand {
18
18
  static flags = {
19
19
  ...BaseCommand.baseFlags,
20
20
  'first-name': Flags.string({
21
- description: "Имя",
21
+ description: "Имя (макс. 255 символов)",
22
22
  }),
23
23
  'last-name': Flags.string({
24
- description: "Фамилия",
24
+ description: "Фамилия (макс. 255 символов)",
25
25
  }),
26
26
  'email': Flags.string({
27
- description: "Электронная почта",
27
+ description: "Электронная почта (макс. 255 символов)",
28
28
  }),
29
29
  'phone-number': Flags.string({
30
- description: "Телефон",
30
+ description: "Телефон (макс. 255 символов)",
31
31
  }),
32
32
  'nickname': Flags.string({
33
- description: "Имя пользователя",
33
+ description: "Имя пользователя (макс. 255 символов)",
34
34
  }),
35
35
  'department': Flags.string({
36
- description: "Департамент",
36
+ description: "Департамент (макс. 255 символов)",
37
37
  }),
38
38
  'title': Flags.string({
39
39
  description: "Должность",
@@ -88,6 +88,28 @@ export default class UsersCreate extends BaseCommand {
88
88
  this.validationError(missingRequired.map((f) => ({ message: `Обязательный флаг --${f.flag} не передан`, flag: f.flag })), { hint: "Обязательные: --email <string>. pachca introspect users create" });
89
89
  }
90
90
  }
91
+ const validationErrors = [];
92
+ if (flags['first-name'] && String(flags['first-name']).length > 255) {
93
+ validationErrors.push({ message: `--first-name: максимум 255 символов (передано: ${String(flags['first-name']).length})`, flag: 'first-name' });
94
+ }
95
+ if (flags['last-name'] && String(flags['last-name']).length > 255) {
96
+ validationErrors.push({ message: `--last-name: максимум 255 символов (передано: ${String(flags['last-name']).length})`, flag: 'last-name' });
97
+ }
98
+ if (flags['email'] && String(flags['email']).length > 255) {
99
+ validationErrors.push({ message: `--email: максимум 255 символов (передано: ${String(flags['email']).length})`, flag: 'email' });
100
+ }
101
+ if (flags['phone-number'] && String(flags['phone-number']).length > 255) {
102
+ validationErrors.push({ message: `--phone-number: максимум 255 символов (передано: ${String(flags['phone-number']).length})`, flag: 'phone-number' });
103
+ }
104
+ if (flags['nickname'] && String(flags['nickname']).length > 255) {
105
+ validationErrors.push({ message: `--nickname: максимум 255 символов (передано: ${String(flags['nickname']).length})`, flag: 'nickname' });
106
+ }
107
+ if (flags['department'] && String(flags['department']).length > 255) {
108
+ validationErrors.push({ message: `--department: максимум 255 символов (передано: ${String(flags['department']).length})`, flag: 'department' });
109
+ }
110
+ if (validationErrors.length > 0) {
111
+ this.validationError(validationErrors);
112
+ }
91
113
  const body = {
92
114
  user: {
93
115
  first_name: flags['first-name'],
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersDelete extends BaseCommand {
6
6
  static description = "Удаление сотрудника";
7
7
  static examples = [
8
- "Получить сотрудника по ID:\n $ pachca users get",
9
- "Массовое создание сотрудников с тегами:\n $ pachca users update",
10
- "Offboarding сотрудника:\n $ pachca users update"
8
+ "Offboarding сотрудника:\n $ pachca users delete"
11
9
  ];
12
10
  static scope = "users:delete";
13
11
  static apiMethod = "DELETE";
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGetStatus extends BaseCommand {
5
5
  static description = "Статус сотрудника";
6
6
  static examples = [
7
- "Управление статусом сотрудника:\n $ pachca users get-status",
8
- "Управление статусом сотрудника:\n $ pachca users update-status",
9
- "Управление статусом сотрудника:\n $ pachca users remove-status"
7
+ "Управление статусом сотрудника:\n $ pachca users get-status"
10
8
  ];
11
9
  static scope = "user_status:read";
12
10
  static apiMethod = "GET";
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGet extends BaseCommand {
5
5
  static description = "Информация о сотруднике";
6
6
  static examples = [
7
- "Получить сотрудника по ID:\n $ pachca users get",
8
- "Массовое создание сотрудников с тегами:\n $ pachca users update",
9
- "Offboarding сотрудника:\n $ pachca users update"
7
+ "Получить сотрудника по ID:\n $ pachca users get"
10
8
  ];
11
9
  static scope = "users:read";
12
10
  static apiMethod = "GET";
@@ -6,7 +6,7 @@ export default class UsersList extends BaseCommand {
6
6
  static examples = [
7
7
  "Проверить, кто прочитал сообщение:\n $ pachca users list",
8
8
  "Разослать уведомление нескольким пользователям:\n $ pachca users list",
9
- "Массовое создание сотрудников с тегами:\n $ pachca users create"
9
+ "Найти сотрудника по имени или email:\n $ pachca users list"
10
10
  ];
11
11
  static scope = "users:read";
12
12
  static apiMethod = "GET";
@@ -5,7 +5,6 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveAvatar extends BaseCommand {
6
6
  static description = "Удаление аватара сотрудника";
7
7
  static examples = [
8
- "Загрузить аватар сотрудника:\n $ pachca users update-avatar",
9
8
  "Удалить аватар сотрудника:\n $ pachca users remove-avatar"
10
9
  ];
11
10
  static scope = "user_avatar:write";
@@ -5,8 +5,6 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveStatus extends BaseCommand {
6
6
  static description = "Удаление статуса сотрудника";
7
7
  static examples = [
8
- "Управление статусом сотрудника:\n $ pachca users get-status",
9
- "Управление статусом сотрудника:\n $ pachca users update-status",
10
8
  "Управление статусом сотрудника:\n $ pachca users remove-status"
11
9
  ];
12
10
  static scope = "user_status:write";
@@ -6,8 +6,7 @@ import * as path from 'node:path';
6
6
  export default class UsersUpdateAvatar extends BaseCommand {
7
7
  static description = "Загрузка аватара сотрудника";
8
8
  static examples = [
9
- "Загрузить аватар сотрудника:\n $ pachca users update-avatar",
10
- "Удалить аватар сотрудника:\n $ pachca users remove-avatar"
9
+ "Загрузить аватар сотрудника:\n $ pachca users update-avatar"
11
10
  ];
12
11
  static scope = "user_avatar:write";
13
12
  static apiMethod = "PUT";
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersUpdateStatus extends BaseCommand {
6
6
  static description = "Новый статус сотрудника";
7
7
  static examples = [
8
- "Управление статусом сотрудника:\n $ pachca users get-status",
9
- "Управление статусом сотрудника:\n $ pachca users update-status",
10
- "Управление статусом сотрудника:\n $ pachca users remove-status"
8
+ "Управление статусом сотрудника:\n $ pachca users update-status"
11
9
  ];
12
10
  static scope = "user_status:write";
13
11
  static apiMethod = "PUT";
@@ -26,7 +24,7 @@ export default class UsersUpdateStatus extends BaseCommand {
26
24
  description: "Emoji символ статуса",
27
25
  }),
28
26
  'title': Flags.string({
29
- description: "Текст статуса",
27
+ description: "Текст статуса (макс. 50 символов)",
30
28
  }),
31
29
  'expires-at': Flags.string({
32
30
  description: "Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ",
@@ -70,6 +68,9 @@ export default class UsersUpdateStatus extends BaseCommand {
70
68
  }
71
69
  }
72
70
  const validationErrors = [];
71
+ if (flags['title'] && String(flags['title']).length > 50) {
72
+ validationErrors.push({ message: `--title: максимум 50 символов (передано: ${String(flags['title']).length})`, flag: 'title' });
73
+ }
73
74
  if (flags['away-message'] && String(flags['away-message']).length > 1024) {
74
75
  validationErrors.push({ message: `--away-message: максимум 1024 символов (передано: ${String(flags['away-message']).length})`, flag: 'away-message' });
75
76
  }
@@ -4,7 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersUpdate extends BaseCommand {
5
5
  static description = "Редактирование сотрудника";
6
6
  static examples = [
7
- "Получить сотрудника по ID:\n $ pachca users get",
8
7
  "Массовое создание сотрудников с тегами:\n $ pachca users update",
9
8
  "Offboarding сотрудника:\n $ pachca users update"
10
9
  ];
@@ -21,22 +20,22 @@ export default class UsersUpdate extends BaseCommand {
21
20
  static flags = {
22
21
  ...BaseCommand.baseFlags,
23
22
  'first-name': Flags.string({
24
- description: "Имя",
23
+ description: "Имя (макс. 255 символов)",
25
24
  }),
26
25
  'last-name': Flags.string({
27
- description: "Фамилия",
26
+ description: "Фамилия (макс. 255 символов)",
28
27
  }),
29
28
  'email': Flags.string({
30
- description: "Электронная почта",
29
+ description: "Электронная почта (макс. 255 символов)",
31
30
  }),
32
31
  'phone-number': Flags.string({
33
- description: "Телефон",
32
+ description: "Телефон (макс. 255 символов)",
34
33
  }),
35
34
  'nickname': Flags.string({
36
- description: "Имя пользователя",
35
+ description: "Имя пользователя (макс. 255 символов)",
37
36
  }),
38
37
  'department': Flags.string({
39
- description: "Департамент",
38
+ description: "Департамент (макс. 255 символов)",
40
39
  }),
41
40
  'title': Flags.string({
42
41
  description: "Должность",
@@ -58,6 +57,28 @@ export default class UsersUpdate extends BaseCommand {
58
57
  async run() {
59
58
  const { args, flags } = await this.parse(UsersUpdate);
60
59
  this.parsedFlags = flags;
60
+ const validationErrors = [];
61
+ if (flags['first-name'] && String(flags['first-name']).length > 255) {
62
+ validationErrors.push({ message: `--first-name: максимум 255 символов (передано: ${String(flags['first-name']).length})`, flag: 'first-name' });
63
+ }
64
+ if (flags['last-name'] && String(flags['last-name']).length > 255) {
65
+ validationErrors.push({ message: `--last-name: максимум 255 символов (передано: ${String(flags['last-name']).length})`, flag: 'last-name' });
66
+ }
67
+ if (flags['email'] && String(flags['email']).length > 255) {
68
+ validationErrors.push({ message: `--email: максимум 255 символов (передано: ${String(flags['email']).length})`, flag: 'email' });
69
+ }
70
+ if (flags['phone-number'] && String(flags['phone-number']).length > 255) {
71
+ validationErrors.push({ message: `--phone-number: максимум 255 символов (передано: ${String(flags['phone-number']).length})`, flag: 'phone-number' });
72
+ }
73
+ if (flags['nickname'] && String(flags['nickname']).length > 255) {
74
+ validationErrors.push({ message: `--nickname: максимум 255 символов (передано: ${String(flags['nickname']).length})`, flag: 'nickname' });
75
+ }
76
+ if (flags['department'] && String(flags['department']).length > 255) {
77
+ validationErrors.push({ message: `--department: максимум 255 символов (передано: ${String(flags['department']).length})`, flag: 'department' });
78
+ }
79
+ if (validationErrors.length > 0) {
80
+ this.validationError(validationErrors);
81
+ }
61
82
  const body = { user: {
62
83
  first_name: flags['first-name'],
63
84
  last_name: flags['last-name'],
@@ -2,9 +2,11 @@
2
2
  "security:list": "Журнал аудита событий",
3
3
  "bots:recreate-token-self": "Ротация собственного токена бота",
4
4
  "bots:update-webhook": "Саморегистрация вебхука бота",
5
+ "bots:list": "Список ботов",
5
6
  "bots:create": "Новый бот",
6
7
  "bots:get": "Информация о боте",
7
8
  "bots:update": "Редактирование бота",
9
+ "bots:delete": "Удаление бота",
8
10
  "bots:recreate-token": "Ротация токена бота",
9
11
  "chats:create": "Новый чат",
10
12
  "chats:list": "Список чатов",
@@ -57,6 +59,7 @@
57
59
  "tasks:get": "Информация о напоминании",
58
60
  "tasks:update": "Редактирование напоминания",
59
61
  "tasks:delete": "Удаление напоминания",
62
+ "threads:create": "Новый самостоятельный тред",
60
63
  "threads:list": "Список тредов",
61
64
  "threads:get": "Информация о треде",
62
65
  "files:uploads": "Получение подписи, ключа и других параметров",
@@ -1,4 +1,51 @@
1
1
  [
2
+ {
3
+ "version": "2026.7.1",
4
+ "date": "24 июля 2026",
5
+ "changes": [
6
+ {
7
+ "type": "+",
8
+ "command": "threads create",
9
+ "description": "Новая команда — создание самостоятельного треда без привязки к сообщению"
10
+ },
11
+ {
12
+ "type": "-",
13
+ "command": "",
14
+ "description": "Примеры в `--help` больше не смешиваются между командами с общим путём (например, create и list одного ресурса показывали примеры друг друга)"
15
+ }
16
+ ]
17
+ },
18
+ {
19
+ "version": "2026.7.0",
20
+ "date": "7 июля 2026",
21
+ "changes": [
22
+ {
23
+ "type": "+",
24
+ "command": "bots list",
25
+ "description": "Новая команда — список ботов с поиском по имени (`--query`)"
26
+ },
27
+ {
28
+ "type": "+",
29
+ "command": "bots delete",
30
+ "description": "Новая команда — удаление бота по его `id`"
31
+ },
32
+ {
33
+ "type": "+",
34
+ "command": "bots create",
35
+ "description": "Права доступа бота — параметры `who-can-add` (кто может добавлять бота в чаты), `can-edit` (роли, редактирующие настройки) и `single-chat` (только один чат)"
36
+ },
37
+ {
38
+ "type": "+",
39
+ "command": "bots update",
40
+ "description": "Права доступа бота — параметры `who-can-add` (кто может добавлять бота в чаты) и `can-edit` (роли, редактирующие настройки)"
41
+ },
42
+ {
43
+ "type": "+",
44
+ "command": "search users",
45
+ "description": "Значение сортировки `--sort creation` — по дате создания"
46
+ }
47
+ ]
48
+ },
2
49
  {
3
50
  "version": "2026.6.3",
4
51
  "date": "24 июня 2026",