siluzan-tso-cli 1.1.48 → 1.1.49-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 (38) hide show
  1. package/README.md +2 -1
  2. package/dist/index.js +2511 -1680
  3. package/dist/skill/SKILL.md +2 -2
  4. package/dist/skill/_meta.json +2 -2
  5. package/dist/skill/assets/google-period-report.schema.json +8 -0
  6. package/dist/skill/assets/okki-weekly-report.schema.json +78 -0
  7. package/dist/skill/references/README.md +1 -1
  8. package/dist/skill/references/accounts/accounts-list.md +1 -1
  9. package/dist/skill/references/accounts/accounts-permissions.md +2 -2
  10. package/dist/skill/references/accounts/finance.md +1 -1
  11. package/dist/skill/references/accounts/open-account-by-media.md +1 -1
  12. package/dist/skill/references/accounts/open-account-google-ui.md +1 -1
  13. package/dist/skill/references/analytics/account-analytics.md +3 -1
  14. package/dist/skill/references/analytics/rag.md +1 -1
  15. package/dist/skill/references/analytics/reporting.md +5 -5
  16. package/dist/skill/references/core/agent-conventions.md +1 -1
  17. package/dist/skill/references/core/intent-routing.md +2 -2
  18. package/dist/skill/references/core/playbooks.md +5 -3
  19. package/dist/skill/references/core/setup.md +5 -5
  20. package/dist/skill/references/core/subagent-orchestration.md +3 -3
  21. package/dist/skill/references/misc/tso-home.md +2 -2
  22. package/dist/skill/references/report-templates/README.md +1 -1
  23. package/dist/skill/references/report-templates/REPORT-WORKFLOW.md +3 -3
  24. package/dist/skill/references/report-templates/excel-style-guide.md +1 -1
  25. package/dist/skill/references/report-templates/google-period-report-excel.md +2 -1
  26. package/dist/skill/references/report-templates/google-period-report.md +1 -1
  27. package/dist/skill/references/report-templates/okki-weekly-google-client.md +37 -18
  28. package/dist/skill/report-templates/README.md +1 -1
  29. package/dist/skill/report-templates/REPORT-WORKFLOW.md +3 -3
  30. package/dist/skill/report-templates/excel-style-guide.md +1 -1
  31. package/dist/skill/report-templates/google-period-report-excel.md +2 -1
  32. package/dist/skill/report-templates/google-period-report.html +2 -0
  33. package/dist/skill/report-templates/google-period-report.md +1 -1
  34. package/dist/skill/report-templates/okki-weekly-google-client.md +37 -18
  35. package/dist/skill/scripts/install.ps1 +3 -3
  36. package/dist/skill/scripts/install.sh +3 -3
  37. package/dist/skill/snippets/handoff-p6-okki.md +15 -6
  38. package/package.json +1 -1
@@ -20,7 +20,7 @@ allowed-tools: Bash(siluzan-tso:*) Read Write
20
20
 
21
21
  > **加载**:按下方路由表 Read **一个**工作流卡片 + **一个**命令/报告 reference 后执行。写操作、报告交付、批量拉数、对用户写结论、或上下文被压缩时,再 Read `references/core/agent-conventions.md`(含 §十四沟通)。
22
22
  >
23
- > **报告 / 诊断 / 分析 / 拓词 / 转化成本·CPA·零询盘话术模糊**:先 Read `references/core/intent-routing.md`(含 **§零·D**:无 CRM 的转化巡检 → P3,不是 P7),再回路由表。数据任务一律 `--json-out` + 代码读盘(示例见 `references/core/tips.md`)。未指定格式时 P1/P4/P4-FB/P8/P9 默认 **HTML**;**P6/P7 默认多 Sheet `.xlsx`**(「表格形式」= xlsx,禁止 Markdown 表 / 手写 HTML 代替)。巡检类任务须交付摘要或显式失败原因。
23
+ > **报告 / 诊断 / 分析 / 拓词 / 转化成本·CPA·零询盘话术模糊**:先 Read `references/core/intent-routing.md`(含 **§零·D**:无 CRM 的转化巡检 → P3,不是 P7),再回路由表。数据任务一律 `--json-out` + 代码读盘(示例见 `references/core/tips.md`)。未指定格式时 P1/P4/P4-FB/P8/P9 默认 **HTML**;**P6 默认 `okki-render` 出 5 Sheet `.xlsx`**、**P7 默认 8 Sheet `.xlsx`**(「表格形式」= xlsx,禁止 Markdown 表 / 手写 HTML / P6 Agent 手写 xlsx)。巡检类任务须交付摘要或显式失败原因。
24
24
 
25
25
  ---
26
26
 
@@ -109,7 +109,7 @@ siluzan-tso -h
109
109
  | Yandex 账户分析 / 周期 / 月报 | **P4** | `report-templates/yandex-period-report.md` + `references/analytics/account-analytics.md`;Excel 加 `yandex-period-report-excel.md` |
110
110
  | 账户级按日 Excel | **P4-DAILY** | `report-templates/stats-daily-excel.md` |
111
111
  | 多账户 × 多维度批处理 | **P5** | `references/analytics/google-analysis-batch.md` + `references/analytics/account-analytics.md` |
112
- | OKKI 周报 / 表格形式(OKKI) | **P6** | `report-templates/okki-weekly-google-client.md`(**必产 5 Sheet `.xlsx`**;「表格形式」= Excel) |
112
+ | OKKI 周报 / 表格形式(OKKI) | **P6** | `report-templates/okki-weekly-google-client.md`(写 `okki-weekly-report.json` → `google-analysis okki-render` 出 5 Sheet `.xlsx`;「表格形式」= Excel) |
113
113
  | Google 询盘分析(**须 CRM 询盘资料**;口语零询盘/CPA → **P3**) | **P7** | `report-templates/google-inquiry-analysis.md` + `references/analytics/geo-continents.json` |
114
114
  | 网址/域名/官网 + 诊断·检测·监测·报告 / **是否符合广告投放要求** / 能不能投 | **P8** | `references/core/intent-routing.md` §零 + `references/analytics/website-diagnosis-guide.md` + `assets/website-diagnosis-rules.md`(**必** `website-diagnosis collect`;**≠ P9 ≠ W3**;禁纯 WebFetch) |
115
115
  | 市场/行业分析报告 / 战略市场 / KA 市场报告 | **P9** | `references/analytics/market-analysis-guide.md` + `assets/market-analysis-rules.md`(须 collect+render;**≠ P8**) |
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.48",
4
- "publishedAt": 1787911822172
3
+ "version": "1.1.49-beta.2",
4
+ "publishedAt": 1788233809334
5
5
  }
@@ -30,6 +30,14 @@
30
30
  "ctr": { "type": "number", "description": "0~1 小数" },
31
31
  "averageCpc": { "type": "number" },
32
32
  "costPerConversion": { "type": "number" },
33
+ "activeDays": {
34
+ "type": "number",
35
+ "description": "本期消耗>0 的自然日数;来自 overview.record.activeDays,不在 currentPeriod"
36
+ },
37
+ "averageDailyCost": {
38
+ "type": "number",
39
+ "description": "本期日均消耗;来自 overview.record.averageDailyCost,不在 currentPeriod"
40
+ },
33
41
  "previousPeriod": {
34
42
  "type": "object",
35
43
  "description": "环比上期(用于 KPI 卡片环比箭头),可省略",
@@ -0,0 +1,78 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "siluzan-tso/okki-weekly-report.schema.json",
4
+ "title": "OkkiWeeklyReport",
5
+ "description": "OKKI 周报 JSON(对齐 okki-weekly-google-client.md)。Agent 只写 meta + narrative;tables/kpis 由 google-analysis okki-render --snapshot-dir 合并。render 校验 5 Sheet 表末分析 + 账户 Sheet 固定 5 维数据复盘,缺项拒绝出 xlsx。",
6
+ "type": "object",
7
+ "required": ["meta", "narrative"],
8
+ "properties": {
9
+ "meta": {
10
+ "type": "object",
11
+ "required": ["accountId"],
12
+ "properties": {
13
+ "accountId": { "type": "string" },
14
+ "accountName": { "type": "string" },
15
+ "startDate": { "type": "string", "format": "date" },
16
+ "endDate": { "type": "string", "format": "date" },
17
+ "currency": { "type": "string" }
18
+ }
19
+ },
20
+ "narrative": {
21
+ "type": "object",
22
+ "required": ["sheetAnalysis", "review"],
23
+ "properties": {
24
+ "sheetAnalysis": {
25
+ "type": "object",
26
+ "description": "每个 Sheet 表末「分析」;表为空也必须写",
27
+ "required": ["campaigns", "keywords", "searchTerms", "devices", "geo"],
28
+ "properties": {
29
+ "campaigns": { "$ref": "#/$defs/sheetAnalysis" },
30
+ "keywords": { "$ref": "#/$defs/sheetAnalysis" },
31
+ "searchTerms": { "$ref": "#/$defs/sheetAnalysis" },
32
+ "devices": { "$ref": "#/$defs/sheetAnalysis" },
33
+ "geo": { "$ref": "#/$defs/sheetAnalysis" }
34
+ }
35
+ },
36
+ "review": {
37
+ "type": "object",
38
+ "description": "账户 Sheet 底部「数据复盘」固定 5 维,每维 overview + summary + suggestion",
39
+ "required": ["account", "keywords", "searchTerms", "devices", "geo"],
40
+ "properties": {
41
+ "account": { "$ref": "#/$defs/reviewBlock" },
42
+ "keywords": { "$ref": "#/$defs/reviewBlock" },
43
+ "searchTerms": { "$ref": "#/$defs/reviewBlock" },
44
+ "devices": { "$ref": "#/$defs/reviewBlock" },
45
+ "geo": { "$ref": "#/$defs/reviewBlock" }
46
+ }
47
+ }
48
+ }
49
+ }
50
+ },
51
+ "$defs": {
52
+ "sheetAnalysis": {
53
+ "type": "object",
54
+ "required": ["summary", "suggestions"],
55
+ "properties": {
56
+ "summary": {
57
+ "type": "array",
58
+ "minItems": 1,
59
+ "items": { "type": "string", "minLength": 1 }
60
+ },
61
+ "suggestions": {
62
+ "type": "array",
63
+ "minItems": 1,
64
+ "items": { "type": "string", "minLength": 1 }
65
+ }
66
+ }
67
+ },
68
+ "reviewBlock": {
69
+ "type": "object",
70
+ "required": ["overview", "summary", "suggestion"],
71
+ "properties": {
72
+ "overview": { "type": "string", "minLength": 1 },
73
+ "summary": { "type": "string", "minLength": 1 },
74
+ "suggestion": { "type": "string", "minLength": 1 }
75
+ }
76
+ }
77
+ }
78
+ }
@@ -125,7 +125,7 @@
125
125
  | 文件 | 用途 |
126
126
  | ----------------------- | --------------------------------- |
127
127
  | `handoff-p5-batch.md` | P5 batch 与按账户聚合 Task prompt |
128
- | `handoff-p6-okki.md` | P6 OKKI 拉数 / 写 xlsx |
128
+ | `handoff-p6-okki.md` | P6 OKKI 拉数 / 写 JSON + okki-render |
129
129
  | `handoff-p7-inquiry.md` | P7 询盘拉数与 xlsx |
130
130
 
131
131
  `agent-preamble.md` 仅用于构建时注入 `SKILL.md`,不复制到 `dist/skill/snippets/`。
@@ -167,7 +167,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./sna
167
167
  | 状态 | 含义 | 下一步操作 |
168
168
  | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
169
169
  | `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
170
- | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
170
+ | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,按 `finance.md` 打开对应媒体充值页;例如 Google 为 `https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google`;Yandex 当前没有对应充值界面) |
171
171
  | `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
172
172
 
173
173
  ---
@@ -490,7 +490,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
490
490
 
491
491
  | 功能 | 媒体 | 网页路径 |
492
492
  | --------------------------------------- | ------ | ------------------------------------------------- |
493
- | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
493
+ | **账户激活**(邀请他人激活 / 充值激活) | Google | `https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts` |
494
494
 
495
495
  **Agent 建议话术**:
496
496
 
@@ -499,5 +499,5 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
499
499
  siluzan-tso config show # 查看 webUrl 字段
500
500
 
501
501
  # 账户激活(Google)→ 引导至账户管理页
502
- # https://www.siluzan.com/v3/foreign_trade/tso/manageAccounts
502
+ # https://www-ci.siluzan.com/v3/foreign_trade/tso/manageAccounts
503
503
  ```
@@ -126,7 +126,7 @@ siluzan-tso config show
126
126
 
127
127
  ### 充值页链接(按媒体 × 类型)
128
128
 
129
- 链接模式:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
129
+ 链接模式:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/<page>?mediaType=<mediaType>`;丝路赞钱包:`https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/siluzanWallet`(无媒体参数)。
130
130
 
131
131
  | 充值类型 | `<page>` | 支持媒体(`mediaType` 参数) |
132
132
  | ------------------------- | --------------------- | ------------------------------------------- |
@@ -1,6 +1,6 @@
1
1
  # 各媒体开户
2
2
 
3
- > 网页链接:`https://www.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
3
+ > 网页链接:`https://www-ci.siluzan.com/v3/foreign_trade/tso/accountOpeningHistory?tso=%2Fv3umijs%2Ftso%2FaccountOpeningHistory`
4
4
  > 多命令串联见 `references/core/workflows.md` § 流程一。
5
5
 
6
6
  ## Contents
@@ -65,7 +65,7 @@ siluzan-tso open-account google-wizard
65
65
 
66
66
  ```bash
67
67
  siluzan-tso account-history -m Google
68
- # 审核通过后:config show → https://www.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
68
+ # 审核通过后:config show → https://www-ci.siluzan.com/v3/foreign_trade/tso/recharge/pay?mediaType=Google
69
69
  ```
70
70
 
71
71
  ---
@@ -44,7 +44,7 @@
44
44
  ## 工作流入口(线性步骤见 playbooks)
45
45
 
46
46
  > 线性步骤见 `playbooks.md`:单户画像 **P1**、Google 周期 **P4**、Meta 周期 **P4-FB**、多账户批处理 **P5**、OKKI **P6**、询盘 **P7**。
47
- > 「使用 okki 周报模板」→ **P6**(勿按默认 8 维追问)。Google 周期 Excel(非 OKKI/询盘)→ **P4** + `report-templates/google-period-report-excel.md`。
47
+ > 「使用 okki 周报模板」→ **P6**(勿按默认 8 维追问;终稿 `google-analysis okki-render`,禁止 Agent 手写 xlsx)。Google 周期 Excel(非 OKKI/询盘)→ **P4** + `report-templates/google-period-report-excel.md`。
48
48
 
49
49
  拉数落盘:`google-analysis … --json-out <dir>`(Google)或 `yandex-analysis` / `bing-analysis` / `facebook-analysis` / `tiktok-analysis`;目录内生成 `<section>-<accountId>.json` + `manifest-<accountId>.json`(Meta/TikTok/Bing/Yandex 为 `report-manifest-<accountId>.json`)。读盘协议、交付自检与报告首行标注统一见 `references/core/agent-conventions.md` §三、§七。
50
50
 
@@ -157,6 +157,8 @@ siluzan-tso google-analysis -a <id> --exclude materials,gold-account --json-out
157
157
 
158
158
  **唯一判别规则**:`record` 非 `null` → 读 `record`(汇总维度);否则 → 读 `items[]`(列表维度)。
159
159
 
160
+ `overview` 的 `activeDays` / `averageDailyCost` **只在 `record` 根上**(本期、消耗>0 的自然日;日均=`totalCost/activeDays`)。`currentPeriod` / `previousPeriod` **没有**这两个字段——禁止 `cur.get("activeDays")`(会整行写成「—」)。上期活跃天数接口不返回;要环比另拉上期 `daily-metrics` 数 `spend>0` 的天数,禁止编造。`google-analysis render --snapshot-dir` 会把这两个字段并进 `kpis`。
161
+
160
162
  | 桶 | 维度 | 读法 |
161
163
  | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
162
164
  | **列表** | `keywords`、`search-terms`、`campaigns`、`campaign-hour`、`ads`、`extensions`、`devices`、`geographic`、`geo-matched`、`campaign-geo`、`campaign-geo-matched`、`campaign-device`、`audience`、`asset-images`、`videos`、`materials`、`daily-metrics`、`conversion-actions` | `d.items[]` |
@@ -1,6 +1,6 @@
1
1
  # rag:知识库检索(TSO 广告投放辅助)
2
2
 
3
- 知识库管理页面在 https://www.siluzan.com/knowledge-base/
3
+ 知识库管理页面在 https://www-ci.siluzan.com/knowledge-base/
4
4
 
5
5
  为 **广告投放、账户分析、拓词、诊断报告** 等 TSO 业务提供**企业已入库**的产品、行业、客户背景事实依据。
6
6
 
@@ -190,9 +190,9 @@ siluzan-tso report push receive-emails -m Google [--json-out ./snap]
190
190
 
191
191
  | 媒体 | 报告类型 | URL 模板 |
192
192
  | ------ | ---------------- | ----------------------------------------------------------- |
193
- | Google | 日报(Daily) | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
194
- | Google | 小时报(Hourly) | `https://www.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
195
- | TikTok | 日报 | `https://www.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
193
+ | Google | 日报(Daily) | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
194
+ | Google | 小时报(Hourly) | `https://www-ci.siluzan.com/media-report/hour/{entityId}?culture=zh-CN` |
195
+ | TikTok | 日报 | `https://www-ci.siluzan.com/media-report/publish/{entityId}?culture=zh-CN` |
196
196
 
197
197
  `entityId` 来自 `siluzan-tso report list --json-out ./snap` 中每条记录的 `entityId` 字段。
198
198
 
@@ -205,8 +205,8 @@ siluzan-tso report list -m Google --json-out ./snap
205
205
 
206
206
  # 第二步:查看 webUrl
207
207
  siluzan-tso config show
208
- # webUrl: https://www.siluzan.com
208
+ # webUrl: https://www-ci.siluzan.com
209
209
 
210
210
  # 第三步:拼接链接(Google 日报)
211
- # https://www.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
211
+ # https://www-ci.siluzan.com/media-report/publish/rpt_abc123?culture=zh-CN
212
212
  ```
@@ -221,7 +221,7 @@
221
221
 
222
222
  **A · 币种**:首行含 `统计区间:…(货币:CNY|USD)`;全文符号与 `currencyCode` 一致(CNY=¥、USD=$,未混用);与当次 `list-accounts -k` 结果相同;多账户分币种分表、无跨币种「总计」行。
223
223
 
224
- **B · 结构完整**(对照当次 `report-templates/*.md`):模板要求的每一章/Sheet 都存在;无整章空白(缺数据章节写 `[ 数据不可用:… ]`,禁止编造数字填坑);优化建议独立成节、引用当次数字(Meta 周期:四问 + 3 张建议卡 + 各章 analysis/advice;Google 诊断:每模块除表格外有「分析」+「建议」);Excel 的表头列须能在当次 `*.outline.txt` 找到对应字段、产物内账户 ID = 用户当轮给出的 `mediaCustomerId`;**Excel 内全部 ID 列为文本**(见上文「写 Excel 时所有 ID 必须是文本」)。**P6/P7**:磁盘上必须已有 `.xlsx`;对话 Markdown 表、手写 HTML/PDF **不能**当作终稿通过自检(用户明确只要话术除外)。
224
+ **B · 结构完整**(对照当次 `report-templates/*.md`):模板要求的每一章/Sheet 都存在;无整章空白(缺数据章节写 `[ 数据不可用:… ]`,禁止编造数字填坑);优化建议独立成节、引用当次数字(Meta 周期:四问 + 3 张建议卡 + 各章 analysis/advice;Google 诊断:每模块除表格外有「分析」+「建议」);Excel 的表头列须能在当次 `*.outline.txt` 找到对应字段、产物内账户 ID = 用户当轮给出的 `mediaCustomerId`;**Excel 内全部 ID 列为文本**(见上文「写 Excel 时所有 ID 必须是文本」)。**P6**:磁盘上必须已有 `google-analysis okki-render` 写出的 `.xlsx`(禁止 Agent 手写表)。**P7**:磁盘上必须已有 `.xlsx`。对话 Markdown 表、手写 HTML/PDF **不能**当作终稿通过自检(用户明确只要话术除外)。
225
225
 
226
226
  **C · 数字可信**(抽样,不读大 JSON):总消耗/CPA 数量级与生成过程中脚本 stdout 打印的汇总一致(若无,补跑一次极小 `node -e` 只打印 totals);账户 ID、区间与用户需求一致;无「示例账户」「占位 123456」等模板残留;表格行数符合预期(如 P3 每个 `-a` ID 占一行)。
227
227
 
@@ -222,7 +222,7 @@
222
222
  | **P4** | **单个媒体广告账户** 某区间的 **周期汇总** | 周期报告、月度报告、季度报告、月报、投放月报、Google 账户报告(**未强调「诊断/健康/网站/网址」**) | 媒体 + 账户 ID + 区间 | HTML(默认);用户要 Excel 见 P4 excel 纲要 |
223
223
  | **P4-DAILY** | **账户级按日表**(无多维) | 按天导出、投放数据 Excel(非 Google/Meta 周期报告) | 媒体 + 账户 ID + 区间 | xlsx(`stats --by-day`) |
224
224
  | **P4-FB** | **Meta/Facebook 账户** 周期或诊断 | Facebook 报告、Meta 月报、FB **账户**诊断报告 | Meta 账户 ID + 区间 | HTML(`facebook-analysis render`);要表格 `--format xlsx` |
225
- | **P6** | **OKKI 周报**(固定客户模板) | 见 §三魔法短语;「表格形式 / 表格 / 各维度表格」仍是 P6 | 账户 ID + 区间 | **必产** 5 Sheet xlsx(禁止 Markdown 表/手写 HTML 代替) |
225
+ | **P6** | **OKKI 周报**(固定客户模板) | 见 §三魔法短语;「表格形式 / 表格 / 各维度表格」仍是 P6 | 账户 ID + 区间 | **必产** 5 Sheet xlsx(`google-analysis okki-render`;禁止 Markdown 表/手写 HTML/Agent 手写 xlsx) |
226
226
  | **P7** | **Google 账户 + CRM 询盘资料** 效果 | 见 §三魔法短语;**须有询盘附件/字段表**(≠ 口语「零询盘」) | 账户 + 分析月 + 询盘资料 | 8 Sheet xlsx |
227
227
  | **P3** | **多个广告账户** 消耗/CPA/零转化巡检 | 多账户对比、消耗排名、**转化成本监控**、**CPA**、**零转化**、口语「零询盘」(无 CRM)——见 **§零·D** | 媒体 + 账户列表或全量 + 区间 | 表格 / 话术 |
228
228
  | **P2** | **多账户余额** 续航预警 | 余额扫描、快没钱了、充值预警 | 媒体(可选账户子集) | 列表 |
@@ -263,7 +263,7 @@
263
263
  | 用户话术(含子串即可) | 工作流 | 备注 |
264
264
  | ------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | --------------------------------------------------------- |
265
265
  | **网址 / URL / 域名 / 官网 / 落地页** + **诊断 / 检测 / 监测 / 评估 / 体检 / 报告 / 符合投放要求 / 能不能投**(含「网络诊断」「网络检测」) | **P8** | 与 **§零** 同义;**优先 §零**;必 `website-diagnosis` CLI |
266
- | `OKKI 周报` / `okki 周报` / `使用 okki 周报模板` | **P6** | **不按 P4 默认 8 维**;**必产 xlsx**;「表格形式」= Excel,禁止对话 Markdown 表代替 |
266
+ | `OKKI 周报` / `okki 周报` / `使用 okki 周报模板` | **P6** | **不按 P4 默认 8 维**;写 JSON 后 `okki-render` 出 xlsx;「表格形式」= Excel,禁止对话 Markdown 表 / Agent 手写 xlsx |
267
267
  | `Google 账户询盘分析` / `分析 … Google 账号的询盘效果`(**且有询盘附件/字段表**) | **P7** | 严格 3 个月窗口;无 CRM → 改 **§零·D / P3** |
268
268
  | `转化成本监控` / `CPA 监控` / `谷歌ADS转化成本` / `低余额账户转化成本` | **P3(§零·D)** | `accounts-digest`;可加 `--max-cpa` |
269
269
  | `昨日零询盘` / `零询盘账户` / `0 转化` / `有消耗无转化`(**无 CRM 附件**) | **P3(§零·D)** | `--zero-conversions`;**不是 P7** |
@@ -12,7 +12,7 @@
12
12
  | P4 | Google 账户周期报告 | 默认 8 维周期汇总 |
13
13
  | P4-FB | Meta/Facebook 周期报告 | facebook-analysis 默认 5 维,默认 HTML |
14
14
  | P5 | 多账户多维度批处理 | google-analysis-batch,禁外层 for-loop |
15
- | P6 | OKKI 周报 | 固定模板多 Sheet xlsx |
15
+ | P6 | OKKI 周报 | 写 JSON → okki-render 出 5 Sheet xlsx |
16
16
  | P7 | Google 询盘分析 | 严格 3 个月 8 Sheet xlsx |
17
17
  | P8 | 网站诊断 | website-diagnosis,默认 HTML |
18
18
  | P9 | 战略市场分析 | market-analysis,默认 HTML |
@@ -135,8 +135,10 @@
135
135
  1. (可选)Read `subagent-orchestration.md` § P6 决定是否分阶段委派。
136
136
  2. 确认 `mediaCustomerId` 与 `--start` / `--end`。
137
137
  3. 同一 `--json-out` 目录执行模板命令组合:`stats`、`balance`、`google-analysis --sections overview,campaigns,keywords,search-terms,campaign-device,campaign-geo-matched`。
138
- 4. 脚本读盘 → 按 `okki-weekly-google-client.md` **默认客户话术**填数交付(用户另有话术/增删条目时从其自定义);**必须**产出 5 Sheet `.xlsx`(无 CLI 写表命令)。「表格形式 / 表格 / 各维度表格」= xlsx,**禁止**用对话 Markdown 表或手写 HTML/PDF 代替。
139
- - **产物**:磁盘上的 `.xlsx` 路径(缺文件 = 未完成)+ 对话内客户话术;**不**按 P4 默认 8 维追加;金额读 `*Yuan` 字段;对外话术数值须与 xlsx 一致。仅用户明确「只要话术 / 不要文件」时才省略 xlsx。
138
+ 4. 脚本读盘 → 只写 `okki-weekly-report.json` 的 `meta` + `narrative`(5 Sheet 表末分析 + 账户 Sheet 固定 5 维数据复盘;表为空也须写)。
139
+ 5. `google-analysis okki-render --data ./okki-weekly-report.json --snapshot-dir ./snap-okki --out <xlsx>`。缺分析 / 缺 5 维复盘 / 缺 `campaign-device` 或 `campaign-geo-matched` 会拒绝出文件;按 stderr 补 JSON 后重跑。**禁止** Agent 手写 xlsx。
140
+ 6. 按 `okki-weekly-google-client.md` **默认客户话术**填数交付(用户另有话术/增删条目时从其自定义);数值与 xlsx 一致。
141
+ - **产物**:`okki-render` 写出的 `.xlsx` 路径(缺文件 = 未完成)+ 对话内客户话术;**不**按 P4 默认 8 维追加。仅用户明确「只要话术 / 不要文件」时才省略 xlsx。
140
142
 
141
143
  ---
142
144
 
@@ -10,7 +10,7 @@
10
10
  ## 安装 CLI
11
11
 
12
12
  ```bash
13
- npm install -g siluzan-tso-cli
13
+ npm install -g siluzan-tso-cli@beta
14
14
  ```
15
15
 
16
16
  ---
@@ -64,7 +64,7 @@ siluzan-tso config set --api-key <Key> # 或 config 直接写入
64
64
  siluzan-tso config set --token <Token> # 备用:设置 JWT Token
65
65
  ```
66
66
 
67
- API Key 获取入口:`https://www.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
67
+ API Key 获取入口:`https://www-ci.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
68
68
 
69
69
  ```bash
70
70
  # 第 1 步:让用户报出手机号后,立刻发码(命令立即返回,不会等待输入)
@@ -127,9 +127,9 @@ siluzan-tso config show
127
127
 
128
128
  ```
129
129
  构建环境 : production
130
- apiBaseUrl : https://tso-api.siluzan.com
131
- googleApiUrl : https://googleapi.mysiluzan.com
132
- webUrl : https://www.siluzan.com
130
+ apiBaseUrl : https://tso-api-ci.siluzan.com
131
+ googleApiUrl : https://googleapi-ci.mysiluzan.com
132
+ webUrl : https://www-ci.siluzan.com
133
133
  apiKey : abcd****1234
134
134
  ```
135
135
 
@@ -38,7 +38,7 @@
38
38
  | 单次 `list-accounts -k`、P1 三步拉数、`-h` 查参 | **主会话** | — | 为查一个账户开子会话 |
39
39
  | `balance-scan` / `accounts-digest` 单命令 | **主会话** | — | 外层 for-loop 逐账户 |
40
40
  | 预计 CLI **>2 分钟** 或 stderr/stdout 很长 | **委派** | 内置 **Bash** 或 Task + `snippets/handoff-*.md` 拉数段 | 在主会话逐行读日志 |
41
- | **P6 OKKI**:拉数 → 写 xlsx(两阶段) | **委派** | 阶段 1:Bash/Task 拉数;阶段 2:Task 只读 snap 写脚本 | 子会话做写操作确认 |
41
+ | **P6 OKKI**:拉数 → 写 JSON → okki-render(两阶段) | **委派** | 阶段 1:Bash/Task 拉数;阶段 2:Task 只读 snap 写叙事 JSON 并跑 `okki-render` | 子会话做写操作确认 |
42
42
  | **P7 询盘**:`m1`/`m2`/`m3` 三月拉数 | **并行委派** | 3× Task(`handoff-p7-inquiry.md` 子目录变体) | 3× 主会话顺序跑 |
43
43
  | **P5** `google-analysis-batch run` 全量 | **主会话或单次 Bash** | **一次** batch;CLI 内置并发 | per-account 子会话调 API |
44
44
  | **P5** batch **完成后** 按账户聚合 | **可选并行** | N× Task,只读 `results/<accountId>/` | 子会话 `run` 新 batch |
@@ -106,8 +106,8 @@ summary: <1-3 句中文,无业务数字除非来自 manifest>
106
106
 
107
107
  1. 主 Agent:确认账户与日期区间。
108
108
  2. **决策**:拉数阶段若日志长 → Bash/Task + `handoff-p6-okki.md` §拉数;否则主会话执行模板 §拉数命令。
109
- 3. **决策**:写 xlsx 阶段 → Task handoff(只读 `snapDir`,先 outline 后 JSON,见 `references/core/tips.md`);或主会话若上下文充足。
110
- 4. 主 Agent:合并交付 **xlsx 路径** + 客户话术;金额与 ID 与 manifest 一致。**没有 `.xlsx` 不得收口**(用户明确只要话术除外)。
109
+ 3. **决策**:写叙事 JSON + `okki-render` → Task handoff(只读 `snapDir`,先 outline 后 JSON,见 `references/core/tips.md`);或主会话若上下文充足。**禁止** Agent 手写 xlsx。
110
+ 4. 主 Agent:合并交付 **xlsx 路径**(须来自 `okki-render`)+ 客户话术;金额与 ID 与 manifest 一致。**没有 `.xlsx` 不得收口**(用户明确只要话术除外)。
111
111
 
112
112
  ### P5 · 多账户多维度
113
113
 
@@ -6,7 +6,7 @@
6
6
  siluzan-tso config show # 取 webUrl
7
7
  ```
8
8
 
9
- 首页地址:`https://www.siluzan.com/v3/foreign_trade/tso/home`
9
+ 首页地址:`https://www-ci.siluzan.com/v3/foreign_trade/tso/home`
10
10
 
11
11
  ---
12
12
 
@@ -25,7 +25,7 @@ siluzan-tso config show # 取 webUrl
25
25
 
26
26
  ## 推荐话术
27
27
 
28
- 1. **「和首页一样的总览」** → 打开 `https://www.siluzan.com/v3/foreign_trade/tso/home`。
28
+ 1. **「和首页一样的总览」** → 打开 `https://www-ci.siluzan.com/v3/foreign_trade/tso/home`。
29
29
  2. **「某个 Google 账户昨天花了多少」** → `list-accounts -m Google` + `stats -m Google -a <id>`。
30
30
  3. **「有待充值账户」** → 说明聚合数据在首页;CLI 可 `list-accounts` + `balance` 逐户排查,或引导充值页。
31
31
 
@@ -33,7 +33,7 @@
33
33
  | `bing-period-report.md` / `.html` | **Bing(BingV2)分析报告(默认)**:四步流程 → `bing-analysis render` 出 HTML |
34
34
  | `yandex-period-report.md` / `.html` | **Yandex Direct 周期报告(默认)**:四步流程 → `yandex-analysis render` 出 HTML(样式对齐开发样例) |
35
35
  | `yandex-period-report-excel.md` | **仅用户要 Excel 时**:Agent 脚本写 xlsx;无 CLI excel 子命令 |
36
- | `okki-weekly-google-client.md` | **OKKI 周报**:Google 发客户固定话术 + 精简维度 CLI;**默认必产 5 Sheet Excel**(「表格形式」= xlsx,禁止 Markdown/HTML 代替),见 `references/core/playbooks.md` P6 |
36
+ | `okki-weekly-google-client.md` | **OKKI 周报**:写 `okki-weekly-report.json` → `google-analysis okki-render` 出 5 Sheet Excel + 客户话术,见 `references/core/playbooks.md` P6 |
37
37
  | `google-inquiry-analysis.md` | **Google 询盘分析**:严格 3 个月 + 用户询盘 + 8 Sheet xlsx,见 `references/core/playbooks.md` P7 |
38
38
  | `website-diagnosis-report.md` / `.html` | **网站诊断**:终稿为 **HTML**(对齐 TSO `WebsiteAnalysisReport/v3`);配合 `website-diagnosis collect`,见 P8 |
39
39
 
@@ -84,7 +84,7 @@
84
84
  - **TikTok 周期报告**:产出 `tiktok-period-report.json`(见 `tiktok-period-report.md`,`meta` 可由 `--snapshot-dir` 自动合并)。
85
85
  - **Bing 周期报告**:产出 `bing-period-report.json`(见 `bing-period-report.md`,`meta`/`kpis` 可由 `--snapshot-dir` 自动合并)。
86
86
  - **Yandex 周期报告**:产出 `yandex-period-report.json`(见 `yandex-period-report.md`,`meta`/`kpis`/`tables` 可由 `--snapshot-dir` 自动合并)。
87
- - **OKKI(P6)/ 询盘(P7)**:Agent 脚本写 **多 Sheet `.xlsx`**(必产);对话 Markdown 表 / 手写 HTML **不能**代替终稿。
87
+ - **OKKI(P6)**:产出 `okki-weekly-report.json` 后走 `google-analysis okki-render` 出 **5 Sheet `.xlsx`**(必产);**询盘(P7)**仍由 Agent 脚本写 8 Sheet `.xlsx`。对话 Markdown 表 / 手写 HTML **不能**代替终稿。
88
88
 
89
89
  ### 步骤 5b:生成终稿(按媒体与格式)
90
90
 
@@ -97,7 +97,7 @@
97
97
  | **Bing 周期报告** | `bing-analysis render` → **HTML**(必做) | Agent 脚本写 xlsx;**不**默认 `render` |
98
98
  | **Yandex 周期报告** | `yandex-analysis render` → **HTML**(必做) | Agent 脚本按 `yandex-period-report-excel.md` 写 xlsx;**不**默认 `render` |
99
99
  | **Google 诊断** | 按 `report-template*.html` 写 HTML(默认 `report-template.html`) | 同左;用户要 Excel 时 Agent 脚本写 xlsx |
100
- | **OKKI 周报(P6)** | **必产 5 Sheet `.xlsx`**(Agent 脚本;「表格形式」= xlsx) | 同左;仅用户明确「只要话术 / 不要文件」才省略 |
100
+ | **OKKI 周报(P6)** | **必产 5 Sheet `.xlsx`**(`google-analysis okki-render`;「表格形式」= xlsx) | 同左;仅用户明确「只要话术 / 不要文件」才省略 |
101
101
  | **Google 询盘(P7)** | **必产 8 Sheet `.xlsx`**(Agent 脚本) | 同左 |
102
102
  | **网站诊断** | `website-diagnosis render` → HTML | — |
103
103
 
@@ -125,7 +125,7 @@
125
125
  | 用户措辞 | 映射 |
126
126
  | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
127
127
  | 月报、周报、投放总结、效果回顾 | 周期分析 → 对应媒体 `*-period-report.md` |
128
- | **使用 okki 周报模板 / OKKI 周报 / okki 周报**(Google + 区间;含「表格形式」) | **固定话术 + 必产 5 Sheet `.xlsx`** → `okki-weekly-google-client.md`(见 SKILL **P6**);「表格形式 / 表格 / 各维度表格」= Excel,**禁止**对话 Markdown 表或手写 HTML 代替;Excel **仅**由 Agent 脚本生成,**无** CLI 内置写表子命令 |
128
+ | **使用 okki 周报模板 / OKKI 周报 / okki 周报**(Google + 区间;含「表格形式」) | **固定话术 + 必产 5 Sheet `.xlsx`** → `okki-weekly-google-client.md`(见 SKILL **P6**);终稿必须 `google-analysis okki-render`;「表格形式」= Excel,**禁止**对话 Markdown 表 / 手写 HTML / Agent 手写 xlsx |
129
129
  | **Goog账户询盘分析 / Google 账户询盘分析 / 分析XXX Google账号的询盘效果 / 我给你询盘信息分析Google账号XXX效果**(或含「询盘 + 账户 + Google」三要素) | **询盘 + 账户合并分析 + 严格 3 个月 + 8 Sheet xlsx** → `google-inquiry-analysis.md`(见 SKILL **P7**);询盘资料用户上传任意载体,宿主 Agent 解析落盘 `inquiries.json`,xlsx **仅**由 Agent 脚本生成 |
130
130
  | 健康检查、诊断、账户分析 | 诊断 → `google-account-diagnosis-report.md`(Google)或周期型降级 |
131
131
  | 对比、汇报、给客户看 | 以周期型为骨架,简化版本 |
@@ -85,7 +85,7 @@ sheet.setColWidths([20, 60]); // 字符数,两列型表格:标签列窄、
85
85
  | `google-period-report-excel.md` | 本文件 | `google` |
86
86
  | `yandex-period-report-excel.md` | 本文件 | `yandex` |
87
87
  | `stats-daily-excel.md` | 本文件 | 按 `-m` 媒体参数对应色 |
88
- | `okki-weekly-google-client.md` | 本文件(5 Sheet 固定版式) | `google` |
88
+ | `okki-weekly-google-client.md` | **不用本套件**;走 `google-analysis okki-render` 锁死 5 Sheet | `google` |
89
89
  | `google-inquiry-analysis.md` | 本文件(8 Sheet 固定版式) | `google` |
90
90
 
91
91
  **注意**:各模板文件里规定的 Sheet 名 / 列名 / 数据口径(业务内容)以各自 `*.md` 为准,本文件只管「怎么好看」,不改「写什么」。
@@ -62,6 +62,7 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
62
62
 
63
63
  | 维度 | ❌ 禁止猜 | ✅ outline 真实字段 |
64
64
  | ----------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
65
+ | `overview` | `currentPeriod.activeDays`、`previousPeriod.activeDays`、`currentPeriod.averageDailyCost` | `record.activeDays`、`record.averageDailyCost`(只在 **record 根**;period 块没有。上期这两字段接口不返回;要环比另拉上期 `daily-metrics` 数 `spend>0` 天数) |
65
66
  | `keywords` | `keywordText`、`status`、`matchType`(单独作展示列) | `keyword`、`userStatus`、`keywordMatchTypeZh`(或 `keywordMatchType`) |
66
67
  | `search-terms` | `query` | `searchTermText`;匹配类型用 `matchTypeZh`;状态用 `queryTargetingStatusZh` |
67
68
  | `geographic` | `geoName`、`countryCriterionIdName` | `countryOrRegion`、`countryNameZh`、`countryCode` |
@@ -117,6 +118,6 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
117
118
  ## 相关文档
118
119
 
119
120
  - `google-period-report.md` — 默认维度与可选追加
120
- - `okki-weekly-google-client.md` — OKKI 固定 5 Sheet(P6)
121
+ - `okki-weekly-google-client.md` — OKKI 固定 5 Sheet(P6,`google-analysis okki-render`)
121
122
  - `references/core/tips.md` — 摘要 → outline → 脚本
122
123
  - `references/core/playbooks.md` — P4 步骤卡片
@@ -33,7 +33,7 @@ siluzan-tso google-analysis render \
33
33
  `google-period-report.json` 顶层结构:
34
34
 
35
35
  - `meta`:`accountId`(必填)/ `accountName` / `currency` / `startDate` / `endDate`;可省略由 `--snapshot-dir` 从 `overview` + manifest 自动合并。
36
- - `kpis`:账户级 KPI(消耗/展示/点击/转化/CTR/CPC/CPA,含可选 `previousPeriod` 环比);Agent 可省略,但 **render 合并后** `cost`/`impressions`/`clicks` 至少一项须为有效数字,否则拒绝出 HTML(避免执行摘要卡片全「—」)。本期 KPI 由 CLI 优先对 `campaigns` 全系列累加并重算比率;无 campaigns 时回退 `overview.currentPeriod`,再回退 `dimension-summary`。环比仍来自 `overview.previousPeriod`。
36
+ - `kpis`:账户级 KPI(消耗/展示/点击/转化/CTR/CPC/CPA,含可选 `previousPeriod` 环比;另含 `activeDays` / `averageDailyCost`);Agent 可省略,但 **render 合并后** `cost`/`impressions`/`clicks` 至少一项须为有效数字,否则拒绝出 HTML(避免执行摘要卡片全「—」)。本期 KPI 由 CLI 优先对 `campaigns` 全系列累加并重算比率;无 campaigns 时回退 `overview.currentPeriod`,再回退 `dimension-summary`。`activeDays` / `averageDailyCost` 来自 `overview.record` 根(**不是** `currentPeriod`);环比仍来自 `overview.previousPeriod`(上期无活跃天数,不编造)。
37
37
  - `charts.dailyTrend`:每日趋势(`dates`/`cost`/`conversions`/`cpa`);可省略由 `daily-metrics` 自动合并。
38
38
  - `tables.{dimensionSummary,campaigns,devices,geographic,keywords}`:对应 §3~§7 表格数据;可省略由同名 `google-analysis` section 自动合并。
39
39
  - `narrative`(**Agent 必填,唯一由 Agent 撰写的内容**):
@@ -6,24 +6,24 @@
6
6
  > **媒体**:当前模板仅规范 **Google**(`mediaCustomerId`)。其他媒体用各自 `*-period-report.md`。
7
7
  > **Excel 版式基准**:与运营样表《**数据复盘分析**》类 xlsx 对齐(如 `2025.12数据复盘分析.xlsx`);工作簿 5 个 Sheet、顺序与表头以下文规范为准。
8
8
  >
9
- > **默认交付(硬性,缺文件 = 任务未完成)**:磁盘上的 **5 Sheet `.xlsx`** + 对话内客户话术。
9
+ > **默认交付(硬性,缺文件 = 任务未完成)**:磁盘上的 **5 Sheet `.xlsx`**(由 `google-analysis okki-render` 生成)+ 对话内客户话术。
10
10
  > 「表格形式 / 表格 / 各维度表格 / 表 / 做成表」= **Excel `.xlsx`**,**不是**对话 Markdown 表,**不是**手写 HTML/PDF。
11
11
  > 仅当用户明确「只要话术 / 不要文件 / 不要 Excel」时才省略 xlsx。
12
- > **禁止**:用对话 Markdown 表、手写 HTML、PDF 代替 `.xlsx`;禁止假设存在 CLI `excel` 子命令。
12
+ > **禁止**:用对话 Markdown 表、手写 HTML、PDF 代替 `.xlsx`;**禁止** Agent 手写 / 脚本写 xlsx。
13
13
 
14
14
  ## Contents
15
15
 
16
16
  - 须先确认
17
- - 架构约定 · Excel 由谁生成
17
+ - 标准四步流程(拉数 → 写 JSON → okki-render)
18
18
  - 拉数(一次目录)
19
- - xlsx 版式规范
19
+ - xlsx 版式规范(由 CLI 锁死)
20
20
  - 对外客户话术(默认结构,填数来自 JSON)
21
21
  - 复盘小结(Excel「数据复盘」区块 / 对内补充)
22
22
  - 与 `google-period-report.md` 的差异
23
23
 
24
24
  ---
25
25
 
26
- 识别到上述意图时:**不要**再走 `google-period-report.md` 的「默认 8 维 + 追问追加」流程;按本文**固定维度 + 默认客户话术(可用户自定义)+ 5 Sheet `.xlsx`** 交付(数据全部来自 CLI 落盘 JSON,见 `references/analytics/account-analytics.md`)。**先写 xlsx 再发话术**;没有 `.xlsx` 路径不得收口。
26
+ 识别到上述意图时:**不要**再走 `google-period-report.md` 的「默认 8 维 + 追问追加」流程;按本文**固定维度 + 默认客户话术(可用户自定义)+ `okki-render` 出 5 Sheet `.xlsx`** 交付。**先 `okki-render` 再发话术**;没有 `.xlsx` 路径不得收口。
27
27
 
28
28
  ---
29
29
 
@@ -33,17 +33,35 @@
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`(必产)**。「表格形式」一律当 Excel。仅用户明确只要可复制话术、不要文件时,才省略 xlsx。
36
+ 5. **交付**:默认 **客户话术 + 5 Sheet `.xlsx`(必产,由 `okki-render` 写出)**。「表格形式」一律当 Excel。仅用户明确只要可复制话术、不要文件时,才省略 xlsx。
37
37
 
38
38
  ---
39
39
 
40
- ## 架构约定 · Excel 由谁生成
40
+ ## 标准四步流程(拉数 → 写 JSON → okki-render)
41
41
 
42
- - **`siluzan-tso` 不提供**「一键生成 OKKI Excel」的子命令,**也不要**在 CLI 里新增。
43
- - **默认必产 Excel**:由 **Agent(含 WorkBuddy 编排)** 在下列 CLI **`--json-out` 落盘后**,自行编写 **Node.js / Python** 脚本(如 `exceljs`、`xlsx`、`openpyxl`)读取 JSON → 写 `.xlsx`。没有写出 `.xlsx` = 未完成。
44
- - **数值一律来自落盘 JSON,禁止在脚本里写死业务数字。**
45
- - **所有 ID 列写字符串(文本)**,禁止 Excel 数字类型(防科学计数法);见 `references/core/agent-conventions.md`。
46
- - **样式(必须)**:`import` `report-templates/excel-style-kit.mjs`,用 `createExcelWorkbook({ accent: "google" })` + `titleBar`/`sectionBar`/`tableHeader`/`dataRow`/`noteRow` 组件搭版面(`noteRow` 用于「分析」「数据复盘」文字块),**禁止**裸写无样式单元格。规范见 `report-templates/excel-style-guide.md`。
42
+ | 步骤 | 执行者 | 动作 |
43
+ | --- | --- | --- |
44
+ | **1. 拉数** | Agent 调 CLI | 下方固定命令组合,同一 `--json-out` 目录 |
45
+ | **2. 分析** | Agent | 用 **node/python 脚本**读落盘 JSON(先 outline 再 JSON),完成筛选/聚合/洞察 |
46
+ | **3. 写 JSON** | Agent | 按 `assets/okki-weekly-report.schema.json` 撰写 `okki-weekly-report.json`:**只写 `meta` + `narrative`**;表格留给步骤 4 合并 |
47
+ | **4. 渲染 xlsx** | CLI | `google-analysis okki-render` — **校验 5 Sheet 表末分析 + 账户 Sheet 固定 5 维数据复盘**,缺项报错不生成文件;**禁止** Agent 手写 xlsx |
48
+
49
+ ```bash
50
+ siluzan-tso google-analysis okki-render \
51
+ --data ./okki-weekly-report.json \
52
+ --snapshot-dir ./snap-okki \
53
+ --out ./okki-weekly-report.xlsx
54
+ ```
55
+
56
+ `okki-weekly-report.json` 顶层结构:
57
+
58
+ - `meta`:`accountId`(必填)/ `accountName` / `currency` / `startDate` / `endDate`;日期可由 `--snapshot-dir` 补空。
59
+ - `narrative`(**Agent 必填,唯一由 Agent 撰写的内容**):
60
+ - `sheetAnalysis.{campaigns,keywords,searchTerms,devices,geo}`:每个 Sheet 各 `{summary[](≥1), suggestions[](≥1)}`。**表为空也必须写**(例如「本周期无搜索词,暂无加词/否词建议」)。
61
+ - `review.{account,keywords,searchTerms,devices,geo}`:账户 Sheet「数据复盘」固定 5 维,每维 `{overview, summary, suggestion}` 均非空。
62
+ - `tables` / `kpis`:Agent 可省略;**render 以快照覆盖**。设备/国家只认 `campaign-device` / `campaign-geo-matched`。
63
+
64
+ **禁止**:自己写 Node/Python 出 xlsx、用 Markdown 表代替、跳过 `okki-render`。`okki-render` 失败时按 stderr 缺项补 JSON 后重跑,不得改用手写表。
47
65
 
48
66
  ---
49
67
 
@@ -70,12 +88,13 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
70
88
  - `balance`:**当前**余额(非历史快照),话术写「截至查询时点」。
71
89
  - 「设备」「国家」两 Sheet **必须**用 **`campaign-device` / `campaign-geo-matched`**(按系列/组拆行),**不要**用账户级 `devices` / `geographic`,也**不要**用 `campaign-geo`(定向地理位置,与 OKKI「地理位置报告」口径不一致)。落盘文件名为 `campaign-device-<id>.json`、`campaign-geo-matched-<id>.json`。跨系列汇总在脚本中做。
72
90
  - 可选:`campaign-geo-matched` 支持 `--cost-greater` / `--click-greater` / `--conversions-greater`(见 `references/analytics/account-analytics.md`)。
73
- - TopN、排序、汇总均在脚本内对 JSON 完成,禁止心算。
74
- - 写脚本前先读各 `<section>-<id>.outline.txt` 再读 `.json`。
91
+ - TopN、占比、洞察在写 `narrative` 前由脚本对 JSON 完成,禁止心算。
92
+ - 写 JSON 前先读各 `<section>-<id>.outline.txt` 再读 `.json`。
93
+ - 合计行、CTR/CPA、日期标题、Sheet 列顺序由 `okki-render` 计算,Agent 不要往 JSON 里填表格行。
75
94
 
76
95
  ---
77
96
 
78
- ## xlsx 版式规范
97
+ ## xlsx 版式规范(由 CLI 锁死,Agent 不必重写)
79
98
 
80
99
  工作簿 → Sheet 名(须完全一致)→ 版式。**不**单独建「广告系列」Sheet(系列表在 `账户报告` 内)。状态枚举若为英文须转中文。
81
100
 
@@ -99,7 +118,7 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
99
118
 
100
119
  | 顺序 | Sheet 名 | 数据来源 |
101
120
  | ---: | ---------- | ------------------------------------------------------------------------------------ |
102
- | 1 | `账户报告` | `campaigns` + 复盘文案(stats/overview 汇总后 Agent 撰写) |
121
+ | 1 | `账户报告` | `campaigns` + `narrative.review`(5 维复盘,`okki-render` 写入) |
103
122
  | 2 | `关键词` | `keywords` |
104
123
  | 3 | `搜索词` | `search-terms` |
105
124
  | 4 | `设备` | **`campaign-device-*.json`**(按系列/组拆行) |
@@ -148,7 +167,7 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
148
167
  总结:
149
168
  建议:
150
169
 
151
- 文案由 Agent 据 JSON 撰写,**不得编造**表中不存在的数字。
170
+ 文案写入 `narrative.review`(每维 `overview` / `summary` / `suggestion`),由 `okki-render` 画到账户 Sheet 底部;缺任一维会拒绝出文件。**不得编造**表中不存在的数字。
152
171
 
153
172
  ---
154
173
 
@@ -265,5 +284,5 @@ siluzan-tso google-analysis -a <mediaCustomerId> --start <S> --end <E> --json-ou
265
284
  | 项 | `google-period-report.md` | 本文 OKKI 周报 |
266
285
  | -------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- |
267
286
  | 默认维度 | 8 维 + 主动追问追加 | **固定** `overview,campaigns,keywords,search-terms,campaign-device,campaign-geo-matched` + `stats` + `balance` |
268
- | 输出形态 | 长文分析报告(默认 HTML) | **必产** 5 Sheet `.xlsx` + 客户话术;「表格形式」= Excel;**禁止**对话 Markdown 表 / 手写 HTML 代替 |
287
+ | 输出形态 | 长文分析报告(默认 HTML,`google-analysis render`) | **必产** 5 Sheet `.xlsx`(`google-analysis okki-render`)+ 客户话术;「表格形式」= Excel;**禁止**对话 Markdown 表 / 手写 HTML / Agent 手写 xlsx |
269
288
  | 典型用户 | 内部分析 | **发客户**的同步简报 |