siluzan-cso-cli 1.1.27-beta.2 → 1.1.27-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.27-beta.2),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
57
+ > **注意**:当前为测试版(1.1.27-beta.4),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
58
58
 
59
59
  | 助手 | 建议 `--ai` |
60
60
  | ----------------------- | ------------------------------------ |
package/dist/index.js CHANGED
@@ -6928,6 +6928,11 @@ function previewText(s, max = 72) {
6928
6928
  if (t.length <= max) return t;
6929
6929
  return `${t.slice(0, max)}\u2026`;
6930
6930
  }
6931
+ function projectPersonaForJson(p, includeStyleGuide) {
6932
+ if (includeStyleGuide) return p;
6933
+ const { styleGuide, ...rest } = p;
6934
+ return { ...rest, styleGuideChars: styleGuide?.length ?? 0 };
6935
+ }
6931
6936
  async function runPersonaList(options) {
6932
6937
  const config = loadConfig(options.token);
6933
6938
  const url = `${config.csoBaseUrl}/cso/v1/platformdata/GetPersonas`;
@@ -6963,7 +6968,9 @@ async function runPersonaList(options) {
6963
6968
  }
6964
6969
  const total = payload.totalResultCount ?? payload.results.length;
6965
6970
  if (options.json) {
6966
- console.log(JSON.stringify({ results: list, totalResultCount: total }, null, 2));
6971
+ const includeStyleGuide = options.includeStyleGuide !== false;
6972
+ const results = list.map((p) => projectPersonaForJson(p, includeStyleGuide));
6973
+ console.log(JSON.stringify({ results, totalResultCount: total }, null, 2));
6967
6974
  return;
6968
6975
  }
6969
6976
  if (list.length === 0) {
@@ -7758,13 +7765,17 @@ function registerCsoCommands(program2) {
7758
7765
  }
7759
7766
  );
7760
7767
  const personaCmd = program2.command("persona").description("CSO \u4EBA\u8BBE\uFF1A\u67E5\u8BE2\u5E73\u53F0\u4EBA\u8BBE\u4E0E styleGuide\uFF08Markdown\uFF09");
7761
- personaCmd.command("list").description("\u62C9\u53D6\u4EBA\u8BBE\u5217\u8868\uFF08POST /cso/v1/platformdata/GetPersonas\uFF0C\u4E0E Web \u7AEF\u4E00\u81F4\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--id <id>", "\u53EA\u663E\u793A\u6307\u5B9A\u4EBA\u8BBE id").option("--name <text>", "\u6309\u4EBA\u8BBE\u540D\u79F0\u5B50\u4E32\u8FC7\u6EE4").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u542B styleGuide\uFF09", false).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7768
+ personaCmd.command("list").description("\u62C9\u53D6\u4EBA\u8BBE\u5217\u8868\uFF08POST /cso/v1/platformdata/GetPersonas\uFF0C\u4E0E Web \u7AEF\u4E00\u81F4\uFF09").option("-t, --token <token>", "Token\uFF08\u53EF\u9009\uFF1B\u4F18\u5148\u4E8E ~/.siluzan/config.json\uFF09").option("--id <id>", "\u53EA\u663E\u793A\u6307\u5B9A\u4EBA\u8BBE id").option("--name <text>", "\u6309\u4EBA\u8BBE\u540D\u79F0\u5B50\u4E32\u8FC7\u6EE4").option("--json", "\u8F93\u51FA\u5B8C\u6574 JSON\uFF08\u542B styleGuide\uFF09", false).option(
7769
+ "--no-style-guide",
7770
+ "\u642D\u914D --json\uFF1A\u7701\u7565 styleGuide\uFF0C\u4EC5\u8F93\u51FA styleGuideChars\uFF08\u5B57\u7B26\u6570\uFF09\u3002styleGuide \u901A\u5E38\u5F88\u957F\uFF0C\u5168\u91CF\u5217\u8868\u6613\u88AB\u5BBF\u4E3B bash \u5DE5\u5177\u622A\u65AD\u4E22\u8BB0\u5F55\uFF0C\u9700\u8981\u5B8C\u6574\u5185\u5BB9\u65F6\u518D\u7528 --id \u5355\u72EC\u62C9\u53D6"
7771
+ ).option("--unicode", "\u4F7F\u7528 Unicode \u7EBF\u6846\u8868\u683C\uFF08\u9ED8\u8BA4 ASCII +-|\uFF09", false).option("--verbose", "\u663E\u793A\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F", false).action(
7762
7772
  async (opts) => {
7763
7773
  await runPersonaList({
7764
7774
  token: opts.token,
7765
7775
  id: opts.id,
7766
7776
  name: opts.name,
7767
7777
  json: opts.json,
7778
+ includeStyleGuide: opts.styleGuide,
7768
7779
  unicode: opts.unicode,
7769
7780
  verbose: opts.verbose
7770
7781
  });
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: siluzan-cso
3
- description: 当用户提问的内容涉及以下三类业务时需加载本skill:(1) 内容文案生产:选题、爆款拆解、文案撰写(生成任何文案——包括但不限于:视频脚本、博客、公众号文章、口播稿等,必须优先使用本skill,不可直接输出)、人设卡生成/反推/查询/保存、改稿润色;(2) 支持YouTube、TikTok、Instagram、LinkedIn、X、Facebook 媒体平台的内容发布与运营:平台账号绑定与 OAuth 授权、视频图文发布、任务管理与失败重试、播放粉丝绩效报表、**账号分组(本 skill 独有;广告账户体系不存在分组概念,用户只说"账号分组"也默认走本 skill,不要进 siluzan-tso)**、素材上传、封面截取、AI 内容规划;(3) RAG 知识库检索:品牌/产品知识库问答与文案事实依据。**如涉及账号相关操作,若账号类型(广告账号/运营媒体账号)不明确,请先询问用户,仅当确认为"运营媒体账号"时,才可使用本 skill。**
3
+ description: 当用户提问的内容涉及以下三类业务时需加载本skill:(1) 内容文案生产与人设管理:选题、爆款拆解、文案撰写(生成任何文案——包括但不限于:视频脚本、博客、公众号文章、口播稿等,必须优先使用本skill,不可直接输出)、人设卡生成/反推/查询/保存、改稿润色;(2) 支持YouTube、TikTok、Instagram、LinkedIn、X、Facebook 媒体平台的内容发布与运营:平台账号绑定与 OAuth 授权、视频图文发布、任务管理与失败重试、播放粉丝绩效报表、**账号分组(本 skill 独有;广告账户体系不存在分组概念,用户只说"账号分组"也默认走本 skill,不要进 siluzan-tso)**、素材上传、封面截取、AI 内容规划;(3) RAG 知识库检索:品牌/产品知识库问答与文案事实依据。**如涉及账号相关操作,若账号类型(广告账号/运营媒体账号)不明确,请先询问用户,仅当确认为"运营媒体账号"时,才可使用本 skill。**
4
4
  compatibility: Requires siluzan-cso-cli installed and authenticated via `siluzan-cso login`
5
5
  ---
6
6
 
@@ -45,9 +45,9 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
45
45
 
46
46
  ## 能力范围
47
47
 
48
- | 业务流程 | 手段 | 说明 |
49
- | ---------------------- | ------------------------------------------------------- | ------------------------------------ |
50
- | **发布与运营** | 下方 CLI 命令 + `references/*.md` | 上传、发布、任务、报表、账号、规划等 |
48
+ | 业务流程 | 手段 | 说明 |
49
+ | ---------------------- | ------------------------------------------------------- | ---------------------------------------- |
50
+ | **发布与运营** | 下方 CLI 命令 + `references/*.md` | 上传、发布、任务、报表、账号、规划等 |
51
51
  | **文案生产(子流程)** | `three-lib-content-workflow/content-writer.workflow.md` | 选题、三库、口播/公众号/成稿、审稿、改稿 |
52
52
 
53
53
  两类流程同属 CSO 业务。文案生产流程嵌套在本 skill 内,见下文「三库内容工作流」。
@@ -78,21 +78,21 @@ Windows 注意:部分 Agent 客户端通过 PowerShell / cmd 代执行命令
78
78
 
79
79
  ## 常见业务场景 → 阅读哪个文件
80
80
 
81
- | 用户在做什么 | 先阅读 |
82
- | --------------------------------------------------------------- | ------------------------------------------------------- |
83
- | 首次安装 / 登录 / 更新 | `references/setup.md` |
84
- | 发布视频或图文 | `references/publish.md` |
85
- | 上传素材 | `references/upload.md` |
86
- | 截取视频封面 | `references/extract-cover.md` |
87
- | 查发布记录 / 处理失败 | `references/task.md` |
88
- | 查账号数据 / 运营报表 | `references/report.md` |
89
- | 查找账号 ID 或账号详情 | `references/list-accounts.md` |
90
- | 账号 Token 失效 / 重新授权 | `references/authorize.md` |
91
- | 管理账号分组 | `references/account-group.md` |
92
- | AI 内容规划 | `references/planning.md` |
93
- | 需要给用户提供后台页面链接 | `references/web-pages.md` |
94
- | 拉取人设 / styleGuide(写稿前)/ 保存人设 | `references/persona.md` |
95
- | 写稿时检索素材库 RAG 片段(三库拆素材等) | `references/rag.md` |
81
+ | 用户在做什么 | 先阅读 |
82
+ | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
83
+ | 首次安装 / 登录 / 更新 | `references/setup.md` |
84
+ | 发布视频或图文 | `references/publish.md` |
85
+ | 上传素材 | `references/upload.md` |
86
+ | 截取视频封面 | `references/extract-cover.md` |
87
+ | 查发布记录 / 处理失败 | `references/task.md` |
88
+ | 查账号数据 / 运营报表 | `references/report.md` |
89
+ | 查找账号 ID 或账号详情 | `references/list-accounts.md` |
90
+ | 账号 Token 失效 / 重新授权 | `references/authorize.md` |
91
+ | 管理账号分组 | `references/account-group.md` |
92
+ | AI 内容规划 | `references/planning.md` |
93
+ | 需要给用户提供后台页面链接 | `references/web-pages.md` |
94
+ | 拉取人设 / styleGuide(写稿前)/ 保存人设 | `references/persona.md` |
95
+ | 写稿时检索素材库 RAG 片段(三库拆素材等) | `references/rag.md` |
96
96
  | 选题 / 三库拆解 / 口播文案/公众号文章/其他文案 / 人设卡 / 代表作品反推人设 / 文章审稿打分 / 精准改稿 | `three-lib-content-workflow/content-writer.workflow.md` |
97
97
 
98
98
  ---
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "slug": "siluzan-cso",
3
- "version": "1.1.27-beta.2",
4
- "publishedAt": 1781060595611,
3
+ "version": "1.1.27-beta.4",
4
+ "publishedAt": 1781081180473,
5
5
  "homepage": "https://www.siluzan.com",
6
6
  "source": "https://dev.azure.com/jack4it/Sammamish/_git/siluzan-skill",
7
7
  "requiredBinaries": [
@@ -13,17 +13,29 @@
13
13
  siluzan-cso persona list [选项]
14
14
  ```
15
15
 
16
- | 选项 | 说明 |
17
- | --------------------- | --------------------------------------------- |
18
- | `-t, --token <token>` | 凭据(可选,默认读 `~/.siluzan/config.json`) |
19
- | `--id <id>` | 只显示指定人设 id |
20
- | `--name <text>` | 按人设名称子串过滤(客户端过滤) |
21
- | `--json` | 输出完整 JSON(含完整 `styleGuide`) |
22
- | `--unicode` | 表格使用 Unicode 线框 |
23
- | `--verbose` | 打印详细错误 |
16
+ | 选项 | 说明 |
17
+ | --------------------- | ----------------------------------------------------------------------------- |
18
+ | `-t, --token <token>` | 凭据(可选,默认读 `~/.siluzan/config.json`) |
19
+ | `--id <id>` | 只显示指定人设 id |
20
+ | `--name <text>` | 按人设名称子串过滤(客户端过滤) |
21
+ | `--json` | 输出完整 JSON(含完整 `styleGuide`) |
22
+ | `--no-style-guide` | 搭配 `--json`:省略 `styleGuide`,改输出 `styleGuideChars`(字符数) |
23
+ | `--unicode` | 表格使用 Unicode 线框 |
24
+ | `--verbose` | 打印详细错误 |
24
25
 
25
26
  终端表格仅展示 `styleGuide` 摘要;需要全文时用 `--json`。
26
27
 
28
+ > **⚠️ 列全量列表请优先用 `--json --no-style-guide`。** `styleGuide` 通常每条数千字,账号下人设一多,全量 `--json` 输出动辄数万字符,
29
+ > 极易被宿主(如 deerflow sandbox 的 `bash` 工具,默认 `bash_output_max_chars=20000`)**从中间截断**,导致列表里部分人设直接丢失。
30
+ > 正确姿势:先 `persona list --json --no-style-guide` 拿到完整列表(仅含 `styleGuideChars` 长度提示),选中目标后再用
31
+ > `persona list --id <id> --json` 单独拉那一条的完整 `styleGuide`。
32
+
33
+ `--no-style-guide` 模式下每条记录形如(去掉 `styleGuide`,新增 `styleGuideChars`):
34
+
35
+ ```json
36
+ { "id": "...", "personaName": "...", "taskStatus": 3, "materials": [], "styleGuideChars": 5837 }
37
+ ```
38
+
27
39
  ## 命令二:保存人设到平台
28
40
 
29
41
  ```text
@@ -51,6 +63,7 @@ siluzan-cso persona create --name <名称> ( --style-guide <markdown> | --style-
51
63
  siluzan-cso persona create --name "外贸老炮" --style-guide-file ./tmp-persona.md
52
64
  ```
53
65
  3. 拿到回包里的 `id`,后续写稿时用 `siluzan-cso persona list --id <id> --json` 取全文复核。
66
+ (若是「先浏览全部人设再挑一个」,先 `persona list --json --no-style-guide` 看精简列表,再按 `--id` 取全文,避免长列表被宿主截断。)
54
67
 
55
68
  ## 字段说明
56
69
 
@@ -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.27-beta.2'
12
+ $PKG_VERSION = '1.1.27-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.27-beta.2"
12
+ readonly PKG_VERSION="1.1.27-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"
@@ -17,7 +17,7 @@
17
17
  - **人设卡** = 注入骨架的"风味与边界",**统一走 CSO 平台**(`siluzan-cso persona`)
18
18
  - **赛道包**(`packs/`)= 特定平台的专属扩展,按人设 `platform_focus` 挂载
19
19
 
20
- > **AI 行为规范:务必逐步、严格执行下述全部流程步骤,严禁跳过或简化,不能提前输出最终结果。**
20
+ > **AI 行为规范**:务必逐步、严格执行下述全部流程步骤,严禁跳过或简化;流程在**内部**走完,**不得**把各步过程(三库溯源、TF/PA/MF 编码、SOP 记录、焊点 / 自检等)主动展示给用户——只交付最终成稿;用户未索要过程前,不能提前输出最终结果。
21
21
 
22
22
  ---
23
23
 
@@ -35,17 +35,17 @@
35
35
 
36
36
  ---
37
37
 
38
- ## 第 0 步:加载人设(不可跳过)
38
+ ## 第 1 步:加载人设
39
39
 
40
40
  按以下优先级判断:
41
41
 
42
42
  1. **用户本次提供了人设卡**(文件 / 文本 / 截图)→ 解析并校验是否符合 `persona-schema.md` → 缺字段补问 → A1 确认 → `siluzan-cso persona create` 保存 → 进入主流程
43
43
  2. **CSO 平台已有人设** →
44
44
  - 用户已指定人设名:`siluzan-cso persona list --name <人设名> --json`,读 `styleGuide` 字段作为人设卡。若不存在或异常,请用户核对名称。
45
- - 用户未指定:先 `siluzan-cso persona list` 输出可选列表(Markdown),**请用户明确选择**,勿擅自代选;选定后再按名拉取。**必须完整展示全部人设,禁止用 `| head` 等管道截断输出。**
45
+ - 用户未指定:请先执行 `siluzan-cso persona list`(建议不加 `--json`,或加 `--no-style-guide`,以避免内容超长导致输出被截断),将可用人设列表以 Markdown 格式展示,**务必让用户自行选择**,切勿默认或代选;用户确认后再按指定名称拉取对应人设。
46
46
  3. **以上都没有** → 进入 `persona-onboarding.md` 引导流程(三选一:反推 / 描述 / 已有卡;都不想填则走临时人设兜底)
47
47
 
48
- > 关键约束:**没有可用人设卡之前,不要进入主 SOP**。所有腔调、句式、共鸣切入点都依赖人设卡。
48
+ > 关键约束:**没有可用人设卡之前,不要进入后续步骤**。所有腔调、句式、共鸣切入点都依赖人设卡。
49
49
 
50
50
  加载完成后,向用户明确告知:"本次使用人设:`<name>`,platform_focus = `<值>`"。
51
51
 
@@ -53,7 +53,7 @@
53
53
 
54
54
  ---
55
55
 
56
- ## 第 1 步:确定本次三库内容
56
+ ## 第 2 步:确定本次三库内容
57
57
 
58
58
  按以下优先级确定本次创作使用的三库内容:
59
59
 
@@ -71,7 +71,7 @@
71
71
 
72
72
  远端地址:https://staticpn.siluzan.com/assets/chat/thrju_sofn/
73
73
 
74
- 按第 0 步已加载的 `platform_focus` 选择默认来源:
74
+ 按第 1 步已加载的 `platform_focus` 选择默认来源:
75
75
 
76
76
  - **含 `公众号`** → 优先取公众号专属三库(`<远端地址>/packs/wechat/`):
77
77
  - 流量因子库:<远端地址>/packs/wechat/umferdarthattasafn.md
@@ -83,27 +83,29 @@
83
83
  - 产品资产库:<远端地址>/vorueignasafn.md
84
84
  - 烹调方法库:<远端地址>/matreidsluadferdasafn.md
85
85
 
86
- 使用 grep 命令或全量读取以上文件内容。
86
+ 先把以上每个文件**完整下载到本地临时目录**(如 `~/.siluzan/content-library/.tmp/`),再从本地文件按需或全量读取。
87
+
88
+ > **加载完整性**:下载时必须整文件落盘(`curl -o` / `wget`),**禁止用 `head`、`tail -n`、`| head -n` 等截断管道**,否则后面的条目根本没下载到。落盘后再按需(grep 定位)或全量读取。
87
89
 
88
90
  > **优先级说明**:公众号专属三库(`packs/wechat/`)属于优先级 3 内部的"公众号默认层",**高于全局默认、低于用户文件**,整体顺序为 **1(用户提供)> 2(用户目录)> pack(公众号专属默认)> 全局默认**。即:只要优先级 1/2 命中了三库文件,公众号也直接用它们,**不再取 pack 三库**。
89
- >
90
- > **内容保密硬规则**:优先级 3 的内置默认三库(含 `packs/wechat/`)是内部骨架资产,**只可用于驱动创作,严禁把其原文、条目或远端链接直接展示、粘贴或转述给用户**。用户提供(优先级 1)或用户目录(优先级 2)的三库是用户自己的内容,不受此限制。
91
+
92
+ > **内容保密**:优先级 3 的内置默认三库(含 `packs/wechat/`)是内部骨架资产,**只可用于驱动创作,严禁把其原文、条目或远端链接直接展示、粘贴或转述给用户**。用户提供(优先级 1)或用户目录(优先级 2)的三库是用户自己的内容,不受此限制。
91
93
 
92
94
  ---
93
95
 
94
- ## 第 2 步:按 platform_focus 挂载赛道包
96
+ ## 第 3 步:按 platform_focus 挂载赛道包
95
97
 
96
98
  读人设卡的 `platform_focus` 字段:
97
99
 
98
100
  - 含 `公众号` → 加载 `packs/公众号爆款/overview.md`(黄金骨架、12 项自检、5 大传播弹药、标题模板等结构与质检规范),正文按 pack 的"黄金骨架"。**三库内容以第 1 步确定的为准**:公众号默认走 `packs/wechat/` 远端专属三库,但若优先级 1/2 已命中用户三库,则直接用用户的、不再取 pack 三库(详见第 1 步优先级说明,整体 1 > 2 > pack > 全局默认)。
99
- - 含 `短视频` → 加载 `packs/短视频口播/`(overview + `口播-sop.md`),口播场景**优先走 `口播-sop.md`**(焊点提炼 + 拆解分支 + 开头三要素 + SOP 执行展示);三库仍取主库(第 1 步确定的三库)。
101
+ - 含 `短视频` → 加载 `packs/短视频口播/`(overview + `口播-sop.md`),口播场景**优先走 `口播-sop.md`**;三库仍取主库(第 1 步确定的三库)。
100
102
  - 仅 `通用` → 只用主库,不挂 pack。
101
103
  - **为空** → 询问用户本次写哪个平台,再决定挂哪个 pack。
102
104
  - **多选** → 写稿前询问"本次主要发到哪个平台",按该平台 pack 优先。
103
105
 
104
106
  ---
105
107
 
106
- ## 第 3 步:RAG(按需)
108
+ ## 第 4 步:RAG(按需)
107
109
 
108
110
  如需从平台知识库检索品牌/产品内部素材,调用 `siluzan-cso rag query`(`-q` 内多个短词用**空格**分隔时,CLI 会分检再合并排序;详见 `references/rag.md`),结果归入主 SOP 第 4 步"拆素材"。不用于与文案无关的场景。
109
111
 
@@ -123,21 +125,16 @@
123
125
 
124
126
  ## 输出
125
127
 
126
- - 依据任务向用户交付:成稿、人设卡、三库拆解、SOP 摘要或选题列表等。
127
- - **文件输出**:成稿、人设卡、拆解稿、摘要等**非一两句可说清**的交付物,建议**落盘成独立文件**,避免把长正文堆在对话窗口。
128
- - **如何落盘与呈现**:
129
- 1. **若工具列表里有「文件呈现 / artifacts」类工具**(典型如 `present_files`,或任何能让用户在侧栏 / 工作区以「文件」形式查看与下载的呈现工具):
130
- - 按该工具的约定路径落盘(例如沙箱目录 `/mnt/user-data/outputs/`),调用该工具完成呈现(如把虚拟路径传入 `filepaths`)。
131
- 2. **否则若有「文件写入」类工具**(典型如 `write` / `edit_file` / `create_file`,或允许 shell 重定向写文件):
132
- - 直接写入用户当前工作区目录,在对话中**清楚回报文件的绝对路径**;IDE / 终端环境会让用户自然看到该文件。
133
- 3. **以上都没有的兜底情况**:
134
- - 不落盘文件,直接在对话中给出全文
135
- - **文件命名**:始终采用语义化命名,例如 `<人设>-<选题>-成稿.md`。
136
- - **过程与成稿分离(硬规则)**:SOP 执行记录、三库拆解、焊点提炼、质检记录等**过程性内容**,**禁止**混入成稿文件正文。成稿文件**只放最终可直接使用的正文**(例如可直接念的口播脚本、可直接发布的文章)。过程性内容放在**成稿的上方或下方**单独呈现:
137
- - 若过程性内容也需要落盘,**单独落一个文件**(如 `<人设>-<选题>-SOP执行记录.md`),与成稿文件并列;
138
- - 若不需落盘,则在对话中、成稿文件引用的**上方或下方**简要展示,不要写进成稿文件里。
139
- - **对话内容硬规则**:**禁止**把已落盘文件的长正文再完整粘贴到对话里,只需保留极短说明 —— 摘要、文件名 / 路径、下一步建议。
140
- - 文件正文默认使用 **Markdown** 排版;若你随后进入的场景子文档(例如口播)对正文格式另有硬约束(纯文本、禁用装饰符等),**以该子文档为准**,扩展名可为 `.md` 或 `.txt` 等,但「落盘 + 按工具能力呈现」的原则仍然适用。
128
+ - **交付物**:默认只交付成稿(口播脚本 / 文章等);人设卡、选题列表等按任务需要给。**三库拆解 / SOP 摘要 / 溯源记录**不是默认交付物,仅当用户**明确要求**时才给。成稿等长内容**落盘成独立文件**,别堆在对话里。
129
+ - **落盘与呈现**(按工具能力降级):
130
+ 1. 有「文件呈现 / artifacts」工具(如 `present_files`)→ 落盘到约定路径(如 `/mnt/user-data/outputs/`)后调用呈现。
131
+ 2. 否则有「文件写入」工具(如 `write` / `edit_file`)→ 写入工作区目录,并在对话中回报绝对路径。
132
+ 3. 都没有 直接在对话中给出全文。
133
+ - **文件命名**:语义化,如 `<人设>-<选题>-成稿.md`。
134
+ - **三库 / SOP 过程内容禁止主动外露**:三库溯源、内部库编码(`TF-xxxx` / `PA-xxxx` / `MF-xxxx`)、SOP 步骤、焊点提炼、自检 / 质检明细均为**内部骨架资产**,只用于驱动创作;**严禁**写进成稿正文或罗列在对话里(如"三库溯源:流量因子 TF-0002……"一律不准出现)。仅当用户**明确要求**时才输出,且仍受第 2 步「内容保密」约束(内置默认三库原文与远端链接永不展示)。
135
+ - **过程与成稿分离**:成稿文件**只放最终可直接使用的正文**;过程性内容若需留存,**单独落一个文件**(如 `<人设>-<选题>-SOP执行记录.md`),否则直接丢弃,不在对话中展示。
136
+ - **对话只保留极短说明**:摘要、文件名 / 路径、下一步建议;不得粘贴已落盘的长正文,也不得带三库溯源 / 内部编码 / SOP 步骤。
137
+ - 文件正文默认 **Markdown**;若后续场景子文档(如口播)对格式另有硬约束(纯文本、禁用装饰符等),**以子文档为准**,扩展名可为 `.md` / `.txt`,「落盘 + 按工具能力呈现」原则不变。
141
138
 
142
139
  ## 风格规则
143
140
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  一套专为**短视频口播脚本**设计的可复用骨架。和直接让 AI 写脚本的本质区别:它强制走三库取材、焊点提炼、结构防雷同等完整环节,保证每一条脚本都有库支撑、有焊点逻辑、有可抄文案。
6
6
 
7
- 本 pack 只提供**口播专属 SOP**(`口播-sop.md`):7 步主流程 + 拆解分支 + 焊点提炼 + 开头三要素 + SOP 执行展示格式。
7
+ 本 pack 只提供**口播专属 SOP**(`口播-sop.md`):7 步主流程 + 拆解分支 + 焊点提炼 + 开头三要素;SOP 执行记录**仅**在用户明确要求时输出。
8
8
 
9
9
  三库直接复用**主库**(`assets/` 三库,已是去人设化的通用骨架),口播不单独维护一份重复的库。
10
10
 
@@ -27,7 +27,7 @@
27
27
  | SOP | `sop.md` 12 步(多平台通用) | `口播-sop.md` 7 步(口播专用,含焊点/拆解/开头三要素) |
28
28
  | 三库 | 主库 `assets/`(通用骨架) | **共用主库**(pack 不另带库) |
29
29
  | 人设 | 走 CSO 平台 | 走 CSO 平台(pack 不内置人设) |
30
- | 特色 | 通用质检 | 焊点提炼 + 焊点质检 + 六条输出标准 + SOP 执行展示 |
30
+ | 特色 | 通用质检 | 焊点提炼 + 焊点质检 + 六条输出标准(内部核对,默认不外露) |
31
31
 
32
32
  口播场景**优先走本 pack 的 `口播-sop.md`**,三库取主库。
33
33
 
@@ -55,9 +55,9 @@ packs/短视频口播/
55
55
 
56
56
  pack 不内置任何人设。写稿前从 CSO 平台 `siluzan-cso persona list --json` 拉取目标人设;没有则按 `three-lib-content-workflow/persona-onboarding.md` 流程建一个。
57
57
 
58
- ### 2. 三库取材必须标注来源
58
+ ### 2. 三库取材须内部记录来源
59
59
 
60
- 每一步用到什么因子、句式、结构,都要标 TF / PA / 结构名称编号。确保有据可查、可复用。
60
+ 每一步用到什么因子、句式、结构,须在内部标 TF / PA / 结构名称编号,确保有据可查;**默认不向用户展示**,除非用户明确要求溯源(见 `content-writer.workflow.md`「输出」段)。
61
61
 
62
62
  ### 3. 焊点是灵魂
63
63
 
@@ -1,6 +1,8 @@
1
1
  # 口播脚本生成 SOP
2
2
 
3
- > 本文件是「短视频口播」赛道包的专属 SOP。人设 `platform_focus` 含 `短视频` 时,由 `content-writer.workflow.md` 第 2 步挂载,**口播场景优先走本 SOP**(比通用 `sop.md` 更细:多了焊点提炼、拆解分支、开头三要素、SOP 执行展示格式)。
3
+ > 本文件是「短视频口播」赛道包的专属 SOP。人设 `platform_focus` 含 `短视频` 时,由 `content-writer.workflow.md` 第 3 步挂载,**口播场景优先走本 SOP**(比通用 `sop.md` 更细:多了焊点提炼、拆解分支、开头三要素)。
4
+ >
5
+ > **输出纪律(高于本 SOP 各步「标注来源」表述)**:三库编号、焊点、SOP 步骤等过程信息**只在内部记录**,默认**不**写进对话、不夹带进成稿;仅当用户**明确要求**查看溯源 / SOP 记录时,才按文末「SOP 执行记录」格式输出。详见 `content-writer.workflow.md`「输出」段。
4
6
  >
5
7
  > 人设统一走 CSO 平台(`siluzan-cso persona`),本 SOP 不使用任何本地人设文件。
6
8
 
@@ -14,7 +16,7 @@
14
16
 
15
17
  > 口播与其他平台**共用同一套主库**(主库已是去人设化的通用骨架),本 pack 不再单独维护一份重复的库。口播的独有价值在本 SOP 的方法论(焊点 / 拆解分支 / 开头三要素),不在库。
16
18
 
17
- **三库取材原则**:每一步用到什么因子、什么句式、什么结构,都要明确标注来源(如:TF-0010、PA-0002、烹调方法库·认知重构结构)。这不是形式要求,是确保内容有据可查、可复用的关键。
19
+ **三库取材原则**:每一步用到什么因子、什么句式、什么结构,须在**内部**记录来源(如 TF-0010、PA-0002、烹调方法库·认知重构结构),确保有据可查;**默认不向用户展示**这些编号与溯源,除非用户明确要求。
18
20
 
19
21
  ---
20
22
 
@@ -51,6 +53,7 @@
51
53
  适用场景:账号定位是拆解型,用户提供一条高转化视频脚本,需要输出本账号口播稿。
52
54
 
53
55
  **拆解规则**:
56
+
54
57
  - 拆两三个这条脚本火的原因(反差、同频、结果感、场景感、争议点)
55
58
  - 每次只选 1-2 个点深拆,拆透比拆全更重要
56
59
  - 每个维度至少提供3个品类的可抄文案(不必完整,只针对所拆的点)
@@ -88,11 +91,13 @@
88
91
  **用户提供了热点** → 直接用,找热点与账号定位的情绪交叉点(嫁接点)。明确回答:这个热点能带来什么情绪?和账号受众的真实处境交叉在哪里?
89
92
 
90
93
  **用户没有提供热点** → 主动检索流量因子库:
94
+
91
95
  - 优先召回 `time_sensitive = true` 的条目
92
96
  - 按人设的受众和情绪类型过滤
93
97
  - 召回 1-2 个候选因子,选嫁接点最自然的一个
94
98
 
95
- 然后从库里召回 2-4 个具体 TF 条目,明确标注:
99
+ 然后从库里召回 2-4 个具体 TF 条目,**内部记录**(不向用户展示):
100
+
96
101
  - 每个因子的编号和名称
97
102
  - 为什么这个因子适合这条内容
98
103
  - 热点的分工:热点负责开头同频,其余因子负责中段支撑
@@ -103,10 +108,11 @@
103
108
 
104
109
  ### 第3步:匹配产品资产
105
110
 
106
- 从产品资产库里选取对应的 PA 模板:
107
- - 明确标注选用的 PA 编号和名称
108
- - 说明从这个模板里调用了哪些具体句式(开头句式、过渡句式、结尾句式)
109
- - 如果有金句库或高频模块可用,一并标注
111
+ 从产品资产库里选取对应的 PA 模板,**内部记录**(不向用户展示):
112
+
113
+ - 选用的 PA 编号和名称
114
+ - 从这个模板里调用了哪些具体句式(开头句式、过渡句式、结尾句式)
115
+ - 如果有金句库或高频模块可用,一并记下
110
116
 
111
117
  > 具体句式的腔调由人设卡 `common_phrases` 注入,PA 模板只提供骨架。
112
118
 
@@ -124,11 +130,11 @@
124
130
 
125
131
  **焊点类型决定后续结构**:
126
132
 
127
- | 焊点类型 | 对应结构 |
128
- |---------|---------|
129
- | 这条火在"反常识" | 观点先行 → 拆认知差 → 给可抄句 |
130
- | 这条火在"强结果感" | 结果开头 → 倒推为什么 → 复刻路径 |
131
- | 这条火在"场景代入" | 场景还原 → 拆带入感 → 给模板 |
133
+ | 焊点类型 | 对应结构 |
134
+ | ------------------ | -------------------------------------------- |
135
+ | 这条火在"反常识" | 观点先行 → 拆认知差 → 给可抄句 |
136
+ | 这条火在"强结果感" | 结果开头 → 倒推为什么 → 复刻路径 |
137
+ | 这条火在"场景代入" | 场景还原 → 拆带入感 → 给模板 |
132
138
  | 这条火在"争议立场" | 偏执观点开头 → 拆为什么有人骂有人爱 → 怎么用 |
133
139
 
134
140
  ---
@@ -136,6 +142,7 @@
136
142
  ### 第4.5步:焊点质检
137
143
 
138
144
  检查:
145
+
139
146
  - 焊点是不是自然(不突兀、不生硬)
140
147
  - 价值是不是先给(内容在前,产品在后)
141
148
  - CTA 会不会太硬
@@ -149,11 +156,12 @@
149
156
 
150
157
  **结构由焊点类型决定,不由"写内容"这个动作决定。**
151
158
 
152
- 从烹调方法库明确选取:
153
- - 结构模板(标注库中名称)
154
- - 推进方式(标注库中名称)
155
- - 表现手法(标注库中名称)
156
- - 调用的具体句式(从库中取,逐条标注)
159
+ 从烹调方法库明确选取,**内部记录**(不向用户展示):
160
+
161
+ - 结构模板(库中名称)
162
+ - 推进方式(库中名称)
163
+ - 表现手法(库中名称)
164
+ - 调用的具体句式(从库中取,逐条记下)
157
165
 
158
166
  **防结构雷同**:这条的开头方式、推进方式、结尾方式,和上一条是不是一样?一样就换一个结构。
159
167
 
@@ -168,11 +176,13 @@
168
176
  按「开头抓人 → 中段展开 → 结尾承接」写成可直接念的版本。
169
177
 
170
178
  **开头三要素(至少命中2个)**:
179
+
171
180
  - **价值呈现**:开头就告诉对方能得到什么
172
181
  - **看完即得**:承诺即时回报,降低跳出
173
182
  - **失去焦虑**:不看会错过什么(FOMO 钩子)
174
183
 
175
184
  **写作风格要求**:
185
+
176
186
  - 短句、口语、有节奏,可以直接念出来
177
187
  - 有判断、有画面
178
188
  - 开头 3 秒必须有同频感(让目标受众觉得"你在说我")
@@ -180,6 +190,7 @@
180
190
  - 腔调按人设卡的 `tone` / `pace` / `common_phrases` / `keywords` 注入,命中 `forbidden_expressions` 立即替换
181
191
 
182
192
  **如果是拆解类内容**,结尾必须附:
193
+
183
194
  - 至少 3 个细分产品品类的可抄文案
184
195
  - 每句遵循"先说买家处境,再说你做什么"的结构
185
196
  - 品类由用户指定或自行判断选最贴近的
@@ -189,6 +200,7 @@
189
200
  ### 第7步:终稿自检
190
201
 
191
202
  **通用自检**(必查):
203
+
192
204
  - 有没有废话
193
205
  - 有没有断层
194
206
  - 会不会太像 AI
@@ -199,8 +211,9 @@
199
211
  **专项自检**(人设已加载时必查,从人设卡 `quality_checks` 提取维度):
200
212
  根据人设的受众和目标,检查内容是否符合这个账号"听起来该有的感觉"。
201
213
 
202
- **六条输出质量标准**(每次生成完必须逐条核对):
203
- 1. 流量因子是否从库里取,是否标注了 TF 编号
214
+ **六条输出质量标准**(每次生成完**内部**逐条核对,不向用户展示核对表):
215
+
216
+ 1. 流量因子是否从库里取,内部是否记录了 TF 编号
204
217
  2. 同频是否真正带入了受众处境(不是泛泛的情绪,是他们今天正在经历的事)
205
218
  3. 开头三要素是否至少命中2个
206
219
  4. 是否只拆了 1-2 个点,没有贪多分散
@@ -211,14 +224,9 @@
211
224
 
212
225
  ---
213
226
 
214
- ## SOP 执行展示格式
215
-
216
- 每次生成脚本,必须展示 SOP 执行记录。**SOP 执行记录是过程性内容,禁止混入成稿文件正文**——成稿文件(口播脚本)只放可直接念的脚本正文。SOP 执行记录放在成稿的**上方或下方**单独呈现(详见 `content-writer.workflow.md` 输出段「过程与成稿分离」硬规则):
217
-
218
- - 落盘时:成稿文件只含脚本正文;SOP 执行记录另存为独立文件(如 `<人设>-<选题>-SOP执行记录.md`),或仅在对话中展示。
219
- - 切勿把下面的「SOP 执行记录」段落写进口播脚本文件里。
227
+ ## SOP执行记录
220
228
 
221
- SOP 执行记录格式如下:
229
+ 如用户需要SOP执行记录,请按以下格式输出:
222
230
 
223
231
  ```
224
232
  ## SOP 执行记录
@@ -234,4 +242,5 @@ SOP 执行记录格式如下:
234
242
  **六条输出标准核对**:[逐条✅/❌]
235
243
  ```
236
244
 
237
- 口播脚本正文作为独立交付物(成稿文件正文),不与上面的 SOP 执行记录写在同一文件中。
245
+ > 仅在用户明确提出需求时输出
246
+ > 口播脚本正文作为独立交付物(成稿文件正文),不与上面的 SOP 执行记录写在同一文件中。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "siluzan-cso-cli",
3
- "version": "1.1.27-beta.2",
3
+ "version": "1.1.27-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",