@pachca/cli 2026.10.2 → 2026.10.3

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 (99) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +24 -24
  3. package/README.template.md +14 -23
  4. package/dist/base-command.js +1 -1
  5. package/dist/client.js +56 -32
  6. package/dist/commands/api.js +1 -1
  7. package/dist/commands/auth/logout.js +23 -12
  8. package/dist/commands/bots/create-token.js +0 -3
  9. package/dist/commands/bots/create.js +0 -4
  10. package/dist/commands/bots/delete.js +0 -3
  11. package/dist/commands/bots/get-stream.js +23 -0
  12. package/dist/commands/bots/list-company.js +0 -3
  13. package/dist/commands/bots/list-events.js +0 -3
  14. package/dist/commands/bots/list-scopes.js +0 -3
  15. package/dist/commands/bots/list.js +0 -3
  16. package/dist/commands/bots/recreate-token-self.js +0 -3
  17. package/dist/commands/bots/recreate-token.js +0 -3
  18. package/dist/commands/bots/reissue-token.js +0 -3
  19. package/dist/commands/bots/remove-event.js +0 -3
  20. package/dist/commands/bots/update-webhook.js +0 -3
  21. package/dist/commands/bots/update.js +0 -5
  22. package/dist/commands/chats/archive.js +0 -4
  23. package/dist/commands/chats/create.js +3 -6
  24. package/dist/commands/chats/download-export.js +0 -3
  25. package/dist/commands/chats/list-company.js +0 -3
  26. package/dist/commands/chats/list.js +1 -6
  27. package/dist/commands/chats/remove-avatar.js +0 -3
  28. package/dist/commands/chats/request-export.js +0 -3
  29. package/dist/commands/chats/unarchive.js +0 -3
  30. package/dist/commands/chats/update-avatar.js +0 -3
  31. package/dist/commands/chats/update.js +0 -3
  32. package/dist/commands/custom-properties/list.js +0 -3
  33. package/dist/commands/drafts/create.js +1 -4
  34. package/dist/commands/drafts/delete.js +0 -3
  35. package/dist/commands/drafts/update.js +1 -1
  36. package/dist/commands/files/uploads.js +0 -3
  37. package/dist/commands/group-tags/create.js +0 -3
  38. package/dist/commands/group-tags/list-users.js +0 -3
  39. package/dist/commands/group-tags/list.js +0 -3
  40. package/dist/commands/important-messages/create.js +64 -0
  41. package/dist/commands/important-messages/delete.js +42 -0
  42. package/dist/commands/important-messages/list.js +89 -0
  43. package/dist/commands/members/add.js +0 -5
  44. package/dist/commands/members/leave.js +0 -3
  45. package/dist/commands/members/list.js +0 -4
  46. package/dist/commands/members/remove.js +0 -3
  47. package/dist/commands/members/update.js +0 -3
  48. package/dist/commands/messages/create.js +3 -8
  49. package/dist/commands/messages/delete.js +0 -3
  50. package/dist/commands/messages/get.js +0 -5
  51. package/dist/commands/messages/list.js +1 -5
  52. package/dist/commands/messages/pin.js +0 -3
  53. package/dist/commands/messages/unfurl.js +0 -3
  54. package/dist/commands/messages/unpin.js +0 -3
  55. package/dist/commands/messages/update.js +2 -7
  56. package/dist/commands/oauth/token-info.js +0 -3
  57. package/dist/commands/profile/delete-avatar.js +0 -3
  58. package/dist/commands/profile/delete-status.js +0 -3
  59. package/dist/commands/profile/get.js +0 -4
  60. package/dist/commands/profile/update-avatar.js +0 -3
  61. package/dist/commands/profile/update-status.js +1 -4
  62. package/dist/commands/reactions/add.js +3 -6
  63. package/dist/commands/reactions/remove.js +3 -6
  64. package/dist/commands/read-member/list-readers.js +0 -3
  65. package/dist/commands/search/list-chats.js +0 -5
  66. package/dist/commands/search/list-messages.js +0 -3
  67. package/dist/commands/search/list-users.js +0 -5
  68. package/dist/commands/security/list.js +0 -5
  69. package/dist/commands/tasks/create.js +1 -6
  70. package/dist/commands/tasks/delete.js +0 -3
  71. package/dist/commands/tasks/get.js +0 -3
  72. package/dist/commands/tasks/list.js +0 -5
  73. package/dist/commands/tasks/update.js +2 -6
  74. package/dist/commands/threads/add.js +0 -4
  75. package/dist/commands/threads/list.js +0 -4
  76. package/dist/commands/users/create.js +0 -5
  77. package/dist/commands/users/delete.js +0 -3
  78. package/dist/commands/users/get-status.js +0 -3
  79. package/dist/commands/users/get.js +0 -3
  80. package/dist/commands/users/list.js +0 -5
  81. package/dist/commands/users/remove-avatar.js +0 -3
  82. package/dist/commands/users/remove-status.js +0 -3
  83. package/dist/commands/users/update-avatar.js +0 -3
  84. package/dist/commands/users/update-status.js +1 -4
  85. package/dist/commands/users/update.js +4 -4
  86. package/dist/commands/views/open.js +0 -5
  87. package/dist/commands/views/submit-response.js +0 -3
  88. package/dist/data/alternatives.json +5 -9
  89. package/dist/data/changelog.json +66 -0
  90. package/dist/data/endpoints.json +1 -1
  91. package/dist/help.js +0 -1
  92. package/dist/hooks/command-not-found.js +0 -1
  93. package/dist/hooks/init.js +5 -1
  94. package/dist/oauth.js +9 -4
  95. package/dist/token-refresh.js +61 -14
  96. package/oclif.manifest.json +1 -1
  97. package/package.json +1 -1
  98. package/dist/commands/guide.js +0 -90
  99. package/dist/data/workflows.json +0 -1058
@@ -3,11 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class MessagesUpdate extends BaseCommand {
5
5
  static description = "Редактирование сообщения";
6
- static examples = [
7
- "Отредактировать сообщение — Обнови сообщение:\n $ pachca messages update",
8
- "Изменить вложения сообщения — Обнови сообщение с новым массивом `files`:\n $ pachca messages update",
9
- "Обработать нажатие кнопки (callback) — Опционально: обнови исходное сообщение:\n $ pachca messages update"
10
- ];
11
6
  static scope = "messages:update";
12
7
  static apiMethod = "PUT";
13
8
  static apiPath = "/messages/{id}";
@@ -21,10 +16,10 @@ export default class MessagesUpdate extends BaseCommand {
21
16
  static flags = {
22
17
  ...BaseCommand.baseFlags,
23
18
  'content': Flags.string({
24
- description: "Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). У мульти-гостя `<@user_id>` недоступного ему сотрудника остаётся в тексте как есть. До 40 000 байт в UTF-8, для кириллицы это около 20 000 символов. В пространстве с продвинутым шифрованием — до 27 000 байт.",
19
+ description: "Текст сообщения. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). У мульти-гостя `<@user_id>` недоступного ему сотрудника остаётся в тексте как есть. До 40 000 байт в UTF-8, для кириллицы это около 20 000 символов.",
25
20
  }),
26
21
  'files': Flags.string({
27
- description: "Прикрепляемые файлы. Переданный набор заменяет прежний: чтобы оставить уже приложенный файл, передайте его снова с тем же `key`.",
22
+ description: "Прикрепляемые файлы. Переданный набор заменяет прежний: чтобы оставить уже приложенный файл, передайте его снова с тем же `key`. Такой файл остаётся прежним вложением с тем же `id` и названием, а его поля из запроса не применяются. Чтобы показать файл под другим названием, загрузите его заново.",
28
23
  }),
29
24
  'buttons': Flags.string({
30
25
  description: "Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Для удаления кнопок пришлите пустой массив.",
@@ -1,9 +1,6 @@
1
1
  import { BaseCommand } from '../../base-command.js';
2
2
  export default class OauthTokenInfo extends BaseCommand {
3
3
  static description = "Информация о токене";
4
- static examples = [
5
- "Проверить свой токен — Получи информацию о токене: скоупы, дату создания, срок жизни:\n $ pachca oauth token-info"
6
- ];
7
4
  static hiddenAliases = ["profile:get-info"];
8
5
  static apiMethod = "GET";
9
6
  static apiPath = "/oauth/token/info";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ProfileDeleteAvatar extends BaseCommand {
6
6
  static description = "Удаление своего аватара";
7
- static examples = [
8
- "Удалить аватар профиля — Удали аватар:\n $ pachca profile delete-avatar"
9
- ];
10
7
  static scope = "profile_avatar:write";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/profile/avatar";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ProfileDeleteStatus extends BaseCommand {
6
6
  static description = "Удаление своего статуса";
7
- static examples = [
8
- "Сбросить статус — Удали статус:\n $ pachca profile delete-status"
9
- ];
10
7
  static scope = "profile_status:write";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/profile/status";
@@ -1,10 +1,6 @@
1
1
  import { BaseCommand } from '../../base-command.js';
2
2
  export default class ProfileGet extends BaseCommand {
3
3
  static description = "Свой профиль";
4
- static examples = [
5
- "Получить свой профиль — Получи информацию о текущем пользователе:\n $ pachca profile get",
6
- "Получить кастомные поля профиля — Получи профиль — в `custom_properties` содержатся значения полей:\n $ pachca profile get"
7
- ];
8
4
  static scope = "profile:read";
9
5
  static apiMethod = "GET";
10
6
  static apiPath = "/profile";
@@ -5,9 +5,6 @@ import * as fs from 'node:fs';
5
5
  import * as path from 'node:path';
6
6
  export default class ProfileUpdateAvatar extends BaseCommand {
7
7
  static description = "Загрузка своего аватара";
8
- static examples = [
9
- "Загрузить аватар профиля — Загрузи аватар из файла:\n $ pachca profile update-avatar"
10
- ];
11
8
  static scope = "profile_avatar:write";
12
9
  static apiMethod = "PUT";
13
10
  static apiPath = "/profile/avatar";
@@ -3,9 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ProfileUpdateStatus extends BaseCommand {
5
5
  static description = "Новый свой статус";
6
- static examples = [
7
- "Установить статус — Установи статус:\n $ pachca profile update-status"
8
- ];
9
6
  static scope = "profile_status:write";
10
7
  static apiMethod = "PUT";
11
8
  static apiPath = "/profile/status";
@@ -14,7 +11,7 @@ export default class ProfileUpdateStatus extends BaseCommand {
14
11
  static flags = {
15
12
  ...BaseCommand.baseFlags,
16
13
  'emoji': Flags.string({
17
- description: "Emoji символ статуса. Обязателен, если статуса ещё нет.",
14
+ description: "Emoji символ статуса. Обязателен, если статуса ещё нет. Эмодзи в текстовой форме (без U+FE0F или с U+FE0E) сохраняется и возвращается с U+FE0F. Пустое значение отвечает `400` с кодом `blank`, несколько эмодзи — с кодом `invalid`, текст вместо эмодзи или рядом с ним — с кодом `wrong_emoji`.",
18
15
  }),
19
16
  'title': Flags.string({
20
17
  description: "Текст статуса. Обязателен, если статуса ещё нет. (макс. 50 символов)",
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ReactionsAdd extends BaseCommand {
6
6
  static description = "Добавление реакции";
7
- static examples = [
8
- "Добавить реакцию на сообщение — Добавь реакцию:\n $ pachca reactions add"
9
- ];
10
7
  static scope = "reactions:write";
11
8
  static apiMethod = "POST";
12
9
  static apiPath = "/messages/{id}/reactions";
@@ -21,17 +18,17 @@ export default class ReactionsAdd extends BaseCommand {
21
18
  static flags = {
22
19
  ...BaseCommand.baseFlags,
23
20
  'code': Flags.string({
24
- description: "Emoji символ реакции. Именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.",
21
+ description: "Emoji символ реакции. Без `name` нужен именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи. С `name` подходит любое непустое значение: оно сохраняется как передано.",
25
22
  }),
26
23
  'name': Flags.string({
27
- description: "Текстовое имя эмодзи (используется для кастомных эмодзи)",
24
+ description: "Имя кастомного эмодзи пространства. С ним реакцией ставится этот эмодзи, а если его в пространстве нет, ответ `404`.",
28
25
  }),
29
26
  };
30
27
  async run() {
31
28
  const { args, flags } = await this.parse(ReactionsAdd);
32
29
  this.parsedFlags = flags;
33
30
  const missingRequired = [
34
- { flag: 'code', label: "Emoji символ реакции. Именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.", type: 'string' },
31
+ { flag: 'code', label: "Emoji символ реакции. Без `name` нужен именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи. С `name` подходит любое непустое значение: оно сохраняется как передано.", type: 'string' },
35
32
  ].filter((f) => flags[f.flag] === undefined || flags[f.flag] === null);
36
33
  if (missingRequired.length > 0) {
37
34
  if (this.isInteractive()) {
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ReactionsRemove extends BaseCommand {
6
6
  static description = "Удаление реакции";
7
- static examples = [
8
- "Добавить реакцию на сообщение — Убрать реакцию:\n $ pachca reactions remove"
9
- ];
10
7
  static scope = "reactions:write";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/messages/{id}/reactions";
@@ -20,10 +17,10 @@ export default class ReactionsRemove extends BaseCommand {
20
17
  static flags = {
21
18
  ...BaseCommand.baseFlags,
22
19
  'code': Flags.string({
23
- description: "Emoji символ реакции. Именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.",
20
+ description: "Emoji символ реакции. Без `name` нужен именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.",
24
21
  }),
25
22
  'name': Flags.string({
26
- description: "Текстовое имя эмодзи (используется для кастомных эмодзи)",
23
+ description: "Имя реакции, как в её поле `name`. С ним реакция ищется по имени, так снимается и кастомный эмодзи пространства.",
27
24
  }),
28
25
  force: Flags.boolean({
29
26
  description: 'Пропустить подтверждение',
@@ -34,7 +31,7 @@ export default class ReactionsRemove extends BaseCommand {
34
31
  const { args, flags } = await this.parse(ReactionsRemove);
35
32
  this.parsedFlags = flags;
36
33
  const missingRequired = [
37
- { flag: 'code', label: "Emoji символ реакции. Именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.", type: 'string' },
34
+ { flag: 'code', label: "Emoji символ реакции. Без `name` нужен именно символ: текстовые записи вроде `+1` или `:+1:` отклоняются как неизвестный эмодзи.", type: 'string' },
38
35
  ].filter((f) => flags[f.flag] === undefined || flags[f.flag] === null);
39
36
  if (missingRequired.length > 0) {
40
37
  if (this.isInteractive()) {
@@ -3,9 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ReadMemberListReaders extends BaseCommand {
5
5
  static description = "Список прочитавших сообщение";
6
- static examples = [
7
- "Проверить, кто прочитал сообщение — Получи массив `user_id` прочитавших:\n $ pachca read-member list-readers"
8
- ];
9
6
  static scope = "messages:read";
10
7
  static apiMethod = "GET";
11
8
  static apiPath = "/messages/{id}/read_member_ids";
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListChats extends BaseCommand {
5
5
  static description = "Поиск чатов";
6
- static examples = [
7
- "Найти чат по имени и отправить сообщение — Найди чат по названию через поиск:\n $ pachca search list-chats",
8
- "Отправить сообщение позже или по расписанию — Найди чат, в который нужно написать:\n $ pachca search list-chats",
9
- "Найти чат по названию — Полнотекстовый поиск по чатам:\n $ pachca search list-chats"
10
- ];
11
6
  static scope = "search:chats";
12
7
  static apiMethod = "GET";
13
8
  static apiPath = "/search/chats";
@@ -3,9 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListMessages extends BaseCommand {
5
5
  static description = "Поиск сообщений";
6
- static examples = [
7
- "Найти сообщение по тексту — Полнотекстовый поиск по сообщениям:\n $ pachca search list-messages"
8
- ];
9
6
  static scope = "search:messages";
10
7
  static apiMethod = "GET";
11
8
  static apiPath = "/search/messages";
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListUsers extends BaseCommand {
5
5
  static description = "Поиск сотрудников";
6
- static examples = [
7
- "Отправить личное сообщение пользователю — Определи `user_id` получателя:\n $ pachca search list-users",
8
- "Упомянуть пользователя — Не нашёл — ищи по всей компании:\n $ pachca search list-users",
9
- "Найти сотрудника по имени — Полнотекстовый поиск по сотрудникам:\n $ pachca search list-users"
10
- ];
11
6
  static scope = "search:users";
12
7
  static apiMethod = "GET";
13
8
  static apiPath = "/search/users";
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class SecurityList extends BaseCommand {
5
5
  static description = "Журнал аудита событий";
6
- static examples = [
7
- "Получить журнал аудита событий — Получи журнал аудита:\n $ pachca security list",
8
- "Мониторинг подозрительных входов — Получи события неудачных 2FA за период:\n $ pachca security list",
9
- "Мониторинг подозрительных входов — Повтори запрос с `--event-key=user_2fa_disabled` — отключение второго фактора у сотрудника:\n $ pachca security list"
10
- ];
11
6
  static scope = "audit_events:read";
12
7
  static plan = "corporation";
13
8
  static apiMethod = "GET";
@@ -4,11 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class TasksCreate extends BaseCommand {
6
6
  static description = "Новое напоминание";
7
- static examples = [
8
- "Форма заявки/запроса — При submit: создай задачу или отправь уведомление ответственному:\n $ pachca tasks create",
9
- "Создать напоминание — Создай задачу:\n $ pachca tasks create",
10
- "Создать серию напоминаний — Для каждой даты: создай задачу:\n $ pachca tasks create"
11
- ];
12
7
  static scope = "tasks:create";
13
8
  static apiMethod = "POST";
14
9
  static apiPath = "/tasks";
@@ -36,7 +31,7 @@ export default class TasksCreate extends BaseCommand {
36
31
  description: "Идентификатор чата, к которому привязывается напоминание (pachca chats list)",
37
32
  }),
38
33
  'all-day': Flags.boolean({
39
- description: "Напоминание на весь день (без указания времени)",
34
+ description: "Напоминание на весь день. Вместе с ним передайте `due_at` ровно на 23:59:59 нужного дня с местным смещением сотрудника, например `2026-10-29T23:59:59+03:00`. Веб-версия Пачки показывает напоминание без времени только по такому сроку, а при другом времени срока показывает это время и с `all_day: true`.",
40
35
  allowNo: true,
41
36
  }),
42
37
  'custom-properties': Flags.string({
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class TasksDelete extends BaseCommand {
6
6
  static description = "Удаление напоминания";
7
- static examples = [
8
- "Удалить задачу — Удали задачу:\n $ pachca tasks delete"
9
- ];
10
7
  static scope = "tasks:delete";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/tasks/{id}";
@@ -3,9 +3,6 @@ import { Args } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksGet extends BaseCommand {
5
5
  static description = "Информация о напоминании";
6
- static examples = [
7
- "Получить задачу по ID — Получи информацию о задаче:\n $ pachca tasks get"
8
- ];
9
6
  static scope = "tasks:read";
10
7
  static apiMethod = "GET";
11
8
  static apiPath = "/tasks/{id}";
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksList extends BaseCommand {
5
5
  static description = "Список напоминаний";
6
- static examples = [
7
- "Получить список предстоящих задач — Получи невыполненные задачи:\n $ pachca tasks list",
8
- "Собрать задачи по чатам проекта — Запроси задачи нужных чатов:\n $ pachca tasks list",
9
- "Собрать задачи по чатам проекта — Сузь выборку по автору, ответственным и состоянию:\n $ pachca tasks list"
10
- ];
11
6
  static scope = "tasks:read";
12
7
  static apiMethod = "GET";
13
8
  static apiPath = "/tasks";
@@ -3,10 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksUpdate extends BaseCommand {
5
5
  static description = "Редактирование напоминания";
6
- static examples = [
7
- "Отметить задачу выполненной — Обнови статус задачи:\n $ pachca tasks update",
8
- "Обновить задачу (перенести срок, сменить ответственных) — Обнови нужные поля задачи:\n $ pachca tasks update"
9
- ];
10
6
  static scope = "tasks:update";
11
7
  static apiMethod = "PUT";
12
8
  static apiPath = "/tasks/{id}";
@@ -32,13 +28,13 @@ export default class TasksUpdate extends BaseCommand {
32
28
  description: "Приоритет: 1, 2 (важно) или 3 (очень важно)",
33
29
  }),
34
30
  'performer-ids': Flags.string({
35
- description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»",
31
+ description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные». Список заменяет прежний целиком.",
36
32
  }),
37
33
  'status': Flags.string({
38
34
  description: "Статус",
39
35
  }),
40
36
  'all-day': Flags.boolean({
41
- description: "Напоминание на весь день (без указания времени)",
37
+ description: "Напоминание на весь день. При правке поле не применяется: напоминание на весь день задаёт срок `due_at` ровно на 23:59:59 нужного дня с местным смещением сотрудника, например `2026-10-29T23:59:59+03:00`.",
42
38
  allowNo: true,
43
39
  }),
44
40
  'done-at': Flags.string({
@@ -3,10 +3,6 @@ import { Args } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ThreadsAdd extends BaseCommand {
5
5
  static description = "Новый тред";
6
- static examples = [
7
- "Ответить в тред (комментарий к сообщению) — Получи или создай тред, возьми `thread.id` из ответа:\n $ pachca threads add",
8
- "Подписаться на тред сообщения — Получи или создай тред, возьми `chat_id` из ответа:\n $ pachca threads add"
9
- ];
10
6
  static scope = "threads:create";
11
7
  static apiMethod = "POST";
12
8
  static apiPath = "/messages/{id}/thread";
@@ -3,10 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ThreadsList extends BaseCommand {
5
5
  static description = "Список тредов";
6
- static examples = [
7
- "Получить список активных тредов за период — Запроси список тредов с фильтром по времени последнего сообщения и нужным `--limit`:\n $ pachca threads list",
8
- "Получить список активных тредов за период — Пока `meta.paginate.has_next` равен `true`, бери следующую страницу через `--cursor=<next_page>`:\n $ pachca threads list"
9
- ];
10
6
  static scope = "threads:read";
11
7
  static apiMethod = "GET";
12
8
  static apiPath = "/threads";
@@ -4,11 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class UsersCreate extends BaseCommand {
6
6
  static description = "Новый сотрудник";
7
- static examples = [
8
- "Массовое создание сотрудников с тегами — Для каждого сотрудника: создай аккаунт с тегами:\n $ pachca users create",
9
- "Создать гостя в чат — Создай гостя: роль `guest` и ровно один чат в `--chat-ids`:\n $ pachca users create",
10
- "Онбординг нового сотрудника — Создай аккаунт:\n $ pachca users create"
11
- ];
12
7
  static scope = "users:create";
13
8
  static apiMethod = "POST";
14
9
  static apiPath = "/users";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class UsersDelete extends BaseCommand {
6
6
  static description = "Удаление сотрудника";
7
- static examples = [
8
- "Offboarding сотрудника — Опционально: удалить аккаунт полностью:\n $ pachca users delete"
9
- ];
10
7
  static scope = "users:delete";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/users/{id}";
@@ -3,9 +3,6 @@ import { Args } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGetStatus extends BaseCommand {
5
5
  static description = "Статус сотрудника";
6
- static examples = [
7
- "Управление статусом сотрудника — Получить текущий статус:\n $ pachca users get-status"
8
- ];
9
6
  static scope = "user_status:read";
10
7
  static apiMethod = "GET";
11
8
  static apiPath = "/users/{user_id}/status";
@@ -3,9 +3,6 @@ import { Args } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGet extends BaseCommand {
5
5
  static description = "Информация о сотруднике";
6
- static examples = [
7
- "Получить сотрудника по ID — Получи информацию о сотруднике:\n $ pachca users get"
8
- ];
9
6
  static scope = "users:read";
10
7
  static apiMethod = "GET";
11
8
  static apiPath = "/users/{id}";
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersList extends BaseCommand {
5
5
  static description = "Список сотрудников";
6
- static examples = [
7
- "Проверить, кто прочитал сообщение — При необходимости сопоставь с именами сотрудников:\n $ pachca users list",
8
- "Разослать уведомление нескольким пользователям — Определи список `user_id` получателей:\n $ pachca users list",
9
- "Найти сотрудника по имени или email — Поиск по имени/email (частичное совпадение):\n $ pachca users list"
10
- ];
11
6
  static scope = "users:read";
12
7
  static apiMethod = "GET";
13
8
  static apiPath = "/users";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveAvatar extends BaseCommand {
6
6
  static description = "Удаление аватара сотрудника";
7
- static examples = [
8
- "Удалить аватар сотрудника — Удали аватар сотрудника:\n $ pachca users remove-avatar"
9
- ];
10
7
  static scope = "user_avatar:write";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/users/{user_id}/avatar";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveStatus extends BaseCommand {
6
6
  static description = "Удаление статуса сотрудника";
7
- static examples = [
8
- "Управление статусом сотрудника — Удалить статус:\n $ pachca users remove-status"
9
- ];
10
7
  static scope = "user_status:write";
11
8
  static apiMethod = "DELETE";
12
9
  static apiPath = "/users/{user_id}/status";
@@ -5,9 +5,6 @@ import * as fs from 'node:fs';
5
5
  import * as path from 'node:path';
6
6
  export default class UsersUpdateAvatar extends BaseCommand {
7
7
  static description = "Загрузка аватара сотрудника";
8
- static examples = [
9
- "Загрузить аватар сотрудника — Загрузи аватар сотруднику:\n $ pachca users update-avatar"
10
- ];
11
8
  static scope = "user_avatar:write";
12
9
  static apiMethod = "PUT";
13
10
  static apiPath = "/users/{user_id}/avatar";
@@ -3,9 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersUpdateStatus extends BaseCommand {
5
5
  static description = "Новый статус сотрудника";
6
- static examples = [
7
- "Управление статусом сотрудника — Установить статус:\n $ pachca users update-status"
8
- ];
9
6
  static scope = "user_status:write";
10
7
  static apiMethod = "PUT";
11
8
  static apiPath = "/users/{user_id}/status";
@@ -19,7 +16,7 @@ export default class UsersUpdateStatus extends BaseCommand {
19
16
  static flags = {
20
17
  ...BaseCommand.baseFlags,
21
18
  'emoji': Flags.string({
22
- description: "Emoji символ статуса. Обязателен, если статуса ещё нет.",
19
+ description: "Emoji символ статуса. Обязателен, если статуса ещё нет. Эмодзи в текстовой форме (без U+FE0F или с U+FE0E) сохраняется и возвращается с U+FE0F. Пустое значение отвечает `400` с кодом `blank`, несколько эмодзи — с кодом `invalid`, текст вместо эмодзи или рядом с ним — с кодом `wrong_emoji`.",
23
20
  }),
24
21
  'title': Flags.string({
25
22
  description: "Текст статуса. Обязателен, если статуса ещё нет. (макс. 50 символов)",
@@ -3,10 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersUpdate extends BaseCommand {
5
5
  static description = "Редактирование сотрудника";
6
- static examples = [
7
- "Массовое создание сотрудников с тегами — Или обнови существующего:\n $ pachca users update",
8
- "Offboarding сотрудника — Заблокировать доступ:\n $ pachca users update"
9
- ];
10
6
  static scope = "users:update";
11
7
  static apiMethod = "PUT";
12
8
  static apiPath = "/users/{id}";
@@ -43,6 +39,9 @@ export default class UsersUpdate extends BaseCommand {
43
39
  'role': Flags.string({
44
40
  description: "Уровень доступа",
45
41
  }),
42
+ 'chat-ids': Flags.string({
43
+ description: "Чат, в котором останется сотрудник при переводе в гости (`role: \"guest\"`): ровно одна активная беседа или канал, куда у токена есть право добавлять участников. Без такого чата ответ `400` по этому полю, и не меняется ничего. При других ролях и у того, кто уже гость, поле не учитывается.",
44
+ }),
46
45
  'suspended': Flags.boolean({
47
46
  description: "Деактивация пользователя",
48
47
  allowNo: true,
@@ -88,6 +87,7 @@ export default class UsersUpdate extends BaseCommand {
88
87
  department: flags['department'],
89
88
  title: flags['title'],
90
89
  role: flags['role'],
90
+ chat_ids: flags['chat-ids'] ? this.parseJSON(flags['chat-ids'], 'chat-ids') : undefined,
91
91
  suspended: flags['suspended'],
92
92
  list_tags: flags['list-tags'] ? this.parseJSON(flags['list-tags'], 'list-tags') : undefined,
93
93
  custom_properties: flags['custom-properties'] ? this.parseJSON(flags['custom-properties'], 'custom-properties') : undefined,
@@ -4,11 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ViewsOpen extends BaseCommand {
6
6
  static description = "Открытие представления";
7
- static examples = [
8
- "Показать интерактивную форму пользователю — Немедленно открой форму:\n $ pachca views open",
9
- "Опрос сотрудников через форму — Открой форму с полями опроса:\n $ pachca views open",
10
- "Форма заявки/запроса — При нажатии открой форму с полями: тема, описание, приоритет:\n $ pachca views open"
11
- ];
12
7
  static scope = "views:write";
13
8
  static apiMethod = "POST";
14
9
  static apiPath = "/views/open";
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
4
4
  import * as clack from '@clack/prompts';
5
5
  export default class ViewsSubmitResponse extends BaseCommand {
6
6
  static description = "Ответ на отправку формы";
7
- static examples = [
8
- "Обработать отправку формы (view_submission) — Если адрес исходящего вебхука не задан → ответь методом по `view_id` и `submit_id` из события: пустой `errors` закрывает форму, заполненный показывает ошибки полей:\n $ pachca views submit-response"
9
- ];
10
7
  static scope = "views:write";
11
8
  static apiMethod = "POST";
12
9
  static apiPath = "/views/{view_id}/submit_response";
@@ -51,6 +51,9 @@
51
51
  "group-tags:update": "Редактирование тега",
52
52
  "group-tags:delete": "Удаление тега",
53
53
  "group-tags:list-users": "Список сотрудников тега",
54
+ "important-messages:list": "Список важных сообщений",
55
+ "important-messages:create": "Добавление сообщения в важные",
56
+ "important-messages:delete": "Удаление сообщения из важных",
54
57
  "messages:create": "Новое сообщение",
55
58
  "messages:list": "Список сообщений чата",
56
59
  "messages:get": "Информация о сообщении",
@@ -96,13 +99,6 @@
96
99
  "views:open": "Открытие представления",
97
100
  "views:submit-response": "Ответ на отправку формы",
98
101
  "bots:list-events": "История событий",
99
- "bots:remove-event": "Удаление события истории",
100
- "skill:pachca-users": "pachca-users",
101
- "skill:pachca-oauth": "pachca-oauth",
102
- "skill:pachca-profile": "получить профиль, мой профиль, установить свой статус",
103
- "skill:pachca-bots": "pachca-bots",
104
- "skill:pachca-chats": "pachca-chats",
105
- "skill:pachca-search": "найти сообщение по тексту, полнотекстовый поиск",
106
- "skill:pachca-messages": "pachca-messages",
107
- "skill:pachca-forms": "pachca-forms"
102
+ "bots:get-stream": "Поток событий",
103
+ "bots:remove-event": "Удаление события истории"
108
104
  }
@@ -1,4 +1,70 @@
1
1
  [
2
+ {
3
+ "version": "2026.10.3",
4
+ "date": "28 октября 2026",
5
+ "changes": [
6
+ {
7
+ "type": "~",
8
+ "command": "guide",
9
+ "description": "Команда убрана вместе со сценариями: как решать задачи в Пачке, агенту рассказывают скиллы (https://dev.pachca.com/guides/mcp/plugin), а флаги каждой команды показывает `pachca <команда> --help`"
10
+ },
11
+ {
12
+ "type": "~",
13
+ "description": "Из `--help` команд убран блок примеров со сценариями"
14
+ },
15
+ {
16
+ "type": "~",
17
+ "command": "api",
18
+ "description": "`api ls` и справка `--describe`, `--spec`, `--docs` работают без токена: они читают встроенную спецификацию и в API не обращаются"
19
+ },
20
+ {
21
+ "type": "+",
22
+ "command": "important-messages list, important-messages create, important-messages delete",
23
+ "description": "Новые команды — раздел «Важное» владельца токена: список отмеченных сообщений, добавление сообщения и удаление из раздела"
24
+ },
25
+ {
26
+ "type": "+",
27
+ "command": "bots get-stream",
28
+ "description": "Новая команда — ссылка на поток событий бота"
29
+ },
30
+ {
31
+ "type": "+",
32
+ "command": "users update",
33
+ "description": "Значение `guest` у `--role` вместе с флагом `--chat-ids` переводит сотрудника в гости"
34
+ },
35
+ {
36
+ "type": "+",
37
+ "command": "chats create",
38
+ "description": "Команда предупреждает в stderr об идентификаторах из `--group-tag-ids`, которых нет среди тегов пространства"
39
+ },
40
+ {
41
+ "type": "+",
42
+ "description": "В выводе команд с сообщениями появилось поле `important`: сообщение в разделе «Важное» владельца токена"
43
+ },
44
+ {
45
+ "type": "~",
46
+ "command": "auth logout",
47
+ "description": "После входа через браузер команда закрывает вход на сервере и при истёкшем токене: сначала обновляет его, потом отзывает свежий"
48
+ },
49
+ {
50
+ "type": "~",
51
+ "command": "auth logout",
52
+ "description": "`token_revoked: true` значит, что вход на сервере закрыт, в том числе если его закрыли раньше, а при `false` закрыть вход не удалось, и его нужно отозвать в списке «Токены CLI»"
53
+ },
54
+ {
55
+ "type": "~",
56
+ "description": "Ответы `500`, `502`, `503`, `504` и сетевую ошибку CLI повторяет до трёх раз только у запросов GET, PUT и DELETE, POST и PATCH после них не повторяются, а `504` с кодом `timeout` (поиск не уложился по времени) приходит ошибкой сразу"
57
+ },
58
+ {
59
+ "type": "~",
60
+ "description": "Подсказки при опечатке в команде предлагают только существующие команды, без `pachca skill …`"
61
+ },
62
+ {
63
+ "type": "-",
64
+ "description": "Описание флага `--no-retry` уточнено: он отключает повторы после `429`, `5xx` и сетевой ошибки"
65
+ }
66
+ ]
67
+ },
2
68
  {
3
69
  "version": "2026.10.2",
4
70
  "date": "21 октября 2026",