@pachca/cli 2026.8.0 → 2026.8.2

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.
@@ -4,7 +4,9 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksList extends BaseCommand {
5
5
  static description = "Список напоминаний";
6
6
  static examples = [
7
- "Получить список предстоящих задач — Получи все задачи, фильтруй по `status` на клиенте:\n $ pachca tasks list"
7
+ "Получить список предстоящих задач — Получи невыполненные задачи:\n $ pachca tasks list",
8
+ "Собрать задачи по чатам проекта — Запроси задачи нужных чатов:\n $ pachca tasks list",
9
+ "Собрать задачи по чатам проекта — Сузь выборку по автору, ответственным и состоянию:\n $ pachca tasks list"
8
10
  ];
9
11
  static scope = "tasks:read";
10
12
  static apiMethod = "GET";
@@ -13,6 +15,19 @@ export default class TasksList extends BaseCommand {
13
15
  static args = {};
14
16
  static flags = {
15
17
  ...BaseCommand.baseFlags,
18
+ 'status': Flags.string({
19
+ description: "Фильтр по состоянию. Если параметр не указан, возвращаются напоминания в любом состоянии.",
20
+ options: ["done", "undone"],
21
+ }),
22
+ 'chat-ids': Flags.string({
23
+ description: "Фильтр по чатам, к которым привязаны напоминания. Доступными считаются чаты, где вы состоите участником, открытые беседы и каналы пространства, а также треды, доступные вам по родительскому чату. Остальные переданные идентификаторы игнорируются без ошибки. Не более 100 идентификаторов." + " (через запятую)",
24
+ }),
25
+ 'performer-ids': Flags.string({
26
+ description: "Фильтр по ответственным за напоминание. Не более 100 идентификаторов." + " (через запятую)",
27
+ }),
28
+ 'author-id': Flags.integer({
29
+ description: "Фильтр по автору напоминания",
30
+ }),
16
31
  limit: Flags.integer({
17
32
  description: 'Количество результатов на страницу',
18
33
  }),
@@ -35,6 +50,10 @@ export default class TasksList extends BaseCommand {
35
50
  const seenCursors = new Set();
36
51
  while (pages < 500) {
37
52
  const query = {
53
+ status: flags['status'],
54
+ 'chat_ids': flags['chat-ids']?.split(','),
55
+ 'performer_ids': flags['performer-ids']?.split(','),
56
+ 'author_id': flags['author-id'],
38
57
  limit: flags.limit,
39
58
  cursor: nextCursor,
40
59
  };
@@ -81,6 +100,10 @@ export default class TasksList extends BaseCommand {
81
100
  method: 'GET',
82
101
  path: '/tasks',
83
102
  query: {
103
+ status: flags['status'],
104
+ 'chat_ids': flags['chat-ids']?.split(','),
105
+ 'performer_ids': flags['performer-ids']?.split(','),
106
+ 'author_id': flags['author-id'],
84
107
  limit: flags.limit,
85
108
  cursor: flags.cursor,
86
109
  },
@@ -69,7 +69,7 @@ export default class Upgrade extends BaseCommand {
69
69
  this.output({ upgraded: false, current: currentVersion, error: 'Cannot determine latest version' });
70
70
  }
71
71
  else {
72
- process.stderr.write('✗ Не удалось определить последнюю версию\n');
72
+ process.stderr.write('✗ Не удалось определить последнюю версию.\n');
73
73
  }
74
74
  this.exit(1);
75
75
  }
@@ -23,6 +23,8 @@
23
23
  "members:remove": "Исключение пользователя",
24
24
  "members:update": "Редактирование роли",
25
25
  "chats:unarchive": "Разархивация чата",
26
+ "bots:list-company": "Список ботов пространства",
27
+ "chats:list-company": "Список чатов пространства",
26
28
  "custom-properties:list": "Список дополнительных полей",
27
29
  "files:direct-url": "Загрузка файла",
28
30
  "group-tags:create": "Новый тег",
@@ -1,4 +1,128 @@
1
1
  [
2
+ {
3
+ "version": "2026.8.2",
4
+ "date": "12 августа 2026",
5
+ "changes": [
6
+ {
7
+ "type": "+",
8
+ "command": "chats list-company",
9
+ "description": "Новая команда — все беседы и каналы пространства, включая закрытые, где вы не состоите. Флаг `--activity` со значением `active` или `archived` оставляет одно состояние, по умолчанию отдаются оба. Нужна роль владельца пространства, тариф «Корпорация» и право `company_chats:read`"
10
+ },
11
+ {
12
+ "type": "+",
13
+ "command": "bots list-company",
14
+ "description": "Новая команда — все боты пространства, включая недоступные вам для редактирования. У таких ботов заполнены только имя и никнейм, остальные настройки приходят пустыми. Фильтр по имени — флаг `--query`. Нужна роль владельца пространства, тариф «Корпорация» и право `company_bots:read`"
15
+ },
16
+ {
17
+ "type": "+",
18
+ "command": "tasks list",
19
+ "description": "Флаги `--status`, `--chat-ids`, `--performer-ids` и `--author-id` для фильтрации напоминаний. С `--chat-ids` выдача расширяется до всех напоминаний указанных чатов, а не только ваших"
20
+ },
21
+ {
22
+ "type": "+",
23
+ "command": "security list",
24
+ "description": "Фильтр `--event-key` принимает `company_chats_accessed` и `company_bots_accessed`"
25
+ },
26
+ {
27
+ "type": "-",
28
+ "description": "Недостающий скоуп в ошибке `insufficient_scope` берётся из заголовка `WWW-Authenticate` — раньше его вытаскивали регуляркой из текста сообщения, и он терялся при любой смене формулировки. Разбор текста остался запасным путём"
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "version": "2026.8.1",
34
+ "date": "7 августа 2026",
35
+ "changes": [
36
+ {
37
+ "type": "+",
38
+ "command": "auth login",
39
+ "description": "Вход через браузер — без ручной вставки токена. CLI показывает адрес и код, открывает браузер и ждёт подтверждения. Токен такого входа живёт час и продлевается сам перед каждой командой; при параллельных процессах обновляет только один, остальные ждут результат. Флаг `--no-browser` печатает адрес и код, не открывая браузер. `--token` и `PACHCA_TOKEN` работают как раньше — это путь для CI и агентов"
40
+ },
41
+ {
42
+ "type": "+",
43
+ "command": "auth login",
44
+ "description": "Токен хранится в хранилище ключей ОС — Keychain на macOS, Secret Service на Linux, Диспетчер учётных данных на Windows; в файле конфигурации остаются только имя, почта и права. Где хранилища нет (headless-машина, контейнер), CLI сохраняет токен в файл и сообщает об этом при входе. Отказаться от хранилища: флаг `--insecure-storage` или переменная `PACHCA_SECRET_STORE=file`"
45
+ },
46
+ {
47
+ "type": "+",
48
+ "command": "auth status",
49
+ "description": "Показывает способ входа, срок жизни токена, выданные права и где хранится токен — с этого стоит начинать разбор внезапного `403`"
50
+ },
51
+ {
52
+ "type": "+",
53
+ "command": "auth list",
54
+ "description": "Колонки `auth` и `expires_at` — видно, какой профиль вошёл через браузер, а какой держит готовый токен"
55
+ },
56
+ {
57
+ "type": "~",
58
+ "command": "auth logout",
59
+ "description": "Токен входа через браузер гасится на сервере — доступ закрывается в момент выхода, а не по истечении срока. Если отозвать не удалось, CLI об этом говорит и не выдаёт удаление профиля за закрытый доступ. Готовый токен продолжает работать: отозвать его можно только в интерфейсе"
60
+ },
61
+ {
62
+ "type": "~",
63
+ "description": "Отказ по правам разбирается отдельно от прочих `403`: CLI называет недостающее право и объясняет причину. В JSON-выводе — тип `PACHCA_SCOPE_ERROR` и поле `scope`"
64
+ },
65
+ {
66
+ "type": "~",
67
+ "description": "В подсказке «токен не найден» появилась переменная окружения `PACHCA_TOKEN` — раньше предлагался только флаг `--token`, хотя переменная работает и без входа"
68
+ },
69
+ {
70
+ "type": "+",
71
+ "command": "auth status",
72
+ "description": "Флаг `--remote` — спросить права у сервера вместо сохранённых при входе. Набор прав фиксируется в момент входа, и после смены роли локальный список устаревает; при расхождении CLI говорит об этом и обновляет сохранённый"
73
+ },
74
+ {
75
+ "type": "+",
76
+ "command": "auth login",
77
+ "description": "`--token -` читает токен из потока ввода: `echo $TOKEN | pachca auth login --token -` не оставляет секрет в истории оболочки и в списке процессов. Передача значением работает как раньше"
78
+ },
79
+ {
80
+ "type": "+",
81
+ "command": "auth switch",
82
+ "description": "Сразу после переключения сообщает, если секрет профиля не читается или срок токена истёк — раньше ошибка всплывала на следующей команде"
83
+ },
84
+ {
85
+ "type": "~",
86
+ "command": "doctor",
87
+ "description": "Проверяет хранилище ключей ОС отдельным пунктом и не выдаёт заблокированную связку за недействительный токен. Показывает способ входа и срок жизни токена. Права файла конфигурации проверяются только когда токен действительно лежит в файле"
88
+ },
89
+ {
90
+ "type": "-",
91
+ "command": "doctor",
92
+ "description": "Проверяет тот адрес API, с которым работает CLI, а не всегда `api.pachca.com` — при изменённом адресе сервера команда рапортовала о доступности чужого хоста"
93
+ },
94
+ {
95
+ "type": "-",
96
+ "command": "doctor",
97
+ "description": "Истёкший, но обновляемый токен больше не выдаётся за недействительный: команда говорит, что он обновится при следующем вызове, вместо совета войти заново"
98
+ },
99
+ {
100
+ "type": "+",
101
+ "command": "chats list",
102
+ "description": "Флаг `--archived` — вернуть архивные чаты вместе с активными. Отличить их можно по полю `archived` в выдаче"
103
+ },
104
+ {
105
+ "type": "+",
106
+ "command": "security list",
107
+ "description": "Фильтр `--event-key` принимает `bot_oauth_client_updated`, `oauth_authorization_granted` и `oauth_authorization_revoked`"
108
+ },
109
+ {
110
+ "type": "+",
111
+ "command": "security list",
112
+ "description": "Фильтр `--event-key` принимает `bot_oauth_client_updated`, `oauth_authorization_granted` и `oauth_authorization_revoked`"
113
+ },
114
+ {
115
+ "type": "-",
116
+ "command": "",
117
+ "description": "Подсказка «токен не найден» вела на несуществующую страницу `/guides/authorization` — теперь на `/api/authorization`"
118
+ },
119
+ {
120
+ "type": "+",
121
+ "command": "",
122
+ "description": "`pachca --help` заканчивается ссылкой на документацию и на `pachca guide` — из терминала стало видно, куда идти за сценариями"
123
+ }
124
+ ]
125
+ },
2
126
  {
3
127
  "version": "2026.8.0",
4
128
  "date": "1 августа 2026",