@kscs-inc/cli 0.3.1 → 0.3.3
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/README.md +5 -5
- package/bin/kscs.mjs +101 -43
- package/package.json +1 -1
- package/release.json +31 -31
- package/release.signature.json +1 -1
package/README.md
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npx @kscs-inc/cli@0.3.
|
|
8
|
+
npx @kscs-inc/cli@0.3.3 install
|
|
9
9
|
# 国内镜像(同步可能延迟)
|
|
10
|
-
npx --registry=https://registry.npmmirror.com @kscs-inc/cli@0.3.
|
|
10
|
+
npx --registry=https://registry.npmmirror.com @kscs-inc/cli@0.3.3 install
|
|
11
11
|
# 或全局安装入口后显式安装客户端
|
|
12
|
-
npm install -g @kscs-inc/cli@0.3.
|
|
12
|
+
npm install -g @kscs-inc/cli@0.3.3
|
|
13
13
|
kscs install
|
|
14
14
|
```
|
|
15
15
|
|
|
@@ -20,13 +20,13 @@ kscs install
|
|
|
20
20
|
```sh
|
|
21
21
|
kscs --version
|
|
22
22
|
kscs auth login
|
|
23
|
-
kscs products list
|
|
23
|
+
kscs products list
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
安装成功不代表已登录或有业务权限。终端未识别命令时新开终端,或使用回执给出的绝对入口。
|
|
27
27
|
|
|
28
28
|
## 安全与更新
|
|
29
29
|
|
|
30
|
-
入口版本0.3.
|
|
30
|
+
入口版本0.3.3固定对应发行目标,验证Ed25519签名及SHA256后调用同一安装事务。客户端自带Node,后续使用kscs update check/status/apply;npm仅更新入口。npm uninstall -g @kscs-inc/cli只删除npm入口,不删除实际客户端、配置和Skill。业务请求直接到公司CLI服务,不经过npm或镜像。
|
|
31
31
|
|
|
32
32
|
如安装中断,保留原客户端与身份,按中文错误提示恢复;不关闭TLS或签名校验。镜像不可用时从npm官方源重试或使用官网安装方式。内联第三方代码许可见THIRD-PARTY-NOTICES.txt。
|
package/bin/kscs.mjs
CHANGED
|
@@ -32,9 +32,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
32
32
|
mod
|
|
33
33
|
));
|
|
34
34
|
|
|
35
|
-
// node_modules/.pnpm/pend@1.2.0/node_modules/pend/index.js
|
|
35
|
+
// ../../../../../code/node_modules/.pnpm/pend@1.2.0/node_modules/pend/index.js
|
|
36
36
|
var require_pend = __commonJS({
|
|
37
|
-
"node_modules/.pnpm/pend@1.2.0/node_modules/pend/index.js"(exports, module) {
|
|
37
|
+
"../../../../../code/node_modules/.pnpm/pend@1.2.0/node_modules/pend/index.js"(exports, module) {
|
|
38
38
|
module.exports = Pend;
|
|
39
39
|
function Pend() {
|
|
40
40
|
this.pending = 0;
|
|
@@ -87,9 +87,9 @@ var require_pend = __commonJS({
|
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
// node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/fd-slicer.js
|
|
90
|
+
// ../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/fd-slicer.js
|
|
91
91
|
var require_fd_slicer = __commonJS({
|
|
92
|
-
"node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/fd-slicer.js"(exports) {
|
|
92
|
+
"../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/fd-slicer.js"(exports) {
|
|
93
93
|
var fs = __require("fs");
|
|
94
94
|
var util = __require("util");
|
|
95
95
|
var stream = __require("stream");
|
|
@@ -244,9 +244,9 @@ var require_fd_slicer = __commonJS({
|
|
|
244
244
|
}
|
|
245
245
|
});
|
|
246
246
|
|
|
247
|
-
// node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/crc32.js
|
|
247
|
+
// ../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/crc32.js
|
|
248
248
|
var require_crc32 = __commonJS({
|
|
249
|
-
"node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/crc32.js"(exports, module) {
|
|
249
|
+
"../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/crc32.js"(exports, module) {
|
|
250
250
|
var CRC_TABLE = new Int32Array([
|
|
251
251
|
0,
|
|
252
252
|
1996959894,
|
|
@@ -516,9 +516,9 @@ var require_crc32 = __commonJS({
|
|
|
516
516
|
}
|
|
517
517
|
});
|
|
518
518
|
|
|
519
|
-
// node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/index.js
|
|
519
|
+
// ../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/index.js
|
|
520
520
|
var require_yauzl = __commonJS({
|
|
521
|
-
"node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/index.js"(exports) {
|
|
521
|
+
"../../../../../code/node_modules/.pnpm/yauzl@3.4.0/node_modules/yauzl/index.js"(exports) {
|
|
522
522
|
var fs = __require("fs");
|
|
523
523
|
var zlib = __require("zlib");
|
|
524
524
|
var fd_slicer = require_fd_slicer();
|
|
@@ -1494,23 +1494,31 @@ async function downloadBytes(url, limit, allowLocal = false, timeoutMs = 6e4) {
|
|
|
1494
1494
|
}
|
|
1495
1495
|
return Buffer.concat(chunks);
|
|
1496
1496
|
}
|
|
1497
|
-
async function downloadFile(url, path, limit, allowLocal = false) {
|
|
1498
|
-
const response = await downloadResponse(url, allowLocal, 6e4);
|
|
1497
|
+
async function downloadFile(url, path, limit, allowLocal = false, onProgress) {
|
|
1499
1498
|
let size = 0;
|
|
1500
|
-
|
|
1501
|
-
transform(chunk, _encoding, callback) {
|
|
1502
|
-
size += chunk.length;
|
|
1503
|
-
callback(size > limit ? new Error("\u4E0B\u8F7D\u8D85\u8FC7\u5141\u8BB8\u5927\u5C0F") : null, chunk);
|
|
1504
|
-
}
|
|
1505
|
-
});
|
|
1506
|
-
await pipeline(response.body, budget, createWriteStream(path, { flags: "wx", mode: 384 }));
|
|
1507
|
-
const file = await open(path, "r+");
|
|
1499
|
+
onProgress?.(size, "downloading");
|
|
1508
1500
|
try {
|
|
1509
|
-
await
|
|
1510
|
-
|
|
1511
|
-
|
|
1501
|
+
const response = await downloadResponse(url, allowLocal, 6e4);
|
|
1502
|
+
const budget = new Transform({
|
|
1503
|
+
transform(chunk, _encoding, callback) {
|
|
1504
|
+
size += chunk.length;
|
|
1505
|
+
if (size <= limit) onProgress?.(size, "downloading");
|
|
1506
|
+
callback(size > limit ? new Error("\u4E0B\u8F7D\u8D85\u8FC7\u5141\u8BB8\u5927\u5C0F") : null, chunk);
|
|
1507
|
+
}
|
|
1508
|
+
});
|
|
1509
|
+
await pipeline(response.body, budget, createWriteStream(path, { flags: "wx", mode: 384 }));
|
|
1510
|
+
const file = await open(path, "r+");
|
|
1511
|
+
try {
|
|
1512
|
+
await file.sync();
|
|
1513
|
+
} finally {
|
|
1514
|
+
await file.close();
|
|
1515
|
+
}
|
|
1516
|
+
onProgress?.(size, "downloaded");
|
|
1517
|
+
return size;
|
|
1518
|
+
} catch (error) {
|
|
1519
|
+
onProgress?.(size, "failed");
|
|
1520
|
+
throw error;
|
|
1512
1521
|
}
|
|
1513
|
-
return size;
|
|
1514
1522
|
}
|
|
1515
1523
|
async function fileDigest(path) {
|
|
1516
1524
|
const hash = createHash2("sha256");
|
|
@@ -1709,6 +1717,39 @@ function validateArtifact(value) {
|
|
|
1709
1717
|
};
|
|
1710
1718
|
}
|
|
1711
1719
|
|
|
1720
|
+
// cli/src/service/installation/installation-progress.formatter.ts
|
|
1721
|
+
function createDownloadProgress(totalBytes, output = process.stderr) {
|
|
1722
|
+
const startedAt = performance.now();
|
|
1723
|
+
let lastPaint = -Infinity;
|
|
1724
|
+
let previousLength = 0;
|
|
1725
|
+
const interactive = output.isTTY === true && process.env.TERM !== "dumb";
|
|
1726
|
+
return (receivedBytes, status) => {
|
|
1727
|
+
const now = performance.now();
|
|
1728
|
+
const finished = status !== "downloading";
|
|
1729
|
+
if (!finished && now - lastPaint < (interactive ? 150 : 2e3)) return;
|
|
1730
|
+
lastPaint = now;
|
|
1731
|
+
const knownSize = Number.isFinite(totalBytes) && totalBytes > 0;
|
|
1732
|
+
const percent = knownSize ? Math.min(
|
|
1733
|
+
status === "downloaded" && receivedBytes === totalBytes ? 100 : 99,
|
|
1734
|
+
Math.floor(receivedBytes / totalBytes * 100)
|
|
1735
|
+
) : null;
|
|
1736
|
+
const megabytes = (bytes) => (bytes / 1024 / 1024).toFixed(1);
|
|
1737
|
+
const amount = `${megabytes(receivedBytes)}${knownSize ? `/${megabytes(totalBytes)}` : ""} MB`;
|
|
1738
|
+
const speed = `${megabytes(receivedBytes / Math.max((now - startedAt) / 1e3, 1e-3))} MB/s`;
|
|
1739
|
+
const label = status === "failed" ? "\u4E0B\u8F7D\u4E2D\u65AD" : status === "downloaded" ? "\u4E0B\u8F7D\u5B8C\u6210" : "\u4E0B\u8F7D";
|
|
1740
|
+
const width = output.columns ?? 80;
|
|
1741
|
+
const barWidth = Math.max(0, Math.min(20, width - 58));
|
|
1742
|
+
const filled = percent === null ? 0 : Math.floor(percent / 100 * barWidth);
|
|
1743
|
+
const bar = barWidth && percent !== null ? `[${"=".repeat(filled)}${"-".repeat(barWidth - filled)}] ` : "";
|
|
1744
|
+
const line = width < 36 ? `${label} ${percent === null ? `${megabytes(receivedBytes)} MB` : `${percent}%`}` : `${label} ${bar}${percent === null ? "" : `${percent}% `}${amount}${width >= 58 ? ` \xB7 ${speed}` : ""}`;
|
|
1745
|
+
output.write(
|
|
1746
|
+
interactive ? `\r${line}${" ".repeat(Math.max(0, previousLength - line.length))}${finished ? "\n" : ""}` : `${line}
|
|
1747
|
+
`
|
|
1748
|
+
);
|
|
1749
|
+
previousLength = line.length;
|
|
1750
|
+
};
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1712
1753
|
// cli/src/service/installation/npm-bootstrap.service.ts
|
|
1713
1754
|
async function readNpmRelease(directory) {
|
|
1714
1755
|
const bytes = await readFile(join3(directory, "release.json"));
|
|
@@ -1772,15 +1813,15 @@ async function runNpmChild(command, argumentsList) {
|
|
|
1772
1813
|
});
|
|
1773
1814
|
});
|
|
1774
1815
|
}
|
|
1775
|
-
async function
|
|
1816
|
+
async function readPrivateInstallationFile(root, filename = "installation.json") {
|
|
1776
1817
|
try {
|
|
1777
|
-
const file = join3(root,
|
|
1818
|
+
const file = join3(root, filename);
|
|
1778
1819
|
const info = await lstat2(file);
|
|
1779
1820
|
if (!info.isFile() || info.size > 65536 || await realpath2(file) !== file || process.platform !== "win32" && (info.uid !== process.getuid?.() || info.mode & 63))
|
|
1780
|
-
throw new Error("\u5B89\u88C5\
|
|
1821
|
+
throw new Error("\u5B89\u88C5\u5143\u6570\u636E\u4E0D\u662F\u53D7\u4FDD\u62A4\u666E\u901A\u6587\u4EF6");
|
|
1781
1822
|
const value = JSON.parse(await readFile(file, "utf8"));
|
|
1782
1823
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
1783
|
-
throw new Error("\u5B89\u88C5\
|
|
1824
|
+
throw new Error("\u5B89\u88C5\u5143\u6570\u636E\u683C\u5F0F\u65E0\u6548");
|
|
1784
1825
|
return value;
|
|
1785
1826
|
} catch (error) {
|
|
1786
1827
|
if (error.code === "ENOENT") return null;
|
|
@@ -1803,7 +1844,7 @@ async function nativeArchitecture() {
|
|
|
1803
1844
|
}
|
|
1804
1845
|
return process.arch;
|
|
1805
1846
|
}
|
|
1806
|
-
async function installFromNpm(release, argv) {
|
|
1847
|
+
async function installFromNpm(release, argv, onFormat) {
|
|
1807
1848
|
const { values } = parseArgs({
|
|
1808
1849
|
args: argv,
|
|
1809
1850
|
options: {
|
|
@@ -1814,9 +1855,13 @@ async function installFromNpm(release, argv) {
|
|
|
1814
1855
|
"skill-dir": { type: "string", multiple: true },
|
|
1815
1856
|
"update-policy": { type: "string" },
|
|
1816
1857
|
"no-path": { type: "boolean" },
|
|
1817
|
-
"verify-connection": { type: "boolean" }
|
|
1858
|
+
"verify-connection": { type: "boolean" },
|
|
1859
|
+
json: { type: "boolean" },
|
|
1860
|
+
human: { type: "boolean" }
|
|
1818
1861
|
}
|
|
1819
1862
|
});
|
|
1863
|
+
onFormat?.(values.json === true);
|
|
1864
|
+
if (values.json && values.human) throw new Error("--json\u4E0E--human\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");
|
|
1820
1865
|
if (!INSTALL_MODES.includes(values.mode) || !["stable", "trial"].includes(values.channel))
|
|
1821
1866
|
throw new Error("\u5B89\u88C5\u6A21\u5F0F\u6216\u901A\u9053\u65E0\u6548");
|
|
1822
1867
|
const arch = await nativeArchitecture();
|
|
@@ -1831,7 +1876,7 @@ async function installFromNpm(release, argv) {
|
|
|
1831
1876
|
if (target.channel === "trial")
|
|
1832
1877
|
process.stderr.write("\u6CE8\u610F\uFF1A\u5F53\u524D\u76EE\u6807\u4E3A\u8BD5\u7528\u901A\u9053\uFF0C\u539F\u751F\u9A8C\u6536\u672A\u5B8C\u6210\uFF0C\u4E0D\u542F\u7528\u81EA\u52A8\u5347\u7EA7\u3002\n");
|
|
1833
1878
|
const root = resolve2(values.root ?? defaultInstallRoot(target.mode));
|
|
1834
|
-
const previous = await
|
|
1879
|
+
const previous = await readPrivateInstallationFile(root);
|
|
1835
1880
|
process.stderr.write(
|
|
1836
1881
|
`\u6B63\u5728\u9A8C\u8BC1 ${release.name}@${release.version} \u5BF9\u5E94\u7684 ${target.mode}/${target.platform}/${target.arch} \u5BA2\u6237\u7AEF\u3002
|
|
1837
1882
|
`
|
|
@@ -1855,7 +1900,9 @@ async function installFromNpm(release, argv) {
|
|
|
1855
1900
|
const size = await downloadFile(
|
|
1856
1901
|
sameOriginUrl(artifact.url, target.manifest),
|
|
1857
1902
|
archive,
|
|
1858
|
-
512 * 1024 * 1024
|
|
1903
|
+
512 * 1024 * 1024,
|
|
1904
|
+
false,
|
|
1905
|
+
values.json ? void 0 : createDownloadProgress(artifact.size)
|
|
1859
1906
|
);
|
|
1860
1907
|
if (size !== artifact.size || await fileDigest(archive) !== artifact.sha256)
|
|
1861
1908
|
throw new Error("\u5BA2\u6237\u7AEF\u5927\u5C0F\u6216\u6458\u8981\u4E0D\u4E00\u81F4");
|
|
@@ -1876,6 +1923,7 @@ async function installFromNpm(release, argv) {
|
|
|
1876
1923
|
"--archive-path",
|
|
1877
1924
|
archive
|
|
1878
1925
|
];
|
|
1926
|
+
if (values.json) installerArguments.push("--json");
|
|
1879
1927
|
for (const option of ["config", "update-policy"])
|
|
1880
1928
|
if (values[option]) installerArguments.push("--" + option, values[option]);
|
|
1881
1929
|
for (const directory of values["skill-dir"] ?? [])
|
|
@@ -1891,14 +1939,9 @@ async function installFromNpm(release, argv) {
|
|
|
1891
1939
|
[join3(application, "dist/service/installation/install.entry.js"), ...installerArguments]
|
|
1892
1940
|
);
|
|
1893
1941
|
if (status !== 0) return status;
|
|
1894
|
-
const receipt = await
|
|
1942
|
+
const receipt = await readPrivateInstallationFile(root);
|
|
1895
1943
|
if (receipt?.build_id !== artifact.build_id || receipt.root !== root || receipt.command !== launcherPath(root))
|
|
1896
1944
|
throw new Error("\u5B89\u88C5\u56DE\u6267\u4E0E\u76EE\u6807\u4E0D\u4E00\u81F4");
|
|
1897
|
-
process.stderr.write(
|
|
1898
|
-
`\u5B89\u88C5\u5B8C\u6210\u3002\u65B0\u5F00\u7EC8\u7AEF\u8FD0\u884C kscs --version\uFF1B\u672C\u4EBA\u6388\u6743\u8BF7\u8FD0\u884C kscs auth login\u3002
|
|
1899
|
-
\u7EDD\u5BF9\u5165\u53E3\uFF1A${receipt.command}
|
|
1900
|
-
`
|
|
1901
|
-
);
|
|
1902
1945
|
return 0;
|
|
1903
1946
|
} finally {
|
|
1904
1947
|
await rm(stage, { recursive: true, force: true });
|
|
@@ -1906,13 +1949,21 @@ async function installFromNpm(release, argv) {
|
|
|
1906
1949
|
}
|
|
1907
1950
|
async function forwardNpmCommand(argv) {
|
|
1908
1951
|
const root = defaultInstallRoot("personal");
|
|
1909
|
-
const receipt = await
|
|
1952
|
+
const receipt = await readPrivateInstallationFile(root);
|
|
1910
1953
|
if (!receipt || receipt.installer_runtime !== "node" || receipt.root !== root || receipt.command !== launcherPath(root) || typeof receipt.build_id !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,100}$/.test(receipt.build_id))
|
|
1911
1954
|
throw new Error(
|
|
1912
1955
|
"\u672A\u627E\u5230\u6709\u6548\u4E2A\u4EBA\u5B89\u88C5\uFF0C\u8BF7\u5148\u8FD0\u884C npx <\u5305\u540D>@latest install\uFF1B\u81EA\u5B9A\u4E49\u6216\u56E2\u961F\u5B89\u88C5\u8BF7\u4F7F\u7528\u56DE\u6267\u4E2D\u7684\u7EDD\u5BF9\u5165\u53E3"
|
|
1913
1956
|
);
|
|
1914
|
-
const
|
|
1915
|
-
if (
|
|
1957
|
+
const expectedApplication = join3(root, "releases", receipt.build_id);
|
|
1958
|
+
if (process.platform === "win32") {
|
|
1959
|
+
const pointer = await readPrivateInstallationFile(root, "current.json");
|
|
1960
|
+
if (pointer?.release !== `releases/${receipt.build_id}`)
|
|
1961
|
+
throw new Error("\u7248\u672C\u6307\u9488\u4E0E\u56DE\u6267\u4E0D\u4E00\u81F4");
|
|
1962
|
+
}
|
|
1963
|
+
const application = await realpath2(
|
|
1964
|
+
process.platform === "win32" ? expectedApplication : join3(root, "current")
|
|
1965
|
+
);
|
|
1966
|
+
if (application !== expectedApplication)
|
|
1916
1967
|
throw new Error("\u7248\u672C\u6307\u9488\u4E0E\u56DE\u6267\u4E0D\u4E00\u81F4");
|
|
1917
1968
|
return runNpmChild(
|
|
1918
1969
|
join3(application, process.platform === "win32" ? "runtime/node.exe" : "runtime/node"),
|
|
@@ -1921,6 +1972,7 @@ async function forwardNpmCommand(argv) {
|
|
|
1921
1972
|
}
|
|
1922
1973
|
|
|
1923
1974
|
// cli/src/service/installation/npm.entry.ts
|
|
1975
|
+
var jsonOutput = false;
|
|
1924
1976
|
async function main() {
|
|
1925
1977
|
const argv = process.argv.slice(2);
|
|
1926
1978
|
if (argv[0] === "--entry-version") {
|
|
@@ -1936,7 +1988,7 @@ async function main() {
|
|
|
1936
1988
|
\u7528\u6CD5\uFF1Anpx ${NPM_PACKAGE_NAME}@latest install [--mode personal|team] [--channel stable|trial]
|
|
1937
1989
|
\u53EF\u9009\uFF1A--root \u79C1\u6709\u76EE\u5F55 --config \u5DF2\u6709\u914D\u7F6E --skill-dir \u6280\u80FD\u76EE\u5F55 --update-policy off|notify|auto --no-path
|
|
1938
1990
|
|
|
1939
|
-
\u5B89\u88C5\u540E\uFF1Akscs --version\uFF1Bkscs auth login\uFF1Bkscs products list
|
|
1991
|
+
\u5B89\u88C5\u540E\uFF1Akscs --version\uFF1Bkscs auth login\uFF1Bkscs products list
|
|
1940
1992
|
\u65E0\u9700Python\u3001Java\u6216\u7F16\u8BD1\u5668\u3002\u6CA1\u6709Node\u8BF7\u8BBF\u95EE https://cli.xaweiju.com/install/
|
|
1941
1993
|
\u5378\u8F7Dnpm\u5165\u53E3\u4E0D\u4F1A\u5220\u9664\u5B9E\u9645\u5BA2\u6237\u7AEF\u3001\u8EAB\u4EFD\u914D\u7F6E\u6216Skill\u3002
|
|
1942
1994
|
`
|
|
@@ -1947,11 +1999,17 @@ async function main() {
|
|
|
1947
1999
|
process.exitCode = await forwardNpmCommand(argv);
|
|
1948
2000
|
return;
|
|
1949
2001
|
}
|
|
2002
|
+
jsonOutput = argv.includes("--json") && !argv.includes("--human");
|
|
1950
2003
|
const release = await readNpmRelease(resolve3(dirname2(fileURLToPath(import.meta.url)), ".."));
|
|
1951
|
-
process.exitCode = await installFromNpm(release, argv.slice(1))
|
|
2004
|
+
process.exitCode = await installFromNpm(release, argv.slice(1), (json) => {
|
|
2005
|
+
jsonOutput = json;
|
|
2006
|
+
});
|
|
1952
2007
|
}
|
|
1953
2008
|
void main().catch((error) => {
|
|
1954
|
-
|
|
1955
|
-
|
|
2009
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
2010
|
+
process.stderr.write(
|
|
2011
|
+
jsonOutput ? JSON.stringify({ installed: false, status: "installation_failed", message }) + "\n" : `\u5B89\u88C5\u5165\u53E3\u5931\u8D25\uFF1A${message}
|
|
2012
|
+
`
|
|
2013
|
+
);
|
|
1956
2014
|
process.exitCode = 1;
|
|
1957
2015
|
});
|
package/package.json
CHANGED
package/release.json
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"name": "@kscs-inc/cli",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.3",
|
|
5
5
|
"targets": [
|
|
6
6
|
{
|
|
7
7
|
"mode": "personal",
|
|
8
8
|
"platform": "darwin",
|
|
9
9
|
"arch": "x64",
|
|
10
10
|
"channel": "stable",
|
|
11
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/20261024-
|
|
12
|
-
"manifest_sha256": "
|
|
13
|
-
"build_id": "20261024-
|
|
11
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/20261024-205147-150ffa04/manifest.json",
|
|
12
|
+
"manifest_sha256": "8b68c9f8c0f02c275783ef0ed9b2c769145a0b74ee02cbc7d2a1704c91669730",
|
|
13
|
+
"build_id": "20261024-205147-150ffa04"
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"mode": "team",
|
|
17
17
|
"platform": "linux",
|
|
18
18
|
"arch": "x64",
|
|
19
19
|
"channel": "stable",
|
|
20
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/20261024-
|
|
21
|
-
"manifest_sha256": "
|
|
22
|
-
"build_id": "20261024-
|
|
20
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/20261024-205238-92d19b20/manifest.json",
|
|
21
|
+
"manifest_sha256": "37fd66f133b209034bf7dc71147984684085062e8f06448c622fb28833c7d63d",
|
|
22
|
+
"build_id": "20261024-205238-92d19b20"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"mode": "personal",
|
|
26
26
|
"platform": "darwin",
|
|
27
27
|
"arch": "arm64",
|
|
28
28
|
"channel": "trial",
|
|
29
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
30
|
-
"manifest_sha256": "
|
|
31
|
-
"build_id": "20261024-
|
|
29
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205139-99d730ef/manifest.json",
|
|
30
|
+
"manifest_sha256": "d5b56ec09d5b2bb186123dff6b78cca9636a3c5f42bee4851a1e1f17ad03c5ab",
|
|
31
|
+
"build_id": "20261024-205139-99d730ef"
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"mode": "personal",
|
|
35
35
|
"platform": "linux",
|
|
36
|
-
"arch": "
|
|
36
|
+
"arch": "arm64",
|
|
37
37
|
"channel": "trial",
|
|
38
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
39
|
-
"manifest_sha256": "
|
|
40
|
-
"build_id": "20261024-
|
|
38
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205159-3bfdc3cf/manifest.json",
|
|
39
|
+
"manifest_sha256": "cb88595354ca35725b252f4aea14ac1c8f5ab4bf2eb9202c834af692e0770174",
|
|
40
|
+
"build_id": "20261024-205159-3bfdc3cf"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"mode": "personal",
|
|
44
44
|
"platform": "linux",
|
|
45
|
-
"arch": "
|
|
45
|
+
"arch": "x64",
|
|
46
46
|
"channel": "trial",
|
|
47
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
48
|
-
"manifest_sha256": "
|
|
49
|
-
"build_id": "20261024-
|
|
47
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205208-ad8ab2be/manifest.json",
|
|
48
|
+
"manifest_sha256": "2501da9df9ec1abf9caabe0f25ddac37e1bd6b146c252f4d6cffa9b161b20abd",
|
|
49
|
+
"build_id": "20261024-205208-ad8ab2be"
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
|
-
"mode": "
|
|
53
|
-
"platform": "
|
|
52
|
+
"mode": "personal",
|
|
53
|
+
"platform": "win32",
|
|
54
54
|
"arch": "arm64",
|
|
55
55
|
"channel": "trial",
|
|
56
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
57
|
-
"manifest_sha256": "
|
|
58
|
-
"build_id": "20261024-
|
|
56
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205216-e727b0b6/manifest.json",
|
|
57
|
+
"manifest_sha256": "78e27b46c869bff48820ba328330ca427fc43d890e6e4c1524049b8324cf0919",
|
|
58
|
+
"build_id": "20261024-205216-e727b0b6"
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
"mode": "personal",
|
|
62
62
|
"platform": "win32",
|
|
63
63
|
"arch": "x64",
|
|
64
64
|
"channel": "trial",
|
|
65
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
66
|
-
"manifest_sha256": "
|
|
67
|
-
"build_id": "20261024-
|
|
65
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205223-61cb60b3/manifest.json",
|
|
66
|
+
"manifest_sha256": "34eb9a002316f88613347a1f00aa435328a85b4494006204e410649b2dcc0968",
|
|
67
|
+
"build_id": "20261024-205223-61cb60b3"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
"mode": "
|
|
71
|
-
"platform": "
|
|
70
|
+
"mode": "team",
|
|
71
|
+
"platform": "linux",
|
|
72
72
|
"arch": "arm64",
|
|
73
73
|
"channel": "trial",
|
|
74
|
-
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-
|
|
75
|
-
"manifest_sha256": "
|
|
76
|
-
"build_id": "20261024-
|
|
74
|
+
"manifest": "https://cli.xaweiju.com/downloads/cli/node/trial/20261024-205230-70cc3f63/manifest.json",
|
|
75
|
+
"manifest_sha256": "61464d87a718b615c22f5d85ee5dba499e96ddd372b46834af513c9af74a24d2",
|
|
76
|
+
"build_id": "20261024-205230-70cc3f63"
|
|
77
77
|
}
|
|
78
78
|
]
|
|
79
79
|
}
|
package/release.signature.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"algorithm":"Ed25519","key_id":"kscs-release-20261023","payload":"
|
|
1
|
+
{"algorithm":"Ed25519","key_id":"kscs-release-20261023","payload":"eyJzY2hlbWFfdmVyc2lvbiI6MSwicGF0aCI6Ii9kb3dubG9hZHMvY2xpL25vZGUvbnBtLzAuMy4zL3JlbGVhc2UuanNvbiIsInNoYTI1NiI6ImMzNmEzZDZjMmJiZGU3YjdmZmYzY2E2MGE0NzlmYzdhOGJiNTllMTFlNTc5NGQ2M2YwMzk4ZWNmZjlhMDA0OWQiLCJpc3N1ZWRfYXQiOjE3OTI4NDc4MjYsImV4cGlyZXNfYXQiOjE4MjQzODM4MjZ9","signature":"reqgM4s6QU2nq+K5ghupNEFGEA7o/PXYjeLFcISh0oSJIiM4cWTnV6QguZLcwMfzIiESpPhw5phdQBNm0CpCDQ=="}
|