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 +1 -1
- package/dist/index.js +36 -21
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts.md +24 -8
- package/dist/skill/references/core/workflows.md +1 -1
- package/dist/skill/scripts/install.ps1 +1 -1
- package/dist/skill/scripts/install.sh +1 -1
- package/package.json +1 -1
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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 ${
|
|
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 ${
|
|
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(
|
|
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,
|
package/dist/skill/_meta.json
CHANGED
|
@@ -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.
|
|
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`
|
|
72
|
-
| `mediaCustomerId`
|
|
73
|
-
| `currencyCode`
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
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
|
|
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.
|
|
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.
|
|
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"
|