siluzan-tso-cli 1.1.35-beta.4 → 1.1.35
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 -2
- package/dist/index.js +50 -2
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts.md +3 -3
- package/dist/skill/references/accounts/finance.md +1 -1
- package/dist/skill/references/accounts/open-account-by-media.md +1 -1
- package/dist/skill/references/accounts/open-account-google-ui.md +1 -1
- package/dist/skill/references/analytics/account-analytics.md +7 -0
- package/dist/skill/references/analytics/rag.md +1 -1
- package/dist/skill/references/analytics/reporting.md +5 -5
- package/dist/skill/references/core/setup.md +5 -5
- package/dist/skill/references/misc/tso-home.md +2 -2
- package/dist/skill/references/report-templates/google-period-report.md +13 -0
- package/dist/skill/report-templates/google-period-report.md +13 -0
- package/dist/skill/scripts/install.ps1 +3 -3
- package/dist/skill/scripts/install.sh +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ HTML 报告模板外部资源:**ECharts** 统一使用 `https://staticpn.siluz
|
|
|
43
43
|
在**用户的目标项目根目录**执行(根据用户使用的助手选择 `--ai`):
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install -g siluzan-tso-cli
|
|
46
|
+
npm install -g siluzan-tso-cli
|
|
47
47
|
siluzan-tso init --ai cursor # 写入 Cursor(默认)
|
|
48
48
|
siluzan-tso init --ai cursor,claude # 同时写入多个平台
|
|
49
49
|
siluzan-tso init --ai all # 写入所有支持的平台
|
|
@@ -51,7 +51,6 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
|
|
|
51
51
|
siluzan-tso init --force # 强制覆盖已存在文件
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
> **注意**:当前为测试版(1.1.35-beta.4),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
54
|
|
|
56
55
|
| 助手 | 建议 `--ai` |
|
|
57
56
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -3829,7 +3829,7 @@ var DEFAULT_API_BASE;
|
|
|
3829
3829
|
var init_defaults = __esm({
|
|
3830
3830
|
"src/config/defaults.ts"() {
|
|
3831
3831
|
"use strict";
|
|
3832
|
-
DEFAULT_API_BASE = "https://tso-api
|
|
3832
|
+
DEFAULT_API_BASE = "https://tso-api.siluzan.com";
|
|
3833
3833
|
}
|
|
3834
3834
|
});
|
|
3835
3835
|
|
|
@@ -5471,7 +5471,8 @@ var init_google_analysis = __esm({
|
|
|
5471
5471
|
};
|
|
5472
5472
|
GOOGLE_ANALYSIS_CAMPAIGNS_OUTLINE_BUDGET_HINTS = [
|
|
5473
5473
|
"// \u91D1\u989D\uFF1A`campaigns[].budgetAmountYuan` / `campaignTargetCpaYuan` / `maximizeConversionsTargetCpaYuan` \u5747\u4E3A**\u5143**\uFF08CLI \u51FA\u53E3\u7EDF\u4E00\uFF09\uFF1B\u540C\u884C `spend` / `averageCpc` / `costPerConversion` \u4E5F\u662F\u5143\u3002",
|
|
5474
|
-
"// \u65E7\u5B57\u6BB5 `budgetAmount`\uFF08\u5206\uFF09/ `*Micros`\uFF08\u5FAE\u5143\uFF09\u5DF2\u4E0D\u518D\u843D\u76D8\uFF0C**\u7981\u6B62**\u518D\u505A \xF7100 / \xF71_000_000 \u6362\u7B97\u3002"
|
|
5474
|
+
"// \u65E7\u5B57\u6BB5 `budgetAmount`\uFF08\u5206\uFF09/ `*Micros`\uFF08\u5FAE\u5143\uFF09\u5DF2\u4E0D\u518D\u843D\u76D8\uFF0C**\u7981\u6B62**\u518D\u505A \xF7100 / \xF71_000_000 \u6362\u7B97\u3002",
|
|
5475
|
+
"// \u72B6\u6001\uFF1A\u6BCF\u884C\u542B `campaignStatusDisplay`\uFF08\u6295\u653E\u4E2D/\u5DF2\u6682\u505C/\u5DF2\u79FB\u9664\uFF09\uFF1B\u62A5\u544A\u72B6\u6001\u5217**\u76F4\u63A5\u8BFB\u6B64\u5B57\u6BB5**\uFF0C\u7981\u6B62\u5BF9 `campaignStatus` \u5199 `MAP[s]||'\u5DF2\u79FB\u9664'`\u3002"
|
|
5475
5476
|
];
|
|
5476
5477
|
GOOGLE_ANALYSIS_ADS_OUTLINE_BUDGET_HINTS = [
|
|
5477
5478
|
"// \u91D1\u989D\uFF1A`ads[].spend` / `averageCpc` / `costPerConversion` \u843D\u76D8\u524D\u5DF2\u7EDF\u4E00\u4E3A**\u5143**\uFF08`costPerConversion` \u7531\u7F51\u5173\u5FAE\u5143 \xF71e6\uFF09\uFF1B**\u7981\u6B62**\u518D\u5BF9 `costPerConversion` \u505A \xF71_000_000\u3002"
|
|
@@ -101445,6 +101446,38 @@ var init_city_to_country = __esm({
|
|
|
101445
101446
|
}
|
|
101446
101447
|
});
|
|
101447
101448
|
|
|
101449
|
+
// src/commands/google-analysis/format-campaign-status.ts
|
|
101450
|
+
function formatGoogleCampaignStatusDisplay(status) {
|
|
101451
|
+
if (status == null) return "\u2014";
|
|
101452
|
+
const raw = String(status).trim();
|
|
101453
|
+
if (raw === "") return "\u2014";
|
|
101454
|
+
switch (raw.toUpperCase()) {
|
|
101455
|
+
case "ENABLED":
|
|
101456
|
+
return "\u6295\u653E\u4E2D";
|
|
101457
|
+
case "PAUSED":
|
|
101458
|
+
return "\u5DF2\u6682\u505C";
|
|
101459
|
+
case "REMOVED":
|
|
101460
|
+
return "\u5DF2\u79FB\u9664";
|
|
101461
|
+
default:
|
|
101462
|
+
return "\u672A\u77E5";
|
|
101463
|
+
}
|
|
101464
|
+
}
|
|
101465
|
+
function readGoogleCampaignStatusRaw(row) {
|
|
101466
|
+
if (row.campaignStatusV2 !== void 0 && row.campaignStatusV2 !== null) {
|
|
101467
|
+
return row.campaignStatusV2;
|
|
101468
|
+
}
|
|
101469
|
+
return row.campaignStatus;
|
|
101470
|
+
}
|
|
101471
|
+
function annotateCampaignStatusDisplay(row) {
|
|
101472
|
+
if (row.campaignStatusDisplay !== void 0) return;
|
|
101473
|
+
row.campaignStatusDisplay = formatGoogleCampaignStatusDisplay(readGoogleCampaignStatusRaw(row));
|
|
101474
|
+
}
|
|
101475
|
+
var init_format_campaign_status = __esm({
|
|
101476
|
+
"src/commands/google-analysis/format-campaign-status.ts"() {
|
|
101477
|
+
"use strict";
|
|
101478
|
+
}
|
|
101479
|
+
});
|
|
101480
|
+
|
|
101448
101481
|
// src/commands/google-analysis/translate-fields.ts
|
|
101449
101482
|
function lookupZh(dict, key) {
|
|
101450
101483
|
if (typeof key !== "string" || key === "") return void 0;
|
|
@@ -101463,6 +101496,14 @@ function annotateArrayRows(rows, source, target, dict) {
|
|
|
101463
101496
|
}
|
|
101464
101497
|
}
|
|
101465
101498
|
}
|
|
101499
|
+
function annotateCampaignStatusDisplayRows(rows) {
|
|
101500
|
+
if (!Array.isArray(rows)) return;
|
|
101501
|
+
for (const r of rows) {
|
|
101502
|
+
if (r && typeof r === "object" && !Array.isArray(r)) {
|
|
101503
|
+
annotateCampaignStatusDisplay(r);
|
|
101504
|
+
}
|
|
101505
|
+
}
|
|
101506
|
+
}
|
|
101466
101507
|
function annotateCountryRollup(rows) {
|
|
101467
101508
|
if (!Array.isArray(rows)) return;
|
|
101468
101509
|
for (const r of rows) {
|
|
@@ -101483,9 +101524,15 @@ function annotateCountryRollup(rows) {
|
|
|
101483
101524
|
function annotateZhFields(payload, section) {
|
|
101484
101525
|
if (payload === null || typeof payload !== "object") return payload;
|
|
101485
101526
|
switch (section) {
|
|
101527
|
+
case "campaigns": {
|
|
101528
|
+
const rows = payload.campaigns;
|
|
101529
|
+
annotateCampaignStatusDisplayRows(rows);
|
|
101530
|
+
break;
|
|
101531
|
+
}
|
|
101486
101532
|
case "keywords": {
|
|
101487
101533
|
const rows = payload.keywords;
|
|
101488
101534
|
annotateArrayRows(rows, "keywordMatchType", "keywordMatchTypeZh", MATCH_TYPE_DICT);
|
|
101535
|
+
annotateCampaignStatusDisplayRows(rows);
|
|
101489
101536
|
break;
|
|
101490
101537
|
}
|
|
101491
101538
|
case "search-terms": {
|
|
@@ -101520,6 +101567,7 @@ var init_translate_fields = __esm({
|
|
|
101520
101567
|
init_match_type_en2zh();
|
|
101521
101568
|
init_geo_en2zh();
|
|
101522
101569
|
init_city_to_country();
|
|
101570
|
+
init_format_campaign_status();
|
|
101523
101571
|
MATCH_TYPE_DICT = match_type_en2zh_default;
|
|
101524
101572
|
GEO_DICT = geo_en2zh_default;
|
|
101525
101573
|
CITY_DICT = city_to_country_default.byName ?? {};
|
package/dist/skill/_meta.json
CHANGED
|
@@ -280,7 +280,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
|
|
|
280
280
|
| 状态 | 含义 | 下一步操作 |
|
|
281
281
|
| ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
282
282
|
| `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
|
|
283
|
-
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www
|
|
283
|
+
| `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Kwai、Yandex 当前没有对应充值界面) |
|
|
284
284
|
| `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
|
|
285
285
|
|
|
286
286
|
---
|
|
@@ -909,7 +909,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
909
909
|
|
|
910
910
|
| 功能 | 媒体 | 网页路径 |
|
|
911
911
|
| --------------------------------------- | ------ | ------------------------------------------------- |
|
|
912
|
-
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www
|
|
912
|
+
| **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
|
|
913
913
|
|
|
914
914
|
**Agent 建议话术**:
|
|
915
915
|
|
|
@@ -918,5 +918,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
|
|
|
918
918
|
siluzan-tso config show # 查看 webUrl 字段
|
|
919
919
|
|
|
920
920
|
# 账户激活(Google)→ 引导至账户管理页
|
|
921
|
-
# https://www
|
|
921
|
+
# https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
|
|
922
922
|
```
|
|
@@ -117,7 +117,7 @@ siluzan-tso config show
|
|
|
117
117
|
|
|
118
118
|
### 充值页链接(按媒体 × 类型)
|
|
119
119
|
|
|
120
|
-
链接模式:`https://www
|
|
120
|
+
链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
|
|
121
121
|
|
|
122
122
|
| 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
|
|
123
123
|
| ------------------------- | --------------------- | ------------------------------------------- |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 各媒体开户
|
|
2
2
|
|
|
3
|
-
> 网页链接:`https://www
|
|
3
|
+
> 网页链接:`https://www.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
|
|
4
4
|
> 多命令串联见 `references/core/workflows.md` § 流程一。
|
|
5
5
|
|
|
6
6
|
## 首次响应硬规范(必读)
|
|
@@ -60,7 +60,7 @@ siluzan-tso open-account google-wizard
|
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
62
|
siluzan-tso account-history -m Google
|
|
63
|
-
# 审核通过后:config show → https://www
|
|
63
|
+
# 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
---
|
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
|
|
43
43
|
报告中「系列状态列」不得来自账户接口(账户状态 ≠ 系列状态,见 `references/core/agent-conventions.md` §四):系列是否启用**必须**来自 `ad campaigns`(含 `statusDisplay`)或 `google-analysis --sections campaigns` 落盘的系列数据。
|
|
44
44
|
|
|
45
|
+
**报告脚本禁止自行映射 `campaignStatus` 枚举**:网关值为 PascalCase(`Enabled`/`Paused`/`Removed`),Agent 若写 `STATUS_MAP[s] || '已移除'` 且未归一大小写,会把「投放中」误显示为「已移除」。`campaigns-*.json` 的 `items[]` 已注入 **`campaignStatusDisplay`**(`投放中` / `已暂停` / `已移除` / `—` / `未知`),HTML/Excel 状态列**直接读该字段**。
|
|
46
|
+
|
|
45
47
|
### 金额单位
|
|
46
48
|
|
|
47
49
|
CLI 出口的所有 JSON / 表格金额已统一为**元**,关键字段:
|
|
@@ -197,6 +199,11 @@ const data = d.record ?? d.items; // record 非空=汇总维度;否则=列表
|
|
|
197
199
|
|
|
198
200
|
`items[]` 每行额外包含:`conversionsValue`、`conversionsValuePerCost`(`spend ≤ 0` 时为 0)、`campaignTargetCpaYuan`、`maximizeConversionsTargetCpaYuan`、`manualCpcEnhancedCpcEnabled`、`percentCpcEnhancedCpcEnabled`。所有金额字段(`*Yuan` 后缀)已统一为元,可直接展示,无需换算。
|
|
199
201
|
|
|
202
|
+
| 字段 | 含义 |
|
|
203
|
+
| ---- | ---- |
|
|
204
|
+
| `campaignStatus` / `campaignStatusV2` | 网关原始枚举(`Enabled` / `Paused` / `Removed`) |
|
|
205
|
+
| `campaignStatusDisplay` | CLI 注入的中文状态文案;**报告状态列读此字段** |
|
|
206
|
+
|
|
200
207
|
日预算字段为 `budgetAmountYuan`(元),脚本可直接 `row.budgetAmountYuan`;网关原始 `budgetAmount`(分)已不再落盘。
|
|
201
208
|
|
|
202
209
|
#### 竞争指标 `competitiveMetrics`
|
|
@@ -192,9 +192,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
|
|
|
192
192
|
|
|
193
193
|
| 媒体 | 报告类型 | URL 模板 |
|
|
194
194
|
| ------ | ---------------- | ----------------------------------------------------------- |
|
|
195
|
-
| Google | 日报(Daily) | `https://www
|
|
196
|
-
| Google | 小时报(Hourly) | `https://www
|
|
197
|
-
| TikTok | 日报 | `https://www
|
|
195
|
+
| Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
196
|
+
| Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
|
|
197
|
+
| TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
|
|
198
198
|
|
|
199
199
|
`entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
|
|
200
200
|
|
|
@@ -207,8 +207,8 @@ siluzan-tso report list -m Google --json-out ./snap
|
|
|
207
207
|
|
|
208
208
|
# 第二步:查看 webUrl
|
|
209
209
|
siluzan-tso config show
|
|
210
|
-
# webUrl: https://www
|
|
210
|
+
# webUrl: https://www.siluzan.com
|
|
211
211
|
|
|
212
212
|
# 第三步:拼接链接(Google 日报)
|
|
213
|
-
# https://www
|
|
213
|
+
# https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
|
|
214
214
|
```
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
## 安装 CLI
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install -g siluzan-tso-cli
|
|
13
|
+
npm install -g siluzan-tso-cli
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
---
|
|
@@ -64,7 +64,7 @@ siluzan-tso config set --api-key <Key> # 或 config 直接写入
|
|
|
64
64
|
siluzan-tso config set --token <Token> # 备用:设置 JWT Token
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
API Key 获取入口:`https://www
|
|
67
|
+
API Key 获取入口:`https://www.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
# 第 1 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
|
|
@@ -129,9 +129,9 @@ siluzan-tso config show
|
|
|
129
129
|
|
|
130
130
|
```
|
|
131
131
|
构建环境 : production
|
|
132
|
-
apiBaseUrl : https://tso-api
|
|
133
|
-
googleApiUrl : https://googleapi
|
|
134
|
-
webUrl : https://www
|
|
132
|
+
apiBaseUrl : https://tso-api.siluzan.com
|
|
133
|
+
googleApiUrl : https://googleapi.mysiluzan.com
|
|
134
|
+
webUrl : https://www.siluzan.com
|
|
135
135
|
apiKey : abcd****1234
|
|
136
136
|
```
|
|
137
137
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
siluzan-tso config show # 取 webUrl
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
首页地址:`https://www
|
|
9
|
+
首页地址:`https://www.siluzan.com/v3/foreign_trade/tso/home`
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -25,7 +25,7 @@ siluzan-tso config show # 取 webUrl
|
|
|
25
25
|
|
|
26
26
|
## 推荐话术
|
|
27
27
|
|
|
28
|
-
1. **「和首页一样的总览」** → 打开 `https://www
|
|
28
|
+
1. **「和首页一样的总览」** → 打开 `https://www.siluzan.com/v3/foreign_trade/tso/home`。
|
|
29
29
|
2. **「某个 Google 账户昨天花了多少」** → `list-accounts -m Google` + `stats -m Google -a <id>`。
|
|
30
30
|
3. **「有待充值账户」** → 说明聚合数据在首页;CLI 可 `list-accounts` + `balance` 逐户排查,或引导充值页。
|
|
31
31
|
|
|
@@ -58,3 +58,16 @@ siluzan-tso google-analysis -a <id> --start <s> --end <e> --json-out ./snap-goog
|
|
|
58
58
|
如果用户**追加**了维度(按上文「可选追加」表),把它们加入 `--sections` 即可;要全 21 维则省略 `--sections`。
|
|
59
59
|
|
|
60
60
|
> 仅在调试单个维度或需要传 `all` 暂未透传的特殊参数时,才回落到逐条 `siluzan-tso google-analysis <子命令> -a <id> …` 调用。
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 广告系列状态列(必读)
|
|
65
|
+
|
|
66
|
+
`campaigns-*.json` → `items[]` 每行含 CLI 注入的 **`campaignStatusDisplay`**(`投放中` / `已暂停` / `已移除`)。
|
|
67
|
+
|
|
68
|
+
| 正确 | 错误 |
|
|
69
|
+
| ---- | ---- |
|
|
70
|
+
| 直接展示 `row.campaignStatusDisplay` | 读 `campaignStatus` 后自行 `MAP[s] \|\| '已移除'`(`Enabled` 未命中键时会全变「已移除」) |
|
|
71
|
+
| 需要英文枚举时读 `campaignStatus` 或 `campaignStatusV2`,展示前 `.upper()` 再映射 | 用 `stats` / `list-accounts` 的账户 `status` 充当系列状态 |
|
|
72
|
+
|
|
73
|
+
原始枚举为 PascalCase(`Enabled`),与 `ad campaigns` 的 `statusDisplay`(有效/未投放/已结束使用)口径不同;周期报告「状态」列统一用 **`campaignStatusDisplay`**。
|
|
@@ -58,3 +58,16 @@ siluzan-tso google-analysis -a <id> --start <s> --end <e> --json-out ./snap-goog
|
|
|
58
58
|
如果用户**追加**了维度(按上文「可选追加」表),把它们加入 `--sections` 即可;要全 21 维则省略 `--sections`。
|
|
59
59
|
|
|
60
60
|
> 仅在调试单个维度或需要传 `all` 暂未透传的特殊参数时,才回落到逐条 `siluzan-tso google-analysis <子命令> -a <id> …` 调用。
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 广告系列状态列(必读)
|
|
65
|
+
|
|
66
|
+
`campaigns-*.json` → `items[]` 每行含 CLI 注入的 **`campaignStatusDisplay`**(`投放中` / `已暂停` / `已移除`)。
|
|
67
|
+
|
|
68
|
+
| 正确 | 错误 |
|
|
69
|
+
| ---- | ---- |
|
|
70
|
+
| 直接展示 `row.campaignStatusDisplay` | 读 `campaignStatus` 后自行 `MAP[s] \|\| '已移除'`(`Enabled` 未命中键时会全变「已移除」) |
|
|
71
|
+
| 需要英文枚举时读 `campaignStatus` 或 `campaignStatusV2`,展示前 `.upper()` 再映射 | 用 `stats` / `list-accounts` 的账户 `status` 充当系列状态 |
|
|
72
|
+
|
|
73
|
+
原始枚举为 PascalCase(`Enabled`),与 `ad campaigns` 的 `statusDisplay`(有效/未投放/已结束使用)口径不同;周期报告「状态」列统一用 **`campaignStatusDisplay`**。
|
|
@@ -9,11 +9,11 @@ $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.35
|
|
12
|
+
$PKG_VERSION = '1.1.35'
|
|
13
13
|
$CLI_BIN = 'siluzan-tso'
|
|
14
14
|
$SKILL_LABEL = 'Siluzan TSO'
|
|
15
|
-
$INSTALL_CMD = 'npm install -g siluzan-tso-cli
|
|
16
|
-
$WEB_BASE = 'https://www
|
|
15
|
+
$INSTALL_CMD = 'npm install -g siluzan-tso-cli'
|
|
16
|
+
$WEB_BASE = 'https://www.siluzan.com'
|
|
17
17
|
|
|
18
18
|
# -- Constants ----------------------------------------------------------------
|
|
19
19
|
$NODE_MAJOR_MIN = 18
|
|
@@ -9,11 +9,11 @@ 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.35
|
|
12
|
+
readonly PKG_VERSION="1.1.35"
|
|
13
13
|
readonly CLI_BIN="siluzan-tso"
|
|
14
14
|
readonly SKILL_LABEL="Siluzan TSO"
|
|
15
|
-
readonly INSTALL_CMD="npm install -g siluzan-tso-cli
|
|
16
|
-
readonly WEB_BASE="https://www
|
|
15
|
+
readonly INSTALL_CMD="npm install -g siluzan-tso-cli"
|
|
16
|
+
readonly WEB_BASE="https://www.siluzan.com"
|
|
17
17
|
|
|
18
18
|
# -- Constants ----------------------------------------------------------------
|
|
19
19
|
readonly NODE_MAJOR_MIN=18
|