siluzan-tso-cli 1.1.48-beta.10 → 1.1.48-beta.12

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.48-beta.10),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.48-beta.12),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -133066,24 +133066,94 @@ function genderLabel(gender) {
133066
133066
  if (g === "female") return "female";
133067
133067
  return str(gender) || "unknown";
133068
133068
  }
133069
+ function enumKey(raw) {
133070
+ return raw.toLowerCase().replace(/[\s_\-./]+/g, "");
133071
+ }
133072
+ var RESULT_TYPE_ZH = {
133073
+ linkclick: "\u94FE\u63A5\u70B9\u51FB",
133074
+ landingpageview: "\u843D\u5730\u9875\u6D4F\u89C8",
133075
+ pageengagement: "\u516C\u5171\u4E3B\u9875\u4E92\u52A8",
133076
+ postengagement: "\u5E16\u5B50\u4E92\u52A8",
133077
+ videoview: "\u89C6\u9891\u64AD\u653E",
133078
+ purchase: "\u8D2D\u7269",
133079
+ addtocart: "\u52A0\u5165\u8D2D\u7269\u8F66",
133080
+ initiatecheckout: "\u53D1\u8D77\u7ED3\u8D26",
133081
+ completeregistration: "\u5B8C\u6210\u6CE8\u518C",
133082
+ viewcontent: "\u67E5\u770B\u5185\u5BB9",
133083
+ appinstall: "\u5E94\u7528\u5B89\u88C5",
133084
+ mobileappinstall: "\u5E94\u7528\u5B89\u88C5"
133085
+ };
133086
+ var OBJECTIVE_ZH = {
133087
+ outcomeawareness: "\u77E5\u540D\u5EA6",
133088
+ outcomeengagement: "\u4E92\u52A8",
133089
+ outcomeleads: "\u6F5C\u5728\u5BA2\u6237",
133090
+ outcomesales: "\u9500\u91CF",
133091
+ outcometraffic: "\u6D41\u91CF",
133092
+ outcomeapppromotion: "\u5E94\u7528\u63A8\u5E7F",
133093
+ brandawareness: "\u54C1\u724C\u77E5\u540D\u5EA6",
133094
+ reach: "\u8986\u76D6\u4EBA\u6570",
133095
+ traffic: "\u6D41\u91CF",
133096
+ linkclicks: "\u94FE\u63A5\u70B9\u51FB",
133097
+ engagement: "\u4E92\u52A8",
133098
+ postengagement: "\u5E16\u5B50\u4E92\u52A8",
133099
+ leadgeneration: "\u6F5C\u5728\u5BA2\u6237",
133100
+ conversions: "\u8F6C\u5316",
133101
+ appinstalls: "\u5E94\u7528\u5B89\u88C5",
133102
+ videoviews: "\u89C6\u9891\u64AD\u653E",
133103
+ messages: "\u6D88\u606F",
133104
+ catalogsales: "\u76EE\u5F55\u9500\u552E"
133105
+ };
133069
133106
  function displayResultType(raw) {
133070
133107
  const v = str(raw);
133071
133108
  if (!v) return "";
133072
- const key = v.toLowerCase().replace(/[\s_]+/g, "");
133109
+ const key = enumKey(v);
133073
133110
  if (key === "lead" || key === "leads" || key.includes("leadgrouped") || key.includes("instantform") || key === "onsiteconversionleadgrouped") {
133074
133111
  return "\u6F5C\u5728\u5BA2\u6237\u4FE1\u606F\uFF08\u8868\u5355\uFF09\u91CF";
133075
133112
  }
133076
- return v;
133113
+ return RESULT_TYPE_ZH[key] ?? v;
133114
+ }
133115
+ function displayObjective(raw) {
133116
+ const v = str(raw);
133117
+ if (!v) return "";
133118
+ return OBJECTIVE_ZH[enumKey(v)] ?? v;
133077
133119
  }
133078
133120
  function displayAttribution(raw) {
133079
133121
  const v = str(raw);
133080
133122
  if (!v) return "";
133081
- const key = v.toLowerCase().replace(/[\s_\-/]/g, "");
133123
+ const key = enumKey(v);
133082
133124
  if (key === "multiple" || key === "7dclick" || key === "7dclick1dview" || key.includes("7dclick") || key.includes("7dayclick")) {
133083
133125
  return "\u70B9\u51FB\u540E 7 \u5929\u5185\u6216\u6D4F\u89C8\u540E 1 \u5929\u5185";
133084
133126
  }
133127
+ if (key === "1dclick1dview" || key === "1dclickor1dview") {
133128
+ return "\u70B9\u51FB\u540E 1 \u5929\u5185\u6216\u6D4F\u89C8\u540E 1 \u5929\u5185";
133129
+ }
133130
+ if (key === "1dclick") return "\u70B9\u51FB\u540E 1 \u5929\u5185";
133131
+ if (key === "1dview") return "\u6D4F\u89C8\u540E 1 \u5929\u5185";
133132
+ if (key === "7dview") return "\u6D4F\u89C8\u540E 7 \u5929\u5185";
133133
+ if (key === "28dclick") return "\u70B9\u51FB\u540E 28 \u5929\u5185";
133085
133134
  return v;
133086
133135
  }
133136
+ function localizeMetricLabels(row) {
133137
+ if (!row) return;
133138
+ if (row.resultType != null) row.resultType = displayResultType(row.resultType);
133139
+ if (row.attributionSetting != null) {
133140
+ row.attributionSetting = displayAttribution(row.attributionSetting);
133141
+ }
133142
+ if (row.objective != null) row.objective = displayObjective(row.objective);
133143
+ }
133144
+ function localizeFacebookReportLabels(payload) {
133145
+ localizeMetricLabels(payload.meta);
133146
+ localizeMetricLabels(payload.kpis);
133147
+ const tables = payload.tables;
133148
+ if (!tables) return payload;
133149
+ for (const rows of Object.values(tables)) {
133150
+ if (!Array.isArray(rows)) continue;
133151
+ for (const row of rows) {
133152
+ localizeMetricLabels(asRecord14(row));
133153
+ }
133154
+ }
133155
+ return payload;
133156
+ }
133087
133157
  function hasResults(row) {
133088
133158
  const n = num3(row.results);
133089
133159
  return n != null && n > 0;
@@ -133830,6 +133900,7 @@ async function runFacebookAnalysisRender(opts) {
133830
133900
  if (opts.snapshotDir?.trim()) {
133831
133901
  data = await mergeFacebookSnapshotIntoReport(data, path34.resolve(opts.snapshotDir));
133832
133902
  }
133903
+ localizeFacebookReportLabels(data);
133833
133904
  const contentCheck = validateMetaPeriodReportContent(data);
133834
133905
  if (!contentCheck.ok) {
133835
133906
  console.error(`
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.48-beta.10",
4
- "publishedAt": 1787817873729
3
+ "version": "1.1.48-beta.12",
4
+ "publishedAt": 1787911743922
5
5
  }
@@ -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.48-beta.10'
12
+ $PKG_VERSION = '1.1.48-beta.12'
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.48-beta.10"
12
+ readonly PKG_VERSION="1.1.48-beta.12"
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.48-beta.10",
3
+ "version": "1.1.48-beta.12",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",