siluzan-tso-cli 1.1.30-beta.7 → 1.1.30-beta.8
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 +27 -6
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts.md +5 -1
- package/dist/skill/references/analytics/account-analytics.md +2 -2
- 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.30-beta.
|
|
54
|
+
> **注意**:当前为测试版(1.1.30-beta.8),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -105988,6 +105988,7 @@ init_auth();
|
|
|
105988
105988
|
init_cli_json_snapshot();
|
|
105989
105989
|
init_cli_table();
|
|
105990
105990
|
init_balance();
|
|
105991
|
+
init_media_account_lookup();
|
|
105991
105992
|
var VALID_MEDIA_TYPES3 = ["Google", "TikTok", "Yandex", "MetaAd", "BingV2", "Kwai"];
|
|
105992
105993
|
function defaultDateRange2() {
|
|
105993
105994
|
const end = /* @__PURE__ */ new Date();
|
|
@@ -106025,15 +106026,12 @@ async function runStats(opts) {
|
|
|
106025
106026
|
}
|
|
106026
106027
|
const ids = opts.accounts.split(",").map((id) => id.trim()).filter(Boolean);
|
|
106027
106028
|
const isGoogle = opts.media === "Google";
|
|
106028
|
-
const
|
|
106029
|
-
const p = new URLSearchParams({ startDate, endDate, period: "true" });
|
|
106030
|
-
p.set("mediaCustomerIds", ids.join(","));
|
|
106031
|
-
return p;
|
|
106032
|
-
})();
|
|
106033
|
-
const url = isGoogle ? `${config.apiBaseUrl}/report/media-account/google/account-spend-overview?${params.toString()}` : `${config.apiBaseUrl}/report/media-account/${opts.media}/accountsoverview?${params.toString()}`;
|
|
106029
|
+
const isMetaAd = opts.media === "MetaAd";
|
|
106034
106030
|
let items;
|
|
106035
106031
|
try {
|
|
106036
106032
|
if (isGoogle) {
|
|
106033
|
+
const params = new URLSearchParams({ startDate, endDate, mediaCustomerIds: ids.join("|") });
|
|
106034
|
+
const url = `${config.apiBaseUrl}/report/media-account/google/account-spend-overview?${params.toString()}`;
|
|
106037
106035
|
const raw = await apiFetch2(url, config, {}, opts.verbose);
|
|
106038
106036
|
items = parseGoogleAccountSpendOverviewRows(raw).map((row) => ({
|
|
106039
106037
|
mediaAccountId: row.mediaAccountId,
|
|
@@ -106047,7 +106045,30 @@ async function runStats(opts) {
|
|
|
106047
106045
|
remainingAccountBudget: row.remainingAccountBudget,
|
|
106048
106046
|
status: row.status
|
|
106049
106047
|
}));
|
|
106048
|
+
} else if (isMetaAd) {
|
|
106049
|
+
const accountMediaTypes = await lookupMetaMediaAccountTypes(config, ids, opts.verbose);
|
|
106050
|
+
items = [];
|
|
106051
|
+
for (const [route, routeIds] of groupAccountIdsByOverviewRoute(
|
|
106052
|
+
"MetaAd",
|
|
106053
|
+
ids,
|
|
106054
|
+
accountMediaTypes
|
|
106055
|
+
)) {
|
|
106056
|
+
const map = await fetchOverviewMap(
|
|
106057
|
+
route,
|
|
106058
|
+
routeIds,
|
|
106059
|
+
config,
|
|
106060
|
+
startDate,
|
|
106061
|
+
endDate,
|
|
106062
|
+
opts.verbose
|
|
106063
|
+
);
|
|
106064
|
+
for (const item of map.values()) {
|
|
106065
|
+
items.push(item);
|
|
106066
|
+
}
|
|
106067
|
+
}
|
|
106050
106068
|
} else {
|
|
106069
|
+
const params = new URLSearchParams({ startDate, endDate, period: "true" });
|
|
106070
|
+
params.set("mediaCustomerIds", ids.join(","));
|
|
106071
|
+
const url = `${config.apiBaseUrl}/report/media-account/${opts.media}/accountsoverview?${params.toString()}`;
|
|
106051
106072
|
const raw = await apiFetch2(url, config, {}, opts.verbose);
|
|
106052
106073
|
items = Array.isArray(raw) ? raw : raw.items ?? [];
|
|
106053
106074
|
}
|
package/dist/skill/_meta.json
CHANGED
|
@@ -31,6 +31,10 @@ siluzan-tso list-accounts [选项]
|
|
|
31
31
|
| 列出全部某媒体账户 | `list-accounts -m <媒体> --page-size 999 --json-out <dir>` | `items[]`(`ma.mediaCustomerId`、`ma.mediaCustomerName`、`ma.currencyCode`、`ma.mediaAccountState` 等) |
|
|
32
32
|
| 有多少个账户 | 同上 | **`total`**(无需翻页;`itemCount < total` 时说明 page-size 不够大) |
|
|
33
33
|
| 只查某一个户 | `list-accounts -m <媒体> -k <id或名称> --json-out <dir>` | 无需大 page-size |
|
|
34
|
+
| **Meta 全部账户 + 余额/消耗** | **`accounts-digest -m MetaAd --json-out <dir>`**(一步;内部翻页+分批) | `accounts-digest-metaad.json` → `data.items[]`(含 `balance`、`spend`) |
|
|
35
|
+
| Meta 余额续航预警 | `balance-scan -m MetaAd --json-out <dir>` | `balance-scan-metaad.json` |
|
|
36
|
+
|
|
37
|
+
> **MetaAd ID 格式**:OAuth 授权户(`list-accounts` 里 `mediaAccountType=FacebookAds`)的 `mediaCustomerId` **须带 `act_` 前缀**(与列表返回值一致)。**禁止**把 70+ 个 ID 拼成一条 `balance -a …`;全量用 `accounts-digest`。
|
|
34
38
|
|
|
35
39
|
仅当读盘后 `total > itemCount` 且已用 `--page-size 999` 时,再 `--page 2` 等同参数补拉;**禁止**对 stdout 写翻页循环(stdout 摘要无 `total` / `items`,读盘协议见 `references/core/agent-conventions.md` §三)。列账户 / 数个数**不需要** `accounts-digest`、`balance-scan`。
|
|
36
40
|
|
|
@@ -116,7 +120,7 @@ siluzan-tso account-active-bills -m Google --id 18176820-6204-43c2-9a1f-0d0f5e9e
|
|
|
116
120
|
siluzan-tso account-active-bills -m Google --id 18176820-6204-43c2-9a1f-0d0f5e9eb957 --json-out ./snap
|
|
117
121
|
```
|
|
118
122
|
|
|
119
|
-
> **勿在文档或聊天中粘贴真实 JWT
|
|
123
|
+
> **勿在文档或聊天中粘贴真实 JWT。
|
|
120
124
|
|
|
121
125
|
---
|
|
122
126
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
| `google-analysis --sections campaign-types`(`types-summary`) | **实时** | ✅ 可查当天 | 当天系列类型分布 |
|
|
15
15
|
| `google-analysis` 其他维度(`campaigns` / `keywords` / `devices` / ...) | 实时(受 Google Ads API 同步延迟影响) | 可查当天,但当天可能尚未结算 | 周期分析、报告 |
|
|
16
16
|
| `stats -m Google` / `balance-scan -m Google` / `accounts-digest -m Google` / `list-accounts -m Google` 合并消耗(TSO `account-spend-overview`,2026-05 起) | **后端自动分流**:窗口完全在历史 → `database` 模式(含余额/状态/币种/账户名 + 当期消耗);窗口含今天 → `googleCombined` 模式(仅实时消耗,无余额/状态/币种/账户名) | ✅ 可查当天(含今天时切实时聚合) | 历史回溯、巡检、余额续航估算;含今天时也能给出实时消耗 |
|
|
17
|
-
| `stats` / `balance-scan` / `accounts-digest` / `list-accounts` 的 **TikTok / Yandex / BingV2 / Kwai** 合并消耗(TSO `accountsoverview
|
|
17
|
+
| `stats` / `balance-scan` / `accounts-digest` / `list-accounts` 的 **TikTok / Yandex / BingV2 / Kwai / MetaAd** 合并消耗(TSO `accountsoverview`;MetaAd OAuth 户走 `FacebookAds` 段) | **每日同步昨天** | ❌ 查今天会全为 0 | 历史回溯、巡检、余额续航估算(口径为"截至昨天") |
|
|
18
18
|
| `balance`(`GetMediaAccountInfo`) | 实时 | — | 仅当前余额,不反映消耗 |
|
|
19
19
|
|
|
20
20
|
**选用规则**:
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
- 「今天/当天/今日消耗」「实时消耗排行」 → 优先 `google-analysis(-batch) --sections overview`,`--start` / `--end` 都设为今天;
|
|
23
23
|
- Google 单账户/批量取数也可直接 `stats -m Google` 把 `--end-date` 设为今天,后端会切到 `googleCombined` 模式给实时消耗(但**不会**返回余额/币种/账户名)。
|
|
24
24
|
- 「最近 N 天消耗 / 周报 / 月报 / 余额续航」 → `stats` / `balance-scan` / `accounts-digest`,默认窗口截至昨天即可(Google 此时走 `database`,包含完整字段)。
|
|
25
|
-
- **禁止**用 TikTok / Yandex / BingV2 / Kwai 的 `accountsoverview` 接口判断当天消耗(仍是每日同步)。
|
|
25
|
+
- **禁止**用 TikTok / Yandex / BingV2 / Kwai / MetaAd 的 `accountsoverview` 接口判断当天消耗(仍是每日同步)。
|
|
26
26
|
- **禁止**给非 Google 媒体的当天高消耗场景加 `--min-spend`:其预筛选来自非实时 `accountsoverview`,会把今天有消耗的账号当成 0 给筛掉。Google 媒体当 `--end-date` 设为今天时,预筛选走的是 `googleCombined` 实时数据,可以使用 `--min-spend`。
|
|
27
27
|
|
|
28
28
|
---
|
|
@@ -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.30-beta.
|
|
12
|
+
$PKG_VERSION = '1.1.30-beta.8'
|
|
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.30-beta.
|
|
12
|
+
readonly PKG_VERSION="1.1.30-beta.8"
|
|
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"
|