siluzan-tso-cli 1.1.24-beta.3 → 1.1.24-beta.4

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.24-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
54
+ > **注意**:当前为测试版(1.1.24-beta.4),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
55
55
 
56
56
  | 助手 | 建议 `--ai` |
57
57
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -110647,6 +110647,10 @@ var VALID_CHANNEL_V2 = ["SEARCH", "DISPLAY", "VIDEO", "SHOPPING", "MULTI_CHANNEL
110647
110647
  var URL_REGEX = /^https?:\/\/.+/;
110648
110648
  var DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
110649
110649
  var PATH_SEGMENT_REGEX = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
110650
+ var RSA_MIN_HEADLINE_COUNT = 15;
110651
+ var RSA_MAX_HEADLINE_COUNT = 15;
110652
+ var RSA_MIN_DESCRIPTION_COUNT = 4;
110653
+ var RSA_MAX_DESCRIPTION_COUNT = 4;
110650
110654
  var RSA_PATH_BACKEND_HINT = "\u540E\u7AEF GoogleAdsAcctMgmtServiceProviderV2.BuildResponsiveSearchAd \u4F1A\u5C06 Path1 \u5199\u5165 Google Ads SDK\uFF1BJSON \u7F3A\u5B57\u6BB5\u6216\u4E3A null \u65F6\u53CD\u5E8F\u5217\u5316\u4E3A null\uFF0C\u89E6\u53D1 ArgumentNullException\uFF08Parameter 'value'\uFF09\uFF0C\u6574\u5305 BatchJob \u5931\u8D25";
110651
110655
  function pushErr2(errors, msg) {
110652
110656
  errors.push(msg);
@@ -110744,12 +110748,16 @@ function validateRsaAd(prefix, ad, errors, warnings, lengthViolations) {
110744
110748
  const descriptions = [d1, d2, ...moreD].filter(
110745
110749
  (x) => typeof x === "string" && x.length > 0
110746
110750
  );
110747
- if (headlines.length < 3) {
110748
- pushErr2(errors, `${prefix} \u6807\u9898\u81F3\u5C11 3 \u6761\uFF08headlinePart1/2/3 \u5FC5\u586B\uFF09\uFF0C\u5F53\u524D ${headlines.length} \u6761`);
110749
- } else if (headlines.length > 15) {
110750
- pushErr2(errors, `${prefix} \u6807\u9898\u6700\u591A 15 \u6761\uFF08\u542B AddtionalHeadlines\uFF09\uFF0C\u5F53\u524D ${headlines.length} \u6761`);
110751
- } else if (headlines.length < 12) {
110752
- pushWarn2(warnings, `${prefix} \u6807\u9898\u63A8\u8350 12\u201315 \u6761\uFF08\u5F53\u524D ${headlines.length} \u6761\uFF09\uFF0C\u66F4\u591A\u7EC4\u5408\u53EF\u63D0\u5347\u6295\u653E\u8868\u73B0`);
110751
+ if (headlines.length < RSA_MIN_HEADLINE_COUNT) {
110752
+ pushErr2(
110753
+ errors,
110754
+ `${prefix} \u6807\u9898\u81F3\u5C11 ${RSA_MIN_HEADLINE_COUNT} \u6761\uFF08headlinePart1/2/3 + AddtionalHeadlines\uFF0C\u987B\u5199\u6EE1\uFF09\uFF0C\u5F53\u524D ${headlines.length} \u6761`
110755
+ );
110756
+ } else if (headlines.length > RSA_MAX_HEADLINE_COUNT) {
110757
+ pushErr2(
110758
+ errors,
110759
+ `${prefix} \u6807\u9898\u6700\u591A ${RSA_MAX_HEADLINE_COUNT} \u6761\uFF08\u542B AddtionalHeadlines\uFF09\uFF0C\u5F53\u524D ${headlines.length} \u6761`
110760
+ );
110753
110761
  }
110754
110762
  const headlineFields = [
110755
110763
  "headlinePart1",
@@ -110776,15 +110784,16 @@ function validateRsaAd(prefix, ad, errors, warnings, lengthViolations) {
110776
110784
  );
110777
110785
  }
110778
110786
  }
110779
- if (descriptions.length < 2) {
110787
+ if (descriptions.length < RSA_MIN_DESCRIPTION_COUNT) {
110788
+ pushErr2(
110789
+ errors,
110790
+ `${prefix} \u63CF\u8FF0\u81F3\u5C11 ${RSA_MIN_DESCRIPTION_COUNT} \u6761\uFF08adDescription/adDescription2 + AddtionalAdDescriptions\uFF0C\u987B\u5199\u6EE1\uFF09\uFF0C\u5F53\u524D ${descriptions.length} \u6761`
110791
+ );
110792
+ } else if (descriptions.length > RSA_MAX_DESCRIPTION_COUNT) {
110780
110793
  pushErr2(
110781
110794
  errors,
110782
- `${prefix} \u63CF\u8FF0\u81F3\u5C11 2 \u6761\uFF08adDescription/adDescription2 \u5FC5\u586B\uFF09\uFF0C\u5F53\u524D ${descriptions.length} \u6761`
110795
+ `${prefix} \u63CF\u8FF0\u6700\u591A ${RSA_MAX_DESCRIPTION_COUNT} \u6761\uFF0C\u5F53\u524D ${descriptions.length} \u6761`
110783
110796
  );
110784
- } else if (descriptions.length > 4) {
110785
- pushErr2(errors, `${prefix} \u63CF\u8FF0\u6700\u591A 4 \u6761\uFF0C\u5F53\u524D ${descriptions.length} \u6761`);
110786
- } else if (descriptions.length < 4) {
110787
- pushWarn2(warnings, `${prefix} \u63CF\u8FF0\u63A8\u8350 4 \u6761\uFF08\u5F53\u524D ${descriptions.length} \u6761\uFF09`);
110788
110797
  }
110789
110798
  const descriptionFields = [
110790
110799
  "adDescription",
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "siluzan-tso",
3
- "version": "1.1.24-beta.3",
4
- "publishedAt": 1780364315180
3
+ "version": "1.1.24-beta.4",
4
+ "publishedAt": 1780365274605
5
5
  }
@@ -220,9 +220,9 @@ siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json --js
220
220
  | `AdTitle` | null \| string | | 可选;无标题时写 `null`(CLI 默认) |
221
221
  | `Path1` / `Path2` | string | ✅ | 显示路径(**必填**,缺/null 会导致后端 BatchJob `ArgumentNullException`);**≤ 15 字符**(CJK 按 2 计);小写 a-z、数字、连字符 |
222
222
  | `headlinePart1/2/3` | string | ✅ | 前 3 条标题;**每条 ≤ 30 字符**(CJK 按 2 计) |
223
- | `AddtionalHeadlines` | string[] | | 第 4–15 条标题(合计 15) |
223
+ | `AddtionalHeadlines` | string[] || 第 4–15 条标题;与前三条合计须 **15 条**(写满) |
224
224
  | `adDescription` / `adDescription2` | string | ✅ | 前 2 条描述;**每条 ≤ 90 字符** |
225
- | `AddtionalAdDescriptions` | string[] | | 第 3–4 条描述(合计 4) |
225
+ | `AddtionalAdDescriptions` | string[] || 第 3–4 条描述;与前两条合计须 **4 条**(写满) |
226
226
 
227
227
  ---
228
228
 
@@ -232,7 +232,7 @@ siluzan-tso ad batch diff --batch-id <taskId> --config-file ./campaign.json --js
232
232
  | ---- | ---- |
233
233
  | 基础 | `customerName` / `campaign` 非空;`Budget > 0`;地理/语言至少 1 项 |
234
234
  | 网络 | `TargetPartnerSearchNetwork` 须 false;不可同时关闭 Google 搜索与搜索网络 |
235
- | RSA / 关键词 / 附加信息 | 字符上限、词面非空;RSA `Path1`/`Path2` 必填;SITELINK 行长度限制 |
235
+ | RSA / 关键词 / 附加信息 | 标题 **15** 条、描述 **4** 条(须写满);字符上限、词面非空;RSA `Path1`/`Path2` 必填;SITELINK 行长度限制 |
236
236
  | 实务 | 日期格式与先后、出价策略与配套字段一致 |
237
237
 
238
238
  `ad campaign-validate` 通过不保证 BatchJob 成功(例如仅写 `DestinationUrl` 未写 `Finalurl` 时 validate 仍可能 ✅)。异步结果用 `ad batch get` 轮询;`HasFailed` / 部分失败时用 `ad batch diff` 对照 JSON 补缺,系列级失败时改 JSON 重提,勿在半成品上反复整包创建。写操作须 `--commit`,见 `references/google-ads/google-ads.md` § ad campaign-create。
@@ -49,7 +49,7 @@
49
49
  | `google-ads/rules/google-ads-compliance.md` | 词与文案合规 |
50
50
  | `google-ads/rules/sensitive-industries.md` | 敏感行业(若相关) |
51
51
  | `google-ads/rules/google-ads-launch-plan-template.md` | 用户可见 Markdown 结构与 RSA/否词表 |
52
- | `google-ads/rules/google-ads-creative-optimization.md` | RSA 12–15 条、Callout/Sitelink |
52
+ | `google-ads/rules/google-ads-creative-optimization.md` | RSA 创意主题;`campaign-validate` 强制 **15** 标题 + **4** 描述 |
53
53
  | `assets/campaign-create-template.md` | JSON 字段契约 |
54
54
 
55
55
  ### 按需(触及时再读)
@@ -384,7 +384,7 @@ trusted, reliable, expert, custom, premium
384
384
  | # | 检查项 | 规则 |
385
385
  | --- | ---------------- | ------------------------------------------------------------------- |
386
386
  | 1 | 字符限制 | 每条 headline ≤ 30 字符;每条 description ≤ 90 字符 |
387
- | 2 | 数量 | Headlines 3(最多 15);Descriptions ≥ 2(最多 4) |
387
+ | 2 | 数量 | `campaign-create` JSON:**Headlines = 15**、**Descriptions = 4**(须写满);`ad ad-create` 仍为 3 / ≥2 |
388
388
  | 3 | 无 ALL CAPS | 除非缩写 |
389
389
  | 4 | 无多余感叹号 | Headlines 里 0 个;Descriptions 里最多 1 个 |
390
390
  | 5 | 无电话/邮箱 | 用 extension 代替 |
@@ -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.24-beta.3'
12
+ $PKG_VERSION = '1.1.24-beta.4'
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.24-beta.3"
12
+ readonly PKG_VERSION="1.1.24-beta.4"
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.24-beta.3",
3
+ "version": "1.1.24-beta.4",
4
4
  "description": "Siluzan 广告账户管理 CLI — 查询账户、余额、消耗数据,管理绑定关系与充值。",
5
5
  "keywords": [
6
6
  "ad-account",