siluzan-tso-cli 1.1.44-beta.3 → 1.1.44
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 +209 -163
- package/dist/skill/AGENTS.md +16 -16
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/assets/campaign-create-template.md +46 -46
- package/dist/skill/assets/market-analysis-rules.md +4 -4
- package/dist/skill/assets/pmax-create-template.md +17 -17
- package/dist/skill/assets/pmax-lead-form-template.md +12 -12
- package/dist/skill/assets/scripts/assemble-campaign-from-plan.mjs +3 -1
- package/dist/skill/references/README.md +31 -31
- package/dist/skill/references/accounts/accounts-balance-stats.md +38 -36
- package/dist/skill/references/accounts/accounts-list.md +21 -21
- package/dist/skill/references/accounts/accounts-permissions.md +29 -29
- package/dist/skill/references/accounts/accounts.md +9 -9
- package/dist/skill/references/accounts/finance.md +1 -2
- package/dist/skill/references/accounts/open-account-by-media.md +58 -59
- package/dist/skill/references/accounts/open-account-google-ui.md +19 -19
- package/dist/skill/references/analytics/account-analytics.md +33 -33
- package/dist/skill/references/analytics/google-analysis-batch.md +0 -1
- package/dist/skill/references/analytics/keyword-planner-workflows.md +15 -13
- package/dist/skill/references/analytics/market-analysis-guide.md +4 -1
- package/dist/skill/references/analytics/rag.md +8 -8
- package/dist/skill/references/analytics/reporting.md +5 -5
- package/dist/skill/references/analytics/website-diagnosis-guide.md +6 -6
- package/dist/skill/references/core/agent-conventions.md +54 -54
- package/dist/skill/references/core/intent-routing.md +107 -108
- package/dist/skill/references/core/setup.md +6 -5
- package/dist/skill/references/core/tips.md +0 -1
- package/dist/skill/references/core/workflows.md +15 -16
- package/dist/skill/references/google-ads/google-ads-campaign-plan.md +55 -55
- package/dist/skill/references/google-ads/google-ads-read.md +30 -12
- package/dist/skill/references/google-ads/google-ads-write.md +35 -18
- package/dist/skill/references/google-ads/google-ads.md +13 -14
- package/dist/skill/references/google-ads/rules/README.md +17 -17
- package/dist/skill/references/google-ads/rules/google-ads-account-audit.md +6 -8
- package/dist/skill/references/google-ads/rules/google-ads-compliance.md +5 -7
- package/dist/skill/references/google-ads/rules/google-ads-keyword-strategy.md +9 -9
- package/dist/skill/references/google-ads/rules/google-ads-launch-plan-template.md +16 -15
- package/dist/skill/references/google-ads/rules/google-ads-plan-source-fidelity.md +27 -27
- package/dist/skill/references/google-ads/rules/google-ads-pmax-launch-plan-template.md +41 -41
- package/dist/skill/references/misc/tso-home.md +2 -2
- package/dist/skill/references/operations/guard.md +24 -24
- package/dist/skill/references/operations/hosted-automation-self-control.md +15 -16
- package/dist/skill/references/operations/hosted-automation-user-catalog.md +18 -18
- package/dist/skill/references/report-templates/README.md +1 -1
- package/dist/skill/references/report-templates/bing-period-report.md +16 -16
- package/dist/skill/references/report-templates/google-ads-diagnosis.md +26 -23
- package/dist/skill/references/report-templates/google-inquiry-analysis.md +1 -1
- package/dist/skill/references/report-templates/google-period-report.md +5 -5
- package/dist/skill/references/report-templates/meta-account-diagnosis-report.md +2 -2
- package/dist/skill/references/report-templates/okki-weekly-google-client.md +0 -1
- package/dist/skill/references/report-templates/tiktok-period-report.md +6 -6
- package/dist/skill/report-templates/GoogleAdsDiagnosisReport.html +42 -13
- package/dist/skill/report-templates/README.md +1 -1
- package/dist/skill/report-templates/bing-period-report.html +10 -7
- package/dist/skill/report-templates/bing-period-report.md +16 -16
- package/dist/skill/report-templates/google-ads-diagnosis.md +26 -23
- package/dist/skill/report-templates/google-inquiry-analysis.md +1 -1
- package/dist/skill/report-templates/google-period-report.md +5 -5
- package/dist/skill/report-templates/meta-account-diagnosis-report.md +2 -2
- package/dist/skill/report-templates/okki-weekly-google-client.md +0 -1
- package/dist/skill/report-templates/tiktok-period-report.md +6 -6
- package/dist/skill/scripts/install.ps1 +3 -3
- package/dist/skill/scripts/install.sh +3 -3
- package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +2 -14
- package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +1 -3
- package/eval/cases/accounts-single-balance-not-bulk.scenario.json +3 -14
- package/eval/cases/budget-display-not-raw-micros.scenario.json +1 -8
- package/eval/cases/clue-meta-leads-json.scenario.json +2 -14
- package/eval/cases/clue-tiktok-leads-json.scenario.json +2 -11
- package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +3 -9
- package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +3 -9
- package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +3 -9
- package/eval/cases/facebook-analysis-google-section-aliases.scenario.json +2 -11
- package/eval/cases/facebook-analysis-not-google-keywords.scenario.json +3 -10
- package/eval/cases/facebook-analysis-period-default.scenario.json +2 -14
- package/eval/cases/finance-invoice-info-list.scenario.json +3 -11
- package/eval/cases/forewarning-list-google.scenario.json +3 -14
- package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +2 -6
- package/eval/cases/google-analysis-keywords-route.scenario.json +2 -14
- package/eval/cases/guard-budget-circuit-all-google.scenario.json +2 -12
- package/eval/cases/guard-zero-conv-empty-spend.scenario.json +2 -12
- package/eval/cases/human-p1-multiturn.scenario.json +1 -5
- package/eval/cases/ir-p1-vs-p8-account-vs-url.scenario.json +5 -17
- package/eval/cases/ir-p3-cpa-monitor-not-p7.scenario.json +2 -19
- package/eval/cases/ir-p3-zero-inquiry-not-p7.scenario.json +3 -16
- package/eval/cases/ir-p4-period-not-diagnosis.scenario.json +3 -16
- package/eval/cases/ir-p8-meets-google-ads-requirements-with-url.scenario.json +3 -28
- package/eval/cases/ir-p8-network-diagnosis-with-url.scenario.json +3 -25
- package/eval/cases/ir-p8-website-monitor-report-with-url.scenario.json +3 -28
- package/eval/cases/ir-p8-website-test-report-no-url.scenario.json +3 -14
- package/eval/cases/ir-p9-industry-not-p8.scenario.json +3 -19
- package/eval/cases/ir-vague-report-clarify.scenario.json +3 -14
- package/eval/cases/ir-w3-vs-p8-from-website.scenario.json +2 -8
- package/eval/cases/ir-w5-keyword-planner-url-core-terms.scenario.json +2 -22
- package/eval/cases/meta-single-balance-not-bulk.scenario.json +3 -17
- package/eval/cases/no-legacy-json-flag.scenario.json +2 -6
- package/eval/cases/open-account-google-noninteractive.scenario.json +1 -3
- package/eval/cases/open-account-tiktok-license-file.scenario.json +1 -3
- package/eval/cases/optimize-list-by-account.scenario.json +3 -11
- package/eval/cases/p1-single-account-profile.scenario.json +1 -11
- package/eval/cases/p2-balance-scan-bulk.scenario.json +2 -9
- package/eval/cases/p3-accounts-digest.scenario.json +1 -5
- package/eval/cases/p3-cpa-scan-max-cpa.scenario.json +2 -14
- package/eval/cases/p4-fb-meta-period-report.scenario.json +2 -12
- package/eval/cases/p4-period-report-window.scenario.json +1 -8
- package/eval/cases/pmax-asset-group-create-with-bg.scenario.json +2 -13
- package/eval/cases/pmax-brand-edit-routing.scenario.json +3 -16
- package/eval/cases/pmax-edit-not-campaign-edit.scenario.json +2 -12
- package/eval/cases/pmax-enable-brand-guidelines.scenario.json +2 -12
- package/eval/cases/pmax-no-assets-update-brand-fields.scenario.json +3 -14
- package/eval/cases/rag-before-keyword-expand.scenario.json +1 -11
- package/eval/cases/rag-list-then-query.scenario.json +2 -14
- package/eval/cases/report-list-google.scenario.json +2 -11
- package/eval/cases/report-push-list-google.scenario.json +2 -11
- package/eval/cases/setup-login-or-env.scenario.json +1 -3
- package/eval/cases/setup-siluzan-data-permission-env.scenario.json +1 -3
- package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +2 -6
- package/eval/cases/time-range-user-delegates-default.scenario.json +1 -8
- package/eval/cases/tips-json-out-filtering.scenario.json +1 -3
- package/eval/cases/tips-large-json-pagination.scenario.json +1 -3
- package/eval/cases/uj-ad-campaign-validate-before-create-stub.scenario.json +2 -11
- package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +1 -3
- package/eval/cases/uj-ad-website-search-plan-table-format.scenario.json +1 -3
- package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +6 -18
- package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +1 -8
- package/eval/cases/uj-analytics-ecommerce-industry-report.scenario.json +2 -14
- package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +2 -11
- package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +1 -3
- package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +2 -11
- package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +1 -4
- package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +2 -17
- package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +2 -14
- package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +2 -6
- package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +3 -17
- package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +1 -5
- package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +1 -3
- package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +3 -17
- package/eval/cases/uj-patrol-google-balances-low.scenario.json +2 -11
- package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +3 -14
- package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +2 -14
- package/eval/cases/yandex-stats-use-porg-mediaccustomerid.scenario.json +3 -21
- package/package.json +1 -1
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
## 标准四步流程(默认 · 交付 HTML)
|
|
13
13
|
|
|
14
|
-
| 步骤 | 执行者 | 动作
|
|
15
|
-
| ---------------- | ------------ |
|
|
16
|
-
| **1. 拉数** | Agent 调 CLI | `google-analysis -a <id> --start <s> --end <e> --json-out ./snap-google --sections <见下方默认维度对应 CLI>`
|
|
17
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),完成筛选、聚合、排序与洞察
|
|
14
|
+
| 步骤 | 执行者 | 动作 |
|
|
15
|
+
| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
16
|
+
| **1. 拉数** | Agent 调 CLI | `google-analysis -a <id> --start <s> --end <e> --json-out ./snap-google --sections <见下方默认维度对应 CLI>` |
|
|
17
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),完成筛选、聚合、排序与洞察 |
|
|
18
18
|
| **3. 写 JSON** | Agent | 按 `assets/google-period-report.schema.json` 撰写 `google-period-report.json`:只写 `meta` + `narrative`(8 维度叙事);`kpis`/`charts`/`tables` 留给步骤 4 的 `--snapshot-dir` 合并(合并后缺 KPI 会拒绝出 HTML) |
|
|
19
|
-
| **4. 渲染 HTML** | CLI | `google-analysis render` — **校验 narrative 8 维度必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML
|
|
19
|
+
| **4. 渲染 HTML** | CLI | `google-analysis render` — **校验 narrative 8 维度必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
# 步骤 1
|
|
@@ -20,8 +20,8 @@ siluzan-tso facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb
|
|
|
20
20
|
| 步骤 | 执行者 | 动作 |
|
|
21
21
|
| ---------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
22
|
| **1. 拉数** | Agent 调 CLI | `facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb-diagnosis`(全 7 维或默认 6 维 + 按需 `material`) |
|
|
23
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按 guide 根字段自动映射
|
|
24
|
-
| **3. 写 JSON** | Agent | 撰写 `meta-account-diagnosis-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 自动合并
|
|
23
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按 guide 根字段自动映射 |
|
|
24
|
+
| **3. 写 JSON** | Agent | 撰写 `meta-account-diagnosis-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 自动合并 |
|
|
25
25
|
| **4. 渲染 HTML** | CLI | `facebook-analysis diagnosis-render` — **校验 narrative 11 个分析小节必含字段**(4 个媒体未覆盖小节可标 `notAvailable`),缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
26
26
|
|
|
27
27
|
> `--snapshot-dir` 自动补全 `meta` / `kpis`(仅 overview;**禁止**用 ad-sets/creative 行 results 加总对比 overview)与 `tables.*`(按 `facebook-analysis-guide.md`:`adGroups`/`networks`/`countries`/`audiences`/`creatives`/`materials`)。**数值一律以 CLI 快照覆盖**(`meta` 仅补空)。
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
## 标准四步流程(默认 · 交付 HTML)
|
|
13
13
|
|
|
14
|
-
| 步骤 | 执行者 | 动作
|
|
15
|
-
| ---------------- | ------------ |
|
|
16
|
-
| **1. 拉数** | Agent 调 CLI | `tiktok-analysis -a <id> --start <s> --end <e> --json-out ./snap-tiktok`(见下方「日期规则」,全 12 维或 `--sections` 指定子集)
|
|
17
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按类型自动映射
|
|
18
|
-
| **3. 写 JSON** | Agent | 撰写 `tiktok-period-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 按网关类型自动合并
|
|
19
|
-
| **4. 渲染 HTML** | CLI | `tiktok-analysis render` — **校验 narrative 6 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML
|
|
14
|
+
| 步骤 | 执行者 | 动作 |
|
|
15
|
+
| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
16
|
+
| **1. 拉数** | Agent 调 CLI | `tiktok-analysis -a <id> --start <s> --end <e> --json-out ./snap-tiktok`(见下方「日期规则」,全 12 维或 `--sections` 指定子集) |
|
|
17
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按类型自动映射 |
|
|
18
|
+
| **3. 写 JSON** | Agent | 撰写 `tiktok-period-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 按网关类型自动合并 |
|
|
19
|
+
| **4. 渲染 HTML** | CLI | `tiktok-analysis render` — **校验 narrative 6 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
20
20
|
|
|
21
21
|
> `--snapshot-dir` 自动补全 `meta` / `kpis` / `tables.*`。网关形状见 `src/types/tiktok-analysis-api.ts`(对齐前端 `periodReport/tiktok.js`):`campaigns` 为 `{ campaigns:[] }`;ad-groups/videos/audience 为 `{ data.list[].metrics }`(snake_case);ads 为根数组。**本期 KPI 优先 campaigns 累加**。**数值一律以 CLI 快照覆盖**(`meta` 仅补空);Agent 只写 `narrative`。
|
|
22
22
|
|
|
@@ -2062,7 +2062,6 @@
|
|
|
2062
2062
|
}
|
|
2063
2063
|
</style>
|
|
2064
2064
|
<script src="https://staticpn.siluzan.com/assets/slz/homeCDN/echarts.min.js"></script>
|
|
2065
|
-
|
|
2066
2065
|
</head>
|
|
2067
2066
|
<body>
|
|
2068
2067
|
<div id="report-root">
|
|
@@ -2269,11 +2268,16 @@
|
|
|
2269
2268
|
}
|
|
2270
2269
|
|
|
2271
2270
|
const { desktop = {}, mobile = {} } = rawData;
|
|
2272
|
-
const source = String(
|
|
2271
|
+
const source = String(
|
|
2272
|
+
rawData.source || (rawData.lighthouseOk === false ? "none" : "api"),
|
|
2273
|
+
);
|
|
2273
2274
|
const simple = rawData.simpleDiagnosis || null;
|
|
2274
2275
|
|
|
2275
2276
|
// TSO Lighthouse 失败后的 CLI 简易诊断:不展示假 0 分,改为说明降级
|
|
2276
|
-
if (
|
|
2277
|
+
if (
|
|
2278
|
+
source === "simple" ||
|
|
2279
|
+
(source !== "api" && !(Number(desktop.score) > 0 || Number(mobile.score) > 0))
|
|
2280
|
+
) {
|
|
2277
2281
|
if (source === "simple" || simple) {
|
|
2278
2282
|
const fetchMs = simple && simple.fetchMs != null ? `${simple.fetchMs} ms` : "—";
|
|
2279
2283
|
const https = simple ? (simple.https ? "是" : "否") : "—";
|
|
@@ -2307,7 +2311,8 @@
|
|
|
2307
2311
|
metric: "手机性能指数 (Mobile Performance Index)",
|
|
2308
2312
|
reportValue: "未测到",
|
|
2309
2313
|
benchmark: "≥ 75",
|
|
2310
|
-
action:
|
|
2314
|
+
action:
|
|
2315
|
+
"P2:稍后重试 Lighthouse;当前勿据此调整出价。(Retry Lighthouse later.)",
|
|
2311
2316
|
},
|
|
2312
2317
|
];
|
|
2313
2318
|
}
|
|
@@ -2323,9 +2328,7 @@
|
|
|
2323
2328
|
const mobileFirstContentfulPaint = Number(mobile.firstContentfulPaint) || 0;
|
|
2324
2329
|
const mobileScore = Number(mobile.score) || 0;
|
|
2325
2330
|
const hasMeasuredMetrics =
|
|
2326
|
-
desktopFirstContentfulPaint > 0 ||
|
|
2327
|
-
mobileFirstContentfulPaint > 0 ||
|
|
2328
|
-
mobileScore > 0;
|
|
2331
|
+
desktopFirstContentfulPaint > 0 || mobileFirstContentfulPaint > 0 || mobileScore > 0;
|
|
2329
2332
|
|
|
2330
2333
|
// 全 0 = 未测到,禁止当成「0.00s / 0 分 → P1 立即修复」
|
|
2331
2334
|
if (!hasMeasuredMetrics) {
|
|
@@ -2353,7 +2356,8 @@
|
|
|
2353
2356
|
metric: "手机性能指数 (Mobile Performance Index)",
|
|
2354
2357
|
reportValue: "未测到",
|
|
2355
2358
|
benchmark: `≥ ${healthStandards.score}`,
|
|
2356
|
-
action:
|
|
2359
|
+
action:
|
|
2360
|
+
"数据未获取,禁止按 0 分给 P1;可稍后重试 Lighthouse。(Unavailable — retry later.)",
|
|
2357
2361
|
},
|
|
2358
2362
|
];
|
|
2359
2363
|
}
|
|
@@ -3022,11 +3026,21 @@
|
|
|
3022
3026
|
tooltip: { trigger: "axis", axisPointer: { type: "shadow" } },
|
|
3023
3027
|
legend: {},
|
|
3024
3028
|
grid: { left: "8%", right: "5%", bottom: 30, containLabel: true },
|
|
3025
|
-
xAxis: {
|
|
3029
|
+
xAxis: {
|
|
3030
|
+
type: "category",
|
|
3031
|
+
data: labels,
|
|
3032
|
+
axisLine: { show: false },
|
|
3033
|
+
axisTick: { show: false },
|
|
3034
|
+
},
|
|
3026
3035
|
yAxis: { type: "value", splitLine: { lineStyle: { color: "#f0f0f0" } } },
|
|
3027
3036
|
series: [
|
|
3028
3037
|
{ name: "消费", type: "bar", data: costData, itemStyle: { color: "#3b68f9" } },
|
|
3029
|
-
{
|
|
3038
|
+
{
|
|
3039
|
+
name: "转化次数",
|
|
3040
|
+
type: "bar",
|
|
3041
|
+
data: conversionData,
|
|
3042
|
+
itemStyle: { color: "#5b8fff" },
|
|
3043
|
+
},
|
|
3030
3044
|
],
|
|
3031
3045
|
},
|
|
3032
3046
|
{ hasHtmlTitle: true },
|
|
@@ -3086,15 +3100,30 @@
|
|
|
3086
3100
|
},
|
|
3087
3101
|
legend: {},
|
|
3088
3102
|
grid: { left: "8%", right: "5%", bottom: 30, containLabel: true },
|
|
3089
|
-
xAxis: {
|
|
3103
|
+
xAxis: {
|
|
3104
|
+
type: "category",
|
|
3105
|
+
data: labels,
|
|
3106
|
+
axisLine: { show: false },
|
|
3107
|
+
axisTick: { show: false },
|
|
3108
|
+
},
|
|
3090
3109
|
yAxis: {
|
|
3091
3110
|
type: "value",
|
|
3092
3111
|
axisLabel: { formatter: "{value}%" },
|
|
3093
3112
|
splitLine: { lineStyle: { color: "#f0f0f0" } },
|
|
3094
3113
|
},
|
|
3095
3114
|
series: [
|
|
3096
|
-
{
|
|
3097
|
-
|
|
3115
|
+
{
|
|
3116
|
+
name: "花费占比 (%)",
|
|
3117
|
+
type: "bar",
|
|
3118
|
+
data: costPercent,
|
|
3119
|
+
itemStyle: { color: "#3b68f9" },
|
|
3120
|
+
},
|
|
3121
|
+
{
|
|
3122
|
+
name: "转化占比 (%)",
|
|
3123
|
+
type: "bar",
|
|
3124
|
+
data: conversionPercent,
|
|
3125
|
+
itemStyle: { color: "#5b8fff" },
|
|
3126
|
+
},
|
|
3098
3127
|
],
|
|
3099
3128
|
},
|
|
3100
3129
|
{ hasHtmlTitle: true },
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
22
|
| `google-period-report.md` | **Google 周期分析报告(默认)**:终稿=HTML,四步流程 → `google-analysis render` 出 HTML |
|
|
23
23
|
| `google-period-report-excel.md` | **仅用户要 Excel 时**(P4 定制 Sheet):先 `*.outline.txt` 后脚本写 xlsx;账户须 `-k` 核验,无 CLI excel 子命令 |
|
|
24
|
-
| `stats-daily-excel.md` | **P4-DAILY**:账户级按日 Excel(`stats --by-day`)
|
|
24
|
+
| `stats-daily-excel.md` | **P4-DAILY**:账户级按日 Excel(`stats --by-day`) |
|
|
25
25
|
| `google-account-diagnosis-report.md` | Google 账户深度诊断(健康度/转化/结构等) |
|
|
26
26
|
| `google-ads-diagnosis.md` | Google **广告诊断**完整纲要(HTML 区块、**每日趋势 2 位小数**、**每模块必填分析/建议**) |
|
|
27
27
|
| `meta-period-report.md` / `.html` | **Meta(Facebook)周期报告(默认)**:四步流程 → `facebook-analysis render` 出 HTML,见 P4-FB |
|
|
@@ -757,11 +757,7 @@
|
|
|
757
757
|
.map((def, i) => {
|
|
758
758
|
const v = kpiVal(kpis, def.key);
|
|
759
759
|
const p =
|
|
760
|
-
def.key === "spend"
|
|
761
|
-
? prev.spend != null
|
|
762
|
-
? prev.spend
|
|
763
|
-
: prev.cost
|
|
764
|
-
: prev[def.key];
|
|
760
|
+
def.key === "spend" ? (prev.spend != null ? prev.spend : prev.cost) : prev[def.key];
|
|
765
761
|
const color = PALETTE[i % PALETTE.length];
|
|
766
762
|
const delta = deltaKeys.has(def.key) ? deltaLabel(v, p) : "";
|
|
767
763
|
return `<div class="kpi" style="--kpi-color:${color}">
|
|
@@ -1144,7 +1140,8 @@
|
|
|
1144
1140
|
return `<div class="rec-card">${num}<div class="rec-body">${title}<div class="rec-content">${escapeHtml(r?.content || "")}</div></div></div>`;
|
|
1145
1141
|
})
|
|
1146
1142
|
.join("");
|
|
1147
|
-
const body =
|
|
1143
|
+
const body =
|
|
1144
|
+
recs.length > 0 ? `<div class="recommendation-list">${cards}</div>` : emptyNoteHtml();
|
|
1148
1145
|
return `
|
|
1149
1146
|
<section id="sec-recommendations">
|
|
1150
1147
|
${sectionHead("10", "优化建议汇总", "跨维度归纳优先级,须与各 section 分析一致")}
|
|
@@ -1276,7 +1273,13 @@
|
|
|
1276
1273
|
echarts
|
|
1277
1274
|
.init(campaignsEl)
|
|
1278
1275
|
.setOption(
|
|
1279
|
-
hBarOption(
|
|
1276
|
+
hBarOption(
|
|
1277
|
+
campaigns,
|
|
1278
|
+
"campaignName",
|
|
1279
|
+
currency,
|
|
1280
|
+
"rgba(99,102,241,0.55)",
|
|
1281
|
+
PALETTE[1],
|
|
1282
|
+
),
|
|
1280
1283
|
);
|
|
1281
1284
|
}
|
|
1282
1285
|
|
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
|
|
9
9
|
数据块(Bing 实际支持的 9 类业务维度 + 总览):总览、设备、地域、受众(年龄/性别)、系列、广告组、广告、关键词、搜索字词。
|
|
10
10
|
|
|
11
|
-
| CLI `--sections`
|
|
12
|
-
|
|
|
13
|
-
| `overview`
|
|
14
|
-
| `device`
|
|
15
|
-
| `geographic`
|
|
16
|
-
| `audience-merged`(或 `age-audience`/`gender-audience`) | `{ data: { ageAudience.audience[], genderAudience.audience[] } }`
|
|
17
|
-
| `campaigns`
|
|
18
|
-
| `ad-groups`
|
|
19
|
-
| `ads`
|
|
20
|
-
| `keywords`
|
|
21
|
-
| `search-terms`
|
|
11
|
+
| CLI `--sections` | 落盘形状(生产实测) | 报告 `tables.*` / KPI |
|
|
12
|
+
| -------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------- |
|
|
13
|
+
| `overview` | 对象:`currentPeriod` / `previousPeriod` / `balance` / `averageDailyCost` … | → `meta` + `kpis`(环比、余额、日均) |
|
|
14
|
+
| `device` | `{ devices: Row[] }` | → `tables.devices[]` |
|
|
15
|
+
| `geographic` | `{ countries: Row[] }` | → `tables.geographic[]` |
|
|
16
|
+
| `audience-merged`(或 `age-audience`/`gender-audience`) | `{ data: { ageAudience.audience[], genderAudience.audience[] } }` | → `tables.audienceAge[]` / `audienceGender[]` |
|
|
17
|
+
| `campaigns` | **根节点数组** | → `tables.campaigns[]`;**本期 KPI 优先由此累加** |
|
|
18
|
+
| `ad-groups` | **根节点数组** | → `tables.adGroups[]`(含 `qualityScore`) |
|
|
19
|
+
| `ads` | **根节点数组** | → `tables.ads[]` |
|
|
20
|
+
| `keywords` | **根节点数组**(默认 limit=100) | → `tables.keywords[]` |
|
|
21
|
+
| `search-terms` | **根节点数组**(默认 limit=100) | → `tables.searchTerms[]` |
|
|
22
22
|
|
|
23
23
|
> Bing **没有** Google 的 `daily-metrics` / `dimension-summary`;报告模板也不渲染这两章。
|
|
24
24
|
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
|
|
27
27
|
## 标准四步流程(默认 · 交付 HTML)
|
|
28
28
|
|
|
29
|
-
| 步骤 | 执行者 | 动作
|
|
30
|
-
| ---------------- | ------------ |
|
|
31
|
-
| **1. 拉数** | Agent 调 CLI | `bing-analysis -a <id> --start <s> --end <e> --json-out ./snap-bing`(见下方「日期规则」,全 11 维或 `--sections` 指定子集)
|
|
32
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),把网关原始字段映射为下方 `tables.*` 契约,完成聚合与洞察
|
|
29
|
+
| 步骤 | 执行者 | 动作 |
|
|
30
|
+
| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| **1. 拉数** | Agent 调 CLI | `bing-analysis -a <id> --start <s> --end <e> --json-out ./snap-bing`(见下方「日期规则」,全 11 维或 `--sections` 指定子集) |
|
|
32
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),把网关原始字段映射为下方 `tables.*` 契约,完成聚合与洞察 |
|
|
33
33
|
| **3. 写 JSON** | Agent | 撰写 `bing-period-report.json`:仅 `meta.accountId` + `narrative`(9 个分析小节)为必填;`kpis`/`tables` 可省略由 `--snapshot-dir` 自动合并 |
|
|
34
|
-
| **4. 渲染 HTML** | CLI | `bing-analysis render` — **校验 narrative 9 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML
|
|
34
|
+
| **4. 渲染 HTML** | CLI | `bing-analysis render` — **校验 narrative 9 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
# 步骤 1
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# Go
|
|
2
|
+
|
|
2
3
|
## Contents
|
|
3
4
|
|
|
4
5
|
- CLI 工作流(collect → Agent → render)
|
|
@@ -19,6 +20,7 @@
|
|
|
19
20
|
- 附录:与 CLI 拉数对照(可选)
|
|
20
21
|
|
|
21
22
|
---
|
|
23
|
+
|
|
22
24
|
ogle Ads 账户诊断报告
|
|
23
25
|
|
|
24
26
|
> 账户诊断报告纲要:配合 `google-analysis` CLI 拉数后填充。
|
|
@@ -49,17 +51,17 @@ siluzan-tso google-ads-diagnosis render \
|
|
|
49
51
|
--out ./snap-p1/google-ads-diagnosis-report.html
|
|
50
52
|
```
|
|
51
53
|
|
|
52
|
-
| 子命令
|
|
53
|
-
|
|
|
54
|
+
| 子命令 | 说明 |
|
|
55
|
+
| --------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
54
56
|
| `collect` | 拉 google-analysis + 对比周期 + 着陆页(先 TSO Lighthouse,失败则 CLI 简易诊断);输出 `google-ads-diagnosis-collect.json` |
|
|
55
|
-
| `render` | 读取 Agent 产出的 `google-ads-diagnosis.json`,注入 `GoogleAdsDiagnosisReport.html`
|
|
57
|
+
| `render` | 读取 Agent 产出的 `google-ads-diagnosis.json`,注入 `GoogleAdsDiagnosisReport.html` |
|
|
56
58
|
|
|
57
59
|
**collect 选项**:
|
|
58
60
|
|
|
59
|
-
| 选项
|
|
60
|
-
|
|
|
61
|
+
| 选项 | 说明 |
|
|
62
|
+
| ---------------------------- | ------------------------------------------------------------------- |
|
|
61
63
|
| `--no-fetch-previous-period` | 不拉上一周期 campaigns/geographic/keywords 对比数据(环比列将为空) |
|
|
62
|
-
| `--skip-landing-page`
|
|
64
|
+
| `--skip-landing-page` | 不拉取着陆页(跳过 TSO Lighthouse + CLI 简易诊断) |
|
|
63
65
|
|
|
64
66
|
**collect 行为约束**:
|
|
65
67
|
|
|
@@ -349,19 +351,19 @@ siluzan-tso google-ads-diagnosis render \
|
|
|
349
351
|
|
|
350
352
|
### 竞争力表
|
|
351
353
|
|
|
352
|
-
| 指标 (Metric) | 报告值 (Report Value) | 健康标准 (Health Benchmark) | 优化策略 (Optimization Strategy)
|
|
353
|
-
| ------------- | --------------------- | --------------------------- |
|
|
354
|
+
| 指标 (Metric) | 报告值 (Report Value) | 健康标准 (Health Benchmark) | 优化策略 (Optimization Strategy) |
|
|
355
|
+
| ------------- | --------------------- | --------------------------- | --------------------------------------- |
|
|
354
356
|
| | | | **按行填写 `strategy`,禁止整列同一句** |
|
|
355
357
|
|
|
356
358
|
示例差异化方向(须代入本账户数字,勿照抄):
|
|
357
359
|
|
|
358
|
-
| metric
|
|
359
|
-
|
|
|
360
|
-
| `budgetUtilizationRate`
|
|
361
|
-
| `searchImpressionShare`
|
|
362
|
-
| `searchBudgetLostImpressionShare` | 预算丢失高 → 加预算/拆核心系列预算
|
|
363
|
-
| `searchRankLostImpressionShare`
|
|
364
|
-
| 核心系列 IS 目标
|
|
360
|
+
| metric | 策略侧重点 |
|
|
361
|
+
| --------------------------------- | --------------------------------------------- |
|
|
362
|
+
| `budgetUtilizationRate` | 日预算是否打满、是否需调日预算/排期 |
|
|
363
|
+
| `searchImpressionShare` | 份额偏低时优先查预算丢失 vs 排名丢失占比 |
|
|
364
|
+
| `searchBudgetLostImpressionShare` | 预算丢失高 → 加预算/拆核心系列预算 |
|
|
365
|
+
| `searchRankLostImpressionShare` | 排名丢失高 → 出价/质量分/落地页,而非只加预算 |
|
|
366
|
+
| 核心系列 IS 目标 | 对照公式与目标差距,列可执行的系列级动作 |
|
|
365
367
|
|
|
366
368
|
---
|
|
367
369
|
|
|
@@ -465,8 +467,8 @@ siluzan-tso google-ads-diagnosis render \
|
|
|
465
467
|
|
|
466
468
|
### 创意表
|
|
467
469
|
|
|
468
|
-
| 广告
|
|
469
|
-
|
|
|
470
|
+
| 广告 | Headlines | Descriptions | 优化建议 |
|
|
471
|
+
| ----------------- | ------------------------------------ | ------------------------------------------ | --------------------------------------------------------- |
|
|
470
472
|
| `items[].adTitle` | `headlinesCount` / `headlinesStatus` | `descriptionsCount` / `descriptionsStatus` | **`items[].suggestion`**(逐条,HTML 表格「优化建议」列) |
|
|
471
473
|
|
|
472
474
|
- **模块级**分析 / 建议:`adCreativeOptimization.analysis`、`adCreativeOptimization.suggestions`(区块下方段落)
|
|
@@ -480,6 +482,7 @@ siluzan-tso google-ads-diagnosis render \
|
|
|
480
482
|
**数据**:`newFeatures.items`(collect 来自 campaign-types;过滤 `strategy === "AiMax"` 的行)
|
|
481
483
|
|
|
482
484
|
**items 行字段**:
|
|
485
|
+
|
|
483
486
|
- collect 事实(勿改):`strategy`(如 `PerformanceMax`)、`strategyName`(如 `效果最大化`)、`accountStatus`(**boolean**,`true`=已启用)
|
|
484
487
|
- Agent 只填:`optimizerRecommendation`
|
|
485
488
|
- **禁止**用 `feature` 替代 `strategyName`(render 模板会兜底读 `feature`,但 collect 合并校验会告警)
|
|
@@ -517,12 +520,12 @@ siluzan-tso google-ads-diagnosis render \
|
|
|
517
520
|
}
|
|
518
521
|
```
|
|
519
522
|
|
|
520
|
-
| 字段
|
|
521
|
-
|
|
|
522
|
-
| `priority`
|
|
523
|
-
| `focusArea`
|
|
524
|
-
| `actionItems`
|
|
525
|
-
| `expectedOutcome` | 预期效果
|
|
523
|
+
| 字段 | 说明 |
|
|
524
|
+
| ----------------- | ------------------------------------ |
|
|
525
|
+
| `priority` | P0/P1/P2… 或「P0(立即)」等可读标签 |
|
|
526
|
+
| `focusArea` | 优化重点(表格「优化重点」列) |
|
|
527
|
+
| `actionItems` | 字符串数组,关键行动列表 |
|
|
528
|
+
| `expectedOutcome` | 预期效果 |
|
|
526
529
|
|
|
527
530
|
> 若 Agent 暂写 `"第 1 周:…"` 字符串,render 会尽力拆成 focusArea + actionItems,但**仍须补全 `expectedOutcome` 对象格式**以获得完整表格。
|
|
528
531
|
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
## 标准四步流程(默认 · 交付 HTML)
|
|
13
13
|
|
|
14
|
-
| 步骤 | 执行者 | 动作
|
|
15
|
-
| ---------------- | ------------ |
|
|
16
|
-
| **1. 拉数** | Agent 调 CLI | `google-analysis -a <id> --start <s> --end <e> --json-out ./snap-google --sections <见下方默认维度对应 CLI>`
|
|
17
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),完成筛选、聚合、排序与洞察
|
|
14
|
+
| 步骤 | 执行者 | 动作 |
|
|
15
|
+
| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
16
|
+
| **1. 拉数** | Agent 调 CLI | `google-analysis -a <id> --start <s> --end <e> --json-out ./snap-google --sections <见下方默认维度对应 CLI>` |
|
|
17
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),完成筛选、聚合、排序与洞察 |
|
|
18
18
|
| **3. 写 JSON** | Agent | 按 `assets/google-period-report.schema.json` 撰写 `google-period-report.json`:只写 `meta` + `narrative`(8 维度叙事);`kpis`/`charts`/`tables` 留给步骤 4 的 `--snapshot-dir` 合并(合并后缺 KPI 会拒绝出 HTML) |
|
|
19
|
-
| **4. 渲染 HTML** | CLI | `google-analysis render` — **校验 narrative 8 维度必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML
|
|
19
|
+
| **4. 渲染 HTML** | CLI | `google-analysis render` — **校验 narrative 8 维度必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
# 步骤 1
|
|
@@ -20,8 +20,8 @@ siluzan-tso facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb
|
|
|
20
20
|
| 步骤 | 执行者 | 动作 |
|
|
21
21
|
| ---------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
22
|
| **1. 拉数** | Agent 调 CLI | `facebook-analysis -a <id> --start <s> --end <e> --json-out ./snap-fb-diagnosis`(全 7 维或默认 6 维 + 按需 `material`) |
|
|
23
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按 guide 根字段自动映射
|
|
24
|
-
| **3. 写 JSON** | Agent | 撰写 `meta-account-diagnosis-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 自动合并
|
|
23
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按 guide 根字段自动映射 |
|
|
24
|
+
| **3. 写 JSON** | Agent | 撰写 `meta-account-diagnosis-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 自动合并 |
|
|
25
25
|
| **4. 渲染 HTML** | CLI | `facebook-analysis diagnosis-render` — **校验 narrative 11 个分析小节必含字段**(4 个媒体未覆盖小节可标 `notAvailable`),缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
26
26
|
|
|
27
27
|
> `--snapshot-dir` 自动补全 `meta` / `kpis`(仅 overview;**禁止**用 ad-sets/creative 行 results 加总对比 overview)与 `tables.*`(按 `facebook-analysis-guide.md`:`adGroups`/`networks`/`countries`/`audiences`/`creatives`/`materials`)。**数值一律以 CLI 快照覆盖**(`meta` 仅补空)。
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
## 标准四步流程(默认 · 交付 HTML)
|
|
13
13
|
|
|
14
|
-
| 步骤 | 执行者 | 动作
|
|
15
|
-
| ---------------- | ------------ |
|
|
16
|
-
| **1. 拉数** | Agent 调 CLI | `tiktok-analysis -a <id> --start <s> --end <e> --json-out ./snap-tiktok`(见下方「日期规则」,全 12 维或 `--sections` 指定子集)
|
|
17
|
-
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按类型自动映射
|
|
18
|
-
| **3. 写 JSON** | Agent | 撰写 `tiktok-period-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 按网关类型自动合并
|
|
19
|
-
| **4. 渲染 HTML** | CLI | `tiktok-analysis render` — **校验 narrative 6 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML
|
|
14
|
+
| 步骤 | 执行者 | 动作 |
|
|
15
|
+
| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
16
|
+
| **1. 拉数** | Agent 调 CLI | `tiktok-analysis -a <id> --start <s> --end <e> --json-out ./snap-tiktok`(见下方「日期规则」,全 12 维或 `--sections` 指定子集) |
|
|
17
|
+
| **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(勿用 Read 打开业务 `*.json`),做洞察与叙事;表格数字可由 `--snapshot-dir` 按类型自动映射 |
|
|
18
|
+
| **3. 写 JSON** | Agent | 撰写 `tiktok-period-report.json`:仅 `meta.accountId` + `narrative` 为必填;`kpis`/`tables` 可省略,由 `--snapshot-dir` 按网关类型自动合并 |
|
|
19
|
+
| **4. 渲染 HTML** | CLI | `tiktok-analysis render` — **校验 narrative 6 个分析小节必含字段**,缺项报错不生成 HTML;**禁止** Agent 手写/拼接 HTML |
|
|
20
20
|
|
|
21
21
|
> `--snapshot-dir` 自动补全 `meta` / `kpis` / `tables.*`。网关形状见 `src/types/tiktok-analysis-api.ts`(对齐前端 `periodReport/tiktok.js`):`campaigns` 为 `{ campaigns:[] }`;ad-groups/videos/audience 为 `{ data.list[].metrics }`(snake_case);ads 为根数组。**本期 KPI 优先 campaigns 累加**。**数值一律以 CLI 快照覆盖**(`meta` 仅补空);Agent 只写 `narrative`。
|
|
22
22
|
|
|
@@ -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.44
|
|
12
|
+
$PKG_VERSION = '1.1.44'
|
|
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.44
|
|
12
|
+
readonly PKG_VERSION="1.1.44"
|
|
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
|
|
@@ -6,18 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:用户只提供 entityId 时,应先 list-accounts(可加 --json-out)核对 mediaCustomerId,再对 stats 等传媒体账户 ID;不得把 entityId 当作 mediaCustomerId 直接传给 stats。\n输出:说明映射关系;stub 数据即可。",
|
|
8
8
|
"skillMapping": "SKILL.md「不要猜测账户 ID」;references/accounts/accounts.md",
|
|
9
|
-
"judgeReferencePaths": [
|
|
10
|
-
|
|
11
|
-
],
|
|
12
|
-
"commandMustInclude": [
|
|
13
|
-
[
|
|
14
|
-
"list-accounts"
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"stats"
|
|
18
|
-
],
|
|
19
|
-
[
|
|
20
|
-
"--json-out"
|
|
21
|
-
]
|
|
22
|
-
]
|
|
9
|
+
"judgeReferencePaths": ["references/accounts/accounts.md"],
|
|
10
|
+
"commandMustInclude": [["list-accounts"], ["stats"], ["--json-out"]]
|
|
23
11
|
}
|
|
@@ -6,7 +6,5 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:用户问如何把账户绑到 MCC/经理账户时,应先 read_skill_reference 查阅 accounts/accounts.md 中相关命令与注意点,再给出步骤;**未获确认前不应执行解绑/破坏性 CLI**。\n输出:步骤与风险提示;不要求真实绑定。",
|
|
8
8
|
"skillMapping": "references/accounts/accounts.md · MCC/Google 绑定类",
|
|
9
|
-
"judgeReferencePaths": [
|
|
10
|
-
"references/accounts/accounts.md"
|
|
11
|
-
]
|
|
9
|
+
"judgeReferencePaths": ["references/accounts/accounts.md"]
|
|
12
10
|
}
|
|
@@ -6,18 +6,7 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:仅查询**单个**账户余额/续航时,应使用单户 `balance`(或文档中的单户形态),不应套用多账户 `balance-scan` 除非用户明确多账户筛查。\n输出:说明意图即可;stub 金额不要求正确。",
|
|
8
8
|
"skillMapping": "references/accounts/accounts.md;与批量 balance-scan 区分",
|
|
9
|
-
"judgeReferencePaths": [
|
|
10
|
-
|
|
11
|
-
]
|
|
12
|
-
"commandMustInclude": [
|
|
13
|
-
[
|
|
14
|
-
"balance"
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"--json-out"
|
|
18
|
-
]
|
|
19
|
-
],
|
|
20
|
-
"commandMustNotInclude": [
|
|
21
|
-
"balance-scan"
|
|
22
|
-
]
|
|
9
|
+
"judgeReferencePaths": ["references/accounts/accounts.md"],
|
|
10
|
+
"commandMustInclude": [["balance"], ["--json-out"]],
|
|
11
|
+
"commandMustNotInclude": ["balance-scan"]
|
|
23
12
|
}
|
|
@@ -6,12 +6,5 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:`ad campaigns --json-out` 中 **`budget` 即用户可见日预算(元)**,与 `--budget` 写入口径一致;同样适用于 `google-analysis campaigns-*.json` 的 `budgetAmountYuan`、`ad groups --json-out` 的 `maxCPCAmountYuan`。CLI 出口的所有金额字段都已是元,**禁止**自己再做 ÷100 / ÷1_000_000 换算。\n输出:若引用 JSON,应体现正确金额尺度;不要求数值与真实一致。",
|
|
8
8
|
"skillMapping": "SKILL.md「金额与货币单位硬约束」",
|
|
9
|
-
"commandMustInclude": [
|
|
10
|
-
[
|
|
11
|
-
"ad campaigns"
|
|
12
|
-
],
|
|
13
|
-
[
|
|
14
|
-
"--json-out"
|
|
15
|
-
]
|
|
16
|
-
]
|
|
9
|
+
"commandMustInclude": [["ad campaigns"], ["--json-out"]]
|
|
17
10
|
}
|
|
@@ -6,18 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:Meta 线索应使用 `clue -m Meta -a <页面或账户 ID>`,并按文档加日期或 --json-out。\n输出:可说明 field_data;stub 即可。",
|
|
8
8
|
"skillMapping": "references/operations/clue.md",
|
|
9
|
-
"judgeReferencePaths": [
|
|
10
|
-
|
|
11
|
-
],
|
|
12
|
-
"commandMustInclude": [
|
|
13
|
-
[
|
|
14
|
-
"clue"
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"Meta"
|
|
18
|
-
],
|
|
19
|
-
[
|
|
20
|
-
"--json-out"
|
|
21
|
-
]
|
|
22
|
-
]
|
|
9
|
+
"judgeReferencePaths": ["references/operations/clue.md"],
|
|
10
|
+
"commandMustInclude": [["clue"], ["Meta"], ["--json-out"]]
|
|
23
11
|
}
|
|
@@ -6,15 +6,6 @@
|
|
|
6
6
|
],
|
|
7
7
|
"judgeExpectation": "路径:拉 TikTok 线索时应使用 `siluzan-tso clue -m TikTok -a <id>`,需要处理数据时加 `--json-out`(文档说明大数据量建议 JSON)。\n输出:可说明字段来源;stub 即可。",
|
|
8
8
|
"skillMapping": "references/operations/clue.md",
|
|
9
|
-
"judgeReferencePaths": [
|
|
10
|
-
|
|
11
|
-
],
|
|
12
|
-
"commandMustInclude": [
|
|
13
|
-
[
|
|
14
|
-
"clue"
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"TikTok"
|
|
18
|
-
]
|
|
19
|
-
]
|
|
9
|
+
"judgeReferencePaths": ["references/operations/clue.md"],
|
|
10
|
+
"commandMustInclude": [["clue"], ["TikTok"]]
|
|
20
11
|
}
|