فهرست منبع

docs: 收敛 webnovel-init 与 webnovel-query 并补齐通用缺陷补偿 reference

- init: References 从逐文件清单改为 Step+trigger 绑定表,加 CSV 检索
- query: 从操作手册风格收敛为查询/分析型 skill,中文化 description
- 新增 naming-and-voice-gaps.md (命名同质化/口吻趋同/语汇漂移缺陷补偿)
lingfengQAQ 2 ماه پیش
والد
کامیت
db5912d57d

+ 63 - 0
webnovel-writer/references/shared/naming-and-voice-gaps.md

@@ -0,0 +1,63 @@
+---
+name: naming-and-voice-gaps
+purpose: 跨 skill 通用缺陷补偿——命名同质化、口吻趋同、题材语汇漂移
+---
+
+# Naming and Voice Gaps
+
+> 主服务 skill: `webnovel-write` Step 2(多角色对话、新角色命名)
+> 次服务 skill: `webnovel-init`(角色/书名设定)、`webnovel-plan`(章纲新角色)
+> 内容层级: 提醒层 / 缺陷补偿层 / 知识补充层
+
+---
+
+## 提醒层
+
+- 新角色首次出场时,名字必须和当前活跃角色形成**可区分性**(声韵、字数、字形至少一项不同)
+- 三人以上对话必须让读者仅凭语气就能大致辨认说话人
+- 不同题材有不同的命名审美——玄幻可以古风,都市不能全员古风
+
+## 缺陷补偿层
+
+### 命名同质化
+
+- ❌ 禁止同批角色共享高度相似的字形/声韵模式(如:萧炎、萧寒、萧尘同时出场)
+- ❌ 禁止全员使用冷峻古风字堆叠(如:凌寒、凌霜、凌月)
+- ✅ 必须在字数(双音节 vs 三音节)、声母/韵母、字义方向上形成差异
+
+### 口吻趋同
+
+- ❌ 禁止多角色对话全员同一书面腔——每个角色至少有 1-2 个口语标记
+- ❌ 禁止所有角色都用完整句、标准语序——暴躁者用短句、学者用长句、孩子用口语
+- ✅ 三人以上对话至少给出两类句长或词汇偏好差异
+
+### 题材语汇漂移
+
+- ❌ 都市题材禁止大量使用"汝/吾/且慢"等古风词汇
+- ❌ 玄幻题材禁止使用现代网络梗("yyds"、"绝绝子")除非角色设定如此
+- ✅ 每个题材保持词汇一致性,跨题材用词需有设定依据
+
+### 情绪动词/副词套路化
+
+- ❌ 禁止高频使用"缓缓/淡淡/微微/轻轻"——同一章出现超过 3 次需替换
+- ❌ 禁止"嘴角微微上扬"作为唯一笑容表达
+- ✅ 用具体动作替代模糊副词:`他放下茶杯` 优于 `他缓缓放下茶杯`
+
+## 知识补充层
+
+### 按题材命名风格示例
+
+| 题材 | 推荐风格 | 正例 | 反例 |
+|------|---------|------|------|
+| 玄幻 | 双/三音节,古风但不全员一个味 | 林烬、沈砚、顾停舟 | 凌寒、凌霜、凌月 |
+| 都市 | 常见中文名,区分年龄感 | 张远山、李小鹿、王铁柱 | 慕容玄霜、上官凌风 |
+| 仙侠 | 道号+俗名双轨 | 俗名陈三、道号清虚子 | 全员道号且风格雷同 |
+| 现言 | 日常化,区分社会阶层 | 顾辞、方小年、赵姐 | 全员三字古风名 |
+
+### 口吻差异化示例
+
+| 角色类型 | 句长 | 词汇标记 | 示例 |
+|---------|------|---------|------|
+| 暴躁少年 | 短句,断句多 | 口语化,带语气词 | "滚!别废话!" |
+| 老学究 | 长句,从句多 | 文言痕迹,引经据典 | "此事……若依老夫所见,恐怕不妥。" |
+| 市井商人 | 中等,话术感 | 客套+算计 | "张爷您说笑了,小本生意,哪敢怠慢。" |

+ 31 - 88
webnovel-writer/skills/webnovel-init/SKILL.md

@@ -15,98 +15,41 @@ allowed-tools: Read Write Edit Grep Bash Task AskUserQuestion WebSearch WebFetch
 ## 执行原则
 
 1. 先收集,再生成;未过充分性闸门,不执行 `init_project.py`。
-2. 分波次提问,每轮只问当前缺失且会阻塞下一步”的信息。
+2. 分波次提问,每轮只问当前缺失且会阻塞下一步”的信息。
 3. 允许调用 `Read/Grep/Bash/Task/AskUserQuestion/WebSearch/WebFetch` 辅助收集。
 4. 用户已明确的信息不重复问;冲突信息优先让用户裁决。
 5. Deep 模式优先完整性,允许慢一点,但禁止漏关键字段。
 
-## 引用加载等级(strict, lazy)
-
-采用分级加载,避免一次性灌入全部资料:
-
-- L0:未确认任务前,不预加载参考。
-- L1:每个阶段仅加载该阶段“必读”文件。
-- L2:仅在题材、金手指、创意约束触发条件满足时加载扩展参考。
-- L3:市场趋势类、时效类资料仅在用户明确要求时加载。
-
-路径约定:
-- `references/...` 相对当前 skill 目录(`${CLAUDE_PLUGIN_ROOT}/skills/webnovel-init/references/...`)。
-- `templates/...` 相对插件根目录(`${CLAUDE_PLUGIN_ROOT}/templates/...`)。
-
-默认加载清单:
-- L1(启动前):`references/genre-tropes.md`
-- L2(按需):
-  - 题材模板:`templates/genres/{genre}.md`
-  - 金手指:`../../templates/golden-finger-templates.md`
-  - 世界观:`references/worldbuilding/faction-systems.md`
-  - 创意约束:按下方“逐文件引用清单”触发加载
-- L3(显式请求):
-  - `references/creativity/market-trends-2026.md`
-
-## References(逐文件引用清单)
-
-### 根目录
-
-- `references/genre-tropes.md`
-  - 用途:Step 1 题材归一化、题材特征提示。
-  - 触发:所有项目必读。
-- `references/system-data-flow.md`
-  - 用途:初始化产物与后续 `/plan`、`/write` 的数据流一致性检查。
-  - 触发:Step 1 预检必读。
-
-### worldbuilding
-
-- `references/worldbuilding/character-design.md`
-  - 用途:Step 2 角色维度补问(目标、缺陷、动机、反差)。
-  - 触发:用户人物信息抽象或扁平时加载。
-- `references/worldbuilding/faction-systems.md`
-  - 用途:Step 4 势力格局与组织层级设计。
-  - 触发:Step 4 默认加载。
-- `references/worldbuilding/power-systems.md`
-  - 用途:Step 4 力量体系类型与边界定义。
-  - 触发:涉及修仙/玄幻/高武/异能时加载。
-- `references/worldbuilding/setting-consistency.md`
-  - 用途:Step 6 一致性复述前做设定冲突检查。
-  - 触发:Step 6 默认加载。
-- `references/worldbuilding/world-rules.md`
-  - 用途:Step 4 世界规则与禁忌项收束。
-  - 触发:Step 4 默认加载。
-
-### creativity
-
-- `references/creativity/creativity-constraints.md`
-  - 用途:Step 5 创意约束包主 schema。
-  - 触发:Step 5 必读。
-- `references/creativity/category-constraint-packs.md`
-  - 用途:Step 5 按平台/题材选择约束包模板。
-  - 触发:Step 5 必读。
-- `references/creativity/creative-combination.md`
-  - 用途:复合题材(A+B)融合规则。
-  - 触发:用户选择复合题材时加载。
-- `references/creativity/inspiration-collection.md`
-  - 用途:用户卡住时提供卖点/钩子候选。
-  - 触发:Step 1 或 Step 5 卡顿时加载。
-- `references/creativity/selling-points.md`
-  - 用途:Step 5 卖点生成与筛选。
-  - 触发:Step 5 必读。
-- `references/creativity/market-positioning.md`
-  - 用途:目标读者/平台定位与商业化语义统一。
-  - 触发:Step 1 用户提及平台或商业目标时加载。
-- `references/creativity/market-trends-2026.md`
-  - 用途:时间敏感市场趋势参考。
-  - 触发:仅用户明确要求“参考当下趋势”时加载。
-- `references/creativity/anti-trope-xianxia.md`
-  - 用途:反套路库(修仙/玄幻/高武/西幻)。
-  - 触发:题材命中对应映射时加载。
-- `references/creativity/anti-trope-urban.md`
-  - 用途:反套路库(都市/历史)。
-  - 触发:题材命中对应映射时加载。
-- `references/creativity/anti-trope-game.md`
-  - 用途:反套路库(游戏/科幻/末世)。
-  - 触发:题材命中对应映射时加载。
-- `references/creativity/anti-trope-rules-mystery.md`
-  - 用途:反套路库(规则/悬疑/灵异/克苏鲁)。
-  - 触发:题材命中对应映射时加载。
+## 引用加载策略
+
+### md 必读
+
+| Step | Trigger | Reference |
+|------|---------|-----------|
+| Step 1 | always | `references/system-data-flow.md` |
+| Step 1 | always | `references/genre-tropes.md` |
+| 卖点/题材采集 | always | `references/genre-profiles.md` |
+
+### md 按需
+
+| Step | Trigger | Reference |
+|------|---------|-----------|
+| Step 2 | 用户人物扁平 | `references/worldbuilding/character-design.md` |
+| Step 4 | always | `references/worldbuilding/faction-systems.md` |
+| Step 4 | 涉及修仙/玄幻/高武/异能 | `references/worldbuilding/power-systems.md` |
+| Step 4 | always | `references/worldbuilding/world-rules.md` |
+| Step 5 | always | `references/creativity/creativity-constraints.md` |
+| Step 5 | always | `references/creativity/selling-points.md` |
+| Step 5 | 复合题材 | `references/creativity/creative-combination.md` |
+| Step 5 | 卡顿 | `references/creativity/inspiration-collection.md` |
+| Step 5 | 题材映射命中 | `references/creativity/anti-trope-*.md` |
+| Step 6 | always | `references/worldbuilding/setting-consistency.md` |
+
+### CSV 检索
+
+| Step | Trigger | 检索命令 |
+|------|---------|---------|
+| 角色/书名/势力设定 | 用户开始设定命名 | `python -X utf8 “${SCRIPTS_DIR}/reference_search.py” --skill init --table 命名规则 --query “{命名对象} {题材}” --genre {题材}` |
 
 ## 工具策略(按需)
 

+ 46 - 158
webnovel-writer/skills/webnovel-query/SKILL.md

@@ -1,192 +1,80 @@
 ---
 name: webnovel-query
-description: Queries project settings for characters, powers, factions, items, and foreshadowing. Supports urgency analysis and golden finger status. Activates when user asks about story elements or /webnovel-query.
+description: 查询项目设定、角色、力量体系、势力、伏笔等信息。支持紧急度分析与金手指状态查询。
 allowed-tools: Read Grep Bash AskUserQuestion
 ---
 
 # Information Query Skill
 
-## Project Root Guard(必须先确认)
+## Use when
 
-- Claude Code 的“工作区根目录”不一定等于“书项目根目录”。常见结构:工作区为 `D:\wk\xiaoshuo`,书项目为 `D:\wk\xiaoshuo\凡人资本论`。
-- 必须先解析真实书项目根(必须包含 `.webnovel/state.json`),后续所有读写路径都以该目录为准。
-- **禁止**在插件目录 `${CLAUDE_PLUGIN_ROOT}/` 下读取或写入项目文件
+用户询问关于故事设定、角色、力量体系、势力、伏笔、金手指、节奏等项目内信息时触发。
 
-环境设置(bash 命令执行前):
-```bash
-export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
-
-if [ -z "${CLAUDE_PLUGIN_ROOT}" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query" ]; then
-  echo "ERROR: 未设置 CLAUDE_PLUGIN_ROOT 或缺少目录: ${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query" >&2
-  exit 1
-fi
-export SKILL_ROOT="${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query"
-
-if [ -z "${CLAUDE_PLUGIN_ROOT}" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/scripts" ]; then
-  echo "ERROR: 未设置 CLAUDE_PLUGIN_ROOT 或缺少目录: ${CLAUDE_PLUGIN_ROOT}/scripts" >&2
-  exit 1
-fi
-export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
-
-export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
-```
-
-## Workflow Checklist
-
-Copy and track progress:
+## 项目根保护
 
+```bash
+export WORKSPACE_ROOT=”${CLAUDE_PROJECT_DIR:-$PWD}”
+export SCRIPTS_DIR=”${CLAUDE_PLUGIN_ROOT}/scripts”
+export SKILL_ROOT=”${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query”
+export PROJECT_ROOT=”$(python “${SCRIPTS_DIR}/webnovel.py” --project-root “${WORKSPACE_ROOT}” where)”
 ```
-信息查询进度:
-- [ ] Step 1: 识别查询类型
-- [ ] Step 2: 加载对应参考文件
-- [ ] Step 3: 加载项目数据 (state.json)
-- [ ] Step 4: 确认上下文充足
-- [ ] Step 5: 执行查询
-- [ ] Step 6: 格式化输出
-```
-
----
-
-## Reference Loading Levels (strict, lazy)
-
-- L0: 先识别查询类型,不预加载全部参考。
-- L1: 所有查询仅加载基础数据流规范。
-- L2: 仅按查询类型加载对应专题参考。
 
-### L1 (minimum)
-- [system-data-flow.md](references/system-data-flow.md)
+- `PROJECT_ROOT` 必须包含 `.webnovel/state.json`
+- **禁止**在 `${CLAUDE_PLUGIN_ROOT}/` 下读取或写入项目文件
 
-### L2 (conditional by query type)
-- 伏笔查询:[foreshadowing.md](references/advanced/foreshadowing.md)
-- 节奏查询:[strand-weave-pattern.md](../../references/shared/strand-weave-pattern.md)
-- 标签格式查询:[tag-specification.md](references/tag-specification.md)
+## 查询类型识别
 
-Do not load two or more L2 files unless the user request clearly spans multiple query types.
-
-## Step 1: 识别查询类型
-
-| 关键词 | 查询类型 | 需加载 |
+| 关键词 | 查询类型 | 数据源 |
 |--------|---------|--------|
-| 角色/主角/配角 | 标准查询 | system-data-flow.md |
-| 境界/筑基/金丹 | 标准查询 | system-data-flow.md |
-| 伏笔/紧急伏笔 | 伏笔分析 | foreshadowing.md |
-| 金手指/系统 | 金手指状态 | system-data-flow.md |
-| 节奏/Strand | 节奏分析 | strand-weave-pattern.md |
+| 角色/主角/配角 | 标准查询 | 主角卡.md, 角色库/ |
+| 境界/筑基/金丹 | 标准查询 | 力量体系.md |
+| 宗门/势力/地点 | 标准查询 | 世界观.md |
+| 伏笔/紧急伏笔 | 伏笔分析 | state.json + foreshadowing.md |
+| 金手指/系统 | 金手指状态 | state.json |
+| 节奏/Strand | 节奏分析 | state.json + strand-weave-pattern.md |
 | 标签/实体格式 | 格式查询 | tag-specification.md |
 
-## Step 2: 加载对应参考文件
-
-**所有查询必须执行**:
-```bash
-cat "${SKILL_ROOT}/references/system-data-flow.md"
-```
-
-**伏笔查询额外执行**:
-```bash
-cat "${SKILL_ROOT}/references/advanced/foreshadowing.md"
-```
-
-**节奏查询额外执行**:
-```bash
-cat "${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md"
-```
-
-**标签格式查询额外执行**:
-```bash
-cat "${SKILL_ROOT}/references/tag-specification.md"
-```
-
-## Step 3: 加载项目数据
-
-```bash
-cat "$PROJECT_ROOT/.webnovel/state.json"
-```
-
-## Step 4: 确认上下文充足
+## 引用加载策略
 
-**检查清单**:
-- [ ] 查询类型已识别
-- [ ] 对应参考文件已加载
-- [ ] state.json 已加载
-- [ ] 知道在哪里搜索答案
+先识别查询类型,再按需加载:
 
-**如有缺失 → 返回对应 Step**
+| 查询类型 | Reference |
+|---------|-----------|
+| 所有查询 | `references/system-data-flow.md` |
+| 伏笔分析 | `references/advanced/foreshadowing.md` |
+| 节奏分析 | `references/shared/strand-weave-pattern.md` |
+| 格式查询 | `references/tag-specification.md` |
 
-## Step 5: 执行查询
+不得同时加载两个以上 L2 文件,除非用户请求明确跨多类型。
 
-### 标准查询
+## 查询流程
 
-| 关键词 | 搜索目标 |
-|--------|---------|
-| 角色/主角/配角 | 主角卡.md, 角色库/ |
-| 境界/实力 | 力量体系.md |
-| 宗门/势力 | 世界观.md |
-| 物品/宝物 | 物品库/ |
-| 地点/秘境 | 世界观.md |
+1. **识别查询类型**:根据用户关键词匹配上表
+2. **加载参考**:只加载该类型需要的 reference
+3. **加载数据**:`cat “$PROJECT_ROOT/.webnovel/state.json”`
+4. **确认上下文充足**:查询类型已识别 + 参考已加载 + state 已加载
+5. **执行查询**:按类型检索对应数据源
+6. **格式化输出**:按下方模板输出
 
-### 伏笔紧急度分析
-
-**三层分类**(来自 foreshadowing.md):
-- **核心伏笔**: 主线剧情 - 权重 3.0x
-- **支线伏笔**: 配角/支线 - 权重 2.0x
-- **装饰伏笔**: 氛围/细节 - 权重 1.0x
-
-**紧急度公式**:
-```
-紧急度 = (已过章节 / 目标章节) × 层级权重
-```
-
-**状态判定**:
-- 🔴 Critical: 超过目标 OR 核心 >20 章
-- 🟡 Warning: >80% 目标 OR 支线 >30 章
-- 🟢 Normal: 计划范围内
-
-**快速分析**:
-```bash
-python "${SCRIPTS_DIR}/webnovel.py" --project-root "$PROJECT_ROOT" status -- --focus urgency
-```
-
-### 金手指状态
-
-输出包含:
-- 基本信息(名称/类型/激活章节)
-- 当前等级和进度
-- 已解锁技能及冷却
-- 待解锁技能预览
-- 升级条件
-- 发展建议
-
-### Strand 节奏分析
-
-**快速分析**:
-```bash
-python "${SCRIPTS_DIR}/webnovel.py" --project-root "$PROJECT_ROOT" status -- --focus strand
-```
-
-**检查警告**:
-- Quest >5 连续章
-- Fire >10 章未出现
-- Constellation >15 章未出现
-
-## Step 6: 格式化输出
+## 输出格式
 
 ```markdown
 # 查询结果:{关键词}
 
-## 📊 概要
+## 概要
 - **匹配类型**: {type}
 - **数据源**: state.json + 设定集 + 大纲
 - **匹配数量**: X 条
 
-## 🔍 详细信息
+## 详细信息
+{结构化数据,含文件路径和行号}
 
-### 1. Runtime State (state.json)
-{结构化数据}
-**Source**: `.webnovel/state.json` (lines XX-XX)
+## 数据一致性检查
+{state.json 与静态文件的差异,若无差异则省略}
+```
 
-### 2. 设定集匹配结果
-{匹配内容,含文件路径和行号}
+## 边界与失败恢复
 
-## ⚠️ 数据一致性检查
-{state.json 与静态文件的差异}
-```
+- 只读操作,不修改任何项目文件
+- 若数据源缺失,明确告知用户缺少什么文件
+- 若查询无匹配,返回空结果并建议检查范围