holos-skillhub 0.1.4 → 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/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +80 -32
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/language.d.ts +3 -0
- package/dist/commands/language.d.ts.map +1 -0
- package/dist/commands/language.js +26 -0
- package/dist/commands/language.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +17 -11
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +13 -12
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +14 -12
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +10 -9
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +13 -12
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +29 -25
- package/dist/commands/upload.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +26 -10
- package/dist/config.js.map +1 -1
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +176 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +19 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/zh.d.ts +3 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +176 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +16 -17
- package/dist/progress.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +6 -5
- package/dist/prompts.js.map +1 -1
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +33 -29
- package/dist/repl.js.map +1 -1
- package/package.json +9 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoLtD"}
|
package/dist/commands/install.js
CHANGED
|
@@ -5,17 +5,18 @@ import AdmZip from "adm-zip";
|
|
|
5
5
|
import { HolosHubClient } from "../client.js";
|
|
6
6
|
import { requireAuth, getConfig } from "../config.js";
|
|
7
7
|
import { promptText, promptConfirm, cmd, resolveAuditId } from "../prompts.js";
|
|
8
|
+
import { t } from "../i18n/index.js";
|
|
8
9
|
export function registerInstall(program) {
|
|
9
10
|
program
|
|
10
11
|
.command("install [audit-id-or-name]")
|
|
11
|
-
.description("
|
|
12
|
-
.option("-d, --dest <dir>", "
|
|
13
|
-
.option("-y, --yes", "
|
|
12
|
+
.description("Install an audited Skill (approved or conditional) / 安装经过安全审计的 Skill")
|
|
13
|
+
.option("-d, --dest <dir>", "Installation directory (default: ~/.openclaw/skills)")
|
|
14
|
+
.option("-y, --yes", "Auto-confirm conditional skill installation")
|
|
14
15
|
.action(async (auditId, opts) => {
|
|
15
16
|
if (!auditId) {
|
|
16
|
-
auditId = await promptText(chalk.cyan("? ") + "
|
|
17
|
+
auditId = await promptText(chalk.cyan("? ") + t("install.idPrompt"));
|
|
17
18
|
if (!auditId) {
|
|
18
|
-
console.error(chalk.red("
|
|
19
|
+
console.error(chalk.red(t("install.idRequired")));
|
|
19
20
|
process.exit(1);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
@@ -41,76 +42,123 @@ export function registerInstall(program) {
|
|
|
41
42
|
}
|
|
42
43
|
// 按名称解析时需用户确认,防止误装同名 skill
|
|
43
44
|
if (resolvedByName) {
|
|
44
|
-
const confirmed = await promptConfirm("
|
|
45
|
+
const confirmed = await promptConfirm(t("install.confirmThisSkill"), true);
|
|
45
46
|
if (!confirmed) {
|
|
46
|
-
console.log(chalk.gray("
|
|
47
|
+
console.log(chalk.gray(t("install.cancelledInstall")));
|
|
47
48
|
process.exit(0);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
|
-
//
|
|
51
|
-
let skillName =
|
|
51
|
+
// 检查状态并获取 skill 详情
|
|
52
|
+
let skillName = "";
|
|
53
|
+
let skillVersion = "";
|
|
52
54
|
try {
|
|
53
55
|
const status = await client.getStatus(auditId);
|
|
54
56
|
if (status.status !== "DONE") {
|
|
55
|
-
console.error(chalk.yellow(
|
|
57
|
+
console.error(chalk.yellow(t("install.notDone")));
|
|
56
58
|
process.exit(1);
|
|
57
59
|
}
|
|
58
60
|
if (status.scorecard_status === "rejected") {
|
|
59
|
-
console.error(chalk.red("
|
|
60
|
-
console.error(chalk.dim("
|
|
61
|
+
console.error(chalk.red(t("install.rejected")));
|
|
62
|
+
console.error(chalk.dim(t("install.rejectedHint")));
|
|
61
63
|
console.error(chalk.cyan(` ${cmd(`report ${auditId}`)}`));
|
|
62
64
|
process.exit(1);
|
|
63
65
|
}
|
|
64
66
|
if (status.scorecard_status === "conditional") {
|
|
65
|
-
console.warn(chalk.yellow("
|
|
67
|
+
console.warn(chalk.yellow(t("install.conditional")));
|
|
66
68
|
if (!opts.yes) {
|
|
67
|
-
const confirmed = await promptConfirm(chalk.yellow("
|
|
69
|
+
const confirmed = await promptConfirm(chalk.yellow(t("install.confirmContinue")), false);
|
|
68
70
|
if (!confirmed) {
|
|
69
|
-
console.log(chalk.gray("
|
|
71
|
+
console.log(chalk.gray(t("install.cancelledInstall")));
|
|
70
72
|
process.exit(0);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
// 获取 skill
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// 使用 auditId 作为 fallback
|
|
81
|
-
}
|
|
76
|
+
// 获取 skill 详情(名称 + 版本)
|
|
77
|
+
const detail = await client.getSkill(auditId);
|
|
78
|
+
skillName = detail.skill_name || "";
|
|
79
|
+
skillVersion = detail.skill_version || "";
|
|
82
80
|
}
|
|
83
81
|
catch (err) {
|
|
84
82
|
console.error(chalk.red(`❌ ${err.message}`));
|
|
85
83
|
process.exit(1);
|
|
86
84
|
}
|
|
87
|
-
|
|
85
|
+
if (!skillName) {
|
|
86
|
+
console.error(chalk.red(t("install.idRequired")));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
// 确定安装目录:baseDir/<skill_name>
|
|
88
90
|
const baseDir = opts.dest || cfg.installDir;
|
|
89
91
|
const installDir = path.join(baseDir, skillName);
|
|
92
|
+
// 检查是否已安装同名 skill,比较版本并确认替换
|
|
93
|
+
const metaPath = path.join(installDir, "_Holos-SkillHub.json");
|
|
94
|
+
if (fs.existsSync(metaPath)) {
|
|
95
|
+
try {
|
|
96
|
+
const existing = JSON.parse(fs.readFileSync(metaPath, "utf-8"));
|
|
97
|
+
const oldVer = existing.version || t("install.versionUnknown");
|
|
98
|
+
const newVer = skillVersion || t("install.versionUnknown");
|
|
99
|
+
console.log(chalk.yellow(t("install.alreadyInstalled", { name: skillName })));
|
|
100
|
+
console.log(chalk.dim(` ${t("install.versionCurrent")} ${oldVer} → ${t("install.versionNew")} ${newVer}`));
|
|
101
|
+
if (!opts.yes) {
|
|
102
|
+
const confirmed = await promptConfirm(chalk.yellow(t("install.confirmReplace")), false);
|
|
103
|
+
if (!confirmed) {
|
|
104
|
+
console.log(chalk.gray(t("install.cancelledInstall")));
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// 元数据损坏,直接继续覆盖
|
|
111
|
+
}
|
|
112
|
+
}
|
|
90
113
|
fs.mkdirSync(installDir, { recursive: true });
|
|
91
114
|
// 下载 zip 到临时文件
|
|
92
115
|
const tmpZip = path.join(installDir, "__download.zip");
|
|
93
116
|
try {
|
|
94
|
-
console.log(chalk.cyan(
|
|
117
|
+
console.log(chalk.cyan(t("install.downloading", { name: skillName })));
|
|
95
118
|
await client.downloadSkillZip(auditId, tmpZip);
|
|
96
|
-
//
|
|
119
|
+
// 解压:剥掉 zip 顶层目录(可能是 UUID),直接展开到 installDir
|
|
97
120
|
const zip = new AdmZip(tmpZip);
|
|
121
|
+
const entries = zip.getEntries();
|
|
122
|
+
// 检测公共顶层目录前缀
|
|
123
|
+
const topDirs = new Set(entries.map((e) => e.entryName.split("/")[0]).filter(Boolean));
|
|
124
|
+
const stripPrefix = topDirs.size === 1 ? [...topDirs][0] + "/" : "";
|
|
98
125
|
const canonicalBase = path.resolve(installDir) + path.sep;
|
|
99
|
-
for (const entry of
|
|
100
|
-
const
|
|
126
|
+
for (const entry of entries) {
|
|
127
|
+
const stripped = stripPrefix
|
|
128
|
+
? entry.entryName.startsWith(stripPrefix)
|
|
129
|
+
? entry.entryName.slice(stripPrefix.length)
|
|
130
|
+
: entry.entryName
|
|
131
|
+
: entry.entryName;
|
|
132
|
+
if (!stripped)
|
|
133
|
+
continue; // 顶层目录条目本身,跳过
|
|
134
|
+
const entryPath = path.resolve(installDir, stripped);
|
|
101
135
|
if (!entryPath.startsWith(canonicalBase)) {
|
|
102
|
-
throw new Error(
|
|
136
|
+
throw new Error(t("install.unsafeZip", { path: entry.entryName }));
|
|
137
|
+
}
|
|
138
|
+
if (entry.isDirectory) {
|
|
139
|
+
fs.mkdirSync(entryPath, { recursive: true });
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
fs.mkdirSync(path.dirname(entryPath), { recursive: true });
|
|
143
|
+
fs.writeFileSync(entryPath, entry.getData());
|
|
103
144
|
}
|
|
104
145
|
}
|
|
105
|
-
zip.extractAllTo(installDir, true);
|
|
106
146
|
fs.unlinkSync(tmpZip);
|
|
107
|
-
|
|
147
|
+
// 写入安装元数据
|
|
148
|
+
const meta = {
|
|
149
|
+
skill_name: skillName,
|
|
150
|
+
version: skillVersion || null,
|
|
151
|
+
audit_id: auditId,
|
|
152
|
+
installed_at: new Date().toISOString(),
|
|
153
|
+
};
|
|
154
|
+
fs.writeFileSync(path.join(installDir, "_Holos-SkillHub.json"), JSON.stringify(meta, null, 2));
|
|
155
|
+
console.log(chalk.green(t("install.success", { dir: installDir })));
|
|
108
156
|
}
|
|
109
157
|
catch (err) {
|
|
110
158
|
// 清理临时文件
|
|
111
159
|
if (fs.existsSync(tmpZip))
|
|
112
160
|
fs.unlinkSync(tmpZip);
|
|
113
|
-
console.error(chalk.red(
|
|
161
|
+
console.error(chalk.red(t("install.fetchError", { msg: err.message })));
|
|
114
162
|
process.exit(1);
|
|
115
163
|
}
|
|
116
164
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/commands/language.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyBvD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { conf } from "../config.js";
|
|
3
|
+
import { t } from "../i18n/index.js";
|
|
4
|
+
export function registerLanguage(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("language [lang]")
|
|
7
|
+
.description("Switch display language / 切换显示语言 (zh | en)")
|
|
8
|
+
.action((lang) => {
|
|
9
|
+
if (!lang) {
|
|
10
|
+
const current = conf.get("lang") || "zh";
|
|
11
|
+
const label = current === "en" ? "English" : "中文";
|
|
12
|
+
console.log(chalk.cyan(t("lang.current", { lang: `${current} (${label})` })));
|
|
13
|
+
console.log(chalk.gray(t("lang.usage")));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (lang !== "zh" && lang !== "en") {
|
|
17
|
+
console.error(chalk.red(t("lang.invalid", { lang })));
|
|
18
|
+
console.log(chalk.gray(t("lang.usage")));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
conf.set("lang", lang);
|
|
22
|
+
const label = lang === "en" ? "English" : "中文";
|
|
23
|
+
console.log(chalk.green(t("lang.set", { lang: `${lang} (${label})` })));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/commands/language.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAErC,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YACzC,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;AAW7D,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAiBxD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkDnD"}
|
package/dist/commands/list.js
CHANGED
|
@@ -2,6 +2,7 @@ import chalk from "chalk";
|
|
|
2
2
|
import { HolosHubClient } from "../client.js";
|
|
3
3
|
import { requireAuth } from "../config.js";
|
|
4
4
|
import { cmd } from "../prompts.js";
|
|
5
|
+
import { t } from "../i18n/index.js";
|
|
5
6
|
const SCORECARD_COLORS = {
|
|
6
7
|
approved: chalk.green,
|
|
7
8
|
conditional: chalk.yellow,
|
|
@@ -25,12 +26,12 @@ export function formatSkillRow(item) {
|
|
|
25
26
|
export function registerList(program) {
|
|
26
27
|
program
|
|
27
28
|
.command("list")
|
|
28
|
-
.description("列出已审计的
|
|
29
|
-
.option("-s, --status <status>", "
|
|
30
|
-
.option("-q, --query <query>", "
|
|
31
|
-
.option("--page <n>", "
|
|
32
|
-
.option("--page-size <n>", "
|
|
33
|
-
.option("--by <username>", "
|
|
29
|
+
.description("List audited Skills / 列出已审计的 Skills")
|
|
30
|
+
.option("-s, --status <status>", "Filter by status: approved | conditional | rejected | RUNNING | PENDING | FAILED")
|
|
31
|
+
.option("-q, --query <query>", "Keyword search (supports semantic search)")
|
|
32
|
+
.option("--page <n>", "Page number (starting from 1)", "1")
|
|
33
|
+
.option("--page-size <n>", "Items per page (1-100)", "20")
|
|
34
|
+
.option("--by <username>", "Filter by uploader")
|
|
34
35
|
.action(async (opts) => {
|
|
35
36
|
const { server, token } = await requireAuth();
|
|
36
37
|
const client = new HolosHubClient(server, token);
|
|
@@ -43,17 +44,22 @@ export function registerList(program) {
|
|
|
43
44
|
page_size: parseInt(opts.pageSize, 10),
|
|
44
45
|
});
|
|
45
46
|
if (result.items.length === 0) {
|
|
46
|
-
console.log(chalk.gray("
|
|
47
|
+
console.log(chalk.gray(t("list.noMatch")));
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
49
|
-
console.log(`\n ${chalk.bold("owner
|
|
50
|
+
console.log(`\n ${chalk.bold("owner/name".padEnd(38))} Security`);
|
|
50
51
|
console.log(" " + "─".repeat(52));
|
|
51
52
|
for (const item of result.items) {
|
|
52
53
|
formatSkillRow(item);
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const totalPages = Math.ceil(result.total / result.page_size);
|
|
56
|
+
console.log(t("list.pageInfo", {
|
|
57
|
+
total: String(result.total),
|
|
58
|
+
page: String(result.page),
|
|
59
|
+
total_pages: String(totalPages),
|
|
60
|
+
}));
|
|
61
|
+
if (result.page < totalPages) {
|
|
62
|
+
console.log(t("list.nextPage") + chalk.cyan(cmd(`list --page ${result.page + 1}`)));
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4CpD"}
|
package/dist/commands/login.js
CHANGED
|
@@ -2,34 +2,35 @@ import chalk from "chalk";
|
|
|
2
2
|
import { HolosHubClient } from "../client.js";
|
|
3
3
|
import { setConfig } from "../config.js";
|
|
4
4
|
import { promptText, promptPassword } from "../prompts.js";
|
|
5
|
+
import { t } from "../i18n/index.js";
|
|
5
6
|
export function registerLogin(program) {
|
|
6
7
|
program
|
|
7
8
|
.command("login")
|
|
8
|
-
.description("登录 Holos SkillHub
|
|
9
|
-
.option("-s, --server <url>", "Holos SkillHub
|
|
10
|
-
.option("-u, --user <username>", "用户名")
|
|
11
|
-
.option("-p, --password <password>", "
|
|
9
|
+
.description("Login to Holos SkillHub / 登录 Holos SkillHub")
|
|
10
|
+
.option("-s, --server <url>", "Holos SkillHub server URL", process.env.HOLOS_SKILLHUB_SERVER || "https://holos.sii.edu.cn/skillhub")
|
|
11
|
+
.option("-u, --user <username>", "Username / 用户名")
|
|
12
|
+
.option("-p, --password <password>", "Password (or HOLOS_SKILLHUB_PASSWORD env var)", process.env.HOLOS_SKILLHUB_PASSWORD)
|
|
12
13
|
.action(async (opts) => {
|
|
13
14
|
// 服务器地址未通过 -s 指定时交互式确认
|
|
14
15
|
let server = opts.server;
|
|
15
16
|
if (!process.argv.includes("-s") && !process.argv.includes("--server")) {
|
|
16
|
-
server = await promptText(chalk.cyan("? ") +
|
|
17
|
+
server = await promptText(chalk.cyan("? ") + t("login.serverPrompt", { default: opts.server }), opts.server);
|
|
17
18
|
if (!server)
|
|
18
19
|
server = opts.server;
|
|
19
20
|
}
|
|
20
21
|
// 用户名未提供时交互式输入(默认 admin)
|
|
21
22
|
let username = opts.user || "";
|
|
22
23
|
if (!username) {
|
|
23
|
-
username = await promptText(chalk.cyan("? ") + "
|
|
24
|
+
username = await promptText(chalk.cyan("? ") + t("login.usernamePrompt"), "admin");
|
|
24
25
|
if (!username)
|
|
25
26
|
username = "admin";
|
|
26
27
|
}
|
|
27
28
|
// 密码未提供时隐藏输入
|
|
28
29
|
let password = opts.password || "";
|
|
29
30
|
if (!password) {
|
|
30
|
-
password = await promptPassword(chalk.cyan("? ") + "
|
|
31
|
+
password = await promptPassword(chalk.cyan("? ") + t("login.passwordPrompt"));
|
|
31
32
|
if (!password) {
|
|
32
|
-
console.error(chalk.red("
|
|
33
|
+
console.error(chalk.red(t("login.passwordEmpty")));
|
|
33
34
|
process.exit(1);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -37,12 +38,12 @@ export function registerLogin(program) {
|
|
|
37
38
|
try {
|
|
38
39
|
const result = await client.login(username, password);
|
|
39
40
|
setConfig({ server, token: result.token, username: result.username });
|
|
40
|
-
console.log(chalk.green(
|
|
41
|
-
console.log(
|
|
42
|
-
console.log(
|
|
41
|
+
console.log(chalk.green(t("login.success", { name: result.username })));
|
|
42
|
+
console.log(t("login.serverAddr", { server }));
|
|
43
|
+
console.log(t("login.credsSaved"));
|
|
43
44
|
}
|
|
44
45
|
catch (err) {
|
|
45
|
-
console.error(chalk.red(
|
|
46
|
+
console.error(chalk.red(t("login.loginError", { msg: err.message })));
|
|
46
47
|
process.exit(1);
|
|
47
48
|
}
|
|
48
49
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAErC,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,mCAAmC,CAAC;SACnI,MAAM,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;SACjD,MAAM,CAAC,2BAA2B,EAAE,+CAA+C,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;SACzH,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,uBAAuB;QACvB,IAAI,MAAM,GAAW,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7G,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,GAAW,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,OAAO,CAAC;QACpC,CAAC;QAED,aAAa;QACb,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtD,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6DrD"}
|
package/dist/commands/report.js
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import { HolosHubClient } from "../client.js";
|
|
4
|
-
import { requireAuth
|
|
4
|
+
import { requireAuth } from "../config.js";
|
|
5
5
|
import { promptText, cmd, resolveAuditId } from "../prompts.js";
|
|
6
|
+
import { t } from "../i18n/index.js";
|
|
6
7
|
export function registerReport(program) {
|
|
7
8
|
program
|
|
8
9
|
.command("report [audit-id]")
|
|
9
|
-
.description("下载审计报告")
|
|
10
|
-
.option("-f, --fmt <format>", "
|
|
11
|
-
.option("-o, --out <file>", "
|
|
10
|
+
.description("Download audit report / 下载审计报告")
|
|
11
|
+
.option("-f, --fmt <format>", "Report format: json or md", "")
|
|
12
|
+
.option("-o, --out <file>", "Output file path (default: current directory)")
|
|
12
13
|
.action(async (auditId, opts) => {
|
|
13
14
|
if (!auditId) {
|
|
14
|
-
auditId = await promptText(chalk.cyan("? ") + "
|
|
15
|
+
auditId = await promptText(chalk.cyan("? ") + t("report.idPrompt"));
|
|
15
16
|
if (!auditId) {
|
|
16
|
-
console.error(chalk.red("
|
|
17
|
+
console.error(chalk.red(t("report.idRequired")));
|
|
17
18
|
process.exit(1);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
const { server, token } = await requireAuth();
|
|
22
|
+
const { getConfig } = await import("../config.js");
|
|
21
23
|
const cfg = getConfig();
|
|
22
24
|
const fmt = (opts.fmt || cfg.defaultFmt);
|
|
23
25
|
if (fmt !== "json" && fmt !== "md") {
|
|
24
|
-
console.error(chalk.red("
|
|
26
|
+
console.error(chalk.red(t("report.fmtInvalid")));
|
|
25
27
|
process.exit(1);
|
|
26
28
|
}
|
|
27
29
|
const client = new HolosHubClient(server, token);
|
|
@@ -37,11 +39,11 @@ export function registerReport(program) {
|
|
|
37
39
|
const status = await client.getStatus(auditId);
|
|
38
40
|
if (status.status !== "DONE") {
|
|
39
41
|
if (status.status === "FAILED") {
|
|
40
|
-
console.error(chalk.red(
|
|
42
|
+
console.error(chalk.red(t("report.failed", { msg: status.message || "" })));
|
|
41
43
|
}
|
|
42
44
|
else {
|
|
43
|
-
console.error(chalk.yellow(
|
|
44
|
-
console.log(
|
|
45
|
+
console.error(chalk.yellow(t("report.notDone", { status: status.status })));
|
|
46
|
+
console.log(t("report.notDoneWatch") + chalk.cyan(cmd(`status ${auditId} --watch`)));
|
|
45
47
|
}
|
|
46
48
|
process.exit(1);
|
|
47
49
|
}
|
|
@@ -54,10 +56,10 @@ export function registerReport(program) {
|
|
|
54
56
|
const outPath = opts.out || path.join(process.cwd(), `${auditId}_report${ext}`);
|
|
55
57
|
try {
|
|
56
58
|
await client.downloadReport(auditId, fmt, outPath);
|
|
57
|
-
console.log(chalk.green(
|
|
59
|
+
console.log(chalk.green(t("report.saved", { path: outPath })));
|
|
58
60
|
}
|
|
59
61
|
catch (err) {
|
|
60
|
-
console.error(chalk.red(
|
|
62
|
+
console.error(chalk.red(t("report.downloadFailed", { msg: err.message })));
|
|
61
63
|
process.exit(1);
|
|
62
64
|
}
|
|
63
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiDrD"}
|
package/dist/commands/search.js
CHANGED
|
@@ -3,17 +3,18 @@ import { HolosHubClient } from "../client.js";
|
|
|
3
3
|
import { requireAuth } from "../config.js";
|
|
4
4
|
import { formatSkillRow } from "./list.js";
|
|
5
5
|
import { promptText, cmd } from "../prompts.js";
|
|
6
|
+
import { t } from "../i18n/index.js";
|
|
6
7
|
export function registerSearch(program) {
|
|
7
8
|
program
|
|
8
9
|
.command("search [query]")
|
|
9
|
-
.description("搜索
|
|
10
|
-
.option("-s, --status <status>", "
|
|
11
|
-
.option("--page <n>", "
|
|
10
|
+
.description("Search Skills (supports semantic search) / 搜索 Skill")
|
|
11
|
+
.option("-s, --status <status>", "Filter by status: approved | conditional | rejected")
|
|
12
|
+
.option("--page <n>", "Page number", "1")
|
|
12
13
|
.action(async (query, opts) => {
|
|
13
14
|
if (!query) {
|
|
14
|
-
query = await promptText(chalk.cyan("? ") + "
|
|
15
|
+
query = await promptText(chalk.cyan("? ") + t("search.queryPrompt"));
|
|
15
16
|
if (!query) {
|
|
16
|
-
console.error(chalk.red("
|
|
17
|
+
console.error(chalk.red(t("search.queryRequired")));
|
|
17
18
|
process.exit(1);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
@@ -27,18 +28,18 @@ export function registerSearch(program) {
|
|
|
27
28
|
page_size: 20,
|
|
28
29
|
});
|
|
29
30
|
if (result.items.length === 0) {
|
|
30
|
-
console.log(chalk.gray(
|
|
31
|
+
console.log(chalk.gray(t("search.noMatch", { query })));
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
33
|
-
console.log(
|
|
34
|
-
console.log(` ${chalk.bold("
|
|
34
|
+
console.log(t("search.resultHeader", { query: chalk.bold(query), total: String(result.total) }));
|
|
35
|
+
console.log(` ${chalk.bold("name".padEnd(30))} Security`);
|
|
35
36
|
console.log(" " + "─".repeat(44));
|
|
36
37
|
for (const item of result.items) {
|
|
37
38
|
formatSkillRow(item);
|
|
38
39
|
}
|
|
39
40
|
const currentPage = parseInt(opts.page, 10);
|
|
40
41
|
if (result.total > currentPage * 20) {
|
|
41
|
-
console.log(
|
|
42
|
+
console.log(t("search.moreResults") + chalk.cyan(cmd(`search "${query}" --page ${currentPage + 1}`)));
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDrD"}
|