siluzan-cso-cli 1.1.23-beta.1 → 1.1.24-beta.1

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
@@ -54,7 +54,7 @@ siluzan-cso init -d /path/to/skills # 写入自定义目录
54
54
  siluzan-cso init --force # 强制覆盖已存在文件
55
55
  ```
56
56
 
57
- > **注意**:当前为测试版(1.1.23-beta.1),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
57
+ > **注意**:当前为测试版(1.1.24-beta.1),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
58
58
 
59
59
  | 助手 | 建议 `--ai` |
60
60
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -5587,6 +5587,15 @@ var DEFAULT_CONTENT_TYPES = [
5587
5587
  { id: "video", label: "\u89C6\u9891" }
5588
5588
  ];
5589
5589
  var EXPORT_TABLE_HEADERS = ["\u5468\u6B21", "\u65B9\u5411\u5206\u7C7B", "\u4E3B\u9898", "\u5185\u5BB9\u65B9\u5411", "\u76EE\u6807\u53D7\u4F17"];
5590
+ var PLANNING_TARGET_MARKET_OPTIONS = [
5591
+ "\u5168\u7403",
5592
+ "\u4E2D\u4E9A",
5593
+ "\u975E\u6D32",
5594
+ "\u62C9\u7F8E",
5595
+ "\u4E2D\u4E1C",
5596
+ "\u72EC\u8054\u4F53",
5597
+ "\u4E1C\u5357\u4E9A"
5598
+ ];
5590
5599
  function exitWithError2(message) {
5591
5600
  console.error(`
5592
5601
  \u274C ${message}
@@ -5653,6 +5662,23 @@ function ensureContentTypes(input) {
5653
5662
  }
5654
5663
  return uniq;
5655
5664
  }
5665
+ function ensureTargetMarkets(input) {
5666
+ if (!input || input.length === 0) return void 0;
5667
+ const values = input.flatMap((part) => part.split(",")).map((item) => item.trim()).filter(Boolean);
5668
+ const uniq = Array.from(new Set(values));
5669
+ if (uniq.length === 0) return void 0;
5670
+ const allowed = new Set(PLANNING_TARGET_MARKET_OPTIONS);
5671
+ const invalid = uniq.filter((item) => !allowed.has(item));
5672
+ if (invalid.length > 0) {
5673
+ exitWithError2(
5674
+ `--target-markets \u4EC5\u652F\u6301\uFF1A${PLANNING_TARGET_MARKET_OPTIONS.join("\u3001")}\uFF0C\u6536\u5230\uFF1A${invalid.join("\u3001")}`
5675
+ );
5676
+ }
5677
+ if (uniq.includes("\u5168\u7403") && uniq.length > 1) {
5678
+ exitWithError2("--target-markets \u9009\u4E86\u300C\u5168\u7403\u300D\u540E\u4E0D\u80FD\u518D\u9009\u5176\u4ED6\u5E02\u573A");
5679
+ }
5680
+ return uniq;
5681
+ }
5656
5682
  function ensurePartnershipTotalMonths(value) {
5657
5683
  const num = value ? Number(value) : 12;
5658
5684
  if (num !== 6 && num !== 12 && num !== 24) {
@@ -5887,7 +5913,7 @@ function buildGenerateRequest(options) {
5887
5913
  frequency,
5888
5914
  marketingGoal: options.marketingGoal?.trim() || void 0,
5889
5915
  keyProducts: options.keyProducts?.trim() || void 0,
5890
- targetMarkets: options.targetMarkets?.trim() || void 0,
5916
+ targetMarkets: ensureTargetMarkets(options.targetMarkets),
5891
5917
  keyEvents: options.keyEvents?.trim() || void 0,
5892
5918
  contentTone: options.contentTone?.trim() || void 0
5893
5919
  };
@@ -7833,7 +7859,10 @@ function registerCsoCommands(program2) {
7833
7859
  await runPlanningContentTypes(opts);
7834
7860
  }
7835
7861
  );
7836
- planningCmd.command("generate").description("\u521B\u5EFA\u89C4\u5212\u751F\u6210\u4EFB\u52A1\uFF08\u5BF9\u5E94 planning \u751F\u6210\u5F39\u7A97\uFF09").requiredOption("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--enterprise-name <name>", "\u4F01\u4E1A\u540D\u79F0\uFF08\u4E0D\u4F20\u9ED8\u8BA4\u4F7F\u7528 enterprise-id\uFF09").requiredOption("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").requiredOption("--content-types <types...>", "\u5185\u5BB9\u7C7B\u578B\uFF0C\u652F\u6301\u9017\u53F7\u6216\u7A7A\u683C\uFF1Apost,video").option("--partnership-total-months <6|12|24>", "\u5408\u4F5C\u603B\u6708\u6570\uFF08\u9ED8\u8BA4 12\uFF09", "12").option("--partnership-start-year-month <YYYY-MM>", "\u5408\u4F5C\u5F00\u59CB\u6708\u4EFD\uFF08\u4E0E\u89C4\u5212\u6708\u4E0D\u540C\u624D\u4F1A\u4F20\u7ED9\u63A5\u53E3\uFF09").option("--freq-unit <week|month>", "\u9891\u6B21\u5355\u4F4D").option("--freq-count <number>", "\u9891\u6B21\u6570\u91CF\uFF08\u4E0E --freq-unit \u540C\u65F6\u63D0\u4F9B\uFF09").option("--marketing-goal <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u8425\u9500\u76EE\u6807").option("--key-products <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u6838\u5FC3\u4EA7\u54C1").option("--target-markets <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u76EE\u6807\u5E02\u573A").option("--key-events <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5173\u952E\u8282\u70B9").option("--content-tone <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5185\u5BB9\u8BED\u8C03").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7862
+ planningCmd.command("generate").description("\u521B\u5EFA\u89C4\u5212\u751F\u6210\u4EFB\u52A1\uFF08\u5BF9\u5E94 planning \u751F\u6210\u5F39\u7A97\uFF09").requiredOption("--enterprise-id <id>", "\u4F01\u4E1A ID").option("--enterprise-name <name>", "\u4F01\u4E1A\u540D\u79F0\uFF08\u4E0D\u4F20\u9ED8\u8BA4\u4F7F\u7528 enterprise-id\uFF09").requiredOption("--year-month <YYYY-MM>", "\u89C4\u5212\u6708\u4EFD").requiredOption("--content-types <types...>", "\u5185\u5BB9\u7C7B\u578B\uFF0C\u652F\u6301\u9017\u53F7\u6216\u7A7A\u683C\uFF1Apost,video").option("--partnership-total-months <6|12|24>", "\u5408\u4F5C\u603B\u6708\u6570\uFF08\u9ED8\u8BA4 12\uFF09", "12").option("--partnership-start-year-month <YYYY-MM>", "\u5408\u4F5C\u5F00\u59CB\u6708\u4EFD\uFF08\u4E0E\u89C4\u5212\u6708\u4E0D\u540C\u624D\u4F1A\u4F20\u7ED9\u63A5\u53E3\uFF09").option("--freq-unit <week|month>", "\u9891\u6B21\u5355\u4F4D").option("--freq-count <number>", "\u9891\u6B21\u6570\u91CF\uFF08\u4E0E --freq-unit \u540C\u65F6\u63D0\u4F9B\uFF09").option("--marketing-goal <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u8425\u9500\u76EE\u6807").option("--key-products <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u6838\u5FC3\u4EA7\u54C1").option(
7863
+ "--target-markets <markets...>",
7864
+ "\u76EE\u6807\u5E02\u573A\uFF1A\u5168\u7403\uFF08\u5355\u72EC\uFF09\u6216 \u4E2D\u4E9A/\u975E\u6D32/\u62C9\u7F8E/\u4E2D\u4E1C/\u72EC\u8054\u4F53/\u4E1C\u5357\u4E9A\uFF08\u53EF\u591A\u9009\uFF0C\u4E0D\u53EF\u4E0E\u5168\u7403\u540C\u9009\uFF09"
7865
+ ).option("--key-events <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5173\u952E\u8282\u70B9").option("--content-tone <text>", "\u672C\u6708\u89C4\u5212\u91CD\u70B9\uFF1A\u5185\u5BB9\u8BED\u8C03").option("--watch", "\u63D0\u4EA4\u540E\u76D1\u542C\u4EFB\u52A1\u76F4\u5230\u5B8C\u6210/\u5931\u8D25", false).option("--watch-timeout <seconds>", "\u76D1\u542C\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 300 \u79D2\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--json", "\u8F93\u51FA JSON", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7837
7866
  async (opts) => {
7838
7867
  await runPlanningGenerate(opts);
7839
7868
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "slug": "siluzan-cso",
3
- "version": "1.1.23-beta.1",
4
- "publishedAt": 1780046025000,
3
+ "version": "1.1.24-beta.1",
4
+ "publishedAt": 1780277495900,
5
5
  "homepage": "https://www.siluzan.com",
6
6
  "source": "https://dev.azure.com/jack4it/Sammamish/_git/siluzan-skill",
7
7
  "requiredBinaries": [
@@ -43,6 +43,7 @@ siluzan-cso planning generate \
43
43
  --content-types post,video \
44
44
  --marketing-goal "提升品牌曝光" \
45
45
  --key-products "新品 A" \
46
+ --target-markets 中亚,东南亚 \
46
47
  --freq-unit week --freq-count 3
47
48
 
48
49
  # Step 3:监控生成进度(taskId 来自 generate 输出)
@@ -66,7 +67,7 @@ siluzan-cso planning export txt --plan-id <planId> --output plan.md
66
67
  | `--content-types` | ✅ | 内容类型,逗号分隔:`post`(图文)/ `video`(视频) |
67
68
  | `--marketing-goal` | — | 营销目标(自然语言描述) |
68
69
  | `--key-products` | — | 重点产品 |
69
- | `--target-markets` | — | 目标市场 |
70
+ | `--target-markets` | — | 目标市场 `string[]`:`全球` **单独选**;或从 `中亚`、`非洲`、`拉美`、`中东`、`独联体`、`东南亚` 多选(**不可与全球同选**) |
70
71
  | `--key-events` | — | 重要节点/活动 |
71
72
  | `--content-tone` | — | 内容风格(如"专业严肃"/"轻松活泼") |
72
73
  | `--freq-unit` | — | 发布频率单位:`week` / `month` |
@@ -87,3 +88,49 @@ siluzan-cso planning list --enterprise-id <id>
87
88
  # 按月份筛选
88
89
  siluzan-cso planning list --year-month 2026-05
89
90
  ```
91
+
92
+ ---
93
+
94
+ ## planning get — 规划详情字段
95
+
96
+ `planning get <planId> --json` 返回完整规划对象。以下仅列**写稿、排期、复用规划**时真正需要关注的字段(Cosmos `_rid` / `_etag` / `PartitionKey` 等存储字段可忽略)。
97
+
98
+ ### 规划主体
99
+
100
+ | 字段 | 说明 |
101
+ | --- | --- |
102
+ | `id` | 规划 ID,再生成、导出时引用 |
103
+ | `enterpriseIds` | 企业 ID 列表(通常一项) |
104
+ | `enterpriseName` | 企业名称 |
105
+ | `yearMonth` | 规划月份 `YYYY-MM` |
106
+ | `contentTypes` | 已规划体裁:`post`(图文)、`video`(视频) |
107
+ | `frequency` | 发布频次:`perWeek` 或 `perMonth`(与 generate 的 `--freq-unit` / `--freq-count` 对应) |
108
+ | `targetMarkets` | 目标市场 `string[]`;`全球` 与区域项互斥,规则同 `--target-markets` |
109
+ | `strategyBrief` | 用户侧策略简报原文,本月叙事与重点的**总纲** |
110
+ | `contextUsed` | 生成时采用的背景摘要(含知识库/业务语境),写稿前建议先读 |
111
+ | `planRationale` | 本月排期逻辑(周次节奏、阶段目标),export txt 会写入「规划逻辑」 |
112
+ | `postItems` / `videoItems` | 图文 / 视频选题表,见下表 |
113
+
114
+ ### 长期合作周期(影响阶段化叙事)
115
+
116
+ 生成时需传 `--partnership-total-months`(6/12/24)与可选 `--partnership-start-year-month`;详情里会回显当前处于合作周期的哪一段:
117
+
118
+ | 字段 | 说明 |
119
+ | --- | --- |
120
+ | `partnershipTotalMonths` | 合作总月数(6 / 12 / 24) |
121
+ | `partnershipStartYearMonth` | 合作起始月 `YYYY-MM` |
122
+ | `partnershipMonthIndex` | 当前是合作第几个月(从 1 起) |
123
+ | `partnershipPhaseSlot` | 阶段槽位(长周期内分段策略用,与总月数配合理解本月侧重) |
124
+
125
+ ### 选题行(`postItems` / `videoItems` 每项)
126
+
127
+ | 字段 | 说明 |
128
+ | --- | --- |
129
+ | `week` | 排期周次,如 `第一周(4月1日-7日)-1`(同周多条以 `-1`、`-2` 区分) |
130
+ | `contentDirection` | 方向分类(案例、TCO、展会等标签) |
131
+ | `topic` | 选题标题 |
132
+ | `mainDirection` | 本条内容的撰写/拍摄要点与转化导向 |
133
+ | `targetAudience` | 目标受众 |
134
+ | `referenceMaterials` | 建议引用的素材或资料线索;**仅 `--json` 可见**,`export txt` 表格不含此列 |
135
+
136
+ 按 `week` 排序即可还原月度节奏;写具体稿件时优先组合 `mainDirection` + `referenceMaterials`,并对照 `planRationale` 与 `strategyBrief` 保持口径一致。
@@ -9,7 +9,7 @@ $ErrorActionPreference = 'Stop'
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  $PKG_NAME = 'siluzan-cso-cli'
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- $PKG_VERSION = '1.1.23-beta.1'
12
+ $PKG_VERSION = '1.1.24-beta.1'
13
13
  $CLI_BIN = 'siluzan-cso'
14
14
  $SKILL_LABEL = 'Siluzan CSO'
15
15
  $INSTALL_CMD = 'npm install -g siluzan-cso-cli@beta'
@@ -9,7 +9,7 @@ set -euo pipefail
9
9
  # -- Package info (injected at build time) ------------------------------------
10
10
  readonly PKG_NAME="siluzan-cso-cli"
11
11
  # PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
12
- readonly PKG_VERSION="1.1.23-beta.1"
12
+ readonly PKG_VERSION="1.1.24-beta.1"
13
13
  readonly CLI_BIN="siluzan-cso"
14
14
  readonly SKILL_LABEL="Siluzan CSO"
15
15
  readonly INSTALL_CMD="npm install -g siluzan-cso-cli@beta"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-cso-cli",
3
- "version": "1.1.23-beta.1",
3
+ "version": "1.1.24-beta.1",
4
4
  "description": "Siluzan platform AI Skill CLI — multi-platform content publishing (video/image-text) for Cursor, Claude Code, and OpenClaw.",
5
5
  "keywords": [
6
6
  "ai-skill",