@pachca/cli 2026.3.7 → 2026.3.8
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 +6 -0
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/upgrade.js +111 -0
- package/dist/data/changelog.json +21 -0
- package/dist/hooks/init.js +77 -4
- package/dist/hooks/postrun.js +3 -66
- package/oclif.manifest.json +322 -197
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.3.8 (17 марта 2026)
|
|
4
|
+
|
|
5
|
+
- **Добавлено** (upgrade): Команда pachca upgrade — обновление CLI до последней версии
|
|
6
|
+
- **Удалено** (init hook): Ошибки авторизации теперь выводятся в JSON при -o json (раньше формат игнорировался)
|
|
7
|
+
- **Удалено** (update banner): Баннер обновления теперь показывается даже при ошибках команд
|
|
8
|
+
|
|
3
9
|
## 2026.3.7 (16 марта 2026)
|
|
4
10
|
|
|
5
11
|
- **Добавлено** (upload): Загрузка файла одной командой (получает подпись + загружает автоматически)
|
package/dist/commands/doctor.js
CHANGED
|
@@ -127,7 +127,7 @@ export default class Doctor extends BaseCommand {
|
|
|
127
127
|
if (latest && semver.valid(latest) && semver.valid(currentVersion)) {
|
|
128
128
|
if (semver.gt(latest, currentVersion)) {
|
|
129
129
|
checks.push({ name: 'cli_version', status: 'warning', current: currentVersion, latest });
|
|
130
|
-
this.printCheck('warning', `CLI v${currentVersion} → доступна v${latest} (
|
|
130
|
+
this.printCheck('warning', `CLI v${currentVersion} → доступна v${latest} (pachca upgrade)`, format);
|
|
131
131
|
}
|
|
132
132
|
else {
|
|
133
133
|
checks.push({ name: 'cli_version', status: 'ok', current: currentVersion, latest });
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import semver from 'semver';
|
|
5
|
+
import { BaseCommand } from '../base-command.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect how CLI was installed by examining the executable path.
|
|
8
|
+
*/
|
|
9
|
+
function detectPackageManager(binPath) {
|
|
10
|
+
const resolved = fs.realpathSync(binPath);
|
|
11
|
+
// Homebrew: /opt/homebrew/... or /usr/local/Cellar/...
|
|
12
|
+
if (resolved.includes('/homebrew/') || resolved.includes('/Cellar/')) {
|
|
13
|
+
return { name: 'homebrew', cmd: 'brew', args: ['upgrade', '@pachca/cli'] };
|
|
14
|
+
}
|
|
15
|
+
// Bun global: ~/.bun/install/global/ or contains /bun/
|
|
16
|
+
if (resolved.includes('/bun/') || resolved.includes('.bun/')) {
|
|
17
|
+
return { name: 'bun', cmd: 'bun', args: ['install', '-g', '@pachca/cli@latest'] };
|
|
18
|
+
}
|
|
19
|
+
// pnpm global: contains /pnpm/
|
|
20
|
+
if (resolved.includes('/pnpm/')) {
|
|
21
|
+
return { name: 'pnpm', cmd: 'pnpm', args: ['install', '-g', '@pachca/cli@latest'] };
|
|
22
|
+
}
|
|
23
|
+
// yarn global: contains /yarn/
|
|
24
|
+
if (resolved.includes('/yarn/')) {
|
|
25
|
+
return { name: 'yarn', cmd: 'yarn', args: ['global', 'add', '@pachca/cli@latest'] };
|
|
26
|
+
}
|
|
27
|
+
// Default: npm
|
|
28
|
+
return { name: 'npm', cmd: 'npm', args: ['install', '-g', '@pachca/cli@latest'] };
|
|
29
|
+
}
|
|
30
|
+
export default class Upgrade extends BaseCommand {
|
|
31
|
+
static description = 'Обновить CLI до последней версии';
|
|
32
|
+
static examples = [
|
|
33
|
+
'<%= config.bin %> upgrade',
|
|
34
|
+
];
|
|
35
|
+
static flags = {
|
|
36
|
+
...BaseCommand.baseFlags,
|
|
37
|
+
};
|
|
38
|
+
async run() {
|
|
39
|
+
const { flags } = await this.parse(Upgrade);
|
|
40
|
+
this.parsedFlags = flags;
|
|
41
|
+
const currentVersion = this.config.version;
|
|
42
|
+
const format = this.getOutputFormat();
|
|
43
|
+
// Fetch latest version from npm registry
|
|
44
|
+
let latest;
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch('https://registry.npmjs.org/@pachca/cli');
|
|
47
|
+
if (response.ok) {
|
|
48
|
+
const data = (await response.json());
|
|
49
|
+
latest = data['dist-tags']?.latest;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Fallback: try cached version
|
|
54
|
+
}
|
|
55
|
+
if (!latest) {
|
|
56
|
+
try {
|
|
57
|
+
const versionFile = path.join(this.config.cacheDir, 'version');
|
|
58
|
+
if (fs.existsSync(versionFile)) {
|
|
59
|
+
const cached = JSON.parse(fs.readFileSync(versionFile, 'utf-8'));
|
|
60
|
+
latest = cached.latest;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// ignore
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!latest) {
|
|
68
|
+
if (format === 'json') {
|
|
69
|
+
this.output({ upgraded: false, current: currentVersion, error: 'Cannot determine latest version' });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
process.stderr.write('✗ Не удалось определить последнюю версию\n');
|
|
73
|
+
}
|
|
74
|
+
this.exit(1);
|
|
75
|
+
}
|
|
76
|
+
if (semver.valid(currentVersion) && semver.valid(latest) && !semver.gt(latest, currentVersion)) {
|
|
77
|
+
if (format === 'json') {
|
|
78
|
+
this.output({ upgraded: false, current: currentVersion, latest });
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
process.stderr.write(`✔ CLI уже обновлён (${currentVersion})\n`);
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const pm = detectPackageManager(process.argv[1] || this.config.binPath || '');
|
|
86
|
+
if (format !== 'json' && process.stderr.isTTY) {
|
|
87
|
+
process.stderr.write(`Обновление ${currentVersion} → ${latest} (${pm.name})...\n`);
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
execFileSync(pm.cmd, pm.args, {
|
|
91
|
+
stdio: format === 'json' ? 'ignore' : 'inherit',
|
|
92
|
+
});
|
|
93
|
+
if (format === 'json') {
|
|
94
|
+
this.output({ upgraded: true, from: currentVersion, to: latest, package_manager: pm.name });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
process.stderr.write(`\n✔ Обновлено до ${latest}\n`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
if (format === 'json') {
|
|
102
|
+
this.output({ upgraded: false, current: currentVersion, latest, package_manager: pm.name, error: `${pm.cmd} failed` });
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
process.stderr.write(`\n✗ Не удалось обновить через ${pm.name}. Попробуйте вручную:\n`);
|
|
106
|
+
process.stderr.write(` ${pm.cmd} ${pm.args.join(' ')}\n`);
|
|
107
|
+
}
|
|
108
|
+
this.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
package/dist/data/changelog.json
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "2026.3.8",
|
|
4
|
+
"date": "17 марта 2026",
|
|
5
|
+
"changes": [
|
|
6
|
+
{
|
|
7
|
+
"type": "+",
|
|
8
|
+
"command": "upgrade",
|
|
9
|
+
"description": "Команда pachca upgrade — обновление CLI до последней версии"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "-",
|
|
13
|
+
"command": "init hook",
|
|
14
|
+
"description": "Ошибки авторизации теперь выводятся в JSON при -o json (раньше формат игнорировался)"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "-",
|
|
18
|
+
"command": "update banner",
|
|
19
|
+
"description": "Баннер обновления теперь показывается даже при ошибках команд"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
2
23
|
{
|
|
3
24
|
"version": "2026.3.7",
|
|
4
25
|
"date": "16 марта 2026",
|
package/dist/hooks/init.js
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import semver from 'semver';
|
|
6
|
+
import ansis from 'ansis';
|
|
7
|
+
import { setProfile, getDefaults, resolveToken, TokenNotFoundError, ProfileNotFoundError, } from '../profiles.js';
|
|
2
8
|
import { request } from '../client.js';
|
|
3
9
|
import { outputError } from '../output.js';
|
|
4
|
-
import { defaultOutputFormat } from '../utils.js';
|
|
10
|
+
import { defaultOutputFormat, isInteractive } from '../utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve output format from argv before flags are parsed by oclif.
|
|
13
|
+
*/
|
|
14
|
+
function resolveOutputFromArgv() {
|
|
15
|
+
if (process.argv.includes('--json'))
|
|
16
|
+
return 'json';
|
|
17
|
+
const outputIdx = Math.max(process.argv.indexOf('-o'), process.argv.indexOf('--output'));
|
|
18
|
+
if (outputIdx !== -1) {
|
|
19
|
+
const val = process.argv[outputIdx + 1];
|
|
20
|
+
if (val && ['json', 'yaml', 'csv', 'table'].includes(val))
|
|
21
|
+
return val;
|
|
22
|
+
}
|
|
23
|
+
const defaults = getDefaults();
|
|
24
|
+
if (defaults.output)
|
|
25
|
+
return defaults.output;
|
|
26
|
+
return defaultOutputFormat();
|
|
27
|
+
}
|
|
5
28
|
// Commands that don't require auth
|
|
6
29
|
const SKIP_AUTH = new Set([
|
|
7
30
|
'auth:login',
|
|
@@ -20,12 +43,62 @@ const SKIP_AUTH = new Set([
|
|
|
20
43
|
'guide',
|
|
21
44
|
'introspect',
|
|
22
45
|
'changelog',
|
|
46
|
+
'upgrade',
|
|
23
47
|
'help',
|
|
24
48
|
]);
|
|
25
49
|
const hook = async function (opts) {
|
|
26
50
|
const commandId = opts.id;
|
|
27
51
|
if (!commandId)
|
|
28
52
|
return;
|
|
53
|
+
// Register update banner on process exit (fires even when command fails)
|
|
54
|
+
if (isInteractive() && !process.env.PACHCA_SKIP_NEW_VERSION_CHECK) {
|
|
55
|
+
const cacheDir = opts.config.cacheDir;
|
|
56
|
+
const versionFile = path.join(cacheDir, 'version');
|
|
57
|
+
const currentVersion = opts.config.version;
|
|
58
|
+
process.on('exit', () => {
|
|
59
|
+
try {
|
|
60
|
+
if (fs.existsSync(versionFile)) {
|
|
61
|
+
const cached = JSON.parse(fs.readFileSync(versionFile, 'utf-8'));
|
|
62
|
+
const latest = cached.latest;
|
|
63
|
+
if (latest && semver.valid(latest) && semver.valid(currentVersion) && semver.gt(latest, currentVersion)) {
|
|
64
|
+
const box = [
|
|
65
|
+
'',
|
|
66
|
+
ansis.yellow(`╭${'─'.repeat(37)}╮`),
|
|
67
|
+
ansis.yellow(`│ Доступна новая версия: ${latest.padEnd(12)}│`),
|
|
68
|
+
ansis.yellow(`│ pachca upgrade${' '.repeat(21)}│`),
|
|
69
|
+
ansis.yellow(`╰${'─'.repeat(37)}╯`),
|
|
70
|
+
'',
|
|
71
|
+
].join('\n');
|
|
72
|
+
process.stderr.write(box);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// ignore
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Background refresh if cache is stale (>1h)
|
|
81
|
+
try {
|
|
82
|
+
let shouldRefresh = true;
|
|
83
|
+
if (fs.existsSync(versionFile)) {
|
|
84
|
+
const stat = fs.statSync(versionFile);
|
|
85
|
+
shouldRefresh = Date.now() - stat.mtimeMs > 60 * 60 * 1000;
|
|
86
|
+
}
|
|
87
|
+
if (shouldRefresh) {
|
|
88
|
+
if (!fs.existsSync(cacheDir)) {
|
|
89
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
90
|
+
}
|
|
91
|
+
const scriptPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'get-version.js');
|
|
92
|
+
if (fs.existsSync(scriptPath)) {
|
|
93
|
+
const child = spawn(process.execPath, [scriptPath, versionFile], { detached: true, stdio: 'ignore' });
|
|
94
|
+
child.unref();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// ignore
|
|
100
|
+
}
|
|
101
|
+
}
|
|
29
102
|
// Skip auth for exempt commands
|
|
30
103
|
if (SKIP_AUTH.has(commandId))
|
|
31
104
|
return;
|
|
@@ -79,7 +152,7 @@ const hook = async function (opts) {
|
|
|
79
152
|
}
|
|
80
153
|
catch (error) {
|
|
81
154
|
if (error instanceof TokenNotFoundError) {
|
|
82
|
-
const format =
|
|
155
|
+
const format = resolveOutputFromArgv();
|
|
83
156
|
if (format === 'json' || !process.stderr.isTTY) {
|
|
84
157
|
outputError({ error: 'Token not found', type: 'PACHCA_AUTH_ERROR', code: null, hint: 'pachca auth login --token <your-token>' }, format);
|
|
85
158
|
}
|
|
@@ -94,7 +167,7 @@ const hook = async function (opts) {
|
|
|
94
167
|
process.exit(3);
|
|
95
168
|
}
|
|
96
169
|
if (error instanceof ProfileNotFoundError) {
|
|
97
|
-
const format =
|
|
170
|
+
const format = resolveOutputFromArgv();
|
|
98
171
|
outputError({ error: `Profile "${error.profileName}" not found`, type: 'PACHCA_USAGE_ERROR', code: null, hint: 'pachca auth list' }, format);
|
|
99
172
|
process.exit(2);
|
|
100
173
|
}
|
package/dist/hooks/postrun.js
CHANGED
|
@@ -1,67 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { spawn } from 'node:child_process';
|
|
5
|
-
import semver from 'semver';
|
|
6
|
-
import ansis from 'ansis';
|
|
7
|
-
import { isInteractive } from '../utils.js';
|
|
8
|
-
const hook = async function (opts) {
|
|
9
|
-
// Don't show update banner in non-interactive mode
|
|
10
|
-
if (!isInteractive())
|
|
11
|
-
return;
|
|
12
|
-
if (process.env.PACHCA_SKIP_NEW_VERSION_CHECK)
|
|
13
|
-
return;
|
|
14
|
-
const cacheDir = opts.config.cacheDir;
|
|
15
|
-
const versionFile = path.join(cacheDir, 'version');
|
|
16
|
-
// Check if version file exists and show banner
|
|
17
|
-
try {
|
|
18
|
-
if (fs.existsSync(versionFile)) {
|
|
19
|
-
const cached = JSON.parse(fs.readFileSync(versionFile, 'utf-8'));
|
|
20
|
-
const latest = cached.latest;
|
|
21
|
-
const currentVersion = opts.config.version;
|
|
22
|
-
if (latest && semver.valid(latest) && semver.valid(currentVersion)) {
|
|
23
|
-
if (semver.gt(latest, currentVersion)) {
|
|
24
|
-
const box = [
|
|
25
|
-
'',
|
|
26
|
-
ansis.yellow(`╭${'─'.repeat(37)}╮`),
|
|
27
|
-
ansis.yellow(`│ Доступна новая версия: ${latest.padEnd(12)}│`),
|
|
28
|
-
ansis.yellow(`│ npm install -g @pachca/cli${' '.repeat(9)}│`),
|
|
29
|
-
ansis.yellow(`╰${'─'.repeat(37)}╯`),
|
|
30
|
-
'',
|
|
31
|
-
].join('\n');
|
|
32
|
-
process.stderr.write(box);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
// Ignore cache read errors
|
|
39
|
-
}
|
|
40
|
-
// Check if we should refresh version cache (mtime > 24h)
|
|
41
|
-
try {
|
|
42
|
-
let shouldRefresh = true;
|
|
43
|
-
if (fs.existsSync(versionFile)) {
|
|
44
|
-
const stat = fs.statSync(versionFile);
|
|
45
|
-
const ageMs = Date.now() - stat.mtimeMs;
|
|
46
|
-
shouldRefresh = ageMs > 60 * 60 * 1000;
|
|
47
|
-
}
|
|
48
|
-
if (shouldRefresh) {
|
|
49
|
-
if (!fs.existsSync(cacheDir)) {
|
|
50
|
-
fs.mkdirSync(cacheDir, { recursive: true });
|
|
51
|
-
}
|
|
52
|
-
// Spawn detached background process to fetch latest version
|
|
53
|
-
const scriptPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'get-version.js');
|
|
54
|
-
if (fs.existsSync(scriptPath)) {
|
|
55
|
-
const child = spawn(process.execPath, [scriptPath, versionFile], {
|
|
56
|
-
detached: true,
|
|
57
|
-
stdio: 'ignore',
|
|
58
|
-
});
|
|
59
|
-
child.unref();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Ignore errors in update check
|
|
65
|
-
}
|
|
66
|
-
};
|
|
1
|
+
// Banner and version refresh moved to init hook (process.on('exit'))
|
|
2
|
+
// so they fire even when commands fail.
|
|
3
|
+
const hook = async function () { };
|
|
67
4
|
export default hook;
|
package/oclif.manifest.json
CHANGED
|
@@ -826,6 +826,131 @@
|
|
|
826
826
|
"introspect.js"
|
|
827
827
|
]
|
|
828
828
|
},
|
|
829
|
+
"upgrade": {
|
|
830
|
+
"aliases": [],
|
|
831
|
+
"args": {},
|
|
832
|
+
"description": "Обновить CLI до последней версии",
|
|
833
|
+
"examples": [
|
|
834
|
+
"<%= config.bin %> upgrade"
|
|
835
|
+
],
|
|
836
|
+
"flags": {
|
|
837
|
+
"output": {
|
|
838
|
+
"char": "o",
|
|
839
|
+
"description": "Output format: table, json, yaml, csv",
|
|
840
|
+
"name": "output",
|
|
841
|
+
"hasDynamicHelp": false,
|
|
842
|
+
"multiple": false,
|
|
843
|
+
"options": [
|
|
844
|
+
"table",
|
|
845
|
+
"json",
|
|
846
|
+
"yaml",
|
|
847
|
+
"csv"
|
|
848
|
+
],
|
|
849
|
+
"type": "option"
|
|
850
|
+
},
|
|
851
|
+
"columns": {
|
|
852
|
+
"char": "c",
|
|
853
|
+
"description": "Columns to display (comma-separated)",
|
|
854
|
+
"name": "columns",
|
|
855
|
+
"hasDynamicHelp": false,
|
|
856
|
+
"multiple": false,
|
|
857
|
+
"type": "option"
|
|
858
|
+
},
|
|
859
|
+
"no-header": {
|
|
860
|
+
"description": "Hide table header",
|
|
861
|
+
"name": "no-header",
|
|
862
|
+
"allowNo": false,
|
|
863
|
+
"type": "boolean"
|
|
864
|
+
},
|
|
865
|
+
"no-truncate": {
|
|
866
|
+
"description": "Do not truncate values in table",
|
|
867
|
+
"name": "no-truncate",
|
|
868
|
+
"allowNo": false,
|
|
869
|
+
"type": "boolean"
|
|
870
|
+
},
|
|
871
|
+
"profile": {
|
|
872
|
+
"char": "p",
|
|
873
|
+
"description": "Profile to use for this command",
|
|
874
|
+
"name": "profile",
|
|
875
|
+
"hasDynamicHelp": false,
|
|
876
|
+
"multiple": false,
|
|
877
|
+
"type": "option"
|
|
878
|
+
},
|
|
879
|
+
"token": {
|
|
880
|
+
"description": "Bearer token for this call (not saved)",
|
|
881
|
+
"name": "token",
|
|
882
|
+
"hasDynamicHelp": false,
|
|
883
|
+
"multiple": false,
|
|
884
|
+
"type": "option"
|
|
885
|
+
},
|
|
886
|
+
"quiet": {
|
|
887
|
+
"char": "q",
|
|
888
|
+
"description": "Suppress output except errors",
|
|
889
|
+
"name": "quiet",
|
|
890
|
+
"allowNo": false,
|
|
891
|
+
"type": "boolean"
|
|
892
|
+
},
|
|
893
|
+
"no-color": {
|
|
894
|
+
"description": "Disable color output",
|
|
895
|
+
"name": "no-color",
|
|
896
|
+
"allowNo": false,
|
|
897
|
+
"type": "boolean"
|
|
898
|
+
},
|
|
899
|
+
"verbose": {
|
|
900
|
+
"char": "v",
|
|
901
|
+
"description": "Show HTTP request/response details",
|
|
902
|
+
"name": "verbose",
|
|
903
|
+
"allowNo": false,
|
|
904
|
+
"type": "boolean"
|
|
905
|
+
},
|
|
906
|
+
"no-input": {
|
|
907
|
+
"description": "Disable interactive prompts",
|
|
908
|
+
"name": "no-input",
|
|
909
|
+
"allowNo": false,
|
|
910
|
+
"type": "boolean"
|
|
911
|
+
},
|
|
912
|
+
"dry-run": {
|
|
913
|
+
"description": "Show HTTP request without sending",
|
|
914
|
+
"name": "dry-run",
|
|
915
|
+
"allowNo": false,
|
|
916
|
+
"type": "boolean"
|
|
917
|
+
},
|
|
918
|
+
"timeout": {
|
|
919
|
+
"description": "Request timeout in seconds",
|
|
920
|
+
"name": "timeout",
|
|
921
|
+
"hasDynamicHelp": false,
|
|
922
|
+
"multiple": false,
|
|
923
|
+
"type": "option"
|
|
924
|
+
},
|
|
925
|
+
"no-retry": {
|
|
926
|
+
"description": "Disable auto-retry on 429/503",
|
|
927
|
+
"name": "no-retry",
|
|
928
|
+
"allowNo": false,
|
|
929
|
+
"type": "boolean"
|
|
930
|
+
},
|
|
931
|
+
"json": {
|
|
932
|
+
"description": "Output as JSON (alias for --output json)",
|
|
933
|
+
"hidden": true,
|
|
934
|
+
"name": "json",
|
|
935
|
+
"allowNo": false,
|
|
936
|
+
"type": "boolean"
|
|
937
|
+
}
|
|
938
|
+
},
|
|
939
|
+
"hasDynamicHelp": false,
|
|
940
|
+
"hiddenAliases": [],
|
|
941
|
+
"id": "upgrade",
|
|
942
|
+
"pluginAlias": "@pachca/cli",
|
|
943
|
+
"pluginName": "@pachca/cli",
|
|
944
|
+
"pluginType": "core",
|
|
945
|
+
"strict": true,
|
|
946
|
+
"enableJsonFlag": false,
|
|
947
|
+
"isESM": true,
|
|
948
|
+
"relativePath": [
|
|
949
|
+
"dist",
|
|
950
|
+
"commands",
|
|
951
|
+
"upgrade.js"
|
|
952
|
+
]
|
|
953
|
+
},
|
|
829
954
|
"upload": {
|
|
830
955
|
"aliases": [],
|
|
831
956
|
"args": {
|
|
@@ -11021,202 +11146,6 @@
|
|
|
11021
11146
|
"get.js"
|
|
11022
11147
|
]
|
|
11023
11148
|
},
|
|
11024
|
-
"views:open": {
|
|
11025
|
-
"aliases": [],
|
|
11026
|
-
"args": {},
|
|
11027
|
-
"description": "Открытие представления",
|
|
11028
|
-
"examples": [
|
|
11029
|
-
"Показать интерактивную форму пользователю:\n $ pachca views open",
|
|
11030
|
-
"Опрос сотрудников через форму:\n $ pachca views open",
|
|
11031
|
-
"Форма заявки/запроса:\n $ pachca views open"
|
|
11032
|
-
],
|
|
11033
|
-
"flags": {
|
|
11034
|
-
"output": {
|
|
11035
|
-
"char": "o",
|
|
11036
|
-
"description": "Output format: table, json, yaml, csv",
|
|
11037
|
-
"name": "output",
|
|
11038
|
-
"hasDynamicHelp": false,
|
|
11039
|
-
"multiple": false,
|
|
11040
|
-
"options": [
|
|
11041
|
-
"table",
|
|
11042
|
-
"json",
|
|
11043
|
-
"yaml",
|
|
11044
|
-
"csv"
|
|
11045
|
-
],
|
|
11046
|
-
"type": "option"
|
|
11047
|
-
},
|
|
11048
|
-
"columns": {
|
|
11049
|
-
"char": "c",
|
|
11050
|
-
"description": "Columns to display (comma-separated)",
|
|
11051
|
-
"name": "columns",
|
|
11052
|
-
"hasDynamicHelp": false,
|
|
11053
|
-
"multiple": false,
|
|
11054
|
-
"type": "option"
|
|
11055
|
-
},
|
|
11056
|
-
"no-header": {
|
|
11057
|
-
"description": "Hide table header",
|
|
11058
|
-
"name": "no-header",
|
|
11059
|
-
"allowNo": false,
|
|
11060
|
-
"type": "boolean"
|
|
11061
|
-
},
|
|
11062
|
-
"no-truncate": {
|
|
11063
|
-
"description": "Do not truncate values in table",
|
|
11064
|
-
"name": "no-truncate",
|
|
11065
|
-
"allowNo": false,
|
|
11066
|
-
"type": "boolean"
|
|
11067
|
-
},
|
|
11068
|
-
"profile": {
|
|
11069
|
-
"char": "p",
|
|
11070
|
-
"description": "Profile to use for this command",
|
|
11071
|
-
"name": "profile",
|
|
11072
|
-
"hasDynamicHelp": false,
|
|
11073
|
-
"multiple": false,
|
|
11074
|
-
"type": "option"
|
|
11075
|
-
},
|
|
11076
|
-
"token": {
|
|
11077
|
-
"description": "Bearer token for this call (not saved)",
|
|
11078
|
-
"name": "token",
|
|
11079
|
-
"hasDynamicHelp": false,
|
|
11080
|
-
"multiple": false,
|
|
11081
|
-
"type": "option"
|
|
11082
|
-
},
|
|
11083
|
-
"quiet": {
|
|
11084
|
-
"char": "q",
|
|
11085
|
-
"description": "Suppress output except errors",
|
|
11086
|
-
"name": "quiet",
|
|
11087
|
-
"allowNo": false,
|
|
11088
|
-
"type": "boolean"
|
|
11089
|
-
},
|
|
11090
|
-
"no-color": {
|
|
11091
|
-
"description": "Disable color output",
|
|
11092
|
-
"name": "no-color",
|
|
11093
|
-
"allowNo": false,
|
|
11094
|
-
"type": "boolean"
|
|
11095
|
-
},
|
|
11096
|
-
"verbose": {
|
|
11097
|
-
"char": "v",
|
|
11098
|
-
"description": "Show HTTP request/response details",
|
|
11099
|
-
"name": "verbose",
|
|
11100
|
-
"allowNo": false,
|
|
11101
|
-
"type": "boolean"
|
|
11102
|
-
},
|
|
11103
|
-
"no-input": {
|
|
11104
|
-
"description": "Disable interactive prompts",
|
|
11105
|
-
"name": "no-input",
|
|
11106
|
-
"allowNo": false,
|
|
11107
|
-
"type": "boolean"
|
|
11108
|
-
},
|
|
11109
|
-
"dry-run": {
|
|
11110
|
-
"description": "Show HTTP request without sending",
|
|
11111
|
-
"name": "dry-run",
|
|
11112
|
-
"allowNo": false,
|
|
11113
|
-
"type": "boolean"
|
|
11114
|
-
},
|
|
11115
|
-
"timeout": {
|
|
11116
|
-
"description": "Request timeout in seconds",
|
|
11117
|
-
"name": "timeout",
|
|
11118
|
-
"hasDynamicHelp": false,
|
|
11119
|
-
"multiple": false,
|
|
11120
|
-
"type": "option"
|
|
11121
|
-
},
|
|
11122
|
-
"no-retry": {
|
|
11123
|
-
"description": "Disable auto-retry on 429/503",
|
|
11124
|
-
"name": "no-retry",
|
|
11125
|
-
"allowNo": false,
|
|
11126
|
-
"type": "boolean"
|
|
11127
|
-
},
|
|
11128
|
-
"json": {
|
|
11129
|
-
"description": "Output as JSON (alias for --output json)",
|
|
11130
|
-
"hidden": true,
|
|
11131
|
-
"name": "json",
|
|
11132
|
-
"allowNo": false,
|
|
11133
|
-
"type": "boolean"
|
|
11134
|
-
},
|
|
11135
|
-
"title": {
|
|
11136
|
-
"description": "Заголовок представления (макс. 24 символов)",
|
|
11137
|
-
"name": "title",
|
|
11138
|
-
"hasDynamicHelp": false,
|
|
11139
|
-
"multiple": false,
|
|
11140
|
-
"type": "option"
|
|
11141
|
-
},
|
|
11142
|
-
"close-text": {
|
|
11143
|
-
"description": "Текст кнопки закрытия представления (макс. 24 символов)",
|
|
11144
|
-
"name": "close-text",
|
|
11145
|
-
"hasDynamicHelp": false,
|
|
11146
|
-
"multiple": false,
|
|
11147
|
-
"type": "option"
|
|
11148
|
-
},
|
|
11149
|
-
"submit-text": {
|
|
11150
|
-
"description": "Текст кнопки отправки формы (макс. 24 символов)",
|
|
11151
|
-
"name": "submit-text",
|
|
11152
|
-
"hasDynamicHelp": false,
|
|
11153
|
-
"multiple": false,
|
|
11154
|
-
"type": "option"
|
|
11155
|
-
},
|
|
11156
|
-
"blocks": {
|
|
11157
|
-
"description": "Массив блоков представления",
|
|
11158
|
-
"name": "blocks",
|
|
11159
|
-
"hasDynamicHelp": false,
|
|
11160
|
-
"multiple": false,
|
|
11161
|
-
"type": "option"
|
|
11162
|
-
},
|
|
11163
|
-
"type": {
|
|
11164
|
-
"description": "Способ открытия представления",
|
|
11165
|
-
"name": "type",
|
|
11166
|
-
"hasDynamicHelp": false,
|
|
11167
|
-
"multiple": false,
|
|
11168
|
-
"options": [
|
|
11169
|
-
"modal"
|
|
11170
|
-
],
|
|
11171
|
-
"type": "option"
|
|
11172
|
-
},
|
|
11173
|
-
"trigger-id": {
|
|
11174
|
-
"description": "Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)",
|
|
11175
|
-
"name": "trigger-id",
|
|
11176
|
-
"hasDynamicHelp": false,
|
|
11177
|
-
"multiple": false,
|
|
11178
|
-
"type": "option"
|
|
11179
|
-
},
|
|
11180
|
-
"private-metadata": {
|
|
11181
|
-
"description": "Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)",
|
|
11182
|
-
"name": "private-metadata",
|
|
11183
|
-
"hasDynamicHelp": false,
|
|
11184
|
-
"multiple": false,
|
|
11185
|
-
"type": "option"
|
|
11186
|
-
},
|
|
11187
|
-
"callback-id": {
|
|
11188
|
-
"description": "Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)",
|
|
11189
|
-
"name": "callback-id",
|
|
11190
|
-
"hasDynamicHelp": false,
|
|
11191
|
-
"multiple": false,
|
|
11192
|
-
"type": "option"
|
|
11193
|
-
}
|
|
11194
|
-
},
|
|
11195
|
-
"hasDynamicHelp": false,
|
|
11196
|
-
"hiddenAliases": [],
|
|
11197
|
-
"id": "views:open",
|
|
11198
|
-
"pluginAlias": "@pachca/cli",
|
|
11199
|
-
"pluginName": "@pachca/cli",
|
|
11200
|
-
"pluginType": "core",
|
|
11201
|
-
"strict": true,
|
|
11202
|
-
"enableJsonFlag": false,
|
|
11203
|
-
"scope": "views:write",
|
|
11204
|
-
"apiMethod": "POST",
|
|
11205
|
-
"apiPath": "/views/open",
|
|
11206
|
-
"requiredFlags": [
|
|
11207
|
-
"title",
|
|
11208
|
-
"blocks",
|
|
11209
|
-
"type",
|
|
11210
|
-
"trigger-id"
|
|
11211
|
-
],
|
|
11212
|
-
"isESM": true,
|
|
11213
|
-
"relativePath": [
|
|
11214
|
-
"dist",
|
|
11215
|
-
"commands",
|
|
11216
|
-
"views",
|
|
11217
|
-
"open.js"
|
|
11218
|
-
]
|
|
11219
|
-
},
|
|
11220
11149
|
"users:create": {
|
|
11221
11150
|
"aliases": [],
|
|
11222
11151
|
"args": {},
|
|
@@ -12578,7 +12507,203 @@
|
|
|
12578
12507
|
"users",
|
|
12579
12508
|
"update.js"
|
|
12580
12509
|
]
|
|
12510
|
+
},
|
|
12511
|
+
"views:open": {
|
|
12512
|
+
"aliases": [],
|
|
12513
|
+
"args": {},
|
|
12514
|
+
"description": "Открытие представления",
|
|
12515
|
+
"examples": [
|
|
12516
|
+
"Показать интерактивную форму пользователю:\n $ pachca views open",
|
|
12517
|
+
"Опрос сотрудников через форму:\n $ pachca views open",
|
|
12518
|
+
"Форма заявки/запроса:\n $ pachca views open"
|
|
12519
|
+
],
|
|
12520
|
+
"flags": {
|
|
12521
|
+
"output": {
|
|
12522
|
+
"char": "o",
|
|
12523
|
+
"description": "Output format: table, json, yaml, csv",
|
|
12524
|
+
"name": "output",
|
|
12525
|
+
"hasDynamicHelp": false,
|
|
12526
|
+
"multiple": false,
|
|
12527
|
+
"options": [
|
|
12528
|
+
"table",
|
|
12529
|
+
"json",
|
|
12530
|
+
"yaml",
|
|
12531
|
+
"csv"
|
|
12532
|
+
],
|
|
12533
|
+
"type": "option"
|
|
12534
|
+
},
|
|
12535
|
+
"columns": {
|
|
12536
|
+
"char": "c",
|
|
12537
|
+
"description": "Columns to display (comma-separated)",
|
|
12538
|
+
"name": "columns",
|
|
12539
|
+
"hasDynamicHelp": false,
|
|
12540
|
+
"multiple": false,
|
|
12541
|
+
"type": "option"
|
|
12542
|
+
},
|
|
12543
|
+
"no-header": {
|
|
12544
|
+
"description": "Hide table header",
|
|
12545
|
+
"name": "no-header",
|
|
12546
|
+
"allowNo": false,
|
|
12547
|
+
"type": "boolean"
|
|
12548
|
+
},
|
|
12549
|
+
"no-truncate": {
|
|
12550
|
+
"description": "Do not truncate values in table",
|
|
12551
|
+
"name": "no-truncate",
|
|
12552
|
+
"allowNo": false,
|
|
12553
|
+
"type": "boolean"
|
|
12554
|
+
},
|
|
12555
|
+
"profile": {
|
|
12556
|
+
"char": "p",
|
|
12557
|
+
"description": "Profile to use for this command",
|
|
12558
|
+
"name": "profile",
|
|
12559
|
+
"hasDynamicHelp": false,
|
|
12560
|
+
"multiple": false,
|
|
12561
|
+
"type": "option"
|
|
12562
|
+
},
|
|
12563
|
+
"token": {
|
|
12564
|
+
"description": "Bearer token for this call (not saved)",
|
|
12565
|
+
"name": "token",
|
|
12566
|
+
"hasDynamicHelp": false,
|
|
12567
|
+
"multiple": false,
|
|
12568
|
+
"type": "option"
|
|
12569
|
+
},
|
|
12570
|
+
"quiet": {
|
|
12571
|
+
"char": "q",
|
|
12572
|
+
"description": "Suppress output except errors",
|
|
12573
|
+
"name": "quiet",
|
|
12574
|
+
"allowNo": false,
|
|
12575
|
+
"type": "boolean"
|
|
12576
|
+
},
|
|
12577
|
+
"no-color": {
|
|
12578
|
+
"description": "Disable color output",
|
|
12579
|
+
"name": "no-color",
|
|
12580
|
+
"allowNo": false,
|
|
12581
|
+
"type": "boolean"
|
|
12582
|
+
},
|
|
12583
|
+
"verbose": {
|
|
12584
|
+
"char": "v",
|
|
12585
|
+
"description": "Show HTTP request/response details",
|
|
12586
|
+
"name": "verbose",
|
|
12587
|
+
"allowNo": false,
|
|
12588
|
+
"type": "boolean"
|
|
12589
|
+
},
|
|
12590
|
+
"no-input": {
|
|
12591
|
+
"description": "Disable interactive prompts",
|
|
12592
|
+
"name": "no-input",
|
|
12593
|
+
"allowNo": false,
|
|
12594
|
+
"type": "boolean"
|
|
12595
|
+
},
|
|
12596
|
+
"dry-run": {
|
|
12597
|
+
"description": "Show HTTP request without sending",
|
|
12598
|
+
"name": "dry-run",
|
|
12599
|
+
"allowNo": false,
|
|
12600
|
+
"type": "boolean"
|
|
12601
|
+
},
|
|
12602
|
+
"timeout": {
|
|
12603
|
+
"description": "Request timeout in seconds",
|
|
12604
|
+
"name": "timeout",
|
|
12605
|
+
"hasDynamicHelp": false,
|
|
12606
|
+
"multiple": false,
|
|
12607
|
+
"type": "option"
|
|
12608
|
+
},
|
|
12609
|
+
"no-retry": {
|
|
12610
|
+
"description": "Disable auto-retry on 429/503",
|
|
12611
|
+
"name": "no-retry",
|
|
12612
|
+
"allowNo": false,
|
|
12613
|
+
"type": "boolean"
|
|
12614
|
+
},
|
|
12615
|
+
"json": {
|
|
12616
|
+
"description": "Output as JSON (alias for --output json)",
|
|
12617
|
+
"hidden": true,
|
|
12618
|
+
"name": "json",
|
|
12619
|
+
"allowNo": false,
|
|
12620
|
+
"type": "boolean"
|
|
12621
|
+
},
|
|
12622
|
+
"title": {
|
|
12623
|
+
"description": "Заголовок представления (макс. 24 символов)",
|
|
12624
|
+
"name": "title",
|
|
12625
|
+
"hasDynamicHelp": false,
|
|
12626
|
+
"multiple": false,
|
|
12627
|
+
"type": "option"
|
|
12628
|
+
},
|
|
12629
|
+
"close-text": {
|
|
12630
|
+
"description": "Текст кнопки закрытия представления (макс. 24 символов)",
|
|
12631
|
+
"name": "close-text",
|
|
12632
|
+
"hasDynamicHelp": false,
|
|
12633
|
+
"multiple": false,
|
|
12634
|
+
"type": "option"
|
|
12635
|
+
},
|
|
12636
|
+
"submit-text": {
|
|
12637
|
+
"description": "Текст кнопки отправки формы (макс. 24 символов)",
|
|
12638
|
+
"name": "submit-text",
|
|
12639
|
+
"hasDynamicHelp": false,
|
|
12640
|
+
"multiple": false,
|
|
12641
|
+
"type": "option"
|
|
12642
|
+
},
|
|
12643
|
+
"blocks": {
|
|
12644
|
+
"description": "Массив блоков представления",
|
|
12645
|
+
"name": "blocks",
|
|
12646
|
+
"hasDynamicHelp": false,
|
|
12647
|
+
"multiple": false,
|
|
12648
|
+
"type": "option"
|
|
12649
|
+
},
|
|
12650
|
+
"type": {
|
|
12651
|
+
"description": "Способ открытия представления",
|
|
12652
|
+
"name": "type",
|
|
12653
|
+
"hasDynamicHelp": false,
|
|
12654
|
+
"multiple": false,
|
|
12655
|
+
"options": [
|
|
12656
|
+
"modal"
|
|
12657
|
+
],
|
|
12658
|
+
"type": "option"
|
|
12659
|
+
},
|
|
12660
|
+
"trigger-id": {
|
|
12661
|
+
"description": "Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)",
|
|
12662
|
+
"name": "trigger-id",
|
|
12663
|
+
"hasDynamicHelp": false,
|
|
12664
|
+
"multiple": false,
|
|
12665
|
+
"type": "option"
|
|
12666
|
+
},
|
|
12667
|
+
"private-metadata": {
|
|
12668
|
+
"description": "Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате `JSON` какой то дополнительной информации вместе с заполненной пользователем формой. (макс. 3000 символов)",
|
|
12669
|
+
"name": "private-metadata",
|
|
12670
|
+
"hasDynamicHelp": false,
|
|
12671
|
+
"multiple": false,
|
|
12672
|
+
"type": "option"
|
|
12673
|
+
},
|
|
12674
|
+
"callback-id": {
|
|
12675
|
+
"description": "Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. (макс. 255 символов)",
|
|
12676
|
+
"name": "callback-id",
|
|
12677
|
+
"hasDynamicHelp": false,
|
|
12678
|
+
"multiple": false,
|
|
12679
|
+
"type": "option"
|
|
12680
|
+
}
|
|
12681
|
+
},
|
|
12682
|
+
"hasDynamicHelp": false,
|
|
12683
|
+
"hiddenAliases": [],
|
|
12684
|
+
"id": "views:open",
|
|
12685
|
+
"pluginAlias": "@pachca/cli",
|
|
12686
|
+
"pluginName": "@pachca/cli",
|
|
12687
|
+
"pluginType": "core",
|
|
12688
|
+
"strict": true,
|
|
12689
|
+
"enableJsonFlag": false,
|
|
12690
|
+
"scope": "views:write",
|
|
12691
|
+
"apiMethod": "POST",
|
|
12692
|
+
"apiPath": "/views/open",
|
|
12693
|
+
"requiredFlags": [
|
|
12694
|
+
"title",
|
|
12695
|
+
"blocks",
|
|
12696
|
+
"type",
|
|
12697
|
+
"trigger-id"
|
|
12698
|
+
],
|
|
12699
|
+
"isESM": true,
|
|
12700
|
+
"relativePath": [
|
|
12701
|
+
"dist",
|
|
12702
|
+
"commands",
|
|
12703
|
+
"views",
|
|
12704
|
+
"open.js"
|
|
12705
|
+
]
|
|
12581
12706
|
}
|
|
12582
12707
|
},
|
|
12583
|
-
"version": "2026.3.
|
|
12708
|
+
"version": "2026.3.8"
|
|
12584
12709
|
}
|