siluzan-cso-cli 1.1.29-beta.2 → 1.1.29-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
@@ -54,7 +54,7 @@ siluzan-cso init -d /path/to/skills # 写入自定义目录
54
54
  siluzan-cso init --force # 强制覆盖已存在文件
55
55
  ```
56
56
 
57
- > **注意**:当前为测试版(1.1.29-beta.2),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
57
+ > **注意**:当前为测试版(1.1.29-beta.4),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
58
58
 
59
59
  | 助手 | 建议 `--ai` |
60
60
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -2610,6 +2610,9 @@ function pickStr(obj, key) {
2610
2610
  const v = obj[key];
2611
2611
  return typeof v === "string" && v.trim() ? v.trim() : void 0;
2612
2612
  }
2613
+ function pickPhone(data) {
2614
+ return pickStr(data, "phone") ?? pickStr(data, "mobile") ?? pickStr(data, "phoneNumber") ?? pickStr(data, "mobilePhone");
2615
+ }
2613
2616
  function pickCompanyId(data) {
2614
2617
  const direct = pickStr(data, "companyId") ?? pickStr(data, "companyID") ?? pickStr(data, "CompanyId");
2615
2618
  if (direct) return direct;
@@ -2626,10 +2629,11 @@ function parseMeResponse(text) {
2626
2629
  const data = json?.data && typeof json.data === "object" ? json.data : json;
2627
2630
  const id = pickStr(data, "entityId") ?? pickStr(data, "id") ?? pickStr(data, "userId") ?? pickStr(data, "accountId");
2628
2631
  const email = pickStr(data, "email");
2629
- const username = pickStr(data, "userName") ?? pickStr(data, "username") ?? pickStr(data, "name") ?? pickStr(data, "phone");
2632
+ const phone = pickPhone(data);
2633
+ const username = pickStr(data, "userName") ?? pickStr(data, "username") ?? pickStr(data, "name") ?? phone;
2630
2634
  const companyId = pickCompanyId(data);
2631
- if (!id && !email && !username && !companyId) return null;
2632
- return { id, email, username, companyId };
2635
+ if (!id && !email && !username && !phone && !companyId) return null;
2636
+ return { id, email, username, phone, companyId };
2633
2637
  } catch {
2634
2638
  return null;
2635
2639
  }
@@ -2654,6 +2658,7 @@ async function fetchSiluzanCurrentUser(apiBase, config) {
2654
2658
  entityId: parsed.id,
2655
2659
  email: parsed.email,
2656
2660
  username: parsed.username,
2661
+ phone: parsed.phone,
2657
2662
  companyId: parsed.companyId
2658
2663
  };
2659
2664
  } catch {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "slug": "siluzan-cso",
3
- "version": "1.1.29-beta.2",
4
- "publishedAt": 1781230878441,
3
+ "version": "1.1.29-beta.4",
4
+ "publishedAt": 1781257003327,
5
5
  "homepage": "https://www.siluzan.com",
6
6
  "source": "https://dev.azure.com/jack4it/Sammamish/_git/siluzan-skill",
7
7
  "requiredBinaries": [
@@ -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.29-beta.2'
12
+ $PKG_VERSION = '1.1.29-beta.4'
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.29-beta.2"
12
+ readonly PKG_VERSION="1.1.29-beta.4"
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"
@@ -35,31 +35,34 @@
35
35
 
36
36
  ---
37
37
 
38
- > AI 行为规范:仅可跳过明确标记为“按需执行”或“可选”的步骤,其余步骤必须严格依次完成,不得跳过/省略。
38
+ ## 执行步骤
39
39
 
40
- ## 第 1 步:加载人设
40
+ > AI行为规范:以下步骤没有标记按需/可跳过的步骤必须执行,不能省略
41
41
 
42
- 按以下优先级判断:
42
+ ### 第 1 步 读取必读文件
43
+
44
+ 1. `collaboration.md`
45
+ 2. `sop.md`
46
+
47
+ ### 第 2 步:加载人设
48
+
49
+ 所有腔调、句式、共鸣切入点都依赖人设卡。按以下优先级判断:
43
50
 
44
51
  > 确定人设名后,统一用 `siluzan-cso persona list --name <人设名> --json` 读 `styleGuide` 字段作为人设卡;不存在或异常则请用户核对名称。
45
52
 
46
53
  1. **本次提供了人设卡**(文件 / 文本 / 截图)→ 按 `persona-schema.md` 校验 → 缺字段补问 → A1 确认 → `siluzan-cso persona create` 保存 → 进入主流程
47
54
  2. **已指定人设名** → 直接按上方命令拉取
48
55
  3. **均无** → 先 `siluzan-cso persona list`(不加 `--json`,或加 `--no-style-guide`,避免输出过长被截断)查平台是否已有人设,**不要在查询前假设有无**:
49
- - 非空 → Markdown 展示列表,**让用户自选**(切勿默认或代选),确认后按上方命令拉取
56
+ - 非空 → Markdown 格式清晰展示全部已有人设,**要求用户从中自主选择**(即使存在准确匹配项也不默认),用户确认后再按照上述命令进行拉取
50
57
  - 为空 → 进入 `persona-onboarding.md` 引导(反推 / 描述 / 已有卡三选一;都不填走临时人设兜底)
51
58
 
52
- > 关键约束:**没有可用人设卡之前,不要进入后续步骤**。所有腔调、句式、共鸣切入点都依赖人设卡。
53
-
54
- 加载完成后,向用户明确告知:"本次使用人设:`<name>`,platform_focus = `<值>`"。
55
-
56
59
  人设字段标准见 `persona-schema.md`;反推见 `persona-reverse-sop.md`;平台命令细节见 `references/persona.md`。
57
60
 
58
61
  ---
59
62
 
60
- ## 第 2 步:确定本次三库内容
63
+ ## 第 3 步:确定本次三库内容
61
64
 
62
- 必须依下列优先级确认并完整读取本次用的三库文件,**未全部加载前不得进入下一步**。即便已通过网络检索过资料,也必须确保三库文件已完整加载和读取,方可继续:
65
+ 按下列优先级确认并**完整读取**本次三库文件:
63
66
 
64
67
  **优先级 1 — 用户本次提供的文件**:若用户在对话中直接提供了三库文件(流量因子库 / 产品资产库 / 烹调方法库),则:
65
68
 
@@ -97,33 +100,29 @@
97
100
 
98
101
  ---
99
102
 
100
- ## 第 3 步:按 platform_focus 挂载赛道包
101
-
102
- 读人设卡的 `platform_focus` 字段:
103
+ ## 第 4 步:按文案类型额外阅读
103
104
 
104
- - 含 `公众号` → 加载 `packs/公众号爆款/overview.md`(黄金骨架、12 项自检、5 大传播弹药、标题模板等结构与质检规范),正文按 pack 的"黄金骨架"。**三库内容以第 1 步确定的为准**:公众号默认走 `packs/wechat/` 远端专属三库,但若优先级 1/2 已命中用户三库,则直接用用户的、不再取 pack 三库(详见第 1 步优先级说明,整体 1 > 2 > pack > 全局默认)。
105
- - 含 `短视频` → 加载 `packs/短视频口播/`(overview + `口播-sop.md`),口播场景**优先走 `口播-sop.md`**;三库仍取主库(第 2 步确定的三库)。
106
- - `通用` → 只用主库,不挂 pack。
107
- - **为空** → 询问用户本次写哪个平台,再决定挂哪个 pack。
108
- - **多选** → 写稿前询问"本次主要发到哪个平台",按该平台 pack 优先。
105
+ - 公众号文章:`packs/公众号爆款/overview.md`
106
+ - 口播稿:`packs/短视频口播/overview.md`、`packs/短视频口播/口播-sop.md.md`(取代默认的`sop.md`)
107
+ - 其他:
109
108
 
110
109
  ---
111
110
 
112
- ## 第 4 步:RAG(按需)
111
+ ## 第 5 步:RAG(按需 · 可跳过)
112
+
113
+ > 本步是全工作流**唯一**带「按需」标记、允许跳过的步骤。
113
114
 
114
115
  如需从平台知识库检索品牌/产品内部素材,调用 `siluzan-cso rag query`(`-q` 内多个短词用**空格**分隔时,CLI 会分检再合并排序;详见 `references/rag.md`),结果归入主 SOP 第 4 步"拆素材"。不用于与文案无关的场景。
115
116
 
116
- ---
117
+ ## 第 6 步 检查步骤是否已全部完成
117
118
 
118
- ## 阅读顺序
119
+ 逐条自检,全部通过才进入「输出」。任一项不通过,回到对应步骤补全,**不得**带着缺口直接交付。
119
120
 
120
- - 三库如何协作:`collaboration.md`
121
- - 完整成稿链路(12 步):`sop.md` 人设 目标 → 选题 → 拆素材(RAG) → 找因子 → 配资产 → 选结构 → 出提纲 → 写正文 → 质检 → 改写 → 反哺
122
- - 人设字段标准:`persona-schema.md`
123
- - 无人设时的引导:`persona-onboarding.md`
124
- - 从成稿反推人设:`persona-reverse-sop.md`
125
- - 公众号赛道包:`packs/公众号爆款/overview.md`
126
- - 短视频口播赛道包:`packs/短视频口播/overview.md`
121
+ - [ ] 第 1 步:`collaboration.md`、`sop.md` 已读
122
+ - [ ] 2 步:人设已确定并加载(`styleGuide` 已拉取;临时人设也已明确)
123
+ - [ ] 第 3 步:本次三库对应的三个文件已按优先级确认并**完整读取**(远端来源整文件落盘,无 `head`/`tail`/截断)
124
+ - [ ] 第 4 步:已按文案类型读完对应 pack(公众号 / 口播 / 其他)
125
+ - [ ] 第 5 步:RAG 已执行或已明确判定跳过(涉及品牌/产品事实时不得跳过)
127
126
 
128
127
  ---
129
128
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-cso-cli",
3
- "version": "1.1.29-beta.2",
3
+ "version": "1.1.29-beta.4",
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",