siluzan-tso-cli 1.1.21-beta.4 → 1.1.21-beta.5

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.21-beta.4),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.21-beta.5),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.21-beta.4",
4
- "publishedAt": 1779697477475
3
+ "version": "1.1.21-beta.5",
4
+ "publishedAt": 1779700715977
5
5
  }
@@ -124,7 +124,65 @@ siluzan-tso balance -m Google -a 6326027735 --json
124
124
 
125
125
  **单户余额与续航**:`balance` 只反映当前余额;判断「还能跑几天 / 是否够花」需结合 `stats`(或业务侧日均消耗)等数据。向用户展示 JSON 时,`mediaCustomerId` 须与本次 `-a` 查询的 ID 及命令输出一致。
126
126
 
127
- **少量账户的画像/续航估算**:直接用 `balance-scan -m <媒体> -a id1,id2`(子集模式)一条命令拿齐余额 + 近 7 日消耗 + 续航天数 + 充值建议,比 `balance` + `stats` 拼接更省事;或者用 `accounts-digest -m <媒体> -a id1,id2` 拿齐消耗 + CTR/CPC/CPA 派生指标 + 余额。两者都会跳过清单翻页,直接对指定 ID 拉数据。
127
+ **少量账户续航预警**:用 `balance-scan`(见 `SKILL.md` Playbook P2);**多账户投放画像汇总**(消耗/点击/转化/余额 + CTR/CPC/CPA):用下文 **`accounts-digest`**,Skill 编排一律 **`--json-out`**。
128
+
129
+ ---
130
+
131
+ ## accounts-digest — 多账户投放画像汇总
132
+
133
+ 一条命令替代 AI 对每个账户循环 `list-accounts -k` + `stats`。**多账户汇总表、对比消耗、跨账户巡检** 应优先本命令,禁止外层 for-loop 逐户 `stats`。
134
+
135
+ > **数据时效性**:与 `stats` / `balance-scan` 相同(Google `account-spend-overview` 分流;TikTok/Yandex/BingV2/Kwai 为截至昨天的 `accountsoverview`)。完整表见 `references/account-analytics.md` 顶部。
136
+
137
+ ```bash
138
+ siluzan-tso accounts-digest -m <媒体类型> [选项]
139
+ ```
140
+
141
+ | 选项 | 说明 | 默认 |
142
+ | ---- | ---- | ---- |
143
+ | `-m, --media <type>` | 媒体类型(必填):`Google \| TikTok \| Yandex \| BingV2 \| Kwai`(**MetaAd 无消耗汇总接口**) | — |
144
+ | `-a, --accounts <ids>` | 指定 `mediaCustomerId`,逗号分隔;**留空**则翻页拉该媒体全部账户 | — |
145
+ | `--start <YYYY-MM-DD>` | 统计开始日期(SKILL 要求 AI 先与用户确认区间) | 近 7 天 |
146
+ | `--end <YYYY-MM-DD>` | 统计结束日期 | 昨天 |
147
+ | `--min-spend <n>` | 过滤:区间内消耗 ≤ 此值的账户不返回 | `0` |
148
+ | `--page-size <n>` | 全量扫描时清单分页大小(上限 500) | `200` |
149
+ | `--max-pages <n>` | 全量扫描时最多页数(上限 200) | `20` |
150
+ | `--json` | stdout 输出完整 JSON(与 `--json-out` 互斥) | — |
151
+ | `--json-out <path>` | **Agent 推荐**:落盘目录或 `*.json` 文件;stdout 一行摘要(含 `outlineFile`、`writtenFiles`、`manifestFile`) | — |
152
+
153
+ **`--json-out` 落盘(Agent 必读)**:
154
+
155
+ - 目录模式典型文件:`accounts-digest-<媒体小写>.json`(如 `accounts-digest-google.json`)、同 stem 的 `accounts-digest-google.outline.txt`、`cli-manifest-<媒体小写>.json`。
156
+ - 处理顺序见 `references/tips.md`:先 stdout 摘要 → 再 `outlineFile` → 再 `require(writtenFiles[0])` 读真实数据;**禁止**在对话里手填 `data.items` 中的业务数。
157
+ - 响应结构:`{ ok, data: { items: [...] }, meta: { media, window, scanned, returned, source, totals, currencyNote, generatedAt } }`。
158
+ - `meta.source`:`list` = 全量翻清单后拉数;`subset` = 传了 `-a`,跳过清单翻页(**`advertiserName` 会缺失**,公司名列显示 `-`)。
159
+
160
+ **与 `stats` / `balance-scan` 的分工**:
161
+
162
+ | 场景 | 推荐 |
163
+ | ---- | ---- |
164
+ | 多账户消耗/点击/转化/CTR/CPC/CPA 汇总表 | `accounts-digest` + `--json-out` |
165
+ | 余额续航不足 N 天、充值预警 | `balance-scan` + `--json-out` |
166
+ | 单账户、必须逐户精确字段 | `stats` / `balance`(仍须 `-a` 单户或少量 ID) |
167
+
168
+ **示例:**
169
+
170
+ ```bash
171
+ # 指定账户子集(跳过清单翻页,Playbook P3)
172
+ siluzan-tso accounts-digest -m Google -a 6326027735,4256317784 \
173
+ --start 2026-04-01 --end 2026-04-15 \
174
+ --json-out ./snap-p3
175
+
176
+ # 扫描某媒体全部账户(内部翻页,勿先 list-accounts 再拼 -a)
177
+ siluzan-tso accounts-digest -m BingV2 --start 2026-05-01 --end 2026-05-24 \
178
+ --json-out ./snap-digest-bing
179
+
180
+ # 过滤低消耗账户
181
+ siluzan-tso accounts-digest -m Google -a id1,id2 --min-spend 10 \
182
+ --start 2026-04-01 --end 2026-04-15 --json-out ./snap-p3
183
+ ```
184
+
185
+ **`data.items[]` 主要字段**:`mediaCustomerId`、`name`、`advertiserName`、`currencyCode`、`balance`、`spend`、`impressions`、`clicks`、`conversions`、`ctr`(%)、`cpc`、`cpa`。跨币种汇总见 `references/currency.md`(**禁止**对 `meta.totals` 跨币种直接当最终结论)。
128
186
 
129
187
  ---
130
188
 
@@ -139,6 +139,30 @@ list
139
139
  "
140
140
  ```
141
141
 
142
+ ### 3b. 多账户投放画像(`accounts-digest`)
143
+
144
+ 多账户汇总消耗/点击/转化时**优先** `accounts-digest`,不要对每个账户循环 `stats`(见 `SKILL.md` Playbook P3、`references/accounts.md` § accounts-digest)。
145
+
146
+ ```bash
147
+ siluzan-tso accounts-digest -m Google -a id1,id2,id3 \
148
+ --start 2026-04-01 --end 2026-04-15 \
149
+ --json-out ./snap-p3
150
+ node -e "
151
+ const path = require('path');
152
+ const snap = './snap-p3';
153
+ const d = require(path.join(snap, 'accounts-digest-google.json'));
154
+ const rows = d.data?.items || [];
155
+ const meta = d.meta || {};
156
+ console.log('区间:', meta.window?.startDate, '~', meta.window?.endDate);
157
+ console.log('返回', rows.length, '户,扫描', meta.scanned);
158
+ rows.slice(0, 10).forEach((r) =>
159
+ console.log(' ', r.mediaCustomerId, r.spend, r.currencyCode, 'CTR%', r.ctr),
160
+ );
161
+ "
162
+ ```
163
+
164
+ 文件名以 stdout 摘要的 `writtenFiles[0]` / `manifestFile` 为准;读字段前先 `fs.readFileSync` 同 stem 的 `*.outline.txt`(见上文「处理顺序」)。
165
+
142
166
  ### 4. 从广告系列列表提取 ID
143
167
 
144
168
  ```bash
@@ -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.21-beta.4'
12
+ $PKG_VERSION = '1.1.21-beta.5'
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.21-beta.4"
12
+ readonly PKG_VERSION="1.1.21-beta.5"
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"
@@ -2,9 +2,9 @@
2
2
  "id": "p3-accounts-digest",
3
3
  "description": "P3: 多账户汇总 — accounts-digest",
4
4
  "turns": [
5
- "请对 Google 媒体下账户 {{EVAL_ACCOUNT_READ}},{{EVAL_ACCOUNT_READ_2}} 做 2026-04-01 至 2026-04-15 的消耗汇总表。\n根据 SKILL 应用 accounts-digest,加 --json;不要对每个账户单独 stats。"
5
+ "请对 Google 媒体下账户 {{EVAL_ACCOUNT_READ}},{{EVAL_ACCOUNT_READ_2}} 做 2026-04-01 至 2026-04-15 的消耗汇总表。\n根据 SKILL 应用 accounts-digest,加 --json-out ./snap-p3;不要对每个账户单独 stats。"
6
6
  ],
7
- "judgeExpectation": "路径:多账户汇总消耗应优先 accounts-digest,而非对每个账户重复 stats。\n输出:应有汇总表或对比说明;不要求 ROAS/消耗数值与真实数据一致。",
7
+ "judgeExpectation": "路径:多账户汇总消耗应优先 accounts-digest(带 --json-out 落盘),而非对每个账户重复 stats。\n输出:应有汇总表或对比说明;结构化数据应来自落盘 JSON(可先 outline 再读文件),不要求 ROAS/消耗数值与真实数据一致。",
8
8
  "skillMapping": "Playbook P3 · accounts-digest",
9
9
  "commandMustInclude": [
10
10
  [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.21-beta.4",
3
+ "version": "1.1.21-beta.5",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",