siluzan-tso-cli 1.1.54 → 1.1.55-beta.2

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.
Files changed (34) hide show
  1. package/README.md +2 -1
  2. package/dist/index.js +473 -231
  3. package/dist/skill/SKILL.md +2 -2
  4. package/dist/skill/_meta.json +2 -2
  5. package/dist/skill/references/accounts/accounts-list.md +3 -1
  6. package/dist/skill/references/accounts/accounts-permissions.md +2 -2
  7. package/dist/skill/references/accounts/finance.md +1 -1
  8. package/dist/skill/references/accounts/open-account-by-media.md +1 -1
  9. package/dist/skill/references/accounts/open-account-google-ui.md +1 -1
  10. package/dist/skill/references/analytics/rag.md +1 -1
  11. package/dist/skill/references/analytics/reporting.md +5 -5
  12. package/dist/skill/references/core/agent-conventions.md +6 -4
  13. package/dist/skill/references/core/playbooks.md +1 -1
  14. package/dist/skill/references/core/setup.md +5 -5
  15. package/dist/skill/references/core/subagent-orchestration.md +1 -1
  16. package/dist/skill/references/misc/tso-home.md +2 -2
  17. package/dist/skill/references/operations/guard.md +1 -1
  18. package/dist/skill/references/report-templates/README.md +1 -1
  19. package/dist/skill/references/report-templates/REPORT-WORKFLOW.md +1 -1
  20. package/dist/skill/references/report-templates/okki-weekly-google-client.md +55 -42
  21. package/dist/skill/report-templates/README.md +1 -1
  22. package/dist/skill/report-templates/REPORT-WORKFLOW.md +1 -1
  23. package/dist/skill/report-templates/okki-weekly-google-client.md +55 -42
  24. package/dist/skill/scripts/install.ps1 +3 -3
  25. package/dist/skill/scripts/install.sh +3 -3
  26. package/dist/skill/snippets/handoff-p6-okki.md +2 -2
  27. package/eval/cases/compat-account-balance.scenario.json +23 -0
  28. package/eval/cases/compat-cpa-risk-scan.scenario.json +26 -0
  29. package/eval/cases/compat-d-group-mcc.scenario.json +31 -0
  30. package/eval/cases/compat-google-analysis-run-is-real.scenario.json +23 -0
  31. package/eval/cases/compat-playbook-code-w1.scenario.json +23 -0
  32. package/eval/cases/hosted-sop-daily-budget-circuit-breaker.scenario.json +8 -2
  33. package/eval/cases/uj-patrol-google-balances-low.scenario.json +9 -3
  34. package/package.json +1 -1
@@ -9,7 +9,7 @@
9
9
  > **默认交付(硬性,缺文件 = 任务未完成)**:磁盘上的 **5 Sheet `.xlsx`**(由 `google-analysis okki-render` 生成)+ 对话内客户话术。
10
10
  > 「表格形式 / 表格 / 各维度表格 / 表 / 做成表」= **Excel `.xlsx`**,**不是**对话 Markdown 表,**不是**手写 HTML/PDF。
11
11
  > 仅当用户明确「只要话术 / 不要文件 / 不要 Excel」时才省略 xlsx。
12
- > **禁止**:用对话 Markdown 表、手写 HTML、PDF 代替 `.xlsx`;**禁止** Agent 手写 / 脚本写 xlsx。
12
+ > **禁止**:用对话 Markdown 表、手写 HTML、PDF 代替 `.xlsx`;**禁止** Agent 手写 / 脚本写 xlsx。话术由 Agent 按下文「对外客户话术」填写,**不要**另写脚本生成话术。
13
13
 
14
14
  ## Contents
15
15
 
@@ -17,13 +17,13 @@
17
17
  - 标准四步流程(拉数 → 写 JSON → okki-render)
18
18
  - 拉数(一次目录)
19
19
  - xlsx 版式规范(由 CLI 锁死)
20
- - 对外客户话术(默认结构,填数来自 JSON)
20
+ - 对外客户话术(默认 7 条,一条一行)
21
21
  - 复盘小结(Excel「数据复盘」区块 / 对内补充)
22
22
  - 与 `google-period-report.md` 的差异
23
23
 
24
24
  ---
25
25
 
26
- 识别到上述意图时:**不要**再走 `google-period-report.md` 的「默认 9 章 + 追问追加」流程;按本文**固定维度 + 默认客户话术(可用户自定义)+ `okki-render` 出 5 Sheet `.xlsx`** 交付。**先 `okki-render` 再发话术**;没有 `.xlsx` 路径不得收口。
26
+ 识别到上述意图时:**不要**再走 `google-period-report.md` 的「默认 9 章 + 追问追加」流程;按本文**固定维度 + 默认客户话术(可用户自定义)+ `okki-render` 出 5 Sheet `.xlsx`** 交付。**先 `okki-render` 再发话术**;没有 `.xlsx` 路径不得收口。话术骨架见下文,禁止另起一套标题。
27
27
 
28
28
  ---
29
29
 
@@ -33,7 +33,7 @@
33
33
  2. **统计区间**:`--start` / `--end`(用户未给齐时按 SKILL 反问;授权默认时可用「上一完整自然周」白名单并写明)。
34
34
  3. **询盘口径**:默认使用区间内 `conversions`(转化次数,来自 `stats` 或 `overview`)。若运营定义为某类转化,须在首段脚注说明(必要时补拉 `google-analysis --sections conversion-actions` 仅作说明)。
35
35
  4. **日期写法**:`2026.4.1`、`2026/4/1` 等先规范为 `YYYY-MM-DD`(如 `2026-04-01`)再传 `--start` / `--end`。
36
- 5. **交付**:默认 **客户话术 + 5 Sheet `.xlsx`(必产,由 `okki-render` 写出)**。「表格形式」一律当 Excel。仅用户明确只要可复制话术、不要文件时,才省略 xlsx。
36
+ 5. **交付**:默认 **客户话术 + 5 Sheet `.xlsx`(xlsx 必产,由 `okki-render` 写出)**。「表格形式」一律当 Excel。仅用户明确只要可复制话术、不要文件时,才省略 xlsx。话术按下文默认 7 条填写。
37
37
 
38
38
  ---
39
39
 
@@ -241,53 +241,66 @@ function deviceKind(deviceType) {
241
241
 
242
242
  ## 对外客户话术(默认结构,填数来自 JSON)
243
243
 
244
- > **默认**:用户未指定话术样式时,使用下方**默认模板**输出终稿。
245
- > **用户自定义**:用户可(1)粘贴自有话术骨架;(2)要求增删改某几条(如「不要 5.1」「第 3 条改成…」);(3)指定 CTR 基准或币种展示方式。**自定义时仍须**:数值/百分比一律来自 CLI 落盘 JSON + 脚本计算,禁止编造;缺数据标 `[数据不可用:原因]`,不得留空占位符糊弄客户。
244
+ > 话术是给客户看的总结,**由 Agent 填写,不要写脚本生成**。骨架固定;只有措辞和数字随当次数据变。
246
245
 
247
- **日期写法(首行)**:`<S>` / `<E>` 转为中文可读,如 `4月1号-4月7号` 或 `2026年4月1日-4月7日`(与用户习惯一致即可,须与 `--start` / `--end` 对应)。
246
+ **默认就用下面这 7 条。** 放进代码块再发给用户,便于原样复制。换行是骨架的一部分:
248
247
 
249
- **默认模板**:
248
+ - `1`~`5`、`5.1`、`5.2`、`7` 各占一行,行末用分号
249
+ - 第 `6` 条先写「6、优化建议:」,下面 **3~5 条**建议各占一行,用 ①②③④⑤,禁止写进同一句
250
+ - 禁止把 1~7 合成一段
250
251
 
251
252
  ```
252
- 您好,同步一下谷歌<S>--<E>投放的情况:
253
+ 您好,同步一下谷歌<中文日期>投放的情况:
253
254
 
254
- 1、消耗:共消耗<金额+币种>,平均每天消耗<金额+币种>;
255
+ 1、消耗:共消耗<金额>,平均每天消耗<金额>;
255
256
  2、展示点击:带来<曝光>个曝光,<点击>个点击;
256
- 3、点击率:<CTR%>,处于<优秀/正常/偏低>水平(搜索正常水平 3%~5%,展示正常水平 1%~2%;按账户实际以搜索或展示为主选基准,无法区分时写「整体」并说明依据)
257
- 4、平均点击单价:<金额+币种>
258
- 5、转化:记录到网站表单+会话询盘<N>个;直接写邮件咨询和 WhatsApp 咨询无法记录,需贵司自行统计后反馈具体咨询产品和国家,方便广告及时调整
259
- 5.1 有转化的关键词:<据 keywords / search-terms JSON 填写;无转化则写「本周期暂无带转化关键词」>
260
- 5.2 有转化的国家:<据 campaign-geo-matched JSON 填写;无转化则写「本周期暂无带转化国家/地区」>
261
- 6、优化建议:<据 campaigns / keywords / search-terms / device / geo JSON 撰写 3~5 条可执行建议,禁止编造数据>
262
- 7、账户余额:<金额+币种>(截至查询时点)
257
+ 3、点击率:<CTR%>,处于<优秀/正常/偏低>水平(<按下方规则选一条基准>);
258
+ 4、平均点击单价:<金额>;
259
+ 5、转化:记录到网站表单+会话询盘<N>个;直接写邮件咨询和 WhatsApp 咨询无法记录,需贵司自行统计后反馈具体咨询产品和国家,方便广告及时调整;
260
+ 5.1 有转化的关键词:<词(N 个,CPA 金额)>;
261
+ 5.2 有转化的国家:<国家(N 个,CPA 金额)>;
262
+ 6、优化建议:
263
+ ① <一条可执行建议,点名对象并引用当次数字>
264
+ ② <同上>
265
+ ③ <同上>
266
+ 7、账户余额:<金额>(截至查询时点)。
263
267
  ```
264
268
 
269
+ 日期写成 `2026年4月1日-4月7日`(同年可省略结束年份),须与 `--start` / `--end` 对应。
270
+
271
+ **未获本轮用户改骨架时,禁止:**
272
+
273
+ - 改成「一、本周概览 / 二、本周发现 / 三、下周优化动作 / 四、需要您配合确认」,或任何另一套标题
274
+ - 把上一轮、另一个账户、对话里出现过的话术当成这次的骨架
275
+ - 用「结论先行」重写可复制块。运营摘要最多 3~5 行,放在代码块**外面**
276
+
277
+ **只有本轮用户**粘贴了全文骨架,或点名增删某一条(「不要 5.1」「第 3 条改成…」)时才偏离上面的结构。只改被点名的条目;用户删掉的条目不再输出。数字仍须来自当次 JSON,缺数写 `[数据不可用:原因]`。
278
+
265
279
  ### 填数规则
266
280
 
267
- | 条目 | 数据来源 / 计算 |
268
- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
269
- | 1 消耗 / 日均 | `stats` 或 `overview` 区间 `spend`;日均 = `总消耗 ÷ 区间日历天数`(含起止日),脚本计算 |
270
- | 2 曝光 / 点击 | `stats` / `overview` 的 `impressions`、`clicks` |
271
- | 3 点击率 | `overview.record.ctr` 或 `stats` 同级字段;已是 **0~1 小数**,话术 `(ctr * 100).toFixed(2) + "%"`,**禁止**直接打印得到 `0.10%` |
272
- | 3 水平判定 | **搜索为主**(Search 系列占消耗大头):`<3%` 偏低,`3%~5%` 正常,`>5%` 优秀;**展示为主**:`<1%` 偏低,`1%~2%` 正常,`>2%` 优秀;混合账户说明以哪类为准 |
273
- | 4 CPC | `stats` / `overview` 的 `averageCpc` 或 `cost / clicks` |
274
- | 5 转化数 | 默认 `conversions`(与「须先确认 §3 询盘口径」一致);括号说明若口径不同须在首段脚注 |
275
- | 5.1 / 5.2 | 从 `keywords` / `campaign-geo-matched` 筛 `conversions > 0`,列词或国家 + 转化数(可 TopN);用户自定义模板时仍可保留或合并为一条 |
276
- | 6 优化建议 | 同批 JSON,不额外拉数;用户若提供「只写预算/否词」等范围,按用户范围写 |
277
- | 7 余额 | `balance` 当前余额,标注截至查询时点 |
278
-
279
- - **所有金额、百分比** 一律 **2 位小数**(与 xlsx 规范一致)。
280
- - 用户自定义模板时:**保留用户条目顺序与措辞**,仅替换 `<…>` 占位或等价位置为 JSON 实数;用户删掉的条目不再输出。
281
-
282
- ### 用户自定义示例
283
-
284
- | 用户说法 | Agent 行为 |
285
- | ---------------------------------- | ---------------------------------------------------------- |
286
- | 「按默认 OKKI 话术发客户」 | 用上方默认模板 |
287
- | 「话术用我这份:…」(粘贴全文) | 以用户全文为骨架填数;缺项不擅自补回默认条目,除非用户要求 |
288
- | 「不要 5.1 / 5.2,其它不变」 | 输出默认模板但省略 5.1、5.2 |
289
- | 「第 3 条只写搜索点击率,基准 4%」 | 按用户基准改写判定话术,数值仍来自 JSON |
290
- | 「优化建议只要 3 条 bullet」 | 压缩第 6 条条数,内容仍须有据 |
281
+ | 条目 | 数据来源 / 计算 |
282
+ | --- | --- |
283
+ | 1 消耗 / 日均 | 区间 `spend`;日均 = `总消耗 ÷ 区间日历天数`(含起止日) |
284
+ | 2 曝光 / 点击 | `impressions`、`clicks` |
285
+ | 3 点击率 | 已是 **0~1 小数**时写 `(ctr * 100).toFixed(2) + "%"`,禁止直接打印成 `0.10%` |
286
+ | 3 水平判定 | **搜索消耗 ≥60%**:`<3%` 偏低,`3%~5%` 正常,`>5%` 优秀,括号写「搜索正常水平 3%~5%」。**展示消耗 ≥60%**:`<1%` 偏低,`1%~2%` 正常,`>2%` 优秀,括号写「展示正常水平 1%~2%」。其余写「整体」,并说明依据(如搜索消耗占比)。括号里只留这一句判定,不要把本表规则贴给客户 |
287
+ | 4 CPC | `averageCpc`,或 `cost / clicks` |
288
+ | 5 转化数 | 默认 `conversions` |
289
+ | 5.1 / 5.2 | `keywords` / `campaign-geo-matched` 中 `conversions > 0`,按词或国家合计,最多 5 个,写成「名称(N 个,CPA 金额)」;没有则写「本周期暂无带转化关键词」或「本周期暂无带转化国家/地区」 |
290
+ | 6 优化建议 | 同批 JSON,3~5 条,每条单独一行;不额外拉数。用户若限定「只写预算/否词」,按该范围写,条数仍各自成行 |
291
+ | 7 余额 | `balance` 当前余额,标注截至查询时点 |
292
+
293
+ 金额、百分比一律 2 位小数。CNY 用 `¥`,USD 用 `$`。
294
+
295
+ ### 用户本轮改骨架时
296
+
297
+ | 用户说法 | Agent 行为 |
298
+ | --- | --- |
299
+ | 未提话术样式 / 「按默认 OKKI 话术」 | 用上方 7 条,一条一行 |
300
+ | 「话术用我这份:…」(本轮粘贴全文) | 以这份全文为骨架填数;缺项不擅自补回默认条目 |
301
+ | 「不要 5.1 / 5.2,其它不变」 | 仍是默认 7 条,只删 5.1、5.2 |
302
+ | 「第 3 条只写搜索点击率,基准 4%」 | 只改第 3 条的判定句,数值仍来自 JSON |
303
+ | 「按上次那个账户的四段式」 | 仅当用户**本轮**这样说才换骨架;不要自己从历史里捡 |
291
304
 
292
305
  ---
293
306
 
@@ -304,5 +317,5 @@ function deviceKind(deviceType) {
304
317
  | 项 | `google-period-report.md` | 本文 OKKI 周报 |
305
318
  | -------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- |
306
319
  | 默认维度 | 8 维 + 主动追问追加 | **固定** `overview,campaigns,keywords,search-terms,campaign-device,campaign-geo-matched` + `stats` + `balance` |
307
- | 输出形态 | 长文分析报告(默认 HTML,`google-analysis render`) | **必产** 5 Sheet `.xlsx`(`google-analysis okki-render`)+ 客户话术;「表格形式」= Excel;**禁止**对话 Markdown 表 / 手写 HTML / Agent 手写 xlsx |
320
+ | 输出形态 | 长文分析报告(默认 HTML,`google-analysis render`) | **必产** 5 Sheet `.xlsx`(`google-analysis okki-render`)+ 客户话术(默认 7 条、一条一行);「表格形式」= Excel;**禁止**对话 Markdown 表 / 手写 HTML / Agent 手写 xlsx / 另写一套话术标题 |
308
321
  | 典型用户 | 内部分析 | **发客户**的同步简报 |
@@ -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.54'
12
+ $PKG_VERSION = '1.1.55-beta.2'
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.siluzan.com'
15
+ $INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
16
+ $WEB_BASE = 'https://www-ci.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.54"
12
+ readonly PKG_VERSION="1.1.55-beta.2"
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.siluzan.com"
15
+ readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
16
+ readonly WEB_BASE="https://www-ci.siluzan.com"
17
17
 
18
18
  # -- Constants ----------------------------------------------------------------
19
19
  readonly NODE_MAJOR_MIN=18
@@ -45,7 +45,7 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
45
45
 
46
46
  **任务**:
47
47
 
48
- 1. Read `report-templates/okki-weekly-google-client.md` 中 **§标准四步流程** 与 **§对外客户话术**(默认 7 条模板;主 Agent 若指定自定义话术则从其指示)。
48
+ 1. Read `report-templates/okki-weekly-google-client.md` 中 **§标准四步流程** 与 **§对外客户话术**(默认 7 条、一条一行;主 Agent 若说明用户本轮改了骨架则从其指示)。不要自己改成「一、二、三、四」。
49
49
  2. 按 `assets/okki-weekly-report.schema.json` 写 `okki-weekly-report.json`:只填 `meta` + `narrative.sheetAnalysis`(5 Sheet,各 summary≥1 / suggestions≥1)+ `narrative.review`(固定 5 维:账户/关键词/搜索字词/设备/国家,每维 overview+summary+suggestion)。表为空也须写分析。`campaign-device` 的 `deviceType` 是 `Desktop`/`Mobile`/`Tablet`(不是 `DESKTOP`/`MOBILE`);设备消耗按 `toLowerCase()` / `includes("desktop")` 分类累加,**禁止** `.get("DESKTOP")`。
50
50
  3. 执行:
51
51
  ```bash
@@ -57,4 +57,4 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
57
57
  失败则按 stderr 补 JSON 后重跑,不得改用手写表。
58
58
  4. 设备/国家必须来自 `campaign-device` / `campaign-geo-matched`(由 render 校验)。
59
59
 
60
- **returnSchema**: xlsx 路径 + `okki-render` exitCode + 客户话术文本;勿贴 xlsx 二进制。
60
+ **returnSchema**: xlsx 路径 + `okki-render` exitCode + 客户话术文本(默认 7 条、一条一行)。勿贴 xlsx 二进制。
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "compat-account-balance",
3
+ "description": "用户说 account balance 查全部 Google 户时改跑 balance-scan",
4
+ "turns": [
5
+ "请用 siluzan-tso 执行 account balance,检查我所有 Google 广告账户余额够不够。JSON 落盘,直接跑正确的那条。"
6
+ ],
7
+ "judgeExpectation": "路径:没有 `account balance`。多户余额必须 `balance-scan -m Google --json-out`。单户才用 `balance -m Google -a <id>`。\n输出:交付 `userDelivery`。不要停在错误命令上向用户解释用法后结束。",
8
+ "skillMapping": "references/accounts/accounts-balance-stats.md",
9
+ "judgeReferencePaths": [
10
+ "references/accounts/accounts-balance-stats.md"
11
+ ],
12
+ "commandMustInclude": [
13
+ [
14
+ "balance-scan"
15
+ ],
16
+ [
17
+ "--json-out"
18
+ ]
19
+ ],
20
+ "commandMustNotInclude": [
21
+ "account balance"
22
+ ]
23
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "id": "compat-cpa-risk-scan",
3
+ "description": "用户说 cpa-risk-scan 时改跑 accounts-digest",
4
+ "turns": [
5
+ "帮我跑 cpa-risk-scan,看所有 Google 户最近 7 天转化成本有没有超过 500。用 siluzan-tso,直接执行正确命令,JSON 落盘。"
6
+ ],
7
+ "judgeExpectation": "路径:没有 `cpa-risk-scan`。转化成本巡检用 `accounts-digest -m Google --max-cpa --json-out`。\n输出:交付 `agentBrief.userDelivery`。",
8
+ "skillMapping": "references/accounts/accounts-balance-stats.md",
9
+ "judgeReferencePaths": [
10
+ "references/accounts/accounts-balance-stats.md"
11
+ ],
12
+ "commandMustInclude": [
13
+ [
14
+ "accounts-digest"
15
+ ],
16
+ [
17
+ "--max-cpa"
18
+ ],
19
+ [
20
+ "--json-out"
21
+ ]
22
+ ],
23
+ "commandMustNotInclude": [
24
+ "cpa-risk-scan"
25
+ ]
26
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "id": "compat-d-group-mcc",
3
+ "description": "D 组日巡检必须带 --login-customer-id,不得发明其它 MCC 旗标",
4
+ "turns": [
5
+ "做 D 组日巡检:只看 MCC 3978893117 下面的 Google 账户余额够不够。用 siluzan-tso,JSON 落盘,直接执行。"
6
+ ],
7
+ "judgeExpectation": "路径:D 组 / MCC 3978893117 的余额巡检必须是 `balance-scan -m Google --login-customer-id 3978893117 --json-out`。\n禁止发明 `--mcc`、`--login-customerid` 或其它旗标。不传该参数时才扫全部账户。",
8
+ "skillMapping": "references/accounts/accounts-list.md",
9
+ "judgeReferencePaths": [
10
+ "references/accounts/accounts-list.md"
11
+ ],
12
+ "commandMustInclude": [
13
+ [
14
+ "balance-scan"
15
+ ],
16
+ [
17
+ "--login-customer-id"
18
+ ],
19
+ [
20
+ "3978893117"
21
+ ],
22
+ [
23
+ "--json-out"
24
+ ]
25
+ ],
26
+ "commandMustNotInclude": [
27
+ "--mcc",
28
+ "--login-customerid",
29
+ "--login_customer_id"
30
+ ]
31
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "compat-google-analysis-run-is-real",
3
+ "description": "单户 google-analysis run 是合法默认子命令,多户全量才用 google-analysis-batch",
4
+ "turns": [
5
+ "用 siluzan-tso 对 Google 账户 {{EVAL_ACCOUNT_READ}} 执行 google-analysis run,拉近 7 天周期数据,JSON 落盘,直接执行。"
6
+ ],
7
+ "judgeExpectation": "路径:`google-analysis run -a <id> --json-out` 是单户拉数的合法写法,与 `google-analysis -a <id>` 等价,不要改写成别的命令。\n输出:说明结果在 --json-out 目录。不要求数值正确。",
8
+ "skillMapping": "references/core/agent-conventions.md · 批量任务",
9
+ "judgeReferencePaths": [
10
+ "references/core/agent-conventions.md"
11
+ ],
12
+ "commandMustInclude": [
13
+ [
14
+ "google-analysis"
15
+ ],
16
+ [
17
+ "{{EVAL_ACCOUNT_READ}}"
18
+ ],
19
+ [
20
+ "--json-out"
21
+ ]
22
+ ]
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "compat-playbook-code-w1",
3
+ "description": "把 W1 当命令时改跑 list-accounts",
4
+ "turns": [
5
+ "请执行 siluzan-tso W1,把我的 Google 广告账户都列出来,要 JSON。"
6
+ ],
7
+ "judgeExpectation": "路径:`W1` 是路由编号不是 CLI 命令。列出 Google 账户用 `list-accounts -m Google --json-out`。\n输出:账户列表或明确的命令失败原因。",
8
+ "skillMapping": "SKILL.md 路由表 W1",
9
+ "commandMustInclude": [
10
+ [
11
+ "list-accounts"
12
+ ],
13
+ [
14
+ "Google"
15
+ ],
16
+ [
17
+ "--json-out"
18
+ ]
19
+ ],
20
+ "commandMustNotInclude": [
21
+ " W1"
22
+ ]
23
+ }
@@ -2,12 +2,18 @@
2
2
  "id": "hosted-sop-daily-budget-circuit-breaker",
3
3
  "description": "SOP1:单日预算熔断 — 方案须含拉数字段、系数、暂停与人工恢复(仅方案,不执行 CLI)",
4
4
  "turns": [
5
- "我在给 Google 账户 {{EVAL_ACCOUNT_WRITE}} 写 Cron 宿主编排「单日预算熔断」:当日累计费用相对**日预算**达到 **115%** 就自动暂停对应 Campaign(系数做成可配置,默认区间按文档建议写进方案)。统计日 **2026-04-24**(起止都是这一天)。**请不要在本轮执行任何 siluzan-tso 命令**;只输出一份可落地的**文字方案**:读哪些接口/JSON 字段、阈值公式、命中后的写命令、熔断后人工恢复步骤。可把示例命令写在方案里作说明。"
5
+ "我在给 Google 账户写 Cron 宿主编排「单日预算熔断」:当日累计费用相对日预算达到 115% 就先列出对应 Campaign(系数做成可配置,默认区间按文档建议写进方案)。统计日 2026-04-24。请不要在本轮执行任何 siluzan-tso 命令;只输出一份可落地的文字方案:用哪条命令检查全户、命中后怎么交付、用户授权后才写的暂停命令、人工恢复步骤。"
6
6
  ],
7
- "judgeExpectation": "评分对象:仅评 agent 最终回复里的**文字方案**(设计步骤、数据字段、判断条件、拟用写命令、复核与通知),**不**要求本轮对话中真的执行 CLI、也**不**依据命令 trace 给分。\n方案应可交给 Cron/OpenClaw 等宿主落地;示例命令可作为方案的一部分出现。\n方案中应写明:用 `siluzan-tso ad campaigns -a <id> --start/--end`(当日起止一致)加 `--json-out` 读取 **`spend`** 与 **`budget`**(日预算,**CLI 已统一为元**),并与 `SKILL.md` 金额硬规范**统一口径**后再比。\n方案中应写明:阈值 = 日预算(同单位)×(系数/100),系数建议 **110–120**(抗 API 延迟);**IF** spend ≥ 阈值则拟执行 **`ad campaign-status … --status Paused`**。\n方案中应写明:恢复须**人工**检查并调高预算后,再用 **`campaign-status … Enabled`** 或网页启用;不应写成无人值守自动恢复。",
7
+ "judgeExpectation": "评分对象:仅评 agent 最终回复里的**文字方案**(设计步骤、数据字段、判断条件、拟用写命令、复核与通知),**不**要求本轮对话中真的执行 CLI、也**不**依据命令 trace 给分。\n方案应可交给 Cron/OpenClaw 等宿主落地;示例命令可作为方案的一部分出现。\n方案中的全户检查命令必须是 `siluzan-tso guard budget-circuit -m Google --json-out`(可带 `--date` / `--ratio`)。禁止把逐户 `ad campaigns` 写成正确路径。\n方案中应写明:阈值 = 日预算 × ratio(默认 1.1,建议 1.10–1.20);命中字段是系列名称、当日 `spend`、日 `budget`。交付物是 CLI 的 `userDelivery`(无命中为「今日无命中」)。\n方案中应写明:`guard` 只列出命中,不暂停。只有用户当轮明确授权后,才对命中 ID 逐条执行 `ad campaign-status … --status Paused --commit`。恢复须人工调高预算后再启用,不应写成无人值守自动恢复。",
8
8
  "skillMapping": "references/operations/hosted-automation-self-control.md · 场景 1",
9
9
  "judgeReferencePaths": [
10
10
  "references/operations/hosted-automation-self-control.md",
11
11
  "references/google-ads/google-ads.md"
12
+ ],
13
+ "commandMustNotInclude": [
14
+ "ad campaigns"
15
+ ],
16
+ "responseMustMatch": [
17
+ "guard budget-circuit"
12
18
  ]
13
19
  }
@@ -2,19 +2,25 @@
2
2
  "id": "uj-patrol-google-balances-low",
3
3
  "description": "所有 Google 账户余额是否快没钱",
4
4
  "turns": [
5
- "帮我检查一下所有 Google 账户的余额,看看有没有快没钱的。用 siluzan-tso,先 list 再查余额思路,需要 JSON 的地方加 --json-out。"
5
+ "帮我检查一下所有 Google 账户的余额,看看有没有快没钱的。用 siluzan-tso,JSON 落盘,直接执行。"
6
6
  ],
7
- "judgeExpectation": "路径:应先 list-accounts 获取 Google 账户集合,再按需 balance 或说明多账户策略;不得对大量账户逐条手写死循环式 balance(若文档推荐批量/扫描应优先);须诚实说明 CLI 能否一次扫完全媒体。\n输出:说明判断「快没钱」所需字段(余额+消耗);stub 即可。",
7
+ "judgeExpectation": "路径:多户余额预警必须执行 `balance-scan -m Google --json-out`。不要先 `list-accounts` 再逐户 `balance`,也不要执行 `account balance`。\n输出:把 CLI stdout 里的 `userDelivery` 原样交给用户(命中表或「今日无命中」)。",
8
8
  "skillMapping": "references/accounts/accounts.md;SKILL 批量任务",
9
9
  "judgeReferencePaths": [
10
10
  "references/accounts/accounts.md"
11
11
  ],
12
12
  "commandMustInclude": [
13
13
  [
14
- "list-accounts"
14
+ "balance-scan"
15
15
  ],
16
16
  [
17
17
  "Google"
18
+ ],
19
+ [
20
+ "--json-out"
18
21
  ]
22
+ ],
23
+ "commandMustNotInclude": [
24
+ "account balance"
19
25
  ]
20
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.54",
3
+ "version": "1.1.55-beta.2",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",