siluzan-tso-cli 1.1.37-beta.10 → 1.1.37-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -51,7 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
51
51
  siluzan-tso init --force # 强制覆盖已存在文件
52
52
  ```
53
53
 
54
- > **注意**:当前为测试版(1.1.37-beta.10),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.37-beta.11),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -105657,7 +105657,8 @@ var COL_META = [
105657
105657
  { key: "company", header: "\u516C\u53F8\u540D\u79F0" },
105658
105658
  { key: "id", header: "\u8D26\u6237ID" },
105659
105659
  { key: "name", header: "\u8D26\u6237\u540D\u79F0" },
105660
- { key: "oauthState", header: "\u72B6\u6001" },
105660
+ /** 对应 JSON `ma.invalidOAuthToken`(true=失效 / false=正常) */
105661
+ { key: "authStatus", header: "\u6388\u6743\u72B6\u6001" },
105661
105662
  { key: "auditState", header: "\u5BA1\u6838\u72B6\u6001" },
105662
105663
  { key: "authType", header: "\u6388\u6743\u7C7B\u578B" },
105663
105664
  { key: "createdAt", header: "\u6388\u6743/\u5F00\u6237\u65F6\u95F4" }
@@ -105757,8 +105758,8 @@ function formatMetaAuthType(mediaAccountType) {
105757
105758
  if (mediaAccountType === "FacebookAds") return "Facebook \u5E7F\u544A\u8D26\u6237";
105758
105759
  return mediaAccountType ?? "-";
105759
105760
  }
105760
- function formatMetaOAuthColumn(ma) {
105761
- return ma.invalidOAuthToken ? "\u5931\u6548" : "\u6B63\u5E38";
105761
+ function formatOAuthAuthStatus(ma) {
105762
+ return ma.invalidOAuthToken ? "\u26A0\uFE0F \u5931\u6548" : "\u2705 \u6B63\u5E38";
105762
105763
  }
105763
105764
  function formatMetaAuditStatus(ma) {
105764
105765
  const ms = ma.mediaAccountState ?? "";
@@ -105805,7 +105806,7 @@ function printMetaTable(items2, tableOpts) {
105805
105806
  company: item.mag?.advertiserName ?? "-",
105806
105807
  id: displayMetaAccountId(ma.mediaCustomerId),
105807
105808
  name: ma.mediaCustomerName ?? "-",
105808
- oauthState: formatMetaOAuthColumn(ma),
105809
+ authStatus: formatOAuthAuthStatus(ma),
105809
105810
  auditState: formatMetaAuditStatus(ma),
105810
105811
  authType: formatMetaAuthType(ma.mediaAccountType),
105811
105812
  createdAt: fmtDate(ma.createdDateTime)
@@ -105816,7 +105817,6 @@ function printMetaTable(items2, tableOpts) {
105816
105817
  function printSpendMetricsAccountTable(items2, tableOpts) {
105817
105818
  const rows = items2.map((item) => {
105818
105819
  const ma = item.ma;
105819
- const authStatus = ma.invalidOAuthToken ? "\u26A0\uFE0F \u5931\u6548" : "\u2705 \u6B63\u5E38";
105820
105820
  const sharedCount = Array.isArray(ma.accountIds) ? String(Math.max(0, ma.accountIds.length - 1)) : "-";
105821
105821
  return {
105822
105822
  company: item.mag?.advertiserName ?? "-",
@@ -105828,7 +105828,7 @@ function printSpendMetricsAccountTable(items2, tableOpts) {
105828
105828
  conversions: fmtNum(ma["conversions"], 0),
105829
105829
  clicks: fmtNum(ma["clicks"], 0),
105830
105830
  cpc: fmtNum(ma["costPerClick"]),
105831
- authStatus,
105831
+ authStatus: formatOAuthAuthStatus(ma),
105832
105832
  createdAt: fmtDate(ma.createdDateTime),
105833
105833
  shared: sharedCount
105834
105834
  };
@@ -105838,7 +105838,6 @@ function printSpendMetricsAccountTable(items2, tableOpts) {
105838
105838
  function printYandexTable(items2, tableOpts) {
105839
105839
  const rows = items2.map((item) => {
105840
105840
  const ma = item.ma;
105841
- const authStatus = ma.invalidOAuthToken ? "\u26A0\uFE0F \u5931\u6548" : "\u2705 \u6B63\u5E38";
105842
105841
  const sharedCount = Array.isArray(ma.accountIds) ? String(Math.max(0, ma.accountIds.length - 1)) : "-";
105843
105842
  const pwd = ma.mediaPassword != null && String(ma.mediaPassword).trim() !== "" ? String(ma.mediaPassword) : "-";
105844
105843
  return {
@@ -105851,7 +105850,7 @@ function printYandexTable(items2, tableOpts) {
105851
105850
  conversions: fmtNum(ma["conversions"], 0),
105852
105851
  clicks: fmtNum(ma["clicks"], 0),
105853
105852
  cpc: fmtNum(ma["costPerClick"]),
105854
- authStatus,
105853
+ authStatus: formatOAuthAuthStatus(ma),
105855
105854
  createdAt: fmtDate(ma.createdDateTime),
105856
105855
  shared: sharedCount
105857
105856
  };
@@ -105861,7 +105860,6 @@ function printYandexTable(items2, tableOpts) {
105861
105860
  function printTikTokTable(items2, tableOpts) {
105862
105861
  const rows = items2.map((item) => {
105863
105862
  const ma = item.ma;
105864
- const authStatus = ma.invalidOAuthToken ? "\u26A0\uFE0F \u5931\u6548" : "\u2705 \u6B63\u5E38";
105865
105863
  const sharedCount = Array.isArray(ma.accountIds) ? String(Math.max(0, ma.accountIds.length - 1)) : "-";
105866
105864
  return {
105867
105865
  company: item.mag?.advertiserName ?? "-",
@@ -105874,7 +105872,7 @@ function printTikTokTable(items2, tableOpts) {
105874
105872
  clicks: fmtNum(ma["clicks"], 0),
105875
105873
  cpc: fmtNum(ma["costPerClick"]),
105876
105874
  bc: formatTikTokBcColumn(ma),
105877
- authStatus,
105875
+ authStatus: formatOAuthAuthStatus(ma),
105878
105876
  auditStatus: formatTikTokAuditStatus(ma),
105879
105877
  createdAt: fmtDate(ma.createdDateTime),
105880
105878
  shared: sharedCount
@@ -105885,7 +105883,6 @@ function printTikTokTable(items2, tableOpts) {
105885
105883
  function printGoogleTable(items2, tableOpts) {
105886
105884
  const rows = items2.map((item) => {
105887
105885
  const ma = item.ma;
105888
- const authStatus = ma.invalidOAuthToken ? "\u26A0\uFE0F \u5931\u6548" : "\u2705 \u6B63\u5E38";
105889
105886
  const platformStatus = ma.platformStatus ?? "-";
105890
105887
  const sharedCount = Array.isArray(ma.accountIds) ? String(Math.max(0, ma.accountIds.length - 1)) : "-";
105891
105888
  return {
@@ -105900,7 +105897,7 @@ function printGoogleTable(items2, tableOpts) {
105900
105897
  cpc: fmtNum(ma["costPerClick"]),
105901
105898
  arit: String(ma.aritScore ?? "-"),
105902
105899
  platformStatus,
105903
- authStatus,
105900
+ authStatus: formatOAuthAuthStatus(ma),
105904
105901
  createdAt: fmtDate(ma.createdDateTime),
105905
105902
  shared: sharedCount
105906
105903
  };
@@ -105913,7 +105910,8 @@ var COL_DEFAULT_WITH_MEDIA = [
105913
105910
  { key: "advertiserName", header: "\u5E7F\u544A\u4E3B" },
105914
105911
  { key: "mediaCustomerName", header: "\u8D26\u6237\u540D\u79F0" },
105915
105912
  COL_CURRENCY,
105916
- { key: "status", header: "\u8D26\u6237\u72B6\u6001" }
105913
+ { key: "status", header: "\u8D26\u6237\u72B6\u6001" },
105914
+ { key: "authStatus", header: "\u6388\u6743\u72B6\u6001" }
105917
105915
  ];
105918
105916
  var COL_DEFAULT_SINGLE = COL_DEFAULT_WITH_MEDIA.filter(
105919
105917
  (c) => c.key !== "mediaType"
@@ -105926,10 +105924,8 @@ function printDefaultTable(items2, media, tableOpts) {
105926
105924
  statusLabel = "\u{1F6AB} \u5DF2\u7981\u7528";
105927
105925
  } else if (!ma.mediaCustomerId) {
105928
105926
  statusLabel = "\u23F3 \u672A\u5F00\u901A";
105929
- } else if (ma.invalidOAuthToken) {
105930
- statusLabel = "\u26A0\uFE0F OAuth\u5931\u6548";
105931
105927
  } else {
105932
- statusLabel = "\u2705 \u6B63\u5E38";
105928
+ statusLabel = ma.mediaAccountState?.trim() ? ma.mediaAccountState : "\u2705 \u6B63\u5E38";
105933
105929
  }
105934
105930
  return {
105935
105931
  mediaType: ma.mediaAccountType ?? "",
@@ -105937,7 +105933,8 @@ function printDefaultTable(items2, media, tableOpts) {
105937
105933
  advertiserName: item.mag?.advertiserName ?? "",
105938
105934
  mediaCustomerName: ma.mediaCustomerName ?? "",
105939
105935
  currency: formatCurrencyCodeLabel(ma.currencyCode),
105940
- status: statusLabel
105936
+ status: statusLabel,
105937
+ authStatus: formatOAuthAuthStatus(ma)
105941
105938
  };
105942
105939
  });
105943
105940
  const columns = media ? COL_DEFAULT_SINGLE : COL_DEFAULT_WITH_MEDIA;
@@ -121801,9 +121798,13 @@ Google \u8D26\u6237\u8BBF\u95EE\u6743\u9650\u6821\u9A8C ${mediaCustomerId}`);
121801
121798
  }
121802
121799
 
121803
121800
  // src/commands/account-manage/share.ts
121801
+ init_dist();
121804
121802
  init_auth();
121805
121803
  init_cli_json_snapshot();
121806
121804
  init_cli_table();
121805
+ function normalizeShareLookupPhone(input) {
121806
+ return normalizeChinaPhone(input.trim());
121807
+ }
121807
121808
  async function runAccountDelink(opts) {
121808
121809
  if (!opts.id && (!opts.ids || opts.ids.length === 0)) {
121809
121810
  console.error("\n\u274C \u8BF7\u901A\u8FC7 --id \u6216 --ids \u63D0\u4F9B\u8981\u65AD\u5F00\u5173\u8054\u7684\u8D26\u6237 entityId\n");
@@ -121860,13 +121861,24 @@ async function runAccountShare(opts) {
121860
121861
  console.error("\n\u274C \u65E0\u6CD5\u63A8\u5BFC\u4E3B API \u5730\u5740\uFF0C\u8BF7\u68C0\u67E5 apiBaseUrl \u914D\u7F6E\n");
121861
121862
  process.exit(1);
121862
121863
  }
121864
+ const phone = normalizeShareLookupPhone(opts.phone);
121865
+ if (!isValidChinaPhone(phone)) {
121866
+ console.error(
121867
+ `
121868
+ \u274C \u624B\u673A\u53F7\u683C\u5F0F\u65E0\u6548\uFF1A${opts.phone}
121869
+ SimpleAccountInfo \u987B\u4F20\u5E26\u56FD\u5BB6\u7801\u7684\u53F7\u7801\uFF08\u4E2D\u56FD\u5927\u9646\u9ED8\u8BA4 +86\uFF09\u3002
121870
+ \u793A\u4F8B\uFF1A--phone 18379752858 \u6216 --phone +8618379752858\uFF08\u5DF2\u6709\u56FD\u5BB6\u7801\u65F6\u52FF\u518D\u8865\uFF09
121871
+ `
121872
+ );
121873
+ process.exit(1);
121874
+ }
121863
121875
  let userId;
121864
121876
  try {
121865
- const lookupUrl = `${config.mainApiUrl}/query/account/SimpleAccountInfo?phone=${encodeURIComponent(opts.phone)}`;
121877
+ const lookupUrl = `${config.mainApiUrl}/query/account/SimpleAccountInfo?phone=${encodeURIComponent(phone)}`;
121866
121878
  const users = await apiFetch2(lookupUrl, config, {}, opts.verbose);
121867
121879
  if (!Array.isArray(users) || users.length === 0) {
121868
121880
  console.error(`
121869
- \u274C \u672A\u627E\u5230\u624B\u673A\u53F7 ${opts.phone} \u5BF9\u5E94\u7684\u4E1D\u8DEF\u8D5E\u8D26\u53F7\uFF0C\u8BF7\u786E\u8BA4\u8BE5\u7528\u6237\u5DF2\u5B8C\u6210\u6CE8\u518C
121881
+ \u274C \u672A\u627E\u5230\u624B\u673A\u53F7 ${phone} \u5BF9\u5E94\u7684\u4E1D\u8DEF\u8D5E\u8D26\u53F7\uFF0C\u8BF7\u786E\u8BA4\u8BE5\u7528\u6237\u5DF2\u5B8C\u6210\u6CE8\u518C
121870
121882
  `);
121871
121883
  process.exit(1);
121872
121884
  }
@@ -121892,7 +121904,7 @@ async function runAccountShare(opts) {
121892
121904
  process.exit(1);
121893
121905
  }
121894
121906
  console.log(`
121895
- \u2705 \u8D26\u6237\u5DF2\u6210\u529F\u5206\u4EAB\u7ED9\u624B\u673A\u53F7 ${opts.phone} \u7684\u7528\u6237\uFF08AccountId: ${userId}\uFF09
121907
+ \u2705 \u8D26\u6237\u5DF2\u6210\u529F\u5206\u4EAB\u7ED9\u624B\u673A\u53F7 ${phone} \u7684\u7528\u6237\uFF08AccountId: ${userId}\uFF09
121896
121908
  `);
121897
121909
  }
121898
121910
  async function runAccountUnshare(opts) {
@@ -122818,7 +122830,10 @@ function register23(program2) {
122818
122830
  verbose: opts.verbose
122819
122831
  });
122820
122832
  });
122821
- accountCmd.command("share").description("\u5C06 Google \u8D26\u6237\u5206\u4EAB\u7ED9\u6307\u5B9A\u624B\u673A\u53F7\u7528\u6237\uFF08\u8BE5\u7528\u6237\u9700\u5DF2\u6CE8\u518C\u4E1D\u8DEF\u8D5E\uFF09").requiredOption("--id <entityId>", "\u8D26\u6237 entityId\uFF08\u6765\u81EA list-accounts \u7684 ma.entityId \u5B57\u6BB5\uFF09").requiredOption("--phone <phone>", "\u88AB\u5206\u4EAB\u4EBA\u7684\u4E1D\u8DEF\u8D5E\u6CE8\u518C\u624B\u673A\u53F7").option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
122833
+ accountCmd.command("share").description("\u5C06 Google \u8D26\u6237\u5206\u4EAB\u7ED9\u6307\u5B9A\u624B\u673A\u53F7\u7528\u6237\uFF08\u8BE5\u7528\u6237\u9700\u5DF2\u6CE8\u518C\u4E1D\u8DEF\u8D5E\uFF09").requiredOption("--id <entityId>", "\u8D26\u6237 entityId\uFF08\u6765\u81EA list-accounts \u7684 ma.entityId \u5B57\u6BB5\uFF09").requiredOption(
122834
+ "--phone <phone>",
122835
+ "\u88AB\u5206\u4EAB\u4EBA\u624B\u673A\u53F7\uFF08\u5927\u9646 11 \u4F4D\u4F1A\u81EA\u52A8\u8865 +86\uFF1B\u5DF2\u5E26 +86/+861\u2026 \u5219\u539F\u6837\u4F7F\u7528\uFF0C\u4E0D\u91CD\u590D\u62FC\u63A5\uFF09"
122836
+ ).option("-t, --token <token>", "Auth Token").option("--verbose", "\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(async (opts) => {
122822
122837
  await runAccountShare({
122823
122838
  token: opts.token,
122824
122839
  id: opts.id,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.37-beta.10",
4
- "publishedAt": 1784255895813
3
+ "version": "1.1.37-beta.11",
4
+ "publishedAt": 1784275362257
5
5
  }
@@ -28,7 +28,8 @@ siluzan-tso list-accounts [选项]
28
28
 
29
29
  | 用户意图 | 推荐命令(一步) | 脚本读落盘 JSON |
30
30
  | ----------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
31
- | 列出全部某媒体账户 | `list-accounts -m <媒体> --page-size 999 --json-out <dir>` | `items[]`(`ma.mediaCustomerId`、`ma.mediaCustomerName`、`ma.currencyCode`、`ma.mediaAccountState` 等) |
31
+ | 列出全部某媒体账户 | `list-accounts -m <媒体> --page-size 999 --json-out <dir>` | `items[]`(`ma.mediaCustomerId`、`ma.mediaCustomerName`、`ma.currencyCode`、`ma.invalidOAuthToken` 等) |
32
+ | 哪些账户 OAuth / 授权失效 | 同上(或 `-s invalid`);表格看「授权状态」列 | **`ma.invalidOAuthToken === true`**(勿用审核状态 / `mediaAccountState`) |
32
33
  | 有多少个账户 | 同上 | **`total`**(无需翻页;`itemCount < total` 时说明 page-size 不够大) |
33
34
  | 只查某一个户 | `list-accounts -m <媒体> -k <id或名称> --json-out <dir>` | 无需大 page-size |
34
35
  | **Meta 全部账户 + 余额/消耗** | **`accounts-digest -m MetaAd --json-out <dir>`**(一步;内部翻页+分批) | `accounts-digest-metaad.json` → `data.items[]`(含 `balance`、`spend`) |
@@ -66,13 +67,17 @@ siluzan-tso list-accounts -m Google --page 2 --page-size 999 --json-out ./snap-p
66
67
 
67
68
  **输出字段说明:**
68
69
 
69
- | 字段 | 说明 |
70
- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- |
71
- | `entityId` | 丝路赞内部 ID,`delink`/`share`、**`account-active-bills`** 等操作使用此 ID(**不是** `mediaCustomerId`) |
72
- | `mediaCustomerId` | 媒体平台账户数字 ID(Google Customer ID 等) |
73
- | `currencyCode` | 账户主币种:`CNY`(人民币)或 `USD`(美金)等;**表格有「币种」列**;报告/Excel 须与此一致,见 `references/accounts/currency.md` |
74
- | `name` | 账户名称 |
75
- | `status` | 账户状态 |
70
+ | 字段 / JSON 路径 | 说明 |
71
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
72
+ | `ma.entityId` | 丝路赞内部 ID,`delink`/`share`/`reauth`、**`account-active-bills`** 等操作使用此 ID(**不是** `mediaCustomerId`) |
73
+ | `ma.mediaCustomerId` | 媒体平台账户数字 ID(Google Customer ID 等) |
74
+ | `ma.currencyCode` | 账户主币种:`CNY` / `USD` 等;**表格有「币种」列**;报告/Excel 须与此一致,见 `references/accounts/currency.md` |
75
+ | `ma.mediaCustomerName` | 账户名称(表格「账户名称」) |
76
+ | `ma.mediaAccountState`| 平台开户/审核态(如 Approved / Linked);**不是** OAuth 是否可用 |
77
+ | **`ma.invalidOAuthToken`** | **OAuth 是否失效**:`true`=失效,`false`=正常。**表格必有「授权状态」列**(✅ 正常 / ⚠️ 失效),与此字段一一对应;判失效、筛 `-s invalid`、走 `reauth` 均看它 |
78
+ | `ma.TTADInfo.status` 等 | 媒体侧投放/审核细态(TikTok 表格「审核状态」等);**勿**当成 OAuth 授权状态 |
79
+
80
+ > **Agent**:用户问「哪些授权失效 / OAuth 状态」时,读盘看 `items[].ma.invalidOAuthToken`,表格看「授权状态」列;**不要**用 `mediaAccountState` 或审核状态列代替。
76
81
 
77
82
  ---
78
83
 
@@ -460,6 +465,13 @@ siluzan-tso account mcc-unbind --customers <mediaCustomerId> --mcc <MCC客户ID>
460
465
 
461
466
  将 Google 广告账户分享给指定手机号用户(手机号必须已在丝路赞注册)。
462
467
 
468
+ 查找被分享人走主站 `GET /query/account/SimpleAccountInfo?phone=…`(须带国家码;与网页一致)。
469
+
470
+ | 选项 | 说明 |
471
+ | ----------------- | -------------------------------------------------------------------------------------------- |
472
+ | `--id <entityId>` | 账户 `entityId` |
473
+ | `--phone <phone>` | 被分享人手机号:**裸 11 位默认补 `+86`**;已是 `+86…` / `86…` **不再重复拼接**(勿写成 `++86`) |
474
+
463
475
  ```bash
464
476
  siluzan-tso account share --id <entityId> --phone <手机号>
465
477
  ```
@@ -467,7 +479,11 @@ siluzan-tso account share --id <entityId> --phone <手机号>
467
479
  **示例:**
468
480
 
469
481
  ```bash
482
+ # 11 位本地号 → CLI 查询时自动变为 +8613800138000
470
483
  siluzan-tso account share --id abc123def456 --phone 13800138000
484
+
485
+ # 已带国家码:原样查询,不重复加 +86
486
+ siluzan-tso account share --id abc123def456 --phone +8618379752858
471
487
  ```
472
488
 
473
489
  ---
@@ -156,7 +156,7 @@
156
156
  - **触发**:分享/取消分享、解绑、OAuth 重授权、Google MCC 绑定/解绑、TikTok BC 绑定/解绑、Meta BM 绑定、TikTok 关闭账户、Google 被封提现、Google 邮箱授权管理。
157
157
  - **必读**:`references/accounts/accounts.md`(各 `account` 子命令参数与 ID 口径)。
158
158
  - **步骤(按场景)**:
159
- - **分享**:`list-accounts --json-out` 取 `entityId` → `account share --id <entityId> --phone <手机号>`;查 `account share-detail --customer-id <mediaCustomerId>`;取消 `account unshare --id <entityId> --account-id <userId>`。
159
+ - **分享**:`list-accounts --json-out` 取 `entityId` → `account share --id <entityId> --phone <手机号>`(`--phone` 裸 11 位补 `+86`,已有国家码则不补;见 `accounts.md` § share);查 `account share-detail --customer-id <mediaCustomerId>`;取消 `account unshare --id <entityId> --account-id <userId>`。
160
160
  - **解绑**:`account delink --id <entityId>` / `--ids id1,id2`。
161
161
  - **OAuth 重授权**:`invalidOAuthToken=true` → `list-accounts --json-out` 取 `ma.entityId` → **`account reauth -m <媒体> --id <entityId>`**(内置先 delink 再 OAuth,对齐网页「重新授权」)→ `list-accounts` 验证。**禁止**对失效账户直接用 `account auth`(首次「添加授权」专用)。
162
162
  - **首次 OAuth 添加授权**:`account auth -m <媒体>`(无需先 delink)。
@@ -9,7 +9,7 @@ $ErrorActionPreference = 'Stop'
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  $PKG_NAME = 'siluzan-tso-cli'
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- $PKG_VERSION = '1.1.37-beta.10'
12
+ $PKG_VERSION = '1.1.37-beta.11'
13
13
  $CLI_BIN = 'siluzan-tso'
14
14
  $SKILL_LABEL = 'Siluzan TSO'
15
15
  $INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
@@ -9,7 +9,7 @@ set -euo pipefail
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  readonly PKG_NAME="siluzan-tso-cli"
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- readonly PKG_VERSION="1.1.37-beta.10"
12
+ readonly PKG_VERSION="1.1.37-beta.11"
13
13
  readonly CLI_BIN="siluzan-tso"
14
14
  readonly SKILL_LABEL="Siluzan TSO"
15
15
  readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.37-beta.10",
3
+ "version": "1.1.37-beta.11",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",