@pachca/cli 2026.3.6 → 2026.3.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.3.7 (16 марта 2026)
4
+
5
+ - **Добавлено** (upload): Загрузка файла одной командой (получает подпись + загружает автоматически)
6
+ - **Изменено** (common direct-url): Обязательный флаг --direct-url вместо хардкод URL, запрос идёт без Authorization
7
+
3
8
  ## 2026.3.6 (15 марта 2026)
4
9
 
5
10
  - **Изменено** (threads): Топик thread переименован в threads (pachca threads add, pachca threads get)
package/README.md CHANGED
@@ -233,6 +233,18 @@ pachca guide # список всех сценариев
233
233
 
234
234
  <!-- AUTO:FLAGS:END -->
235
235
 
236
+ ## Загрузка файлов
237
+
238
+ ```
239
+ # Загрузить файл (получает подпись и загружает автоматически)
240
+ pachca upload photo.jpg
241
+
242
+ # Из stdin
243
+ cat data.csv | pachca upload -
244
+ ```
245
+
246
+ Команда `upload` автоматически получает подпись (`POST /uploads`) и загружает файл на S3. Возвращает `key` — используйте его в `--files` при создании сообщений.
247
+
236
248
  ## Пагинация
237
249
 
238
250
  ```
@@ -71,6 +71,18 @@ pachca guide # список всех сценариев
71
71
  <!-- AUTO:FLAGS -->
72
72
  <!-- AUTO:FLAGS:END -->
73
73
 
74
+ ## Загрузка файлов
75
+
76
+ ```
77
+ # Загрузить файл (получает подпись и загружает автоматически)
78
+ pachca upload photo.jpg
79
+
80
+ # Из stdin
81
+ cat data.csv | pachca upload -
82
+ ```
83
+
84
+ Команда `upload` автоматически получает подпись (`POST /uploads`) и загружает файл на S3. Возвращает `key` — используйте его в `--files` при создании сообщений.
85
+
74
86
  ## Пагинация
75
87
 
76
88
  ```
package/dist/client.js CHANGED
@@ -25,7 +25,10 @@ function getBaseUrl() {
25
25
  const MAX_RETRIES = 3;
26
26
  const DEFAULT_TIMEOUT = 30;
27
27
  function buildUrl(apiPath, query) {
28
- const url = new URL(apiPath.startsWith('/') ? `${getBaseUrl()}${apiPath}` : `${getBaseUrl()}/${apiPath}`);
28
+ const base = apiPath.startsWith('http://') || apiPath.startsWith('https://')
29
+ ? apiPath
30
+ : apiPath.startsWith('/') ? `${getBaseUrl()}${apiPath}` : `${getBaseUrl()}/${apiPath}`;
31
+ const url = new URL(base);
29
32
  if (query) {
30
33
  for (const [key, value] of Object.entries(query)) {
31
34
  if (value !== undefined) {
@@ -71,7 +74,7 @@ export async function request(opts, clientFlags) {
71
74
  const timeoutSeconds = opts.timeout ?? clientFlags?.timeout ?? envTimeout ?? DEFAULT_TIMEOUT;
72
75
  const noRetry = opts.noRetry ?? clientFlags?.['no-retry'] ?? false;
73
76
  const fetchHeaders = {
74
- Authorization: `Bearer ${opts.token}`,
77
+ ...(opts.noAuth ? {} : { Authorization: `Bearer ${opts.token}` }),
75
78
  Accept: 'application/json',
76
79
  ...opts.headers,
77
80
  };
@@ -12,6 +12,10 @@ export default class CommonDirectUrl extends BaseCommand {
12
12
  static args = {};
13
13
  static flags = {
14
14
  ...BaseCommand.baseFlags,
15
+ 'direct-url': Flags.string({
16
+ description: 'URL для отправки запроса (получается из ответа POST /uploads)',
17
+ required: true,
18
+ }),
15
19
  'content-disposition': Flags.string({
16
20
  description: "Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)",
17
21
  }),
@@ -109,8 +113,9 @@ export default class CommonDirectUrl extends BaseCommand {
109
113
  }
110
114
  const { data } = await this.apiRequest({
111
115
  method: 'POST',
112
- path: '/direct_url',
116
+ path: flags['direct-url'],
113
117
  formData,
118
+ noAuth: true,
114
119
  });
115
120
  const responseBody = data;
116
121
  const result = responseBody.data ?? responseBody;
@@ -2,7 +2,6 @@ import { BaseCommand } from '../../base-command.js';
2
2
  export default class CommonUploads extends BaseCommand {
3
3
  static description = "Получение подписи, ключа и других параметров";
4
4
  static examples = [
5
- "Отправить сообщение с файлами:\n $ pachca common uploads",
6
5
  "Изменить вложения сообщения:\n $ pachca common uploads"
7
6
  ];
8
7
  static scope = "uploads:write";
@@ -0,0 +1,71 @@
1
+ import { Args } from '@oclif/core';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { BaseCommand } from '../base-command.js';
5
+ export default class Upload extends BaseCommand {
6
+ static description = 'Загрузить файл (получает подпись и загружает автоматически)';
7
+ static examples = [
8
+ '<%= config.bin %> upload photo.jpg',
9
+ 'cat data.csv | <%= config.bin %> upload -',
10
+ ];
11
+ static scope = 'uploads:write';
12
+ static args = {
13
+ file: Args.string({
14
+ description: 'Путь к файлу или - для stdin',
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...BaseCommand.baseFlags,
20
+ };
21
+ async run() {
22
+ const { args, flags } = await this.parse(Upload);
23
+ this.parsedFlags = flags;
24
+ this.checkScope('uploads:write');
25
+ // Step 1: Get upload params
26
+ const { data: uploadData } = await this.apiRequest({
27
+ method: 'POST',
28
+ path: '/uploads',
29
+ });
30
+ const params = uploadData;
31
+ // Step 2: Read file
32
+ let fileBlob;
33
+ let fileName;
34
+ if (args.file === '-') {
35
+ const chunks = [];
36
+ for await (const chunk of process.stdin)
37
+ chunks.push(chunk);
38
+ fileBlob = new Blob([Buffer.concat(chunks)]);
39
+ fileName = 'stdin';
40
+ }
41
+ else {
42
+ if (!fs.existsSync(args.file)) {
43
+ this.validationError([{ message: `Файл не найден: ${args.file}` }], { type: 'PACHCA_USAGE_ERROR' });
44
+ }
45
+ fileBlob = new Blob([fs.readFileSync(args.file)]);
46
+ fileName = path.basename(args.file);
47
+ }
48
+ // Step 3: Replace ${filename} in key
49
+ const key = params.key.replace('${filename}', fileName);
50
+ // Step 4: Build FormData
51
+ const formData = new FormData();
52
+ formData.append('Content-Disposition', params['Content-Disposition']);
53
+ formData.append('acl', params.acl);
54
+ formData.append('policy', params.policy);
55
+ formData.append('x-amz-credential', params['x-amz-credential']);
56
+ formData.append('x-amz-algorithm', params['x-amz-algorithm']);
57
+ formData.append('x-amz-date', params['x-amz-date']);
58
+ formData.append('x-amz-signature', params['x-amz-signature']);
59
+ formData.append('key', key);
60
+ formData.append('file', fileBlob, fileName);
61
+ // Step 5: Upload to external URL (no auth)
62
+ await this.apiRequest({
63
+ method: 'POST',
64
+ path: params.direct_url,
65
+ formData,
66
+ noAuth: true,
67
+ });
68
+ // Output the key for use in messages
69
+ this.output({ key });
70
+ }
71
+ }
@@ -1,4 +1,20 @@
1
1
  [
2
+ {
3
+ "version": "2026.3.7",
4
+ "date": "16 марта 2026",
5
+ "changes": [
6
+ {
7
+ "type": "+",
8
+ "command": "upload",
9
+ "description": "Загрузка файла одной командой (получает подпись + загружает автоматически)"
10
+ },
11
+ {
12
+ "type": "~",
13
+ "command": "common direct-url",
14
+ "description": "Обязательный флаг --direct-url вместо хардкод URL, запрос идёт без Authorization"
15
+ }
16
+ ]
17
+ },
2
18
  {
3
19
  "version": "2026.3.6",
4
20
  "date": "15 марта 2026",
@@ -79,13 +79,13 @@
79
79
  "skill": "pachca-messages",
80
80
  "steps": [
81
81
  {
82
- "description": "Для каждого файла: получи параметры загрузки",
83
- "command": "pachca common uploads",
84
- "notes": "Получишь `key` (с `${filename}`), `direct_url`, `policy`, подпись"
82
+ "description": "Загрузи каждый файл — команда вернёт `key`",
83
+ "command": "pachca upload report.pdf",
84
+ "notes": "Команда автоматически получает подпись и загружает файл на S3"
85
85
  },
86
86
  {
87
87
  "description": "Отправь сообщение со всеми файлами",
88
- "command": "pachca messages create --entity-id=<chat_id> --content=\"Смотри файл\" --files='[{\"key\":\"...\",\"name\":\"report.pdf\",\"file_type\":\"file\",\"size\":12345}]'"
88
+ "command": "pachca messages create --entity-id=<chat_id> --content=\"Смотри файл\" --files='[{\"key\":\"attaches/files/.../report.pdf\",\"name\":\"report.pdf\",\"file_type\":\"file\",\"size\":12345}]'"
89
89
  }
90
90
  ]
91
91
  },
@@ -826,6 +826,139 @@
826
826
  "introspect.js"
827
827
  ]
828
828
  },
829
+ "upload": {
830
+ "aliases": [],
831
+ "args": {
832
+ "file": {
833
+ "description": "Путь к файлу или - для stdin",
834
+ "name": "file",
835
+ "required": true
836
+ }
837
+ },
838
+ "description": "Загрузить файл (получает подпись и загружает автоматически)",
839
+ "examples": [
840
+ "<%= config.bin %> upload photo.jpg",
841
+ "cat data.csv | <%= config.bin %> upload -"
842
+ ],
843
+ "flags": {
844
+ "output": {
845
+ "char": "o",
846
+ "description": "Output format: table, json, yaml, csv",
847
+ "name": "output",
848
+ "hasDynamicHelp": false,
849
+ "multiple": false,
850
+ "options": [
851
+ "table",
852
+ "json",
853
+ "yaml",
854
+ "csv"
855
+ ],
856
+ "type": "option"
857
+ },
858
+ "columns": {
859
+ "char": "c",
860
+ "description": "Columns to display (comma-separated)",
861
+ "name": "columns",
862
+ "hasDynamicHelp": false,
863
+ "multiple": false,
864
+ "type": "option"
865
+ },
866
+ "no-header": {
867
+ "description": "Hide table header",
868
+ "name": "no-header",
869
+ "allowNo": false,
870
+ "type": "boolean"
871
+ },
872
+ "no-truncate": {
873
+ "description": "Do not truncate values in table",
874
+ "name": "no-truncate",
875
+ "allowNo": false,
876
+ "type": "boolean"
877
+ },
878
+ "profile": {
879
+ "char": "p",
880
+ "description": "Profile to use for this command",
881
+ "name": "profile",
882
+ "hasDynamicHelp": false,
883
+ "multiple": false,
884
+ "type": "option"
885
+ },
886
+ "token": {
887
+ "description": "Bearer token for this call (not saved)",
888
+ "name": "token",
889
+ "hasDynamicHelp": false,
890
+ "multiple": false,
891
+ "type": "option"
892
+ },
893
+ "quiet": {
894
+ "char": "q",
895
+ "description": "Suppress output except errors",
896
+ "name": "quiet",
897
+ "allowNo": false,
898
+ "type": "boolean"
899
+ },
900
+ "no-color": {
901
+ "description": "Disable color output",
902
+ "name": "no-color",
903
+ "allowNo": false,
904
+ "type": "boolean"
905
+ },
906
+ "verbose": {
907
+ "char": "v",
908
+ "description": "Show HTTP request/response details",
909
+ "name": "verbose",
910
+ "allowNo": false,
911
+ "type": "boolean"
912
+ },
913
+ "no-input": {
914
+ "description": "Disable interactive prompts",
915
+ "name": "no-input",
916
+ "allowNo": false,
917
+ "type": "boolean"
918
+ },
919
+ "dry-run": {
920
+ "description": "Show HTTP request without sending",
921
+ "name": "dry-run",
922
+ "allowNo": false,
923
+ "type": "boolean"
924
+ },
925
+ "timeout": {
926
+ "description": "Request timeout in seconds",
927
+ "name": "timeout",
928
+ "hasDynamicHelp": false,
929
+ "multiple": false,
930
+ "type": "option"
931
+ },
932
+ "no-retry": {
933
+ "description": "Disable auto-retry on 429/503",
934
+ "name": "no-retry",
935
+ "allowNo": false,
936
+ "type": "boolean"
937
+ },
938
+ "json": {
939
+ "description": "Output as JSON (alias for --output json)",
940
+ "hidden": true,
941
+ "name": "json",
942
+ "allowNo": false,
943
+ "type": "boolean"
944
+ }
945
+ },
946
+ "hasDynamicHelp": false,
947
+ "hiddenAliases": [],
948
+ "id": "upload",
949
+ "pluginAlias": "@pachca/cli",
950
+ "pluginName": "@pachca/cli",
951
+ "pluginType": "core",
952
+ "strict": true,
953
+ "enableJsonFlag": false,
954
+ "scope": "uploads:write",
955
+ "isESM": true,
956
+ "relativePath": [
957
+ "dist",
958
+ "commands",
959
+ "upload.js"
960
+ ]
961
+ },
829
962
  "version": {
830
963
  "aliases": [],
831
964
  "args": {},
@@ -3371,6 +3504,14 @@
3371
3504
  "allowNo": false,
3372
3505
  "type": "boolean"
3373
3506
  },
3507
+ "direct-url": {
3508
+ "description": "URL для отправки запроса (получается из ответа POST /uploads)",
3509
+ "name": "direct-url",
3510
+ "required": true,
3511
+ "hasDynamicHelp": false,
3512
+ "multiple": false,
3513
+ "type": "option"
3514
+ },
3374
3515
  "content-disposition": {
3375
3516
  "description": "Параметр Content-Disposition, полученный в ответе на запрос [Получение подписи, ключа и других параметров](POST /uploads)",
3376
3517
  "name": "content-disposition",
@@ -3780,7 +3921,6 @@
3780
3921
  "args": {},
3781
3922
  "description": "Получение подписи, ключа и других параметров",
3782
3923
  "examples": [
3783
- "Отправить сообщение с файлами:\n $ pachca common uploads",
3784
3924
  "Изменить вложения сообщения:\n $ pachca common uploads"
3785
3925
  ],
3786
3926
  "flags": {
@@ -10881,14 +11021,14 @@
10881
11021
  "get.js"
10882
11022
  ]
10883
11023
  },
10884
- "users:create": {
11024
+ "views:open": {
10885
11025
  "aliases": [],
10886
11026
  "args": {},
10887
- "description": "Создать сотрудника",
11027
+ "description": "Открытие представления",
10888
11028
  "examples": [
10889
- "Проверить, кто прочитал сообщение:\n $ pachca users list",
10890
- "Разослать уведомление нескольким пользователям:\n $ pachca users list",
10891
- "Массовое создание сотрудников с тегами:\n $ pachca users create"
11029
+ "Показать интерактивную форму пользователю:\n $ pachca views open",
11030
+ "Опрос сотрудников через форму:\n $ pachca views open",
11031
+ "Форма заявки/запроса:\n $ pachca views open"
10892
11032
  ],
10893
11033
  "flags": {
10894
11034
  "output": {
@@ -10992,134 +11132,330 @@
10992
11132
  "allowNo": false,
10993
11133
  "type": "boolean"
10994
11134
  },
10995
- "first-name": {
10996
- "description": "Имя",
10997
- "name": "first-name",
10998
- "hasDynamicHelp": false,
10999
- "multiple": false,
11000
- "type": "option"
11001
- },
11002
- "last-name": {
11003
- "description": "Фамилия",
11004
- "name": "last-name",
11005
- "hasDynamicHelp": false,
11006
- "multiple": false,
11007
- "type": "option"
11008
- },
11009
- "email": {
11010
- "description": "Электронная почта",
11011
- "name": "email",
11135
+ "title": {
11136
+ "description": "Заголовок представления (макс. 24 символов)",
11137
+ "name": "title",
11012
11138
  "hasDynamicHelp": false,
11013
11139
  "multiple": false,
11014
11140
  "type": "option"
11015
11141
  },
11016
- "phone-number": {
11017
- "description": "Телефон",
11018
- "name": "phone-number",
11142
+ "close-text": {
11143
+ "description": "Текст кнопки закрытия представления (макс. 24 символов)",
11144
+ "name": "close-text",
11019
11145
  "hasDynamicHelp": false,
11020
11146
  "multiple": false,
11021
11147
  "type": "option"
11022
11148
  },
11023
- "nickname": {
11024
- "description": "Имя пользователя",
11025
- "name": "nickname",
11149
+ "submit-text": {
11150
+ "description": "Текст кнопки отправки формы (макс. 24 символов)",
11151
+ "name": "submit-text",
11026
11152
  "hasDynamicHelp": false,
11027
11153
  "multiple": false,
11028
11154
  "type": "option"
11029
11155
  },
11030
- "department": {
11031
- "description": "Департамент",
11032
- "name": "department",
11156
+ "blocks": {
11157
+ "description": "Массив блоков представления",
11158
+ "name": "blocks",
11033
11159
  "hasDynamicHelp": false,
11034
11160
  "multiple": false,
11035
11161
  "type": "option"
11036
11162
  },
11037
- "title": {
11038
- "description": "Должность",
11039
- "name": "title",
11163
+ "type": {
11164
+ "description": "Способ открытия представления",
11165
+ "name": "type",
11040
11166
  "hasDynamicHelp": false,
11041
11167
  "multiple": false,
11168
+ "options": [
11169
+ "modal"
11170
+ ],
11042
11171
  "type": "option"
11043
11172
  },
11044
- "role": {
11045
- "description": "Уровень доступа",
11046
- "name": "role",
11173
+ "trigger-id": {
11174
+ "description": "Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)",
11175
+ "name": "trigger-id",
11047
11176
  "hasDynamicHelp": false,
11048
11177
  "multiple": false,
11049
11178
  "type": "option"
11050
11179
  },
11051
- "suspended": {
11052
- "description": "Деактивация пользователя",
11053
- "name": "suspended",
11054
- "allowNo": true,
11055
- "type": "boolean"
11056
- },
11057
- "list-tags": {
11058
- "description": "Массив тегов, привязываемых к сотруднику",
11059
- "name": "list-tags",
11180
+ "private-metadata": {
11181
+ "description": "Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)",
11182
+ "name": "private-metadata",
11060
11183
  "hasDynamicHelp": false,
11061
11184
  "multiple": false,
11062
11185
  "type": "option"
11063
11186
  },
11064
- "custom-properties": {
11065
- "description": "Задаваемые дополнительные поля",
11066
- "name": "custom-properties",
11187
+ "callback-id": {
11188
+ "description": "Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)",
11189
+ "name": "callback-id",
11067
11190
  "hasDynamicHelp": false,
11068
11191
  "multiple": false,
11069
11192
  "type": "option"
11070
- },
11071
- "skip-email-notify": {
11072
- "description": "Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.",
11073
- "name": "skip-email-notify",
11074
- "allowNo": true,
11075
- "type": "boolean"
11076
11193
  }
11077
11194
  },
11078
11195
  "hasDynamicHelp": false,
11079
11196
  "hiddenAliases": [],
11080
- "id": "users:create",
11197
+ "id": "views:open",
11081
11198
  "pluginAlias": "@pachca/cli",
11082
11199
  "pluginName": "@pachca/cli",
11083
11200
  "pluginType": "core",
11084
11201
  "strict": true,
11085
11202
  "enableJsonFlag": false,
11086
- "scope": "users:create",
11203
+ "scope": "views:write",
11087
11204
  "apiMethod": "POST",
11088
- "apiPath": "/users",
11089
- "defaultColumns": [
11090
- "id",
11091
- "title",
11092
- "first_name",
11093
- "last_name",
11094
- "email"
11095
- ],
11205
+ "apiPath": "/views/open",
11096
11206
  "requiredFlags": [
11097
- "email"
11207
+ "title",
11208
+ "blocks",
11209
+ "type",
11210
+ "trigger-id"
11098
11211
  ],
11099
11212
  "isESM": true,
11100
11213
  "relativePath": [
11101
11214
  "dist",
11102
11215
  "commands",
11103
- "users",
11104
- "create.js"
11216
+ "views",
11217
+ "open.js"
11105
11218
  ]
11106
11219
  },
11107
- "users:delete": {
11220
+ "users:create": {
11108
11221
  "aliases": [],
11109
- "args": {
11110
- "id": {
11111
- "description": "Идентификатор пользователя (pachca users list)",
11112
- "name": "id",
11113
- "required": true
11114
- }
11115
- },
11116
- "description": "Удаление сотрудника",
11222
+ "args": {},
11223
+ "description": "Создать сотрудника",
11117
11224
  "examples": [
11118
- "Получить сотрудника по ID:\n $ pachca users get",
11119
- "Массовое создание сотрудников с тегами:\n $ pachca users update",
11120
- "Offboarding сотрудника:\n $ pachca users update"
11121
- ],
11122
- "flags": {
11225
+ "Проверить, кто прочитал сообщение:\n $ pachca users list",
11226
+ "Разослать уведомление нескольким пользователям:\n $ pachca users list",
11227
+ "Массовое создание сотрудников с тегами:\n $ pachca users create"
11228
+ ],
11229
+ "flags": {
11230
+ "output": {
11231
+ "char": "o",
11232
+ "description": "Output format: table, json, yaml, csv",
11233
+ "name": "output",
11234
+ "hasDynamicHelp": false,
11235
+ "multiple": false,
11236
+ "options": [
11237
+ "table",
11238
+ "json",
11239
+ "yaml",
11240
+ "csv"
11241
+ ],
11242
+ "type": "option"
11243
+ },
11244
+ "columns": {
11245
+ "char": "c",
11246
+ "description": "Columns to display (comma-separated)",
11247
+ "name": "columns",
11248
+ "hasDynamicHelp": false,
11249
+ "multiple": false,
11250
+ "type": "option"
11251
+ },
11252
+ "no-header": {
11253
+ "description": "Hide table header",
11254
+ "name": "no-header",
11255
+ "allowNo": false,
11256
+ "type": "boolean"
11257
+ },
11258
+ "no-truncate": {
11259
+ "description": "Do not truncate values in table",
11260
+ "name": "no-truncate",
11261
+ "allowNo": false,
11262
+ "type": "boolean"
11263
+ },
11264
+ "profile": {
11265
+ "char": "p",
11266
+ "description": "Profile to use for this command",
11267
+ "name": "profile",
11268
+ "hasDynamicHelp": false,
11269
+ "multiple": false,
11270
+ "type": "option"
11271
+ },
11272
+ "token": {
11273
+ "description": "Bearer token for this call (not saved)",
11274
+ "name": "token",
11275
+ "hasDynamicHelp": false,
11276
+ "multiple": false,
11277
+ "type": "option"
11278
+ },
11279
+ "quiet": {
11280
+ "char": "q",
11281
+ "description": "Suppress output except errors",
11282
+ "name": "quiet",
11283
+ "allowNo": false,
11284
+ "type": "boolean"
11285
+ },
11286
+ "no-color": {
11287
+ "description": "Disable color output",
11288
+ "name": "no-color",
11289
+ "allowNo": false,
11290
+ "type": "boolean"
11291
+ },
11292
+ "verbose": {
11293
+ "char": "v",
11294
+ "description": "Show HTTP request/response details",
11295
+ "name": "verbose",
11296
+ "allowNo": false,
11297
+ "type": "boolean"
11298
+ },
11299
+ "no-input": {
11300
+ "description": "Disable interactive prompts",
11301
+ "name": "no-input",
11302
+ "allowNo": false,
11303
+ "type": "boolean"
11304
+ },
11305
+ "dry-run": {
11306
+ "description": "Show HTTP request without sending",
11307
+ "name": "dry-run",
11308
+ "allowNo": false,
11309
+ "type": "boolean"
11310
+ },
11311
+ "timeout": {
11312
+ "description": "Request timeout in seconds",
11313
+ "name": "timeout",
11314
+ "hasDynamicHelp": false,
11315
+ "multiple": false,
11316
+ "type": "option"
11317
+ },
11318
+ "no-retry": {
11319
+ "description": "Disable auto-retry on 429/503",
11320
+ "name": "no-retry",
11321
+ "allowNo": false,
11322
+ "type": "boolean"
11323
+ },
11324
+ "json": {
11325
+ "description": "Output as JSON (alias for --output json)",
11326
+ "hidden": true,
11327
+ "name": "json",
11328
+ "allowNo": false,
11329
+ "type": "boolean"
11330
+ },
11331
+ "first-name": {
11332
+ "description": "Имя",
11333
+ "name": "first-name",
11334
+ "hasDynamicHelp": false,
11335
+ "multiple": false,
11336
+ "type": "option"
11337
+ },
11338
+ "last-name": {
11339
+ "description": "Фамилия",
11340
+ "name": "last-name",
11341
+ "hasDynamicHelp": false,
11342
+ "multiple": false,
11343
+ "type": "option"
11344
+ },
11345
+ "email": {
11346
+ "description": "Электронная почта",
11347
+ "name": "email",
11348
+ "hasDynamicHelp": false,
11349
+ "multiple": false,
11350
+ "type": "option"
11351
+ },
11352
+ "phone-number": {
11353
+ "description": "Телефон",
11354
+ "name": "phone-number",
11355
+ "hasDynamicHelp": false,
11356
+ "multiple": false,
11357
+ "type": "option"
11358
+ },
11359
+ "nickname": {
11360
+ "description": "Имя пользователя",
11361
+ "name": "nickname",
11362
+ "hasDynamicHelp": false,
11363
+ "multiple": false,
11364
+ "type": "option"
11365
+ },
11366
+ "department": {
11367
+ "description": "Департамент",
11368
+ "name": "department",
11369
+ "hasDynamicHelp": false,
11370
+ "multiple": false,
11371
+ "type": "option"
11372
+ },
11373
+ "title": {
11374
+ "description": "Должность",
11375
+ "name": "title",
11376
+ "hasDynamicHelp": false,
11377
+ "multiple": false,
11378
+ "type": "option"
11379
+ },
11380
+ "role": {
11381
+ "description": "Уровень доступа",
11382
+ "name": "role",
11383
+ "hasDynamicHelp": false,
11384
+ "multiple": false,
11385
+ "type": "option"
11386
+ },
11387
+ "suspended": {
11388
+ "description": "Деактивация пользователя",
11389
+ "name": "suspended",
11390
+ "allowNo": true,
11391
+ "type": "boolean"
11392
+ },
11393
+ "list-tags": {
11394
+ "description": "Массив тегов, привязываемых к сотруднику",
11395
+ "name": "list-tags",
11396
+ "hasDynamicHelp": false,
11397
+ "multiple": false,
11398
+ "type": "option"
11399
+ },
11400
+ "custom-properties": {
11401
+ "description": "Задаваемые дополнительные поля",
11402
+ "name": "custom-properties",
11403
+ "hasDynamicHelp": false,
11404
+ "multiple": false,
11405
+ "type": "option"
11406
+ },
11407
+ "skip-email-notify": {
11408
+ "description": "Пропуск этапа отправки приглашения сотруднику. Сотруднику не будет отправлено письмо на электронную почту с приглашением создать аккаунт. Полезно при предварительном создании аккаунтов перед входом через SSO.",
11409
+ "name": "skip-email-notify",
11410
+ "allowNo": true,
11411
+ "type": "boolean"
11412
+ }
11413
+ },
11414
+ "hasDynamicHelp": false,
11415
+ "hiddenAliases": [],
11416
+ "id": "users:create",
11417
+ "pluginAlias": "@pachca/cli",
11418
+ "pluginName": "@pachca/cli",
11419
+ "pluginType": "core",
11420
+ "strict": true,
11421
+ "enableJsonFlag": false,
11422
+ "scope": "users:create",
11423
+ "apiMethod": "POST",
11424
+ "apiPath": "/users",
11425
+ "defaultColumns": [
11426
+ "id",
11427
+ "title",
11428
+ "first_name",
11429
+ "last_name",
11430
+ "email"
11431
+ ],
11432
+ "requiredFlags": [
11433
+ "email"
11434
+ ],
11435
+ "isESM": true,
11436
+ "relativePath": [
11437
+ "dist",
11438
+ "commands",
11439
+ "users",
11440
+ "create.js"
11441
+ ]
11442
+ },
11443
+ "users:delete": {
11444
+ "aliases": [],
11445
+ "args": {
11446
+ "id": {
11447
+ "description": "Идентификатор пользователя (pachca users list)",
11448
+ "name": "id",
11449
+ "required": true
11450
+ }
11451
+ },
11452
+ "description": "Удаление сотрудника",
11453
+ "examples": [
11454
+ "Получить сотрудника по ID:\n $ pachca users get",
11455
+ "Массовое создание сотрудников с тегами:\n $ pachca users update",
11456
+ "Offboarding сотрудника:\n $ pachca users update"
11457
+ ],
11458
+ "flags": {
11123
11459
  "output": {
11124
11460
  "char": "o",
11125
11461
  "description": "Output format: table, json, yaml, csv",
@@ -12242,203 +12578,7 @@
12242
12578
  "users",
12243
12579
  "update.js"
12244
12580
  ]
12245
- },
12246
- "views:open": {
12247
- "aliases": [],
12248
- "args": {},
12249
- "description": "Открытие представления",
12250
- "examples": [
12251
- "Показать интерактивную форму пользователю:\n $ pachca views open",
12252
- "Опрос сотрудников через форму:\n $ pachca views open",
12253
- "Форма заявки/запроса:\n $ pachca views open"
12254
- ],
12255
- "flags": {
12256
- "output": {
12257
- "char": "o",
12258
- "description": "Output format: table, json, yaml, csv",
12259
- "name": "output",
12260
- "hasDynamicHelp": false,
12261
- "multiple": false,
12262
- "options": [
12263
- "table",
12264
- "json",
12265
- "yaml",
12266
- "csv"
12267
- ],
12268
- "type": "option"
12269
- },
12270
- "columns": {
12271
- "char": "c",
12272
- "description": "Columns to display (comma-separated)",
12273
- "name": "columns",
12274
- "hasDynamicHelp": false,
12275
- "multiple": false,
12276
- "type": "option"
12277
- },
12278
- "no-header": {
12279
- "description": "Hide table header",
12280
- "name": "no-header",
12281
- "allowNo": false,
12282
- "type": "boolean"
12283
- },
12284
- "no-truncate": {
12285
- "description": "Do not truncate values in table",
12286
- "name": "no-truncate",
12287
- "allowNo": false,
12288
- "type": "boolean"
12289
- },
12290
- "profile": {
12291
- "char": "p",
12292
- "description": "Profile to use for this command",
12293
- "name": "profile",
12294
- "hasDynamicHelp": false,
12295
- "multiple": false,
12296
- "type": "option"
12297
- },
12298
- "token": {
12299
- "description": "Bearer token for this call (not saved)",
12300
- "name": "token",
12301
- "hasDynamicHelp": false,
12302
- "multiple": false,
12303
- "type": "option"
12304
- },
12305
- "quiet": {
12306
- "char": "q",
12307
- "description": "Suppress output except errors",
12308
- "name": "quiet",
12309
- "allowNo": false,
12310
- "type": "boolean"
12311
- },
12312
- "no-color": {
12313
- "description": "Disable color output",
12314
- "name": "no-color",
12315
- "allowNo": false,
12316
- "type": "boolean"
12317
- },
12318
- "verbose": {
12319
- "char": "v",
12320
- "description": "Show HTTP request/response details",
12321
- "name": "verbose",
12322
- "allowNo": false,
12323
- "type": "boolean"
12324
- },
12325
- "no-input": {
12326
- "description": "Disable interactive prompts",
12327
- "name": "no-input",
12328
- "allowNo": false,
12329
- "type": "boolean"
12330
- },
12331
- "dry-run": {
12332
- "description": "Show HTTP request without sending",
12333
- "name": "dry-run",
12334
- "allowNo": false,
12335
- "type": "boolean"
12336
- },
12337
- "timeout": {
12338
- "description": "Request timeout in seconds",
12339
- "name": "timeout",
12340
- "hasDynamicHelp": false,
12341
- "multiple": false,
12342
- "type": "option"
12343
- },
12344
- "no-retry": {
12345
- "description": "Disable auto-retry on 429/503",
12346
- "name": "no-retry",
12347
- "allowNo": false,
12348
- "type": "boolean"
12349
- },
12350
- "json": {
12351
- "description": "Output as JSON (alias for --output json)",
12352
- "hidden": true,
12353
- "name": "json",
12354
- "allowNo": false,
12355
- "type": "boolean"
12356
- },
12357
- "title": {
12358
- "description": "Заголовок представления (макс. 24 символов)",
12359
- "name": "title",
12360
- "hasDynamicHelp": false,
12361
- "multiple": false,
12362
- "type": "option"
12363
- },
12364
- "close-text": {
12365
- "description": "Текст кнопки закрытия представления (макс. 24 символов)",
12366
- "name": "close-text",
12367
- "hasDynamicHelp": false,
12368
- "multiple": false,
12369
- "type": "option"
12370
- },
12371
- "submit-text": {
12372
- "description": "Текст кнопки отправки формы (макс. 24 символов)",
12373
- "name": "submit-text",
12374
- "hasDynamicHelp": false,
12375
- "multiple": false,
12376
- "type": "option"
12377
- },
12378
- "blocks": {
12379
- "description": "Массив блоков представления",
12380
- "name": "blocks",
12381
- "hasDynamicHelp": false,
12382
- "multiple": false,
12383
- "type": "option"
12384
- },
12385
- "type": {
12386
- "description": "Способ открытия представления",
12387
- "name": "type",
12388
- "hasDynamicHelp": false,
12389
- "multiple": false,
12390
- "options": [
12391
- "modal"
12392
- ],
12393
- "type": "option"
12394
- },
12395
- "trigger-id": {
12396
- "description": "Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)",
12397
- "name": "trigger-id",
12398
- "hasDynamicHelp": false,
12399
- "multiple": false,
12400
- "type": "option"
12401
- },
12402
- "private-metadata": {
12403
- "description": "Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)",
12404
- "name": "private-metadata",
12405
- "hasDynamicHelp": false,
12406
- "multiple": false,
12407
- "type": "option"
12408
- },
12409
- "callback-id": {
12410
- "description": "Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)",
12411
- "name": "callback-id",
12412
- "hasDynamicHelp": false,
12413
- "multiple": false,
12414
- "type": "option"
12415
- }
12416
- },
12417
- "hasDynamicHelp": false,
12418
- "hiddenAliases": [],
12419
- "id": "views:open",
12420
- "pluginAlias": "@pachca/cli",
12421
- "pluginName": "@pachca/cli",
12422
- "pluginType": "core",
12423
- "strict": true,
12424
- "enableJsonFlag": false,
12425
- "scope": "views:write",
12426
- "apiMethod": "POST",
12427
- "apiPath": "/views/open",
12428
- "requiredFlags": [
12429
- "title",
12430
- "blocks",
12431
- "type",
12432
- "trigger-id"
12433
- ],
12434
- "isESM": true,
12435
- "relativePath": [
12436
- "dist",
12437
- "commands",
12438
- "views",
12439
- "open.js"
12440
- ]
12441
12581
  }
12442
12582
  },
12443
- "version": "2026.3.6"
12583
+ "version": "2026.3.7"
12444
12584
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pachca/cli",
3
- "version": "2026.3.6",
3
+ "version": "2026.3.7",
4
4
  "description": "CLI для Pachca API",
5
5
  "type": "module",
6
6
  "bin": {