siluzan-tso-cli 1.1.21-beta.3 → 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 +1 -1
- package/dist/index.js +22 -7
- package/dist/skill/SKILL.md +2 -2
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/account-analytics.md +1 -1
- package/dist/skill/references/accounts.md +59 -1
- package/dist/skill/references/hosted-automation-monitoring-json.md +1 -1
- package/dist/skill/references/tips.md +24 -0
- package/dist/skill/scripts/install.ps1 +1 -1
- package/dist/skill/scripts/install.sh +1 -1
- package/eval/cases/p3-accounts-digest.scenario.json +2 -2
- 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.21-beta.
|
|
54
|
+
> **注意**:当前为测试版(1.1.21-beta.5),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -5066,6 +5066,20 @@ var init_normalize_money = __esm({
|
|
|
5066
5066
|
}
|
|
5067
5067
|
});
|
|
5068
5068
|
|
|
5069
|
+
// src/commands/google-analysis/normalize-overview.ts
|
|
5070
|
+
function normalizeOverviewPayload(payload) {
|
|
5071
|
+
const obj = payload;
|
|
5072
|
+
if (typeof obj.balance === "number" && obj.balance === 0) {
|
|
5073
|
+
delete obj.balance;
|
|
5074
|
+
}
|
|
5075
|
+
return payload;
|
|
5076
|
+
}
|
|
5077
|
+
var init_normalize_overview = __esm({
|
|
5078
|
+
"src/commands/google-analysis/normalize-overview.ts"() {
|
|
5079
|
+
"use strict";
|
|
5080
|
+
}
|
|
5081
|
+
});
|
|
5082
|
+
|
|
5069
5083
|
// src/commands/google-analysis/match-type-en2zh.json
|
|
5070
5084
|
var match_type_en2zh_default;
|
|
5071
5085
|
var init_match_type_en2zh = __esm({
|
|
@@ -100731,13 +100745,13 @@ async function fetchSectionPayload(def, opts, config, id) {
|
|
|
100731
100745
|
!!opts.verbose,
|
|
100732
100746
|
def.name
|
|
100733
100747
|
);
|
|
100734
|
-
|
|
100735
|
-
|
|
100736
|
-
|
|
100737
|
-
|
|
100738
|
-
)
|
|
100739
|
-
|
|
100740
|
-
);
|
|
100748
|
+
let payload = stripLegacyGoogleFieldsIfV2Present(data);
|
|
100749
|
+
payload = normalizeRateScales(payload, def.name);
|
|
100750
|
+
payload = normalizeMoneyScales(payload, def.name);
|
|
100751
|
+
if (def.name === "overview") {
|
|
100752
|
+
payload = normalizeOverviewPayload(payload);
|
|
100753
|
+
}
|
|
100754
|
+
return annotateZhFields(payload, def.name);
|
|
100741
100755
|
}
|
|
100742
100756
|
function endpointHintForSection(def) {
|
|
100743
100757
|
if (def.name === "materials") return "CampaignAssetView+Videos";
|
|
@@ -100779,6 +100793,7 @@ var init_fetch = __esm({
|
|
|
100779
100793
|
init_sections();
|
|
100780
100794
|
init_normalize_rates();
|
|
100781
100795
|
init_normalize_money();
|
|
100796
|
+
init_normalize_overview();
|
|
100782
100797
|
init_translate_fields();
|
|
100783
100798
|
}
|
|
100784
100799
|
});
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: siluzan-tso
|
|
3
3
|
description: >-
|
|
4
|
-
Siluzan TSO 广告 skill(siluzan-tso-cli):Google/Bing/Yandex/TikTok/Kwai 账户开户与管理、Google Ads CRUD、数据分析、优化报告、智能预警、TikTok/Meta 线索、发票财务,并提供 RAG 知识库查询,google
|
|
4
|
+
Siluzan TSO 广告 skill(siluzan-tso-cli):Google/Bing/Yandex/TikTok/Kwai 账户开户与管理、Google Ads CRUD、数据分析、优化报告、智能预警、TikTok/Meta 线索、发票财务,并提供 RAG 知识库查询,google广告关键词推荐;当你发现你的上下文被压缩过后,你需要根据用户的需求,重新阅读本skill相关的文件,保证skill功能正常。
|
|
5
5
|
license: MIT
|
|
6
6
|
metadata:
|
|
7
7
|
requires: nodejs,siluzan-tso-cli
|
|
@@ -153,7 +153,7 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
|
|
|
153
153
|
- **常用字段**:
|
|
154
154
|
- `ad campaigns --json/--json-out` → `budget`(元,与 `campaign-edit --budget` 同口径)
|
|
155
155
|
- `ad groups --json` → `maxCPCAmountYuan` / `targetCpaAmountYuan`(元)
|
|
156
|
-
- `google-analysis overview-*.json` →
|
|
156
|
+
- `google-analysis overview-*.json` → **余额只认 `remainingAccountBudget`**(`balance` 为 0 时 CLI 已剔除该字段)
|
|
157
157
|
- `google-analysis campaigns-*.json` → `budgetAmountYuan` / `campaignTargetCpaYuan` / `maximizeConversionsTargetCpaYuan` / `spend` / `averageCpc` / `costPerConversion`(均元)
|
|
158
158
|
- `keyword --json` → `averageCpc` / `lowTopOfPageBid` / `highTopOfPageBid` + 根级与每条 `bidAmountCurrency`(无 `-a` 为 USD;有 `-a` 为账户 `currencyCode`);`-a <mediaCustomerId>` 走账户级推荐接口;限定市场用 `keyword geo-list` + `--geo <id>`(**多 id = 汇总指标**;分市场须多次调用、每次一个 `--geo`,见 `references/keyword-planner-workflows.md`)
|
|
159
159
|
- **品牌名优先级**:(1) 用户明确提供 → (2) `list-accounts.mag.advertiserName` → (3) 用户提供网址 → 域名占位并标注 `[待确认品牌名]`。**严禁**把英文域名翻译为虚构中文品牌。
|
package/dist/skill/_meta.json
CHANGED
|
@@ -84,7 +84,7 @@ CLI 出口的所有 JSON / 表格金额已统一为**元**,关键字段:
|
|
|
84
84
|
| `ad groups --json` | `maxCPCAmountYuan`、`targetCpaAmountYuan` |
|
|
85
85
|
| `google-analysis campaigns` 落盘 `campaigns-*.json` | `budgetAmountYuan`、`campaignTargetCpaYuan`、`maximizeConversionsTargetCpaYuan`;同行 `spend` / `averageCpc` / `costPerConversion` 也是元 |
|
|
86
86
|
| `keyword suggest --json` | `averageCpc`、`lowTopOfPageBid`、`highTopOfPageBid`;根级与每条 `bidAmountCurrency`(有 `-a` 为账户币;无 `-a` 为 USD) |
|
|
87
|
-
| `balance` 等账户余额接口 |
|
|
87
|
+
| `balance` 等账户余额接口 | 余额字段为`remainingAccountBudget`(元) |
|
|
88
88
|
|
|
89
89
|
旧字段 `budgetAmount`(分)、`maxCPCAmountDisplay`、`*Micros`(微元)**已不再落盘**,下游脚本无需做单位换算。金额保留 2 位小数,带货币代码(如 `¥50.00 CNY`、`$50.00 USD`),`currencyCode` 从响应读取,跨币种账户分表;细则见 `references/currency.md`。
|
|
90
90
|
|
|
@@ -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
|
-
|
|
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
|
|
|
@@ -43,7 +43,7 @@ siluzan-tso balance -m Google --accounts <mediaCustomerId> --json
|
|
|
43
43
|
mkdir -p ./snap-monitor && siluzan-tso google-analysis -a <mediaCustomerId> --sections overview --start <YYYY-MM-DD> --end <YYYY-MM-DD> --json-out ./snap-monitor
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
读 **`./snap-monitor/overview-<accountId>.json`**(具体路径见 stdout 摘要的 `writtenFiles[0]` 或 `manifest-<accountId>.json` 的 `artifacts`)。根对象常见字段:**`remainingAccountBudget
|
|
46
|
+
读 **`./snap-monitor/overview-<accountId>.json`**(具体路径见 stdout 摘要的 `writtenFiles[0]` 或 `manifest-<accountId>.json` 的 `artifacts`)。根对象常见字段:**`remainingAccountBudget`**(余额)、**`averageDailyCost`**、**`totalCost`**、**`activeDays`**、**`currencyCode`**、**`accountId`**(无 **`balance`**,网关为 0 时 CLI 已剔除);**`currentPeriod`** / **`previousPeriod`** 为对象块,内含 **`spend`**、`impressions`、`clicks`、`conversions` 等与 `references/account-analytics.md` 总览口径一致的指标(块内还可能出现 **`currencyCode`**)。
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -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.
|
|
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.
|
|
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
|
|
7
|
+
"judgeExpectation": "路径:多账户汇总消耗应优先 accounts-digest(带 --json-out 落盘),而非对每个账户重复 stats。\n输出:应有汇总表或对比说明;结构化数据应来自落盘 JSON(可先 outline 再读文件),不要求 ROAS/消耗数值与真实数据一致。",
|
|
8
8
|
"skillMapping": "Playbook P3 · accounts-digest",
|
|
9
9
|
"commandMustInclude": [
|
|
10
10
|
[
|