siluzan-cso-cli 1.1.12 → 1.1.14

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.
Files changed (29) hide show
  1. package/README.md +34 -30
  2. package/dist/{chunk-K7JCQOEZ.js → chunk-TVHODPID.js} +28 -20
  3. package/dist/{extract-cover-QK3HAZI2.js → extract-cover-RZ5OIHTV.js} +1 -1
  4. package/dist/index.js +685 -353
  5. package/dist/skill/SKILL.md +52 -53
  6. package/dist/skill/_meta.json +2 -2
  7. package/dist/skill/assets/three-lib-content-workflow.example.md +14 -1
  8. package/dist/skill/assets//344/272/247/345/223/201/350/265/204/344/272/247/345/272/223.md +1 -1
  9. package/dist/skill/assets//346/265/201/351/207/217/345/233/240/345/255/220/345/272/223.md +353 -351
  10. package/dist/skill/assets//347/203/271/350/260/203/346/226/271/346/263/225/345/272/223.md +1 -1
  11. package/dist/skill/references/account-group.md +15 -15
  12. package/dist/skill/references/authorize.md +8 -9
  13. package/dist/skill/references/extract-cover.md +14 -14
  14. package/dist/skill/references/list-accounts.md +31 -31
  15. package/dist/skill/references/persona.md +13 -13
  16. package/dist/skill/references/planning.md +26 -26
  17. package/dist/skill/references/publish.md +17 -9
  18. package/dist/skill/references/rag.md +25 -18
  19. package/dist/skill/references/report.md +35 -35
  20. package/dist/skill/references/setup.md +7 -4
  21. package/dist/skill/references/task.md +22 -21
  22. package/dist/skill/references/upload.md +5 -5
  23. package/dist/skill/references/web-pages.md +38 -40
  24. package/dist/skill/three-lib-content-workflow/collaboration.md +11 -0
  25. package/dist/skill/three-lib-content-workflow/content-writer.workflow.md +4 -3
  26. package/dist/skill/three-lib-content-workflow/persona-reverse-sop.md +39 -0
  27. package/dist/skill/three-lib-content-workflow/sop.md +22 -4
  28. package/package.json +20 -20
  29. package/scripts/postinstall.mjs +3 -1
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  __commonJS,
4
4
  __toESM,
5
5
  runExtractCover
6
- } from "./chunk-K7JCQOEZ.js";
6
+ } from "./chunk-TVHODPID.js";
7
7
 
8
8
  // ../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js
9
9
  var require_constants = __commonJS({
@@ -2185,11 +2185,7 @@ function writeSharedConfig(partial) {
2185
2185
  } catch {
2186
2186
  }
2187
2187
  }
2188
- const keys = [
2189
- "authToken",
2190
- "apiKey",
2191
- "dataPermission"
2192
- ];
2188
+ const keys = ["authToken", "apiKey", "dataPermission"];
2193
2189
  for (const k of keys) {
2194
2190
  if (partial[k] !== void 0) existing[k] = partial[k];
2195
2191
  }
@@ -2238,7 +2234,7 @@ function validateBaseUrl(raw) {
2238
2234
  var DEFAULT_TIMEOUT_MS = 10 * 60 * 1e3;
2239
2235
  var MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
2240
2236
  function rawRequest(url, options) {
2241
- return new Promise((resolve6, reject) => {
2237
+ return new Promise((resolve22, reject) => {
2242
2238
  const parsed = new URL(url);
2243
2239
  const transport = parsed.protocol === "https:" ? https : http;
2244
2240
  const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
@@ -2259,7 +2255,9 @@ function rawRequest(url, options) {
2259
2255
  byteLen += Buffer.byteLength(chunk, "utf8");
2260
2256
  if (maxBytes && byteLen > maxBytes) {
2261
2257
  res.destroy();
2262
- reject(new Error(`\u54CD\u5E94\u4F53\u8D85\u8FC7\u4E0A\u9650\uFF08${(maxBytes / 1024 / 1024).toFixed(0)} MB\uFF09\uFF0C\u5DF2\u4E2D\u65AD\u8FDE\u63A5`));
2258
+ reject(
2259
+ new Error(`\u54CD\u5E94\u4F53\u8D85\u8FC7\u4E0A\u9650\uFF08${(maxBytes / 1024 / 1024).toFixed(0)} MB\uFF09\uFF0C\u5DF2\u4E2D\u65AD\u8FDE\u63A5`)
2260
+ );
2263
2261
  return;
2264
2262
  }
2265
2263
  data += chunk;
@@ -2271,12 +2269,16 @@ function rawRequest(url, options) {
2271
2269
  headers[key.toLowerCase()] = Array.isArray(val) ? val[0] : val;
2272
2270
  }
2273
2271
  }
2274
- resolve6({ status: res.statusCode ?? 0, text: data, headers });
2272
+ resolve22({ status: res.statusCode ?? 0, text: data, headers });
2275
2273
  });
2276
2274
  });
2277
2275
  req.on("timeout", () => {
2278
2276
  req.destroy();
2279
- reject(new Error(`\u8BF7\u6C42\u8D85\u65F6\uFF08${(timeoutMs / 1e3).toFixed(0)} \u79D2\uFF09\uFF1A${options.method ?? "GET"} ${url}`));
2277
+ reject(
2278
+ new Error(
2279
+ `\u8BF7\u6C42\u8D85\u65F6\uFF08${(timeoutMs / 1e3).toFixed(0)} \u79D2\uFF09\uFF1A${options.method ?? "GET"} ${url}`
2280
+ )
2281
+ );
2280
2282
  });
2281
2283
  req.on("error", reject);
2282
2284
  if (options.body) req.write(options.body);
@@ -2377,16 +2379,19 @@ function deriveMainApiOrigin(apiBase) {
2377
2379
  try {
2378
2380
  const u = new URL(apiBase);
2379
2381
  const host = u.hostname.toLowerCase();
2380
- if (!host.endsWith("siluzan.com")) {
2381
- return apiBase.includes("-ci") ? "https://api-ci.siluzan.com" : "https://api.siluzan.com";
2382
- }
2383
- if (host.startsWith("tso-api")) {
2384
- return `${u.protocol}//${host.replace(/^tso-api/, "api")}`;
2385
- }
2386
- if (host === "api.siluzan.com" || host === "api-ci.siluzan.com") {
2387
- return `${u.protocol}//${host}`;
2382
+ const isCi = apiBase.includes("-ci");
2383
+ if (host.endsWith("siluzan.com") || host.endsWith("siluzan.cn")) {
2384
+ if (host.startsWith("tso-api")) {
2385
+ const suffix = host.endsWith("siluzan.cn") ? "siluzan.cn" : "siluzan.com";
2386
+ const apiHost = isCi ? `api-ci.${suffix}` : `api.${suffix}`;
2387
+ return `${u.protocol}//${apiHost}${u.port ? `:${u.port}` : ""}`;
2388
+ }
2389
+ if (host === "api.siluzan.com" || host === "api-ci.siluzan.com" || host === "api.siluzan.cn" || host === "api-ci.siluzan.cn") {
2390
+ return `${u.protocol}//${host}${u.port ? `:${u.port}` : ""}`;
2391
+ }
2392
+ return isCi ? "https://api-ci.siluzan.com" : "https://api.siluzan.com";
2388
2393
  }
2389
- return apiBase.includes("-ci") ? "https://api-ci.siluzan.com" : "https://api.siluzan.com";
2394
+ return isCi ? "https://api-ci.siluzan.com" : "https://api.siluzan.com";
2390
2395
  } catch {
2391
2396
  return apiBase.includes("-ci") ? "https://api-ci.siluzan.com" : "https://api.siluzan.com";
2392
2397
  }
@@ -2445,6 +2450,10 @@ async function fetchSiluzanCurrentUser(apiBase, config) {
2445
2450
  return null;
2446
2451
  }
2447
2452
  }
2453
+ var MIN_SEGMENT_BYTES = 256 * 1024;
2454
+ var MAX_SEGMENT_BYTES = 50 * 1024 * 1024;
2455
+ var MAX_RETENTION_DAYS = 366 * 5;
2456
+ var PRUNE_THROTTLE_MS = 60 * 60 * 1e3;
2448
2457
 
2449
2458
  // src/commands/login.ts
2450
2459
  async function runLogin(opts = {}) {
@@ -2668,11 +2677,10 @@ async function runUpdate(options) {
2668
2677
  }
2669
2678
  if (isNpmGlobalInstall()) {
2670
2679
  try {
2671
- const result = spawnSync(
2672
- "npm",
2673
- ["install", "-g", `siluzan-cso-cli@${targetVersion}`],
2674
- { stdio: "inherit", shell: false }
2675
- );
2680
+ const result = spawnSync("npm", ["install", "-g", `siluzan-cso-cli@${targetVersion}`], {
2681
+ stdio: "inherit",
2682
+ shell: false
2683
+ });
2676
2684
  if (result.status !== 0) {
2677
2685
  throw new Error(`npm install \u9000\u51FA\u7801\uFF1A${result.status ?? "unknown"}`);
2678
2686
  }
@@ -2727,8 +2735,10 @@ async function runUpdate(options) {
2727
2735
  }
2728
2736
  }
2729
2737
  if (failCount > 0) {
2730
- console.error(`
2731
- \u26A0\uFE0F ${targets.length} \u5904\u5B89\u88C5\u4F4D\u7F6E\u4E2D\u6709 ${failCount} \u5904\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u4E0A\u65B9\u9519\u8BEF\u4FE1\u606F\u3002`);
2738
+ console.error(
2739
+ `
2740
+ \u26A0\uFE0F ${targets.length} \u5904\u5B89\u88C5\u4F4D\u7F6E\u4E2D\u6709 ${failCount} \u5904\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u4E0A\u65B9\u9519\u8BEF\u4FE1\u606F\u3002`
2741
+ );
2732
2742
  console.log(" \u5982\u679C AI \u52A9\u624B\u6B63\u5728\u8FD0\u884C\uFF0C\u5EFA\u8BAE\u91CD\u542F\u4EE5\u4F7F\u5DF2\u6210\u529F\u7684 skill \u6587\u4EF6\u751F\u6548\u3002\n");
2733
2743
  process.exit(1);
2734
2744
  }
@@ -2768,7 +2778,14 @@ function loadConfig(tokenArg) {
2768
2778
  \u274C agentBaseUrl \u4E0D\u5408\u6CD5\uFF1A${agentErr}`);
2769
2779
  process.exit(1);
2770
2780
  }
2771
- return { apiBaseUrl, csoBaseUrl, agentBaseUrl, authToken, apiKey, dataPermission: process.env.SILUZAN_DATA_PERMISSION ?? shared.dataPermission };
2781
+ return {
2782
+ apiBaseUrl,
2783
+ csoBaseUrl,
2784
+ agentBaseUrl,
2785
+ authToken,
2786
+ apiKey,
2787
+ dataPermission: process.env.SILUZAN_DATA_PERMISSION ?? shared.dataPermission
2788
+ };
2772
2789
  }
2773
2790
  function apiFetch2(url, config, options = {}, verbose = false) {
2774
2791
  return apiFetch(url, config, options, verbose);
@@ -3002,7 +3019,9 @@ async function runListAccounts(options) {
3002
3019
  \u63D0\u793A\uFF1A\u8FD8\u6709\u66F4\u591A\u8D26\u53F7\uFF0C\u4F7F\u7528 --page ${pageNo + 1} \u53EF\u67E5\u770B\u4E0B\u4E00\u9875\u3002`);
3003
3020
  }
3004
3021
  console.log("\u63D0\u793A\uFF1A\u4F7F\u7528 --json \u53EF\u83B7\u53D6\u5B8C\u6574 JSON \u6570\u636E\uFF08\u542B mediaCustomerId \u7B49\u5B57\u6BB5\uFF09\u3002");
3005
- console.log(`\u63D0\u793A\uFF1A\u8D26\u53F7\u8BE6\u7EC6\u6570\u636E\u8BF7\u767B\u5F55\u540E\u53F0\u67E5\u770B \u{1F449} ${DEFAULT_WEB_BASE}/v3/foreign_trade/cso/ManageAccounts`);
3022
+ console.log(
3023
+ `\u63D0\u793A\uFF1A\u8D26\u53F7\u8BE6\u7EC6\u6570\u636E\u8BF7\u767B\u5F55\u540E\u53F0\u67E5\u770B \u{1F449} ${DEFAULT_WEB_BASE}/v3/foreign_trade/cso/ManageAccounts`
3024
+ );
3006
3025
  }
3007
3026
 
3008
3027
  // src/commands/list-members.ts
@@ -3177,11 +3196,16 @@ async function runAccountGroupCreate(options) {
3177
3196
  const url = `${config.apiBaseUrl}/command/media-account/SetMediaAccountGroup`;
3178
3197
  let res;
3179
3198
  try {
3180
- res = await apiFetch2(url, config, {
3181
- method: "POST",
3182
- headers: { "Content-Type": "application/json" },
3183
- body: JSON.stringify(body)
3184
- }, options.verbose);
3199
+ res = await apiFetch2(
3200
+ url,
3201
+ config,
3202
+ {
3203
+ method: "POST",
3204
+ headers: { "Content-Type": "application/json" },
3205
+ body: JSON.stringify(body)
3206
+ },
3207
+ options.verbose
3208
+ );
3185
3209
  } catch (e) {
3186
3210
  const msg = e.message;
3187
3211
  console.error(`
@@ -3206,7 +3230,9 @@ async function runAccountGroupCreate(options) {
3206
3230
  if (accountIds.length > 0) {
3207
3231
  console.log(` \u5DF2\u6DFB\u52A0 ${accountIds.length} \u4E2A\u8D26\u53F7\uFF1A${accountIds.join(", ")}`);
3208
3232
  } else {
3209
- console.log(" \u63D0\u793A\uFF1A\u5206\u7EC4\u6682\u65E0\u8D26\u53F7\uFF0C\u53EF\u4F7F\u7528 account-group update --id <id> --accounts <ids> \u6DFB\u52A0\u8D26\u53F7");
3233
+ console.log(
3234
+ " \u63D0\u793A\uFF1A\u5206\u7EC4\u6682\u65E0\u8D26\u53F7\uFF0C\u53EF\u4F7F\u7528 account-group update --id <id> --accounts <ids> \u6DFB\u52A0\u8D26\u53F7"
3235
+ );
3210
3236
  }
3211
3237
  console.log("\n\u4F7F\u7528 siluzan-cso account-group list \u67E5\u770B\u6240\u6709\u5206\u7EC4\u3002");
3212
3238
  }
@@ -3222,11 +3248,16 @@ async function runAccountGroupUpdate(options) {
3222
3248
  const url = `${config.apiBaseUrl}/command/media-account/SetMediaAccountGroup`;
3223
3249
  let res;
3224
3250
  try {
3225
- res = await apiFetch2(url, config, {
3226
- method: "POST",
3227
- headers: { "Content-Type": "application/json" },
3228
- body: JSON.stringify(body)
3229
- }, options.verbose);
3251
+ res = await apiFetch2(
3252
+ url,
3253
+ config,
3254
+ {
3255
+ method: "POST",
3256
+ headers: { "Content-Type": "application/json" },
3257
+ body: JSON.stringify(body)
3258
+ },
3259
+ options.verbose
3260
+ );
3230
3261
  } catch (e) {
3231
3262
  const msg = e.message;
3232
3263
  console.error(`
@@ -3312,23 +3343,39 @@ async function runAccountGroupAddAccounts(options) {
3312
3343
  const url = `${config.apiBaseUrl}/command/media-account/SetMediaAccountGroup`;
3313
3344
  let res;
3314
3345
  try {
3315
- res = await apiFetch2(url, config, {
3316
- method: "POST",
3317
- headers: { "Content-Type": "application/json" },
3318
- body: JSON.stringify(body)
3319
- }, options.verbose);
3346
+ res = await apiFetch2(
3347
+ url,
3348
+ config,
3349
+ {
3350
+ method: "POST",
3351
+ headers: { "Content-Type": "application/json" },
3352
+ body: JSON.stringify(body)
3353
+ },
3354
+ options.verbose
3355
+ );
3320
3356
  } catch (e) {
3321
3357
  console.error(`
3322
3358
  \u274C \u8BF7\u6C42\u5931\u8D25\uFF1A${e.message}`);
3323
3359
  process.exit(1);
3324
3360
  }
3325
3361
  if (typeof res !== "string") {
3326
- console.error(`
3327
- \u274C \u6DFB\u52A0\u8D26\u53F7\u5931\u8D25\uFF1A${res.message ?? "\u670D\u52A1\u7AEF\u8FD4\u56DE\u5F02\u5E38"}`);
3362
+ console.error(
3363
+ `
3364
+ \u274C \u6DFB\u52A0\u8D26\u53F7\u5931\u8D25\uFF1A${res.message ?? "\u670D\u52A1\u7AEF\u8FD4\u56DE\u5F02\u5E38"}`
3365
+ );
3328
3366
  process.exit(1);
3329
3367
  }
3330
3368
  if (options.json) {
3331
- console.log(JSON.stringify({ success: true, id: options.id, name, added: addedCount, total: merged.length, accountIds: merged }));
3369
+ console.log(
3370
+ JSON.stringify({
3371
+ success: true,
3372
+ id: options.id,
3373
+ name,
3374
+ added: addedCount,
3375
+ total: merged.length,
3376
+ accountIds: merged
3377
+ })
3378
+ );
3332
3379
  return;
3333
3380
  }
3334
3381
  if (addedCount === 0) {
@@ -3362,31 +3409,51 @@ async function runAccountGroupRemoveAccounts(options) {
3362
3409
  const url = `${config.apiBaseUrl}/command/media-account/SetMediaAccountGroup`;
3363
3410
  let res;
3364
3411
  try {
3365
- res = await apiFetch2(url, config, {
3366
- method: "POST",
3367
- headers: { "Content-Type": "application/json" },
3368
- body: JSON.stringify(body)
3369
- }, options.verbose);
3412
+ res = await apiFetch2(
3413
+ url,
3414
+ config,
3415
+ {
3416
+ method: "POST",
3417
+ headers: { "Content-Type": "application/json" },
3418
+ body: JSON.stringify(body)
3419
+ },
3420
+ options.verbose
3421
+ );
3370
3422
  } catch (e) {
3371
3423
  console.error(`
3372
3424
  \u274C \u8BF7\u6C42\u5931\u8D25\uFF1A${e.message}`);
3373
3425
  process.exit(1);
3374
3426
  }
3375
3427
  if (typeof res !== "string") {
3376
- console.error(`
3377
- \u274C \u79FB\u9664\u8D26\u53F7\u5931\u8D25\uFF1A${res.message ?? "\u670D\u52A1\u7AEF\u8FD4\u56DE\u5F02\u5E38"}`);
3428
+ console.error(
3429
+ `
3430
+ \u274C \u79FB\u9664\u8D26\u53F7\u5931\u8D25\uFF1A${res.message ?? "\u670D\u52A1\u7AEF\u8FD4\u56DE\u5F02\u5E38"}`
3431
+ );
3378
3432
  process.exit(1);
3379
3433
  }
3380
3434
  if (options.json) {
3381
- console.log(JSON.stringify({ success: true, id: options.id, name, removed: removedCount, total: remaining.length, accountIds: remaining }));
3435
+ console.log(
3436
+ JSON.stringify({
3437
+ success: true,
3438
+ id: options.id,
3439
+ name,
3440
+ removed: removedCount,
3441
+ total: remaining.length,
3442
+ accountIds: remaining
3443
+ })
3444
+ );
3382
3445
  return;
3383
3446
  }
3384
3447
  if (removedCount === 0) {
3385
- console.log(`
3386
- \u2139\uFE0F \u6307\u5B9A\u8D26\u53F7\u5747\u4E0D\u5728\u5206\u7EC4\u300C${name}\u300D\u4E2D\uFF0C\u65E0\u9700\u79FB\u9664\uFF08\u5F53\u524D\u5171 ${remaining.length} \u4E2A\uFF09\u3002`);
3448
+ console.log(
3449
+ `
3450
+ \u2139\uFE0F \u6307\u5B9A\u8D26\u53F7\u5747\u4E0D\u5728\u5206\u7EC4\u300C${name}\u300D\u4E2D\uFF0C\u65E0\u9700\u79FB\u9664\uFF08\u5F53\u524D\u5171 ${remaining.length} \u4E2A\uFF09\u3002`
3451
+ );
3387
3452
  } else {
3388
- console.log(`
3389
- \u2705 \u5DF2\u4ECE\u5206\u7EC4\u300C${name}\u300D\u79FB\u9664 ${removedCount} \u4E2A\u8D26\u53F7\uFF08\u5269\u4F59 ${remaining.length} \u4E2A\uFF09`);
3453
+ console.log(
3454
+ `
3455
+ \u2705 \u5DF2\u4ECE\u5206\u7EC4\u300C${name}\u300D\u79FB\u9664 ${removedCount} \u4E2A\u8D26\u53F7\uFF08\u5269\u4F59 ${remaining.length} \u4E2A\uFF09`
3456
+ );
3390
3457
  }
3391
3458
  }
3392
3459
 
@@ -3639,7 +3706,10 @@ function buildImageChannels(posts, currentUserId) {
3639
3706
  if (existing) {
3640
3707
  existing.imageTextToBeSent.push(toBeSent);
3641
3708
  } else {
3642
- channels[mediaType].mediaAccountInfos.push({ ...accountInfo, imageTextToBeSent: [toBeSent] });
3709
+ channels[mediaType].mediaAccountInfos.push({
3710
+ ...accountInfo,
3711
+ imageTextToBeSent: [toBeSent]
3712
+ });
3643
3713
  }
3644
3714
  } else {
3645
3715
  channels[mediaType] = {
@@ -3819,7 +3889,10 @@ async function runPublish(options) {
3819
3889
  console.error("\n\u274C contentType=1\uFF08\u89C6\u9891\uFF09\u65F6\uFF0Cvideos \u6570\u7EC4\u4E0D\u80FD\u4E3A\u7A7A");
3820
3890
  process.exit(1);
3821
3891
  }
3822
- ({ channels, videoType, contents, errorList } = buildVideoChannels(input.videos, currentUserId));
3892
+ ({ channels, videoType, contents, errorList } = buildVideoChannels(
3893
+ input.videos,
3894
+ currentUserId
3895
+ ));
3823
3896
  } else {
3824
3897
  if (!input.posts?.length) {
3825
3898
  console.error("\n\u274C contentType=2\uFF08\u56FE\u6587\uFF09\u65F6\uFF0Cposts \u6570\u7EC4\u4E0D\u80FD\u4E3A\u7A7A");
@@ -3911,11 +3984,7 @@ var SENSITIVE_PATH_PREFIXES = [
3911
3984
  path7.join(os5.homedir(), ".env")
3912
3985
  // 常用本地环境变量文件
3913
3986
  ];
3914
- var SENSITIVE_ABSOLUTE_PATHS = [
3915
- "/etc/passwd",
3916
- "/etc/shadow",
3917
- "/etc/hosts"
3918
- ];
3987
+ var SENSITIVE_ABSOLUTE_PATHS = ["/etc/passwd", "/etc/shadow", "/etc/hosts"];
3919
3988
  function validateUploadPath(resolved) {
3920
3989
  const normalized = resolved.toLowerCase();
3921
3990
  for (const prefix of SENSITIVE_PATH_PREFIXES) {
@@ -4009,10 +4078,15 @@ async function uploadToAzure(filePath, sas, onProgress) {
4009
4078
  }
4010
4079
  async function notifyUploaded(config, body, verbose = false) {
4011
4080
  const url = `${config.csoBaseUrl}/cutapi/v1/material/uploadednotify`;
4012
- const res = await apiFetch2(url, config, {
4013
- method: "POST",
4014
- body: JSON.stringify(body)
4015
- }, verbose);
4081
+ const res = await apiFetch2(
4082
+ url,
4083
+ config,
4084
+ {
4085
+ method: "POST",
4086
+ body: JSON.stringify(body)
4087
+ },
4088
+ verbose
4089
+ );
4016
4090
  if (res.code !== 1 || !res.data?.id) {
4017
4091
  const detail = verbose ? `\uFF1A${JSON.stringify(res)}` : "";
4018
4092
  throw new Error(`\u7D20\u6750\u6CE8\u518C\u5931\u8D25${detail}`);
@@ -4087,18 +4161,22 @@ async function uploadImageFile(filePath, config, verbose = false) {
4087
4161
  const sas = await generateSas(config, verbose);
4088
4162
  const { resourceUrl } = await uploadToAzure(filePath, sas, void 0);
4089
4163
  const dim = readImageDimensions(filePath);
4090
- const materialId = await notifyUploaded(config, {
4091
- folderId: DEFAULT_FOLDER_ID,
4092
- name: fileName,
4093
- url: resourceUrl,
4094
- fileSize,
4095
- type: 1,
4096
- source: 1,
4097
- blobAccount: sas.accountName,
4098
- blobContainer: sas.containerName,
4099
- format,
4100
- image: dim
4101
- }, verbose);
4164
+ const materialId = await notifyUploaded(
4165
+ config,
4166
+ {
4167
+ folderId: DEFAULT_FOLDER_ID,
4168
+ name: fileName,
4169
+ url: resourceUrl,
4170
+ fileSize,
4171
+ type: 1,
4172
+ source: 1,
4173
+ blobAccount: sas.accountName,
4174
+ blobContainer: sas.containerName,
4175
+ format,
4176
+ image: dim
4177
+ },
4178
+ verbose
4179
+ );
4102
4180
  const matInfo = await fetchMaterialInfo(config, materialId, verbose);
4103
4181
  return {
4104
4182
  resourceUrl,
@@ -4180,7 +4258,9 @@ async function runUpload(options) {
4180
4258
  console.error(`
4181
4259
  \u274C \u83B7\u53D6\u4E0A\u4F20\u51ED\u8BC1\u5931\u8D25\uFF1A${msg}`);
4182
4260
  if (msg.includes("401") || msg.includes("403")) {
4183
- console.error(" Token \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E\uFF1A\n siluzan-cso config set --token <\u4F60\u7684 token>");
4261
+ console.error(
4262
+ " Token \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E\uFF1A\n siluzan-cso config set --token <\u4F60\u7684 token>"
4263
+ );
4184
4264
  } else if (!verbose) {
4185
4265
  console.error(" \u52A0 --verbose \u53C2\u6570\u53EF\u67E5\u770B\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F");
4186
4266
  }
@@ -4207,24 +4287,28 @@ async function runUpload(options) {
4207
4287
  const imageDim = kind === "image" ? readImageDimensions(filePath) : void 0;
4208
4288
  let materialId;
4209
4289
  try {
4210
- materialId = await notifyUploaded(config, {
4211
- folderId: DEFAULT_FOLDER_ID,
4212
- name: fileName,
4213
- url: resourceUrl,
4214
- fileSize,
4215
- type: kind === "video" ? 3 : 1,
4216
- // 1=图片 3=视频(与前端 fileType() 一致)
4217
- source: 1,
4218
- blobAccount: sas.accountName,
4219
- blobContainer: sas.containerName,
4220
- format,
4221
- ...kind === "image" ? { image: imageDim } : {},
4222
- ...kind === "video" ? (() => {
4223
- const dur = readMp4Duration(filePath);
4224
- if (!dur) throw new Error("\u65E0\u6CD5\u8BFB\u53D6\u89C6\u9891\u65F6\u957F\uFF0C\u8BF7\u786E\u8BA4\u6587\u4EF6\u4E3A\u6709\u6548\u7684 MP4 \u683C\u5F0F");
4225
- return { video: {}, audio: {}, duration: dur, overallBitRate: 0, thumbUrl };
4226
- })() : {}
4227
- }, verbose);
4290
+ materialId = await notifyUploaded(
4291
+ config,
4292
+ {
4293
+ folderId: DEFAULT_FOLDER_ID,
4294
+ name: fileName,
4295
+ url: resourceUrl,
4296
+ fileSize,
4297
+ type: kind === "video" ? 3 : 1,
4298
+ // 1=图片 3=视频(与前端 fileType() 一致)
4299
+ source: 1,
4300
+ blobAccount: sas.accountName,
4301
+ blobContainer: sas.containerName,
4302
+ format,
4303
+ ...kind === "image" ? { image: imageDim } : {},
4304
+ ...kind === "video" ? (() => {
4305
+ const dur = readMp4Duration(filePath);
4306
+ if (!dur) throw new Error("\u65E0\u6CD5\u8BFB\u53D6\u89C6\u9891\u65F6\u957F\uFF0C\u8BF7\u786E\u8BA4\u6587\u4EF6\u4E3A\u6709\u6548\u7684 MP4 \u683C\u5F0F");
4307
+ return { video: {}, audio: {}, duration: dur, overallBitRate: 0, thumbUrl };
4308
+ })() : {}
4309
+ },
4310
+ verbose
4311
+ );
4228
4312
  } catch (e) {
4229
4313
  const msg = e.message;
4230
4314
  console.error(`
@@ -4528,14 +4612,20 @@ function printMarkdownFetch(runtime, includeModules, sections) {
4528
4612
  const accountScope = runtime.baseQuery.mediaCustomerIds.length > 0 ? runtime.baseQuery.mediaCustomerIds.join(", ") : "\u5168\u90E8\u8D26\u53F7";
4529
4613
  const startDay = runtime.baseQuery.startDate.slice(0, 10);
4530
4614
  const endDay = runtime.baseQuery.endDate.slice(0, 10);
4531
- console.log(`# \u8FD0\u8425\u62A5\u8868\uFF5C${runtime.baseQuery.mediaTypes.join(",")}\uFF5C${accountScope}\uFF5C${startDay}~${endDay}\uFF5C${runtime.method}
4532
- `);
4615
+ console.log(
4616
+ `# \u8FD0\u8425\u62A5\u8868\uFF5C${runtime.baseQuery.mediaTypes.join(",")}\uFF5C${accountScope}\uFF5C${startDay}~${endDay}\uFF5C${runtime.method}
4617
+ `
4618
+ );
4533
4619
  if (sections.operation && typeof sections.operation === "object") {
4534
4620
  const op = sections.operation;
4535
4621
  const core = Array.isArray(op.coreData) ? [...op.coreData] : [];
4536
4622
  if (typeof sections["total-fans"] === "number") {
4537
4623
  if (!core.some((item) => item.name === "TotalFans")) {
4538
- core.push({ name: "TotalFans", value: sections["total-fans"], incrementRate: null });
4624
+ core.push({
4625
+ name: "TotalFans",
4626
+ value: sections["total-fans"],
4627
+ incrementRate: null
4628
+ });
4539
4629
  }
4540
4630
  }
4541
4631
  console.log("## \u6838\u5FC3\u6307\u6807\n");
@@ -4577,7 +4667,8 @@ function printMarkdownFetch(runtime, includeModules, sections) {
4577
4667
  const data = sections[moduleName];
4578
4668
  if (data === null || data === void 0) continue;
4579
4669
  if (Array.isArray(data) && data.length === 0) continue;
4580
- if (typeof data === "object" && !Array.isArray(data) && Object.keys(data).length === 0) continue;
4670
+ if (typeof data === "object" && !Array.isArray(data) && Object.keys(data).length === 0)
4671
+ continue;
4581
4672
  const title = MODULE_TITLES[moduleName] ?? moduleName;
4582
4673
  console.log(`## ${title}
4583
4674
  `);
@@ -4605,15 +4696,27 @@ async function runReportFetch(options) {
4605
4696
  continue;
4606
4697
  }
4607
4698
  if (moduleName === "total-fans") {
4608
- sections["total-fans"] = await getWithQuery(runtime, "TotalFans", runtime.baseQuery);
4699
+ sections["total-fans"] = await getWithQuery(
4700
+ runtime,
4701
+ "TotalFans",
4702
+ runtime.baseQuery
4703
+ );
4609
4704
  continue;
4610
4705
  }
4611
4706
  if (moduleName === "fans-analysis") {
4612
- sections["fans-analysis"] = await getWithQuery(runtime, "FansAnalysis", runtime.baseQuery);
4707
+ sections["fans-analysis"] = await getWithQuery(
4708
+ runtime,
4709
+ "FansAnalysis",
4710
+ runtime.baseQuery
4711
+ );
4613
4712
  continue;
4614
4713
  }
4615
4714
  if (moduleName === "hot-topic") {
4616
- sections["hot-topic"] = await getWithQuery(runtime, "GetHotTopic", runtime.baseQuery);
4715
+ sections["hot-topic"] = await getWithQuery(
4716
+ runtime,
4717
+ "GetHotTopic",
4718
+ runtime.baseQuery
4719
+ );
4617
4720
  continue;
4618
4721
  }
4619
4722
  if (moduleName === "works") {
@@ -4624,19 +4727,35 @@ async function runReportFetch(options) {
4624
4727
  continue;
4625
4728
  }
4626
4729
  if (moduleName === "hot-comment-word") {
4627
- sections["hot-comment-word"] = await getWithQuery(runtime, "GetHotCommentWord", runtime.baseQuery);
4730
+ sections["hot-comment-word"] = await getWithQuery(
4731
+ runtime,
4732
+ "GetHotCommentWord",
4733
+ runtime.baseQuery
4734
+ );
4628
4735
  continue;
4629
4736
  }
4630
4737
  if (moduleName === "comment-top10") {
4631
- sections["comment-top10"] = await getWithQuery(runtime, "CommentTop10", runtime.baseQuery);
4738
+ sections["comment-top10"] = await getWithQuery(
4739
+ runtime,
4740
+ "CommentTop10",
4741
+ runtime.baseQuery
4742
+ );
4632
4743
  continue;
4633
4744
  }
4634
4745
  if (moduleName === "video-duration") {
4635
- sections["video-duration"] = await getWithQuery(runtime, "VideoDurationAnalysis", runtime.baseQuery);
4746
+ sections["video-duration"] = await getWithQuery(
4747
+ runtime,
4748
+ "VideoDurationAnalysis",
4749
+ runtime.baseQuery
4750
+ );
4636
4751
  continue;
4637
4752
  }
4638
4753
  if (moduleName === "video-distribution") {
4639
- sections["video-distribution"] = await getWithQuery(runtime, "VideoDistribution", runtime.baseQuery);
4754
+ sections["video-distribution"] = await getWithQuery(
4755
+ runtime,
4756
+ "VideoDistribution",
4757
+ runtime.baseQuery
4758
+ );
4640
4759
  continue;
4641
4760
  }
4642
4761
  if (moduleName === "comment-trend") {
@@ -4924,7 +5043,9 @@ function buildMarkdownTable(rows) {
4924
5043
  ].join("\n");
4925
5044
  }
4926
5045
  function normalizeEnterpriseList(raw) {
4927
- const payload = normalizeApiPayload(raw);
5046
+ const payload = normalizeApiPayload(
5047
+ raw
5048
+ );
4928
5049
  const folders = ensureObject(payload).folders;
4929
5050
  if (!Array.isArray(folders)) return [];
4930
5051
  return folders.map((item) => ensureObject(item)).map((folder) => ({
@@ -4933,7 +5054,9 @@ function normalizeEnterpriseList(raw) {
4933
5054
  })).filter((item) => item.id);
4934
5055
  }
4935
5056
  function normalizeContentTypeList(raw) {
4936
- const payload = normalizeApiPayload(raw);
5057
+ const payload = normalizeApiPayload(
5058
+ raw
5059
+ );
4937
5060
  const list = Array.isArray(payload) ? payload : [];
4938
5061
  return list.map((item) => ensureObject(item)).map((item) => ({
4939
5062
  id: String(item.id ?? ""),
@@ -4941,7 +5064,9 @@ function normalizeContentTypeList(raw) {
4941
5064
  })).filter((item) => item.id);
4942
5065
  }
4943
5066
  function normalizeTaskList(raw) {
4944
- const payload = normalizeApiPayload(raw);
5067
+ const payload = normalizeApiPayload(
5068
+ raw
5069
+ );
4945
5070
  const page = Array.isArray(payload) ? { list: payload, total: payload.length } : payload;
4946
5071
  const listRaw = Array.isArray(page.list) ? page.list : [];
4947
5072
  const list = listRaw.map((item) => ensureObject(item)).map((item) => ({
@@ -4960,7 +5085,10 @@ function normalizeTaskList(raw) {
4960
5085
  async function requestPlanning(config, endpoint, init = {}, verbose = false) {
4961
5086
  const baseUrl = getPlanBaseUrl(config.agentBaseUrl);
4962
5087
  const url = `${baseUrl}${endpoint}`;
4963
- const headers = { ...getPlanHeaders(config), ...init.headers };
5088
+ const headers = {
5089
+ ...getPlanHeaders(config),
5090
+ ...init.headers
5091
+ };
4964
5092
  return apiFetch2(url, config, { ...init, headers }, verbose);
4965
5093
  }
4966
5094
  async function runPlanningEnterprises(options) {
@@ -5196,7 +5324,9 @@ async function runPlanningGenerate(options) {
5196
5324
  },
5197
5325
  verbose
5198
5326
  );
5199
- response = normalizeApiPayload(raw);
5327
+ response = normalizeApiPayload(
5328
+ raw
5329
+ );
5200
5330
  } catch (error) {
5201
5331
  exitWithError2(`\u521B\u5EFA\u89C4\u5212\u4EFB\u52A1\u5931\u8D25\uFF1A${error.message}`);
5202
5332
  }
@@ -5209,7 +5339,9 @@ async function runPlanningGenerate(options) {
5209
5339
  } else {
5210
5340
  console.log("\n\u2705 \u5DF2\u63D0\u4EA4\u89C4\u5212\u751F\u6210\u4EFB\u52A1");
5211
5341
  console.log(` Task ID : ${taskId}`);
5212
- console.log(` \u72B6\u6001 : ${getTaskStatusText(String(response.status ?? "pending"))}`);
5342
+ console.log(
5343
+ ` \u72B6\u6001 : ${getTaskStatusText(String(response.status ?? "pending"))}`
5344
+ );
5213
5345
  console.log(" \u63D0\u793A : \u53EF\u7528 `siluzan-cso planning watch <taskId>` \u76D1\u542C\u8FDB\u5EA6");
5214
5346
  }
5215
5347
  if (options.watch) {
@@ -5263,7 +5395,9 @@ async function runPlanningList(options) {
5263
5395
  const total = data.total;
5264
5396
  const totalPages = computeTotalPages(total, pageSize);
5265
5397
  if (options.json) {
5266
- console.log(JSON.stringify({ pageIndex, pageSize, total, totalPages, list: data.list }, null, 2));
5398
+ console.log(
5399
+ JSON.stringify({ pageIndex, pageSize, total, totalPages, list: data.list }, null, 2)
5400
+ );
5267
5401
  return;
5268
5402
  }
5269
5403
  const pageInfo = formatPaginationSummary({ page: pageIndex, pageSize, total });
@@ -5340,7 +5474,12 @@ async function runPlanningGet(planId, options) {
5340
5474
  const verbose = Boolean(options.verbose);
5341
5475
  let plan;
5342
5476
  try {
5343
- const raw = await requestPlanning(config, `/api/plans/${encodeURIComponent(id)}`, {}, verbose);
5477
+ const raw = await requestPlanning(
5478
+ config,
5479
+ `/api/plans/${encodeURIComponent(id)}`,
5480
+ {},
5481
+ verbose
5482
+ );
5344
5483
  plan = normalizeApiPayload(raw);
5345
5484
  } catch (error) {
5346
5485
  exitWithError2(`\u83B7\u53D6\u89C4\u5212\u8BE6\u60C5\u5931\u8D25\uFF1A${error.message}`);
@@ -5379,7 +5518,9 @@ async function runPlanningRegenerate(planId, options) {
5379
5518
  },
5380
5519
  verbose
5381
5520
  );
5382
- response = normalizeApiPayload(raw);
5521
+ response = normalizeApiPayload(
5522
+ raw
5523
+ );
5383
5524
  } catch (error) {
5384
5525
  exitWithError2(`\u518D\u751F\u6210\u5931\u8D25\uFF1A${error.message}`);
5385
5526
  }
@@ -5472,7 +5613,12 @@ async function loadPlanFromSource(options, config) {
5472
5613
  exitWithError2("export txt \u9700\u8981\u63D0\u4F9B --plan-id \u6216 --input");
5473
5614
  }
5474
5615
  try {
5475
- const raw = await requestPlanning(config, `/api/plans/${encodeURIComponent(planId)}`, {}, Boolean(options.verbose));
5616
+ const raw = await requestPlanning(
5617
+ config,
5618
+ `/api/plans/${encodeURIComponent(planId)}`,
5619
+ {},
5620
+ Boolean(options.verbose)
5621
+ );
5476
5622
  return normalizeApiPayload(raw);
5477
5623
  } catch (error) {
5478
5624
  exitWithError2(`\u83B7\u53D6\u89C4\u5212\u8BE6\u60C5\u5931\u8D25\uFF1A${error.message}`);
@@ -5483,7 +5629,9 @@ async function runPlanningExportTxt(options) {
5483
5629
  const plan = await loadPlanFromSource(options, config);
5484
5630
  const enterpriseName = inferEnterpriseNameFromPlan(plan);
5485
5631
  const text = formatPlanAsMarkdown(plan, enterpriseName);
5486
- const defaultName = sanitizeFilename(`\u5185\u5BB9\u9009\u9898\u65B9\u5411\u89C4\u5212_${enterpriseName}_${plan.yearMonth ?? "unknown"}.txt`);
5632
+ const defaultName = sanitizeFilename(
5633
+ `\u5185\u5BB9\u9009\u9898\u65B9\u5411\u89C4\u5212_${enterpriseName}_${plan.yearMonth ?? "unknown"}.txt`
5634
+ );
5487
5635
  const outputPath = path9.resolve(options.output ? options.output : defaultName);
5488
5636
  try {
5489
5637
  fs9.writeFileSync(outputPath, text, "utf-8");
@@ -5491,7 +5639,9 @@ async function runPlanningExportTxt(options) {
5491
5639
  exitWithError2(`\u5199\u5165\u5BFC\u51FA\u6587\u4EF6\u5931\u8D25\uFF1A${error.message}`);
5492
5640
  }
5493
5641
  if (options.json) {
5494
- console.log(JSON.stringify({ output: outputPath, planId: plan.id ?? options.planId ?? null }, null, 2));
5642
+ console.log(
5643
+ JSON.stringify({ output: outputPath, planId: plan.id ?? options.planId ?? null }, null, 2)
5644
+ );
5495
5645
  return;
5496
5646
  }
5497
5647
  console.log("\n\u2705 \u89C4\u5212 TXT \u5BFC\u51FA\u5B8C\u6210");
@@ -5575,7 +5725,9 @@ function resolveMediaTypeForApi(input) {
5575
5725
  if (!trimmed) exitWithError3("\u5A92\u4F53\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A");
5576
5726
  if (/^\d+$/.test(trimmed)) return trimmed;
5577
5727
  if (trimmed in TASK_MEDIA_MAP) return String(TASK_MEDIA_MAP[trimmed]);
5578
- exitWithError3(`\u672A\u77E5\u5A92\u4F53\u7C7B\u578B\uFF1A${input}\u3002\u53EF\u7528\u503C\uFF1A${Object.keys(TASK_MEDIA_MAP).join(", ")} \u6216\u6570\u5B57 ID`);
5728
+ exitWithError3(
5729
+ `\u672A\u77E5\u5A92\u4F53\u7C7B\u578B\uFF1A${input}\u3002\u53EF\u7528\u503C\uFF1A${Object.keys(TASK_MEDIA_MAP).join(", ")} \u6216\u6570\u5B57 ID`
5730
+ );
5579
5731
  }
5580
5732
  function statusLabel(status) {
5581
5733
  if (status === 0) return "\u6267\u884C\u4E2D";
@@ -5599,17 +5751,27 @@ function isTaskMutationSuccess(code) {
5599
5751
  }
5600
5752
  async function postForm(endpoint, body, options) {
5601
5753
  const config = loadConfig(options.token);
5602
- return apiFetch2(`${config.csoBaseUrl}${endpoint}`, config, {
5603
- method: "POST",
5604
- headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" },
5605
- body: new URLSearchParams(body).toString()
5606
- }, Boolean(options.verbose));
5754
+ return apiFetch2(
5755
+ `${config.csoBaseUrl}${endpoint}`,
5756
+ config,
5757
+ {
5758
+ method: "POST",
5759
+ headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" },
5760
+ body: new URLSearchParams(body).toString()
5761
+ },
5762
+ Boolean(options.verbose)
5763
+ );
5607
5764
  }
5608
5765
  async function postNoBody(endpoint, options) {
5609
5766
  const config = loadConfig(options.token);
5610
- return apiFetch2(`${config.csoBaseUrl}${endpoint}`, config, {
5611
- method: "POST"
5612
- }, Boolean(options.verbose));
5767
+ return apiFetch2(
5768
+ `${config.csoBaseUrl}${endpoint}`,
5769
+ config,
5770
+ {
5771
+ method: "POST"
5772
+ },
5773
+ Boolean(options.verbose)
5774
+ );
5613
5775
  }
5614
5776
  async function runTaskList(options) {
5615
5777
  const config = loadConfig(options.token);
@@ -5617,7 +5779,11 @@ async function runTaskList(options) {
5617
5779
  const size = parsePositiveInt3(options.size, "--size", 10);
5618
5780
  const status = parseTaskStatus(options.status);
5619
5781
  const contentType = parseContentType(options.contentType);
5620
- const { startDate, endDate } = formatDateRange(options.datePreset, options.startDate, options.endDate);
5782
+ const { startDate, endDate } = formatDateRange(
5783
+ options.datePreset,
5784
+ options.startDate,
5785
+ options.endDate
5786
+ );
5621
5787
  const asc = Boolean(options.asc);
5622
5788
  let taskName = "";
5623
5789
  let creator = options.creator ?? "";
@@ -5644,7 +5810,12 @@ async function runTaskList(options) {
5644
5810
  })}`;
5645
5811
  let data;
5646
5812
  try {
5647
- const res = await apiFetch2(url, config, {}, Boolean(options.verbose));
5813
+ const res = await apiFetch2(
5814
+ url,
5815
+ config,
5816
+ {},
5817
+ Boolean(options.verbose)
5818
+ );
5648
5819
  if (!res.data) throw new Error(res.message || "\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u5217\u8868\u6570\u636E");
5649
5820
  data = res.data;
5650
5821
  } catch (error) {
@@ -5697,7 +5868,12 @@ async function runTaskDetail(options) {
5697
5868
  })}`;
5698
5869
  let data;
5699
5870
  try {
5700
- const res = await apiFetch2(url, config, {}, Boolean(options.verbose));
5871
+ const res = await apiFetch2(
5872
+ url,
5873
+ config,
5874
+ {},
5875
+ Boolean(options.verbose)
5876
+ );
5701
5877
  if (!res.data) throw new Error(res.message || "\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u8BE6\u60C5\u6570\u636E");
5702
5878
  data = res.data;
5703
5879
  } catch (error) {
@@ -5765,25 +5941,44 @@ async function runTaskMutation(endpoint, body, options, successText) {
5765
5941
  }
5766
5942
  async function runTaskStart(options) {
5767
5943
  if (!options.publishId) exitWithError3("\u8BF7\u63D0\u4F9B --publish-id");
5768
- await runTaskMutation("/cso/v1/task/startTask", { publishId: options.publishId }, options, "\u542F\u52A8\u4EFB\u52A1");
5944
+ await runTaskMutation(
5945
+ "/cso/v1/task/startTask",
5946
+ { publishId: options.publishId },
5947
+ options,
5948
+ "\u542F\u52A8\u4EFB\u52A1"
5949
+ );
5769
5950
  }
5770
5951
  async function runTaskStop(options) {
5771
5952
  if (!options.publishId) exitWithError3("\u8BF7\u63D0\u4F9B --publish-id");
5772
- await runTaskMutation("/cso/v1/task/stopTask", { publishId: options.publishId }, options, "\u4E2D\u6B62\u4EFB\u52A1");
5953
+ await runTaskMutation(
5954
+ "/cso/v1/task/stopTask",
5955
+ { publishId: options.publishId },
5956
+ options,
5957
+ "\u4E2D\u6B62\u4EFB\u52A1"
5958
+ );
5773
5959
  }
5774
5960
  async function runTaskDelete(options) {
5775
5961
  if (!options.publishId) exitWithError3("\u8BF7\u63D0\u4F9B --publish-id");
5776
- await runTaskMutation("/cso/v1/task/deleteTask", { publishId: options.publishId }, options, "\u5220\u9664\u4EFB\u52A1");
5962
+ await runTaskMutation(
5963
+ "/cso/v1/task/deleteTask",
5964
+ { publishId: options.publishId },
5965
+ options,
5966
+ "\u5220\u9664\u4EFB\u52A1"
5967
+ );
5777
5968
  }
5778
5969
  async function runTaskRename(options) {
5779
5970
  if (!options.publishId) exitWithError3("\u8BF7\u63D0\u4F9B --publish-id");
5780
5971
  if (!options.name?.trim()) exitWithError3("\u8BF7\u63D0\u4F9B\u975E\u7A7A\u7684 --name");
5781
5972
  let res;
5782
5973
  try {
5783
- res = await postForm("/cso/v1/task/reName", {
5784
- publishId: options.publishId,
5785
- taskName: options.name.trim()
5786
- }, options);
5974
+ res = await postForm(
5975
+ "/cso/v1/task/reName",
5976
+ {
5977
+ publishId: options.publishId,
5978
+ taskName: options.name.trim()
5979
+ },
5980
+ options
5981
+ );
5787
5982
  } catch (error) {
5788
5983
  exitWithError3(`\u91CD\u547D\u540D\u4EFB\u52A1\u5931\u8D25\uFF1A${error.message}`);
5789
5984
  }
@@ -5819,7 +6014,12 @@ allowChange: ${allowChange ? "true" : "false"}`);
5819
6014
  }
5820
6015
  async function runTaskItemDelete(options) {
5821
6016
  if (!options.itemId) exitWithError3("\u8BF7\u63D0\u4F9B --item-id");
5822
- await runTaskMutation(`/cso/v1/task/deletePublishItem/${options.itemId}`, null, options, "\u5220\u9664\u53D1\u5E03\u9879");
6017
+ await runTaskMutation(
6018
+ `/cso/v1/task/deletePublishItem/${options.itemId}`,
6019
+ null,
6020
+ options,
6021
+ "\u5220\u9664\u53D1\u5E03\u9879"
6022
+ );
5823
6023
  }
5824
6024
  async function runTaskItemRepublish(options) {
5825
6025
  if (!options.itemId) exitWithError3("\u8BF7\u63D0\u4F9B --item-id");
@@ -5832,13 +6032,20 @@ async function runTaskItemRunNow(options) {
5832
6032
  async function runTaskCommentList(options) {
5833
6033
  const config = loadConfig(options.token);
5834
6034
  const mediaType = resolveMediaTypeForApi(options.mediaType);
5835
- const url = `${config.csoBaseUrl}/cso/v1/comment/listByVideoId/2/${mediaType}?${createQueryString3({
5836
- videoId: encodeURIComponent(options.videoId),
5837
- mediaCustomerId: options.mediaCustomerId
5838
- })}`;
6035
+ const url = `${config.csoBaseUrl}/cso/v1/comment/listByVideoId/2/${mediaType}?${createQueryString3(
6036
+ {
6037
+ videoId: encodeURIComponent(options.videoId),
6038
+ mediaCustomerId: options.mediaCustomerId
6039
+ }
6040
+ )}`;
5839
6041
  let data;
5840
6042
  try {
5841
- const res = await apiFetch2(url, config, {}, Boolean(options.verbose));
6043
+ const res = await apiFetch2(
6044
+ url,
6045
+ config,
6046
+ {},
6047
+ Boolean(options.verbose)
6048
+ );
5842
6049
  if (res.code !== 1 || !res.data) {
5843
6050
  throw new Error(res.message || `\u670D\u52A1\u7AEF\u8FD4\u56DE code=${res.code}`);
5844
6051
  }
@@ -6037,7 +6244,8 @@ function unwrapQueryKnowledges(raw) {
6037
6244
  }
6038
6245
  function similarityPercent(score) {
6039
6246
  if (score === void 0 || Number.isNaN(score)) return "N/A";
6040
- return `${Math.round((1 - score) * 100)}%`;
6247
+ const s = Math.min(1, Math.max(0, score));
6248
+ return `${Math.round(s * 100)}%`;
6041
6249
  }
6042
6250
  function blockquoteMarkdown(text) {
6043
6251
  return text.split("\n").map((line) => `> ${line}`).join("\n");
@@ -6208,7 +6416,13 @@ async function runRagQuery(options) {
6208
6416
  }
6209
6417
  }
6210
6418
  const payload = unwrapQueryKnowledges(raw);
6211
- const output = Array.isArray(payload.output) ? payload.output : [];
6419
+ const rawOutput = Array.isArray(payload.output) ? payload.output : [];
6420
+ const output = rawOutput.map((item) => {
6421
+ const r = item.score;
6422
+ if (typeof r !== "number" || Number.isNaN(r)) return item;
6423
+ const s = Math.min(1, Math.max(0, 1 - r));
6424
+ return { ...item, score: s };
6425
+ });
6212
6426
  if (options.json) {
6213
6427
  console.log(
6214
6428
  JSON.stringify(
@@ -6237,6 +6451,20 @@ async function runRagQuery(options) {
6237
6451
  ${header}${body}`);
6238
6452
  }
6239
6453
  var RAG_ROOT_FOLDER_ID = "88888888-8888-8888-0000-888888888888";
6454
+ var RAG_BUILTIN_PARENT_FOLDER_ID = "88888888-8888-0000-0000-888888888888";
6455
+ function buildMaterialQueryListParams(belongToId, folderId) {
6456
+ return new URLSearchParams({
6457
+ belongTo: "0",
6458
+ belongToId,
6459
+ showCut: "true",
6460
+ isGlobal: "true",
6461
+ orderBy: "createTime",
6462
+ isDesc: "true",
6463
+ pageIndex: "1",
6464
+ pageSize: "999",
6465
+ folderId
6466
+ });
6467
+ }
6240
6468
  async function runRagList(options) {
6241
6469
  const config = loadConfig(options.token);
6242
6470
  let belongToId = String(options.belongToId ?? "").trim();
@@ -6250,17 +6478,7 @@ async function runRagList(options) {
6250
6478
  );
6251
6479
  process.exit(1);
6252
6480
  }
6253
- const p = new URLSearchParams({
6254
- belongTo: "0",
6255
- belongToId,
6256
- showCut: "true",
6257
- isGlobal: "true",
6258
- orderBy: "createTime",
6259
- isDesc: "true",
6260
- pageIndex: "1",
6261
- pageSize: "999",
6262
- folderId: RAG_ROOT_FOLDER_ID
6263
- });
6481
+ const p = buildMaterialQueryListParams(belongToId, RAG_ROOT_FOLDER_ID);
6264
6482
  const url = `${config.csoBaseUrl}/cutapi/v1/material/querylist?${p.toString()}`;
6265
6483
  let raw;
6266
6484
  try {
@@ -6282,6 +6500,36 @@ async function runRagList(options) {
6282
6500
  process.exit(1);
6283
6501
  }
6284
6502
  let folders = raw.data?.folders ?? [];
6503
+ try {
6504
+ const pBuiltin = buildMaterialQueryListParams(belongToId, RAG_BUILTIN_PARENT_FOLDER_ID);
6505
+ const urlBuiltin = `${config.csoBaseUrl}/cutapi/v1/material/querylist?${pBuiltin.toString()}`;
6506
+ const rawBuiltin = await apiFetch2(
6507
+ urlBuiltin,
6508
+ config,
6509
+ {},
6510
+ Boolean(options.verbose)
6511
+ );
6512
+ if (rawBuiltin.code === 1) {
6513
+ const extra = rawBuiltin.data?.folders ?? [];
6514
+ const seen = new Set(folders.map((f) => f.id));
6515
+ for (const f of extra) {
6516
+ if (!seen.has(f.id)) {
6517
+ seen.add(f.id);
6518
+ folders.push(f);
6519
+ }
6520
+ }
6521
+ } else if (options.verbose) {
6522
+ console.error(
6523
+ `
6524
+ \u26A0\uFE0F \u5185\u7F6E\u77E5\u8BC6\u5E93\u5B50\u5217\u8868\u5931\u8D25\uFF1A${rawBuiltin.message || `\u4E1A\u52A1\u7801 ${rawBuiltin.code}`}\uFF08\u5DF2\u8DF3\u8FC7\u5408\u5E76\uFF09`
6525
+ );
6526
+ }
6527
+ } catch (e) {
6528
+ if (options.verbose) {
6529
+ console.error(`
6530
+ \u26A0\uFE0F \u5185\u7F6E\u77E5\u8BC6\u5E93\u5B50\u5217\u8868\u8BF7\u6C42\u5F02\u5E38\uFF1A${e.message}\uFF08\u5DF2\u8DF3\u8FC7\u5408\u5E76\uFF09`);
6531
+ }
6532
+ }
6285
6533
  if (options.ragOnly) {
6286
6534
  folders = folders.filter((f) => f.ragStatus === true);
6287
6535
  }
@@ -6440,7 +6688,9 @@ program.command("login").description("\u5F15\u5BFC\u5B8C\u6210 Siluzan \u8D26\u5
6440
6688
  program.command("update").description("\u68C0\u67E5\u5E76\u66F4\u65B0 siluzan-cso-cli \u81F3\u6700\u65B0\u7248\u672C\uFF0C\u540C\u6B65\u5237\u65B0\u6240\u6709\u5DF2\u5B89\u88C5\u7684 skill \u6587\u4EF6").option("--force", "\u8DF3\u8FC7\u7248\u672C\u6BD4\u8F83\uFF0C\u5F3A\u5236\u91CD\u65B0\u5B89\u88C5\u5E76\u5237\u65B0 skill \u6587\u4EF6", false).option("--skip-init", "\u4EC5\u66F4\u65B0 CLI\uFF0C\u4E0D\u91CD\u65B0\u521D\u59CB\u5316 skill \u6587\u4EF6", false).action(async (opts) => {
6441
6689
  await runUpdate({ force: opts.force, skipInit: opts.skipInit });
6442
6690
  });
6443
- program.command("init").description("\u5C06 Skill \u6587\u4EF6\u5199\u5165 AI \u52A9\u624B\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5199\u5165\u6240\u6709\u5E73\u53F0\u7684\u9879\u76EE\u7EA7\u76EE\u5F55\uFF0C--global \u5199\u5165\u5168\u5C40\u76EE\u5F55\uFF09").option(
6691
+ program.command("init").description(
6692
+ "\u5C06 Skill \u6587\u4EF6\u5199\u5165 AI \u52A9\u624B\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5199\u5165\u6240\u6709\u5E73\u53F0\u7684\u9879\u76EE\u7EA7\u76EE\u5F55\uFF0C--global \u5199\u5165\u5168\u5C40\u76EE\u5F55\uFF09"
6693
+ ).option(
6444
6694
  "-a, --ai <targets>",
6445
6695
  "\u76EE\u6807\u5E73\u53F0\uFF0C\u9017\u53F7\u5206\u9694\uFF1Acursor,claude,agents,windsurf,gemini,codex,opencode,kilo,openclaw,workbuddy,all",
6446
6696
  "all"
@@ -6457,58 +6707,77 @@ program.command("init").description("\u5C06 Skill \u6587\u4EF6\u5199\u5165 AI \u
6457
6707
  apiBaseUrl: DEFAULT_API_BASE
6458
6708
  });
6459
6709
  });
6460
- program.command("authorize").description("\u53D1\u8D77\u5A92\u4F53\u5E73\u53F0 OAuth \u6388\u6743\uFF08YouTube/TikTokBusinessAccount/Instagram/Facebook/LinkedIn/Twitter \u7B49\uFF09\uFF0C\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743\u540E\u8DF3\u56DE\u4E1D\u8DEF\u8D5E\u8D26\u53F7\u7BA1\u7406\u9875").requiredOption("--media-type <type>", "\u5A92\u4F53\u5E73\u53F0\u7C7B\u578B\uFF0C\u5982 YouTube / TikTokBusinessAccount / Instagram / Facebook / LinkedIn / Twitter").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6710
+ program.command("authorize").description(
6711
+ "\u53D1\u8D77\u5A92\u4F53\u5E73\u53F0 OAuth \u6388\u6743\uFF08YouTube/TikTokBusinessAccount/Instagram/Facebook/LinkedIn/Twitter \u7B49\uFF09\uFF0C\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743\u540E\u8DF3\u56DE\u4E1D\u8DEF\u8D5E\u8D26\u53F7\u7BA1\u7406\u9875"
6712
+ ).requiredOption(
6713
+ "--media-type <type>",
6714
+ "\u5A92\u4F53\u5E73\u53F0\u7C7B\u578B\uFF0C\u5982 YouTube / TikTokBusinessAccount / Instagram / Facebook / LinkedIn / Twitter"
6715
+ ).option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6461
6716
  await runAuthorize(opts);
6462
6717
  });
6463
- program.command("list-accounts").description("\u5217\u51FA\u5A92\u4F53\u8D26\u53F7\u5217\u8868\uFF0C\u9ED8\u8BA4\u5C55\u793A\u7C89\u4E1D\u6570/\u4F5C\u54C1\u6570/\u64AD\u653E\u6570\u7B49\u6570\u636E\u603B\u89C8\uFF1B\u652F\u6301\u5206\u9875\u3001\u5E73\u53F0/\u540D\u79F0/\u72B6\u6001/\u8D1F\u8D23\u4EBA\u8FC7\u6EE4").option("--name <name>", "\u6309\u8D26\u53F7\u540D\u79F0\u6A21\u7CCA\u641C\u7D22").option("--media-type <type>", "\u6309\u5E73\u53F0\u7C7B\u578B\u8FC7\u6EE4\uFF08\u5982 \u6296\u97F3\u3001YouTube\u3001TikTok \u7B49\uFF09").option("--state <state>", "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF1Aall\uFF08\u5168\u90E8\uFF09| normal\uFF08\u6B63\u5E38\uFF09| abnormal\uFF08\u5F02\u5E38/\u8FC7\u671F\uFF09\uFF0C\u9ED8\u8BA4 all", "all").option("--owner <owner>", "\u6309\u8D1F\u8D23\u4EBA\u8FC7\u6EE4\uFF08\u4F20\u5165\u7528\u6237 ID\uFF0C\u53EF\u4ECE --json \u8FD4\u56DE\u7684 ownerInfo[].id \u5B57\u6BB5\u83B7\u53D6\uFF09").option("--page <n>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09", "1").option("--page-size <n>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 20\uFF09", "20").option("--json", "\u4EE5 JSON \u8F93\u51FA\u8D26\u53F7\u5217\u8868\uFF08\u542B\u603B\u89C8\u6570\u636E\uFF0C\u7528\u4E8E\u811A\u672C\u6216\u914D\u7F6E\u6587\u4EF6\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u5B8C\u6574\u4EE4\u724C\u6807\u8BC6\uFF08\u9ED8\u8BA4\u8131\u654F\uFF09", false).action(async (opts) => {
6464
- const state = opts.state;
6465
- await runListAccounts({
6466
- token: opts.token,
6467
- name: opts.name,
6468
- mediaType: opts.mediaType,
6469
- state: state === "all" ? void 0 : state,
6470
- owner: opts.owner,
6471
- page: opts.page ? parseInt(opts.page, 10) : void 0,
6472
- pageSize: opts.pageSize ? parseInt(opts.pageSize, 10) : void 0,
6473
- json: opts.json,
6474
- unicode: opts.unicode,
6475
- verbose: opts.verbose
6476
- });
6477
- });
6718
+ program.command("list-accounts").description(
6719
+ "\u5217\u51FA\u5A92\u4F53\u8D26\u53F7\u5217\u8868\uFF0C\u9ED8\u8BA4\u5C55\u793A\u7C89\u4E1D\u6570/\u4F5C\u54C1\u6570/\u64AD\u653E\u6570\u7B49\u6570\u636E\u603B\u89C8\uFF1B\u652F\u6301\u5206\u9875\u3001\u5E73\u53F0/\u540D\u79F0/\u72B6\u6001/\u8D1F\u8D23\u4EBA\u8FC7\u6EE4"
6720
+ ).option("--name <name>", "\u6309\u8D26\u53F7\u540D\u79F0\u6A21\u7CCA\u641C\u7D22").option("--media-type <type>", "\u6309\u5E73\u53F0\u7C7B\u578B\u8FC7\u6EE4\uFF08\u5982 \u6296\u97F3\u3001YouTube\u3001TikTok \u7B49\uFF09").option(
6721
+ "--state <state>",
6722
+ "\u6309\u72B6\u6001\u8FC7\u6EE4\uFF1Aall\uFF08\u5168\u90E8\uFF09| normal\uFF08\u6B63\u5E38\uFF09| abnormal\uFF08\u5F02\u5E38/\u8FC7\u671F\uFF09\uFF0C\u9ED8\u8BA4 all",
6723
+ "all"
6724
+ ).option(
6725
+ "--owner <owner>",
6726
+ "\u6309\u8D1F\u8D23\u4EBA\u8FC7\u6EE4\uFF08\u4F20\u5165\u7528\u6237 ID\uFF0C\u53EF\u4ECE --json \u8FD4\u56DE\u7684 ownerInfo[].id \u5B57\u6BB5\u83B7\u53D6\uFF09"
6727
+ ).option("--page <n>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09", "1").option("--page-size <n>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 20\uFF09", "20").option("--json", "\u4EE5 JSON \u8F93\u51FA\u8D26\u53F7\u5217\u8868\uFF08\u542B\u603B\u89C8\u6570\u636E\uFF0C\u7528\u4E8E\u811A\u672C\u6216\u914D\u7F6E\u6587\u4EF6\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u5B8C\u6574\u4EE4\u724C\u6807\u8BC6\uFF08\u9ED8\u8BA4\u8131\u654F\uFF09", false).action(
6728
+ async (opts) => {
6729
+ const state = opts.state;
6730
+ await runListAccounts({
6731
+ token: opts.token,
6732
+ name: opts.name,
6733
+ mediaType: opts.mediaType,
6734
+ state: state === "all" ? void 0 : state,
6735
+ owner: opts.owner,
6736
+ page: opts.page ? parseInt(opts.page, 10) : void 0,
6737
+ pageSize: opts.pageSize ? parseInt(opts.pageSize, 10) : void 0,
6738
+ json: opts.json,
6739
+ unicode: opts.unicode,
6740
+ verbose: opts.verbose
6741
+ });
6742
+ }
6743
+ );
6478
6744
  var accountGroupCmd = program.command("account-group").description("\u8D26\u53F7\u5206\u7EC4\u7BA1\u7406\uFF1A\u67E5\u8BE2\u3001\u65B0\u5EFA\u3001\u7F16\u8F91\u3001\u5220\u9664\u5206\u7EC4");
6479
- accountGroupCmd.command("list").description("\u67E5\u8BE2\u8D26\u53F7\u5206\u7EC4\u5217\u8868").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u5B8C\u6574\u5206\u7EC4\u6570\u636E\uFF08\u542B mediaAccountInfos\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6480
- await runAccountGroupList({
6481
- token: opts.token,
6482
- json: opts.json,
6483
- unicode: opts.unicode,
6484
- verbose: opts.verbose
6485
- });
6486
- });
6745
+ accountGroupCmd.command("list").description("\u67E5\u8BE2\u8D26\u53F7\u5206\u7EC4\u5217\u8868").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u5B8C\u6574\u5206\u7EC4\u6570\u636E\uFF08\u542B mediaAccountInfos\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6746
+ async (opts) => {
6747
+ await runAccountGroupList({
6748
+ token: opts.token,
6749
+ json: opts.json,
6750
+ unicode: opts.unicode,
6751
+ verbose: opts.verbose
6752
+ });
6753
+ }
6754
+ );
6487
6755
  accountGroupCmd.command("create").description("\u65B0\u5EFA\u8D26\u53F7\u5206\u7EC4").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--name <name>", "\u5206\u7EC4\u540D\u79F0").option(
6488
6756
  "--accounts <ids>",
6489
6757
  "\u7EC4\u5185\u8D26\u53F7\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u4ECE list-accounts --json \u83B7\u53D6\uFF09"
6490
- ).option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6491
- await runAccountGroupCreate({
6492
- token: opts.token,
6493
- name: opts.name,
6494
- accounts: opts.accounts,
6495
- json: opts.json,
6496
- verbose: opts.verbose
6497
- });
6498
- });
6499
- accountGroupCmd.command("update").description("\u7F16\u8F91\u5DF2\u6709\u8D26\u53F7\u5206\u7EC4\uFF08\u66F4\u65B0\u540D\u79F0\u6216\u8D26\u53F7\u5217\u8868\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--name <name>", "\u65B0\u5206\u7EC4\u540D\u79F0").option(
6500
- "--accounts <ids>",
6501
- "\u7EC4\u5185\u8D26\u53F7\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u5219\u6E05\u7A7A\u5206\u7EC4\u5185\u8D26\u53F7"
6502
- ).option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6503
- await runAccountGroupUpdate({
6504
- token: opts.token,
6505
- id: opts.id,
6506
- name: opts.name,
6507
- accounts: opts.accounts,
6508
- json: opts.json,
6509
- verbose: opts.verbose
6510
- });
6511
- });
6758
+ ).option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6759
+ async (opts) => {
6760
+ await runAccountGroupCreate({
6761
+ token: opts.token,
6762
+ name: opts.name,
6763
+ accounts: opts.accounts,
6764
+ json: opts.json,
6765
+ verbose: opts.verbose
6766
+ });
6767
+ }
6768
+ );
6769
+ accountGroupCmd.command("update").description("\u7F16\u8F91\u5DF2\u6709\u8D26\u53F7\u5206\u7EC4\uFF08\u66F4\u65B0\u540D\u79F0\u6216\u8D26\u53F7\u5217\u8868\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--name <name>", "\u65B0\u5206\u7EC4\u540D\u79F0").option("--accounts <ids>", "\u7EC4\u5185\u8D26\u53F7\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u5219\u6E05\u7A7A\u5206\u7EC4\u5185\u8D26\u53F7").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6770
+ async (opts) => {
6771
+ await runAccountGroupUpdate({
6772
+ token: opts.token,
6773
+ id: opts.id,
6774
+ name: opts.name,
6775
+ accounts: opts.accounts,
6776
+ json: opts.json,
6777
+ verbose: opts.verbose
6778
+ });
6779
+ }
6780
+ );
6512
6781
  accountGroupCmd.command("delete").description("\u5220\u9664\u8D26\u53F7\u5206\u7EC4\uFF08\u4E0D\u53EF\u5220\u9664\u300C\u672A\u5206\u7EC4\u300D\u865A\u62DF\u5206\u7EC4\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6513
6782
  await runAccountGroupDelete({
6514
6783
  token: opts.token,
@@ -6517,150 +6786,201 @@ accountGroupCmd.command("delete").description("\u5220\u9664\u8D26\u53F7\u5206\u7
6517
6786
  verbose: opts.verbose
6518
6787
  });
6519
6788
  });
6520
- accountGroupCmd.command("add-accounts").description("\u5411\u5206\u7EC4\u8FFD\u52A0\u8D26\u53F7\uFF08\u81EA\u52A8\u5408\u5E76\uFF0C\u4E0D\u5F71\u54CD\u5DF2\u6709\u8D26\u53F7\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--accounts <ids>", "\u8981\u6DFB\u52A0\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6521
- await runAccountGroupAddAccounts({
6522
- token: opts.token,
6523
- id: opts.id,
6524
- accounts: opts.accounts,
6525
- json: opts.json,
6526
- verbose: opts.verbose
6527
- });
6528
- });
6529
- accountGroupCmd.command("remove-accounts").description("\u4ECE\u5206\u7EC4\u79FB\u9664\u6307\u5B9A\u8D26\u53F7\uFF08\u4E0D\u5F71\u54CD\u5176\u4ED6\u5DF2\u6709\u8D26\u53F7\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--accounts <ids>", "\u8981\u79FB\u9664\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6530
- await runAccountGroupRemoveAccounts({
6531
- token: opts.token,
6532
- id: opts.id,
6533
- accounts: opts.accounts,
6534
- json: opts.json,
6535
- verbose: opts.verbose
6536
- });
6537
- });
6789
+ accountGroupCmd.command("add-accounts").description("\u5411\u5206\u7EC4\u8FFD\u52A0\u8D26\u53F7\uFF08\u81EA\u52A8\u5408\u5E76\uFF0C\u4E0D\u5F71\u54CD\u5DF2\u6709\u8D26\u53F7\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--accounts <ids>", "\u8981\u6DFB\u52A0\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6790
+ async (opts) => {
6791
+ await runAccountGroupAddAccounts({
6792
+ token: opts.token,
6793
+ id: opts.id,
6794
+ accounts: opts.accounts,
6795
+ json: opts.json,
6796
+ verbose: opts.verbose
6797
+ });
6798
+ }
6799
+ );
6800
+ accountGroupCmd.command("remove-accounts").description("\u4ECE\u5206\u7EC4\u79FB\u9664\u6307\u5B9A\u8D26\u53F7\uFF08\u4E0D\u5F71\u54CD\u5176\u4ED6\u5DF2\u6709\u8D26\u53F7\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").requiredOption("--id <groupId>", "\u5206\u7EC4 ID\uFF08\u6765\u81EA account-group list \u7684 id \u5B57\u6BB5\uFF09").requiredOption("--accounts <ids>", "\u8981\u79FB\u9664\u7684 mediaCustomerId\uFF0C\u9017\u53F7\u5206\u9694").option("--json", "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6801
+ async (opts) => {
6802
+ await runAccountGroupRemoveAccounts({
6803
+ token: opts.token,
6804
+ id: opts.id,
6805
+ accounts: opts.accounts,
6806
+ json: opts.json,
6807
+ verbose: opts.verbose
6808
+ });
6809
+ }
6810
+ );
6538
6811
  var personaCmd = program.command("persona").description("CSO \u4EBA\u8BBE\uFF1A\u67E5\u8BE2\u5E73\u53F0\u4EBA\u8BBE\u4E0E styleGuide\uFF08Markdown\uFF09");
6539
- personaCmd.command("list").description("\u62C9\u53D6\u4EBA\u8BBE\u5217\u8868\uFF08POST /cso/v1/platformdata/GetPersonas\uFF0C\u4E0E Web \u7AEF\u4E00\u81F4\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--id <id>", "\u53EA\u663E\u793A\u6307\u5B9A\u4EBA\u8BBE id").option("--name <text>", "\u6309\u4EBA\u8BBE\u540D\u79F0\u5B50\u4E32\u8FC7\u6EE4").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u542B styleGuide\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6540
- await runPersonaList({
6541
- token: opts.token,
6542
- id: opts.id,
6543
- name: opts.name,
6544
- json: opts.json,
6545
- unicode: opts.unicode,
6546
- verbose: opts.verbose
6547
- });
6548
- });
6549
- var ragCmd = program.command("rag").description("RAG \u77E5\u8BC6\u5E93\u68C0\u7D22\uFF08\u4EC5\u5199\u7A3F/\u4E09\u5E93\uFF1B\u9ED8\u8BA4 belongToId=account/me \u7684 companyId\uFF0C\u9ED8\u8BA4 tags=\u4E09\u5E93\uFF09");
6550
- ragCmd.command("list").description("\u5217\u51FA\u5F53\u524D\u4F01\u4E1A\u4E0B\u6240\u6709\u77E5\u8BC6\u5E93\u6587\u4EF6\u5939\uFF08GET cutapi/v1/material/querylist\uFF09\uFF0C\u4F9B AI \u9009\u62E9\u68C0\u7D22\u8303\u56F4").option("--belong-to-id <id>", "\u4F01\u4E1A ID\uFF1B\u4E0D\u4F20\u5219\u4ECE GET /query/account/me \u53D6 companyId").option("--rag-only", "\u4EC5\u663E\u793A\u5DF2\u5EFA RAG \u5411\u91CF\u7D22\u5F15\uFF08ragStatus=true\uFF09\u7684\u77E5\u8BC6\u5E93", false).option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6551
- await runRagList({
6552
- belongToId: opts.belongToId,
6553
- ragOnly: opts.ragOnly,
6554
- token: opts.token,
6555
- json: opts.json,
6556
- verbose: opts.verbose
6557
- });
6558
- });
6559
- ragCmd.command("query").description("\u6309\u5173\u952E\u8BCD\u68C0\u7D22\u5DF2\u7EB3\u5165\u5411\u91CF\u7684\u77E5\u8BC6\u7247\u6BB5\uFF08GET cutapi/v1/material/queryknowledges\uFF09").requiredOption("-q, --query <text>", "\u68C0\u7D22\u5173\u952E\u8BCD\u6216\u95EE\u53E5").option(
6560
- "--belong-to-id <id>",
6561
- "\u4F01\u4E1A ID\uFF1B\u4E0D\u4F20\u5219\u4ECE GET /query/account/me \u53D6 companyId"
6562
- ).option(
6563
- "--source-id <ids>",
6564
- "\u7D20\u6750\u6587\u4EF6 ID\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF0Cqueryknowledges \u7684 sourceid\uFF09"
6565
- ).option("--folder-id <ids>", "\u6587\u4EF6\u5939 ID\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF0Ccomid\uFF09").option("--top-k <n>", "\u8FD4\u56DE\u6761\u6570\uFF0C3\u201330\uFF08\u9ED8\u8BA4 7\uFF09", "7").option("--belong-to <n>", "\u5F52\u5C5E\u7C7B\u578B\uFF08\u9ED8\u8BA4 0\uFF0C\u4F01\u4E1A\uFF09", "0").option(
6566
- "--tags <tags>",
6567
- "\u6807\u7B7E\u8FC7\u6EE4\uFF0C\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u5219\u4E0D\u8FC7\u6EE4\u6807\u7B7E\uFF08\u5168\u91CF\u68C0\u7D22\uFF09"
6568
- ).option("--category <categories>", "\u5206\u7C7B\u8FC7\u6EE4\uFF0C\u9017\u53F7\u5206\u9694").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6569
- await runRagQuery({
6570
- query: opts.query,
6571
- belongToId: opts.belongToId,
6572
- sourceId: opts.sourceId,
6573
- folderId: opts.folderId,
6574
- topK: opts.topK ? parseInt(opts.topK, 10) : void 0,
6575
- belongTo: opts.belongTo !== void 0 ? parseInt(opts.belongTo, 10) : void 0,
6576
- tags: opts.tags,
6577
- category: opts.category,
6578
- token: opts.token,
6579
- json: opts.json,
6580
- unicode: opts.unicode,
6581
- verbose: opts.verbose
6582
- });
6583
- });
6584
- program.command("list-members").description("\u5217\u51FA\u516C\u53F8\u6240\u6709\u6210\u5458\uFF0C\u663E\u793A\u7528\u6237ID\u4F9B list-accounts --owner \u4F7F\u7528").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("-q, --query <keyword>", "\u6309\u59D3\u540D\u6216\u624B\u673A\u53F7\u6A21\u7CCA\u641C\u7D22").option("--json", "\u4EE5 JSON \u8F93\u51FA\u6210\u5458\u5217\u8868", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u8F93\u51FA\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6585
- await runListMembers({
6586
- token: opts.token,
6587
- query: opts.query,
6588
- json: opts.json,
6589
- unicode: opts.unicode,
6590
- verbose: opts.verbose
6591
- });
6592
- });
6593
- program.command("upload").description("\u4E0A\u4F20\u672C\u5730\u89C6\u9891\u6216\u56FE\u7247\u5230 Siluzan \u7D20\u6750\u5E93\uFF0C\u8F93\u51FA\u53EF\u76F4\u63A5\u586B\u5165 publish-config.json \u7684\u5B57\u6BB5").requiredOption("-f, --file <path>", "\u672C\u5730\u6587\u4EF6\u8DEF\u5F84").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--kind <video|image>", "\u624B\u52A8\u6307\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u9ED8\u8BA4\u6309\u6269\u5C55\u540D\u81EA\u52A8\u5224\u65AD\uFF09").option("--cover <path>", "\u5C01\u9762\u56FE\u7247\u8DEF\u5F84\uFF08\u4E0A\u4F20\u89C6\u9891\u65F6\u5FC5\u987B\u63D0\u4F9B\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F\u53CA\u5B8C\u6574 URL\uFF08\u9ED8\u8BA4\u9690\u85CF\u542B\u7B7E\u540D URL\uFF09", false).action(async (opts) => {
6594
- await runUpload({ file: opts.file, token: opts.token, kind: opts.kind, cover: opts.cover, verbose: opts.verbose });
6595
- });
6596
- program.command("extract-cover").description("\u4ECE\u89C6\u9891\u6587\u4EF6\u622A\u53D6\u5C01\u9762\u5E27\uFF0C\u6309\u5E73\u53F0\u89C4\u683C\uFF08YouTube/TikTok/Twitter \u7B49\uFF09\u88C1\u526A\u7F29\u653E\uFF0C\u53EF\u9009\u81EA\u52A8\u4E0A\u4F20").requiredOption("-f, --file <path>", "\u89C6\u9891\u6587\u4EF6\u8DEF\u5F84\uFF08MP4/MOV/MKV \u7B49\uFF09").option(
6812
+ personaCmd.command("list").description("\u62C9\u53D6\u4EBA\u8BBE\u5217\u8868\uFF08POST /cso/v1/platformdata/GetPersonas\uFF0C\u4E0E Web \u7AEF\u4E00\u81F4\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--id <id>", "\u53EA\u663E\u793A\u6307\u5B9A\u4EBA\u8BBE id").option("--name <text>", "\u6309\u4EBA\u8BBE\u540D\u79F0\u5B50\u4E32\u8FC7\u6EE4").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u542B styleGuide\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6813
+ async (opts) => {
6814
+ await runPersonaList({
6815
+ token: opts.token,
6816
+ id: opts.id,
6817
+ name: opts.name,
6818
+ json: opts.json,
6819
+ unicode: opts.unicode,
6820
+ verbose: opts.verbose
6821
+ });
6822
+ }
6823
+ );
6824
+ var ragCmd = program.command("rag").description(
6825
+ "RAG \u77E5\u8BC6\u5E93\u68C0\u7D22\uFF08\u4EC5\u5199\u7A3F/\u4E09\u5E93\uFF1B\u9ED8\u8BA4 belongToId=account/me \u7684 companyId\uFF0C\u9ED8\u8BA4 tags=\u4E09\u5E93\uFF09"
6826
+ );
6827
+ ragCmd.command("list").description(
6828
+ "\u5217\u51FA\u5F53\u524D\u4F01\u4E1A\u4E0B\u6240\u6709\u77E5\u8BC6\u5E93\u6587\u4EF6\u5939\uFF08GET cutapi/v1/material/querylist\uFF09\uFF0C\u4F9B AI \u9009\u62E9\u68C0\u7D22\u8303\u56F4"
6829
+ ).option("--belong-to-id <id>", "\u4F01\u4E1A ID\uFF1B\u4E0D\u4F20\u5219\u4ECE GET /query/account/me \u53D6 companyId").option("--rag-only", "\u4EC5\u663E\u793A\u5DF2\u5EFA RAG \u5411\u91CF\u7D22\u5F15\uFF08ragStatus=true\uFF09\u7684\u77E5\u8BC6\u5E93", false).option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6830
+ async (opts) => {
6831
+ await runRagList({
6832
+ belongToId: opts.belongToId,
6833
+ ragOnly: opts.ragOnly,
6834
+ token: opts.token,
6835
+ json: opts.json,
6836
+ verbose: opts.verbose
6837
+ });
6838
+ }
6839
+ );
6840
+ ragCmd.command("query").description("\u6309\u5173\u952E\u8BCD\u68C0\u7D22\u5DF2\u7EB3\u5165\u5411\u91CF\u7684\u77E5\u8BC6\u7247\u6BB5\uFF08GET cutapi/v1/material/queryknowledges\uFF09").requiredOption("-q, --query <text>", "\u68C0\u7D22\u5173\u952E\u8BCD\u6216\u95EE\u53E5").option("--belong-to-id <id>", "\u4F01\u4E1A ID\uFF1B\u4E0D\u4F20\u5219\u4ECE GET /query/account/me \u53D6 companyId").option("--source-id <ids>", "\u7D20\u6750\u6587\u4EF6 ID\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF0Cqueryknowledges \u7684 sourceid\uFF09").option("--folder-id <ids>", "\u6587\u4EF6\u5939 ID\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u53EF\u9009\uFF0Ccomid\uFF09").option("--top-k <n>", "\u8FD4\u56DE\u6761\u6570\uFF0C3\u201330\uFF08\u9ED8\u8BA4 7\uFF09", "7").option("--belong-to <n>", "\u5F52\u5C5E\u7C7B\u578B\uFF08\u9ED8\u8BA4 0\uFF0C\u4F01\u4E1A\uFF09", "0").option("--tags <tags>", "\u6807\u7B7E\u8FC7\u6EE4\uFF0C\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u5219\u4E0D\u8FC7\u6EE4\u6807\u7B7E\uFF08\u5168\u91CF\u68C0\u7D22\uFF09").option("--category <categories>", "\u5206\u7C7B\u8FC7\u6EE4\uFF0C\u9017\u53F7\u5206\u9694").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6841
+ async (opts) => {
6842
+ await runRagQuery({
6843
+ query: opts.query,
6844
+ belongToId: opts.belongToId,
6845
+ sourceId: opts.sourceId,
6846
+ folderId: opts.folderId,
6847
+ topK: opts.topK ? parseInt(opts.topK, 10) : void 0,
6848
+ belongTo: opts.belongTo !== void 0 ? parseInt(opts.belongTo, 10) : void 0,
6849
+ tags: opts.tags,
6850
+ category: opts.category,
6851
+ token: opts.token,
6852
+ json: opts.json,
6853
+ unicode: opts.unicode,
6854
+ verbose: opts.verbose
6855
+ });
6856
+ }
6857
+ );
6858
+ program.command("list-members").description("\u5217\u51FA\u516C\u53F8\u6240\u6709\u6210\u5458\uFF0C\u663E\u793A\u7528\u6237ID\u4F9B list-accounts --owner \u4F7F\u7528").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("-q, --query <keyword>", "\u6309\u59D3\u540D\u6216\u624B\u673A\u53F7\u6A21\u7CCA\u641C\u7D22").option("--json", "\u4EE5 JSON \u8F93\u51FA\u6210\u5458\u5217\u8868", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u8F93\u51FA\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6859
+ async (opts) => {
6860
+ await runListMembers({
6861
+ token: opts.token,
6862
+ query: opts.query,
6863
+ json: opts.json,
6864
+ unicode: opts.unicode,
6865
+ verbose: opts.verbose
6866
+ });
6867
+ }
6868
+ );
6869
+ program.command("upload").description("\u4E0A\u4F20\u672C\u5730\u89C6\u9891\u6216\u56FE\u7247\u5230 Siluzan \u7D20\u6750\u5E93\uFF0C\u8F93\u51FA\u53EF\u76F4\u63A5\u586B\u5165 publish-config.json \u7684\u5B57\u6BB5").requiredOption("-f, --file <path>", "\u672C\u5730\u6587\u4EF6\u8DEF\u5F84").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--kind <video|image>", "\u624B\u52A8\u6307\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u9ED8\u8BA4\u6309\u6269\u5C55\u540D\u81EA\u52A8\u5224\u65AD\uFF09").option("--cover <path>", "\u5C01\u9762\u56FE\u7247\u8DEF\u5F84\uFF08\u4E0A\u4F20\u89C6\u9891\u65F6\u5FC5\u987B\u63D0\u4F9B\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F\u53CA\u5B8C\u6574 URL\uFF08\u9ED8\u8BA4\u9690\u85CF\u542B\u7B7E\u540D URL\uFF09", false).action(
6870
+ async (opts) => {
6871
+ await runUpload({
6872
+ file: opts.file,
6873
+ token: opts.token,
6874
+ kind: opts.kind,
6875
+ cover: opts.cover,
6876
+ verbose: opts.verbose
6877
+ });
6878
+ }
6879
+ );
6880
+ program.command("extract-cover").description(
6881
+ "\u4ECE\u89C6\u9891\u6587\u4EF6\u622A\u53D6\u5C01\u9762\u5E27\uFF0C\u6309\u5E73\u53F0\u89C4\u683C\uFF08YouTube/TikTok/Twitter \u7B49\uFF09\u88C1\u526A\u7F29\u653E\uFF0C\u53EF\u9009\u81EA\u52A8\u4E0A\u4F20"
6882
+ ).requiredOption("-f, --file <path>", "\u89C6\u9891\u6587\u4EF6\u8DEF\u5F84\uFF08MP4/MOV/MKV \u7B49\uFF09").option(
6597
6883
  "-t, --time <seconds...>",
6598
6884
  "\u622A\u5E27\u65F6\u95F4\u70B9\uFF08\u79D2\uFF0C\u53EF\u591A\u4E2A\uFF09\uFF0C\u5982 -t 0 3 10 \u622A\u53D6\u7B2C 0\u30013\u300110 \u79D2\u5E27\uFF08\u9ED8\u8BA4: 0\uFF09"
6599
6885
  ).option(
6600
6886
  "-p, --platform <platform>",
6601
6887
  "\u76EE\u6807\u5E73\u53F0\uFF08\u9ED8\u8BA4 youtube\uFF09\u3002\u8FD0\u884C --list-platforms \u67E5\u770B\u5168\u90E8\u652F\u6301\u5E73\u53F0",
6602
6888
  "youtube"
6603
- ).option("-o, --output <path>", "\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u591A\u5E27\u65F6\u4F5C\u4E3A\u6587\u4EF6\u540D\u524D\u7F00\uFF1B\u9ED8\u8BA4\u4FDD\u5B58\u5728\u89C6\u9891\u540C\u76EE\u5F55\uFF09").option("--upload", "\u622A\u53D6\u540E\u81EA\u52A8\u4E0A\u4F20\u5C01\u9762\u5230\u7D20\u6750\u5E93\uFF0C\u5E76\u8F93\u51FA cover JSON \u7247\u6BB5", false).option("--list-platforms", "\u5217\u51FA\u6240\u6709\u652F\u6301\u7684\u5E73\u53F0\u5C01\u9762\u89C4\u683C", false).option("--token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").action(async (opts) => {
6604
- if (opts.listPlatforms) {
6605
- const { PLATFORM_COVER_SPECS } = await import("./extract-cover-QK3HAZI2.js");
6606
- const keys = Object.keys(PLATFORM_COVER_SPECS);
6607
- console.log("\n\u5404\u5E73\u53F0\u89C6\u9891\u5C01\u9762\u89C4\u683C\uFF1A\n");
6608
- const maxKeyLen = Math.max(...keys.map((k) => k.length));
6609
- const maxNameLen = Math.max(...keys.map((k) => PLATFORM_COVER_SPECS[k].displayName.length));
6610
- console.log(` ${"\u5E73\u53F0 ID".padEnd(maxKeyLen)} ${"\u5E73\u53F0\u540D\u79F0".padEnd(maxNameLen)} ${"\u5C3A\u5BF8".padEnd(12)} ${"\u6BD4\u4F8B".padEnd(6)} \u8BF4\u660E`);
6611
- console.log(" " + "-".repeat(maxKeyLen + maxNameLen + 55));
6612
- for (const key of keys) {
6613
- const spec = PLATFORM_COVER_SPECS[key];
6614
- const size = `${spec.width}\xD7${spec.height}`;
6615
- console.log(` ${key.padEnd(maxKeyLen)} ${spec.displayName.padEnd(maxNameLen)} ${size.padEnd(12)} ${spec.ratio.padEnd(6)} ${spec.note}`);
6889
+ ).option("-o, --output <path>", "\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u591A\u5E27\u65F6\u4F5C\u4E3A\u6587\u4EF6\u540D\u524D\u7F00\uFF1B\u9ED8\u8BA4\u4FDD\u5B58\u5728\u89C6\u9891\u540C\u76EE\u5F55\uFF09").option("--upload", "\u622A\u53D6\u540E\u81EA\u52A8\u4E0A\u4F20\u5C01\u9762\u5230\u7D20\u6750\u5E93\uFF0C\u5E76\u8F93\u51FA cover JSON \u7247\u6BB5", false).option("--list-platforms", "\u5217\u51FA\u6240\u6709\u652F\u6301\u7684\u5E73\u53F0\u5C01\u9762\u89C4\u683C", false).option("--token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").action(
6890
+ async (opts) => {
6891
+ if (opts.listPlatforms) {
6892
+ const { PLATFORM_COVER_SPECS } = await import("./extract-cover-RZ5OIHTV.js");
6893
+ const keys = Object.keys(PLATFORM_COVER_SPECS);
6894
+ console.log("\n\u5404\u5E73\u53F0\u89C6\u9891\u5C01\u9762\u89C4\u683C\uFF1A\n");
6895
+ const maxKeyLen = Math.max(...keys.map((k) => k.length));
6896
+ const maxNameLen = Math.max(...keys.map((k) => PLATFORM_COVER_SPECS[k].displayName.length));
6897
+ console.log(
6898
+ ` ${"\u5E73\u53F0 ID".padEnd(maxKeyLen)} ${"\u5E73\u53F0\u540D\u79F0".padEnd(maxNameLen)} ${"\u5C3A\u5BF8".padEnd(12)} ${"\u6BD4\u4F8B".padEnd(6)} \u8BF4\u660E`
6899
+ );
6900
+ console.log(" " + "-".repeat(maxKeyLen + maxNameLen + 55));
6901
+ for (const key of keys) {
6902
+ const spec = PLATFORM_COVER_SPECS[key];
6903
+ const size = `${spec.width}\xD7${spec.height}`;
6904
+ console.log(
6905
+ ` ${key.padEnd(maxKeyLen)} ${spec.displayName.padEnd(maxNameLen)} ${size.padEnd(12)} ${spec.ratio.padEnd(6)} ${spec.note}`
6906
+ );
6907
+ }
6908
+ console.log();
6909
+ return;
6616
6910
  }
6617
- console.log();
6618
- return;
6911
+ await runExtractCover({
6912
+ file: opts.file,
6913
+ time: opts.time,
6914
+ platform: opts.platform,
6915
+ output: opts.output,
6916
+ upload: opts.upload,
6917
+ token: opts.token
6918
+ });
6619
6919
  }
6620
- await runExtractCover({
6621
- file: opts.file,
6622
- time: opts.time,
6623
- platform: opts.platform,
6624
- output: opts.output,
6625
- upload: opts.upload,
6626
- token: opts.token
6627
- });
6628
- });
6920
+ );
6629
6921
  program.command("publish").description("\u6309 JSON \u914D\u7F6E\u6587\u4EF6\u63D0\u4EA4\u53D1\u5E03\u4EFB\u52A1\u5230 CSO").requiredOption("-c, --config <path>", "\u53D1\u5E03\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\uFF08JSON\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--dry-run", "\u4EC5\u9884\u89C8\u8BF7\u6C42\u4F53\uFF0C\u4E0D\u5B9E\u9645\u63D0\u4EA4", false).option("--verbose", "\u663E\u793A\u5B8C\u6574\u8BF7\u6C42\u4F53\u53CA\u8BE6\u7EC6\u9519\u8BEF\uFF08\u542B\u654F\u611F\u5B57\u6BB5\uFF0C\u9ED8\u8BA4\u8131\u654F\uFF09", false).action(async (opts) => {
6630
- await runPublish({ config: opts.config, token: opts.token, dryRun: opts.dryRun, verbose: opts.verbose });
6922
+ await runPublish({
6923
+ config: opts.config,
6924
+ token: opts.token,
6925
+ dryRun: opts.dryRun,
6926
+ verbose: opts.verbose
6927
+ });
6631
6928
  });
6632
6929
  var reportCmd = program.command("report").description("\u8FD0\u8425\u62A5\u8868\uFF08table\uFF09\u76F8\u5173\u547D\u4EE4\uFF1A\u62C9\u53D6\u62A5\u8868\u6570\u636E\u3001\u67E5\u770B\u5BFC\u51FA\u8BB0\u5F55\u3001\u4E0B\u8F7D PDF");
6633
- reportCmd.command("fetch").description("\u6309\u5A92\u4F53/\u65E5\u671F\u62C9\u53D6\u8FD0\u8425\u62A5\u8868\u6A21\u5757\u6570\u636E\uFF08\u8986\u76D6 table \u9875\u4E3B\u8981\u67E5\u8BE2\u63A5\u53E3\uFF09").requiredOption("--media <mediaType>", "\u5A92\u4F53\u7C7B\u578B\uFF0C\u5982 Douyin / YouTube / TikTokBusinessAccount / Twitter").option("--maids <ids...>", "\u5A92\u4F53\u8D26\u53F7list-accounts\u83B7\u53D6\u7684[mediaCustomerId] ID\uFF0C\u652F\u6301\u7A7A\u683C\u5206\u9694\u6216\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u8868\u793A\u8BE5\u5A92\u4F53\u5168\u90E8\u8D26\u53F7").option("--days <n>", "\u8FD1 N \u5929\uFF08\u4ECE\u6628\u5929\u5F80\u56DE\u7B97\uFF09\uFF1A7=\u8FD1 7 \u5929\uFF0C30=\u8FD1 30 \u5929\uFF08\u9ED8\u8BA4\uFF09\uFF0C90/180 \u7B49\uFF0C\u4F18\u5148\u7EA7\u4F4E\u4E8E --start/--end").option("--start <date>", "\u5F00\u59CB\u65F6\u95F4\uFF08\u672C\u5730\u65F6\u533A\uFF0CYYYY-MM-DD \u6216 ISO \u65E5\u671F\u65F6\u95F4\uFF09").option("--end <date>", "\u7ED3\u675F\u65F6\u95F4\uFF08\u672C\u5730\u65F6\u533A\uFF0CYYYY-MM-DD \u6216 ISO \u65E5\u671F\u65F6\u95F4\uFF09").option("--method <Day|Week|Moth>", "\u805A\u5408\u7EF4\u5EA6\uFF08\u4E0E Web table \u4FDD\u6301\u4E00\u81F4\uFF09", "Day").option(
6930
+ reportCmd.command("fetch").description("\u6309\u5A92\u4F53/\u65E5\u671F\u62C9\u53D6\u8FD0\u8425\u62A5\u8868\u6A21\u5757\u6570\u636E\uFF08\u8986\u76D6 table \u9875\u4E3B\u8981\u67E5\u8BE2\u63A5\u53E3\uFF09").requiredOption(
6931
+ "--media <mediaType>",
6932
+ "\u5A92\u4F53\u7C7B\u578B\uFF0C\u5982 Douyin / YouTube / TikTokBusinessAccount / Twitter"
6933
+ ).option(
6934
+ "--maids <ids...>",
6935
+ "\u5A92\u4F53\u8D26\u53F7list-accounts\u83B7\u53D6\u7684[mediaCustomerId] ID\uFF0C\u652F\u6301\u7A7A\u683C\u5206\u9694\u6216\u9017\u53F7\u5206\u9694\uFF1B\u4E0D\u4F20\u8868\u793A\u8BE5\u5A92\u4F53\u5168\u90E8\u8D26\u53F7"
6936
+ ).option(
6937
+ "--days <n>",
6938
+ "\u8FD1 N \u5929\uFF08\u4ECE\u6628\u5929\u5F80\u56DE\u7B97\uFF09\uFF1A7=\u8FD1 7 \u5929\uFF0C30=\u8FD1 30 \u5929\uFF08\u9ED8\u8BA4\uFF09\uFF0C90/180 \u7B49\uFF0C\u4F18\u5148\u7EA7\u4F4E\u4E8E --start/--end"
6939
+ ).option("--start <date>", "\u5F00\u59CB\u65F6\u95F4\uFF08\u672C\u5730\u65F6\u533A\uFF0CYYYY-MM-DD \u6216 ISO \u65E5\u671F\u65F6\u95F4\uFF09").option("--end <date>", "\u7ED3\u675F\u65F6\u95F4\uFF08\u672C\u5730\u65F6\u533A\uFF0CYYYY-MM-DD \u6216 ISO \u65E5\u671F\u65F6\u95F4\uFF09").option("--method <Day|Week|Moth>", "\u805A\u5408\u7EF4\u5EA6\uFF08\u4E0E Web table \u4FDD\u6301\u4E00\u81F4\uFF09", "Day").option(
6634
6940
  "--include <modules...>",
6635
6941
  "\u9700\u8981\u62C9\u53D6\u7684\u6A21\u5757\uFF0C\u652F\u6301\u9017\u53F7\u5206\u9694\uFF1Aoperation,total-fans,fans-analysis,hot-topic,works,hot-comment-word,comment-top10,video-duration,video-distribution,comment-trend,fans-trend,new-fans-trend,homepage-visit"
6636
- ).option("--order <play|digg|fullplay>", "works \u6A21\u5757\u6392\u5E8F\u5B57\u6BB5", "play").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6637
- await runReportFetch({
6638
- ...opts,
6639
- days: opts.days ? parseInt(opts.days, 10) : void 0
6640
- });
6641
- });
6642
- reportCmd.command("records").description("\u67E5\u8BE2\u8FD0\u8425\u62A5\u8868\u5BFC\u51FA\u8BB0\u5F55\uFF08\u5BF9\u5E94 table \u5BFC\u51FA\u8BB0\u5F55\u5F39\u7A97\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--page-size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 20\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6643
- await runReportRecords(opts);
6644
- });
6942
+ ).option("--order <play|digg|fullplay>", "works \u6A21\u5757\u6392\u5E8F\u5B57\u6BB5", "play").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6943
+ async (opts) => {
6944
+ await runReportFetch({
6945
+ ...opts,
6946
+ days: opts.days ? parseInt(opts.days, 10) : void 0
6947
+ });
6948
+ }
6949
+ );
6950
+ reportCmd.command("records").description("\u67E5\u8BE2\u8FD0\u8425\u62A5\u8868\u5BFC\u51FA\u8BB0\u5F55\uFF08\u5BF9\u5E94 table \u5BFC\u51FA\u8BB0\u5F55\u5F39\u7A97\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--page-size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 20\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6951
+ async (opts) => {
6952
+ await runReportRecords(opts);
6953
+ }
6954
+ );
6645
6955
  reportCmd.command("download").description("\u6309\u5BFC\u51FA\u8BB0\u5F55 ID \u4E0B\u8F7D\u8FD0\u8425\u62A5\u8868 PDF\uFF08\u5BF9\u5E94 table \u7684\u91CD\u65B0\u4E0B\u8F7D\uFF09").requiredOption("--id <recordId>", "\u5BFC\u51FA\u8BB0\u5F55 ID").option("-o, --output <path>", "\u8F93\u51FA PDF \u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\u81EA\u52A8\u547D\u540D\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6646
6956
  await runReportDownload(opts);
6647
6957
  });
6648
6958
  var planningCmd = program.command("planning").description("AI \u5185\u5BB9\u89C4\u5212\uFF08planning\uFF09\uFF1A\u4F01\u4E1A\u5217\u8868\u3001\u5185\u5BB9\u7C7B\u578B\u3001\u751F\u6210\u3001\u4EFB\u52A1\u7BA1\u7406\u3001\u8BE6\u60C5\u4E0E\u5BFC\u51FA");
6649
- planningCmd.command("enterprises").description("\u67E5\u8BE2\u4F01\u4E1A\u76EE\u5F55\uFF08cutapi querylist\uFF0C\u4F9B\u89C4\u5212\u751F\u6210\u65F6\u9009\u62E9\u4F01\u4E1A\uFF09").option("--belong-to-id <id>", "\u4F01\u4E1A\u5F52\u5C5E ID\uFF08\u4E0D\u4F20\u65F6\u53D1\u9001\u7A7A\u503C\uFF09").option("--page-size <number>", "\u76EE\u5F55\u67E5\u8BE2\u6761\u6570\uFF08\u9ED8\u8BA4 100\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6650
- await runPlanningEnterprises(opts);
6651
- });
6652
- planningCmd.command("content-types").description("\u67E5\u8BE2\u53EF\u7528\u5185\u5BB9\u7C7B\u578B\uFF08\u5931\u8D25\u65F6\u56DE\u9000\u9ED8\u8BA4 post/video\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6653
- await runPlanningContentTypes(opts);
6654
- });
6655
- planningCmd.command("generate").description("\u521B\u5EFA\u89C4\u5212\u751F\u6210\u4EFB\u52A1\uFF08\u5BF9\u5E94 planning \u751F\u6210\u5F39\u7A97\uFF09").requiredOption("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--enterprise-name <name>", "\u4F01\u4E1A\u540D\u79F0\uFF08\u4E0D\u4F20\u9ED8\u8BA4\u4F7F\u7528 enterprise-id\uFF09").requiredOption("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").requiredOption("--content-types <types...>", "\u5185\u5BB9\u7C7B\u578B\uFF0C\u652F\u6301\u9017\u53F7\u6216\u7A7A\u683C\uFF1Apost,video").option("--partnership-total-months <6|12|24>", "\u5408\u4F5C\u603B\u6708\u6570\uFF08\u9ED8\u8BA4 12\uFF09", "12").option("--partnership-start-year-month <YYYY-MM>", "\u5408\u4F5C\u5F00\u59CB\u6708\u4EFD\uFF08\u4E0E\u89C4\u5212\u6708\u4E0D\u540C\u624D\u4F1A\u4F20\u7ED9\u63A5\u53E3\uFF09").option("--freq-unit <week|month>", "\u9891\u6B21\u5355\u4F4D").option("--freq-count <number>", "\u9891\u6B21\u6570\u91CF\uFF08\u4E0E --freq-unit \u540C\u65F6\u63D0\u4F9B\uFF09").option("--marketing-goal <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u8425\u9500\u76EE\u6807").option("--key-products <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u6838\u5FC3\u4EA7\u54C1").option("--target-markets <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u76EE\u6807\u5E02\u573A").option("--key-events <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5173\u952E\u8282\u70B9").option("--content-tone <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5185\u5BB9\u8BED\u8C03").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6656
- await runPlanningGenerate(opts);
6657
- });
6658
- planningCmd.command("list").description("\u67E5\u8BE2\u89C4\u5212\u4EFB\u52A1\u5217\u8868\uFF08\u652F\u6301\u4F01\u4E1A/\u6708\u5EA6\u7B5B\u9009\u4E0E\u5206\u9875\uFF09").option("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").option("--page-index <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--page-size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6659
- await runPlanningList(opts);
6660
- });
6661
- planningCmd.command("watch").description("\u76D1\u542C\u89C4\u5212\u4EFB\u52A1\u8FDB\u5EA6\uFF08SSE\uFF09").argument("<taskId>", "\u4EFB\u52A1 ID").option("--timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (taskId, opts) => {
6662
- await runPlanningWatchTask(taskId, opts);
6663
- });
6959
+ planningCmd.command("enterprises").description("\u67E5\u8BE2\u4F01\u4E1A\u76EE\u5F55\uFF08cutapi querylist\uFF0C\u4F9B\u89C4\u5212\u751F\u6210\u65F6\u9009\u62E9\u4F01\u4E1A\uFF09").option("--belong-to-id <id>", "\u4F01\u4E1A\u5F52\u5C5E ID\uFF08\u4E0D\u4F20\u65F6\u53D1\u9001\u7A7A\u503C\uFF09").option("--page-size <number>", "\u76EE\u5F55\u67E5\u8BE2\u6761\u6570\uFF08\u9ED8\u8BA4 100\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6960
+ async (opts) => {
6961
+ await runPlanningEnterprises(opts);
6962
+ }
6963
+ );
6964
+ planningCmd.command("content-types").description("\u67E5\u8BE2\u53EF\u7528\u5185\u5BB9\u7C7B\u578B\uFF08\u5931\u8D25\u65F6\u56DE\u9000\u9ED8\u8BA4 post/video\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6965
+ async (opts) => {
6966
+ await runPlanningContentTypes(opts);
6967
+ }
6968
+ );
6969
+ planningCmd.command("generate").description("\u521B\u5EFA\u89C4\u5212\u751F\u6210\u4EFB\u52A1\uFF08\u5BF9\u5E94 planning \u751F\u6210\u5F39\u7A97\uFF09").requiredOption("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--enterprise-name <name>", "\u4F01\u4E1A\u540D\u79F0\uFF08\u4E0D\u4F20\u9ED8\u8BA4\u4F7F\u7528 enterprise-id\uFF09").requiredOption("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").requiredOption("--content-types <types...>", "\u5185\u5BB9\u7C7B\u578B\uFF0C\u652F\u6301\u9017\u53F7\u6216\u7A7A\u683C\uFF1Apost,video").option("--partnership-total-months <6|12|24>", "\u5408\u4F5C\u603B\u6708\u6570\uFF08\u9ED8\u8BA4 12\uFF09", "12").option("--partnership-start-year-month <YYYY-MM>", "\u5408\u4F5C\u5F00\u59CB\u6708\u4EFD\uFF08\u4E0E\u89C4\u5212\u6708\u4E0D\u540C\u624D\u4F1A\u4F20\u7ED9\u63A5\u53E3\uFF09").option("--freq-unit <week|month>", "\u9891\u6B21\u5355\u4F4D").option("--freq-count <number>", "\u9891\u6B21\u6570\u91CF\uFF08\u4E0E --freq-unit \u540C\u65F6\u63D0\u4F9B\uFF09").option("--marketing-goal <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u8425\u9500\u76EE\u6807").option("--key-products <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u6838\u5FC3\u4EA7\u54C1").option("--target-markets <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u76EE\u6807\u5E02\u573A").option("--key-events <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5173\u952E\u8282\u70B9").option("--content-tone <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5185\u5BB9\u8BED\u8C03").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6970
+ async (opts) => {
6971
+ await runPlanningGenerate(opts);
6972
+ }
6973
+ );
6974
+ planningCmd.command("list").description("\u67E5\u8BE2\u89C4\u5212\u4EFB\u52A1\u5217\u8868\uFF08\u652F\u6301\u4F01\u4E1A/\u6708\u5EA6\u7B5B\u9009\u4E0E\u5206\u9875\uFF09").option("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").option("--page-index <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--page-size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6975
+ async (opts) => {
6976
+ await runPlanningList(opts);
6977
+ }
6978
+ );
6979
+ planningCmd.command("watch").description("\u76D1\u542C\u89C4\u5212\u4EFB\u52A1\u8FDB\u5EA6\uFF08SSE\uFF09").argument("<taskId>", "\u4EFB\u52A1 ID").option("--timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6980
+ async (taskId, opts) => {
6981
+ await runPlanningWatchTask(taskId, opts);
6982
+ }
6983
+ );
6664
6984
  var planningTaskCmd = planningCmd.command("task").description("\u89C4\u5212\u4EFB\u52A1\u64CD\u4F5C\uFF1A\u53D6\u6D88\u3001\u91CD\u8BD5\u3001\u5220\u9664");
6665
6985
  planningTaskCmd.command("cancel").description("\u53D6\u6D88\u4EFB\u52A1").argument("<taskId>", "\u4EFB\u52A1 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (taskId, opts) => {
6666
6986
  await runPlanningTaskCancel(taskId, opts);
@@ -6674,20 +6994,28 @@ planningTaskCmd.command("delete").description("\u5220\u9664\u4EFB\u52A1").argume
6674
6994
  planningCmd.command("get").description("\u83B7\u53D6\u89C4\u5212\u8BE6\u60C5").argument("<planId>", "\u89C4\u5212 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (planId, opts) => {
6675
6995
  await runPlanningGet(planId, opts);
6676
6996
  });
6677
- planningCmd.command("regenerate").description("\u5BF9\u5DF2\u6709\u89C4\u5212\u53D1\u8D77\u518D\u751F\u6210").argument("<planId>", "\u89C4\u5212 ID").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (planId, opts) => {
6678
- await runPlanningRegenerate(planId, opts);
6679
- });
6997
+ planningCmd.command("regenerate").description("\u5BF9\u5DF2\u6709\u89C4\u5212\u53D1\u8D77\u518D\u751F\u6210").argument("<planId>", "\u89C4\u5212 ID").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
6998
+ async (planId, opts) => {
6999
+ await runPlanningRegenerate(planId, opts);
7000
+ }
7001
+ );
6680
7002
  var planningExportCmd = planningCmd.command("export").description("\u89C4\u5212\u5BFC\u51FA");
6681
- planningExportCmd.command("txt").description("\u5BFC\u51FA\u89C4\u5212\u4E3A TXT\uFF08Markdown \u8868\u683C\u683C\u5F0F\uFF09").option("--plan-id <id>", "\u89C4\u5212 ID\uFF08\u4E0E --input \u4E8C\u9009\u4E00\uFF09").option("--input <file>", "\u672C\u5730\u89C4\u5212 JSON \u6587\u4EF6\u8DEF\u5F84\uFF08\u4E0E --plan-id \u4E8C\u9009\u4E00\uFF09").option("-o, --output <file>", "\u5BFC\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u81EA\u52A8\u547D\u540D\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6682
- await runPlanningExportTxt(opts);
6683
- });
7003
+ planningExportCmd.command("txt").description("\u5BFC\u51FA\u89C4\u5212\u4E3A TXT\uFF08Markdown \u8868\u683C\u683C\u5F0F\uFF09").option("--plan-id <id>", "\u89C4\u5212 ID\uFF08\u4E0E --input \u4E8C\u9009\u4E00\uFF09").option("--input <file>", "\u672C\u5730\u89C4\u5212 JSON \u6587\u4EF6\u8DEF\u5F84\uFF08\u4E0E --plan-id \u4E8C\u9009\u4E00\uFF09").option("-o, --output <file>", "\u5BFC\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u81EA\u52A8\u547D\u540D\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7004
+ async (opts) => {
7005
+ await runPlanningExportTxt(opts);
7006
+ }
7007
+ );
6684
7008
  var taskCmd = program.command("task").description("\u4EFB\u52A1\u7BA1\u7406\uFF08taskManage\uFF09\uFF1A\u5217\u8868\u7B5B\u9009\u3001\u8BE6\u60C5\u3001\u4EFB\u52A1\u64CD\u4F5C\u3001\u53D1\u5E03\u9879\u64CD\u4F5C\u3001\u8BC4\u8BBA\u64CD\u4F5C");
6685
- taskCmd.command("list").description("\u67E5\u8BE2\u4EFB\u52A1\u5217\u8868\uFF08\u652F\u6301\u72B6\u6001/\u65F6\u95F4/\u7C7B\u578B/\u5173\u952E\u8BCD/\u5F02\u5E38\u4EFB\u52A1\u7B5B\u9009\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("--status <-1|0|1|2>", "\u72B6\u6001\uFF1A-1 \u5168\u90E8\uFF0C0 \u6267\u884C\u4E2D\uFF0C1 \u5DF2\u5B8C\u6210\uFF0C2 \u5DF2\u4E2D\u6B62").option("--asc", "\u6309\u521B\u5EFA\u65F6\u95F4\u5347\u5E8F\uFF08\u9ED8\u8BA4\u964D\u5E8F\uFF09", false).option("--search-type <task-name|creator>", "\u5173\u952E\u8BCD\u5B57\u6BB5\uFF08\u9ED8\u8BA4 task-name\uFF09", "task-name").option("--keyword <text>", "\u5173\u952E\u8BCD\uFF08\u914D\u5408 --search-type \u4F7F\u7528\uFF09").option("--creator <name>", "\u6309\u521B\u5EFA\u4EBA\u7B5B\u9009\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E --keyword + --search-type creator\uFF09").option("--mine", "\u4EC5\u770B\u6211\u521B\u5EFA\u7684\uFF08\u9700\u540C\u65F6\u63D0\u4F9B --mine-name\uFF09", false).option("--mine-name <name>", "\u6211\u7684\u7528\u6237\u540D\uFF08\u7528\u4E8E --mine\uFF09").option("--failed-only", "\u4EC5\u67E5\u770B\u5F02\u5E38\u4EFB\u52A1\uFF08nolyFailed=true\uFF09", false).option("--content-type <all|video|image-text>", "\u5185\u5BB9\u7C7B\u578B\u7B5B\u9009", "all").option("--date-preset <all|week|month|year>", "\u5FEB\u6377\u65F6\u95F4\u8303\u56F4", "all").option("--start-date <YYYY-MM-DD>", "\u81EA\u5B9A\u4E49\u5F00\u59CB\u65E5\u671F\uFF08\u4E0E --end-date \u540C\u65F6\u4F7F\u7528\uFF09").option("--end-date <YYYY-MM-DD>", "\u81EA\u5B9A\u4E49\u7ED3\u675F\u65E5\u671F\uFF08\u4E0E --start-date \u540C\u65F6\u4F7F\u7528\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6686
- await runTaskList(opts);
6687
- });
6688
- taskCmd.command("detail").description("\u67E5\u770B\u4EFB\u52A1\u8BE6\u60C5\u53D1\u5E03\u9879\u5217\u8868\uFF08\u5BF9\u5E94\u8BE6\u60C5\u62BD\u5C49\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").option("--media <nameOrId>", "\u5A92\u4F53\u7C7B\u578B\uFF08\u5982 Douyin / YouTube\uFF0C\u6216\u6570\u5B57 ID\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6689
- await runTaskDetail(opts);
6690
- });
7009
+ taskCmd.command("list").description("\u67E5\u8BE2\u4EFB\u52A1\u5217\u8868\uFF08\u652F\u6301\u72B6\u6001/\u65F6\u95F4/\u7C7B\u578B/\u5173\u952E\u8BCD/\u5F02\u5E38\u4EFB\u52A1\u7B5B\u9009\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("--status <-1|0|1|2>", "\u72B6\u6001\uFF1A-1 \u5168\u90E8\uFF0C0 \u6267\u884C\u4E2D\uFF0C1 \u5DF2\u5B8C\u6210\uFF0C2 \u5DF2\u4E2D\u6B62").option("--asc", "\u6309\u521B\u5EFA\u65F6\u95F4\u5347\u5E8F\uFF08\u9ED8\u8BA4\u964D\u5E8F\uFF09", false).option("--search-type <task-name|creator>", "\u5173\u952E\u8BCD\u5B57\u6BB5\uFF08\u9ED8\u8BA4 task-name\uFF09", "task-name").option("--keyword <text>", "\u5173\u952E\u8BCD\uFF08\u914D\u5408 --search-type \u4F7F\u7528\uFF09").option("--creator <name>", "\u6309\u521B\u5EFA\u4EBA\u7B5B\u9009\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E --keyword + --search-type creator\uFF09").option("--mine", "\u4EC5\u770B\u6211\u521B\u5EFA\u7684\uFF08\u9700\u540C\u65F6\u63D0\u4F9B --mine-name\uFF09", false).option("--mine-name <name>", "\u6211\u7684\u7528\u6237\u540D\uFF08\u7528\u4E8E --mine\uFF09").option("--failed-only", "\u4EC5\u67E5\u770B\u5F02\u5E38\u4EFB\u52A1\uFF08nolyFailed=true\uFF09", false).option("--content-type <all|video|image-text>", "\u5185\u5BB9\u7C7B\u578B\u7B5B\u9009", "all").option("--date-preset <all|week|month|year>", "\u5FEB\u6377\u65F6\u95F4\u8303\u56F4", "all").option("--start-date <YYYY-MM-DD>", "\u81EA\u5B9A\u4E49\u5F00\u59CB\u65E5\u671F\uFF08\u4E0E --end-date \u540C\u65F6\u4F7F\u7528\uFF09").option("--end-date <YYYY-MM-DD>", "\u81EA\u5B9A\u4E49\u7ED3\u675F\u65E5\u671F\uFF08\u4E0E --start-date \u540C\u65F6\u4F7F\u7528\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7010
+ async (opts) => {
7011
+ await runTaskList(opts);
7012
+ }
7013
+ );
7014
+ taskCmd.command("detail").description("\u67E5\u770B\u4EFB\u52A1\u8BE6\u60C5\u53D1\u5E03\u9879\u5217\u8868\uFF08\u5BF9\u5E94\u8BE6\u60C5\u62BD\u5C49\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").option("--media <nameOrId>", "\u5A92\u4F53\u7C7B\u578B\uFF08\u5982 Douyin / YouTube\uFF0C\u6216\u6570\u5B57 ID\uFF09").option("--page <number>", "\u9875\u7801\uFF08\u9ED8\u8BA4 1\uFF09").option("--size <number>", "\u6BCF\u9875\u6761\u6570\uFF08\u9ED8\u8BA4 10\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u9002\u5408\u811A\u672C\u5904\u7406\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7015
+ async (opts) => {
7016
+ await runTaskDetail(opts);
7017
+ }
7018
+ );
6691
7019
  taskCmd.command("start").description("\u542F\u52A8\u4EFB\u52A1\uFF08\u5BF9\u5E94 taskManage \u7684 startTask\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6692
7020
  await runTaskStart(opts);
6693
7021
  });
@@ -6700,9 +7028,11 @@ taskCmd.command("delete").description("\u5220\u9664\u4EFB\u52A1\uFF08\u5BF9\u5E9
6700
7028
  taskCmd.command("rename").description("\u91CD\u547D\u540D\u4EFB\u52A1\uFF08\u5BF9\u5E94 taskManage \u7684 reName\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").requiredOption("--name <taskName>", "\u65B0\u4EFB\u52A1\u540D").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6701
7029
  await runTaskRename(opts);
6702
7030
  });
6703
- taskCmd.command("check-edit").description("\u68C0\u67E5\u4EFB\u52A1\u662F\u5426\u5141\u8BB8\u4FEE\u6539\uFF08\u5BF9\u5E94 checkAllowChange\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6704
- await runTaskCheckEdit(opts);
6705
- });
7031
+ taskCmd.command("check-edit").description("\u68C0\u67E5\u4EFB\u52A1\u662F\u5426\u5141\u8BB8\u4FEE\u6539\uFF08\u5BF9\u5E94 checkAllowChange\uFF09").requiredOption("--publish-id <id>", "\u4EFB\u52A1 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7032
+ async (opts) => {
7033
+ await runTaskCheckEdit(opts);
7034
+ }
7035
+ );
6706
7036
  var taskItemCmd = taskCmd.command("item").description("\u4EFB\u52A1\u53D1\u5E03\u9879\u64CD\u4F5C\uFF1A\u5220\u9664\u3001\u91CD\u65B0\u53D1\u5E03\u3001\u7ACB\u5373\u53D1\u5E03");
6707
7037
  taskItemCmd.command("delete").description("\u5220\u9664\u5355\u4E2A\u53D1\u5E03\u9879\uFF08deletePublishItem\uFF09").requiredOption("--item-id <id>", "\u53D1\u5E03\u9879 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6708
7038
  await runTaskItemDelete(opts);
@@ -6714,9 +7044,11 @@ taskItemCmd.command("run-now").description("\u7ACB\u5373\u53D1\u5E03\u5355\u4E2A
6714
7044
  await runTaskItemRunNow(opts);
6715
7045
  });
6716
7046
  var taskCommentCmd = taskCmd.command("comment").description("\u4EFB\u52A1\u8BE6\u60C5\u4E2D\u7684\u8BC4\u8BBA\u67E5\u8BE2\u4E0E\u56DE\u590D");
6717
- taskCommentCmd.command("list").description("\u6309\u89C6\u9891\u67E5\u8BE2\u8BC4\u8BBA\u5217\u8868").requiredOption("--media-type <nameOrId>", "\u5A92\u4F53\u7C7B\u578B\uFF08\u5982 Douyin / YouTube \u6216\u6570\u5B57 ID\uFF09").requiredOption("--video-id <id>", "\u89C6\u9891 ID").requiredOption("--media-customer-id <id>", "\u5A92\u4F53\u8D26\u53F7 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
6718
- await runTaskCommentList(opts);
6719
- });
7047
+ taskCommentCmd.command("list").description("\u6309\u89C6\u9891\u67E5\u8BE2\u8BC4\u8BBA\u5217\u8868").requiredOption("--media-type <nameOrId>", "\u5A92\u4F53\u7C7B\u578B\uFF08\u5982 Douyin / YouTube \u6216\u6570\u5B57 ID\uFF09").requiredOption("--video-id <id>", "\u89C6\u9891 ID").requiredOption("--media-customer-id <id>", "\u5A92\u4F53\u8D26\u53F7 ID").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7048
+ async (opts) => {
7049
+ await runTaskCommentList(opts);
7050
+ }
7051
+ );
6720
7052
  program.parse();
6721
7053
  var activeCmd = process.argv[2];
6722
7054
  if (activeCmd !== "update" && activeCmd !== "login") {