@cloudglab/zentao-cli 0.1.5 → 0.1.6
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 +20 -0
- package/README.md +25 -1
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/install.d.ts +2 -2
- package/dist/install.js +85 -6
- package/dist/install.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/skills/zentao-cli/SKILL.md +21 -1
- package/skills/zentao-cli/reference/install.md +24 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,8 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.6 - 2026-06-06
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- 修正 `zentao install` / `zentao update` 的 skill 安装源,默认使用 `cloudglab/zentao-cli` GitHub 仓库源,避免把 npm 包名误解析为错误仓库地址。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- 新增 `--skill-source npm` 安装模式:在不能访问远程 `.git` 仓库但可以访问 npm 的环境中,自动下载 `@cloudglab/zentao-cli` 静态包、解压并通过本地路径安装 skill。
|
|
14
|
+
- 新增 `--skill-local-path` 参数,支持直接从已解压的本地 skill 包目录安装。
|
|
15
|
+
- 新增安装流程测试,覆盖默认 GitHub 源和 npm 静态包本地路径安装流程。
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- README、skill 文档和安装参考文档补充 GitHub 源、npm 静态包、本地路径三种 skill 安装方式。
|
|
20
|
+
|
|
5
21
|
## 0.1.5 - 2026-06-06
|
|
6
22
|
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- 修正 skill 安装源:默认使用 `cloudglab/zentao-cli` GitHub 仓库源;不能访问远程 `.git` 仓库时,支持通过 npm 静态包解压后的本地路径安装 skill。
|
|
26
|
+
|
|
7
27
|
### Added
|
|
8
28
|
|
|
9
29
|
- 新增 `zentao install` / `zentao update` 内置命令,一键安装或更新 CLI 与 skill,并校验禅道配置。
|
package/README.md
CHANGED
|
@@ -14,6 +14,20 @@ npx -y @cloudglab/zentao-cli@latest install
|
|
|
14
14
|
|
|
15
15
|
该命令会依次安装全局 CLI、安装 skill,并在禅道配置缺失或登录校验失败时引导输入配置。
|
|
16
16
|
|
|
17
|
+
默认通过 GitHub 仓库安装 skill。如果当前环境不能访问远程 `.git` 仓库,但可以访问 npm 包,可改用 npm 静态包模式:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx -y @cloudglab/zentao-cli@latest install --skill-source npm
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
npm 模式会下载 `@cloudglab/zentao-cli` 包,解压其中的 `skills/` 目录,再通过本地路径安装 skill。
|
|
24
|
+
|
|
25
|
+
如果已经提前下载并解压好了 npm 静态包,也可以直接指定本地目录:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
zentao install --skill-local-path ./package
|
|
29
|
+
```
|
|
30
|
+
|
|
17
31
|
后续更新也可以直接运行:
|
|
18
32
|
|
|
19
33
|
```bash
|
|
@@ -38,8 +52,18 @@ zentao help
|
|
|
38
52
|
|
|
39
53
|
### Skill 安装
|
|
40
54
|
|
|
55
|
+
默认 GitHub 仓库方式:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx -y skills add -g cloudglab/zentao-cli
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
如果只能访问 npm,不能 clone `.git` 仓库:
|
|
62
|
+
|
|
41
63
|
```bash
|
|
42
|
-
|
|
64
|
+
npm pack @cloudglab/zentao-cli@latest
|
|
65
|
+
tar -xzf cloudglab-zentao-cli-*.tgz
|
|
66
|
+
npx -y skills add -g ./package
|
|
43
67
|
```
|
|
44
68
|
|
|
45
69
|
Skill / Agent 里推荐优先调用本地命令:
|
package/dist/cli.js
CHANGED
|
@@ -24,11 +24,11 @@ export async function runCli(rawArgs) {
|
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
if (commandName === 'install') {
|
|
27
|
-
await runInstallCommand();
|
|
27
|
+
await runInstallCommand(commandArgs);
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
if (commandName === 'update' || commandName === 'upgrade') {
|
|
31
|
-
await runUpdateCommand();
|
|
31
|
+
await runUpdateCommand(commandArgs);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
const command = registry.getCommand(commandName);
|
|
@@ -71,9 +71,11 @@ function printHelp(role, commands) {
|
|
|
71
71
|
' zentao version',
|
|
72
72
|
' zentao update',
|
|
73
73
|
' npx -y @cloudglab/zentao-cli@latest install',
|
|
74
|
+
' zentao install --skill-source npm',
|
|
74
75
|
'',
|
|
75
76
|
'示例:',
|
|
76
77
|
' zentao install',
|
|
78
|
+
' zentao install --skill-source npm',
|
|
77
79
|
' zentao update',
|
|
78
80
|
' zentao getMyTasks --status all --limit 20',
|
|
79
81
|
' zentao --role qa getMyBugs --limit 50',
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB;IAC5C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAC3C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnG,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/F,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACrF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/install.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function runInstallCommand(): Promise<void>;
|
|
2
|
-
export declare function runUpdateCommand(): Promise<void>;
|
|
1
|
+
export declare function runInstallCommand(args?: string[]): Promise<void>;
|
|
2
|
+
export declare function runUpdateCommand(args?: string[]): Promise<void>;
|
package/dist/install.js
CHANGED
|
@@ -1,21 +1,79 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
2
5
|
import readline from 'node:readline';
|
|
3
6
|
import { ZentaoApi } from './api/index.js';
|
|
4
7
|
import { loadConfig, maskConfig, normalizeConfig, saveConfig } from './core/config.js';
|
|
5
8
|
const PACKAGE_NAME = '@cloudglab/zentao-cli';
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
const GIT_SKILL_SOURCE = 'cloudglab/zentao-cli';
|
|
10
|
+
export async function runInstallCommand(args = []) {
|
|
11
|
+
await installPackageAndSkill('安装', parseInstallOptions(args));
|
|
8
12
|
await ensureValidZentaoConfig();
|
|
9
13
|
process.stdout.write('安装完成,禅道配置校验通过。\n');
|
|
10
14
|
}
|
|
11
|
-
export async function runUpdateCommand() {
|
|
12
|
-
await installPackageAndSkill('更新');
|
|
15
|
+
export async function runUpdateCommand(args = []) {
|
|
16
|
+
await installPackageAndSkill('更新', parseInstallOptions(args));
|
|
13
17
|
await ensureValidZentaoConfig();
|
|
14
18
|
process.stdout.write('更新完成,禅道配置校验通过。\n');
|
|
15
19
|
}
|
|
16
|
-
|
|
20
|
+
function parseInstallOptions(args) {
|
|
21
|
+
let skillSource = 'git';
|
|
22
|
+
let skillLocalPath;
|
|
23
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
24
|
+
const arg = args[index];
|
|
25
|
+
if (arg === '--skill-source') {
|
|
26
|
+
const value = args[index + 1];
|
|
27
|
+
if (value !== 'git' && value !== 'npm') {
|
|
28
|
+
throw new Error('--skill-source 只支持 git 或 npm');
|
|
29
|
+
}
|
|
30
|
+
skillSource = value;
|
|
31
|
+
index += 1;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (arg === '--skill-local-path') {
|
|
35
|
+
const value = args[index + 1];
|
|
36
|
+
if (!value) {
|
|
37
|
+
throw new Error('--skill-local-path 需要传入本地目录路径');
|
|
38
|
+
}
|
|
39
|
+
skillLocalPath = value;
|
|
40
|
+
index += 1;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`未知安装参数: ${arg}`);
|
|
44
|
+
}
|
|
45
|
+
return { skillSource, skillLocalPath };
|
|
46
|
+
}
|
|
47
|
+
async function installPackageAndSkill(action, options) {
|
|
17
48
|
await runStep(`${action} zentao CLI`, 'npm', ['install', '-g', `${PACKAGE_NAME}@latest`]);
|
|
18
|
-
await
|
|
49
|
+
await installSkill(action, options);
|
|
50
|
+
}
|
|
51
|
+
async function installSkill(action, options) {
|
|
52
|
+
if (options.skillLocalPath) {
|
|
53
|
+
await runStep(`${action} zentao skill`, 'npx', ['-y', 'skills', 'add', '-g', path.resolve(options.skillLocalPath)]);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (options.skillSource === 'git') {
|
|
57
|
+
await runStep(`${action} zentao skill`, 'npx', ['-y', 'skills', 'add', '-g', GIT_SKILL_SOURCE]);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
await installSkillFromNpmPackage(action);
|
|
61
|
+
}
|
|
62
|
+
async function installSkillFromNpmPackage(action) {
|
|
63
|
+
const tempDir = await mkdtemp(path.join(os.tmpdir(), 'zentao-cli-skill-'));
|
|
64
|
+
try {
|
|
65
|
+
const stdout = await runCommandOutput('npm', ['pack', `${PACKAGE_NAME}@latest`, '--pack-destination', tempDir, '--silent']);
|
|
66
|
+
const tarballName = stdout.trim().split('\n').filter(Boolean).at(-1);
|
|
67
|
+
if (!tarballName) {
|
|
68
|
+
throw new Error('npm pack 没有返回包文件名');
|
|
69
|
+
}
|
|
70
|
+
const tarballPath = path.join(tempDir, tarballName);
|
|
71
|
+
await runStep('解压 zentao npm 包', 'tar', ['-xzf', tarballPath, '-C', tempDir]);
|
|
72
|
+
await runStep(`${action} zentao skill`, 'npx', ['-y', 'skills', 'add', '-g', path.join(tempDir, 'package')]);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
76
|
+
}
|
|
19
77
|
}
|
|
20
78
|
async function runStep(title, command, args) {
|
|
21
79
|
process.stdout.write(`\n${title}...\n`);
|
|
@@ -34,6 +92,27 @@ function runCommand(command, args) {
|
|
|
34
92
|
});
|
|
35
93
|
});
|
|
36
94
|
}
|
|
95
|
+
function runCommandOutput(command, args) {
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const child = spawn(command, args, { shell: process.platform === 'win32' });
|
|
98
|
+
let stdout = '';
|
|
99
|
+
let stderr = '';
|
|
100
|
+
child.stdout?.on('data', (chunk) => {
|
|
101
|
+
stdout += chunk.toString('utf8');
|
|
102
|
+
});
|
|
103
|
+
child.stderr?.on('data', (chunk) => {
|
|
104
|
+
stderr += chunk.toString('utf8');
|
|
105
|
+
});
|
|
106
|
+
child.on('error', reject);
|
|
107
|
+
child.on('close', (code) => {
|
|
108
|
+
if (code === 0) {
|
|
109
|
+
resolve(stdout);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
reject(new Error(`${command} ${args.join(' ')} 执行失败,退出码 ${String(code)}${stderr ? `:${stderr.trim()}` : ''}`));
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
37
116
|
async function ensureValidZentaoConfig() {
|
|
38
117
|
const existing = tryLoadConfig();
|
|
39
118
|
if (existing && await validateConfig(existing)) {
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGvF,MAAM,YAAY,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGvF,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAShD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiB,EAAE;IACzD,MAAM,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,uBAAuB,EAAE,CAAC;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAiB,EAAE;IACxD,MAAM,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,uBAAuB,EAAE,CAAC;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,IAAI,WAAW,GAAgB,KAAK,CAAC;IACrC,IAAI,cAAkC,CAAC;IAEvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;YACpB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,oBAAoB,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,cAAc,GAAG,KAAK,CAAC;YACvB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAmB,EAAE,OAAuB;IAChF,MAAM,OAAO,CAAC,GAAG,MAAM,aAAa,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,YAAY,SAAS,CAAC,CAAC,CAAC;IAC1F,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAmB,EAAE,OAAuB;IACtE,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,GAAG,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACpH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,CAAC,GAAG,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,MAAM,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,MAAmB;IAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,YAAY,SAAS,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5H,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,OAAO,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,GAAG,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,OAAe,EAAE,IAAc;IACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QAE9F,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,IAAc;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QAC5E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,QAAQ,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAC5D,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,kBAAkB,EAAE,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACxK,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAoB;IAChD,IAAI,CAAC;QACH,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,MAAoB;IACvD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAuB;IACpD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QAEpF,OAAO,eAAe,CAAC;YACrB,GAAG;YACH,QAAQ;YACR,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ;YACxC,UAAU;YACV,UAAU,EAAE,UAAU,IAAI,SAAS;SACpC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,EAAsB,EAAE,KAAa,EAAE,YAAY,GAAG,EAAE;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,EAAsB,EAAE,KAAa;IACxD,MAAM,SAAS,GAAG,EAA8F,CAAC;IACjH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YAC1C,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,cAAc;YAAE,OAAO;QACtC,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,SAAS,CAAC,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;YAC3C,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.6";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const CLI_VERSION = '0.1.
|
|
1
|
+
export const CLI_VERSION = '0.1.6';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -80,6 +80,18 @@ argument-hint: "[command]"
|
|
|
80
80
|
npx -y @cloudglab/zentao-cli@latest install
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
+
不能访问远程 `.git` 仓库但可以访问 npm 时:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx -y @cloudglab/zentao-cli@latest install --skill-source npm
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
已经提前下载并解压 npm 静态包时:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
zentao install --skill-local-path ./package
|
|
93
|
+
```
|
|
94
|
+
|
|
83
95
|
更新 CLI + skill:
|
|
84
96
|
|
|
85
97
|
```bash
|
|
@@ -95,7 +107,15 @@ npx -y @cloudglab/zentao-cli@latest --help
|
|
|
95
107
|
安装 skill:
|
|
96
108
|
|
|
97
109
|
```bash
|
|
98
|
-
npx skills add
|
|
110
|
+
npx -y skills add -g cloudglab/zentao-cli
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
只能访问 npm 时:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npm pack @cloudglab/zentao-cli@latest
|
|
117
|
+
tar -xzf cloudglab-zentao-cli-*.tgz
|
|
118
|
+
npx -y skills add -g ./package
|
|
99
119
|
```
|
|
100
120
|
|
|
101
121
|
检查是否已安装:
|
|
@@ -9,9 +9,21 @@ npx -y @cloudglab/zentao-cli@latest install
|
|
|
9
9
|
它会依次执行:
|
|
10
10
|
|
|
11
11
|
1. 安装全局 CLI:`npm install -g @cloudglab/zentao-cli@latest`
|
|
12
|
-
2. 安装 skill:`npx -y skills add -g
|
|
12
|
+
2. 安装 skill:`npx -y skills add -g cloudglab/zentao-cli`
|
|
13
13
|
3. 如果没有禅道配置,或已有配置登录失败,则提示输入配置并校验
|
|
14
14
|
|
|
15
|
+
默认通过 GitHub 仓库安装 skill。如果当前环境不能访问远程 `.git` 仓库,但可以访问 npm 包,可改用 npm 静态包模式:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx -y @cloudglab/zentao-cli@latest install --skill-source npm
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
如果已经提前下载并解压好了 npm 静态包,也可以直接指定本地目录:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
zentao install --skill-local-path ./package
|
|
25
|
+
```
|
|
26
|
+
|
|
15
27
|
后续更新可运行:
|
|
16
28
|
|
|
17
29
|
```bash
|
|
@@ -35,8 +47,18 @@ npx -y @cloudglab/zentao-cli@latest --help
|
|
|
35
47
|
|
|
36
48
|
## 安装 Skill
|
|
37
49
|
|
|
50
|
+
默认 GitHub 仓库方式:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx -y skills add -g cloudglab/zentao-cli
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
只能访问 npm、不能 clone `.git` 仓库时:
|
|
57
|
+
|
|
38
58
|
```bash
|
|
39
|
-
|
|
59
|
+
npm pack @cloudglab/zentao-cli@latest
|
|
60
|
+
tar -xzf cloudglab-zentao-cli-*.tgz
|
|
61
|
+
npx -y skills add -g ./package
|
|
40
62
|
```
|
|
41
63
|
|
|
42
64
|
## 检查是否已安装
|