ability-cli 0.3.0 → 0.3.2
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/dist/index.js +81 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ ability-cli doctor
|
|
|
79
79
|
|
|
80
80
|
| 选项 | 说明 |
|
|
81
81
|
|------|------|
|
|
82
|
-
| `--env <env>` | 环境:`test` / `prod`,选用配置文件中哪一套 `profiles`(主要影响 `baseUrl`) |
|
|
82
|
+
| `--env <env>` | 环境:`test` / `stg` / `prod`,选用配置文件中哪一套 `profiles`(主要影响 `baseUrl`) |
|
|
83
83
|
| `--auth-token <token>` | 授权密钥 `sk-…`,写入请求头 `Authorization` |
|
|
84
84
|
| `--base-url <url>` | 网关根地址(真实路径为 `{baseUrl}/ability-service/api/agent/v1/...`) |
|
|
85
85
|
| `--device-id <id>` | 设备 ID,写入请求头 `zy-device-id`,并参与部分接口 query |
|
|
@@ -213,7 +213,7 @@ GET `/ability-service/api/agent/v1/ability/category`。
|
|
|
213
213
|
|
|
214
214
|
#### `doctor`
|
|
215
215
|
|
|
216
|
-
检查配置文件路径、当前环境、解析后的 **`Authorization(sk)`** / **`zy-device-id`** / **`baseUrl
|
|
216
|
+
检查配置文件路径、当前环境、解析后的 **`Authorization(sk)`** / **`zy-device-id`** / **`baseUrl`**。
|
|
217
217
|
|
|
218
218
|
---
|
|
219
219
|
|
|
@@ -223,7 +223,7 @@ GET `/ability-service/api/agent/v1/ability/category`。
|
|
|
223
223
|
|
|
224
224
|
默认路径:**`~/.ability-cli/config.json`**。
|
|
225
225
|
|
|
226
|
-
首次运行若文件不存在,会使用内置默认:当前环境 **`prod`**,`test` / `prod` 各有一套 `baseUrl`;`profiles.*.authToken`(sk)、`defaults.deviceId` 等为空字符串。
|
|
226
|
+
首次运行若文件不存在,会使用内置默认:当前环境 **`prod`**,`test` / `stg` / `prod` 各有一套 `baseUrl`;`profiles.*.authToken`(sk)、`defaults.deviceId` 等为空字符串。
|
|
227
227
|
|
|
228
228
|
通过 `ability-cli config set` 写入后,会按 `env` 更新对应 `profiles[env]` 下的 `baseUrl`、`authToken`(sk)等;`defaults` 下可保存默认设备 ID 等。
|
|
229
229
|
|
|
@@ -231,7 +231,7 @@ GET `/ability-service/api/agent/v1/ability/category`。
|
|
|
231
231
|
|
|
232
232
|
| 变量 | 作用 |
|
|
233
233
|
|------|------|
|
|
234
|
-
| `ABILITY_CLI_ENV` | 选用 `profiles` 的环境键(如 `test` / `prod`) |
|
|
234
|
+
| `ABILITY_CLI_ENV` | 选用 `profiles` 的环境键(如 `test` / `stg` / `prod`) |
|
|
235
235
|
| `ABILITY_CLI_AUTH_TOKEN` | 授权密钥 `sk-…`,对应请求头 `Authorization` |
|
|
236
236
|
| `ABILITY_CLI_DEVICE_ID` | 设备 ID,对应请求头 `zy-device-id`,并参与部分 query |
|
|
237
237
|
| `ABILITY_CLI_BASE_URL` | 网关根地址 |
|
|
@@ -242,7 +242,7 @@ GET `/ability-service/api/agent/v1/ability/category`。
|
|
|
242
242
|
|
|
243
243
|
对 **`authToken` / `deviceId` / `baseUrl`**:**子命令参数 > 全局参数 > 对应环境变量 > 配置文件**(子命令与全局选项先做对象合并,后者覆盖前者)。
|
|
244
244
|
|
|
245
|
-
当前激活的 **profile(test
|
|
245
|
+
当前激活的 **profile(test / stg / prod)** 由 **`ABILITY_CLI_ENV`(若设置)** 与配置文件中的 **`env`** 字段共同决定(环境变量优先)。
|
|
246
246
|
|
|
247
247
|
---
|
|
248
248
|
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,10 @@ var DEFAULT_CONFIG = {
|
|
|
17
17
|
baseUrl: "https://biz-gw.zyqltest.com",
|
|
18
18
|
authToken: ""
|
|
19
19
|
},
|
|
20
|
+
stg: {
|
|
21
|
+
baseUrl: "https://biz-gw-in.zyql.com",
|
|
22
|
+
authToken: ""
|
|
23
|
+
},
|
|
20
24
|
prod: {
|
|
21
25
|
baseUrl: "https://biz-gw.zyql.com",
|
|
22
26
|
authToken: ""
|
|
@@ -34,7 +38,33 @@ function loadConfig(configPath) {
|
|
|
34
38
|
const p = configPath ?? getDefaultConfigPath();
|
|
35
39
|
if (!fs.existsSync(p)) return structuredClone(DEFAULT_CONFIG);
|
|
36
40
|
const raw = fs.readFileSync(p, "utf-8");
|
|
37
|
-
|
|
41
|
+
const parsed = JSON.parse(raw);
|
|
42
|
+
const defaults = parsed.defaults ?? {};
|
|
43
|
+
const profiles = parsed.profiles ?? {};
|
|
44
|
+
const mergedProfiles = {
|
|
45
|
+
...structuredClone(DEFAULT_CONFIG).profiles
|
|
46
|
+
};
|
|
47
|
+
for (const [name, profile] of Object.entries(profiles)) {
|
|
48
|
+
const prev = mergedProfiles[name] ?? { baseUrl: "", authToken: "" };
|
|
49
|
+
const incoming = profile ?? {};
|
|
50
|
+
const normalized = { ...incoming };
|
|
51
|
+
if (typeof incoming.baseUrl === "undefined" || incoming.baseUrl.trim() === "") {
|
|
52
|
+
normalized.baseUrl = prev.baseUrl;
|
|
53
|
+
}
|
|
54
|
+
mergedProfiles[name] = {
|
|
55
|
+
...prev,
|
|
56
|
+
...normalized
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
...structuredClone(DEFAULT_CONFIG),
|
|
61
|
+
...parsed,
|
|
62
|
+
defaults: {
|
|
63
|
+
...structuredClone(DEFAULT_CONFIG).defaults,
|
|
64
|
+
...defaults
|
|
65
|
+
},
|
|
66
|
+
profiles: mergedProfiles
|
|
67
|
+
};
|
|
38
68
|
}
|
|
39
69
|
function saveConfig(configPath, config) {
|
|
40
70
|
const dir = path.dirname(configPath);
|
|
@@ -135,7 +165,7 @@ function mergeConfigSetOpts(program2, opts) {
|
|
|
135
165
|
}
|
|
136
166
|
function registerConfigCommand(program2) {
|
|
137
167
|
const cfg = program2.command("config").description("\u7BA1\u7406 CLI \u914D\u7F6E");
|
|
138
|
-
cfg.command("set").description("\u8BBE\u7F6E\u914D\u7F6E\u9879").option("--env <env>", "\u73AF\u5883 (test/prod)").option("--auth-token <token>", "Authorization token\uFF08sk\uFF09").option("--base-url <url>", "\u7F51\u5173\u5730\u5740").option("--device-id <id>", "\u9ED8\u8BA4\u8BBE\u5907ID").option("--timeout <ms>", "\u9ED8\u8BA4\u8C03\u7528\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09\uFF0C\u5199\u5165 defaults.timeout").action((opts) => {
|
|
168
|
+
cfg.command("set").description("\u8BBE\u7F6E\u914D\u7F6E\u9879").option("--env <env>", "\u73AF\u5883 (test/stg/prod)").option("--auth-token <token>", "Authorization token\uFF08sk\uFF09").option("--base-url <url>", "\u7F51\u5173\u5730\u5740").option("--device-id <id>", "\u9ED8\u8BA4\u8BBE\u5907ID").option("--timeout <ms>", "\u9ED8\u8BA4\u8C03\u7528\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09\uFF0C\u5199\u5165 defaults.timeout").action((opts) => {
|
|
139
169
|
const m = mergeConfigSetOpts(program2, opts);
|
|
140
170
|
const configPath = getDefaultConfigPath();
|
|
141
171
|
const config = loadConfig(configPath);
|
|
@@ -278,13 +308,19 @@ function registerRawCommand(program2) {
|
|
|
278
308
|
const res = await apiGet(ctx, agentPath.abilityList, params);
|
|
279
309
|
handleApiResponse(res, opts.json, (data) => printAbilityTable(data));
|
|
280
310
|
});
|
|
281
|
-
raw.command("app-info").description("GET \u5E94\u7528\u4FE1\u606F").
|
|
311
|
+
raw.command("app-info").description("GET \u5E94\u7528\u4FE1\u606F").addHelpText(
|
|
312
|
+
"after",
|
|
313
|
+
"\n\u63D0\u793A\uFF1A\u9009\u9879\u8BF4\u660E\u4E2D\u4EE5\u300C\u3010\u5FC5\u586B\u3011\u300D\u5F00\u5934\u7684\u5FC5\u987B\u63D0\u4F9B\uFF0C\u5176\u4F59\u5747\u4E3A\u53EF\u9009\u3002\n"
|
|
314
|
+
).requiredOption("--package-name <pkg>", "\u3010\u5FC5\u586B\u3011\u5E94\u7528\u5305\u540D").option("--json", "JSON \u8F93\u51FA").action(async (opts) => {
|
|
282
315
|
const merged = { ...program2.opts(), ...opts };
|
|
283
316
|
const ctx = buildAgentRequestContext(merged);
|
|
284
317
|
const res = await apiGet(ctx, agentPath.appInfo, { packageName: opts.packageName });
|
|
285
318
|
handleApiResponse(res, opts.json, (data) => printJson(data));
|
|
286
319
|
});
|
|
287
|
-
raw.command("ability-info").description("GET \u80FD\u529B\u8BE6\u60C5").
|
|
320
|
+
raw.command("ability-info").description("GET \u80FD\u529B\u8BE6\u60C5").addHelpText(
|
|
321
|
+
"after",
|
|
322
|
+
"\n\u63D0\u793A\uFF1A\u9009\u9879\u8BF4\u660E\u4E2D\u4EE5\u300C\u3010\u5FC5\u586B\u3011\u300D\u5F00\u5934\u7684\u5FC5\u987B\u63D0\u4F9B\uFF0C\u5176\u4F59\u5747\u4E3A\u53EF\u9009\u3002\n"
|
|
323
|
+
).requiredOption("--ability-id <id>", "\u3010\u5FC5\u586B\u3011\u80FD\u529B ID").option("--device-id <id>", "\u8BBE\u5907 ID\uFF1B\u7AEF\u4FA7\u80FD\u529B\u5EFA\u8BAE\u586B\u5199").option("--json", "JSON \u8F93\u51FA").action(async (opts) => {
|
|
288
324
|
const merged = { ...program2.opts(), ...opts };
|
|
289
325
|
const ctx = buildAgentRequestContext(merged);
|
|
290
326
|
const params = { abilityId: opts.abilityId };
|
|
@@ -292,7 +328,10 @@ function registerRawCommand(program2) {
|
|
|
292
328
|
const res = await apiGet(ctx, agentPath.abilityInfo, params);
|
|
293
329
|
handleApiResponse(res, opts.json, (data) => printJson(data));
|
|
294
330
|
});
|
|
295
|
-
raw.command("call").description("POST \u6267\u884C\u80FD\u529B\uFF08Agent API\uFF09").
|
|
331
|
+
raw.command("call").description("POST \u6267\u884C\u80FD\u529B\uFF08Agent API\uFF09").addHelpText(
|
|
332
|
+
"after",
|
|
333
|
+
"\n\u63D0\u793A\uFF1A\u9009\u9879\u8BF4\u660E\u4E2D\u4EE5\u300C\u3010\u5FC5\u586B\u3011\u300D\u5F00\u5934\u7684\u5FC5\u987B\u63D0\u4F9B\uFF0C\u5176\u4F59\u5747\u4E3A\u53EF\u9009\u3002\n"
|
|
334
|
+
).requiredOption("--file <path>", "\u3010\u5FC5\u586B\u3011\u8BF7\u6C42\u4F53 JSON \u6587\u4EF6\u8DEF\u5F84").option("--json", "JSON \u8F93\u51FA").action(async (opts) => {
|
|
296
335
|
const merged = { ...program2.opts(), ...opts };
|
|
297
336
|
const ctx = buildAgentRequestContext(merged);
|
|
298
337
|
const data = JSON.parse(fs2.readFileSync(opts.file, "utf-8"));
|
|
@@ -358,7 +397,10 @@ function generateTemplate(schema) {
|
|
|
358
397
|
return result;
|
|
359
398
|
}
|
|
360
399
|
function registerInspectCommand(program2) {
|
|
361
|
-
program2.command("inspect").description("\u67E5\u770B\u80FD\u529B\u8BE6\u60C5\u4E0E inputSchema").
|
|
400
|
+
program2.command("inspect").description("\u67E5\u770B\u80FD\u529B\u8BE6\u60C5\u4E0E inputSchema").addHelpText(
|
|
401
|
+
"after",
|
|
402
|
+
"\n\u63D0\u793A\uFF1A\u9009\u9879\u8BF4\u660E\u4E2D\u4EE5\u300C\u3010\u5FC5\u586B\u3011\u300D\u5F00\u5934\u7684\u5FC5\u987B\u63D0\u4F9B\uFF0C\u5176\u4F59\u5747\u4E3A\u53EF\u9009\u3002\n"
|
|
403
|
+
).requiredOption("--ability-id <id>", "\u3010\u5FC5\u586B\u3011\u80FD\u529B ID").option("--device-id <id>", "\u8BBE\u5907 ID\uFF1B\u7AEF\u4FA7\u80FD\u529B\u5EFA\u8BAE\u586B\u5199").option("--gen-template", "\u751F\u6210\u53C2\u6570\u6A21\u677F JSON").option("--json", "JSON \u8F93\u51FA").action(async (opts) => {
|
|
362
404
|
const merged = { ...program2.opts(), ...opts };
|
|
363
405
|
const ctx = buildAgentRequestContext(merged);
|
|
364
406
|
const params = { abilityId: opts.abilityId };
|
|
@@ -377,8 +419,33 @@ function registerInspectCommand(program2) {
|
|
|
377
419
|
// src/commands/exec.ts
|
|
378
420
|
import { randomUUID } from "crypto";
|
|
379
421
|
import fs3 from "fs";
|
|
422
|
+
|
|
423
|
+
// src/parse-cli-json.ts
|
|
424
|
+
function parseCliJsonString(raw, label) {
|
|
425
|
+
const s = raw.replace(/^\uFEFF/, "").trim();
|
|
426
|
+
if (!s) return {};
|
|
427
|
+
try {
|
|
428
|
+
return JSON.parse(s);
|
|
429
|
+
} catch (e) {
|
|
430
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
431
|
+
let hint = "";
|
|
432
|
+
if (/^\s*\{\s*'/.test(s)) {
|
|
433
|
+
hint = " JSON \u952E\u540D\u987B\u7528\u82F1\u6587\u53CC\u5F15\u53F7\uFF1B\u5F53\u524D\u5185\u5BB9\u5728 { \u540E\u51FA\u73B0\u4E86\u5355\u5F15\u53F7\u3002\u6700\u7A33\u59A5\uFF1A\u5C06 JSON \u5B58\u4E3A params.json\uFF08UTF-8\uFF09\uFF0C\u518D\u4F7F\u7528 --params params.json\u3002";
|
|
434
|
+
} else if (/[\u201c\u201d\u2018\u2019]/.test(s)) {
|
|
435
|
+
hint = ' \u68C0\u6D4B\u5230\u5F2F\u5F15\u53F7\uFF08\u201C \u201D \u2018 \u2019\uFF09\u3002\u8BF7\u6539\u4E3A ASCII \u53CC\u5F15\u53F7 " \u3002';
|
|
436
|
+
}
|
|
437
|
+
const preview = s.length > 160 ? `${s.slice(0, 160)}\u2026` : s;
|
|
438
|
+
throw new Error(`${label} \u89E3\u6790\u5931\u8D25\uFF1A${msg}.${hint}
|
|
439
|
+
\u5B9E\u9645\u6536\u5230\u7684\u5F00\u5934\uFF1A${JSON.stringify(preview.slice(0, 80))}`);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// src/commands/exec.ts
|
|
380
444
|
function registerExecCommand(program2) {
|
|
381
|
-
program2.command("exec").description("\u6267\u884C\u80FD\u529B").
|
|
445
|
+
program2.command("exec").description("\u6267\u884C\u80FD\u529B").addHelpText(
|
|
446
|
+
"after",
|
|
447
|
+
"\n\u63D0\u793A\uFF1A\u9009\u9879\u8BF4\u660E\u4E2D\u4EE5\u300C\u3010\u5FC5\u586B\u3011\u300D\u5F00\u5934\u7684\u5FC5\u987B\u63D0\u4F9B\uFF0C\u5176\u4F59\u5747\u4E3A\u53EF\u9009\u3002\n"
|
|
448
|
+
).requiredOption("--ability-id <id>", "\u3010\u5FC5\u586B\u3011\u80FD\u529B ID").option("--params <json>", "\u53C2\u6570 JSON \u5B57\u7B26\u4E32\u6216\u6587\u4EF6\u8DEF\u5F84").option("--device-id <id>", "\u8BBE\u5907ID").option("--message-id <id>", "messageId").option("--trace-id <id>", "traceId").option("--timeout <ms>", "\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09\uFF1B\u4E0D\u4F20\u5219\u7528\u914D\u7F6E\u6587\u4EF6 defaults.timeout\uFF0C\u9ED8\u8BA4 30000").option("--response-type <type>", "\u8FD4\u56DE\u503C\u5904\u7406\u65B9\u5F0F: NONE | MCP | CONVERT").option("--json", "JSON \u8F93\u51FA").action(async (opts) => {
|
|
382
449
|
const merged = { ...program2.opts(), ...opts };
|
|
383
450
|
const ctx = buildAgentRequestContext(merged);
|
|
384
451
|
const cliCfg = loadConfig();
|
|
@@ -386,9 +453,10 @@ function registerExecCommand(program2) {
|
|
|
386
453
|
let params = {};
|
|
387
454
|
if (opts.params) {
|
|
388
455
|
if (fs3.existsSync(opts.params)) {
|
|
389
|
-
|
|
456
|
+
const text = fs3.readFileSync(opts.params, "utf-8");
|
|
457
|
+
params = parseCliJsonString(text, "\u53C2\u6570\u6587\u4EF6");
|
|
390
458
|
} else {
|
|
391
|
-
params =
|
|
459
|
+
params = parseCliJsonString(opts.params, "--params");
|
|
392
460
|
}
|
|
393
461
|
}
|
|
394
462
|
const body = {
|
|
@@ -455,16 +523,17 @@ function registerSignCommand(program2) {
|
|
|
455
523
|
// src/commands/doctor.ts
|
|
456
524
|
import chalk3 from "chalk";
|
|
457
525
|
function registerDoctorCommand(program2) {
|
|
458
|
-
program2.command("doctor").description("\u68C0\u67E5\u914D\u7F6E\u5B8C\u6574\u6027
|
|
526
|
+
program2.command("doctor").description("\u68C0\u67E5\u914D\u7F6E\u5B8C\u6574\u6027").action(async () => {
|
|
459
527
|
const merged = program2.opts();
|
|
460
528
|
const ctx = buildAgentRequestContext(merged);
|
|
461
529
|
let ok = true;
|
|
462
530
|
console.log(chalk3.bold.cyan("\n\u2500\u2500 CLI \u5065\u5EB7\u68C0\u67E5 \u2500\u2500\n"));
|
|
463
531
|
const configPath = getDefaultConfigPath();
|
|
464
532
|
const config = loadConfig();
|
|
533
|
+
const effectiveEnv = process.env.ABILITY_CLI_ENV ?? merged.env ?? config.env;
|
|
465
534
|
const checks = [
|
|
466
535
|
["\u914D\u7F6E\u6587\u4EF6", configPath, true],
|
|
467
|
-
["\u5F53\u524D\u73AF\u5883",
|
|
536
|
+
["\u5F53\u524D\u73AF\u5883", effectiveEnv, true],
|
|
468
537
|
["baseUrl", ctx.baseUrl || "(\u7A7A)", !!ctx.baseUrl],
|
|
469
538
|
["Authorization(sk)", ctx.authToken ? "******" : "(\u7A7A)", !!ctx.authToken],
|
|
470
539
|
["zy-device-id", ctx.deviceId || "(\u7A7A)", !!ctx.deviceId]
|
|
@@ -474,19 +543,6 @@ function registerDoctorCommand(program2) {
|
|
|
474
543
|
console.log(` ${icon} ${chalk3.gray(label + ":")} ${val}`);
|
|
475
544
|
if (!pass) ok = false;
|
|
476
545
|
}
|
|
477
|
-
try {
|
|
478
|
-
const res = await fetch(`${ctx.baseUrl}/time`);
|
|
479
|
-
const body = await res.json();
|
|
480
|
-
if (body.code === 200) {
|
|
481
|
-
console.log(` ${chalk3.green("\u2714")} ${chalk3.gray("\u7F51\u5173\u8FDE\u901A(/time):")} ${body.data}`);
|
|
482
|
-
} else {
|
|
483
|
-
console.log(` ${chalk3.red("\u2716")} ${chalk3.gray("\u7F51\u5173\u8FDE\u901A(/time):")} \u8FD4\u56DE code=${body.code}`);
|
|
484
|
-
ok = false;
|
|
485
|
-
}
|
|
486
|
-
} catch (e) {
|
|
487
|
-
console.log(` ${chalk3.red("\u2716")} ${chalk3.gray("\u7F51\u5173\u8FDE\u901A(/time):")} ${e.message}`);
|
|
488
|
-
ok = false;
|
|
489
|
-
}
|
|
490
546
|
console.log();
|
|
491
547
|
if (ok) {
|
|
492
548
|
console.log(chalk3.green(" \u4E00\u5207\u6B63\u5E38\uFF0C\u53EF\u4EE5\u5F00\u59CB\u4F7F\u7528\uFF01"));
|
|
@@ -504,7 +560,7 @@ function readPackageVersion() {
|
|
|
504
560
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
505
561
|
return pkg.version ?? "0.0.0";
|
|
506
562
|
}
|
|
507
|
-
program.name("ability-cli").description("\u539F\u5B50\u80FD\u529B\u5E73\u53F0 CLI \u5DE5\u5177").version(readPackageVersion()).option("--env <env>", "\u73AF\u5883 (test/prod)\uFF0C\u9009\u62E9 profiles \u4E2D\u54EA\u5957 baseUrl").option("--auth-token <token>", "Authorization\uFF08sk-\u2026\uFF09\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("--base-url <url>", "\u7F51\u5173\u6839\u5730\u5740\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("--device-id <id>", "\u8BBE\u5907 ID\uFF08zy-device-id \u8BF7\u6C42\u5934 / \u90E8\u5206 query\uFF09\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("-v, --verbose", "\u8BE6\u7EC6\u8F93\u51FA");
|
|
563
|
+
program.name("ability-cli").description("\u539F\u5B50\u80FD\u529B\u5E73\u53F0 CLI \u5DE5\u5177").version(readPackageVersion()).option("--env <env>", "\u73AF\u5883 (test/stg/prod)\uFF0C\u9009\u62E9 profiles \u4E2D\u54EA\u5957 baseUrl").option("--auth-token <token>", "Authorization\uFF08sk-\u2026\uFF09\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("--base-url <url>", "\u7F51\u5173\u6839\u5730\u5740\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("--device-id <id>", "\u8BBE\u5907 ID\uFF08zy-device-id \u8BF7\u6C42\u5934 / \u90E8\u5206 query\uFF09\uFF0C\u8986\u76D6\u73AF\u5883\u53D8\u91CF\u4E0E\u914D\u7F6E").option("-v, --verbose", "\u8BE6\u7EC6\u8F93\u51FA");
|
|
508
564
|
registerConfigCommand(program);
|
|
509
565
|
registerRawCommand(program);
|
|
510
566
|
registerSearchCommand(program);
|