siluzan-tso-cli 1.1.37-beta.6 → 1.1.37-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -51,7 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
51
51
  siluzan-tso init --force # 强制覆盖已存在文件
52
52
  ```
53
53
 
54
- > **注意**:当前为测试版(1.1.37-beta.6),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.37-beta.7),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.37-beta.6",
4
- "publishedAt": 1784087019185
3
+ "version": "1.1.37-beta.7",
4
+ "publishedAt": 1784096208901
5
5
  }
@@ -98,6 +98,8 @@
98
98
 
99
99
  **报告/Excel 全流程走本 Skill**:按工作流卡片与 `report-templates/*.md` 拉数、落盘、脚本转换;**禁止**加载宿主第三方 xlsx/Excel Skill 代劳(不知 TSO 字段口径与账户核验)。
100
100
 
101
+ **写 Excel 时所有 ID 必须是文本(字符串),禁止数字类型**:含 `mediaCustomerId` / `entityId` / `accountId` / `campaignId` / `adGroupId` / `keywordId` / `criterionId` / geo `locationId` 及一切以 `Id`/`ID`/`id` 结尾的标识列。写入前一律 `String(id)`;`exceljs` 设 `numFmt: '@'`(文本),`openpyxl` 写字符串且勿让推断成 number。**禁止**写成 JSON number / Excel 数值单元格(会科学计数法或丢精度,如 `2.77E+09`)。金额、次数、比率等度量字段仍用数字类型。
102
+
101
103
  **中间结果一律落盘**:跨步骤数据不靠对话记忆;Windows 避免管道传 JSON,优先 `--json-out` + `node -e` 读文件。
102
104
 
103
105
  ---
@@ -175,7 +177,7 @@
175
177
 
176
178
  **A · 币种**:首行含 `统计区间:…(货币:CNY|USD)`;全文符号与 `currencyCode` 一致(CNY=¥、USD=$,未混用);与当次 `list-accounts -k` 结果相同;多账户分币种分表、无跨币种「总计」行。
177
179
 
178
- **B · 结构完整**(对照当次 `report-templates/*.md`):模板要求的每一章/Sheet 都存在;无整章空白(缺数据章节写 `[ 数据不可用:… ]`,禁止编造数字填坑);优化建议独立成节、引用当次数字(Meta:4 条建议各 ≥150 字 + 7 维补充;Google 诊断:每模块除表格外有「分析」+「建议」);Excel 的表头列须能在当次 `*.outline.txt` 找到对应字段、产物内账户 ID = 用户当轮给出的 `mediaCustomerId`。
180
+ **B · 结构完整**(对照当次 `report-templates/*.md`):模板要求的每一章/Sheet 都存在;无整章空白(缺数据章节写 `[ 数据不可用:… ]`,禁止编造数字填坑);优化建议独立成节、引用当次数字(Meta:4 条建议各 ≥150 字 + 7 维补充;Google 诊断:每模块除表格外有「分析」+「建议」);Excel 的表头列须能在当次 `*.outline.txt` 找到对应字段、产物内账户 ID = 用户当轮给出的 `mediaCustomerId`;**Excel 内全部 ID 列为文本**(见上文「写 Excel 时所有 ID 必须是文本」)。
179
181
 
180
182
  **C · 数字可信**(抽样,不读大 JSON):总消耗/CPA 数量级与生成过程中脚本 stdout 打印的汇总一致(若无,补跑一次极小 `node -e` 只打印 totals);账户 ID、区间与用户需求一致;无「示例账户」「占位 123456」等模板残留;表格行数符合预期(如 P3 每个 `-a` ID 占一行)。
181
183
 
@@ -50,6 +50,11 @@
50
50
  2. Read 本次每个 section 的 **`*.outline.txt`**(见 `google-period-report-excel.md` §执行门禁)。
51
51
  3. **禁止** `cat|json.tool|head` 或 Read 业务 `*.json` 探字段;**禁止**加载宿主第三方 xlsx Skill。
52
52
 
53
+ ### 写 xlsx 硬规则(全报告类型共用)
54
+
55
+ - **所有 ID 列必须写成字符串(文本)**,禁止 Excel 数字类型:`mediaCustomerId` / `campaignId` / `adGroupId` / `keywordId` / geo id 等一律 `String(...)`;`exceljs` 用 `numFmt: '@'`,`openpyxl` 写 str。详见 `references/core/agent-conventions.md`。
56
+ - 金额、次数、比率等度量字段仍用数字类型。
57
+
53
58
  ### 步骤 4:拉取数据
54
59
 
55
60
  - **`google-analysis` / `facebook-analysis` / `tiktok-analysis` / `bing-analysis` / `report …` 账户分析子命令**:统一 **`--json-out <目录>`** 落盘,再由脚本读 **`manifest-<accountId>.json` / `report-manifest-<accountId>.json`**(清单文件名见 stdout 摘要的 `manifestFile`)与各 **`<section>-<accountId>.json`**(见 `references/analytics/account-analytics.md`)。
@@ -187,6 +187,7 @@ Sheet 5 整段系列明细读:`./snap-inquiry/campaigns-<accountId>_<S>-<E>.js
187
187
 
188
188
  - **金额、CPL / CPA / CPC / 平均费用**:保留 **2 位小数**,写明货币代码(如 `¥123.45 CNY`)。
189
189
  - **点击率 / 转化率 / 互动率**(`ctr` / `conversionRate` / `interactionRate`):CLI 已归一为 **0~1 小数**(schemaVersion ≥ 2),写入 Excel 时**直接写 0~1**(与运营样表对齐,Excel 单元格用百分比格式自动渲染)。话术 `x%` 用 `(v * 100).toFixed(2) + "%"`。
190
+ - **所有 ID**:账户 / 系列 / 组 / 关键词 / 地域等 id **一律字符串(文本单元格)**,`String(id)` + `numFmt: '@'`(或 openpyxl 写 str);**禁止**数字类型(防科学计数法)。见 `agent-conventions.md`。
190
191
  - **空值**:`interactions === 0` 时「平均费用」「互动率」填 `—`,**禁止**除零。
191
192
 
192
193
  ### 分析输出区位置(**全局硬约束**)
@@ -101,7 +101,8 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
101
101
  2. **首行或 R2** 含统计区间 + 币种(与 `list-accounts` 一致)。
102
102
  3. **列表 Sheet**:R1 为表头;列名与 outline 字段含义对应,不造 outline 中不存在的列。
103
103
  4. **数值**:金额 2 位小数;`ctr`/`conversionRate` 按上文 0~1 口径;禁止对 JSON 比率再 ÷100。
104
- 5. 某维度拉数失败:该 Sheet `[ 数据不可用:<原因> ]`,禁止留空或编造。
104
+ 5. **所有 ID 列写字符串(文本)**:账户/系列/组/关键词/地域等 id 用 `String(id)` + 文本格式(`exceljs` `numFmt: '@'`);**禁止**写成数字(防科学计数法/丢精度)。见 `agent-conventions.md`。
105
+ 6. 某维度拉数失败:该 Sheet 写 `[ 数据不可用:<原因> ]`,禁止留空或编造。
105
106
 
106
107
  有 OKKI 固定话术时改走 **P6**(`okki-weekly-google-client.md`),**不**用本文。
107
108
 
@@ -114,6 +115,7 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
114
115
  - [ ] `google-analysis` 的 `accountId`(stdout 摘要)= 用户要求的 `mediaCustomerId`
115
116
  - [ ] 每个 Sheet 列均能在对应 `*.outline.txt` 中找到字段源
116
117
  - [ ] 脚本 stdout 打印的 `itemCount` 与 Excel 数据行数一致(±合计行)
118
+ - [ ] 全部 ID 列为文本(非数字类型 / 无科学计数法)
117
119
  - [ ] 未使用第三方 xlsx Skill 替代本 Skill 拉数与字段口径
118
120
 
119
121
  ---
@@ -5,6 +5,8 @@
5
5
 
6
6
  > 对照业务交付物:`无锡顺晟Facebook4月报告.xlsx`(5 个 Sheet)。
7
7
  > Excel 流程:CLI 拉数 → Agent 分析并写 `meta-period-report.json` → **Agent 脚本**按本规格写 `.xlsx`(**无** CLI 内置 excel 子命令)。
8
+ >
9
+ > **ID 列硬规则**:账户 / 系列 / 广告组 / 广告等 id **一律写成字符串(文本)**,禁止 Excel 数字类型;见 `references/core/agent-conventions.md`。
8
10
 
9
11
  ---
10
12
 
@@ -24,6 +24,7 @@
24
24
  - **`siluzan-tso` 不提供**「一键生成 OKKI Excel」的子命令,**也不要**在 CLI 里新增。
25
25
  - 需交付 Excel 时:由 **Agent(含 WorkBuddy 编排)** 在下列 CLI **`--json-out` 落盘后**,自行编写 **Node.js / Python** 脚本(如 `exceljs`、`xlsx`、`openpyxl`)读取 JSON → 写 `.xlsx`。
26
26
  - **数值一律来自落盘 JSON,禁止在脚本里写死业务数字。**
27
+ - **所有 ID 列写字符串(文本)**,禁止 Excel 数字类型(防科学计数法);见 `references/core/agent-conventions.md`。
27
28
 
28
29
  ---
29
30
 
@@ -50,6 +50,11 @@
50
50
  2. Read 本次每个 section 的 **`*.outline.txt`**(见 `google-period-report-excel.md` §执行门禁)。
51
51
  3. **禁止** `cat|json.tool|head` 或 Read 业务 `*.json` 探字段;**禁止**加载宿主第三方 xlsx Skill。
52
52
 
53
+ ### 写 xlsx 硬规则(全报告类型共用)
54
+
55
+ - **所有 ID 列必须写成字符串(文本)**,禁止 Excel 数字类型:`mediaCustomerId` / `campaignId` / `adGroupId` / `keywordId` / geo id 等一律 `String(...)`;`exceljs` 用 `numFmt: '@'`,`openpyxl` 写 str。详见 `references/core/agent-conventions.md`。
56
+ - 金额、次数、比率等度量字段仍用数字类型。
57
+
53
58
  ### 步骤 4:拉取数据
54
59
 
55
60
  - **`google-analysis` / `facebook-analysis` / `tiktok-analysis` / `bing-analysis` / `report …` 账户分析子命令**:统一 **`--json-out <目录>`** 落盘,再由脚本读 **`manifest-<accountId>.json` / `report-manifest-<accountId>.json`**(清单文件名见 stdout 摘要的 `manifestFile`)与各 **`<section>-<accountId>.json`**(见 `references/analytics/account-analytics.md`)。
@@ -187,6 +187,7 @@ Sheet 5 整段系列明细读:`./snap-inquiry/campaigns-<accountId>_<S>-<E>.js
187
187
 
188
188
  - **金额、CPL / CPA / CPC / 平均费用**:保留 **2 位小数**,写明货币代码(如 `¥123.45 CNY`)。
189
189
  - **点击率 / 转化率 / 互动率**(`ctr` / `conversionRate` / `interactionRate`):CLI 已归一为 **0~1 小数**(schemaVersion ≥ 2),写入 Excel 时**直接写 0~1**(与运营样表对齐,Excel 单元格用百分比格式自动渲染)。话术 `x%` 用 `(v * 100).toFixed(2) + "%"`。
190
+ - **所有 ID**:账户 / 系列 / 组 / 关键词 / 地域等 id **一律字符串(文本单元格)**,`String(id)` + `numFmt: '@'`(或 openpyxl 写 str);**禁止**数字类型(防科学计数法)。见 `agent-conventions.md`。
190
191
  - **空值**:`interactions === 0` 时「平均费用」「互动率」填 `—`,**禁止**除零。
191
192
 
192
193
  ### 分析输出区位置(**全局硬约束**)
@@ -101,7 +101,8 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
101
101
  2. **首行或 R2** 含统计区间 + 币种(与 `list-accounts` 一致)。
102
102
  3. **列表 Sheet**:R1 为表头;列名与 outline 字段含义对应,不造 outline 中不存在的列。
103
103
  4. **数值**:金额 2 位小数;`ctr`/`conversionRate` 按上文 0~1 口径;禁止对 JSON 比率再 ÷100。
104
- 5. 某维度拉数失败:该 Sheet `[ 数据不可用:<原因> ]`,禁止留空或编造。
104
+ 5. **所有 ID 列写字符串(文本)**:账户/系列/组/关键词/地域等 id 用 `String(id)` + 文本格式(`exceljs` `numFmt: '@'`);**禁止**写成数字(防科学计数法/丢精度)。见 `agent-conventions.md`。
105
+ 6. 某维度拉数失败:该 Sheet 写 `[ 数据不可用:<原因> ]`,禁止留空或编造。
105
106
 
106
107
  有 OKKI 固定话术时改走 **P6**(`okki-weekly-google-client.md`),**不**用本文。
107
108
 
@@ -114,6 +115,7 @@ siluzan-tso google-analysis -a <id> --start <S> --end <E> --json-out ./snap-p4 \
114
115
  - [ ] `google-analysis` 的 `accountId`(stdout 摘要)= 用户要求的 `mediaCustomerId`
115
116
  - [ ] 每个 Sheet 列均能在对应 `*.outline.txt` 中找到字段源
116
117
  - [ ] 脚本 stdout 打印的 `itemCount` 与 Excel 数据行数一致(±合计行)
118
+ - [ ] 全部 ID 列为文本(非数字类型 / 无科学计数法)
117
119
  - [ ] 未使用第三方 xlsx Skill 替代本 Skill 拉数与字段口径
118
120
 
119
121
  ---
@@ -5,6 +5,8 @@
5
5
 
6
6
  > 对照业务交付物:`无锡顺晟Facebook4月报告.xlsx`(5 个 Sheet)。
7
7
  > Excel 流程:CLI 拉数 → Agent 分析并写 `meta-period-report.json` → **Agent 脚本**按本规格写 `.xlsx`(**无** CLI 内置 excel 子命令)。
8
+ >
9
+ > **ID 列硬规则**:账户 / 系列 / 广告组 / 广告等 id **一律写成字符串(文本)**,禁止 Excel 数字类型;见 `references/core/agent-conventions.md`。
8
10
 
9
11
  ---
10
12
 
@@ -24,6 +24,7 @@
24
24
  - **`siluzan-tso` 不提供**「一键生成 OKKI Excel」的子命令,**也不要**在 CLI 里新增。
25
25
  - 需交付 Excel 时:由 **Agent(含 WorkBuddy 编排)** 在下列 CLI **`--json-out` 落盘后**,自行编写 **Node.js / Python** 脚本(如 `exceljs`、`xlsx`、`openpyxl`)读取 JSON → 写 `.xlsx`。
26
26
  - **数值一律来自落盘 JSON,禁止在脚本里写死业务数字。**
27
+ - **所有 ID 列写字符串(文本)**,禁止 Excel 数字类型(防科学计数法);见 `references/core/agent-conventions.md`。
27
28
 
28
29
  ---
29
30
 
@@ -9,7 +9,7 @@ $ErrorActionPreference = 'Stop'
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  $PKG_NAME = 'siluzan-tso-cli'
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- $PKG_VERSION = '1.1.37-beta.6'
12
+ $PKG_VERSION = '1.1.37-beta.7'
13
13
  $CLI_BIN = 'siluzan-tso'
14
14
  $SKILL_LABEL = 'Siluzan TSO'
15
15
  $INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
@@ -9,7 +9,7 @@ set -euo pipefail
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  readonly PKG_NAME="siluzan-tso-cli"
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- readonly PKG_VERSION="1.1.37-beta.6"
12
+ readonly PKG_VERSION="1.1.37-beta.7"
13
13
  readonly CLI_BIN="siluzan-tso"
14
14
  readonly SKILL_LABEL="Siluzan TSO"
15
15
  readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-tso-cli",
3
- "version": "1.1.37-beta.6",
3
+ "version": "1.1.37-beta.7",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",