Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, chapter_file.name)\n if match:\n chapter_num = int(match.group(1))\n chapter_title = match.group(2)\n else:\n chapter_num = len(chapters) + 1\n chapter_title = chapter_file.stem\n\n chapters.append({\n 'file': chapter_file,\n 'number': chapter_num,\n 'title': chapter_title\n })\n\n return chapters\n\n\ndef build_translation_prompt(novel_info: dict, chapter_content: str, chapter_title: str) -> str:\n \"\"\"构建翻译提示词\"\"\"\n prompt = f\"\"\"# Translation Task\n\nYou are a professional novel translator. Translate the following Chinese novel chapter into fluent English.\n\n## Novel Information\n- Title: {novel_info['title']}\n- Author: {novel_info['author']}\n- Genre: {novel_info['genre']}\n- Synopsis: {novel_info['synopsis']}\n\n## Characters\n{novel_info['characters'][:2000] if novel_info['characters'] else 'N/A'}\n\n## Worldview\n{novel_info['worldbuilding'][:2000] if novel_info['worldbuilding'] else 'N/A'}\n\n## Translation Requirements\n1. Maintain the narrative rhythm and emotional tension\n2. Use pinyin for character names (e.g., Zhang Wei)\n3. Keep Chinese-specific terms (gongfu, qigong) with pinyin or explanatory translation\n4. Preserve chapter structure with \"## Title\" and \"## Body\" headings\n5. Use modern English, avoid stiff literal translations\n6. Keep dialogue natural and fluent\n7. Translate the chapter title as well\n\n## Chapter Title\n{chapter_title}\n\n## Chapter to Translate\n{chapter_content}\n\n## Output Format\nProvide only the translated chapter in Markdown format, with \"## Title\" for the chapter title and \"## Body\" for the content. Do not include any additional explanation.\n\"\"\"\n return prompt\n\n\ndef translate_with_ai(prompt: str) -> str:\n \"\"\"调用 AI 进行翻译\"\"\"\n # 这里需要根据用户的 AI 配置来调用\n # 默认使用环境变量或配置文件中的 API\n # 暂时返回占位符,实际使用时需要集成用户的 AI API\n\n print(\"请配置 AI API 以进行翻译。当前支持:\")\n print(\" - OpenAI API (设置 OPENAI_API_KEY)\")\n print(\" - Anthropic API (设置 ANTHROPIC_API_KEY)\")\n print(\" - Google Gemini API (设置 GEMINI_API_KEY)\")\n\n # 示例:使用 OpenAI\n # from openai import OpenAI\n # client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))\n # response = client.chat.completions.create(\n # model=\"gpt-4o\",\n # messages=[{\"role\": \"user\", \"content\": prompt}]\n # )\n # return response.choices[0].message.content\n\n raise NotImplementedError(\"请在脚本中配置 AI API\")\n\n\ndef save_translated_chapter(output_path: Path, title: str, content: str):\n \"\"\"保存翻译后的章节\"\"\"\n output_path.parent.mkdir(parents=True, exist_ok=True)\n\n with open(output_path, 'w', encoding='utf-8') as f:\n f.write(f\"## {title}\\n\\n\")\n f.write(f\"## Body\\n\\n\")\n f.write(content)\n\n\ndef translate_novel(\n novel_dir: Path,\n output_dir: str = 'en',\n chapters: str = None\n):\n \"\"\"翻译小说\"\"\"\n novel_dir = Path(novel_dir)\n\n if not novel_dir.exists():\n print(f\"错误:目录不存在 - {novel_dir}\")\n return False\n\n print(f\"开始翻译:{novel_dir.name}\")\n\n # 提取小说信息\n novel_info = extract_novel_info(novel_dir)\n print(f\"书名:{novel_info['title']}\")\n print(f\"作者:{novel_info['author']}\")\n\n # 确定输出目录\n output_path = novel_dir / output_dir\n\n # 查找章节\n chapter_files = find_chapters(novel_dir)\n\n if not chapter_files:\n print(f\"错误:未找到章节文件\")\n return False\n\n print(f\"找到 {len(chapter_files)} 个章节\")\n\n # 解析要翻译的章节范围\n chapters_to_translate = None\n if chapters:\n chapters_to_translate = parse_chapter_range(chapters, len(chapter_files))\n\n # 翻译每个章节\n for i, chapter in enumerate(chapter_files):\n if chapters_to_translate and chapter['number'] not in chapters_to_translate:\n continue\n\n print(f\"\\n翻译第 {chapter['number']} 章:{chapter['title']}\")\n\n # 提取章节内容\n content = extract_chapter_content(chapter['file'])\n\n # 构建提示词\n prompt = build_translation_prompt(novel_info, content, chapter['title'])\n\n try:\n # 调用 AI 翻译\n translated_content = translate_with_ai(prompt)\n\n # 保存翻译结果\n output_file = output_path / f\"Chapter-{chapter['number']:03d}.md\"\n save_translated_chapter(output_file, chapter['title'], translated_content)\n\n print(f\"已保存:{output_file}\")\n\n except NotImplementedError as e:\n print(f\"错误:{e}\")\n return False\n except Exception as e:\n print(f\"翻译第 {chapter['number']} 章失败:{e}\")\n continue\n\n print(f\"\\n翻译完成!英文版保存在:{output_path}\")\n return True\n\n\ndef parse_chapter_range(chapters_str: str, max_chapters: int) -> set:\n \"\"\"解析章节范围字符串,如 \"1,3-5,10\" \"\"\"\n chapters = set()\n parts = chapters_str.split(',')\n\n for part in parts:\n part = part.strip()\n if '-' in part:\n start, end = part.split('-')\n chapters.update(range(int(start), int(end) + 1))\n else:\n chapters.add(int(part))\n\n return chapters\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description='将中文小说翻译为英文版本',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog='''\n示例:\n python scripts/translate_to_english.py novels/书名\n python scripts/translate_to_english.py novels/书名 --chapters \"1,3-5\"\n python scripts/translate_to_english.py novels/书名 -o en\n'''\n )\n parser.add_argument('novel_dir', help='小说项目目录路径')\n parser.add_argument('-o', '--output', default='en', help='输出目录 (默认:en)')\n parser.add_argument('--chapters', help='要翻译的章节范围,如 \"1,3-5,10\"')\n\n args = parser.parse_args()\n\n success = translate_novel(\n Path(args.novel_dir),\n output_dir=args.output,\n chapters=args.chapters\n )\n sys.exit(0 if success else 1)\n\n\nif __name__ == '__main__':\n main()\n```\n\n**Step 2: Commit**\n\n```bash\ngit add scripts/translate_to_english.py\ngit commit -m \"feat: add English translation script\"\n```\n\n---\n\n## Task 3: Update generate_epub.py - Add Language Support\n\n**Files:**\n- Modify: `scripts/generate_epub.py:135-153` (generate_epub function signature)\n- Modify: `scripts/generate_epub.py:300-342` (main function)\n\n**Step 1: Add lang parameter to generate_epub function**\n\nReplace the generate_epub function signature (around line 135):\n\n```python\ndef generate_epub(\n novel_dir: Path,\n output_path: Path,\n author_override: str = None,\n lang: str = 'zh-CN'\n) -> bool:\n```\n\nAdd after line 152 (after `author = author_override...`):\n\n```python\n # 设置语言\n if lang == 'en':\n output_lang = 'en'\n # 查找英文目录\n en_dir = novel_dir / 'en'\n if en_dir.exists():\n novel_dir = en_dir\n # 尝试读取英文大纲获取英文书名\n en_outline = en_dir / '00-outline.md'\n if en_outline.exists():\n with open(en_outline, 'r', encoding='utf-8') as f:\n en_content = f.read()\n en_title_match = re.search(r'^#\\s*(.+?)

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, en_content, re.MULTILINE)\n if en_title_match:\n title = en_title_match.group(1).strip()\n else:\n output_lang = 'zh-CN'\n```\n\n**Step 2: Update content.opf language**\n\nFind the line around 189:\n```python\n \u003cdc:language>zh-CN\u003c/dc:language>\n```\n\nReplace with:\n```python\n \u003cdc:language>{output_lang}\u003c/dc:language>\n```\n\n**Step 3: Update CLI to support --lang parameter**\n\nIn main() function, around line 315, add:\n\n```python\n parser.add_argument('--lang', default='zh-CN', choices=['zh-CN', 'en'],\n help='语言:zh-CN (中文) 或 en (英文)')\n```\n\nAnd update the generate_epub call (around line 337):\n\n```python\n success = generate_epub(novel_dir, output_path, args.author, args.lang)\n```\n\n**Step 4: Commit**\n\n```bash\ngit add scripts/generate_epub.py\ngit commit -m \"feat: add --lang parameter for English EPUB export\"\n```\n\n---\n\n## Task 4: Update SKILL.md Export Section - Add Language Parameter\n\n**Files:**\n- Modify: `SKILL.md:98-111` (Export section)\n\n**Step 1: Update export documentation**\n\nReplace the Export section with:\n\n````markdown\n## Export\n\n当用户要求导出 EPUB 时:\n\n1. 确认小说目录路径(用户已提供或在 novels/ 下查找)\n2. 运行导出脚本:\n ```bash\n python3 scripts/generate_epub.py \u003c小说目录路径>\n ```\n3. 可选参数:\n - `--author \u003c作者名>` 覆盖大纲中的作者\n - `-o \u003c输出路径>` 指定输出文件位置\n - `--lang \u003c语言>` 指定语言 (zh-CN 中文 / en 英文)\n4. 英文版 EPUB 导出示例:\n ```bash\n python3 scripts/generate_epub.py \u003c小说目录路径> --lang en\n ```\n5. 告诉用户生成的 EPUB 文件路径\n````\n\n**Step 2: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"docs: update export section with language parameter\"\n```\n\n---\n\n## Summary\n\n完成以上 4 个任务后,功能实现完毕:\n\n| Task | Description |\n|------|-------------|\n| 1 | SKILL.md 添加翻译模式文档 |\n| 2 | 创建 translate_to_english.py 翻译脚本 |\n| 3 | generate_epub.py 添加 --lang 参数 |\n| 4 | 更新 Export 文档说明 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":14535,"content_sha256":"5bc81ab285d17385b726938a35f7477e05523a39fa1fc20cb0cea5ecc2d76eee"},{"filename":"docs/plans/2026-03-20-human-ai-collaboration-design.md","content":"# 人机协作边界设计\n\n## 背景\n\n当前 skill 是纯 AI 写作流程,但实际使用中,用户往往是\"人机混合\"写作:\n- 用户自己写了某一段,让 AI 继续\n- AI 写的初稿,用户修改后让 AI 继续\n- 用户提供设定和大纲,AI 负责具体写作\n\n但缺乏明确的协作边界和交接机制,导致:\n- AI 写的和用户想的不一样\n- 风格不一致\n- 上下文丢失\n\n## 目标\n\n创建人机协作系统:\n1. **SKILL.md** — 增加 `## 人机协作` 章节\n2. **模板** `08-人机协作.md` — 协作分工、风格参考、交接协议\n\n## 设计方案\n\n### 1. 协作分工指南\n\n明确哪些适合人类写,哪些适合 AI 写:\n\n| 内容类型 | 人类写 | AI 写 | 说明 |\n|----------|--------|--------|------|\n| 核心设定 | ✅ | | 人物性格、核心冲突、底线 |\n| 关键情节 | ✅ | | 重大转折、结局设计 |\n| 对白风格 | ✅ | | 人物语言特点 |\n| 具体场景 | | ✅ | 场景描写、环境渲染 |\n| 过渡衔接 | | ✅ | 章节之间的过渡 |\n| 扩写 | | ✅ | 已有大纲的详细内容展开 |\n| 修改 | ✅ | | 明确指出问题所在 |\n\n### 2. 上下文传递机制\n\n每次让 AI 继续写之前,传递上下文:\n\n```markdown\n## 当前进度\n- 章节:第X章\n- 当前场景:...\n- 主要人物:...\n- 上文关键事件:...\n\n## 写作要求\n- 继续写:...(具体说明要写什么)\n- 风格参考:...(文风要求)\n- 注意:...(特别注意事项)\n```\n\n### 3. 风格参考示例\n\n提供风格示例,让 AI 参照:\n\n```markdown\n## 风格参考\n\n### 某角色的对白风格\n\"...\"(示例对白)\n\n### 某场景的描写风格\n\"...\"(示例描写)\n```\n\n### 4. 交接协议\n\n人类修改完一段后,告诉 AI:\n\n```markdown\n## 人类修改记录\n- 修改位置:第X章 第Y段\n- 修改原因:...\n- 继续要求:...\n\n## 上一段结尾\n\"...\"(引用上段结尾,让 AI 接上)\n```\n\n## 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 增加 `## 人机协作` 章节 |\n| `references/08-人机协作.md` | 新增协作模板 |\n\n## 待实施\n\n- [ ] 更新 `SKILL.md` 增加人机协作章节\n- [ ] 创建 `references/08-人机协作.md` 模板\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2231,"content_sha256":"a277995bce64575cd8345d33b668b78e8a3dadcd838fb549a5cdba56da0fdcbd"},{"filename":"docs/plans/2026-03-20-human-ai-collaboration-implementation.md","content":"# Human-AI Collaboration Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add human-AI collaboration system to SKILL.md and create standalone template.\n\n**Architecture:**\n1. Update SKILL.md - add human-AI collaboration section\n2. Create `references/08-人机协作.md` template\n\n**Tech Stack:** Plain Markdown files.\n\n---\n\n## Task 1: Update SKILL.md - Add Human-AI Collaboration Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find insertion point**\n\nConsider adding after \"## 叙事节奏曲线\" or in a logical workflow position.\n\n**Step 2: Insert the new section**\n\n```markdown\n## 人机协作\n\n当用户以人机混合方式写作时,按以下指南执行:\n\n### 协作分工\n\n| 内容类型 | 人类写 | AI 写 | 说明 |\n|----------|--------|--------|------|\n| 核心设定 | ✅ | | 人物性格、核心冲突、底线 |\n| 关键情节 | ✅ | | 重大转折、结局设计 |\n| 对白风格 | ✅ | | 人物语言特点 |\n| 具体场景 | | ✅ | 场景描写、环境渲染 |\n| 过渡衔接 | | ✅ | 章节之间的过渡 |\n| 扩写 | | ✅ | 已有大纲的详细内容展开 |\n| 修改 | ✅ | | 明确指出问题所在 |\n\n### 上下文传递\n\n每次让 AI 继续写之前,必须传递上下文:\n\n```markdown\n## 当前进度\n- 章节:第X章\n- 当前场景:...\n- 主要人物:...\n- 上文关键事件:...\n\n## 写作要求\n- 继续写:...(具体说明要写什么)\n- 风格参考:...(文风要求)\n- 注意:...(特别注意事项)\n```\n\n### 交接协议\n\n人类修改完一段后,告诉 AI:\n\n```markdown\n## 人类修改记录\n- 修改位置:第X章 第Y段\n- 修改原因:...\n- 继续要求:...\n\n## 上一段结尾\n\"...\"(引用上段结尾,让 AI 接上)\n```\n\n**详细模板:** [references/08-人机协作.md](references/08-人机协作.md)\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add human-AI collaboration section to SKILL.md\n\nAdd ## 人机协作 section with:\n- Collaboration division (what humans vs AI should write)\n- Context passing mechanism\n- Handoff protocol for human modifications\n- Reference to 08-人机协作.md template\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 08-人机协作.md Template\n\n**Files:**\n- Create: `references/08-人机协作.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 人机协作\n\n> 本文件用于人机混合写作时的上下文传递和风格参考。\n\n## 协作分工\n\n### 人类负责\n\n- [ ] 核心设定(人物性格、核心冲突、底线)\n- [ ] 关键情节(重大转折、结局设计)\n- [ ] 对白风格定义(人物语言特点)\n- [ ] 修改(明确指出问题所在)\n\n### AI 负责\n\n- [ ] 具体场景描写\n- [ ] 环境渲染\n- [ ] 过渡衔接\n- [ ] 大纲扩写\n\n## 上下文传递\n\n当需要 AI 继续写作时,填写以下内容:\n\n```markdown\n## 当前进度\n- 章节:第X章\n- 当前场景:\n- 主要人物:\n- 上文关键事件:\n\n## 写作要求\n- 继续写:\n- 风格参考:\n- 注意:\n```\n\n## 风格参考\n\n### 角色对白风格\n\n| 角色 | 对白特点 | 示例 |\n|------|----------|------|\n| 主角 | ... | \"...\" |\n| 配角A | ... | \"...\" |\n\n### 场景描写风格\n\n| 场景类型 | 描写要点 | 示例 |\n|----------|----------|------|\n| 室内 | ... | \"...\" |\n| 户外 | ... | \"...\" |\n| 战斗 | ... | \"...\" |\n\n## 交接记录\n\n当人类修改完一段后,记录:\n\n```markdown\n## 人类修改记录\n- 修改位置:第X章 第Y段\n- 修改原因:\n- 继续要求:\n\n## 上一段结尾\n\"...\"\n```\n\n### 修改历史\n\n| 日期 | 位置 | 修改内容 | 后续要求 |\n|------|------|----------|----------|\n| ... | ... | ... | ... |\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/08-人机协作.md\ngit commit -m \"feat: add human-AI collaboration template\n\nAdd references/08-人机协作.md:\n- Collaboration division (human vs AI responsibilities)\n- Context passing template\n- Style reference (character dialogue, scene descriptions)\n- Handoff record template with history\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Update SKILL.md - add 人机协作 section | ⬜ |\n| 2 | Create references/08-人机协作.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4441,"content_sha256":"5d5be1aac3fc2349b563750e359c572e5d0f497097e78c2d15baf4e45e693a0f"},{"filename":"docs/plans/2026-03-20-multiline-narrative-design.md","content":"# 多线叙事管理设计\n\n## 背景\n\n当前 skill 缺乏多线叙事的管理机制。当用户写群像或多视角小说时,会遇到:\n\n- 篇幅分配不均(某条线写太多,其他线被遗忘)\n- 某条线\"消失\"太久(读者会忘记这条线)\n- 视角切换混乱(读者不知道现在是谁的视角)\n- 多线交汇困难(各条线怎么收拢到同一个节点)\n\n## 目标\n\n创建独立的多线叙事管理模板 `03-多线管理.md`,包含:\n1. 篇幅分配规则\n2. 线状态跟踪机制\n3. 视角切换规则\n4. 交汇设计\n\n## 设计方案\n\n### 1. 多线管理模板结构\n\n```markdown\n# 多线叙事管理\n\n## 叙事线总览\n\n| 叙事线 | 核心人物 | 主要目标 | 预计占比 |\n|--------|----------|----------|----------|\n| 主线 | 主角 | 核心冲突 | 50% |\n| 副线A | 配角X | 支线目标1 | 20% |\n| 副线B | 配角Y | 支线目标2 | 20% |\n| 暗线 | 反派 | 潜伏目标 | 10% |\n\n**占比说明:** 占比是指该线在全书总字数中的比例。可根据实际调整,但单线不宜低于10%(太低会被读者遗忘)。\n\n## 篇幅分配规则\n\n### 主线与副线关系\n- 主线贯穿全书,始终是核心驱动力\n- 副线在特定阶段成为临时主线(如\"复仇线\"在复仇阶段)\n- 暗线只在关键时刻出现,但必须贯穿全书\n\n### 分配原则\n- 主线:每3-5章必须有明显推进\n- 副线A/B:每5-8章必须出现一次\n- 暗线:每10章至少铺垫一次\n- 任何单线连续消失不得超过10章\n\n## 线状态跟踪\n\n### 状态定义\n\n| 状态 | 含义 |\n|------|------|\n| 活跃 | 当前章节有该线的戏份 |\n| 铺垫 | 该线暂时退居幕后,但仍有时机出现 |\n| 悬空 | 该线超过8章没出现,需要尽快安排 |\n| 回收 | 该线进入收束阶段,准备交汇 |\n| 完成 | 该线已解决,等待交汇 |\n\n### 跟踪表\n\n| 叙事线 | 当前状态 | 最后出现章节 | 备注 |\n|--------|----------|--------------|------|\n| 主线 | 活跃 | 第X章 | ... |\n| 副线A | 铺垫 | 第X章 | ... |\n| ... | ... | ... | ... |\n\n**更新频率:** 每次写完新章节后更新此表。\n\n## 视角切换规则\n\n### 视角类型\n- **第一人称** — \"我看到了...\"\n- **有限第三人称** — \"他看到了...\"(只能知道该人物所知)\n- **全知第三人称** — 叙述者什么都知道\n\n### 切换时机\n- **允许切换:** 新场景开始、同一场景内时间跳跃、POV人物完成任务\n- **避免切换:** 冲突进行中、情感高潮点、关键信息刚揭露\n- **切换警示:** 单章节内视角切换超过3次需要检查是否必要\n\n### 视角占比参考\n\n| 叙事线 | 推荐视角 | 占比控制 |\n|--------|----------|----------|\n| 主线 | 有限第三人称 | 该线章节的80%以上 |\n| 副线 | 可根据需要选择 | 该线章节的70%以上 |\n\n## 交汇设计\n\n### 交汇节点\n\n在章节规划时,预先标记关键交汇节点:\n\n| 交汇节点 | 涉及叙事线 | 交汇方式 | 章节 |\n|----------|-----------|----------|------|\n| 第一次交汇 | 主线+副线A | 人物相遇 | 第X章 |\n| 第二次交汇 | 主线+副线A+副线B | 目标冲突 | 第X章 |\n| 第三次交汇 | 所有线 | 高潮对决 | 终章 |\n\n### 交汇原则\n- 交汇前每条线必须有至少一次\"准备\"(让读者知道这条线要来了)\n- 交汇时要有\"原来如此\"的揭示感\n- 交汇点不要超过3条线同时交汇(会乱)\n\n## 健康检查\n\n每写完5-10章,做一次多线健康检查:\n\n### 检查项\n- [ ] 每条线是否按计划推进?\n- [ ] 是否有某条线超过10章没出现?\n- [ ] 视角切换是否混乱?\n- [ ] 交汇节点是否按计划执行?\n- [ ] 各线目标是否与主线冲突有交集?\n\n### 常见问题处理\n\n| 问题 | 解决方案 |\n|------|----------|\n| 某条线写太多了 | 砍场景,把篇幅转移给其他线 |\n| 某条线消失了 | 安排一次\"意外相遇\"或\"信息传递\" |\n| 交汇太早 | 延迟交汇,增加铺垫 |\n| 交汇太晚 | 提前合并,减少支线章节 |\n```\n\n### 2. 更新 Required Files 部分\n\n在 `SKILL.md` 的 Required Files 部分,增加一行引用:\n\n```markdown\n- `03-多线管理.md` → 使用 [references/outline-template.md](references/outline-template.md) 的多线管理区块(仅多线叙事小说需要)\n```\n\n### 3. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | Required Files 部分增加多线管理引用 |\n| `references/story-bible-template.md` | 在世界观模板中增加多线管理的简要说明 |\n\n## 待实施\n\n- [ ] 创建 `references/03-多线管理.md` 模板文件\n- [ ] 更新 `SKILL.md` Required Files 部分\n- [ ] 更新 `references/story-bible-template.md`(可选)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4730,"content_sha256":"cd051553f0778b45f93c4affc133a4646a1277265771de9b678934663a9022a9"},{"filename":"docs/plans/2026-03-20-multiline-narrative-implementation.md","content":"# Multi-Line Narrative Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Create standalone multi-line narrative management template and update SKILL.md to reference it.\n\n**Architecture:**\n1. Create `references/03-多线管理.md` template file\n2. Update `SKILL.md` Required Files section to reference it\n\n**Tech Stack:** Plain Markdown files only.\n\n---\n\n## Task 1: Create 03-多线管理.md Template\n\n**Files:**\n- Create: `references/03-多线管理.md`\n\n**Step 1: Write the template file**\n\nCreate the file with the following content:\n\n```markdown\n# 多线叙事管理\n\n> 本模板适用于群像、多视角或多叙事线的小说。如果你的小说是单线叙事,可以跳过此文件。\n\n## 叙事线总览\n\n| 叙事线 | 核心人物 | 主要目标 | 预计占比 |\n|--------|----------|----------|----------|\n| 主线 | 主角 | 核心冲突 | 50% |\n| 副线A | 配角X | 支线目标1 | 20% |\n| 副线B | 配角Y | 支线目标2 | 20% |\n| 暗线 | 反派 | 潜伏目标 | 10% |\n\n**占比说明:** 占比是指该线在全书总字数中的比例。可根据实际调整,但单线不宜低于10%(太低会被读者遗忘)。\n\n## 篇幅分配规则\n\n### 主线与副线关系\n- 主线贯穿全书,始终是核心驱动力\n- 副线在特定阶段成为临时主线(如\"复仇线\"在复仇阶段)\n- 暗线只在关键时刻出现,但必须贯穿全书\n\n### 分配原则\n- 主线:每3-5章必须有明显推进\n- 副线A/B:每5-8章必须出现一次\n- 暗线:每10章至少铺垫一次\n- **任何单线连续消失不得超过10章**\n\n## 线状态跟踪\n\n### 状态定义\n\n| 状态 | 含义 |\n|------|------|\n| 活跃 | 当前章节有该线的戏份 |\n| 铺垫 | 该线暂时退居幕后,但仍有时机出现 |\n| 悬空 | 该线超过8章没出现,需要尽快安排 |\n| 回收 | 该线进入收束阶段,准备交汇 |\n| 完成 | 该线已解决,等待交汇 |\n\n### 跟踪表\n\n| 叙事线 | 当前状态 | 最后出现章节 | 备注 |\n|--------|----------|--------------|------|\n| 主线 | 活跃 | 第X章 | ... |\n| 副线A | 铺垫 | 第X章 | ... |\n| 副线B | 悬空 | 第X章 | 连续消失8章,需要安排 |\n| 暗线 | 活跃 | 第X章 | ... |\n\n**更新频率:** 每次写完新章节后更新此表。\n\n## 视角切换规则\n\n### 视角类型\n- **第一人称** — \"我看到了...\"\n- **有限第三人称** — \"他看到了...\"(只能知道该人物所知)\n- **全知第三人称** — 叙述者什么都知道\n\n### 切换时机\n- **允许切换:** 新场景开始、同一场景内时间跳跃、POV人物完成任务\n- **避免切换:** 冲突进行中、情感高潮点、关键信息刚揭露\n- **切换警示:** 单章节内视角切换超过3次需要检查是否必要\n\n### 视角占比参考\n\n| 叙事线 | 推荐视角 | 占比控制 |\n|--------|----------|----------|\n| 主线 | 有限第三人称 | 该线章节的80%以上 |\n| 副线 | 可根据需要选择 | 该线章节的70%以上 |\n\n## 交汇设计\n\n### 交汇节点\n\n在章节规划时,预先标记关键交汇节点:\n\n| 交汇节点 | 涉及叙事线 | 交汇方式 | 章节 |\n|----------|-----------|----------|------|\n| 第一次交汇 | 主线+副线A | 人物相遇 | 第X章 |\n| 第二次交汇 | 主线+副线A+副线B | 目标冲突 | 第X章 |\n| 第三次交汇 | 所有线 | 高潮对决 | 终章 |\n\n### 交汇原则\n- 交汇前每条线必须有至少一次\"准备\"(让读者知道这条线要来了)\n- 交汇时要有\"原来如此\"的揭示感\n- 交汇点不要超过3条线同时交汇(会乱)\n\n## 健康检查\n\n每写完5-10章,做一次多线健康检查:\n\n### 检查项\n- [ ] 每条线是否按计划推进?\n- [ ] 是否有某条线超过10章没出现?\n- [ ] 视角切换是否混乱?\n- [ ] 交汇节点是否按计划执行?\n- [ ] 各线目标是否与主线冲突有交集?\n\n### 常见问题处理\n\n| 问题 | 解决方案 |\n|------|----------|\n| 某条线写太多了 | 砍场景,把篇幅转移给其他线 |\n| 某条线消失了 | 安排一次\"意外相遇\"或\"信息传递\" |\n| 交汇太早 | 延迟交汇,增加铺垫 |\n| 交汇太晚 | 提前合并,减少支线章节 |\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/03-多线管理.md\ngit commit -m \"feat: add multi-line narrative management template\n\nAdd standalone 03-多线管理.md for managing multi-POV novels:\n- 叙事线总览: line overview with allocation percentages\n- 篇幅分配规则: main/sub/hidden line relationships\n- 线状态跟踪: state definitions and tracking table\n- 视角切换规则: when/how to switch POV\n- 交汇设计: convergence nodes and principles\n- 健康检查: periodic review checklist\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Update SKILL.md Required Files\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find Required Files section**\n\nRead SKILL.md to find the \"## Required Files\" section.\n\n**Step 2: Add multi-line management reference**\n\nFind the line with `第XX章-标题.md` and add after it:\n\n```markdown\n- `03-多线管理.md` → 使用 [references/03-多线管理.md](references/03-多线管理.md)(仅多线叙事小说需要)\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: reference multi-line management template in SKILL.md\n\nAdd reference to 03-多线管理.md in Required Files section,\nnoting it's only needed for multi-POV novels.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Create references/03-多线管理.md | ⬜ |\n| 2 | Update SKILL.md Required Files | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5808,"content_sha256":"2968806e797d28b57048a283147069de0ffb1adfe9e3331070fbe2935a985919"},{"filename":"docs/plans/2026-03-20-novel-health-check-design.md","content":"# 小说体检机制设计\n\n## 背景\n\n当前 skill 缺乏系统性的小说健康检查机制。用户写了几万字后,不知道小说的\"健康状态\"如何:\n- 哪些方面好、哪些方面有问题\n- 不知道标准是什么\n- 没有定期检查的习惯\n\n## 目标\n\n创建小说体检系统:\n1. **模板** `09-小说体检报告.md` — 体检报告格式定义\n2. **脚本增强** — `check_novel_health.py` 自动生成体检数据\n\n## 设计方案\n\n### 1. 体检维度\n\n| 维度 | 检查什么 | 权重 | 评分标准 |\n|------|----------|------|----------|\n| 节奏健康 | 紧张度曲线、场景多样性 | 25% | 5分=曲线完美,1分=严重趋平 |\n| 伏笔跟踪 | 伏笔回收率、超时伏笔 | 20% | 5分=全部回收,1分=>50%未回收 |\n| 人物一致 | 性格、动机、状态 | 20% | 5分=完全一致,1分=有矛盾 |\n| 多线均衡 | 各线戏份分配 | 15% | 5分=均衡,1分=严重失衡 |\n| 字数健康 | 平均字数、方差 | 10% | 5分=标准差\u003c500,1分=标准差>2000 |\n| 钩子强度 | 结尾悬念质量 | 10% | 5分=每章都有强钩子,1分=无钩子 |\n\n### 2. 综合评分计算\n\n```\n综合评分 = Σ(维度评分 × 权重)\n\n5分:优秀(≥4.5)\n4分:良好(≥3.5)\n3分:及格(≥2.5)\n2分:预警(≥1.5)\n1分:危险(\u003c1.5)\n```\n\n### 3. 体检报告格式\n\n```markdown\n# 小说体检报告\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 综合评分\n\n**综合评分:4.2/5 ★★★★☆**\n\n| 维度 | 评分 | 状态 |\n|------|------|------|\n| 节奏健康 | 4.5 | ✅ 优秀 |\n| 伏笔跟踪 | 3.8 | ✅ 良好 |\n| 人物一致 | 4.0 | ✅ 良好 |\n| 多线均衡 | 4.5 | ✅ 优秀 |\n| 字数健康 | 3.5 | ⚠️ 及格 |\n| 钩子强度 | 3.0 | ⚠️ 及格 |\n\n## 各维度详情\n\n### 节奏健康 (4.5/5)\n\n**数据:**\n- 场景类型分布:室内对话45%、户外30%、动作25%\n- 章节紧张度平均:3.8/5\n\n**问题:**\n- ⚠️ 第3-5章场景类型过于单一\n\n**建议:**\n- 增加户外场景平衡\n\n### 伏笔跟踪 (3.8/5)\n\n**数据:**\n- 伏笔总数:8\n- 已回收:5 (62.5%)\n- 超时未回收:1\n\n**问题:**\n- ⚠️ \"神秘信封\"伏笔超过10章未回收\n\n**建议:**\n- 在第12章安排回收\n```\n\n### 4. 检查频率\n\n- **每10章**:做一次基础体检\n- **关键节点**:第一幕结束、中点、结局前\n- **遇到问题**:发现明显问题随时检查\n\n## 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `scripts/check_novel_health.py` | 新增体检脚本 |\n| `references/09-小说体检报告.md` | 新增体检报告模板 |\n\n## 待实施\n\n- [ ] 创建 `scripts/check_novel_health.py`\n- [ ] 创建 `references/09-小说体检报告.md`\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2778,"content_sha256":"53519f033f0ed7d50b7a5bd5a2cddd988ef85462ecb8e5760e84ae162b77e173"},{"filename":"docs/plans/2026-03-20-novel-health-check-implementation.md","content":"# Novel Health Check Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Create novel health check system with script and template.\n\n**Architecture:**\n1. Create `scripts/check_novel_health.py` - generates health metrics\n2. Create `references/09-小说体检报告.md` - report template\n\n**Tech Stack:** Python script + Markdown template.\n\n---\n\n## Task 1: Create check_novel_health.py Script\n\n**Files:**\n- Create: `scripts/check_novel_health.py`\n\n**Step 1: Write the script**\n\n```python\n#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n小说体检脚本\n检查小说的健康状态,生成体检报告\n\"\"\"\n\nimport re\nimport sys\nfrom pathlib import Path\nfrom collections import defaultdict\n\n# 修复 Windows 控制台编码问题\nif sys.platform == 'win32':\n import io\n sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')\n\n\ndef extract_chapter_content(file_path: Path) -> str:\n \"\"\"从章节文件中提取正文内容\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n lines = content.split('\\n')\n body_start = None\n body_end = None\n\n for i, line in enumerate(lines):\n stripped = line.strip()\n if stripped == '## 正文':\n body_start = i + 1\n continue\n if body_start is not None and stripped.startswith('## '):\n body_end = i\n break\n\n if body_start is not None:\n return '\\n'.join(lines[body_start:body_end]).strip()\n\n content_start = 0\n for i, line in enumerate(lines):\n if line.startswith('#') and '章' in line:\n content_start = i + 1\n break\n\n return '\\n'.join(lines[content_start:]).strip()\n\n\ndef count_chinese_words(text: str) -> int:\n \"\"\"统计中文字数\"\"\"\n text = re.sub(r'#{1,6}\\s*', '', text)\n text = re.sub(r'\\*\\*(.*?)\\*\\*', r'\\1', text)\n text = re.sub(r'\\*(.*?)\\*', r'\\1', text)\n chinese_chars = re.findall(r'[\\u4e00-\\u9fff]', text)\n return len(chinese_chars)\n\n\ndef detect_scene_type(text: str) -> str:\n \"\"\"简单检测场景类型\"\"\"\n indoor_keywords = ['房间', '室内', '屋里', '客厅', '卧室', '办公室']\n outdoor_keywords = ['外面', '户外', '街道', '天空', '花园', '野外']\n action_keywords = ['跑', '跳', '战斗', '打架', '追逐']\n\n indoor_count = sum(1 for kw in indoor_keywords if kw in text)\n outdoor_count = sum(1 for kw in outdoor_keywords if kw in text)\n action_count = sum(1 for kw in action_keywords if kw in text)\n\n if indoor_count > outdoor_count and indoor_count >= 2:\n return '室内'\n elif outdoor_count > indoor_count and outdoor_count >= 2:\n return '户外'\n elif action_count >= 2:\n return '动作'\n elif indoor_count >= 1:\n return '室内'\n return '其他'\n\n\ndef check_novel(novel_dir: Path) -> dict:\n \"\"\"检查小说健康状态\"\"\"\n chapter_files = sorted(novel_dir.glob('第*.md'))\n\n if not chapter_files:\n return {'error': '未找到章节文件'}\n\n chapters = []\n word_counts = []\n scene_types = []\n\n for chapter_file in chapter_files:\n content = extract_chapter_content(chapter_file)\n word_count = count_chinese_words(content)\n scene_type = detect_scene_type(content)\n\n match = re.match(r'第(\\d+)章', chapter_file.name)\n chapter_num = int(match.group(1)) if match else 0\n\n chapters.append({'number': chapter_num, 'word_count': word_count, 'scene_type': scene_type})\n word_counts.append(word_count)\n scene_types.append(scene_type)\n\n # 计算字数统计\n avg_words = sum(word_counts) / len(word_counts) if word_counts else 0\n variance = sum((w - avg_words) ** 2 for w in word_counts) / len(word_counts) if word_counts else 0\n std_dev = variance ** 0.5\n\n # 场景分布\n scene_counts = defaultdict(int)\n for st in scene_types:\n scene_counts[st] += 1\n\n # 检测场景重复\n scene_warnings = []\n consecutive_count = 1\n consecutive_type = scene_types[0] if scene_types else None\n for i in range(1, len(scene_types)):\n if scene_types[i] == consecutive_type:\n consecutive_count += 1\n else:\n if consecutive_count >= 3:\n scene_warnings.append(f\"'{consecutive_type}'连续{consecutive_count}章\")\n consecutive_count = 1\n consecutive_type = scene_types[i]\n if consecutive_count >= 3:\n scene_warnings.append(f\"'{consecutive_type}'连续{consecutive_count}章\")\n\n # 字数健康评分 (5分制)\n if std_dev \u003c 500:\n word_score = 5\n elif std_dev \u003c 800:\n word_score = 4\n elif std_dev \u003c 1200:\n word_score = 3\n elif std_dev \u003c 2000:\n word_score = 2\n else:\n word_score = 1\n\n # 节奏健康评分(场景多样性)\n unique_scenes = len(set(scene_types))\n if unique_scenes >= 4:\n rhythm_score = 5\n elif unique_scenes >= 3:\n rhythm_score = 4\n elif unique_scenes >= 2:\n rhythm_score = 3\n else:\n rhythm_score = 2\n if scene_warnings:\n rhythm_score = max(1, rhythm_score - 1)\n\n return {\n 'chapters': chapters,\n 'total_chapters': len(chapters),\n 'total_words': sum(word_counts),\n 'avg_words': avg_words,\n 'std_dev': std_dev,\n 'word_score': word_score,\n 'scene_counts': dict(scene_counts),\n 'scene_warnings': scene_warnings,\n 'rhythm_score': rhythm_score,\n }\n\n\ndef print_report(novel_dir: Path, results: dict):\n \"\"\"打印体检报告\"\"\"\n print('\\n' + '=' * 60)\n print('小说体检报告')\n print('=' * 60)\n print(f'小说:{novel_dir.name}')\n print(f'检查章节:{results[\"total_chapters\"]}章')\n print(f'总字数:{results[\"total_words\"]:,}')\n print()\n\n print('【评分】')\n print(f' 字数健康:{results[\"word_score\"]}/5 {\"✅\" if results[\"word_score\"] >= 4 else \"⚠️\"}')\n print(f' 节奏健康:{results[\"rhythm_score\"]}/5 {\"✅\" if results[\"rhythm_score\"] >= 4 else \"⚠️\"}')\n print()\n\n print('【字数统计】')\n print(f' 平均:{results[\"avg_words\"]:.0f}字/章')\n print(f' 标准差:{results[\"std_dev\"]:.0f}')\n print()\n\n print('【场景分布】')\n for scene, count in results['scene_counts'].items():\n pct = count / results['total_chapters'] * 100\n print(f' {scene}:{count}章({pct:.0f}%)')\n print()\n\n if results.get('scene_warnings'):\n print('【警告】')\n for warning in results['scene_warnings']:\n print(f' ⚠️ {warning}')\n print()\n\n # 计算综合评分(简化版)\n overall = (results['word_score'] * 0.5 + results['rhythm_score'] * 0.5)\n print(f'【综合评分】{overall:.1f}/5 {\"✅\" if overall >= 3.5 else \"⚠️\"}')\n print('=' * 60)\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法: python scripts/check_novel_health.py \u003c小说目录路径>')\n print('示例: python scripts/check_novel_health.py novels/书名')\n return\n\n novel_dir = Path(sys.argv[1])\n if not novel_dir.exists():\n print(f'错误: 目录不存在 - {novel_dir}')\n return\n\n results = check_novel(novel_dir)\n if 'error' in results:\n print(f'错误: {results[\"error\"]}')\n return\n\n print_report(novel_dir, results)\n\n\nif __name__ == '__main__':\n main()\n```\n\n**Step 2: Commit**\n\n```bash\ngit add scripts/check_novel_health.py\ngit commit -m \"feat: add novel health check script\n\nAdd scripts/check_novel_health.py:\n- Word count statistics (average, standard deviation)\n- Scene type distribution\n- Scene repetition warnings\n- Word health score (5-point scale)\n- Rhythm health score (5-point scale)\n- Overall simplified score\n\nUsage: python scripts/check_novel_health.py \u003cnovel_dir>\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 09-小说体检报告.md Template\n\n**Files:**\n- Create: `references/09-小说体检报告.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 小说体检报告\n\n> 每写完10章或关键节点时做一次体检。\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 综合评分\n\n**综合评分:X.X/5 ★★★☆☆**\n\n| 维度 | 权重 | 评分 | 状态 |\n|------|------|------|------|\n| 节奏健康 | 25% | X.X | ✅/⚠️ |\n| 伏笔跟踪 | 20% | X.X | ✅/⚠️ |\n| 人物一致 | 20% | X.X | ✅/⚠️ |\n| 多线均衡 | 15% | X.X | ✅/⚠️ |\n| 字数健康 | 10% | X.X | ✅/⚠️ |\n| 钩子强度 | 10% | X.X | ✅/⚠️ |\n\n**评分标准:**\n- 5分:优秀\n- 4分:良好\n- 3分:及格\n- 2分:预警\n- 1分:危险\n\n## 各维度详情\n\n### 节奏健康 (X.X/5)\n\n**数据:**\n- 场景类型分布:...\n- 章节紧张度平均:...\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 伏笔跟踪 (X.X/5)\n\n**数据:**\n- 伏笔总数:X\n- 已回收:X (XX%)\n- 超时未回收:X\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 人物一致 (X.X/5)\n\n**数据:**\n- 主要角色:X人\n- 性格矛盾:X处\n- 动机不一致:X处\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 多线均衡 (X.X/5)\n\n**数据:**\n- 叙事线:X条\n- 各线戏份占比:...\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 字数健康 (X.X/5)\n\n**数据:**\n- 平均字数:X字/章\n- 标准差:X\n- 最高:X字\n- 最低:X字\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 钩子强度 (X.X/5)\n\n**数据:**\n- 有强钩子的章节:X/X\n- 平均钩子强度:X.X/5\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n## 主要问题汇总\n\n1. ...\n2. ...\n3. ...\n\n## 后续建议\n\n1. ...\n2. ...\n3. ...\n\n## 下次体检\n\n- 预计章节:第X章\n- 预计时间:...\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/09-小说体检报告.md\ngit commit -m \"feat: add novel health report template\n\nAdd references/09-小说体检报告.md:\n- Basic info section\n- Overall score with 6 dimensions\n- Detailed dimension analysis for each metric\n- Problem summary and recommendations\n- Next check schedule\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Create scripts/check_novel_health.py | ⬜ |\n| 2 | Create references/09-小说体检报告.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":10507,"content_sha256":"41de61136e05827e593d86ce5ebcda7e538d8ac3c9b6c959b99bb249215e16e6"},{"filename":"docs/plans/2026-03-20-publishing-gate-design.md","content":"# 出版门控设计\n\n## 背景\n\n当前的 Completion 部分只是简单的清单,缺乏系统性验收标准和常见烂尾预警。用户不知道达到什么标准才算\"可以出版\"。\n\n## 目标\n\n在 SKILL.md 中增加出版门控章节,并创建独立模板:\n\n1. **SKILL.md** — 增加 `## 出版门控` 章节作为入口\n2. **模板** `06-出版门控.md` — 完整的检查清单\n\n## 设计方案\n\n### 1. SKILL.md 新增章节\n\n在 `## Completion` 之后、`## Translation` 之前,增加 `## 出版门控` 章节。\n\n### 2. 出版检查模板\n\n**文件:** `novels/\u003c书名>/06-出版门控.md`\n\n**内容:**\n\n```markdown\n# 出版门控\n\n> 在进入出版或发布前,按此清单做系统性验收。\n\n## 健康检查(每写完5-10章)\n\n- [ ] 主线悬念是否按计划回收?\n- [ ] 是否有某条伏笔超过15章未回收(警告)?\n- [ ] 人物状态是否前后一致?\n- [ ] 是否有逻辑漏洞?\n\n## 结局验收(写完大纲后)\n\n### 倒序检查法\n\n从结局往前推,验证每章是否服务结局:\n\n**结局要求 → 倒数第3章 → 倒数第2章 → 倒数第1章 → 结局**\n\n- [ ] 结局是否兑现了大纲承诺?\n- [ ] 每章的进展是否导向结局?\n- [ ] 是否有偏离结局的章节?\n\n### 常见烂尾模式预警\n\n检查是否存在以下模式:\n\n| 烂尾模式 | 描述 | 检查项 |\n|----------|------|--------|\n| 机械降神 | 结局靠突然出现的力量解决 | [ ] 结局的解决方案是否在前文有铺垫? |\n| 主角光环 | 主角轻易获胜,无代价 | [ ] 主角是否付出了合理的代价? |\n| 支线烂尾 | 支线挖坑不填 | [ ] 每条支线是否都有回收? |\n| 匆忙收场 | 结尾突然,像赶工 | [ ] 结局是否有足够的篇幅? |\n| 开放结局滥用 | 所有问题都没回答 | [ ] 核心问题是否都有答案? |\n| 反派弱化 | 反派结局时突然变弱 | [ ] 反派是否保持了一致性? |\n\n## 出版分级标准\n\n### 入门级(可网络连载)\n\n- [ ] 字数达标(每章 ≥ 3000字)\n- [ ] 无明显错别字/病句\n- [ ] 主线完整,有开头有结尾\n- [ ] 人物基本一致\n\n### 专业级(可付费发布)\n\n入门级 +:\n- [ ] 无逻辑漏洞\n- [ ] 伏笔基本回收(允许1-2个悬念留作续作)\n- [ ] 节奏控制良好(无过长章节)\n- [ ] 对话自然,符合人物性格\n- [ ] 开篇钩子足够强\n\n### 出版级(可正式出版)\n\n专业级 +:\n- [ ] 所有伏笔回收(或明确标记为续作伏笔)\n- [ ] 主题表达清晰\n- [ ] 人物有成长弧线\n- [ ] 结局有余韵\n- [ ] 无敏感内容问题\n\n## 倒序检查工作表\n\n填写以下工作表,验证每章是否服务结局:\n\n| 章节 | 主要事件 | 是否服务结局 | 问题 |\n|------|----------|--------------|------|\n| 结局 | ... | - | - |\n| 倒数第1章 | ... | ✅/❌ | ... |\n| 倒数第2章 | ... | ✅/❌ | ... |\n| ... | ... | ... | ... |\n\n## 最终确认\n\n在发布前,确认以下问题:\n\n- [ ] 结局是否让读者满意?\n- [ ] 是否有遗留问题未解决(除续作伏笔外)?\n- [ ] 是否需要续作/系列?\n- [ ] 读者在评论区可能问哪些问题?(提前准备)\n```\n\n### 3. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 在 Completion 后、Translation 前,增加 `## 出版门控` 章节 |\n| `references/06-出版门控.md` | 新增出版检查模板 |\n\n## 待实施\n\n- [ ] 更新 `SKILL.md` 增加出版门控章节\n- [ ] 创建 `references/06-出版门控.md` 模板\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3530,"content_sha256":"eccb70aa836a750cda31ac2ed9d2a104364f4c82f8dd0caa7b8e4f99785f2dfb"},{"filename":"docs/plans/2026-03-20-publishing-gate-implementation.md","content":"# Publishing Gate Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add publishing gate system to SKILL.md and create standalone template.\n\n**Architecture:**\n1. Update SKILL.md - add publishing gate section after ## Completion\n2. Create `references/06-出版门控.md` template\n\n**Tech Stack:** Plain Markdown files.\n\n---\n\n## Task 1: Update SKILL.md - Add Publishing Gate Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find Completion section**\n\nRead SKILL.md to find where `## Completion` ends and where `## Translation` begins.\n\n**Step 2: Find the location**\n\nThe new section should be inserted between:\n- End of `## Completion` section\n- Start of `## Translation` section\n\n**Step 3: Insert the new section**\n\n```markdown\n## 出版门控\n\n在进入出版或发布前,按以下流程做系统性验收:\n\n### 倒序检查法\n\n从结局往前推,验证每章是否服务结局:\n\n**结局要求 → 倒数第3章 → 倒数第2章 → 倒数第1章 → 结局**\n\n- [ ] 结局是否兑现了大纲承诺?\n- [ ] 每章的进展是否导向结局?\n- [ ] 是否有偏离结局的章节?\n\n### 常见烂尾模式预警\n\n| 烂尾模式 | 描述 | 检查项 |\n|----------|------|--------|\n| 机械降神 | 结局靠突然出现的力量解决 | [ ] 结局的解决方案是否在前文有铺垫? |\n| 主角光环 | 主角轻易获胜,无代价 | [ ] 主角是否付出了合理的代价? |\n| 支线烂尾 | 支线挖坑不填 | [ ] 每条支线是否都有回收? |\n| 匆忙收场 | 结尾突然,像赶工 | [ ] 结局是否有足够的篇幅? |\n| 开放结局滥用 | 所有问题都没回答 | [ ] 核心问题是否都有答案? |\n| 反派弱化 | 反派结局时突然变弱 | [ ] 反派是否保持了一致性? |\n\n### 出版分级标准\n\n| 级别 | 要求 |\n|------|------|\n| 入门级 | 字数达标、无明显错误、主线完整、人物一致 |\n| 专业级 | 入门级 + 无逻辑漏洞、伏笔基本回收、节奏良好 |\n| 出版级 | 专业级 + 所有伏笔回收、主题清晰、人物有成长弧线 |\n\n**详细检查清单:** [references/06-出版门控.md](references/06-出版门控.md)\n```\n\n**Step 4: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add publishing gate section to SKILL.md\n\nAdd ## 出版门控 section with:\n- Reverse-order check method (倒序检查法)\n- Common bad ending patterns (常见烂尾模式预警)\n- Publishing tier standards (出版分级标准)\n- Reference to 06-出版门控.md template\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 06-出版门控.md Template\n\n**Files:**\n- Create: `references/06-出版门控.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 出版门控\n\n> 在进入出版或发布前,按此清单做系统性验收。\n\n## 健康检查(每写完5-10章)\n\n- [ ] 主线悬念是否按计划回收?\n- [ ] 是否有某条伏笔超过15章未回收(警告)?\n- [ ] 人物状态是否前后一致?\n- [ ] 是否有逻辑漏洞?\n\n## 结局验收(写完大纲后)\n\n### 倒序检查法\n\n从结局往前推,验证每章是否服务结局:\n\n**结局要求 → 倒数第3章 → 倒数第2章 → 倒数第1章 → 结局**\n\n- [ ] 结局是否兑现了大纲承诺?\n- [ ] 每章的进展是否导向结局?\n- [ ] 是否有偏离结局的章节?\n\n### 常见烂尾模式预警\n\n检查是否存在以下模式:\n\n| 烂尾模式 | 描述 | 检查项 |\n|----------|------|--------|\n| 机械降神 | 结局靠突然出现的力量解决 | [ ] 结局的解决方案是否在前文有铺垫? |\n| 主角光环 | 主角轻易获胜,无代价 | [ ] 主角是否付出了合理的代价? |\n| 支线烂尾 | 支线挖坑不填 | [ ] 每条支线是否都有回收? |\n| 匆忙收场 | 结尾突然,像赶工 | [ ] 结局是否有足够的篇幅? |\n| 开放结局滥用 | 所有问题都没回答 | [ ] 核心问题是否都有答案? |\n| 反派弱化 | 反派结局时突然变弱 | [ ] 反派是否保持了一致性? |\n\n## 出版分级标准\n\n### 入门级(可网络连载)\n\n- [ ] 字数达标(每章 ≥ 3000字)\n- [ ] 无明显错别字/病句\n- [ ] 主线完整,有开头有结尾\n- [ ] 人物基本一致\n\n### 专业级(可付费发布)\n\n入门级 +:\n- [ ] 无逻辑漏洞\n- [ ] 伏笔基本回收(允许1-2个悬念留作续作)\n- [ ] 节奏控制良好(无过长章节)\n- [ ] 对话自然,符合人物性格\n- [ ] 开篇钩子足够强\n\n### 出版级(可正式出版)\n\n专业级 +:\n- [ ] 所有伏笔回收(或明确标记为续作伏笔)\n- [ ] 主题表达清晰\n- [ ] 人物有成长弧线\n- [ ] 结局有余韵\n- [ ] 无敏感内容问题\n\n## 倒序检查工作表\n\n填写以下工作表,验证每章是否服务结局:\n\n| 章节 | 主要事件 | 是否服务结局 | 问题 |\n|------|----------|--------------|------|\n| 结局 | ... | - | - |\n| 倒数第1章 | ... | ✅/❌ | ... |\n| 倒数第2章 | ... | ✅/❌ | ... |\n| ... | ... | ... | ... |\n\n## 最终确认\n\n在发布前,确认以下问题:\n\n- [ ] 结局是否让读者满意?\n- [ ] 是否有遗留问题未解决(除续作伏笔外)?\n- [ ] 是否需要续作/系列?\n- [ ] 读者在评论区可能问哪些问题?(提前准备)\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/06-出版门控.md\ngit commit -m \"feat: add publishing gate template\n\nAdd references/06-出版门控.md template:\n- Health check (5-10 chapters)\n- Ending verification with reverse-order method\n- Common bad ending patterns table\n- Publishing tier standards (3 levels)\n- Reverse-order check worksheet\n- Final confirmation checklist\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Update SKILL.md - add 出版门控 section | ⬜ |\n| 2 | Create references/06-出版门控.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6035,"content_sha256":"af3719fcd205bf6de1f61833b75066ad000b88d22dbd0b6277a55fd70ca83c34"},{"filename":"docs/plans/2026-03-20-quality-standards-design.md","content":"# 质量标准具体化设计\n\n## 背景\n\n当前的 Quality Bar(SKILL.md 中的\"每章至少满足\")是 6 条抽象规则。AI 执行时容易\"觉得\"自己做到了,但实际上可能没有。\n\n例如:\n- \"人物通过动作、选择、对白被展示\" → AI 可能写了很多\"他觉得\"、\"她认为\",但没有实际的行动\n- \"避免空泛形容词堆砌\" → AI 可能只是少写了形容词,但句子仍然空洞\n\n## 目标\n\n将抽象的 Quality Bar 转化为**具体可检查的清单项**,每项搭配**可量化指标**作为辅助验证。\n\n## 设计方案\n\n### 1. 新的质量清单结构\n\n每条质量规则拆解为:\n\n| 规则 | 具体检查项 | 量化指标 |\n|------|-----------|----------|\n| 原规则 | 检查什么 | 多少算合格 |\n\n### 2. 具体化清单\n\n#### 规则1:变化原则\n**原规则:** \"本章发生了不能删除的变化\"\n\n**具体检查项:**\n- [ ] 主角做出了明确选择(不是被动接受)\n- [ ] 关系状态发生了可感知的变化\n- [ ] 世界状态(如果适用)发生了明确改变\n\n**量化指标:**\n- 至少有 1 个\"选择\"事件(主角主动决定做/不做某事)\n- 至少有 1 个\"状态变化\"可被描述\n\n---\n\n#### 规则2:悬念原则\n**原规则:** \"回应、升级或偏转至少一条已有悬念\"\n\n**具体检查项:**\n- [ ] 本章开头提到了上章留下的悬念/问题\n- [ ] 本章结尾留下了新的悬念/问题\n- [ ] 至少有 1 条悬念被推进(不论是否解决)\n\n**量化指标:**\n- 章节内悬念提及次数 ≥ 1\n- 新增悬念数 ≥ 1\n\n---\n\n#### 规则3:钩子原则\n**原规则:** \"结尾钩子强度与全书位置匹配\"\n\n**具体检查项:**\n- [ ] 结尾不是\"顺嘴说完\",而是有\"突然停下\"的感觉\n- [ ] 结尾留下了具体的问题/危险/悬念\n- [ ] 结尾的紧张程度与章节在全书的位置匹配(前段轻,后段重)\n\n**量化指标:**\n- 结尾段落包含\"悬念触发词\"(突然、没想到、这时、结果...)\n- 结尾句不是完整句式(以...、留下...、不知道...)\n\n---\n\n#### 规则4:展示原则\n**原规则:** \"人物通过动作、选择、对白被展示,而不是只被描述\"\n\n**具体检查项:**\n- [ ] 主要角色的情绪通过外在行为展示(不是\"他很生气\")\n- [ ] 对话中有人物动作/反应穿插(不只是\"说\")\n- [ ] 没有大段的\"他说\"+\"她说\"连续对话\n\n**量化指标:**\n- \"他说\"/\"她说\"等对话标签占比 \u003c 30% 的对话段落\n- 含有动作描写的对话段落 ≥ 50%\n\n---\n\n#### 规则5:文风原则\n**原规则:** \"避免空泛形容词堆砌、抽象情绪总结、整段均匀句式和过度书面腔\"\n\n**具体检查项:**\n- [ ] 没有连续 3 句以上的\"他很X\"、\"她是Y\"句式\n- [ ] 没有大段情绪总结(如\"他感到前所未有的孤独和绝望\")\n- [ ] 句子长度有变化(不是每句都一样长)\n- [ ] 没有过多的四字词/成语堆砌\n\n**量化指标:**\n- 连续相同句式不超过 3 句\n- 单段\"很X/很Y\"形容词不超过 2 个\n- 句长标准差 > 5(有一定变化)\n\n---\n\n#### 规则6:场景原则\n**原规则:** \"每个章节至少包含若干有任务的场景\"\n\n**具体检查项:**\n- [ ] 每个场景有明确的\"任务\"(不是\"他们聊了聊天\")\n- [ ] 场景之间有进展/转折/信息差\n- [ ] 没有连续的场景只在同一个地点做同样的事\n\n**量化指标:**\n- 有明确任务的场景 ≥ 3 个\n- 场景间有\"信息差\"或\"状态变化\"\n\n---\n\n### 3. 修改位置\n\n将现有的 Quality Bar 部分(SKILL.md 中的\"## Quality Bar\")替换为新的\"## 质量检查清单\"。\n\n### 4. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 将 Quality Bar 替换为具体化的质量检查清单 |\n| `references/quality-checklist.md` | 考虑是否需要更新(可选) |\n\n## 待实施\n\n- [ ] 更新 SKILL.md 的 Quality Bar → 质量检查清单\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3937,"content_sha256":"0e6d2a516f910f0834a38cb8c8af0289dc797856fce77e5adccc5f74230bdc7c"},{"filename":"docs/plans/2026-03-20-quality-standards-implementation.md","content":"# Quality Standards Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Replace abstract Quality Bar with concrete quality checklist in SKILL.md.\n\n**Architecture:** Replace the existing \"## Quality Bar\" section with detailed \"## 质量检查清单\" including check items and quantitative indicators.\n\n**Tech Stack:** Plain Markdown edits only.\n\n---\n\n## Task 1: Replace Quality Bar with 质量检查清单\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Read SKILL.md to find Quality Bar section**\n\nRead SKILL.md to find the \"## Quality Bar\" section and understand its current location and content.\n\n**Step 2: Find and replace the section**\n\nFind the `## Quality Bar` section and replace its content with the new quality checklist.\n\nThe new section should have the following content:\n\n```markdown\n## 质量检查清单\n\n每章交付前,按以下清单自检。每项都有具体检查项和量化指标。\n\n### 1. 变化原则\n**原规则:** 本章发生了不能删除的变化\n\n**检查项:**\n- [ ] 主角做出了明确选择(不是被动接受)\n- [ ] 关系状态发生了可感知的变化\n- [ ] 世界状态(如果适用)发生了明确改变\n\n**量化指标:**\n- 至少有 1 个\"选择\"事件(主角主动决定做/不做某事)\n- 至少有 1 个\"状态变化\"可被描述\n\n---\n\n### 2. 悬念原则\n**原规则:** 回应、升级或偏转至少一条已有悬念\n\n**检查项:**\n- [ ] 本章提到了上章留下的悬念/问题\n- [ ] 本章结尾留下了新的悬念/问题\n- [ ] 至少有 1 条悬念被推进(不论是否解决)\n\n**量化指标:**\n- 章节内悬念提及次数 ≥ 1\n- 新增悬念数 ≥ 1\n\n---\n\n### 3. 钩子原则\n**原规则:** 结尾钩子强度与全书位置匹配\n\n**检查项:**\n- [ ] 结尾不是\"顺嘴说完\",而是有\"突然停下\"的感觉\n- [ ] 结尾留下了具体的问题/危险/悬念\n- [ ] 结尾的紧张程度与章节在全书的位置匹配(前段轻,后段重)\n\n**量化指标:**\n- 结尾段落包含\"悬念触发词\"(突然、没想到、这时、结果...)\n- 结尾句不是完整句式(以...、留下...、不知道...)\n\n---\n\n### 4. 展示原则\n**原规则:** 人物通过动作、选择、对白被展示,而不是只被描述\n\n**检查项:**\n- [ ] 主要角色的情绪通过外在行为展示(不是\"他很生气\")\n- [ ] 对话中有人物动作/反应穿插(不只是\"说\")\n- [ ] 没有大段的\"他说\"+\"她说\"连续对话\n\n**量化指标:**\n- \"他说\"/\"她说\"等对话标签占比 \u003c 30% 的对话段落\n- 含有动作描写的对话段落 ≥ 50%\n\n---\n\n### 5. 文风原则\n**原规则:** 避免空泛形容词堆砌、抽象情绪总结、整段均匀句式和过度书面腔\n\n**检查项:**\n- [ ] 没有连续 3 句以上的\"他很X\"、\"她是Y\"句式\n- [ ] 没有大段情绪总结(如\"他感到前所未有的孤独和绝望\")\n- [ ] 句子长度有变化(不是每句都一样长)\n- [ ] 没有过多的四字词/成语堆砌\n\n**量化指标:**\n- 连续相同句式不超过 3 句\n- 单段\"很X/很Y\"形容词不超过 2 个\n- 句长标准差 > 5(有一定变化)\n\n---\n\n### 6. 场景原则\n**原规则:** 每个章节至少包含若干有任务的场景\n\n**检查项:**\n- [ ] 每个场景有明确的\"任务\"(不是\"他们聊了聊天\")\n- [ ] 场景之间有进展/转折/信息差\n- [ ] 没有连续的场景只在同一个地点做同样的事\n\n**量化指标:**\n- 有明确任务的场景 ≥ 3 个\n- 场景间有\"信息差\"或\"状态变化\"\n\n---\n\n**提示:** 量化指标是辅助验证,不是强制要求。如果字数达标但量化指标不合格,说明内容可能有水分。\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"refactor: replace Quality Bar with detailed 质量检查清单\n\nTransform abstract quality rules into concrete checklist with:\n- Specific check items per rule\n- Quantitative indicators as auxiliary verification\n- 6 rules: 变化/悬念/钩子/展示/文风/场景\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Replace Quality Bar with 质量检查清单 in SKILL.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4321,"content_sha256":"9b27bef1ac1d343de934c76a3a2145ee6509fc7570b5c825fc82fe88f7f4a91a"},{"filename":"docs/plans/2026-03-20-research-material-design.md","content":"# 素材积累阶段设计\n\n## 背景\n\n当前 workflow 跳过了素材积累阶段,用户可能在还没研究清楚领域知识的情况下就开始写作,导致:\n\n- 写出来的内容缺乏真实感\n- 专业人士一眼看出破绽\n- 关键细节缺失,影响沉浸感\n\n## 目标\n\n在工作流中增加\"素材积累\"阶段,包含:\n1. **SKILL.md** — 增加素材积累阶段说明\n2. **模板** `04-素材积累.md` — 素材清单和整理方式\n\n## 设计方案\n\n### 1. SKILL.md 增加素材积累阶段\n\n在\"策划模式\"和\"试写模式\"之间,增加\"素材积累阶段\"的说明。\n\n**触发条件:**\n- 用户写的题材涉及专业领域(医疗、法律、历史、职场等)\n- 用户不确定自己是否了解足够的背景知识\n- 用户主动要求\"做功课\"\n\n**素材积累阶段流程:**\n\n```\n第一步:确定素材范围\n- 根据题材类型,列出需要研究的领域\n- 参考 04-素材积累.md 的题材素材清单\n\n第二步:收集素材\n- 网络搜索、阅读相关书籍\n- 采访相关从业者(如适用)\n- 实地考察(如适用)\n\n第三步:整理素材\n- 按模板结构整理到 04-素材积累.md\n- 标记\"必须准确\"vs\"可以虚构\"的内容\n\n第四步:验证素材\n- 检查关键细节是否准确\n- 确保没有常识性错误\n- 标注敏感内容(如有)\n```\n\n### 2. 素材积累模板\n\n**文件:** `novels/\u003c书名>/04-素材积累.md`\n\n**用途:** 整理和存储研究所收集的素材。\n\n```markdown\n# 素材积累\n\n> 本文件用于整理写作所需的领域知识。写完记得更新。\n\n## 素材清单\n\n### 必查项目(根据题材)\n\n- [ ] 领域基础知识(术语、行话、基本规则)\n- [ ] 从业者日常(工作流程、挑战、习惯)\n- [ ] 常见错误(外行人容易犯的错)\n- [ ] 专业细节(能增加真实感的小细节)\n\n### 题材素材清单\n\n**职场/商战**\n- [ ] 行业术语和缩写\n- [ ] 典型工作日流程\n- [ ] 会议/汇报的语言风格\n- [ ] 常见职业病/压力源\n- [ ] 行业潜规则\n\n**医疗**\n- [ ] 医院科室分工\n- [ ] 常见诊断流程\n- [ ] 医疗术语(患者能理解的)\n- [ ] 医患沟通话术\n- [ ] 医疗行业的禁忌话题\n\n**历史**\n- [ ] 当时日常用语\n- [ ] 饮食习惯、服饰、交通\n- [ ] 社会阶层和礼仪\n- [ ] 货币/物价/工资\n- [ ] 常见历史错误(避免穿越)\n\n**悬疑/犯罪**\n- [ ] 侦查基本流程\n- [ ] 常见取证方法\n- [ ] 犯罪心理学基础\n- [ ] 法律程序(拘留、审讯、起诉)\n- [ ] 警察/法医真实工作状态\n\n**科幻**\n- [ ] 科技术语(用普通人能理解的方式解释)\n- [ ] 技术现状和局限\n- [ ] 逻辑自洽性检查\n- [ ] 科学顾问(如需要)\n\n### 自定义领域\n\n根据你的具体题材,列出需要研究的领域:\n\n#### [领域名称]\n\n**必查项:**\n- ...\n\n**加分项(增加真实感):**\n- ...\n\n**常见错误:**\n- ...\n```\n\n## 整理好的素材\n\n### 术语表\n\n| 术语 | 解释 | 用途 |\n|------|------|------|\n| ... | ... | ... |\n\n### 场景素材\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n```\n\n## 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 在策划模式和试写模式之间,增加素材积累阶段说明 |\n| `references/04-素材积累.md` | 新增素材积累模板 |\n\n## 待实施\n\n- [ ] 更新 `SKILL.md` 增加素材积累阶段\n- [ ] 创建 `references/04-素材积累.md` 模板\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3570,"content_sha256":"0518e007a7a67e99e8841c87963c25c0f14e31c847465e083459e769a80f7a81"},{"filename":"docs/plans/2026-03-20-research-material-implementation.md","content":"# Research Material Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add research material phase to workflow with SKILL.md updates and new template.\n\n**Architecture:**\n1. Update SKILL.md - add research phase between 策划模式 and 试写模式\n2. Create `references/04-素材积累.md` template\n\n**Tech Stack:** Plain Markdown files.\n\n---\n\n## Task 1: Update SKILL.md - Add Research Phase\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Read SKILL.md to find insertion point**\n\nFind the \"Default Working Mode\" section and locate where 试写模式 is mentioned. The new section should be inserted after 策划模式 completes but before 试写模式 begins.\n\n**Step 2: Find the relevant text**\n\nLook for the list that includes:\n```\n1. `策划模式`:只做题材定位...\n2. `试写模式`:策划完成后,只写首章或样章\n```\n\n**Step 3: Add a new section after the Default Working Mode section**\n\nAfter the text about \"新项目默认策划模式\" and \"已有章节的项目默认连载模式\", add:\n\n```markdown\n## 素材积累\n\n在正式写作前,针对所写题材进行资料收集和整理。\n\n**触发条件:**\n- 题材涉及专业领域(医疗、法律、历史、职场等)\n- 用户不确定是否了解足够的背景知识\n- 用户主动要求\"做功课\"\n\n### 工作流程\n\n**第一步:确定素材范围**\n- 根据题材类型,列出需要研究的领域\n- 参考 [04-素材积累.md](references/04-素材积累.md) 的题材素材清单\n\n**第二步:收集素材**\n- 网络搜索、阅读相关书籍\n- 采访相关从业者(如适用)\n- 实地考察(如适用)\n\n**第三步:整理素材**\n- 按模板结构整理到 `novels/\u003c书名>/04-素材积累.md`\n- 标记\"必须准确\"vs\"可以虚构\"的内容\n\n**第四步:验证素材**\n- 检查关键细节是否准确\n- 确保没有常识性错误\n- 标注敏感内容(如有)\n\n**原则:**\n- 真实细节增加可信度,但不需要成为专家\n- 可以虚构的部分要明确标记\n- 写完记得更新素材文件\n```\n\n**Step 4: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add research material phase to SKILL.md\n\nAdd ## 素材积累 section between 策划模式 and 试写模式:\n- Trigger conditions for when to do research\n- 4-step workflow (identify scope, collect, organize, verify)\n- Reference to 04-素材积累.md template\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 04-素材积累.md Template\n\n**Files:**\n- Create: `references/04-素材积累.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 素材积累\n\n> 本文件用于整理写作所需的领域知识。写完记得更新。\n\n## 素材清单\n\n### 必查项目(根据题材)\n\n- [ ] 领域基础知识(术语、行话、基本规则)\n- [ ] 从业者日常(工作流程、挑战、习惯)\n- [ ] 常见错误(外行人容易犯的错)\n- [ ] 专业细节(能增加真实感的小细节)\n\n### 题材素材清单\n\n**职场/商战**\n- [ ] 行业术语和缩写\n- [ ] 典型工作日流程\n- [ ] 会议/汇报的语言风格\n- [ ] 常见职业病/压力源\n- [ ] 行业潜规则\n\n**医疗**\n- [ ] 医院科室分工\n- [ ] 常见诊断流程\n- [ ] 医疗术语(患者能理解的)\n- [ ] 医患沟通话术\n- [ ] 医疗行业的禁忌话题\n\n**历史**\n- [ ] 当时日常用语\n- [ ] 饮食习惯、服饰、交通\n- [ ] 社会阶层和礼仪\n- [ ] 货币/物价/工资\n- [ ] 常见历史错误(避免穿越)\n\n**悬疑/犯罪**\n- [ ] 侦查基本流程\n- [ ] 常见取证方法\n- [ ] 犯罪心理学基础\n- [ ] 法律程序(拘留、审讯、起诉)\n- [ ] 警察/法医真实工作状态\n\n**科幻**\n- [ ] 科技术语(用普通人能理解的方式解释)\n- [ ] 技术现状和局限\n- [ ] 逻辑自洽性检查\n- [ ] 科学顾问(如需要)\n\n**都市/现实**\n- [ ] 当地生活细节(气候、交通、物价)\n- [ ] 社区/邻里关系\n- [ ] 普通人日常困扰\n- [ ] 语言习惯和口头禅\n\n### 自定义领域\n\n根据你的具体题材,列出需要研究的领域:\n\n#### [领域名称]\n\n**必查项:**\n- ...\n\n**加分项(增加真实感):**\n- ...\n\n**常见错误:**\n- ...\n```\n\n**Step 2: Add 整理好的素材 section**\n\nAfter the 素材清单 section, add:\n\n```markdown\n## 整理好的素材\n\n### 术语表\n\n| 术语 | 解释 | 用途 |\n|------|------|------|\n| ... | ... | ... |\n\n### 场景素材\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n```\n\n**Step 3: Commit**\n\n```bash\ngit add references/04-素材积累.md\ngit commit -m \"feat: add research material template\n\nAdd references/04-素材积累.md template:\n- 素材清单: genre-specific checklists (职场/医疗/历史/悬疑/科幻/都市)\n- 自定义领域: for custom research topics\n- 整理好的素材: 术语表 and 场景素材 sections\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Update SKILL.md - add 素材积累 section | ⬜ |\n| 2 | Create references/04-素材积累.md template | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5336,"content_sha256":"a79ba0697480874d90e3e0fc7e973e211071705edeeaf0f51d057cb7511fadd2"},{"filename":"docs/plans/2026-03-20-revision-workflow-design.md","content":"# 修改工作流设计\n\n## 背景\n\n当前 skill 主要针对\"写新章节\",但当用户说\"帮我改一下第3章\"时,没有系统的修改路径。结果是:改到哪里算哪里,容易漏,容易重复改。\n\n## 目标\n\n在 SKILL.md 中增加**修改工作流**,包含:\n1. 问题诊断(先搞清楚哪里有问题)\n2. 修改分级(轻度 vs 重度)\n3. 针对性修改清单\n\n## 设计方案\n\n### 1. 修改工作流流程\n\n```\n修改工作流:\n\n第一步:问题诊断\n- 读取目标章节\n- 对照质量标准,找出具体问题\n- 用一句话描述问题(如\"开头300字太拖,没有进冲突\")\n\n第二步:修改分级\n根据问题类型和严重程度,判断修改级别:\n\n| 级别 | 问题类型 | 修改范围 | 预计耗时 |\n|------|----------|----------|----------|\n| 轻度 | 错别字、语句不通顺、标点错误 | 局部修改 | 10-20分钟 |\n| 中度 | 某段对话不够自然、某个场景不够具体 | 单场景/单段落 | 30-60分钟 |\n| 重度 | 节奏问题、结构问题、开头钩子太弱 | 多场景或全章重写 | 1-3小时 |\n\n第三步:针对性修改\n根据诊断结果,按问题类型选择修改策略:\n- 钩子太弱 → 参考 hook-techniques.md\n- 节奏太慢 → 参考 chapter-guide.md 的节奏部分\n- 对白太水 → 参考 dialogue-writing.md\n- 场景空洞 → 参考 scene-design.md 和 content-expansion.md\n\n第四步:验证\n- 重读修改后的段落,确认问题已解决\n- 运行字数检查,确认字数没有严重缩水\n```\n\n### 2. 新增章节位置\n\n在 SKILL.md 的 `## 精修模式` 之后、`## Export` 之前,插入新的 `## 修改工作流` 章节。\n\n### 3. 常用问题诊断清单\n\n```markdown\n### 常用问题诊断清单\n\n对照以下问题,快速定位章节问题:\n\n**开头问题**\n- [ ] 开头是否在20%内进入冲突?\n- [ ] 是否有\"钩子\"吸引读者继续看?\n- [ ] 是否有过多的背景/设定说明?\n\n**节奏问题**\n- [ ] 是否有过多的\"summary\"(概述)而非\"scene\"(场景)?\n- [ ] 是否在某段停留太久?\n- [ ] 每章是否有明确的事件推进?\n\n**对白问题**\n- [ ] 对白是否推进了剧情/关系?\n- [ ] 对白是否有多余的\"解释腔\"?\n- [ ] 人物说话是否符合性格?\n\n**结尾问题**\n- [ ] 结尾是否有钩子?\n- [ ] 是否留下了悬念或转折?\n\n**一致性问题**\n- [ ] 是否与前文设定冲突?\n- [ ] 人物状态是否连贯?\n```\n\n### 4. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 在精修模式后、Export前,新增 `## 修改工作流` 章节 |\n| `references/quality-checklist.md` | 考虑是否需要增强问题诊断相关的内容(可选) |\n\n## 待实施\n\n- [ ] 在 SKILL.md 添加 `## 修改工作流` 章节\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2792,"content_sha256":"b16a17058afdb63e1176efcb280799276a99b6c6b30456963a4b7fa17d77ec89"},{"filename":"docs/plans/2026-03-20-revision-workflow-implementation.md","content":"# Revision Workflow Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add revision workflow section to SKILL.md with problem diagnosis, modification levels, and targeted modification guide.\n\n**Architecture:** Insert new `## 修改工作流` section after `## 精修模式` and before `## Export`.\n\n**Tech Stack:** Plain Markdown edits only.\n\n---\n\n## Task 1: Add 修改工作流 Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Read SKILL.md to find insertion point**\n\nRead the file to find where `## Export` begins. The new section should be inserted before `## Export`.\n\n**Step 2: Find the exact line where ## Export appears**\n\nInsert the following content before `## Export`:\n\n```markdown\n## 修改工作流\n\n当用户要求修改、重写或打磨某一章时,按以下流程执行:\n\n### 第一步:问题诊断\n\n读取目标章节,对照质量标准,找出具体问题。用一句话描述问题(如\"开头300字太拖,没有进冲突\")。\n\n**常用问题诊断清单:**\n\n**开头问题**\n- [ ] 开头是否在20%内进入冲突?\n- [ ] 是否有\"钩子\"吸引读者继续看?\n- [ ] 是否有过多的背景/设定说明?\n\n**节奏问题**\n- [ ] 是否有过多的\"summary\"(概述)而非\"scene\"(场景)?\n- [ ] 是否在某段停留太久?\n- [ ] 每章是否有明确的事件推进?\n\n**对白问题**\n- [ ] 对白是否推进了剧情/关系?\n- [ ] 对白是否有多余的\"解释腔\"?\n- [ ] 人物说话是否符合性格?\n\n**结尾问题**\n- [ ] 结尾是否有钩子?\n- [ ] 是否留下了悬念或转折?\n\n**一致性问题**\n- [ ] 是否与前文设定冲突?\n- [ ] 人物状态是否连贯?\n\n### 第二步:修改分级\n\n根据问题类型和严重程度,判断修改级别:\n\n| 级别 | 问题类型 | 修改范围 | 预计耗时 |\n|------|----------|----------|----------|\n| 轻度 | 错别字、语句不通顺、标点错误 | 局部修改 | 10-20分钟 |\n| 中度 | 某段对话不够自然、某个场景不够具体 | 单场景/单段落 | 30-60分钟 |\n| 重度 | 节奏问题、结构问题、开头钩子太弱 | 多场景或全章重写 | 1-3小时 |\n\n### 第三步:针对性修改\n\n根据诊断结果,按问题类型选择参考文档:\n\n- 钩子太弱 → 参考 [hook-techniques.md](references/hook-techniques.md)\n- 节奏太慢 → 参考 [chapter-guide.md](references/chapter-guide.md) 的节奏部分\n- 对白太水 → 参考 [dialogue-writing.md](references/dialogue-writing.md)\n- 场景空洞 → 参考 [scene-design.md](references/scene-design.md) 和 [content-expansion.md](references/content-expansion.md)\n- 整体重写 → 从 [chapter-template.md](references/chapter-template.md) 的场景拆分开始\n\n### 第四步:验证\n\n- 重读修改后的段落,确认问题已解决\n- 运行字数检查:`python3 scripts/check_chapter_wordcount.py \u003c章节文件路径>`\n- 确认字数没有严重缩水(轻度修改不应影响总字数)\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add revision workflow to SKILL.md\n\nAdd ## 修改工作流 section with 4-step process:\n1. Problem diagnosis (with checklist)\n2. Modification level (light/medium/heavy)\n3. Targeted modification (reference docs by problem type)\n4. Verification (re-read + word count)\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Add 修改工作流 section to SKILL.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3600,"content_sha256":"35a333af464bd0c1a31a80a3770728f25d7a5f12f85aa1dd1ecd16faebd36195"},{"filename":"docs/plans/2026-03-20-rhythm-alert-design.md","content":"# 节奏预警系统设计\n\n## 背景\n\n当前 skill 缺乏节奏预警机制。用户写长篇时容易陷入:\n- 场景重复(连续多章都在室内对话)\n- 伏笔遗忘(埋了10章忘了回收)\n- 多线失衡(某条线消失太久)\n- 节奏趋同(越写越平)\n\n## 目标\n\n创建节奏预警系统,包含:\n1. **脚本** `check_rhythm.py` — 自动扫描章节,生成健康报告\n2. **模板** `05-节奏健康报告.md` — 报告格式定义\n\n## 设计方案\n\n### 1. 节奏检查脚本\n\n**文件位置:** `scripts/check_rhythm.py`\n\n**功能:** 扫描小说目录下所有章节,生成节奏健康报告。\n\n**检查项:**\n\n```python\n# 场景重复检测\n- 检测连续N章是否在同一场景类型(室内/室外/对话/战斗等)\n- 标记\"场景类型重复超过3章\"的情况\n\n# 伏笔回收提醒\n- 读取 02-世界观与伏笔.md 中的伏笔列表\n- 扫描章节内容,检查哪些伏笔已被回应\n- 标记\"超过10章未回收\"的伏笔\n\n# 章节状态概览\n- 字数统计(总字数/平均章节字数)\n- 章节密度(每章事件数)\n- 钩子强度评估(结尾悬念词检测)\n\n# 多线均衡检查(如存在 03-多线管理.md)\n- 读取多线管理中的线状态跟踪表\n- 检查各线最后出现章节\n- 标记\"超过8章未出现\"的叙事线\n```\n\n**输出示例:**\n\n```text\n=== 节奏健康报告 ===\n生成时间:2026-03-20\n小说:XXX\n检查章节:第1-10章\n\n【警告】场景重复\n- 室内对话连续出现:第3章、第4章、第5章\n- 建议:第6章安排户外场景或动作场景\n\n【警告】伏笔超时未回收\n- \"神秘信封\":首次出现第2章,至今未回收(已过8章)\n- \"反派身份\":首次出现第5章,至今未回收(已过5章)\n\n【正常】章节字数\n- 平均字数:3200字/章\n- 最高:第7章(4100字)\n- 最低:第3章(2100字)\n\n【正常】钩子强度\n- 有悬念结尾的章节:8/10\n- 需要加强:第3章(结尾太平)\n\n【警告】多线均衡(副线A连续消失8章)\n- 主线:最近出现第10章\n- 副线A:最近出现第2章 ⚠️\n- 副线B:最近出现第9章\n```\n\n### 2. 节奏健康报告模板\n\n**文件位置:** `novels/\u003c书名>/05-节奏健康报告.md`\n\n**用途:** 每5-10章生成一次报告,记录节奏健康状态。\n\n```markdown\n# 节奏健康报告\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 场景分析\n\n### 场景类型分布\n| 场景类型 | 出现次数 | 占比 |\n|----------|----------|------|\n| 室内对话 | 5 | 25% |\n| 户外 | 3 | 15% |\n| ... | ... | ... |\n\n### 警告\n- [ ] 场景类型重复超过3章\n\n## 伏笔跟踪\n\n### 伏笔状态\n| 伏笔 | 首次出现 | 最近回收 | 状态 |\n|------|----------|----------|------|\n| ... | 第X章 | - | ⚠️ 未回收 |\n\n### 警告\n- [ ] 有伏笔超过10章未回收\n\n## 字数分析\n\n### 统计\n- 总字数:\n- 平均字数:\n- 最高章节:\n- 最低章节:\n\n### 警告\n- [ ] 有章节低于2000字\n- [ ] 有章节超过5000字\n\n## 钩子强度\n\n### 章节钩子评分\n| 章节 | 字数 | 钩子强度 | 备注 |\n|------|------|----------|------|\n| 第X章 | 3000 | ★★★☆☆ | 结尾太平 |\n\n### 警告\n- [ ] 有章节钩子强度低于2星\n\n## 多线均衡(如适用)\n\n### 叙事线状态\n| 叙事线 | 最后出现 | 间隔章节 | 状态 |\n|--------|----------|----------|------|\n| 主线 | 第10章 | 0 | ✅ |\n| 副线A | 第2章 | 8 | ⚠️ |\n\n### 警告\n- [ ] 有叙事线超过8章未出现\n\n## 综合评估\n\n**健康得分:** ★★★★☆ (4/5)\n\n**主要问题:**\n1. 副线A消失太久,需要安排出场\n2. 室内对话场景过多\n\n**建议:**\n1. 下1-2章优先让副线A出现\n2. 增加户外或动作场景平衡\n```\n\n### 3. 使用方式\n\n**触发时机:**\n- 每写完5-10章后运行一次\n- 用户说\"检查节奏\"时运行\n\n**命令:**\n```bash\npython3 scripts/check_rhythm.py novels/书名\n```\n\n### 4. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `scripts/check_rhythm.py` | 新增节奏检查脚本 |\n| `references/05-节奏健康报告.md` | 新增报告模板 |\n| `SKILL.md` | 在修改工作流或写作模式中添加节奏检查说明 |\n\n## 待实施\n\n- [ ] 创建 `scripts/check_rhythm.py`\n- [ ] 创建 `references/05-节奏健康报告.md`\n- [ ] 更新 `SKILL.md` 添加节奏检查说明\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4409,"content_sha256":"b921d0e2866752b82ef8bb8675d1301b61c110be1586826c1d877f551458e3b8"},{"filename":"docs/plans/2026-03-20-rhythm-alert-implementation.md","content":"# Rhythm Alert Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Create rhythm alert system with check_rhythm.py script and rhythm health report template.\n\n**Architecture:**\n1. Create `scripts/check_rhythm.py` - scans chapters, generates health report\n2. Create `references/05-节奏健康报告.md` - report template\n3. Update `SKILL.md` - add rhythm check instructions\n\n**Tech Stack:** Python script + Markdown templates.\n\n---\n\n## Task 1: Create check_rhythm.py Script\n\n**Files:**\n- Create: `scripts/check_rhythm.py`\n\n**Step 1: Write the script**\n\nCreate the script with the following functionality:\n\n```python\n#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n节奏检查脚本\n检查小说章节的节奏健康状态,生成报告\n\"\"\"\n\nimport re\nimport sys\nfrom pathlib import Path\nfrom collections import defaultdict\n\n# 修复 Windows 控制台编码问题\nif sys.platform == 'win32':\n import io\n sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')\n\n\ndef extract_chapter_content(file_path: Path) -> str:\n \"\"\"从章节文件中提取正文内容\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n lines = content.split('\\n')\n body_start = None\n body_end = None\n\n for i, line in enumerate(lines):\n stripped = line.strip()\n if stripped == '## 正文':\n body_start = i + 1\n continue\n if body_start is not None and stripped.startswith('## '):\n body_end = i\n break\n\n if body_start is not None:\n return '\\n'.join(lines[body_start:body_end]).strip()\n\n content_start = 0\n for i, line in enumerate(lines):\n if line.startswith('#') and '章' in line:\n content_start = i + 1\n break\n\n return '\\n'.join(lines[content_start:]).strip()\n\n\ndef count_chinese_words(text: str) -> int:\n \"\"\"统计中文字数\"\"\"\n chinese_chars = re.findall(r'[\\u4e00-\\u9fff]', text)\n return len(chinese_chars)\n\n\ndef detect_scene_type(text: str) -> str:\n \"\"\"简单检测场景类型\"\"\"\n # 基于关键词判断\n indoor_keywords = ['房间', '室内', '屋里', '屋内', '客厅', '卧室', '办公室', '教室']\n outdoor_keywords = ['外面', '户外', '街道', '路上', '天空', '花园', '广场', '野外']\n dialogue_keywords = ['说', '问', '答', '道', '喊', '叫', '对话', '聊天']\n\n indoor_count = sum(1 for kw in indoor_keywords if kw in text)\n outdoor_count = sum(1 for kw in outdoor_keywords if kw in text)\n dialogue_count = sum(1 for kw in dialogue_keywords if kw in text)\n\n if indoor_count > outdoor_count and indoor_count > dialogue_count:\n return '室内对话'\n elif outdoor_count > indoor_count:\n return '户外'\n elif dialogue_count > 0:\n return '对话为主'\n else:\n return '其他'\n\n\ndef check_chapters(novel_dir: Path) -> dict:\n \"\"\"检查章节节奏\"\"\"\n chapter_files = sorted(novel_dir.glob('第*.md'))\n\n if not chapter_files:\n return {'error': '未找到章节文件'}\n\n chapters = []\n word_counts = []\n scene_types = []\n\n for chapter_file in chapter_files:\n content = extract_chapter_content(chapter_file)\n word_count = count_chinese_words(content)\n scene_type = detect_scene_type(content)\n\n # 提取章节号\n match = re.match(r'第(\\d+)章', chapter_file.name)\n chapter_num = int(match.group(1)) if match else 0\n\n chapters.append({\n 'file': chapter_file,\n 'number': chapter_num,\n 'word_count': word_count,\n 'scene_type': scene_type\n })\n word_counts.append(word_count)\n scene_types.append(scene_type)\n\n # 检测场景重复\n scene_warnings = []\n consecutive_count = 1\n consecutive_type = scene_types[0] if scene_types else None\n\n for i in range(1, len(scene_types)):\n if scene_types[i] == consecutive_type:\n consecutive_count += 1\n else:\n if consecutive_count >= 3:\n scene_warnings.append(f\"场景'{consecutive_type}'连续出现{consecutive_count}章\")\n consecutive_count = 1\n consecutive_type = scene_types[i]\n\n if consecutive_count >= 3:\n scene_warnings.append(f\"场景'{consecutive_type}'连续出现{consecutive_count}章\")\n\n # 字数统计\n avg_words = sum(word_counts) / len(word_counts) if word_counts else 0\n max_words = max(word_counts) if word_counts else 0\n min_words = min(word_counts) if word_counts else 0\n\n return {\n 'chapters': chapters,\n 'word_counts': word_counts,\n 'scene_types': scene_types,\n 'scene_warnings': scene_warnings,\n 'avg_words': avg_words,\n 'max_words': max_words,\n 'min_words': min_words,\n 'total_chapters': len(chapters),\n 'total_words': sum(word_counts)\n }\n\n\ndef print_report(novel_dir: Path, results: dict):\n \"\"\"打印报告\"\"\"\n print('\\n' + '=' * 60)\n print('节奏健康报告')\n print('=' * 60)\n print(f'小说:{novel_dir.name}')\n print(f'检查章节:{results[\"total_chapters\"]}章')\n print(f'总字数:{results[\"total_words\"]:,}')\n print()\n\n # 场景警告\n if results.get('scene_warnings'):\n print('【警告】场景重复')\n for warning in results['scene_warnings']:\n print(f' ⚠️ {warning}')\n print()\n\n # 字数统计\n print('【字数统计】')\n print(f' 平均:{results[\"avg_words\"]:.0f}字/章')\n print(f' 最高:{results[\"max_words\"]:,}字')\n print(f' 最低:{results[\"min_words\"]:,}字')\n print()\n\n # 章节列表\n print('【章节概览】')\n for ch in results['chapters']:\n print(f\" 第{ch['number']:2d}章: {ch['word_count']:,}字 | {ch['scene_type']}\")\n print()\n\n if not results.get('scene_warnings') and not results.get('foreshadowing_warnings'):\n print('【状态】节奏健康,无明显警告')\n print('=' * 60)\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法: python scripts/check_rhythm.py \u003c小说目录路径>')\n return\n\n novel_dir = Path(sys.argv[1])\n if not novel_dir.exists():\n print(f'错误: 目录不存在 - {novel_dir}')\n return\n\n results = check_chapters(novel_dir)\n print_report(novel_dir, results)\n\n\nif __name__ == '__main__':\n main()\n```\n\n**Step 2: Commit**\n\n```bash\ngit add scripts/check_rhythm.py\ngit commit -m \"feat: add rhythm check script\n\nAdd scripts/check_rhythm.py for checking rhythm health:\n- Scene type detection (indoor/outdoor/dialogue)\n- Scene repetition warnings (3+ consecutive chapters)\n- Word count statistics\n- Chapter overview table\n\nUsage: python scripts/check_rhythm.py \u003cnovel_dir>\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 05-节奏健康报告.md Template\n\n**Files:**\n- Create: `references/05-节奏健康报告.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 节奏健康报告\n\n> 每写完5-10章后生成一次,记录节奏健康状态。\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 场景分析\n\n### 场景类型分布\n| 场景类型 | 出现次数 | 占比 |\n|----------|----------|------|\n| 室内对话 | 5 | 25% |\n| 户外 | 3 | 15% |\n| 动作 | 2 | 10% |\n| 其他 | 10 | 50% |\n\n### 警告\n- [ ] 场景类型重复超过3章\n\n## 伏笔跟踪\n\n### 伏笔状态\n| 伏笔 | 首次出现 | 最近回收 | 状态 |\n|------|----------|----------|------|\n| 神秘信封 | 第2章 | - | ⚠️ 未回收 |\n| 反派身份 | 第5章 | 第8章 | ✅ 已回收 |\n\n### 警告\n- [ ] 有伏笔超过10章未回收\n\n## 字数分析\n\n### 统计\n- 总字数:\n- 平均字数:\n- 最高章节:第X章(XXXX字)\n- 最低章节:第Y章(XXXX字)\n\n### 警告\n- [ ] 有章节低于2000字\n- [ ] 有章节超过5000字\n\n## 钩子强度\n\n### 章节钩子评分\n| 章节 | 字数 | 钩子强度 | 备注 |\n|------|------|----------|------|\n| 第1章 | 3200 | ★★★★☆ | 悬念感强 |\n| 第2章 | 2800 | ★★★☆☆ | 结尾略平 |\n| ... | ... | ... | ... |\n\n### 评分标准\n- ★★★★★:强悬念(死亡威胁、重大揭示)\n- ★★★★☆:明确悬念(未解问题、新危机)\n- ★★★☆☆:一般悬念(轻微好奇)\n- ★★☆☆☆:结尾较弱\n- ★☆☆☆☆:平结尾\n\n### 警告\n- [ ] 有章节钩子强度低于2星\n\n## 多线均衡(如适用)\n\n### 叙事线状态\n| 叙事线 | 最后出现 | 间隔章节 | 状态 |\n|--------|----------|----------|------|\n| 主线 | 第10章 | 0 | ✅ |\n| 副线A | 第2章 | 8 | ⚠️ |\n| 副线B | 第9章 | 1 | ✅ |\n\n### 状态标准\n- ✅ 正常(最近5章内出现过)\n- ⚠️ 警告(5-8章未出现)\n- 🔴 危险(超过8章未出现)\n\n### 警告\n- [ ] 有叙事线超过8章未出现\n\n## 综合评估\n\n**健康得分:** ★★★★☆ (4/5)\n\n**主要问题:**\n1. 副线A消失太久,需要安排出场\n2. 室内对话场景过多\n\n**建议:**\n1. 下1-2章优先让副线A出现\n2. 增加户外或动作场景平衡\n3. 第6章结尾需要加强钩子\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/05-节奏健康报告.md\ngit commit -m \"feat: add rhythm health report template\n\nAdd references/05-节奏健康报告.md template:\n- Basic info section\n- Scene analysis with distribution table\n- Foreshadowing tracking table\n- Word count statistics\n- Hook strength rating per chapter\n- Multi-line balance check (if applicable)\n- Overall health score and recommendations\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 3: Update SKILL.md\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find where to add rhythm check instructions**\n\nFind the 修改工作流 section or the 精修模式 section and add a note about rhythm checks.\n\n**Step 2: Add to 修改工作流 or create a reference**\n\nIn the 修改工作流 section's \"第四步:验证\" step, add a note about running rhythm checks.\n\nOr add a new section reference in the \"健康检查\" part.\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add rhythm check instructions to SKILL.md\n\nAdd reference to check_rhythm.py script and rhythm health report\ntemplate in the revision workflow or as a periodic check.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Create scripts/check_rhythm.py | ⬜ |\n| 2 | Create references/05-节奏健康报告.md | ⬜ |\n| 3 | Update SKILL.md with rhythm check info | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":10862,"content_sha256":"452e69762c6f0ebed5513c92ee250ca4f70c6c99b5fa90e871bd500b87cf3c8a"},{"filename":"docs/plans/2026-03-20-rhythm-curve-design.md","content":"# 叙事节奏曲线设计\n\n## 背景\n\n当前 skill 缺乏叙事节奏曲线的设计机制。用户知道好的小说紧张程度应该有起伏,但:\n- 不知道怎么设计曲线\n- 不知道关键节点在哪\n- 写着写着曲线就平了\n- 写完后不知道怎么验证\n\n## 目标\n\n创建叙事节奏曲线系统:\n1. **SKILL.md** — 增加节奏曲线设计章节\n2. **模板** `07-叙事节奏曲线.md` — 曲线设计、节点定义、跟踪验证\n\n## 设计方案\n\n### 1. 叙事节奏曲线类型\n\n预设几种常见的节奏曲线模板,用户选择后填充:\n\n**A. 递进型**\n```\n紧张度:\n★★★★★ ★★★★★\n ★★★★ ★★★★\n ★★★ ★★★\n ★★★★\n ★★★★★\n第1章 → 中段 → 结局\n```\n适用:升级流、复仇流\n\n**B. 波浪型**\n```\n紧张度:\n★★★★ ★★★★\n ★★★ ★★★\n ★★ ★★\n ★★★★\n第1章 → 中段1 中段2 → 结局\n```\n适用:悬疑、探险\n\n**C. 高原型**\n```\n紧张度:\n★★★★★ ★★★★ ★★★★\n ★★★ ★★★\n ★★★\n第1章 → 中段 → 结局\n```\n适用:都市、职场\n\n**D. 反转型**\n```\n紧张度:\n ★★★★★\n★★★★★ ★★★\n ★★★★\n ★★★\n第1章 → 中段 → 结局\n```\n适用:宫斗、权谋\n\n### 2. 关键节点定义\n\n| 节点 | 位置 | 紧张度要求 | 必须元素 |\n|------|------|-----------|----------|\n| 开篇钩子 | 第1章 | 中高 | 危机/悬念/目标 |\n| 第一个小高潮 | 前10% | 中高 | 小胜利或小失败 |\n| 中点转折 | 50% | 最高 | 认知翻转/重大失败 |\n| 中段升级 | 60-70% | 高 | 代价增大 |\n| 倒数第二个高潮 | 85% | 很高 | 终极选择 |\n| 结局 | 100% | 最高 | 终极对决/终极选择 |\n\n### 3. 曲线跟踪机制\n\n每写完5章,记录一次紧张度评分(1-5星),对照设计曲线检查。\n\n### 4. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 增加 `## 叙事节奏曲线` 章节 |\n| `references/07-叙事节奏曲线.md` | 新增曲线模板 |\n\n## 待实施\n\n- [ ] 更新 `SKILL.md` 增加叙事节奏曲线章节\n- [ ] 创建 `references/07-叙事节奏曲线.md` 模板\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2410,"content_sha256":"ef2d45687f716eb63f2390f29874c96d6d5d09dca116ad302c50b3d8f46d500c"},{"filename":"docs/plans/2026-03-20-rhythm-curve-implementation.md","content":"# Narrative Rhythm Curve Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add narrative rhythm curve system to SKILL.md and create standalone template.\n\n**Architecture:**\n1. Update SKILL.md - add narrative rhythm curve section\n2. Create `references/07-叙事节奏曲线.md` template\n\n**Tech Stack:** Plain Markdown files.\n\n---\n\n## Task 1: Update SKILL.md - Add Narrative Rhythm Curve Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find insertion point**\n\nFind a good location. Consider adding after \"## 出版门控\" or in the Planning Rules section.\n\n**Step 2: Insert the new section**\n\n```markdown\n## 叙事节奏曲线\n\n设计全书的紧张程度起伏,确保节奏有峰有谷,避免越写越平。\n\n### 选择曲线类型\n\n根据你的故事类型,选择一种节奏曲线:\n\n**A. 递进型** — 紧张度持续上升\n适用:升级流、复仇流、打怪升级\n\n**B. 波浪型** — 紧张度波浪起伏\n适用:悬疑、探险、探险解密\n\n**C. 高原型** — 紧张度保持中高水平\n适用:都市、职场、情感\n\n**D. 反转型** — 开头紧张,结局更紧张\n适用:宫斗、权谋、阴谋\n\n### 关键节点\n\n每个故事必须有这些关键节点:\n\n| 节点 | 位置 | 紧张度 | 必须元素 |\n|------|------|--------|----------|\n| 开篇钩子 | 第1章 | ★★★☆ | 危机/悬念/目标 |\n| 第一个小高潮 | 前10% | ★★★☆ | 小胜利或小失败 |\n| 中点转折 | 50% | ★★★★★ | 认知翻转/重大失败 |\n| 中段升级 | 60-70% | ★★★★☆ | 代价增大 |\n| 倒数第二个高潮 | 85% | ★★★★★ | 终极选择 |\n| 结局 | 100% | ★★★★★ | 终极对决/终极选择 |\n\n### 曲线跟踪\n\n每写完5章,对照设计检查紧张度:\n\n- 紧张度低于设计 → 需要加强\n- 紧张度高于设计 → 可能太快,需要喘息\n\n**详细模板:** [references/07-叙事节奏曲线.md](references/07-叙事节奏曲线.md)\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add narrative rhythm curve section to SKILL.md\n\nAdd ## 叙事节奏曲线 section with:\n- Curve type selection (递进/波浪/高原/反转)\n- Key node definitions (6 nodes with position/tension/elements)\n- Curve tracking method\n- Reference to 07-叙事节奏曲线.md template\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Create 07-叙事节奏曲线.md Template\n\n**Files:**\n- Create: `references/07-叙事节奏曲线.md`\n\n**Step 1: Write the template**\n\n```markdown\n# 叙事节奏曲线\n\n> 设计全书的紧张程度起伏,确保节奏有峰有谷。\n\n## 选择的曲线类型\n\n- [ ] 递进型 — 紧张度持续上升\n- [ ] 波浪型 — 紧张度波浪起伏\n- [ ] 高原型 — 紧张度保持中高水平\n- [ ] 反转型 — 开头紧张,结局更紧张\n\n**曲线图示:**\n\n```\n紧张度:\n★\n\n★\n\n★\n\n★ ★\n第1章 → → 结局\n```\n\n## 关键节点规划\n\n| 节点 | 目标章节 | 紧张度目标 | 必须元素 | 状态 |\n|------|----------|-----------|----------|------|\n| 开篇钩子 | 第1章 | ★★★☆ | | ⬜ |\n| 第一个小高潮 | 第X章 | ★★★☆ | | ⬜ |\n| 中点转折 | 第X章 | ★★★★★ | | ⬜ |\n| 中段升级 | 第X章 | ★★★★☆ | | ⬜ |\n| 倒数第二个高潮 | 第X章 | ★★★★★ | | ⬜ |\n| 结局 | 终章 | ★★★★★ | | ⬜ |\n\n## 节奏曲线跟踪表\n\n每写完5章,记录实际紧张度,对照设计检查:\n\n| 检查点 | 章节范围 | 设计紧张度 | 实际紧张度 | 差距 | 调整建议 |\n|--------|----------|-----------|-----------|------|----------|\n| 第1次 | 第1-5章 | ★★★☆ | | | |\n| 第2次 | 第6-10章 | | | | |\n| 第3次 | 第11-15章 | | | | |\n| 第4次 | 第16-20章 | | | | |\n| ... | ... | | | | |\n\n## 各阶段紧张度要求\n\n### 第一阶段(前25%)\n- 建立紧张承诺\n- 设置主要冲突\n- 紧张度:★★☆ ~ ★★★☆\n\n### 第二阶段(25%-50%)\n- 逐步升级紧张\n- 建立节奏:紧张→喘气→紧张\n- 紧张度:★★☆ ~ ★★★★☆\n\n### 第三阶段(50%-75%)\n- 中点必须最高或次高\n- 代价明显增大\n- 紧张度:★★★☆ ~ ★★★★★\n\n### 第四阶段(75%-结局)\n- 持续高紧张\n- 逐步推向终极高潮\n- 紧张度:★★★★☆ ~ ★★★★★\n\n## 常见问题处理\n\n| 问题 | 表现 | 解决方案 |\n|------|------|----------|\n| 中段疲软 | 紧张度持续走低 | 增加新冲突/角色介入 |\n| 高潮太早 | 中段就到达顶峰 | 延迟关键揭示/增加阻碍 |\n| 结局平 | 最终对决不够紧张 | 增强代价/增加反转 |\n| 节奏单调 | 一直同样的紧张度 | 增加喘息场景/支线起伏 |\n```\n\n**Step 2: Commit**\n\n```bash\ngit add references/07-叙事节奏曲线.md\ngit commit -m \"feat: add narrative rhythm curve template\n\nAdd references/07-叙事节奏曲线.md:\n- Curve type selection with 4 patterns\n- Key nodes table (6 nodes with position/tension/elements)\n- Rhythm curve tracking table\n- Phase-based tension requirements (4 stages)\n- Common problems and solutions\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Update SKILL.md - add 叙事节奏曲线 section | ⬜ |\n| 2 | Create references/07-叙事节奏曲线.md | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5544,"content_sha256":"e60c5c35c98b0d94feb92236f14f98b557b217d5467af70b68c1f2a8db49b104"},{"filename":"docs/plans/2026-03-20-story-engine-design.md","content":"# 故事引擎独立区块设计\n\n## 背景\n\n当前大纲模板缺少对\"故事核心驱动力\"的显式表达。作者往往能讲出\"这是一个关于xxx的故事\",但说不清\"这个故事靠什么机制跑起来\"。\n\n结果:写到中段,节奏松散,升级逻辑混乱,主角动机模糊。\n\n## 目标\n\n在大纲模板中增加独立的 `## 故事引擎` 区块,要求作者在开始正文前明确:\n- 核心机制是什么\n- 代价/资源是什么\n- 升级规则是什么\n\n## 设计方案\n\n### 1. 新增区块:`## 故事引擎`\n\n在 `outline-template.md` 中,在\"项目定位\"之后、\"主线冲突\"之前插入。\n\n### 2. 子字段定义\n\n```\n## 故事引擎\n\n### 核心机制\n用一句话说清楚:这个故事靠什么驱动读者往下看?\n公式:主角必须___,每___就___。\n示例:「主角必须每破解一个暗号才能多活一天,每多用一次能力就失去一段记忆。」\n\n### 代价与资源\n每行动一次,主角/世界要失去什么?什么资源是有限的?\n示例:「每天只有一次解码机会。用尽后会被强制淘汰出游戏。」\n\n### 升级规则\n随着故事推进,代价如何递增?紧张感如何升级?\n公式:第N阶段,代价变成___。\n示例:「前10章代价是记忆,中10章代价是生命,后10章代价是身边人的命运。」\n```\n\n### 3. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `references/outline-template.md` | 在\"项目定位\"后新增完整的故事引擎区块 |\n| `SKILL.md` | Intake 部分强调\"故事引擎\"是必须项;策划模式开始时引导提炼引擎 |\n| `references/plot-structures.md` | 增加\"如何识别自己的故事引擎\"指导 |\n\n### 4. 整合流程\n\n**策划模式开始时,AI 应该:**\n1. 先问清题材/类型\n2. 再问\"这个故事的核心玩点/机制是什么\"——用引导问题帮助提炼\n3. 引导问题示例:\n - 「读者追这本书的理由是什么?是主角的成长?还是谜题解开的那一刻爽感?」\n - 「主角每赢一次,代价是什么?代价会越来越大吗?」\n - 「这个故事到最后,代价会大到什么程度?」\n\n**验收标准:**\n- 故事引擎必须有具体的、可以描述的\"机制\"\n- 不能是空泛的\"正义战胜邪恶\"或\"主角变强\"\n- 代价必须是读者能感知到的代价,不能是无关痛痒的代价\n\n## 待实施\n\n- [ ] 更新 `outline-template.md`\n- [ ] 更新 `SKILL.md` 的 intake 和策划模式引导\n- [ ] 更新 `plot-structures.md`(可选,作为延伸阅读)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2557,"content_sha256":"0e1c7b19a9c837e9f751b67da3ffd9f020dac79655beb8d1acdfb9eb6aefcd0a"},{"filename":"docs/plans/2026-03-20-story-engine-implementation.md","content":"# Story Engine Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add independent `## 故事引擎` block to outline template with 3 subfields: core mechanism, cost/resources, escalation rules.\n\n**Architecture:** Modify existing `outline-template.md` to insert new block between \"项目定位\" and \"主线冲突\". Update `SKILL.md` intake and planning guidance to emphasize story engine extraction.\n\n**Tech Stack:** Plain Markdown edits only.\n\n---\n\n## Task 1: Update outline-template.md\n\n**Files:**\n- Modify: `references/outline-template.md`\n\n**Step 1: Read current outline-template.md**\n\nRead the file to understand current structure and find exact insertion point.\n\n**Step 2: Insert story engine block after 项目定位 section**\n\nInsert the following block after the 项目定位 section and before the 主线冲突 section:\n\n```markdown\n## 故事引擎\n\n> 这一部分描述故事的核心驱动力。明确\"引擎\"比描述\"主题\"更能指导写作——读者追一本书的理由,往往是一个具体的机制,而不是一个抽象的主题。\n\n### 核心机制\n用一句话说清楚:这个故事靠什么驱动读者往下看?\n\n**公式:** 主角必须___,每___就___。\n\n**示例:** 「主角必须每破解一个暗号才能多活一天,每多用一次能力就失去一段记忆。」\n\n**检验标准:** 如果说不出\"读者为什么追下去\",这个字段就不够具体。\n\n### 代价与资源\n每行动一次,主角/世界要失去什么?什么资源是有限的?\n\n**公式:** ___是有限的,每次___就会消耗___。\n\n**示例:** 「每天只有一次解码机会。用尽后会被强制淘汰出游戏。」\n\n### 升级规则\n随着故事推进,代价如何递增?紧张感如何升级?\n\n**公式:** 第N阶段,代价变成___。\n\n**示例:** 「前10章代价是记忆,中10章代价是生命,后10章代价是身边人的命运。」\n\n**检验标准:** 代价必须真的变重,不能只是\"越来越难\"。\n```\n\n**Step 3: Verify structure**\n\nConfirm the new block sits correctly between 项目定位 and 主线冲突.\n\n**Step 4: Commit**\n\n```bash\ngit add references/outline-template.md\ngit commit -m \"feat: add story engine block to outline template\n\nAdd independent ## 故事引擎 section with 3 subfields:\n- 核心机制: story's core driving mechanism\n- 代价与资源: cost/resource constraints\n- 升级规则: escalation logic for tension\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Update SKILL.md - Intake Section\n\n**Files:**\n- Modify: `SKILL.md:43-52` (Intake section)\n\n**Step 1: Read current intake section in SKILL.md**\n\nRead lines 40-60 to find exact intake text.\n\n**Step 2: Add story engine to intake questions**\n\nAdd story engine as a required intake item alongside the existing 6 questions:\n\nAdd to the intake list:\n```\n- 故事引擎(核心机制、代价/资源、升级规则)\n```\n\nAnd modify the surrounding text to explain why:\n\n```markdown\n- 故事引擎(核心机制、代价/资源、升级规则)\n- 题材 / 子类型\n- 一句话 premise 或核心冲突\n- 主角身份、最大欲望、致命缺陷\n- 目标读者、文风关键词、禁忌\n- 叙事视角(第一人称 / 第三人称 / 群像)\n- 篇幅目标与交付模式\n```\n\n**Step 3: Add explanatory note after the list**\n\nAdd:\n\n```markdown\n如果用户只给了模糊想法,不要空泛追问;应给出具体备选并推荐更稳的方案。\n\n**关于故事引擎:** 如果用户说不清引擎,用引导问题帮助提炼:\n- 「读者追这本书的理由是什么?是主角的成长?还是谜题解开的那一刻爽感?」\n- 「主角每赢一次,代价是什么?代价会越来越大吗?」\n- 「这个故事到最后,代价会大到什么程度?」\n```\n\n**Step 4: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add story engine to intake questions in SKILL.md\n\nAdd story engine extraction to required 7-item intake checklist.\nInclude guiding questions for helping users articulate their story engine.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 3: Update SKILL.md - 书名生成 Section\n\n**Files:**\n- Modify: `SKILL.md:54-96` (书名生成 section)\n\n**Step 1: Read current 书名生成 section**\n\n**Step 2: Add story engine reference before title generation**\n\nThe story engine is relevant because titles often reflect the core mechanism. Add a note:\n\nIn the 书名生成 section, after the 标题结构参考 table, add:\n\n```markdown\n### 生成流程\n\n1. 分析**故事引擎**(核心机制、代价、升级规则)—— 书名往往暗示机制\n2. 提取 2-3 个关键词作为标题元素\n3. 运用上表中的结构,组合生成 5 个以上候选\n4. 评估每个候选的:独特性、画面感、与主题的关联度\n5. 精选 3-5 个最佳选项,每项附上一句话说明推荐理由\n6. 让用户最终确认书名\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: link story engine to title generation in SKILL.md\n\nAdd story engine analysis as first step in title generation workflow.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 4: (Optional) Update plot-structures.md\n\n**Files:**\n- Modify: `references/plot-structures.md`\n\n**Step 1: Read current plot-structures.md**\n\n**Step 2: Add \"识别故事引擎\" section**\n\nAdd a new section at the end or near the beginning:\n\n```markdown\n## 如何识别故事引擎\n\n写大纲之前,先问自己三个问题:\n\n### 1. 核心机制是什么?\n「这个故事靠什么让读者翻页?」\n- 不是\"成长\"或\"复仇\"这种主题\n- 而是具体的、可描述的机制\n- 例如:「每回答一个谜题就能多活一天」\n\n### 2. 代价是什么?\n「每行动一次,要失去什么?」\n- 代价必须是读者能感知到的\n- 不能是无关痛痒的代价\n- 例如:「记忆」、「时间」、「身边人」\n\n### 3. 代价如何升级?\n「故事越往后,代价怎么变得更重?」\n- 前10章的代价 vs 后10章的代价\n- 如果代价不升级,故事会越写越疲\n```\n\n**Step 3: Commit (if modified)**\n\n```bash\ngit add references/plot-structures.md\ngit commit -m \"docs: add story engine identification guide to plot-structures\n\nAdd section on how to identify story engine before writing outline.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | File | Status |\n|------|------|--------|\n| 1 | `references/outline-template.md` | ⬜ |\n| 2 | `SKILL.md` (Intake) | ⬜ |\n| 3 | `SKILL.md` (书名生成) | ⬜ |\n| 4 | `references/plot-structures.md` (optional) | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6877,"content_sha256":"640f6a0b959e4e8b366f78e029724f87b3da86dfd12ca8f60ec053596bcafb22"},{"filename":"docs/plans/2026-03-20-writing-modes-design.md","content":"# 写作循环模式分离设计\n\n## 背景\n\n当前的 Chapter Loop 强制每章都走完整 8 步流程,但实际写作有两种截然不同的阶段:\n\n- **草稿阶段**:需要速度,不要打断创作流\n- **精修阶段**:需要打磨,逐项检查质量\n\n强制草稿阶段走完整流程会导致:写作被打断、创作热情消退、效率低下。\n\n## 目标\n\n在 SKILL.md 中引入**双模式**写作循环:\n\n1. **草稿模式** — 专注输出,最小打断\n2. **精修模式** — 完整检查,质量打磨\n\n让用户在不同阶段使用不同模式。\n\n## 设计方案\n\n### 1. 新增:草稿模式\n\n**定义:** 适用于第一遍快速写作,不打断创作流。\n\n**核心原则:** 写出来比写对更重要。\n\n**步骤(简化版):**\n\n```\n草稿模式步骤:\n1. 直接开始写(不读大纲、不拆场景、不查参考文档)\n2. 写完后运行字数检查:python3 scripts/check_chapter_wordcount.py \u003c章节文件路径>\n3. 标记完成,进入下一章草稿\n```\n\n**触发条件:** 用户说\"起草第X章\"、\"先写个初稿\"、\"快速输出\"等。\n\n**判断逻辑:**\n- 如果用户明确说\"草稿\"、\"初稿\"、\"先写\"、\"快速\",默认草稿模式\n- 如果用户说\"精修\"、\"修改\"、\"打磨\"、\"质量检查\",默认精修模式\n- 如果不确定,默认精修模式(保证质量)\n\n### 2. 精修模式(现有 Chapter Loop)\n\n**定义:** 适用于草稿完成后的质量打磨。\n\n**步骤(完整版):**\n\n```\n精修模式步骤:\n1. 读取 00-大纲.md、最近章节摘要、02-世界观与伏笔.md\n2. 明确 本章目标 / 阻碍 / 转折 / 结尾钩子\n3. 先拆 3-6 个场景,再落正文\n4. 开头前 20% 必须尽快进入冲突\n5. 对话、扩写、连贯性、结尾钩子分别参考对应文档\n6. 写完后运行字数检查\n7. 用 quality-checklist.md 自查\n8. 回写章节摘要、人物状态、伏笔状态与章节进度\n```\n\n### 3. 模式选择指导\n\n在 SKILL.md 的\"Default Working Mode\"部分之后、Chapter Loop 部分之前,添加:\n\n```markdown\n## 写作模式选择\n\n根据当前阶段选择合适的写作模式:\n\n| 阶段 | 推荐模式 | 核心目标 |\n|------|----------|----------|\n| 第一遍起草 | 草稿模式 | 快速输出,不打断创作流 |\n| 修改某一章 | 精修模式 | 逐项检查,打磨质量 |\n| 写完所有章节后通读 | 精修模式 | 整体检查前后一致性 |\n\n**判断规则:**\n- 用户说\"起草\"、\"初稿\"、\"先写\"、\"快速输出\" → 草稿模式\n- 用户说\"修改\"、\"打磨\"、\"精修\"、\"检查质量\" → 精修模式\n- 不明确时默认精修模式\n```\n\n### 4. 修改文件清单\n\n| 文件 | 修改内容 |\n|------|----------|\n| `SKILL.md` | 新增\"写作模式选择\"章节;草稿模式步骤;精修模式标注(现有 Chapter Loop 重命名) |\n\n## 待实施\n\n- [ ] 更新 `SKILL.md` 添加模式选择指导\n- [ ] 更新 `SKILL.md` 添加草稿模式步骤\n- [ ] 将现有 Chapter Loop 标注为\"精修模式\"\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3008,"content_sha256":"9b56d19460f960d242a85d04b112fb1df864450cc2214bcb04e3fb4c64e61a91"},{"filename":"docs/plans/2026-03-20-writing-modes-implementation.md","content":"# Writing Modes Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Add dual-mode writing loop to SKILL.md: draft mode (fast output) vs polish mode (full quality checks).\n\n**Architecture:** Insert new \"写作模式选择\" section and draft mode steps into SKILL.md. Rename existing Chapter Loop to \"精修模式\".\n\n**Tech Stack:** Plain Markdown edits only.\n\n---\n\n## Task 1: Add 写作模式选择 Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Read SKILL.md to find insertion point**\n\nRead the file to find where \"Default Working Mode\" ends and where \"Chapter Loop\" begins.\n\n**Step 2: Find the location**\n\nThe new section should be inserted between:\n- End of \"Default Working Mode\" section\n- Start of \"Chapter Loop\" section\n\n**Step 3: Insert the following content:**\n\n```markdown\n## 写作模式选择\n\n根据当前阶段选择合适的写作模式:\n\n| 阶段 | 推荐模式 | 核心目标 |\n|------|----------|----------|\n| 第一遍起草 | 草稿模式 | 快速输出,不打断创作流 |\n| 修改某一章 | 精修模式 | 逐项检查,打磨质量 |\n| 写完所有章节后通读 | 精修模式 | 整体检查前后一致性 |\n\n**判断规则:**\n- 用户说\"起草\"、\"初稿\"、\"先写\"、\"快速输出\" → 草稿模式\n- 用户说\"修改\"、\"打磨\"、\"精修\"、\"检查质量\" → 精修模式\n- 不明确时默认精修模式\n```\n\n**Step 4: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add writing mode selection guidance to SKILL.md\n\nAdd dual-mode concept: draft mode (fast output) vs polish mode (full checks).\nInclude decision rules for mode selection.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 2: Rename Chapter Loop to 精修模式\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Find the \"## Chapter Loop\" header**\n\nRead SKILL.md to find the line containing \"## Chapter Loop\".\n\n**Step 2: Rename it**\n\nChange `## Chapter Loop` to `## 精修模式`.\n\n**Step 3: Add a brief intro sentence**\n\nAfter the renamed header, add:\n\n```markdown\n精修模式适用于草稿完成后的质量打磨。每个步骤都必须执行。\n```\n\n**Step 4: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: rename Chapter Loop to 精修模式\n\nMark existing chapter loop as polish mode for quality refinement.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Task 3: Add 草稿模式 Section\n\n**Files:**\n- Modify: `SKILL.md`\n\n**Step 1: Read SKILL.md to find insertion point**\n\nFind where to insert the draft mode section. It should be placed either:\n- Right before \"## 精修模式\" (newly renamed Chapter Loop)\n- Or in the \"写作模式选择\" section\n\n**Step 2: Insert the following content before \"## 精修模式\":**\n\n```markdown\n## 草稿模式\n\n草稿模式适用于第一遍快速写作。核心原则:**写出来比写对更重要**。\n\n### 什么时候用\n- 用户说\"起草第X章\"、\"先写个初稿\"、\"快速输出\"\n- 项目处于初期阶段,需要快速堆字数\n\n### 步骤(简化版)\n\n1. **直接开始写** — 不读大纲、不拆场景、不查参考文档\n2. **写完后字数检查** — 运行 `python3 scripts/check_chapter_wordcount.py \u003c章节文件路径>`\n3. **标记完成** — 写入章节摘要,进入下一章草稿\n\n### 注意事项\n- 草稿阶段不要停下来修改错别字或不通顺的句子——标注出来,写完再统一改\n- 不要回头重读上一章——写完就是写完了\n- 字数达标(≥3000字)即表示草稿完成\n```\n\n**Step 3: Commit**\n\n```bash\ngit add SKILL.md\ngit commit -m \"feat: add draft mode (草稿模式) to SKILL.md\n\nAdd simplified draft mode with 3 steps: write directly, check word count, mark done.\nDesigned for fast output without interrupting creative flow.\n\n---\n\n**Authored by Henry Zhang**\n\nWebsite: \u003chttps://zhanghe.dev>\n\nContact: \[email protected]>\"\n```\n\n---\n\n## Summary\n\n| Task | Description | Status |\n|------|-------------|--------|\n| 1 | Add 写作模式选择 section | ⬜ |\n| 2 | Rename Chapter Loop to 精修模式 | ⬜ |\n| 3 | Add 草稿模式 section | ⬜ |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4208,"content_sha256":"140bc906b249df72315120031b6617d90ce44b39f4c7960891d122344834f84a"},{"filename":"FILE_INDEX.md","content":"# 文件索引与导航\n\n> 快速找到你需要的文档\n\n---\n\n## 📖 入门必读(3 个文件)\n\n| 优先级 | 文件名 | 用途 | 阅读时间 |\n|--------|--------|------|---------|\n| ⭐⭐⭐ | [README.md](README.md) | 项目总览,所有功能介绍 | 10 分钟 |\n| ⭐⭐⭐ | [QUICK_START.md](QUICK_START.md) | 5 分钟上手指记 | 5 分钟 |\n| ⭐⭐⭐ | [SKILL.md](SKILL.md) | 主技能文件,完整工作流 | 30 分钟 |\n\n**推荐顺序**:QUICK_START → README → SKILL\n\n---\n\n## 📂 核心模板文件(4 个)\n\n### 大纲模板\n\n| 文件名 | 适用场景 | 字段数 | 填写时间 |\n|--------|---------|--------|---------|\n| [outline-template-v1-minimal.md](references/outline-template-v1-minimal.md) | **默认推荐**,快速启动 | 10 个 | 5 分钟 |\n| [outline-template.md](references/outline-template.md) | 复杂项目,需要详细规划 | 50+ 个 | 30 分钟 + |\n\n**建议**:先用极简版,写了几章后再根据需要补充标准版。\n\n---\n\n### 人物档案\n\n| 文件名 | 适用场景 | 特点 |\n|--------|---------|------|\n| [character-template-v2.md](references/character-template-v2.md) | **默认推荐**,驱动式引擎 | 欲望 - 恐惧双引擎、声音指纹、缺陷 - 失败映射 |\n| [character-template.md](references/character-template.md) | 静态档案,v1 版本 | 基础字段,静态描述 |\n\n**v2 版核心改进**:\n- 从\"填空表格\"变成\"驱动引擎\"\n- 每个字段都能转化为写作约束\n- 包含「声音锚点」保持对白一致性\n\n---\n\n### 其他模板\n\n| 文件名 | 用途 |\n|--------|------|\n| [chapter-template.md](references/chapter-template.md) | 章节任务卡、场景拆分、复盘 |\n| [progress-dashboard-template.md](references/progress-dashboard-template.md) | 进度仪表盘,AI 自动维护 |\n| [story-bible-template.md](references/story-bible-template.md) | 世界观与伏笔台账(复杂项目) |\n\n---\n\n## 🛠️ 工具脚本(7 个)\n\n| 文件名 | 用途 | 使用频率 |\n|--------|------|---------|\n| [check_chapter_wordcount.py](scripts/check_chapter_wordcount.py) | 字数检查 | 每章必用 |\n| [check_ai_style.py](scripts/check_ai_style.py) | **AI 味检测**(9 种症状,支持--all 批量) | 每章必用 |\n| [check_novel_health.py](scripts/check_novel_health.py) | **小说健康体检**(字数 + 节奏 + 场景) | 每 5-10 章 |\n| [check_timeline.py](scripts/check_timeline.py) | **时间线一致性检查**(季节/天气/时段) | 每 10 章或完稿时 |\n| [character_tracker.py](scripts/character_tracker.py) | **人物一致性检查**(禁止用语 + 情绪突变) | 每 10 章或完稿时 |\n| [generate_epub.py](scripts/generate_epub.py) | 导出 EPUB 电子书 | 完稿时用 |\n| [translate_to_english.py](scripts/translate_to_english.py) | 翻译成英文 | 按需 |\n\n**AI 味检测脚本**(v2 重点):\n```bash\npython scripts/check_ai_style.py novels/我的小说/第01章.md\n```\n\n检测 9 种 AI 味症状:\n- 🔴 重度:空泛形容词、情绪标签句、视角混乱\n- 🟡 中度:四字成语、解释连接词、书面化对白\n- 🟢 轻度:时间转折词、句式均匀\n\n---\n\n## 📚 改进文档(按轮次分类)\n\n### 第一轮改进(轻量级骨架)\n\n| 文件名 | 用途 | 类别 |\n|--------|------|------|\n| [outline-template-v1-minimal.md](references/outline-template-v1-minimal.md) | 极简大纲 | 模板 |\n| [progress-dashboard-template.md](references/progress-dashboard-template.md) | 进度仪表盘 | 模板 |\n| [check_ai_style.py](scripts/check_ai_style.py) | AI 味检测 | 工具 |\n\n---\n\n### 第二轮改进(核心功能升级)\n\n| 文件名 | 用途 | 重点内容 |\n|--------|------|---------|\n| [09-悬念生命周期管理.md](references/09-悬念生命周期管理.md) | 悬念追踪 | 状态定义、预警规则、推进方式 |\n| [10-悬念 - 章节匹配矩阵.md](references/10-悬念-章节匹配矩阵.md) | 悬念规划 | 章节 - 悬念匹配、强度检查 |\n| [11-叙事节奏框架.md](references/11-叙事节奏框架.md) | 节奏设计 | 三层体系、5 种题材模板 |\n| [character-template-v2.md](references/character-template-v2.md) | 人物档案 | 驱动式引擎、声音指纹 |\n| [scene-design-v2.md](references/scene-design-v2.md) | 场景设计 | 任务检查卡、过渡技术、价值测试 |\n\n---\n\n### 第三轮改进(体验完善)\n\n| 文件名 | 用途 | 重点内容 |\n|--------|------|---------|\n| [ai-style-examples.md](references/ai-style-examples.md) | **AI 味改写** | 9 种症状的前后对比范例 |\n| [ai-style-by-genre.md](references/ai-style-by-genre.md) | **题材专项** | 悬疑/言情/玄幻/都市的 AI 味防治 |\n| [08-人机协作-v2.md](references/08-人机协作-v2.md) | 协作协议 | 快速续写、信息提取 |\n| [12-喘息机制.md](references/12-喘息机制.md) | 喘息章设计 | 黄金结构、情绪控制 |\n| [13-钩子映射表.md](references/13-钩子映射表.md) | 钩子选择 | 关键节点 - 钩子类型映射 |\n\n---\n\n## 🎓 按场景查找文档\n\n### 场景 1:刚开始使用\n\n需要解决的问题:\n- 不知道怎么开始\n- 不了解功能\n- 想快速上手\n\n推荐阅读:\n1. [QUICK_START.md](QUICK_START.md) - 5 分钟上手\n2. [README.md](README.md) - 功能总览\n3. [SKILL.md](SKILL.md) §三阶段工作流\n\n---\n\n### 场景 2:每章写作时\n\n需要解决的问题:\n- 怎么继续写\n- 质量如何检查\n- 怎么管理悬念\n\n相关文档:\n1. [SKILL.md](SKILL.md) §连载期\n2. [09-悬念生命周期管理.md](references/09-悬念生命周期管理.md) - 悬念规划\n3. [check_ai_style.py](scripts/check_ai_style.py) - 质量检测\n\n快速指令:\n```text\n继续写 # 自动读取上下文\n运行 AI 味检查 # 检测质量\n查看进度仪表盘 # 看当前状态\n```\n\n---\n\n### 场景 3:去除 AI 味\n\n需要解决的问题:\n- 文本有 AI 感\n- 不知道怎么改\n- 需要改写范例\n\n相关文档:\n1. [ai-style-examples.md](references/ai-style-examples.md) - 9 种症状改写范例\n2. [ai-style-by-genre.md](references/ai-style-by-genre.md) - 按题材专项清单\n\n快速查找:\n- 空泛形容词堆砌 → ai-style-examples.md §症状 1\n- 四字成语 → ai-style-examples.md §症状 2\n- 情绪标签句 → ai-style-examples.md §症状 5\n- 悬疑类 AI 味 → ai-style-by-genre.md §悬疑\n\n---\n\n### 场景 4:设计节奏\n\n需要解决的问题:\n- 不知道怎么安排章节节奏\n- 不知道每章应该写什么强度\n- 某题材的节奏特点\n\n相关文档:\n1. [11-叙事节奏框架.md](references/11-叙事节奏框架.md) - 三层体系 + 题材模板\n2. [13-钩子映射表.md](references/13-钩子映射表.md) - 关键节点 - 钩子映射\n3. [12-喘息机制.md](references/12-喘息机制.md) - 喘息章设计\n\n快速查找:\n- 悬疑节奏 → 11-叙事节奏框架.md §悬疑/推理\n- 玄幻节奏 → 11-叙事节奏框架.md §玄幻升级流\n- 钩子选择 → 13-钩子映射表.md\n- 什么时候喘息 → 12-喘息机制.md\n\n---\n\n### 场景 5:设计人物\n\n需要解决的问题:\n- 人物不够立体\n- 人物前后不一致\n- 对白没有区分度\n\n相关文档:\n1. [character-template-v2.md](references/character-template-v2.md) - 人物驱动引擎\n2. [ai-style-by-genre.md](references/ai-style-by-genre.md) §言情 - 人物描写专项\n\n重点阅读:\n- 欲望 - 恐惧双引擎 §核心引擎\n- 声音指纹 §声音指纹\n- 缺陷 - 失败映射 §缺陷 - 失败映射\n\n---\n\n### 场景 6:设计场景\n\n需要解决的问题:\n- 场景没有任务\n- 不知道场景怎么过渡\n- 场景太长/太短\n\n相关文档:\n1. [scene-design-v2.md](references/scene-design-v2.md) - 场景设计工具\n2. [scene-design.md](references/scene-design.md) - 基础指南(v1)\n\n重点阅读:\n- 场景任务检查卡 §场景任务检查卡\n- Scene/Sequel §Scene/Sequel 实用指南\n- 六种过渡技术 §六种场景过渡技术\n- 场景价值测试 §场景价值测试\n\n---\n\n### 场景 7:协作/交接\n\n需要解决的问题:\n- 多人协作\n- 人类修改后交给 AI\n- 长时间中断后恢复\n\n相关文档:\n1. [08-人机协作-v2.md](references/08-人机协作-v2.md) - 快速协作协议\n\n快速模式(默认):\n```text\n继续写 # AI 自动提取上下文\n```\n\n正式模式(特殊):\n```markdown\n## 人类修改记录\n- 修改位置:第 X 章 第 Y 段\n- 修改原因:___\n- 继续要求:___\n```\n\n---\n\n## 🔍 按关键词查找\n\n| 关键词 | 相关文档 |\n|--------|---------|\n| 快速开始 | QUICK_START.md |\n| 极简大纲 | outline-template-v1-minimal.md |\n| 质量检查 | check_ai_style.py, SKILL.md §红绿灯 |\n| AI 味 | ai-style-examples.md, ai-style-by-genre.md |\n| 悬念管理 | 09-悬念生命周期管理.md, 10-悬念 - 章节匹配矩阵.md |\n| 节奏设计 | 11-叙事节奏框架.md, 13-钩子映射表.md |\n| 人物塑造 | character-template-v2.md |\n| 场景设计 | scene-design-v2.md |\n| 喘息章 | 12-喘息机制.md |\n| 钩子技巧 | 13-钩子映射表.md, hook-techniques.md |\n| 对白写作 | dialogue-writing.md, ai-style-by-genre.md §言情 |\n| 导出 epub | generate_epub.py, README.md §导出 EPUB |\n\n---\n\n## 📊 文档重要性矩阵\n\n```\n重要性\n 高 │ 极简大纲 AI味改写 悬念管理\n │ (v1) (v2重点) (v2重点)\n │\n 中 │ 人物v2 节奏框架 场景v2\n │ (v2) (v2) (v2)\n │\n 低 │ 喘息机制 钩子映射 协作v2\n │ (v2) (v2) (v2)\n └──────────────────────────────→\n 高频 中频 低频 使用频率\n```\n\n**建议优先掌握**:\n1. 极简大纲(每次新项目)\n2. AI 味改写(每次质量检查)\n3. 悬念管理(每章规划)\n\n---\n\n## 🗂️ 文件组织结构\n\n```\nchinese-novelist-skill/\n│\n├── 📄 根目录文档\n│ ├── README.md ⭐ 项目总览\n│ ├── QUICK_START.md ⭐ 快速上手\n│ ├── WORKFLOW_GUIDE.md ⭐ 工作流可视化\n│ ├── FILE_INDEX.md 📍 本文件\n│ ├── SKILL.md ⭐ 主技能文件\n│ └── OPTIMIZATION_PLAN.md 📋 优化计划\n│\n├── 📁 references/ 📚 参考文档\n│ ├── ⭐ 核心模板\n│ │ ├── outline-template-v1-minimal.md ⭐ 极简大纲\n│ │ ├── character-template-v2.md ⭐ 人物v2\n│ │ ├── chapter-template.md 章节模板\n│ │ ├── progress-dashboard-template.md 进度仪表盘\n│ │ └── story-bible-template.md 世界观\n│ │\n│ ├── 🔧 v2改进文档(第二轮)\n│ │ ├── 09-悬念生命周期管理.md ⭐ 悬念追踪\n│ │ ├── 10-悬念-章节匹配矩阵.md 悬念规划\n│ │ ├── 11-叙事节奏框架.md ⭐ 节奏设计\n│ │ └── scene-design-v2.md 场景工具\n│ │\n│ ├── ✨ v2改进文档(第三轮)\n│ │ ├── ai-style-examples.md ⭐⭐ AI味改写\n│ │ ├── ai-style-by-genre.md ⭐ 题材专项\n│ │ ├── 08-人机协作-v2.md 协作协议\n│ │ ├── 12-喘息机制.md 喘息章\n│ │ └── 13-钩子映射表.md 钩子选择\n│ │\n│ └── 📖 v1原始文档\n│ ├── outline-template.md 标准大纲\n│ ├── character-template.md 人物v1\n│ ├── scene-design.md 场景v1\n│ ├── chapter-guide.md 章节指南\n│ ├── opening-design.md 首章设计\n│ ├── hook-techniques.md 钩子技巧\n│ ├── dialogue-writing.md 对白写作\n│ ├── style-polishing.md 文风打磨\n│ ├── plot-structures.md 剧情结构\n│ ├── consistency.md 一致性\n│ ├── content-expansion.md 内容扩写\n│ ├── ending-design.md 结局设计\n│ └── ...(其他)\n│\n├── 📁 scripts/ 🛠️ 工具脚本\n│ ├── check_chapter_wordcount.py ⭐ 字数检查\n│ ├── check_ai_style.py ⭐⭐ AI味检测\n│ └── generate_epub.py EPUB导出\n│\n└── 📁 novels/ 📝 小说目录\n └── (你的小说项目)\n```\n\n---\n\n## 💡 使用建议\n\n### 新手路径\n\n```\n第1周:掌握核心\n├── QUICK_START.md(5分钟)\n├── README.md(10分钟)\n└── 实践:写3-5章\n\n第2周:提升质量\n├── ai-style-examples.md(30分钟)\n├── check_ai_style.py(每次写作使用)\n└── 实践:修改已有章节\n\n第3周:掌握进阶\n├── 09-悬念生命周期管理.md(20分钟)\n├── 11-叙事节奏框架.md(30分钟)\n└── 实践:规划悬念+检查节奏\n\n第4周:精通\n├── character-template-v2.md(30分钟)\n├── scene-design-v2.md(20分钟)\n└── 实践:完整使用所有工具\n```\n\n### 遇到问题\n\n1. **不知道从哪里开始** → QUICK_START.md\n2. **AI 写的有机器感** → ai-style-examples.md\n3. **节奏感觉不对** → 11-叙事节奏框架.md\n4. **悬念写到后面忘了** → 09-悬念生命周期管理.md\n5. **人物前后不一致** → character-template-v2.md\n6. **不知道怎么继续** → 对 AI 说\"继续写\"(自动读取上下文)\n\n---\n\n## 📝 更新记录\n\n- **2026-04-01**: 完成三轮优化,新增 13 个文件,更新 README 和文档\n- **2026-03-20**: v1.0.0 版本发布\n\n---\n\n*如果找不到需要的文档,使用 Ctrl+F 在本页面搜索关键词。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":14061,"content_sha256":"173eeaec666155f2178c78a355098e13d5f05ae429a10e8fe7edbb407ac67940"},{"filename":"OPTIMIZATION_PLAN.md","content":"# chinese-novelist-skill 优化计划\n\n## 优化理念\n\n> **好的工作流不是让用户做更多事,而是让正确的事自动发生。**\n\n本优化遵循\"渐进式约束\"原则:从极简开始,逐步深入。每个改进都追求\"傻瓜化\"但\"不失质量\"。\n\n---\n\n## 第一轮优化:建立轻量级骨架(Week 1-2)\n\n### 目标\n让 skill 从\"重\"变\"轻\",降低入门门槛,同时建立核心自动化工具。\n\n### 具体任务\n\n#### Task 1: 简化工作流模式(P0)\n**文件:** `SKILL.md`\n**改动:**\n- 删除\"试写模式\"独立地位,合并到策划期\n- 将6种模式简化为3阶段:\n - 【策划期】→ 锁定大纲、人物、首章任务\n - 【连载期】→ 一章一章推进(默认模式)\n - 【收尾期】→ 完稿检查、结局收束\n- 删除\"草稿/精修\"二分,改为\"快速模式\"开关\n\n**验收标准:**\n- 用户说\"帮我写个小说\",AI能立即进入策划期,不纠结模式选择\n- 每个阶段有明确的\"进入条件\"和\"出口条件\"\n\n---\n\n#### Task 2: 创建分层模板系统(P0)\n**文件:** \n- `references/outline-template-v1-minimal.md`(新增)\n- `references/outline-template-v2-standard.md`(现有精简版)\n- `references/outline-template-v3-full.md`(现有保留)\n\n**改动:**\n极简版(10个字段):\n```markdown\n# 大纲极简版\n- 主角是谁,想要什么?\n- 核心冲突是什么?\n- 结局是什么?\n- 分几章,每章干嘛?\n- 核心悬念是什么?\n- 主要人物(只需名字+一句话定位)\n- 故事引擎(一句话)\n- 目标读者\n- 文风关键词\n- 预计字数\n```\n\n标准版(现有模板的精简版,保留核心字段,标注必填/选填)\n完整版(现有模板,供进阶使用)\n\n**验收标准:**\n- 新用户5分钟内可以完成极简大纲\n- 默认从极简版开始,用户可主动选择标准/完整版\n\n---\n\n#### Task 3: 建立质量检查红绿灯机制(P0)\n**文件:** `SKILL.md` 质量检查清单部分\n\n**改动:**\n将50+检查项简化为三级:\n\n**红灯项(必须过关,3-5项):**\n- 本章有明确变化(情节推进/关系变化/状态改变)\n- 字数达标(≥3000字)\n- 结尾有钩子\n- 人物行为符合设定\n\n**黄灯项(建议优化,交付时提醒但不阻塞):**\n- 对白自然度\n- AI味程度\n- 展示vs讲述比例\n\n**绿灯项(完稿时再用,高级检查):**\n- 伏笔回收状态\n- 整体节奏\n- 人物弧线完整性\n\n**验收标准:**\n- 每章交付前只做\"红灯检查\",AI自动完成\n- 黄灯问题以\"建议\"形式呈现,不强制修改\n\n---\n\n#### Task 4: 创建进度仪表盘(P0)\n**文件:** `novels/\u003c书名>/99-进度仪表盘.md`(自动生成)\n\n**内容模板:**\n```markdown\n# [书名] 创作进度\n\n## 当前位置\n- 正在写:第X章\n- 本章状态:[场景拆分完成,开始正文]\n- 下一章预告:[标题/任务]\n\n## 关键提醒(AI自动更新)\n- 未回收伏笔:3个(最早出现在第2章,已15章未提及⚠️)\n- 人物状态变化:主角当前在[位置],情绪[状态]\n- 最近修改:第Y章人物性格调整,已同步\n\n## 快速导航\n- [大纲] [人物] [世界观] [上一章] [当前章]\n\n## 质量概览\n- 已完章节:XX章\n- 红灯通过率:95%\n- 黄灯警告:2处\n- AI味评级:轻度\n```\n\n**验收标准:**\n- 用户一眼看到\"现在到哪了\"\n- AI每次工作时自动更新\n\n---\n\n#### Task 5: 开发AI味检测脚本(P0)\n**文件:** `scripts/check_ai_style.py`(新增)\n\n**检测维度:**\n| 维度 | 检测方法 | 阈值 | 严重程度 |\n|------|----------|------|---------|\n| 空泛形容词 | 正则匹配\"很X\"、\"非常Y\" | 每千字\u003c3处 | 中度 |\n| 四字成语密度 | 统计成语频率 | 每千字\u003c5个 | 轻度 |\n| 解释连接词 | 匹配\"然而\"、\"这意味着\" | 每千字\u003c2处 | 中度 |\n| 句式均匀度 | 计算句长标准差 | 标准差>10 | 轻度 |\n| 时间转折词 | 匹配\"突然\"、\"就在这时\" | 每章\u003c3处 | 轻度 |\n| 情绪标签句 | 匹配\"感到...\"、\"心中...\" | 每千字\u003c2处 | 重度 |\n\n**输出格式:**\n```markdown\n## AI味检测报告:第01章\n\n| 检测项 | 当前值 | 阈值 | 状态 |\n|--------|--------|------|------|\n| 空泛形容词 | 5/千字 | \u003c3 | ❌ 超标(重度) |\n| 四字成语 | 8/千字 | \u003c5 | ⚠️ 超标(中度) |\n\n**AI味评级:中度**\n**建议:** 参考 style-polishing.md 第1、3节修改\n**重点问题:** \"他感到前所未有的...\"类情绪标签句出现4次\n```\n\n**验收标准:**\n- 运行脚本即可得到量化报告\n- 与字数检查脚本集成,每章自动运行\n\n---\n\n### 第一轮里程碑\n完成以上5个任务后,skill 应该:\n1. ✅ 新手5分钟可以开始(极简模板)\n2. ✅ 每章检查只需3-5项(红绿灯机制)\n3. ✅ 一眼看到当前进度(仪表盘)\n4. ✅ AI味自动检测(脚本)\n\n---\n\n## 第二轮优化:核心功能升级(Week 3-4)\n\n### 目标\n建立动态追踪系统,让悬念、人物、节奏\"活\"起来。\n\n### 具体任务\n\n#### Task 6: 悬念生命周期管理系统(P1)\n**文件:** \n- `references/09-悬念生命周期管理.md`(新增)\n- `novels/\u003c书名>/03-悬念追踪表.md`(比大纲更详细)\n\n**新增字段:**\n```markdown\n| 悬念ID | 内容 | 类型 | 强度 | 提出章节 | 上次提及 | 提及次数 | 预计回收 | 依赖悬念 | 状态 |\n```\n\n**预警规则:**\n- 超过5章未提及 → 黄色警告\n- 超过10章未提及 → 红色警告(必须在本章提及)\n- 当前活跃悬念超过6个 → 警告(暂停新增)\n\n**验收标准:**\n- 可以追踪每个悬念的\"新鲜度\"\n- 自动提醒哪些悬念即将过期\n\n---\n\n#### Task 7: 悬念-章节匹配矩阵(P1)\n**文件:** `references/10-悬念节奏规划表.md`(新增)\n\n**内容:**\n```markdown\n| 章节 | 主要悬念 | 推进方式 | 强度要求 | 实际强度 | 匹配度 |\n|------|---------|---------|---------|---------|--------|\n| 第5章 | 凶手身份 | 新线索 | 2(关切) | 3(迫切) | ⚠️ 过高 |\n```\n\n**验收标准:**\n- 每章规划时,必须指定本章要推进的悬念\n- 强度与章节位置自动匹配检查\n\n---\n\n#### Task 8: 三层节奏体系(P1)\n**文件:** `references/11-叙事节奏框架.md`(新增,替换07-叙事节奏曲线.md)\n\n**内容:**\n```\n宏观层(全本):四幕结构 + 10-15个关键节点\n中观层(章节组):每3章为一个\"节奏单元\"(黄金三章模式)\n微观层(单章):每章内部3次情绪起伏(20%-50%-80%位置)\n```\n\n**新增题材特定模板:**\n- 悬疑类:疑问→调查→线索→反转→新疑问\n- 玄幻类:挑战→修炼→突破→震惊→新挑战\n- 言情类:误会/心动→互动→阻碍→感情升级→新阻碍\n\n**验收标准:**\n- 提供可操作的节奏模板(不是只有概念)\n- 每章都能自检节奏健康度\n\n---\n\n#### Task 9: 人物状态追踪系统(P1)\n**文件:**\n- `references/character-template-v2.md`(新增,替换现有)\n- `scripts/character_tracker.py`(新增)\n\n**新增核心字段:**\n```markdown\n## 人物核心引擎\n- 自觉欲望(TA认为自己想要的):\n- 不自觉欲望(TA真正需要的):\n- 核心恐惧(如果欲望不能实现):\n- 道德前提(TA相信的\"真理\"):\n\n## 人物声音指纹\n- 标志性对白样本(3-5句,作为锚点):\n- 禁止用语(绝对不会说的):\n- 情绪状态下的声音变化:\n\n## 人物弧线里程碑(可追踪)\n| 章节 | 事件 | 变化类型 | 变化描述 | 代价 |\n\n## 缺陷-失败映射\n- 固有缺陷:\n- 缺陷导致的典型行为:\n- 缺陷可能造成的失败场景:\n```\n\n**脚本功能:**\n- 解析所有章节,提取人物出现时的情绪、决策\n- 生成人物弧线可视化报告\n- 检测声音一致性(标记风格突变的章节)\n\n**验收标准:**\n- 人物档案从\"静态文档\"变成\"驱动写作的引擎\"\n- 可以追踪人物在每章的变化\n\n---\n\n#### Task 10: 场景设计工具升级(P1)\n**文件:** `references/scene-design-v2.md`(升级现有)\n\n**新增:**\n1. **任务完成检查卡**(量化标准)\n2. **节奏配比表**(Scene/Sequel配比)\n3. **切入点评分表**(晚进早出方法论)\n4. **六种过渡技术清单**(因果链/悬念转移/情绪对比/时间压缩/空间跳转/POV切换)\n5. **场景价值测试**(死场景识别工具)\n6. **情绪曲线设计模板**\n\n**验收标准:**\n- 场景设计从\"概念理解\"变成\"可执行工具\"\n- 有明确的场景价值测试,判断场景是否该删\n\n---\n\n### 第二轮里程碑\n完成以上5个任务后,skill 应该:\n1. ✅ 悬念有动态追踪和预警\n2. ✅ 节奏有题材特定模板\n3. ✅ 人物档案能驱动写作决策\n4. ✅ 场景设计有量化工具\n\n---\n\n## 第三轮优化:体验完善(Week 5-6)\n\n### 目标\n优化细节体验,增加范例和题材适配。\n\n### 具体任务\n\n#### Task 11: AI味改写范例库(P2)\n**文件:** `references/ai-style-examples.md`(新增)\n\n**内容结构(每个症状3-5组对比):**\n```markdown\n## 症状1:空泛情绪句\n\n### 典型错误\n\"他感到前所未有的愤怒和绝望\"\n\n### 改写示范\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他很悲伤 | 他盯着手机屏幕,拇指在玻璃上滑了三次,没点开那条消息 | 动作替代 |\n| 她内心充满喜悦 | 她差点撞上门框,手里的咖啡洒了一半也没在意 | 行为展示 |\n\n## 症状2:解释腔连接词\n...\n```\n\n**验收标准:**\n- 每个AI味症状都有前后对比范例\n- 不是只说\"不要\",而是展示\"要怎么做\"\n\n---\n\n#### Task 12: 按题材AI味专项清单(P2)\n**文件:** `references/ai-style-by-genre.md`(新增)\n\n**内容:**\n```markdown\n## 悬疑/推理\n### 常见AI味症状\n- 线索用\"显然\"、\"不难看出\"引导\n- 推理过程像论文一样一二三罗列\n\n### 正向范例\n...\n\n## 言情/情感\n...\n\n## 奇幻/仙侠/科幻\n...\n```\n\n**验收标准:**\n- 不同题材有特定的AI味防治指导\n\n---\n\n#### Task 13: 人机协作交接协议优化(P2)\n**文件:** `references/08-人机协作-v2.md`(升级现有)\n\n**优化:**\n- 简化上下文传递格式\n- 新增\"快速续写模式\"(AI自动提取关键上下文,用户只需说\"继续写\")\n- 新增\"交接检查清单\"(确保信息不丢失)\n\n**验收标准:**\n- 用户只需说\"继续\",AI能自动获取足够上下文\n- 交接时的信息丢失率\u003c5%\n\n---\n\n#### Task 14: 喘息机制设计指南(P2)\n**文件:** `references/12-喘息机制.md`(新增)\n\n**内容:**\n- 什么是喘息章(不是\"无聊章\",而是\"信息整合+关系深化\")\n- 喘息章标准结构(20%余波+60%收获/关系+20%新威胁)\n- 何时需要喘息章(连续3章高强度后、大高潮后1-2章内)\n- 如何在喘息中保持读者黏性\n\n**验收标准:**\n- 提供喘息章的写作模板\n- 避免\"连续高潮导致读者疲劳\"的问题\n\n---\n\n#### Task 15: 钩子类型与关键节点映射表(P2)\n**文件:** `references/13-钩子映射表.md`(新增)\n\n**内容:**\n```markdown\n| 关键节点 | 推荐钩子类型 | 悬念强度 | 目的 |\n|---------|-------------|---------|------|\n| 开篇钩子 | 突然揭示/震撼对话 | 3-4级 | 立即建立兴趣 |\n| 第3章结尾 | 神秘物品/未完成的动作 | 3级 | 建立追更习惯 |\n| 小高潮章 | 身份反转/两难选择 | 4级 | 情绪高点 |\n| 喘息章 | 言外之意/承诺威胁 | 2-3级 | 维持兴趣但不过度 |\n| 中点转折 | 突然揭示+离奇消失 | 5级 | 最大震撼 |\n```\n\n**验收标准:**\n- 解决\"知道要用钩子,但不知道用什么类型\"的问题\n\n---\n\n### 第三轮里程碑\n完成以上5个任务后,skill 应该:\n1. ✅ 每个AI味症状都有改写范例\n2. ✅ 不同题材有特定指导\n3. ✅ 人机协作更顺畅\n4. ✅ 节奏设计更完整(含喘息机制)\n5. ✅ 钩子使用有明确映射\n\n---\n\n## 新增文件清单\n\n### 第一轮(Week 1-2)\n1. `references/outline-template-v1-minimal.md` - 极简大纲模板\n2. `references/outline-template-v2-standard.md` - 标准大纲模板(精简现有)\n3. `scripts/check_ai_style.py` - AI味检测脚本\n4. `novels/\u003c书名>/99-进度仪表盘.md` - 自动生成\n\n### 第二轮(Week 3-4)\n5. `references/09-悬念生命周期管理.md`\n6. `references/10-悬念节奏规划表.md`\n7. `references/11-叙事节奏框架.md`(替换07-叙事节奏曲线.md)\n8. `references/character-template-v2.md`(替换现有)\n9. `scripts/character_tracker.py` - 人物状态追踪\n10. `references/scene-design-v2.md`(升级现有)\n\n### 第三轮(Week 5-6)\n11. `references/ai-style-examples.md` - AI味改写范例\n12. `references/ai-style-by-genre.md` - 按题材AI味清单\n13. `references/08-人机协作-v2.md`(升级现有)\n14. `references/12-喘息机制.md`\n15. `references/13-钩子映射表.md`\n\n---\n\n## 修改的文件清单\n\n### SKILL.md(多处修改)\n- 简化工作流模式(6→3种)\n- 建立红绿灯质量检查机制\n- 更新人物调用协议\n- 更新悬念管理流程\n\n### references/outline-template.md\n- 保留为v3完整版\n- 新增v1极简版、v2标准版\n\n### references/character-template.md\n- 升级为v2版本\n\n### references/scene-design.md\n- 升级为v2版本\n\n### references/07-叙事节奏曲线.md\n- 替换为11-叙事节奏框架.md\n\n### references/08-人机协作.md\n- 升级为v2版本\n\n---\n\n## 验收标准(总体)\n\n### 第一轮后\n- [ ] 新用户5分钟可以开始写\n- [ ] 每章检查不超过5项\n- [ ] 一眼看到当前进度\n- [ ] AI味自动检测\n\n### 第二轮后\n- [ ] 悬念有预警机制\n- [ ] 节奏有题材模板\n- [ ] 人物档案驱动写作\n- [ ] 场景有量化工具\n\n### 第三轮后\n- [ ] AI味有改写范例\n- [ ] 题材有特定指导\n- [ ] 人机协作顺畅\n- [ ] 节奏设计完整\n\n### 最终目标\n- [ ] 用户从\"知道写什么\"到\"写得更好\"的转化率提升50%\n- [ ] AI生成内容的\"机器感\"降低50%\n- [ ] 长篇连载的\"失控率\"降低70%\n\n---\n\n## 迭代原则\n\n1. **先轻后重**:默认从极简版开始,用户想深入再引导到标准/完整版\n2. **先自动后人工**:能自动检查的先实现自动化,人工只做决策\n3. **先核心后边缘**:先解决结构性问题,再优化细节体验\n4. **每轮有里程碑**:每轮结束后必须能独立运行,不依赖后续轮次\n\n---\n\n*本计划将根据实际执行中的反馈进行调整。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":14424,"content_sha256":"3ae5aca2f6fbdcf21ff772be53b32fbdc3d817d54bca489c121b6294f37d8715"},{"filename":"optimization-result.html","content":"\u003c!DOCTYPE html>\n\u003chtml lang=\"zh-CN\">\n\u003chead>\n\u003cmeta charset=\"UTF-8\">\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\u003ctitle>Darwin Skill - chinese-novelist-skill 进化报告\u003c/title>\n\u003clink rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n\u003clink rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n\u003clink href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n\u003cstyle>\n *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }\n\n body {\n display: flex;\n justify-content: center;\n align-items: flex-start;\n min-height: 100vh;\n background: #FAFAF5;\n font-family: 'Noto Sans SC', 'Inter', sans-serif;\n padding: 0;\n }\n\n .card {\n width: 900px;\n min-height: 600px;\n position: relative;\n display: flex;\n flex-direction: column;\n background: #FAFAF5;\n color: #1A1A1A;\n }\n\n /* ===== 1. 顶部品牌条 ===== */\n .brand-bar {\n background: #1A1A1A;\n padding: 24px 48px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .brand-name {\n font-size: 22px;\n font-weight: 800;\n color: #fff;\n letter-spacing: 0.02em;\n font-family: 'Inter', 'Noto Sans SC', sans-serif;\n }\n .brand-name .dot { color: #E8590C; }\n .brand-date {\n font-size: 15px;\n font-weight: 500;\n color: #888;\n font-family: 'Inter', sans-serif;\n }\n\n /* ===== 2. 核心成就区 ===== */\n .hero-section {\n padding: 40px 48px 36px;\n display: flex;\n align-items: center;\n gap: 48px;\n background: linear-gradient(180deg, #FAFAF5 0%, #F5F0E8 100%);\n position: relative;\n }\n\n /* SVG圆环 */\n .ring-container {\n flex-shrink: 0;\n width: 280px;\n height: 280px;\n position: relative;\n }\n .ring-bg {\n fill: none;\n stroke: #E8E0D4;\n stroke-width: 16;\n stroke-dasharray: 8 8;\n }\n .ring-progress {\n fill: none;\n stroke: url(#orangeGradient);\n stroke-width: 18;\n stroke-linecap: round;\n stroke-dasharray: 534;\n stroke-dashoffset: 53.4;\n transform: rotate(-90deg);\n transform-origin: center;\n filter: drop-shadow(0 2px 8px rgba(232,89,12,0.3));\n }\n .ring-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n }\n .ring-score {\n font-size: 88px;\n font-weight: 900;\n color: #1A1A1A;\n line-height: 1;\n font-family: 'Inter', sans-serif;\n letter-spacing: -0.04em;\n }\n .ring-max {\n font-size: 24px;\n font-weight: 600;\n color: #B0A898;\n font-family: 'Inter', sans-serif;\n margin-left: 2px;\n }\n .ring-label {\n font-size: 14px;\n font-weight: 600;\n color: #999;\n margin-top: 4px;\n letter-spacing: 0.08em;\n }\n\n /* 右侧文字区 */\n .hero-text {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n .hero-title {\n font-size: 32px;\n font-weight: 900;\n line-height: 1.25;\n color: #1A1A1A;\n }\n .hero-skill-name {\n color: #E8590C;\n }\n .hero-journey {\n font-size: 18px;\n font-weight: 500;\n color: #666;\n line-height: 1.5;\n }\n .hero-journey strong {\n color: #1A1A1A;\n font-weight: 700;\n }\n .delta-badge {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n background: #E8590C;\n color: #fff;\n padding: 10px 28px;\n border-radius: 12px;\n font-size: 42px;\n font-weight: 900;\n font-family: 'Inter', sans-serif;\n letter-spacing: -0.02em;\n width: fit-content;\n box-shadow: 0 4px 16px rgba(232,89,12,0.3));\n }\n .delta-badge-label {\n font-size: 16px;\n font-weight: 700;\n opacity: 0.9;\n font-family: 'Noto Sans SC', sans-serif;\n letter-spacing: 0;\n }\n\n /* ===== 3. 最大突破区 ===== */\n .breakthrough-section {\n padding: 0 48px;\n display: flex;\n gap: 20px;\n }\n .breakthrough-card {\n flex: 1;\n border-radius: 16px;\n padding: 28px 28px 24px;\n position: relative;\n overflow: hidden;\n }\n .breakthrough-card.primary {\n background: linear-gradient(135deg, #E8590C 0%, #FF8A4C 100%);\n color: #fff;\n flex: 1.2;\n }\n .breakthrough-card.secondary {\n background: #F0EAE0;\n color: #1A1A1A;\n border: 2px solid #E0D8CC;\n }\n .breakthrough-label {\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.1em;\n margin-bottom: 12px;\n text-transform: uppercase;\n }\n .breakthrough-card.primary .breakthrough-label {\n color: rgba(255,255,255,0.75);\n }\n .breakthrough-card.secondary .breakthrough-label {\n color: #999;\n }\n .breakthrough-dim {\n font-size: 24px;\n font-weight: 900;\n margin-bottom: 6px;\n }\n .breakthrough-score-row {\n display: flex;\n align-items: baseline;\n gap: 12px;\n margin-bottom: 12px;\n }\n .breakthrough-from {\n font-size: 36px;\n font-weight: 400;\n opacity: 0.5;\n font-family: 'Inter', sans-serif;\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n }\n .breakthrough-arrow {\n font-size: 20px;\n opacity: 0.5;\n }\n .breakthrough-to {\n font-size: 52px;\n font-weight: 900;\n font-family: 'Inter', sans-serif;\n line-height: 1;\n }\n .breakthrough-card.secondary .breakthrough-to {\n color: #E8590C;\n }\n .breakthrough-pct {\n font-size: 18px;\n font-weight: 700;\n opacity: 0.9;\n }\n .breakthrough-desc {\n font-size: 15px;\n line-height: 1.5;\n font-weight: 500;\n }\n .breakthrough-card.primary .breakthrough-desc {\n color: rgba(255,255,255,0.9);\n }\n .breakthrough-card.secondary .breakthrough-desc {\n color: #666;\n }\n\n /* ===== 4. 详细改进表格 ===== */\n .details-section {\n padding: 40px 48px;\n }\n .details-title {\n font-size: 20px;\n font-weight: 900;\n margin-bottom: 20px;\n color: #1A1A1A;\n }\n .details-table {\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n background: #fff;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.04);\n }\n .details-table thead {\n background: #F5F0E8;\n }\n .details-table th {\n padding: 16px 20px;\n text-align: left;\n font-size: 13px;\n font-weight: 700;\n color: #666;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n }\n .details-table td {\n padding: 18px 20px;\n font-size: 15px;\n border-top: 1px solid #F0EAE0;\n }\n .details-table tbody tr:hover {\n background: #FAFAF5;\n }\n .dim-name {\n font-weight: 700;\n color: #1A1A1A;\n }\n .score-cell {\n font-family: 'Inter', sans-serif;\n font-weight: 600;\n color: #666;\n }\n .delta-cell {\n font-family: 'Inter', sans-serif;\n font-weight: 900;\n color: #E8590C;\n font-size: 16px;\n }\n\n /* ===== 5. 底部签名 ===== */\n .footer {\n padding: 32px 48px;\n background: #1A1A1A;\n color: #888;\n font-size: 14px;\n font-weight: 500;\n text-align: center;\n }\n .footer-highlight {\n color: #E8590C;\n font-weight: 700;\n }\n\u003c/style>\n\u003c/head>\n\u003cbody>\n\n\u003cdiv class=\"card\">\n \u003c!-- 1. 顶部品牌条 -->\n \u003cdiv class=\"brand-bar\">\n \u003cdiv class=\"brand-name\">Darwin\u003cspan class=\"dot\">.\u003c/span>Skill\u003c/div>\n \u003cdiv class=\"brand-date\">2026-05-06\u003c/div>\n \u003c/div>\n\n \u003c!-- 2. 核心成就区 -->\n \u003cdiv class=\"hero-section\">\n \u003cdiv class=\"ring-container\">\n \u003csvg width=\"280\" height=\"280\" viewBox=\"0 0 280 280\">\n \u003cdefs>\n \u003clinearGradient id=\"orangeGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n \u003cstop offset=\"0%\" style=\"stop-color:#E8590C;stop-opacity:1\" />\n \u003cstop offset=\"100%\" style=\"stop-color:#FF8A4C;stop-opacity:1\" />\n \u003c/linearGradient>\n \u003c/defs>\n \u003ccircle class=\"ring-bg\" cx=\"140\" cy=\"140\" r=\"85\" />\n \u003ccircle class=\"ring-progress\" cx=\"140\" cy=\"140\" r=\"85\" />\n \u003c/svg>\n \u003cdiv class=\"ring-center\">\n \u003cdiv>\n \u003cspan class=\"ring-score\">90\u003c/span>\u003cspan class=\"ring-max\">/100\u003c/span>\n \u003c/div>\n \u003cdiv class=\"ring-label\">FINAL SCORE\u003c/div>\n \u003c/div>\n \u003c/div>\n\n \u003cdiv class=\"hero-text\">\n \u003cdiv class=\"hero-title\">\n \u003cspan class=\"hero-skill-name\">chinese-novelist-skill\u003c/span>\u003cbr>\n 架构升级完成\n \u003c/div>\n \u003cdiv class=\"hero-journey\">\n 从 \u003cstrong>76.7\u003c/strong> 提升至 \u003cstrong>90.0\u003c/strong>,实现了从\"任务驱动\"到\"角色认知驱动\"的质的飞跃\n \u003c/div>\n \u003cdiv class=\"delta-badge\">\n \u003cspan>+13.3\u003c/span>\n \u003cspan class=\"delta-badge-label\">总分提升\u003c/span>\n \u003c/div>\n \u003c/div>\n \u003c/div>\n\n \u003c!-- 3. 最大突破区 -->\n \u003cdiv class=\"breakthrough-section\">\n \u003cdiv class=\"breakthrough-card primary\">\n \u003cdiv class=\"breakthrough-label\">最大突破\u003c/div>\n \u003cdiv class=\"breakthrough-dim\">整体架构\u003c/div>\n \u003cdiv class=\"breakthrough-score-row\">\n \u003cspan class=\"breakthrough-from\">12.0\u003c/span>\n \u003cspan class=\"breakthrough-arrow\">→\u003c/span>\n \u003cspan class=\"breakthrough-to\">15.0\u003c/span>\n \u003cspan class=\"breakthrough-pct\">(+25%)\u003c/span>\n \u003c/div>\n \u003cdiv class=\"breakthrough-desc\">\n 引入角色智能体层,将写作架构从\"章节任务驱动\"升级为\"角色认知驱动\",角色行为由认知状态和压力状态决定\n \u003c/div>\n \u003c/div>\n\n \u003cdiv class=\"breakthrough-card secondary\">\n \u003cdiv class=\"breakthrough-label\">次要突破\u003c/div>\n \u003cdiv class=\"breakthrough-dim\">实测表现\u003c/div>\n \u003cdiv class=\"breakthrough-score-row\">\n \u003cspan class=\"breakthrough-from\">18.8\u003c/span>\n \u003cspan class=\"breakthrough-arrow\">→\u003c/span>\n \u003cspan class=\"breakthrough-to\">22.5\u003c/span>\n \u003cspan class=\"breakthrough-pct\">(+20%)\u003c/span>\n \u003c/div>\n \u003cdiv class=\"breakthrough-desc\">\n 长篇写作时角色一致性显著提升,通过角色状态快照和每章推演解决角色失真问题\n \u003c/div>\n \u003c/div>\n \u003c/div>\n\n \u003c!-- 4. 详细改进表格 -->\n \u003cdiv class=\"details-section\">\n \u003cdiv class=\"details-title\">📊 详细改进对比\u003c/div>\n \u003ctable class=\"details-table\">\n \u003cthead>\n \u003ctr>\n \u003cth>维度\u003c/th>\n \u003cth>优化前\u003c/th>\n \u003cth>优化后\u003c/th>\n \u003cth>提升\u003c/th>\n \u003c/tr>\n \u003c/thead>\n \u003ctbody>\n \u003ctr>\n \u003ctd class=\"dim-name\">工作流清晰度\u003c/td>\n \u003ctd class=\"score-cell\">12.0\u003c/td>\n \u003ctd class=\"score-cell\">13.5\u003c/td>\n \u003ctd class=\"delta-cell\">+1.5\u003c/td>\n \u003c/tr>\n \u003ctr>\n \u003ctd class=\"dim-name\">边界条件覆盖\u003c/td>\n \u003ctd class=\"score-cell\">7.0\u003c/td>\n \u003ctd class=\"score-cell\">9.0\u003c/td>\n \u003ctd class=\"delta-cell\">+2.0\u003c/td>\n \u003c/tr>\n \u003ctr>\n \u003ctd class=\"dim-name\">指令具体性\u003c/td>\n \u003ctd class=\"score-cell\">10.5\u003c/td>\n \u003ctd class=\"score-cell\">13.5\u003c/td>\n \u003ctd class=\"delta-cell\">+3.0\u003c/td>\n \u003c/tr>\n \u003ctr>\n \u003ctd class=\"dim-name\">整体架构\u003c/td>\n \u003ctd class=\"score-cell\">12.0\u003c/td>\n \u003ctd class=\"score-cell\">15.0\u003c/td>\n \u003ctd class=\"delta-cell\">+3.0\u003c/td>\n \u003c/tr>\n \u003ctr>\n \u003ctd class=\"dim-name\">实测表现\u003c/td>\n \u003ctd class=\"score-cell\">18.8\u003c/td>\n \u003ctd class=\"score-cell\">22.5\u003c/td>\n \u003ctd class=\"delta-cell\">+3.8\u003c/td>\n \u003c/tr>\n \u003c/tbody>\n \u003c/table>\n \u003c/div>\n\n \u003c!-- 5. 底部签名 -->\n \u003cdiv class=\"footer\">\n Powered by \u003cspan class=\"footer-highlight\">Darwin.Skill\u003c/span> — 让你的 Skill 自我进化\n \u003c/div>\n\u003c/div>\n\n\u003c/body>\n\u003c/html>\n","content_type":"text/html; charset=utf-8","language":"markup","size":11406,"content_sha256":"be73f4fa4dc758b2422de4bced3ec2211d356cbd2b82f67e824b0d830232a266"},{"filename":"QUICK_START.md","content":"# 快速上手指记\n\n> 5 分钟学会使用 chinese-novelist-skill 写小说\n\n---\n\n## Step 0: 安装(1 分钟)\n\n### 如果你用 Claude Code\n\n```bash\n# 克隆到 skill 目录\ngit clone https://github.com/henry/chinese-novelist-skill.git ~/.claude/skills/chinese-novelist-skill\n\n# 重启 Claude Code\n# 或者重新加载 skill(具体命令取决于你的工具)\n```\n\n### 如果你用其他工具\n\n参考你的工具文档,将本仓库放到 skill 目录即可。\n\n---\n\n## Step 1: 创建第一本小说(5 分钟)\n\n### 对 AI 说\n\n```text\n使用 chinese-novelist-skill,帮我写一本悬疑小说。\n```\n\n### AI 会引导你\n\n1. **填写极简大纲**(10 个问题,5 分钟)\n - 主角是谁,想要什么?\n - 核心冲突是什么?\n - 结局是什么?\n - 分几章,每章干嘛?\n - ...(共 10 个)\n\n2. **自动生成文件**\n - `novels/我的悬疑小说/00-大纲.md`\n - `novels/我的悬疑小说/99-进度仪表盘.md`\n\n3. **开始写第 1 章**\n - AI 会自动:\n - 读取大纲\n - 设计首章钩子\n - 写正文\n\n### 你只需做\n\n- [ ] 回答 10 个极简问题\n- [ ] 确认书名(AI 会生成 3-5 个候选)\n- [ ] 等待 AI 写完第 1 章\n\n---\n\n## Step 2: 继续写作(1 分钟)\n\n### 对 AI 说\n\n```text\n继续写\n```\n\n### AI 会自动\n\n1. 读取 `99-进度仪表盘.md` 获取当前状态\n2. 检查悬念过期警告\n3. 提取人物当前状态\n4. 设计下一章钩子\n5. 写正文\n\n### 你只需做\n\n- [ ] 阅读 AI 写的章节\n- [ ] 如需修改,说\"修改第 X 章,问题在...\"\n- [ ] 如满意,说\"继续写\"写下一章\n\n---\n\n## Step 3: 质量检查(2 分钟)\n\n### 每章完成后运行\n\n```bash\n# 检查字数\npython scripts/check_chapter_wordcount.py novels/我的悬疑小说/第01章.md\n\n# 检查 AI味\npython scripts/check_ai_style.py novels/我的悬疑小说/第01章.md\n```\n\n### AI 味检测报告示例\n\n```\n🤖 AI味检测报告:第01章\n\n🔴 AI味评级:中度(综合得分: 4.2)\n\n❌ 空泛形容词: 5/千字 (阈值: \u003c3) 🔴 超标\n 示例: \"他很悲伤\" \"她非常开心\"\n 💡 建议: 用具体动作替代情绪标签\n\n📚 参考文档: references/ai-style-examples.md\n```\n\n### 修复 AI 味\n\n打开 `references/ai-style-examples.md`,找到对应症状的改写范例:\n\n| 原句 | 改写 |\n|------|------|\n| 他很悲伤 | 他盯着手机屏幕,拇指在玻璃上滑了三次 |\n| 她感到前所未有的喜悦 | 她差点撞上门框,手里的咖啡洒了一半也没在意 |\n\n修改后保存,再次运行检测。\n\n---\n\n## Step 4: 管理悬念(进阶)\n\n### 查看悬念状态\n\n在 `99-进度仪表盘.md` 中查看:\n\n```markdown\n## ⚠️ 关键提醒\n\n### 🔔 悬念状态\n| 悬念 ID | 内容 | 状态 |\n|--------|------|------|\n| 001 | 凶手是谁 | 🟢 活跃(最近第 8 章提及) |\n| 002 | 主角身世 | 🔴 已过期(已 10 章未提及) |\n\n**本章建议**:提及悬念 002,防止过期\n```\n\n### 每章规划悬念\n\n在写新章前,告诉 AI:\n\n```text\n本章我要推进悬念 001(给出新线索),\n同时提及悬念 002(防止过期)。\n```\n\nAI 会自动在写作中实现。\n\n---\n\n## Step 5: 导出成书\n\n### 导出 EPUB\n\n```bash\npython scripts/generate_epub.py novels/我的悬疑小说\n```\n\n输出:`novels/我的悬疑小说/我的悬疑小说.epub`\n\n### 导入 Kindle/微信读书\n\n1. 将 `.epub` 文件发送到你的 Kindle 邮箱\n2. 或上传到微信读书\n3. 开始阅读你的作品!\n\n---\n\n## 常用指令速查\n\n| 你想做 | 对 AI 说 |\n|--------|--------|\n| 开始写新书 | \"帮我写一本[题材]小说,[章节数]章\" |\n| 继续写 | \"继续写\" / \"下一章\" |\n| 写指定章 | \"写第 X 章\" |\n| 修改某章 | \"修改第 X 章,[具体问题]\" |\n| 检查质量 | \"运行质量检查\" |\n| 查看进度 | \"查看进度仪表盘\" |\n| 导出 epub | \"导出成书\" |\n\n---\n\n## 文件速查\n\n| 文件 | 用途 | 查看时机 |\n|------|------|---------|\n| `00-大纲.md` | 极简大纲 | 开始新项目时 |\n| `99-进度仪表盘.md` | 当前状态 | 每次写作前 |\n| `第XX章.md` | 章节正文 | 阅读/修改时 |\n| `ai-style-examples.md` | AI 味改写范例 | 质量检查后 |\n| `hook-techniques.md` | 钩子技巧 | 设计结尾时 |\n\n---\n\n## 常见问题\n\n### Q: 我可以不写大纲直接开始吗?\n\n可以。对 AI 说:\n```text\n直接开始写,不写大纲。\n```\n\nAI 会生成一页「精简总纲」后开始写第 1 章。\n\n但推荐先写大纲,因为:\n- 写到第 10 章不会崩盘\n- 结局不会烂尾\n- 悬念不会忘\n\n### Q: AI 写的我不满意怎么办?\n\n**修改某一段**:\n```text\n修改第 X 章第 Y 段,问题是[具体问题]。\n例如:对白不自然 / 节奏太慢 / 缺少细节\n```\n\n**重写整章**:\n```text\n重写第 X 章,要求:[具体要求]。\n例如:钩子更强 / 对白更口语化 / 增加动作描写\n```\n\n**切换快速/标准模式**:\n```text\n快速写第 X 章(跳过场景拆分)\n```\n\n### Q: 我可以用自己的大纲吗?\n\n可以。把你的大纲保存为 `00-大纲.md`,然后说:\n```text\n使用我的大纲,继续写第 X 章。\n```\n\n### Q: 可以多人协作吗?\n\n可以。使用 `08-人机协作-v2.md` 的交接协议:\n\n```markdown\n## 人类修改记录\n- 修改位置:第 X 章 第 Y 段\n- 修改原因:___\n- 继续要求:___\n```\n\n保存后,另一位作者可以继续。\n\n---\n\n## 进阶路径\n\n### 第 1 周:掌握基础\n- [ ] 完成第一本小说(10 章)\n- [ ] 熟练使用\"继续写\"指令\n- [ ] 学会运行 AI 味检测\n\n### 第 2 周:提升质量\n- [ ] 阅读 `ai-style-examples.md`\n- [ ] 学会识别 9 种 AI 味症状\n- [ ] 每章运行检测并修复\n\n### 第 3 周:掌握节奏\n- [ ] 阅读 `11-叙事节奏框架.md`\n- [ ] 学习三层节奏体系\n- [ ] 选择适合你题材的模板\n\n### 第 4 周:精通悬念\n- [ ] 阅读 `09-悬念生命周期管理.md`\n- [ ] 学会规划\"本章悬念操作\"\n- [ ] 掌握悬念 - 章节匹配\n\n---\n\n## 最后提醒\n\n1. **第一遍写**,不要追求完美\n - 用快速模式\n - 先完成,再完美\n\n2. **第二遍改**,重点去 AI 味\n - 运行 `check_ai_style.py`\n - 对照 `ai-style-examples.md` 改写\n\n3. **第三遍润**,打磨节奏和钩子\n - 对照 `hook-techniques.md`\n - 检查每章结尾钩子\n\n**三遍之后,你的小说已经比 90% 的 AI 生成内容更像人类写的。**\n\n---\n\nHappy Writing! ✍️\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6437,"content_sha256":"2c96b143923e94f79688bd73ed41700d49bca053a30f4e50d8646543389b7eff"},{"filename":"README.md","content":"# chinese-novelist-skill\n\n> 从\"随便写个故事\"到\"写出能看的网文\",你需要的不只是灵感,而是一套防崩盘的工程化工作流。\n\n---\n\n## ✨ 这是什么\n\n**chinese-novelist-skill** 是一套面向中文小说/网文创作的系统化工具。\n\n它不是\"AI 帮我写小说\"的魔法咒语,而是:\n- 📋 **防崩盘的结构**:让长篇不乱、不水、前后一致\n- 🔍 **AI 味检测器**:自动识别\"空洞情绪句\"\"解释腔\"\"四字堆砌\"\n- 🎯 **悬念导航系统**:追踪每一条悬念的\"新鲜度\",防止写到后面忘了前面\n- ⚡ **傻瓜化工作流**:从\"一句话创意\"到\"出版级小说\"的可执行路径\n\n---\n\n## 🚀 快速开始(5 分钟上手)\n\n### 第一步:创建小说\n\n```text\n使用 chinese-novelist-skill,帮我写一本悬疑小说,20 章。\n```\n\nAI 会自动:\n1. 引导你填写「极简大纲」(10 个问题,5 分钟完成)\n2. 生成「进度仪表盘」(自动追踪进度)\n3. 开始写「第 1 章」\n\n### 第二步:继续写作\n\n```text\n继续写\n```\n\nAI 会自动:\n1. 读取「进度仪表盘」获取当前状态\n2. 检查悬念过期警告\n3. 提取人物当前状态\n4. 写「下一章」\n\n### 第三步:质量检查\n\n```bash\n# 检查字数\npython scripts/check_chapter_wordcount.py novels/我的小说/第01章.md\n\n# 检查 AI味(自动检测\"空洞情绪句\"\"四字堆砌\"等)\npython scripts/check_ai_style.py novels/我的小说/第01章.md\n```\n\n---\n\n## 📁 项目结构(优化后)\n\n```\nnovels/\n└── 我的小说/\n ├── 00-大纲.md # 极简大纲(10字段)\n ├── 99-进度仪表盘.md # AI自动维护,一眼看进度\n ├── 01-人物档案-v2.md # 人物核心引擎(驱动式)\n ├── 02-世界观与伏笔.md # 世界观+悬念追踪表\n ├── 03-悬念追踪表.md # 悬念生命周期管理\n ├── 第01章-血色黎明.md # 章节文件\n ├── 第02章-暗流涌动.md\n └── ...\n```\n\n### 核心文件说明\n\n| 文件 | 用途 | 谁维护 |\n|------|------|--------|\n| `00-大纲.md` | 极简大纲:10 个核心问题 | 用户填写 |\n| `99-进度仪表盘.md` | 当前位置、悬念状态、质量概况 | **AI 自动** |\n| `01-人物档案-v2.md` | 欲望 - 恐惧引擎、声音指纹、缺陷 - 失败映射 | 用户填写 |\n| `03-悬念追踪表.md` | 悬念 ID、状态、过期预警 | AI 自动 |\n| `第XX章-标题.md` | 章节正文 + 任务卡 + 复盘 | 用户+AI |\n\n---\n\n## 🎯 核心功能\n\n### 1. 三阶段工作流(简化)\n\n不再纠结\"策划模式还是连载模式\",只用记住三个阶段:\n\n```\n┌─────────────────────────────────────────────────┐\n│ 策划期 ────────────────────────────────────────→ │\n│ 目标:锁定大纲、人物、首章任务 │\n│ 出口:首章任务卡完成 │\n├─────────────────────────────────────────────────┤\n│ 连载期 ────────────────────────────────────────→ │\n│ 目标:按章推进,自动维护悬念和人物状态 │\n│ 默认模式,你说\"继续写\"就行 │\n├─────────────────────────────────────────────────┤\n│ 收尾期 ────────────────────────────────────────→ │\n│ 目标:完稿检查、伏笔回收、结局收束 │\n│ 触发:你说\"写完了\" │\n└─────────────────────────────────────────────────┘\n```\n\n**快速模式 vs 标准模式**:\n\n| 模式 | 触发词 | 特点 | 质量检查 |\n|------|--------|------|---------|\n| **快速模式** | \"快写\"\"初稿\" | 跳过场景拆分,直接输出 | 仅字数 + 基础钩子 |\n| **标准模式** | 默认 | 完整流程 | 红绿灯检查(3-5 项) |\n\n---\n\n### 2. 红绿灯质量检查\n\n每章只需检查 3-5 项核心指标,不再被 50+ 清单压垮:\n\n**🟥 红灯项(必须过关)**\n- [ ] **变化原则**:本章发生了不能删除的变化\n- [ ] **字数达标**:≥3000 字(快速模式≥2500)\n- [ ] **钩子存在**:结尾有明确的悬念/问题/张力\n- [ ] **人物一致**:主要人物行为符合设定\n\n**🟨 黄灯项(建议优化,自动检测)**\n- [ ] AI 味程度(运行脚本自动检测)\n- [ ] 对白自然度\n- [ ] 展示 vs 讲述比例\n\n**🟩 绿灯项(完稿时统一检查)**\n- [ ] 伏笔回收状态\n- [ ] 整体节奏曲线\n- [ ] 人物弧线完整性\n\n---\n\n### 3. AI 味检测脚本\n\n自动识别 9 种常见 AI 写作痕迹:\n\n```bash\npython scripts/check_ai_style.py novels/我的小说/第01章.md\n```\n\n**检测维度**:\n\n| 维度 | 示例 | 严重程度 |\n|------|------|---------|\n| **空泛形容词** | \"他很悲伤\" \"她非常开心\" | 🔴 重度 |\n| **四字成语堆砌** | \"情不自禁、百感交集\" | 🟡 中度 |\n| **解释性连接词** | \"然而、因此、不难看出\" | 🟡 中度 |\n| **时间转折词滥用** | \"突然、就在这时、下一秒\" | 🟢 轻度 |\n| **情绪标签句** | \"他感到前所未有的...\" | 🔴 重度 |\n| **句式均匀** | 全是短句,没有变化 | 🟢 轻度 |\n| **过度书面化对白** | \"我认为这个假设存在漏洞\" | 🟡 中度 |\n| **视角混乱** | 一句话内切换多个角色内心 | 🔴 重度 |\n| **信息倾倒** | 大段背景说明 | 🟡 中度 |\n\n**输出示例**:\n```\n🤖 AI味检测报告\n\n🔴 AI味评级:中度(综合得分: 4.2)\n\n❌ 空泛形容词: 5/千字 (阈值: \u003c3) 🔴 超标\n 示例: \"他很悲伤\" \"她非常开心\"\n 💡 建议: 用具体动作替代情绪标签\n\n⚠️ 四字成语: 8/千字 (阈值: \u003c5) 🟡 超标\n 示例: \"情不自禁\" \"百感交集\"\n 💡 建议: 参考 ai-style-examples.md 改写\n\n📚 参考文档: references/ai-style-examples.md\n```\n\n---\n\n### 4. 悬念生命周期管理\n\n不再\"提了悬念就忘\",自动追踪每条悬念的\"新鲜度\":\n\n**悬念状态**:\n- 🟢 **活跃**:最近提及,读者记得\n- 🟡 **即将过期**:5 章未提及,需保温\n- 🔴 **已过期**:10 章未提及,必须处理\n- ✅ **已回收**:悬念已解答\n\n**自动预警**:\n```\n⚠️ 悬念状态\n- [001] 凶手是谁: 🟢 活跃(最近第8章提及)\n- [002] 主角身世: 🔴 已过期(已10章未提及,必须在本章提及)\n- [003] 宝藏位置: 🟡 即将过期(已5章未提及)\n\n当前活跃悬念:3/6 ✅\n本章建议:提及悬念002或003,防止过期\n```\n\n**每章必须规划**:\n| 悬念 ID | 操作 | 说明 |\n|--------|------|------|\n| 001 | 推进 | 给出新线索 |\n| 002 | 提及 | 简单提到,防止过期 |\n| 003 | - | 本章不涉及 |\n\n---\n\n### 5. 三层叙事节奏体系\n\n从\"只能事后检查\"到\"事前可规划\":\n\n**宏观层(全本)**:四幕结构 + 15 个关键节点\n```\n第一幕(25%): 建立冲突 → 第二幕(50%): 升级对抗 → \n第三幕(20%): 最终对决 → 第四幕(5%): 收尾\n```\n\n**中观层(章节组)**:黄金三章模式\n```\n每3章一个节奏单元: [铺垫] → [升级] → [小高潮+钩子]\n```\n\n**微观层(单章)**:3 次情绪起伏\n```\n20%位置: 进入冲突 → 50%位置: 矛盾激化 → 80%位置: 钩子落下\n```\n\n**5 种题材特定模板**:\n- 悬疑:疑问→调查→线索→反转\n- 玄幻升级:挑战→修炼→突破→震惊\n- 言情:误会→甜蜜→阻碍→和解\n- 种田:目标→阻碍→解决→收获\n- 都市现实:压力→应对→暂时解决→新压力\n\n---\n\n### 6. 人物档案 v2(驱动式引擎)\n\n人物档案不再是\"填空表格\",而是**驱动写作决策的引擎**:\n\n**核心引擎**:\n```markdown\n## 欲望 - 恐惧双引擎\n- 自觉欲望(主角认为 Ta 想要的):___\n- 不自觉欲望(主角真正需要的):___\n- 核心恐惧(如果欲望不能实现):___\n- 道德前提(将被挑战的信念):___\n\n## 声音指纹\n- 标志性对白(3-5 句锚点):\n 1. \"...\"\n 2. \"...\"\n 3. \"...\"\n- 禁止用语(绝对不会说的话):___\n- 情绪状态下的声音变化:___\n\n## 缺陷 - 失败映射\n- 固有缺陷:___\n- 可能造成的失败场景:\n 1. 第 X 章:因___导致___\n 2. 第 Y 章:因___导致___\n```\n\n**写作时自动约束**:\n- 每句对白生成后,对照「声音锚点」检查\n- 每个决策后,验证是否符合「核心价值观 + 恐惧」\n- 场景结束时,确保至少一条关系线变化\n\n---\n\n## 📚 完整文档索引\n\n### 核心文档\n- [SKILL.md](SKILL.md) - 主技能文件,包含完整工作流\n- [OPTIMIZATION_PLAN.md](OPTIMIZATION_PLAN.md) - 优化计划(三轮迭代记录)\n\n### 模板文件\n- [outline-template-v1-minimal.md](references/outline-template-v1-minimal.md) - 极简大纲(10 字段)\n- [progress-dashboard-template.md](references/progress-dashboard-template.md) - 进度仪表盘\n- [character-template-v2.md](references/character-template-v2.md) - 人物档案 v2(驱动式)\n- [chapter-template.md](references/chapter-template.md) - 章节任务卡\n\n### 工具脚本\n- [check_chapter_wordcount.py](scripts/check_chapter_wordcount.py) - 字数检查\n- [check_ai_style.py](scripts/check_ai_style.py) - **AI 味检测(9 种症状,支持--all 批量)**\n- [check_novel_health.py](scripts/check_novel_health.py) - **小说健康体检(字数 + 节奏 + 场景)**\n- [check_timeline.py](scripts/check_timeline.py) - **时间线一致性检查**\n- [character_tracker.py](scripts/character_tracker.py) - **人物一致性检查**\n- [generate_epub.py](scripts/generate_epub.py) - EPUB 导出\n- [translate_to_english.py](scripts/translate_to_english.py) - 英文翻译\n\n### 改进文档(第二轮)\n- [09-悬念生命周期管理.md](references/09-悬念生命周期管理.md) - 悬念追踪 + 预警\n- [10-悬念 - 章节匹配矩阵.md](references/10-悬念-章节匹配矩阵.md) - 悬念 - 章节规划\n- [11-叙事节奏框架.md](references/11-叙事节奏框架.md) - 三层节奏 + 题材模板\n- [scene-design-v2.md](references/scene-design-v2.md) - 场景设计工具升级\n\n### 改进文档(第三轮)\n- [ai-style-examples.md](references/ai-style-examples.md) - **AI 味改写范例库**\n- [ai-style-by-genre.md](references/ai-style-by-genre.md) - **按题材 AI 味清单**\n- [08-人机协作-v2.md](references/08-人机协作-v2.md) - **快速协作协议**\n- [12-喘息机制.md](references/12-喘息机制.md) - **喘息章设计**\n- [13-钩子映射表.md](references/13-钩子映射表.md) - **钩子类型映射**\n\n### 参考文档(原 v1)\n- [chapter-guide.md](references/chapter-guide.md) - 章节写作指南\n- [opening-design.md](references/opening-design.md) - 首章设计\n- [hook-techniques.md](references/hook-techniques.md) - 钩子技巧\n- [dialogue-writing.md](references/dialogue-writing.md) - 对白写作\n- [style-polishing.md](references/style-polishing.md) - 文风打磨\n- [ending-design.md](references/ending-design.md) - 结局设计\n- ...(其他见 references/ 目录)\n\n---\n\n## 🎓 使用教程\n\n### 新手入门(推荐顺序)\n\n1. **5 分钟快速开始**\n ```text\n 使用 chinese-novelist-skill,帮我写一本悬疑小说。\n ```\n → 跟随 AI 引导填写极简大纲\n\n2. **10 分钟理解工作流**\n - 阅读 [SKILL.md](SKILL.md) 的「三阶段工作流」部分\n - 了解「红绿灯质量检查」\n\n3. **20 分钟掌握质量**\n - 阅读 [ai-style-examples.md](references/ai-style-examples.md)\n - 学会识别 9 种 AI 味症状\n\n4. **开始写作**\n - 对 AI 说\"继续写\"\n - 每章完成后运行 `check_ai_style.py`\n\n### 进阶使用\n\n1. **悬念管理**\n - 阅读 [09-悬念生命周期管理.md](references/09-悬念生命周期管理.md)\n - 学会规划「本章悬念操作」\n\n2. **节奏设计**\n - 阅读 [11-叙事节奏框架.md](references/11-叙事节奏框架.md)\n - 选择适合你题材的模板\n\n3. **人物深化**\n - 使用 [character-template-v2.md](references/character-template-v2.md)\n - 建立「缺陷 - 失败映射」\n\n---\n\n## 💡 常见问题\n\n### Q: 优化后的 skill 和 v1 版本有什么区别?\n\n**v1 版本**:\n- 6 种工作模式,容易迷路\n- 模板 100+ 字段,填写负担重\n- 质量检查 50+ 项,形式主义\n- 悬念静态记录,容易遗忘\n- AI 味只有负面清单,不知道怎么改\n\n**优化后**:\n- 3 阶段工作流,傻瓜化\n- 极简模板 10 字段,5 分钟开始\n- 红绿灯检查,3-5 项核心\n- 悬念动态追踪,自动预警\n- AI 味改写范例,9 种症状都有前后对比\n\n### Q: 我可以只用部分功能吗?\n\n可以。skill 采用「渐进式约束」:\n- 新手:只用极简大纲 +「继续写」+AI 味检测\n- 进阶:启用悬念管理 + 节奏设计\n- 专家:完整使用人物 v2+ 场景工具\n\n### Q: 适合哪些题材?\n\n内置 5 种题材模板:\n- **悬疑/推理**:[09-悬念生命周期管理.md](references/09-悬念生命周期管理.md) 有专门章节\n- **玄幻升级流**:[11-叙事节奏框架.md](references/11-叙事节奏框架.md) 有递进型节奏\n- **言情/情感**:[ai-style-by-genre.md](references/ai-style-by-genre.md) 有专门章节\n- **种田/基建**:[11-叙事节奏框架.md](references/11-叙事节奏框架.md) 有渐进满足节奏\n- **都市/职场**:[ai-style-by-genre.md](references/ai-style-by-genre.md) 有专门章节\n\n其他题材可以使用通用模板,效果也很好。\n\n### Q: 需要学习成本吗?\n\n**最小学习成本**(5 分钟):\n1. 对 AI 说\"帮我写本小说\"\n2. 跟随引导填写极简大纲\n3. 说\"继续写\"\n\n**推荐学习成本**(1 小时):\n- 阅读 [ai-style-examples.md](references/ai-style-examples.md)\n- 学会识别和改写 AI 味\n\n**完整掌握**(1 天):\n- 通读 [SKILL.md](SKILL.md)\n- 理解三层工作流\n- 掌握悬念管理和节奏设计\n\n---\n\n## 🔧 安装\n\n### 方法一:完整克隆(推荐)\n\n```bash\ngit clone https://github.com/henry/chinese-novelist-skill.git\ncd chinese-novelist-skill\n```\n\n### 方法二:手动下载\n\n1. 下载本仓库 ZIP\n2. 解压到 skill 目录\n3. 让工具重新加载 skill\n\n### 支持的 AI 工具\n\n| 工具 | 安装路径 | 说明 |\n|------|---------|------|\n| Claude Code | `~/.claude/skills/` | 推荐 |\n| OpenCode | `~/.config/opencode/skills/` | 支持 |\n| 其他 | 参考各工具文档 | 通用 Markdown skill |\n\n---\n\n## 📊 版本记录\n\n- **v1.0.0** → **v2.0.0**(三轮优化后)\n - 工作流简化:6 模式→3 阶段\n - 新增 AI 味检测脚本\n - 新增悬念生命周期管理\n - 新增三层节奏体系\n - 新增人物档案 v2(驱动式)\n - 新增场景设计 v2(可执行工具)\n - 新增按题材 AI 味清单\n - 新增钩子映射表\n\n详见 [OPTIMIZATION_PLAN.md](OPTIMIZATION_PLAN.md)\n\n---\n\n## 🙏 致谢\n\n本 skill 的设计理念参考了:\n- 《故事》(罗伯特·麦基)- 故事结构\n- 《写作这回事》(斯蒂芬·金)- 写作实践\n- 《千面英雄》(约瑟夫·坎贝尔)- 英雄之旅\n- 网文平台爆款分析 - 节奏和钩子\n\n---\n\n## 📄 许可证\n\nMIT License - 自由使用,欢迎改进\n\n---\n\n> **最后提醒**:好作品是改出来的。第一遍写出来,第二遍用 `check_ai_style.py` 检测,第三遍对照 `ai-style-examples.md` 改写。三遍之后,AI 味去除 90%。\n\n*Happy Writing! ✍️*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":16028,"content_sha256":"fa750b7df0057d9f7e31bb7fc2a00d93ede5dc806bee01d8a193af6f7947971a"},{"filename":"references/03-多线管理.md","content":"# 多线叙事管理\n\n> 本模板适用于群像、多视角或多叙事线的小说。如果你的小说是单线叙事,可以跳过此文件。\n\n## 叙事线总览\n\n| 叙事线 | 核心人物 | 主要目标 | 预计占比 |\n|--------|----------|----------|----------|\n| 主线 | 主角 | 核心冲突 | 50% |\n| 副线A | 配角X | 支线目标1 | 20% |\n| 副线B | 配角Y | 支线目标2 | 20% |\n| 暗线 | 反派 | 潜伏目标 | 10% |\n\n**占比说明:** 占比是指该线在全书总字数中的比例。可根据实际调整,但单线不宜低于10%(太低会被读者遗忘)。\n\n## 篇幅分配规则\n\n### 主线与副线关系\n- 主线贯穿全书,始终是核心驱动力\n- 副线在特定阶段成为临时主线(如\"复仇线\"在复仇阶段)\n- 暗线只在关键时刻出现,但必须贯穿全书\n\n### 分配原则\n- 主线:每3-5章必须有明显推进\n- 副线A/B:每5-8章必须出现一次\n- 暗线:每10章至少铺垫一次\n- **任何单线连续消失不得超过10章**\n\n## 线状态跟踪\n\n### 状态定义\n\n| 状态 | 含义 |\n|------|------|\n| 活跃 | 当前章节有该线的戏份 |\n| 铺垫 | 该线暂时退居幕后,但仍有时机出现 |\n| 悬空 | 该线超过8章没出现,需要尽快安排 |\n| 回收 | 该线进入收束阶段,准备交汇 |\n| 完成 | 该线已解决,等待交汇 |\n\n### 跟踪表\n\n| 叙事线 | 当前状态 | 最后出现章节 | 备注 |\n|--------|----------|--------------|------|\n| 主线 | 活跃 | 第X章 | ... |\n| 副线A | 铺垫 | 第X章 | ... |\n| 副线B | 悬空 | 第X章 | 连续消失8章,需要安排 |\n| 暗线 | 活跃 | 第X章 | ... |\n\n**更新频率:** 每次写完新章节后更新此表。\n\n## 视角切换规则\n\n### 视角类型\n- **第一人称** — \"我看到了...\"\n- **有限第三人称** — \"他看到了...\"(只能知道该人物所知)\n- **全知第三人称** — 叙述者什么都知道\n\n### 切换时机\n- **允许切换:** 新场景开始、同一场景内时间跳跃、POV人物完成任务\n- **避免切换:** 冲突进行中、情感高潮点、关键信息刚揭露\n- **切换警示:** 单章节内视角切换超过3次需要检查是否必要\n\n### 视角占比参考\n\n| 叙事线 | 推荐视角 | 占比控制 |\n|--------|----------|----------|\n| 主线 | 有限第三人称 | 该线章节的80%以上 |\n| 副线 | 可根据需要选择 | 该线章节的70%以上 |\n\n## 交汇设计\n\n### 交汇节点\n\n在章节规划时,预先标记关键交汇节点:\n\n| 交汇节点 | 涉及叙事线 | 交汇方式 | 章节 |\n|----------|-----------|----------|------|\n| 第一次交汇 | 主线+副线A | 人物相遇 | 第X章 |\n| 第二次交汇 | 主线+副线A+副线B | 目标冲突 | 第X章 |\n| 第三次交汇 | 所有线 | 高潮对决 | 终章 |\n\n### 交汇原则\n- 交汇前每条线必须有至少一次\"准备\"(让读者知道这条线要来了)\n- 交汇时要有\"原来如此\"的揭示感\n- 交汇点不要超过3条线同时交汇(会乱)\n\n## 健康检查\n\n每写完5-10章,做一次多线健康检查:\n\n### 检查项\n- [ ] 每条线是否按计划推进?\n- [ ] 是否有某条线超过10章没出现?\n- [ ] 视角切换是否混乱?\n- [ ] 交汇节点是否按计划执行?\n- [ ] 各线目标是否与主线冲突有交集?\n\n### 常见问题处理\n\n| 问题 | 解决方案 |\n|------|----------|\n| 某条线写太多了 | 砍场景,把篇幅转移给其他线 |\n| 某条线消失了 | 安排一次\"意外相遇\"或\"信息传递\" |\n| 交汇太早 | 延迟交汇,增加铺垫 |\n| 交汇太晚 | 提前合并,减少支线章节 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3614,"content_sha256":"00bc12a1243ca19b49d46a85d9f9c0a7a2be6463b0aace884ce2da81e7e18922"},{"filename":"references/04-素材积累.md","content":"# 素材积累\n\n> 本文件用于整理写作所需的领域知识。写完记得更新。\n\n## 素材清单\n\n### 必查项目(根据题材)\n\n- [ ] 领域基础知识(术语、行话、基本规则)\n- [ ] 从业者日常(工作流程、挑战、习惯)\n- [ ] 常见错误(外行人容易犯的错)\n- [ ] 专业细节(能增加真实感的小细节)\n\n### 题材素材清单\n\n**职场/商战**\n- [ ] 行业术语和缩写\n- [ ] 典型工作日流程\n- [ ] 会议/汇报的语言风格\n- [ ] 常见职业病/压力源\n- [ ] 行业潜规则\n\n**医疗**\n- [ ] 医院科室分工\n- [ ] 常见诊断流程\n- [ ] 医疗术语(患者能理解的)\n- [ ] 医患沟通话术\n- [ ] 医疗行业的禁忌话题\n\n**历史**\n- [ ] 当时日常用语\n- [ ] 饮食习惯、服饰、交通\n- [ ] 社会阶层和礼仪\n- [ ] 货币/物价/工资\n- [ ] 常见历史错误(避免穿越)\n\n**悬疑/犯罪**\n- [ ] 侦查基本流程\n- [ ] 常见取证方法\n- [ ] 犯罪心理学基础\n- [ ] 法律程序(拘留、审讯、起诉)\n- [ ] 警察/法医真实工作状态\n\n**科幻**\n- [ ] 科技术语(用普通人能理解的方式解释)\n- [ ] 技术现状和局限\n- [ ] 逻辑自洽性检查\n- [ ] 科学顾问(如需要)\n\n**都市/现实**\n- [ ] 当地生活细节(气候、交通、物价)\n- [ ] 社区/邻里关系\n- [ ] 普通人日常困扰\n- [ ] 语言习惯和口头禅\n\n### 自定义领域\n\n根据你的具体题材,列出需要研究的领域:\n\n#### [领域名称]\n\n**必查项:**\n- ...\n\n**加分项(增加真实感):**\n- ...\n\n**常见错误:**\n- ...\n\n## 整理好的素材\n\n### 术语表\n\n| 术语 | 解释 | 用途 |\n|------|------|------|\n| ... | ... | ... |\n\n### 场景素材\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n\n#### [场景类型]\n\n**真实细节:**\n- ...\n\n**可以虚构的部分:**\n- ...\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1892,"content_sha256":"8060abd8fee7da2aa256a57ba89c4f76a2081277a7fa3df724aaab892f28ab1b"},{"filename":"references/05-节奏健康报告.md","content":"# 节奏健康报告\n\n> 每写完5-10章后生成一次,记录节奏健康状态。\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 场景分析\n\n### 场景类型分布\n| 场景类型 | 出现次数 | 占比 |\n|----------|----------|------|\n| 室内对话 | 5 | 25% |\n| 户外 | 3 | 15% |\n| 动作 | 2 | 10% |\n| 其他 | 10 | 50% |\n\n### 警告\n- [ ] 场景类型重复超过3章\n\n## 伏笔跟踪\n\n### 伏笔状态\n| 伏笔 | 首次出现 | 最近回收 | 状态 |\n|------|----------|----------|------|\n| 神秘信封 | 第2章 | - | ⚠️ 未回收 |\n| 反派身份 | 第5章 | 第8章 | ✅ 已回收 |\n\n### 警告\n- [ ] 有伏笔超过10章未回收\n\n## 字数分析\n\n### 统计\n- 总字数:\n- 平均字数:\n- 最高章节:第X章(XXXX字)\n- 最低章节:第Y章(XXXX字)\n\n### 警告\n- [ ] 有章节低于2000字\n- [ ] 有章节超过5000字\n\n## 钩子强度\n\n### 章节钩子评分\n| 章节 | 字数 | 钩子强度 | 备注 |\n|------|------|----------|------|\n| 第1章 | 3200 | ★★★★☆ | 悬念感强 |\n| 第2章 | 2800 | ★★★☆☆ | 结尾略平 |\n| ... | ... | ... | ... |\n\n### 评分标准\n- ★★★★★:强悬念(死亡威胁、重大揭示)\n- ★★★★☆:明确悬念(未解问题、新危机)\n- ★★★☆☆:一般悬念(轻微好奇)\n- ★★☆☆☆:结尾较弱\n- ★☆☆☆☆:平结尾\n\n### 警告\n- [ ] 有章节钩子强度低于2星\n\n## 多线均衡(如适用)\n\n### 叙事线状态\n| 叙事线 | 最后出现 | 间隔章节 | 状态 |\n|--------|----------|----------|------|\n| 主线 | 第10章 | 0 | ✅ |\n| 副线A | 第2章 | 8 | ⚠️ |\n| 副线B | 第9章 | 1 | ✅ |\n\n### 状态标准\n- ✅ 正常(最近5章内出现过)\n- ⚠️ 警告(5-8章未出现)\n- 🔴 危险(超过8章未出现)\n\n### 警告\n- [ ] 有叙事线超过8章未出现\n\n## 综合评估\n\n**健康得分:** ★★★★☆ (4/5)\n\n**主要问题:**\n1. 副线A消失太久,需要安排出场\n2. 室内对话场景过多\n\n**建议:**\n1. 下1-2章优先让副线A出现\n2. 增加户外或动作场景平衡\n3. 第6章结尾需要加强钩子\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2191,"content_sha256":"cd116847b9a9da1ad40c33693118bb8dc079d68cbec47a5d21f0454ee00cd2b6"},{"filename":"references/06-出版门控.md","content":"# 出版门控\n\n> 在进入出版或发布前,按此清单做系统性验收。\n\n## 健康检查(每写完5-10章)\n\n- [ ] 主线悬念是否按计划回收?\n- [ ] 是否有某条伏笔超过15章未回收(警告)?\n- [ ] 人物状态是否前后一致?\n- [ ] 是否有逻辑漏洞?\n\n## 结局验收(写完大纲后)\n\n### 倒序检查法\n\n从结局往前推,验证每章是否服务结局:\n\n**结局要求 → 倒数第3章 → 倒数第2章 → 倒数第1章 → 结局**\n\n- [ ] 结局是否兑现了大纲承诺?\n- [ ] 每章的进展是否导向结局?\n- [ ] 是否有偏离结局的章节?\n\n### 常见烂尾模式预警\n\n检查是否存在以下模式:\n\n| 烂尾模式 | 描述 | 检查项 |\n|----------|------|--------|\n| 机械降神 | 结局靠突然出现的力量解决 | [ ] 结局的解决方案是否在前文有铺垫? |\n| 主角光环 | 主角轻易获胜,无代价 | [ ] 主角是否付出了合理的代价? |\n| 支线烂尾 | 支线挖坑不填 | [ ] 每条支线是否都有回收? |\n| 匆忙收场 | 结尾突然,像赶工 | [ ] 结局是否有足够的篇幅? |\n| 开放结局滥用 | 所有问题都没回答 | [ ] 核心问题是否都有答案? |\n| 反派弱化 | 反派结局时突然变弱 | [ ] 反派是否保持了一致性? |\n\n## 出版分级标准\n\n### 入门级(可网络连载)\n\n- [ ] 字数达标(每章 ≥ 3000字)\n- [ ] 无明显错别字/病句\n- [ ] 主线完整,有开头有结尾\n- [ ] 人物基本一致\n\n### 专业级(可付费发布)\n\n入门级 +:\n- [ ] 无逻辑漏洞\n- [ ] 伏笔基本回收(允许1-2个悬念留作续作)\n- [ ] 节奏控制良好(无过长章节)\n- [ ] 对话自然,符合人物性格\n- [ ] 开篇钩子足够强\n\n### 出版级(可正式出版)\n\n专业级 +:\n- [ ] 所有伏笔回收(或明确标记为续作伏笔)\n- [ ] 主题表达清晰\n- [ ] 人物有成长弧线\n- [ ] 结局有余韵\n- [ ] 无敏感内容问题\n\n## 倒序检查工作表\n\n填写以下工作表,验证每章是否服务结局:\n\n| 章节 | 主要事件 | 是否服务结局 | 问题 |\n|------|----------|--------------|------|\n| 结局 | ... | - | - |\n| 倒数第1章 | ... | ✅/❌ | ... |\n| 倒数第2章 | ... | ✅/❌ | ... |\n| ... | ... | ... | ... |\n\n## 最终确认\n\n在发布前,确认以下问题:\n\n- [ ] 结局是否让读者满意?\n- [ ] 是否有遗留问题未解决(除续作伏笔外)?\n- [ ] 是否需要续作/系列?\n- [ ] 读者在评论区可能问哪些问题?(提前准备)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2542,"content_sha256":"013feaa435a4a40ee864298042f0b23a31989a326179b2bc5c2922301a977f05"},{"filename":"references/07-叙事节奏曲线.md","content":"> ⚠️ **此为 v1 版本,已过时。推荐使用 [11-叙事节奏框架.md](11-叙事节奏框架.md)(含三层体系、5 种题材模板、黄金三章模式)。本文件仅作参考保留。**\n\n# 叙事节奏曲线\n\n> 设计全书的紧张程度起伏,确保节奏有峰有谷。\n\n## 选择的曲线类型\n\n- [ ] 递进型 — 紧张度持续上升\n- [ ] 波浪型 — 紧张度波浪起伏\n- [ ] 高原型 — 紧张度保持中高水平\n- [ ] 反转型 — 开头紧张,结局更紧张\n\n**曲线图示:**\n\n```\n紧张度:\n★\n\n★\n\n★\n\n★ ★\n第1章 → → 结局\n```\n\n## 关键节点规划\n\n| 节点 | 目标章节 | 紧张度目标 | 必须元素 | 状态 |\n|------|----------|-----------|----------|------|\n| 开篇钩子 | 第 1 章 | ★★★☆ | | ⬜ |\n| 第一个小高潮 | 第 X 章 | ★★★☆ | | ⬜ |\n| 中点转折 | 第 X 章 | ★★★★★ | | ⬜ |\n| 中段升级 | 第 X 章 | ★★★★☆ | | ⬜ |\n| 倒数第二个高潮 | 第 X 章 | ★★★★★ | | ⬜ |\n| 结局 | 终章 | ★★★★★ | | ⬜ |\n\n## 节奏曲线跟踪表\n\n每写完 5 章,记录实际紧张度,对照设计检查:\n\n| 检查点 | 章节范围 | 设计紧张度 | 实际紧张度 | 差距 | 调整建议 |\n|--------|----------|-----------|-----------|------|----------|\n| 第 1 次 | 第 1-5 章 | ★★★☆ | | | |\n| 第 2 次 | 第 6-10 章 | | | | |\n| 第 3 次 | 第 11-15 章 | | | | |\n| 第 4 次 | 第 16-20 章 | | | | |\n| ... | ... | | | | |\n\n## 各阶段紧张度要求\n\n### 第一阶段(前 25%)\n- 建立紧张承诺\n- 设置主要冲突\n- 紧张度:★★☆ ~ ★★★☆\n\n### 第二阶段(25%-50%)\n- 逐步升级紧张\n- 建立节奏:紧张→喘气→紧张\n- 紧张度:★★☆ ~ ★★★★☆\n\n### 第三阶段(50%-75%)\n- 中点必须最高或次高\n- 代价明显增大\n- 紧张度:★★★☆ ~ ★★★★★\n\n### 第四阶段(75%-结局)\n- 持续高紧张\n- 逐步推向终极高潮\n- 紧张度:★★★★☆ ~ ★★★★★\n\n## 常见问题处理\n\n| 问题 | 表现 | 解决方案 |\n|------|------|----------|\n| 中段疲软 | 紧张度持续走低 | 增加新冲突/角色介入 |\n| 高潮太早 | 中段就到达顶峰 | 延迟关键揭示/增加阻碍 |\n| 结局平 | 最终对决不够紧张 | 增强代价/增加反转 |\n| 节奏单调 | 一直同样的紧张度 | 增加喘息场景/支线起伏 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2453,"content_sha256":"e7368364b5a8613146a1dfe9a6fc87acf08847f6c9152d713ede14e3ec52265e"},{"filename":"references/08-人机协作-v2.md","content":"# 人机协作协议v2(快速交接版)\n\n> 从\"正式化交接\"到\"一句话续写\",降低协作门槛。\n\n---\n\n## 核心理念\n\n**v1的问题**:上下文传递格式太正式,用户需要手动填写很多内容。\n\n**v2的目标**:AI自动提取关键信息,用户只需说\"继续写\"。\n\n---\n\n## 快速续写模式(默认)\n\n### 用户说... AI自动做...\n\n| 用户输入 | AI动作 |\n|---------|--------|\n| \"继续写\" / \"下一章\" | 读取进度仪表盘 → 提取上下文 → 自动场景拆分 → 开始写作 |\n| \"写第X章\" | 读取第X章任务卡 → 提取关键上下文 → 开始写作 |\n| \"从[某处]继续\" | 定位到该位置 → 读取前后文 → 续写 |\n| \"修改第X章\" | 读取该章 → 诊断问题 → 给出修改方案 |\n\n### AI自动提取的信息\n\n当用户说\"继续写\"时,AI自动从以下位置提取:\n\n1. **进度仪表盘**(`99-进度仪表盘.md`)\n - 当前写到第几章\n - 本章状态\n - 下章任务卡\n\n2. **悬念追踪表**(`03-悬念追踪表.md`)\n - 活跃悬念(待推进)\n - 即将过期悬念(需提及)\n - 悬念过期警告\n\n3. **人物档案v2**(`01-人物档案-v2.md`)\n - 主角:核心价值观、当前恐惧、声音锚点\n - 反派:真实动机、弱点\n - 关系状态:信任度、权力关系\n\n4. **上一章正文**\n - 最后500字(或最后一个场景)\n - 结尾钩子\n\n5. **当前章任务卡**(如已存在)\n - 本章目标\n - 场景拆分\n\n**提取时间**:\u003c 2秒\n\n**提取后自动输出**:\n```\n已读取上下文:\n- 当前:第X章(场景拆分完成,开始正文)\n- 上章结尾:主角发现...\n- 活跃悬念:3个(001凶手身份、002主角身世...)\n- 人物状态:主角在[位置],情绪[状态]\n- 本章目标:[目标]\n\n开始写作...\n```\n\n---\n\n## 上下文压缩格式\n\n### 标准上下文(AI内部使用)\n\nAI自动生成的续写摘要(存储在进度仪表盘):\n\n```markdown\n## AI续写摘要(自动生成)\n\n**定位信息**:\n- 章节:第___章\n- 当前字数:___\n- 最后更新:第___场景\n\n**前文关键事件**(最近3个):\n1. ___\n2. ___\n3. ___\n\n**悬念状态**(活跃+即将过期):\n- [001] ___:最近第X章提及\n- [002] ___:⚠️ 已5章未提及\n\n**人物状态**(出场角色):\n| 角色 | 位置 | 情绪 | 目标 | 关键信息 |\n|------|------|------|------|---------|\n| 主角 | | | | |\n| 反派 | | | | |\n| 配角 | | | | |\n\n**写作约束**:\n- 必须推进的悬念:___\n- 必须提及的悬念:___\n- 人物声音锚点:[角色]___\n- 情绪基调:___\n\n**继续要求**(用户自定义,如有):\n___\n```\n\n### 极简上下文(紧急续写)\n\n如果文件损坏或首次使用,从以下提取关键信息:\n\n```markdown\n**当前进度**:第X章\n**上章结尾**:主角___(50字以内)\n**关键悬念**:___(1-2个)\n**人物状态**:主角在___,要___\n**继续写**:___(用户要求,如有)\n```\n\n---\n\n## 人机交接检查清单\n\n### 人类交给AI时(人类修改后)\n\n```markdown\n## 人类修改记录\n\n**修改位置**:第X章 第Y段\n**修改原因**:___(如:对白不自然、节奏太慢)\n**关键变化**:___(如:人物态度从敌对改为犹豫)\n\n**继续要求**:\n- 继续写:___(从哪开始)\n- 注意:___(特别事项)\n\n**上一段结尾**:\n\"...\"(50字以内,方便AI接上下文)\n```\n\n### AI交给人类时(章节完成)\n\n```markdown\n## 章节交付\n\n**完成内容**:第X章 第Y-Z场景\n**字数**:___字\n**质量自检**:\n- [x] 红灯项通过\n- [x] 黄灯项:AI味轻度(已自修正)\n\n**关键提醒**:\n- 悬念[001]在本章推进(新线索:___)\n- 人物[XXX]状态变化:___\n- 下章必须处理:___\n\n**继续选项**:\n1. 继续下一章\n2. 修改本章\n3. 检查质量\n4. 导出epub\n```\n\n---\n\n## 信息丢失防护\n\n### 常见问题\n\n| 问题 | 原因 | 解决方案 |\n|------|------|---------|\n| AI忘记之前的伏笔 | 上下文太长被截断 | 使用悬念追踪表,AI自动读取 |\n| 人物性格突变 | 没有声音锚点 | 人物档案v2包含3句标志性对白 |\n| 关系状态错误 | 没有关系量化 | 进度仪表盘显示当前信任度 |\n| 悬念被遗漏 | 没有过期提醒 | 自动检测5章/10章未提及的悬念 |\n\n### 防丢失机制\n\n1. **关键信息冗余存储**\n - 重要设定同时存在于:大纲、人物档案、进度仪表盘\n - AI写作前从多个来源交叉验证\n\n2. **自动检测不一致**\n - 人物行为与核心价值观冲突时警告\n - 对话与声音锚点不符时提示\n - 关系变化没有事件支撑时询问\n\n3. **版本回滚**\n - 每章保存历史版本\n - 可查看\"人物在第X章时的状态\"\n\n---\n\n## 多轮对话简化\n\n### v1版(太繁琐)\n\n```\n人类:继续写\nAI:好的,我需要先读取以下文件:\n1. 00-大纲.md\n2. 01-人物档案.md\n3. 02-世界观与伏笔.md\n4. 上一章正文\n请确认...\n\n人类:确认\nAI:正在读取...\n(等待)\n\nAI:已读取。当前人物状态是___,悬念状态是___。\n我现在开始写第X章第Y场景。场景拆分如下:\n1. ...\n2. ...\n请确认后开始写作。\n\n人类:确认\nAI:开始写作...\n```\n\n### v2版(一句话搞定)\n\n```\n人类:继续写\nAI:已读取(第X章,3个活跃悬念,人物在[位置])。\n正在写第X章第Y场景...\n\n(直接开始写作)\n```\n\n**变化**:\n- 自动读取,无需确认\n- 自动场景拆分,无需提前展示\n- 关键信息简化为一句话摘要\n- 有问题时才询问\n\n---\n\n## 特殊情况处理\n\n### 场景1:AI写的和用户预期不符\n\n**用户**:\"不对,人物不应该这样反应\"\n\n**AI**:\n```\n了解。根据人物档案v2,[角色]的核心价值观是___,当前恐惧是___。\n您希望的反应是___?\n选项:\n1. 保持设定,重写此段\n2. 调整人物设定(是否更新档案?)\n3. 这是特殊情况,人物会打破常规(需铺垫)\n```\n\n### 场景2:用户想跳过某些步骤\n\n**用户**:\"直接写正文,不要场景拆分\"\n\n**AI**:\n```\n进入快速模式。跳过场景拆分,直接写作。\n关键信息:第X章,目标是___,结尾需要有___钩子。\n开始写作...\n```\n\n### 场景3:长时间中断后恢复\n\n**用户**:\"继续写\"(距离上次已过去N天)\n\n**AI**:\n```\n欢迎回来。已读取进度:\n- 上次写到:第X章第Y场景\n- 距今天数:N天\n- 关键提醒:悬念[002]已5章未提及,建议本章提及\n\n快速回顾:\n上章结尾:___\n当前任务:___\n\n开始写作...\n```\n\n---\n\n## 协议降级(紧急情况)\n\n如果文件系统损坏或信息缺失,使用极简协议:\n\n```markdown\n## 极简续写协议\n\n**必须提供**(用户口述):\n1. 当前写到第几章?\n2. 上一章结尾发生了什么?(50字)\n3. 主角现在在哪?要干什么?\n4. 有没有特别需要注意的?\n\n**AI动作**:\n基于以上4点,开始写作。\n```\n\n---\n\n## 检查清单\n\n每次交接时自动检查:\n\n### 从AI到人类\n- [ ] 悬念推进/提及状态已更新\n- [ ] 人物状态变化已记录\n- [ ] 下章任务卡已生成(或提醒)\n- [ ] 字数已统计\n- [ ] 质量检查已完成\n\n### 从人类到AI\n- [ ] 关键修改已说明\n- [ ] 继续要求已明确\n- [ ] 上下文引用已提供(最后50字)\n\n---\n\n*好的协作协议不是增加步骤,而是让正确的事自动发生。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":7459,"content_sha256":"82ad4d6f450f3b812a47bd63ac0feb71545a5af39a7ebb86bc10276ccf0aaa38"},{"filename":"references/08-人机协作.md","content":"> ⚠️ **此为 v1 版本,已过时。推荐使用 [08-人机协作-v2.md](08-人机协作-v2.md)(含快速续写模式、信息提取协议、交接检查清单)。本文件仅作参考保留。**\n\n# 人机协作\n\n> 本文件用于人机混合写作时的上下文传递和风格参考。\n\n## 协作分工\n\n### 人类负责\n\n- [ ] 核心设定(人物性格、核心冲突、底线)\n- [ ] 关键情节(重大转折、结局设计)\n- [ ] 对白风格定义(人物语言特点)\n- [ ] 修改(明确指出问题所在)\n\n### AI 负责\n\n- [ ] 具体场景描写\n- [ ] 环境渲染\n- [ ] 过渡衔接\n- [ ] 大纲扩写\n\n## 上下文传递\n\n当需要 AI 继续写作时,填写以下内容:\n\n```markdown\n## 当前进度\n- 章节:第 X 章\n- 当前场景:\n- 主要人物:\n- 上文关键事件:\n\n## 写作要求\n- 继续写:\n- 风格参考:\n- 注意:\n```\n\n## 风格参考\n\n### 角色对白风格\n\n| 角色 | 对白特点 | 示例 |\n|------|----------|------|\n| 主角 | ... | \"...\" |\n| 配角 A | ... | \"...\" |\n\n### 场景描写风格\n\n| 场景类型 | 描写要点 | 示例 |\n|----------|----------|------|\n| 室内 | ... | \"...\" |\n| 户外 | ... | \"...\" |\n| 战斗 | ... | \"...\" |\n\n## 交接记录\n\n当人类修改完一段后,记录:\n\n```markdown\n## 人类修改记录\n- 修改位置:第 X 章 第 Y 段\n- 修改原因:\n- 继续要求:\n\n## 上一段结尾\n\"...\"\n```\n\n### 修改历史\n\n| 日期 | 位置 | 修改内容 | 后续要求 |\n|------|------|----------|----------|\n| ... | ... | ... | ... |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1544,"content_sha256":"c6ff295caeab4449a42ad9c581f87e54419167cbcdbb42e5cd3e4f2ab59c159a"},{"filename":"references/09-小说体检报告.md","content":"# 小说体检报告\n\n> 每写完10章或关键节点时做一次体检。\n\n## 基本信息\n- 报告日期:\n- 检查范围:第X章 - 第Y章\n- 章节数量:N章\n- 累计字数:\n\n## 综合评分\n\n**综合评分:X.X/5 ★★★☆☆**\n\n| 维度 | 权重 | 评分 | 状态 |\n|------|------|------|------|\n| 节奏健康 | 25% | X.X | ✅/⚠️ |\n| 伏笔跟踪 | 20% | X.X | ✅/⚠️ |\n| 人物一致 | 20% | X.X | ✅/⚠️ |\n| 多线均衡 | 15% | X.X | ✅/⚠️ |\n| 字数健康 | 10% | X.X | ✅/⚠️ |\n| 钩子强度 | 10% | X.X | ✅/⚠️ |\n\n**评分标准:**\n- 5分:优秀\n- 4分:良好\n- 3分:及格\n- 2分:预警\n- 1分:危险\n\n## 各维度详情\n\n### 节奏健康 (X.X/5)\n\n**数据:**\n- 场景类型分布:...\n- 章节紧张度平均:...\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 伏笔跟踪 (X.X/5)\n\n**数据:**\n- 伏笔总数:X\n- 已回收:X (XX%)\n- 超时未回收:X\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 人物一致 (X.X/5)\n\n**数据:**\n- 主要角色:X人\n- 性格矛盾:X处\n- 动机不一致:X处\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 多线均衡 (X.X/5)\n\n**数据:**\n- 叙事线:X条\n- 各线戏份占比:...\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 字数健康 (X.X/5)\n\n**数据:**\n- 平均字数:X字/章\n- 标准差:X\n- 最高:X字\n- 最低:X字\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n### 钩子强度 (X.X/5)\n\n**数据:**\n- 有强钩子的章节:X/X\n- 平均钩子强度:X.X/5\n\n**问题:**\n- ...\n\n**建议:**\n- ...\n\n## 主要问题汇总\n\n1. ...\n2. ...\n3. ...\n\n## 后续建议\n\n1. ...\n2. ...\n3. ...\n\n## 下次体检\n\n- 预计章节:第X章\n- 预计时间:...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1699,"content_sha256":"75913544c887636474515172097578f11a2f3c3652e362a5e7d92ad0c1d408ae"},{"filename":"references/09-悬念生命周期管理.md","content":"# 悬念生命周期管理指南\n\n> 悬念不是静态记录,而是需要主动管理的\"活资产\"。\n\n---\n\n## 悬念状态定义\n\n| 状态 | 含义 | 图标 |\n|------|------|------|\n| **待激活** | 已规划但未在正文中提出 | ⚪ |\n| **活跃** | 已提出,读者正在关注 | 🟢 |\n| **即将过期** | 超过5章未提及 | 🟡 |\n| **已过期** | 超过10章未提及,必须立即处理 | 🔴 |\n| **已回收** | 悬念已解答/兑现 | ✅ |\n| **已废弃** | 不再使用,但仍保留记录 | 🚫 |\n\n---\n\n## 悬念生命周期\n\n```\n待激活 → 活跃 → [即将过期 → 已过期] → 回收\n ↓\n 持续提及保持活跃\n```\n\n### 关键规则\n\n1. **活跃悬念上限**:**6个**\n - 超过6个活跃悬念时,暂停新增,必须回收或废弃旧悬念\n - 原因:读者注意力有限,太多悬念会分散焦点\n\n2. **提及频率**:\n - 每章至少提及1个已有悬念(保持活跃)\n - 每3-5章必须推进至少1个悬念(升级/回收)\n\n3. **过期预警**:\n - **5章未提及** → 黄色警告(应在下章提及)\n - **10章未提及** → 红色警告(必须在本章提及或回收)\n\n---\n\n## 悬念追踪表模板\n\n在 `novels/\u003c书名>/03-悬念追踪表.md` 中维护:\n\n```markdown\n| ID | 悬念内容 | 类型 | 强度 | 提出章 | 上次提及 | 提及次数 | 预计回收 | 依赖悬念 | 状态 |\n|----|---------|------|------|--------|---------|---------|---------|---------|------|\n| 001 | 凶手是谁 | 主线 | 5 | 第1章 | 第8章 | 3 | 第20章 | - | 🟢 |\n| 002 | 主角身世 | 人物 | 4 | 第3章 | 第3章 | 1 | 第15章 | 001 | 🔴 |\n| 003 | 宝藏位置 | 支线 | 3 | 第5章 | 第10章 | 2 | 第25章 | - | 🟡 |\n```\n\n### 字段说明\n\n- **ID**:悬念唯一编号(001, 002...)\n- **悬念内容**:一句话描述(让读者好奇的问题)\n- **类型**:主线 / 人物 / 支线 / 关系 / 世界观\n- **强度**:1-5级(见hook-techniques.md)\n- **提出章**:首次出现的章节\n- **上次提及**:最近一次提及的章节\n- **提及次数**:总共被提及的次数(回收前至少提及3次为佳)\n- **预计回收**:计划在哪一章回收\n- **依赖悬念**:是否依赖其他悬念先回收(如\"凶手是谁\"要先于\"动机是什么\")\n- **状态**:使用上方定义的图标\n\n---\n\n## 悬念推进方式\n\n每章规划时,决定本章对每个活跃悬念的操作:\n\n| 操作 | 含义 | 效果 |\n|------|------|------|\n| **提及** | 简单提到悬念存在 | 保持活跃,防止过期 |\n| **推进** | 给出新线索/升级 | 读者期待值上升 |\n| **偏转** | 悬念转向新方向 | 旧悬念被新悬念替代 |\n| **回收** | 给出答案 | 悬念状态变为✅ |\n\n### 每章必须规划\n\n```markdown\n## 本章悬念操作\n\n| 悬念ID | 操作 | 具体做法 |\n|--------|------|---------|\n| 001 | 推进 | 发现新线索:凶手有内应 |\n| 002 | 提及 | 主角短暂想起自己的身世之谜 |\n| 003 | - | 本章不涉及 |\n```\n\n---\n\n## 自动预警规则\n\n在进度仪表盘中自动显示:\n\n### 🔔 预警规则\n\n1. **黄色预警**\n - 条件:某悬念上次提及至今 ≥ 5章\n - 提示:\"悬念[002]即将过期,建议在本章提及\"\n\n2. **红色预警**\n - 条件:某悬念上次提及至今 ≥ 10章\n - 提示:\"悬念[002]已过期,必须在本章提及或明确废弃\"\n\n3. **活跃上限预警**\n - 条件:活跃悬念数 ≥ 6\n - 提示:\"当前活跃悬念6个,建议先回收[XXX]再新增\"\n\n4. **回收质量预警**\n - 条件:某悬念提及次数 \u003c 3次就被回收\n - 提示:\"悬念[003]回收前仅提及2次,读者可能忘记\"\n\n---\n\n## 悬念强度与章节位置匹配\n\n不同位置的章节,应该推进什么强度的悬念:\n\n| 章节位置 | 推荐悬念强度 | 说明 |\n|---------|-------------|------|\n| 前10%(开篇) | 3-4级 | 建立核心悬念,让读者入坑 |\n| 10-30%(展开) | 2-3级 | 推进主线,铺垫支线 |\n| 30-50%(中段) | 3-4级 | 悬念升级,加大代价 |\n| 50%(中点) | 4-5级 | 重大揭示,反转或认知翻转 |\n| 50-70%(升级) | 4级 | 新悬念产生,旧悬念深化 |\n| 70-90%(高潮前) | 4-5级 | 加速回收,多条线交汇 |\n| 后10%(结局) | 5级 | 终极悬念回收 |\n\n**检查**:每章规划时,确认本章推进的悬念强度是否与章节位置匹配。\n\n---\n\n## 多线悬念协调\n\n同时维持多条悬念线时,使用\"悬念轮替\"策略:\n\n### 示例:悬疑小说三线并行\n\n| 悬念线 | 类型 | 节奏 | 推进频率 |\n|--------|------|------|---------|\n| 主线:凶手身份 | 主线 | 螺旋上升 | 每章提及/推进 |\n| 副线:主角身世 | 人物 | 波浪起伏 | 每3-5章推进一次 |\n| 支线:组织阴谋 | 世界观 | 渐进揭示 | 每5-10章推进一次 |\n\n**原则**:不要让所有悬念同时推进,造成信息过载。\n\n---\n\n## 悬念回收质量检查\n\n回收悬念前,检查以下项目:\n\n- [ ] **提及次数 ≥ 3次**(读者有印象)\n- [ ] **有线索铺垫**(不是机械降神)\n- [ ] **回收有代价**(主角付出了什么)\n- [ ] **回收带来新悬念**(或升级原有悬念)\n- [ ] **符合\"意料之外,情理之中\"**\n\n**回收时机**:\n- 不要刚提出就回收(积累不足)\n- 不要一次回收太多(信息爆炸)\n- 不要在其他重大事件旁回收(分散注意力)\n\n---\n\n## 常见错误\n\n### ❌ 错误1:悬念提了就忘\n- **表现**:第3章提出\"凶手有内应\",第15章才提到,读者早已忘记\n- **解决**:使用追踪表,设置5章预警\n\n### ❌ 错误2:悬念堆砌\n- **表现**:第10章同时提出5个新悬念,读者困惑\n- **解决**:控制活跃悬念上限(6个),新增前必须推进或回收旧悬念\n\n### ❌ 错误3:过早回收\n- **表现**:悬念刚提出2章就解答,缺乏张力\n- **解决**:确保提及次数≥3,铺垫足够\n\n### ❌ 错误4:机械回收\n- **表现**:只给答案,没有情绪铺垫\n- **解决**:回收时配合角色反应、代价付出、新悬念产生\n\n---\n\n## 与进度仪表盘的集成\n\n进度仪表盘的「关键提醒」区块应自动从悬念追踪表提取数据:\n\n```markdown\n## ⚠️ 关键提醒\n\n### 🔔 悬念状态\n| 悬念ID | 内容 | 状态 |\n|--------|------|------|\n| 001 | 凶手是谁 | 🟢 活跃(最近第8章) |\n| 002 | 主角身世 | 🔴 已过期(已10章未提及,必须处理) |\n| 003 | 宝藏位置 | 🟡 即将过期(已5章未提及) |\n\n**当前活跃悬念:** 3/6 ✅\n**本章建议:** 提及悬念002或003,防止过期\n```\n\n---\n\n## 快速检查清单\n\n每章交付前:\n\n- [ ] 本章提及了至少1个已有悬念\n- [ ] 没有新增超过6个活跃悬念\n- [ ] 没有过期悬念未处理\n- [ ] 本章推进的悬念强度与章节位置匹配\n\n---\n\n*悬念管理的最高境界:读者永远记得之前的悬念,同时被新的悬念吸引。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6999,"content_sha256":"89c8303df6ad697b8930e26acedf9ce1be24ef0b2547e8fd679f525a5971dc45"},{"filename":"references/10-悬念-章节匹配矩阵.md","content":"# 悬念-章节匹配矩阵\n\n> 每章规划时,必须明确本章要推进的悬念,并检查强度匹配。\n\n---\n\n## 匹配矩阵模板\n\n在 `novels/\u003c书名>/00-大纲.md` 的「章节规划」表格中新增字段:\n\n```markdown\n| 章节 | 标题 | 章节功能 | 主要悬念 | 悬念操作 | 强度要求 | 实际强度 | 匹配度 |\n|------|------|---------|---------|---------|---------|---------|--------|\n| 第1章 | 血色黎明 | 建立冲突 | 001 | 提出 | 3 | 4 | ⚠️ 过高 |\n| 第2章 | 暗流涌动 | 线索推进 | 001 | 推进 | 2 | 2 | ✅ |\n| 第3章 | 身份之谜 | 揭示信息 | 002 | 提出 | 2 | 2 | ✅ |\n| 第4章 | 危局初现 | 危机升级 | 001+002 | 推进+提及 | 3 | 3 | ✅ |\n```\n\n### 字段说明\n\n- **章节功能**:本章节在整体叙事中的作用\n- **主要悬念**:本章重点推进的悬念ID(1-2个为宜)\n- **悬念操作**:提出/推进/偏转/回收/提及\n- **强度要求**:根据章节位置推荐的悬念强度(见下方表格)\n- **实际强度**:本章实际设置的悬念强度\n- **匹配度**:实际 vs 要求的对比\n - ✅ 匹配(±0.5级内)\n - ⚠️ 过高(实际 > 要求)\n - ⚠️ 过低(实际 \u003c 要求)\n\n---\n\n## 章节位置-悬念强度对照表\n\n| 章节位置 | 推荐强度 | 说明 | 示例钩子类型 |\n|---------|---------|------|-------------|\n| **第1章** | 3-4级 | 建立核心悬念,让读者入坑 | 突然揭示、震撼对话、危机时刻 |\n| **第2-3章** | 2-3级 | 推进主线,铺垫支线 | 新线索、神秘物品、未完成的动作 |\n| **前10%** | 2-3级 | 建立追更习惯 | 悬念转移、言外之意 |\n| **10-30%** | 2-3级 | 持续积累 | 信息差、关系变化 |\n| **30-50%** | 3-4级 | 悬念升级,加大代价 | 两难选择、承诺威胁 |\n| **50%中点** | 4-5级 | 重大揭示,认知翻转 | 身份反转、突然揭示+离奇消失 |\n| **50-70%** | 4级 | 新悬念产生,旧悬念加速 | 时间限制、未完成的动作 |\n| **70-90%** | 4-5级 | 加速回收,多条线交汇 | 多重揭示、终极选择 |\n| **最后10%** | 5级 | 终极悬念回收 | 生存悬念、终极反转 |\n\n### 强度等级定义\n\n来自 `hook-techniques.md`:\n\n| 等级 | 类型 | 读者反应 | 适用场景 |\n|-----|------|---------|---------|\n| 1 | 好奇悬念 | \"这很有趣\" | 喘息章 |\n| 2 | 关切悬念 | \"接下来会发生什么\" | 日常推进 |\n| 3 | 迫切悬念 | \"他必须马上行动\" | 小高潮 |\n| 4 | 生存悬念 | \"他会活下去吗\" | 大高潮 |\n| 5 | 终极悬念 | \"一切到底是什么意思\" | 结局 |\n\n---\n\n## 悬念操作详解\n\n### 提出\n- **时机**:新悬念首次出现\n- **效果**:增加活跃悬念数\n- **注意**:检查是否已达6个上限\n\n### 推进\n- **时机**:已有悬念给出新线索/升级\n- **效果**:读者期待值上升\n- **注意**:每次推进应有具体新信息\n\n### 偏转\n- **时机**:旧悬念被新悬念替代\n- **效果**:旧悬念废弃,新悬念激活\n- **注意**:偏转要有合理性,不能突兀\n\n### 回收\n- **时机**:悬念解答/兑现\n- **效果**:减少活跃悬念数\n- **注意**:回收前至少提及3次\n\n### 提及\n- **时机**:简单提到悬念存在\n- **效果**:保持活跃,防止过期\n- **注意**:不是推进,只是\"还记得吗\"\n\n---\n\n## 多悬念协同规划\n\n### 单章悬念数量\n\n| 章节类型 | 建议悬念数 | 说明 |\n|---------|-----------|------|\n| 开篇章 | 1-2个 | 聚焦核心悬念,不分散 |\n| 过渡章 | 1个主推+1个提及 | 保持主线推进,支线保温 |\n| 高潮章 | 2-3个交汇 | 多条线在此碰撞 |\n| 喘息章 | 0-1个 | 以收获/关系为主,悬念轻量化 |\n\n### 悬念轮替策略\n\n**示例:20章悬疑小说**\n\n| 章节 | 主线悬念(001) | 人物悬念(002) | 支线悬念(003) |\n|------|-------------|--------------|--------------|\n| 1-5 | 🟢 持续推进 | ⚪ 待激活 | ⚪ 待激活 |\n| 6-10 | 🟢 持续提及 | 🟢 提出+推进 | ⚪ 待激活 |\n| 11-15 | 🟢 升级 | 🟢 推进 | 🟢 提出 |\n| 16-18 | 🟢 加速 | 🟡 提及 | 🟢 推进 |\n| 19-20 | ✅ 回收 | ✅ 回收 | 🟢 推进→待续 |\n\n**图例**:🟢 活跃推进 🟡 保温提及 ⚪ 待激活 ✅ 已回收\n\n---\n\n## 强度不匹配处理\n\n### ⚠️ 过高(实际强度 > 推荐强度)\n\n**场景**:第5章(应该2-3级)用了5级悬念(中点级)\n\n**后果**:\n- 读者期待被过早拉高\n- 后续章节难以满足期待\n- 可能产生\"高开低走\"感\n\n**处理**:\n1. 降低强度,把终极悬念留到中点后\n2. 如果必须保留,增加代价铺垫\n3. 确保后续章节能快速跟上(连续高潮)\n\n### ⚠️ 过低(实际强度 \u003c 推荐强度)\n\n**场景**:第50章(应该4-5级)只用了2级悬念\n\n**后果**:\n- 读者感到平淡,追更动力下降\n- 中点转折缺乏冲击力\n\n**处理**:\n1. 升级悬念(\"凶手是主角父亲\"→\"凶手是主角自己\")\n2. 增加多重揭示(一个答案带出三个新问题)\n3. 加大代价(主角必须牺牲重要东西)\n\n---\n\n## 与钩子类型的映射\n\n| 章节位置 | 推荐钩子类型 | 悬念强度 | 效果 |\n|---------|-------------|---------|------|\n| 开篇 | 突然揭示、震撼对话 | 3-4 | 立即入坑 |\n| 前3章 | 神秘物品、未完成的动作 | 3 | 建立追更习惯 |\n| 小高潮 | 身份反转、两难选择 | 4 | 情绪高点 |\n| 中点 | 突然揭示+离奇消失 | 5 | 最大震撼 |\n| 喘息章 | 言外之意、承诺威胁 | 2-3 | 保温 |\n| 高潮前 | 时间限制、紧急危机 | 4-5 | 迫近感 |\n| 结局 | 生存悬念、终极反转 | 5 | 完美收官 |\n\n---\n\n## 快速规划流程\n\n每章写作前,完成以下3步:\n\n### Step 1: 悬念盘点\n查看进度仪表盘的悬念状态,列出:\n- 活跃悬念(待推进)\n- 即将过期悬念(需提及)\n- 计划新增悬念(检查是否达上限)\n\n### Step 2: 悬念分配\n决定本章每条悬念的操作:\n```\n悬念001:推进(给出新线索)\n悬念002:提及(防止过期)\n悬念003:不处理\n```\n\n### Step 3: 强度检查\n对照\"章节位置-悬念强度对照表\":\n```\n本章位置:第15章(50%附近,应为4级)\n实际强度:4级(突然揭示+代价升级)\n匹配度:✅\n```\n\n---\n\n## 常见问题\n\n### Q: 一章可以推进多个悬念吗?\nA: 可以,但建议不超过2个。高潮章可以交汇3个,但要避免信息过载。\n\n### Q: 强度必须严格匹配吗?\nA: 允许±0.5级浮动。关键是整体趋势:前低后高,中点最高。\n\n### Q: 喘息章完全不能有悬念吗?\nA: 可以有低强度悬念(言外之意、承诺威胁),但不能有大揭示。\n\n### Q: 悬念可以在任何位置回收吗?\nA: 小悬念可以早收,核心悬念建议在中点后。结局前回收所有主线悬念。\n\n---\n\n## 检查清单\n\n每章交付前:\n\n- [ ] 本章推进的悬念已在追踪表中记录\n- [ ] 悬念操作明确(提出/推进/偏转/回收/提及)\n- [ ] 悬念强度与章节位置匹配(±0.5级内)\n- [ ] 没有同时推进超过3个悬念\n- [ ] 没有让悬念过期(10章未提及)\n\n---\n\n*悬念-章节匹配是\"导航系统\",不是\"束缚\"。灵活使用,但要知道自己在做什么。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":7263,"content_sha256":"6e9b685b21a8f2e30b301adb02734d6cf93370b31699b4d2ce78c53afe19334b"},{"filename":"references/11-叙事节奏框架.md","content":"# 叙事节奏框架(三层体系)\n\n> 从\"只能事后检查\"到\"事前可规划\"的节奏设计系统。\n\n---\n\n## 三层架构概览\n\n```\n┌─────────────────────────────────────┐\n│ 宏观层(全本视角) │\n│ • 四幕结构 + 10-15个关键节点 │\n│ • 适用于:大纲规划、整体结构把控 │\n└──────────────┬──────────────────────┘\n │\n┌──────────────▼──────────────────────┐\n│ 中观层(章节组视角) │\n│ • 每3章为一个\"节奏单元\" │\n│ • 适用于:连载规划、追更节奏控制 │\n└──────────────┬──────────────────────┘\n │\n┌──────────────▼──────────────────────┐\n│ 微观层(单章视角) │\n│ • 每章内部3次情绪起伏 │\n│ • 适用于:每日写作的具体执行 │\n└─────────────────────────────────────┘\n```\n\n---\n\n## 第一层:宏观节奏(全本规划)\n\n### 四幕结构\n\n```\n第一幕(设局) 第二幕(对抗) 第三幕(高潮) 第四幕(结局)\n[====25%====] [=====50%=====] [====20%====] [====5%====]\n │ │ │ │\n 建立冲突 升级对抗 最终对决 收尾收束\n 引入世界 代价增大 认知翻转 情感落点\n```\n\n### 15个关键节点\n\n| 节点 | 位置 | 功能 | 紧张度 | 悬念强度 |\n|------|------|------|--------|---------|\n| 1.日常世界 | 0% | 展示主角常态 | ★☆☆☆☆ | - |\n| 2.激励事件 | 5% | 打破平衡 | ★★☆☆☆ | 2级 |\n| 3.第一情节点 | 10% | 主角接受挑战 | ★★★☆☆ | 3级 |\n| 4.盟友引入 | 15% | 建立团队/关系 | ★★☆☆☆ | 2级 |\n| 5.对手亮相 | 20% | 展示对抗力量 | ★★★☆☆ | 3级 |\n| 6.趣味和游戏 | 30% | 探索新世界 | ★★☆☆☆ | 2级 |\n| 7.中点转折 | 50% | 虚假胜利/失败 | ★★★★★ | 5级 |\n| 8.坏人逼近 | 60% | 压力增大 | ★★★★☆ | 4级 |\n| 9.一无所有 | 75% | 灵魂黑夜 | ★★★★☆ | 4级 |\n| 10.第三情节点 | 80% | 最终准备 | ★★★★★ | 4级 |\n| 11.最终对决 | 90% | 高潮战斗 | ★★★★★ | 5级 |\n| 12.新世界 | 95% | 结局展示 | ★★★☆☆ | 3级 |\n| 13.终场画面 | 100% | 首尾呼应 | ★★☆☆☆ | 2级 |\n\n### 宏观节奏检查\n\n每完成10章,对照以下检查:\n- [ ] 当前进度与节点规划是否匹配\n- [ ] 紧张度曲线是否呈上升趋势(允许波动)\n- [ ] 是否有连续5章紧张度低于2星(过平警告)\n\n---\n\n## 第二层:中观节奏(章节组规划)\n\n### 黄金三章模式\n\n每3章组成一个\"节奏单元\",形成小闭环:\n\n```\n第N章 第N+1章 第N+2章\n[铺垫] → [升级] → [小高潮+钩子]\n │ │ │\n建立情境 矛盾激化 情绪高点+新问题\n```\n\n### 节奏单元类型\n\n#### 类型A:推进型\n```\n第1章:主角发现问题 → 第2章:尝试解决失败 → 第3章:找到新线索(小胜利)\n紧张度:★★☆ → ★★★ → ★★★☆\n```\n\n#### 类型B:转折型\n```\n第1章:平静日常 → 第2章:突发事件 → 第3章:被迫改变(小失败)\n紧张度:★☆☆ → ★★★ → ★★★☆\n```\n\n#### 类型C:情感型\n```\n第1章:误会/心动 → 第2章:互动加深 → 第3章:阻碍出现(关系变化)\n紧张度:★★☆ → ★★★ → ★★★☆\n```\n\n### 中观节奏检查\n\n每3章(一个单元)完成后:\n- [ ] 第3章结尾是否有强钩子\n- [ ] 3章内是否有情绪起伏(低→高)\n- [ ] 单元结束后是否推进了主线\n\n---\n\n## 第三层:微观节奏(单章设计)\n\n### 单章情绪起伏\n\n每章内部至少3次情绪变化:\n\n```\n20%位置 50%位置 80%位置\n进入冲突 → 矛盾激化 → 钩子落下\n 起点 中点 终点\n(紧张↑) (紧张↑↑) (紧张↑↑↑)\n```\n\n### 章节内部结构\n\n| 位置 | 功能 | 内容 | 字数占比 |\n|------|------|------|---------|\n| 0-20% | 进入点 | 尽快进入冲突/异常 | 20% |\n| 20-50% | 施压点 | 阻碍升级,信息差 | 30% |\n| 50-80% | 转折点 | 线索反转/关系变化 | 30% |\n| 80-100% | 钩子点 | 悬念落下 | 20% |\n\n### 微观节奏检查\n\n每章交付前:\n- [ ] 20%位置是否已进入冲突\n- [ ] 50%位置是否有明确转折\n- [ ] 80%位置是否有强钩子\n- [ ] 字数是否达标(≥3000字)\n\n---\n\n## 题材特定节奏模板\n\n### 模板A:悬疑/推理\n\n**宏观节奏**:波浪型(紧张度波浪起伏)\n\n**中观单元**(每3章):\n```\n疑问 → 调查 → 线索/反转\n[发现尸体] → [走访调查] → [新嫌疑人出现]\n紧张度:★★★ → ★★☆ → ★★★☆\n```\n\n**微观节奏**(单章):\n```\n20%:异常发现(尸体/密室)\n50%:线索冲突(不同证词矛盾)\n80%:钩子落下(新嫌疑人/新证据)\n```\n\n**节奏特点**:\n- 第3章结尾必须有案件进展\n- 每5-7章一个小高潮(新嫌疑人/排除嫌疑人)\n- 中点(50%)必须有大反转(嫌疑人是凶手/凶手另有其人)\n\n---\n\n### 模板B:玄幻升级流\n\n**宏观节奏**:递进型(紧张度持续上升)\n\n**中观单元**(每3章):\n```\n挑战 → 修炼 → 突破\n[强敌出现] → [闭关修炼] → [突破境界]\n紧张度:★★☆ → ★★☆ → ★★★☆\n```\n\n**微观节奏**(单章):\n```\n20%:遭遇强敌/困境\n50%:突破/获得新能力\n80%:震惊众人/新挑战出现\n```\n\n**节奏特点**:\n- 每3章一次小升级\n- 每10章一次大升级(境界突破)\n- 升级后必须有\"震惊众人\"的爽点\n- 中点(50%)获得关键能力/功法\n\n---\n\n### 模板C:言情/情感\n\n**宏观节奏**:波浪型(情感起伏)\n\n**中观单元**(每3章):\n```\n误会/心动 → 甜蜜 → 阻碍/危机\n[初次心动] → [甜蜜互动] → [误会/情敌出现]\n紧张度:★★☆ → ★★★ → ★★★☆\n```\n\n**微观节奏**(单章):\n```\n20%:情感触发点(对视/对话)\n50%:关系推进(牵手/告白)\n80%:阻碍出现(误会/分离)\n```\n\n**节奏特点**:\n- 甜虐交替,不能一直甜或一直虐\n- 每3章一次关系变化(升温→阻碍→和解)\n- 中点(50%)关系确定/重大误会\n- 后30%解决外部阻碍(家庭/身份/误会)\n\n---\n\n### 模板D:种田/基建\n\n**宏观节奏**:渐进型(目标逐步达成)\n\n**中观单元**(每3章):\n```\n目标 → 阻碍 → 解决+收获\n[确定目标] → [资源不足] → [解决+新目标]\n紧张度:★★☆ → ★★☆ → ★★★☆\n```\n\n**微观节奏**(单章):\n```\n20%:遇到具体问题\n50%:解决过程(技术/资源/人手)\n80%:解决+新目标/新问题\n```\n\n**节奏特点**:\n- 成就感是核心驱动力\n- 每章都有小收获(种菜/建房子/招人手)\n- 每3章一次大收获(收成/建成/扩张)\n- 收获后必须出现新挑战(天灾/盗匪/市场波动)\n\n---\n\n### 模板E:都市现实\n\n**宏观节奏**:高原型(紧张度保持中高水平)\n\n**中观单元**(每3章):\n```\n压力 → 应对 → 暂时解决+新压力\n[职场危机] → [努力应对] → [暂时解决+更大危机]\n紧张度:★★★ → ★★★ → ★★★☆\n```\n\n**微观节奏**(单章):\n```\n20%:现实压力(工作/家庭/健康)\n50%:应对过程(选择/牺牲)\n80%:结果+新压力\n```\n\n**节奏特点**:\n- 压力来源要具体(上司/房贷/父母)\n- 主角应对要真实(不是开挂,是挣扎+成长)\n- 中点(50%)价值观被挑战\n- 结局不一定是圆满,但要有成长\n\n---\n\n## 节奏健康度量化\n\n### 五维评分\n\n每章自评(1-5星):\n\n| 维度 | 1星 | 3星 | 5星 |\n|------|-----|-----|-----|\n| **紧张度** | 过于平淡 | 有起伏 | 张力十足 |\n| **情绪类型** | 单一无聊 | 有变化 | 丰富多样 |\n| **钩子强度** | 无钩子 | 一般 | 迫切想看下章 |\n| **信息量** | 无新信息 | 少量 | 重要揭示 |\n| **期待值** | 不想再看 | 可有可无 | 迫不及待 |\n\n### 健康标准\n\n- **红灯**:连续3章总分\u003c10分(需要大幅修改)\n- **黄灯**:单章某维度1-2星(需要优化)\n- **绿灯**:每章总分≥12分(良好)\n\n### 节奏曲线可视化\n\n在进度仪表盘中自动绘制:\n\n```\n紧张度曲线(最近10章)\n\n★★★★★ ╱╲ ╱╲\n★★★★☆ ╱ ╲ ╱ ╲___\n★★★☆☆ ╱ ╲__╱ ╲__\n★★☆☆☆ ╱ ╲\n★☆☆☆☆╱ ╲_\n 第1章 第3章 第5章 第7章 第9章\n\n预警:第6-7章紧张度过低,建议加强\n```\n\n---\n\n## 喘息机制(情绪低谷设计)\n\n### 什么是喘息章\n\n不是\"无聊章\",而是**信息整合+人物关系深化**的章节。\n\n### 喘息章结构\n\n```\n[20%] 上一事件的余波(简短回顾,≤500字)\n[60%] 收获盘点 / 人物关系推进 / 世界观揭示\n[20%] 新威胁浮现 / 新目标确立(钩子不能少)\n```\n\n### 何时需要喘息章\n\n- 连续3章高强度后\n- 大高潮后1-2章内\n- 世界观/设定需要解释时\n\n### 喘息章钩子设计\n\n虽然紧张度低,但钩子不能弱:\n- 言外之意(\"和你姐姐一样优秀\",但她没有姐姐)\n- 承诺威胁(\"今晚我会让所有人知道你做了什么\")\n- 神秘物品(发现一件意义不明的东西)\n\n---\n\n## 快速应用指南\n\n### 大纲阶段\n\n1. 选择宏观节奏类型(递进/波浪/高原/反转)\n2. 规划15个关键节点\n3. 确定中点转折的具体内容\n\n### 连载阶段(每3章)\n\n1. 确定本单元的类型(推进/转折/情感)\n2. 确保第3章有强钩子\n3. 检查紧张度是否形成\"低→高\"曲线\n\n### 写作阶段(每章)\n\n1. 20%位置:进入冲突\n2. 50%位置:明确转折\n3. 80%位置:落下钩子\n4. 交付前:五维自评\n\n---\n\n## 检查清单\n\n### 宏观检查(每10章)\n- [ ] 当前进度与节点规划匹配\n- [ ] 紧张度总体上升(允许波动)\n- [ ] 没有连续5章紧张度低于2星\n\n### 中观检查(每3章)\n- [ ] 第3章结尾有强钩子\n- [ ] 3章内有情绪起伏\n- [ ] 单元结束后推进了主线\n\n### 微观检查(每章)\n- [ ] 20%位置已进入冲突\n- [ ] 50%位置有明确转折\n- [ ] 80%位置有强钩子\n- [ ] 字数达标\n\n---\n\n*节奏是骨架,内容是血肉。好节奏让好内容发光。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":11063,"content_sha256":"8922c370d6b1fcf989a93d57354f3615892581e5ee7cb920509d326f2df4c75d"},{"filename":"references/12-喘息机制.md","content":"# 喘息机制设计指南\n\n> 喘息章不是\"无聊章\",而是\"信息整合+关系深化\"的必要章节。\n\n---\n\n## 什么是喘息章\n\n**定义**:在大高潮或连续高强度章节之后,让读者(和角色)喘口气的章节。\n\n**关键认知**:\n- ❌ 错误理解:跳过不写、快速带过\n- ✅ 正确理解:精心设计,维持兴趣的同时让读者消化\n\n**为什么需要喘息章**:\n1. 连续高潮会让读者疲劳(追更疲劳)\n2. 信息需要时间沉淀(悬念需要回味)\n3. 人物需要消化变化(情绪需要处理)\n4. 关系需要时间深化(感情需要升温)\n\n---\n\n## 喘息章的黄金结构\n\n```\n[0-20%] 上一事件的余波\n ↓ 简短回顾,快速收尾\n[20-80%] 信息整合 / 关系深化 / 收获盘点\n ↓ 核心内容,建立新的期待\n[80-100%] 新威胁浮现 / 新目标确立\n ↓ 钩子落下,维持追更动力\n```\n\n### 各部分详解\n\n#### 第一部分:余波(≤20%,500字以内)\n\n**功能**:\n- 快速收束上一事件\n- 展示即时后果\n- 过渡到平静\n\n**示例**:\n```\n战斗结束后的喘息章开头:\n\n\"救护车走了。\n\n现场只剩下他和满地碎玻璃。他蹲下来,捡起一片——\n上面还有血。\n\n他把手插进口袋,发现烟盒已经空了。\"\n```\n\n**要点**:\n- 简短,不展开\n- 用细节暗示而非叙述\n- 快速过渡到第二部分\n\n---\n\n#### 第二部分:核心内容(60%,1500-2000字)\n\n喘息章的核心,有三种类型:\n\n**类型A:信息整合(推理/悬疑类)**\n\n内容:\n- 盘点已有线索\n- 整理已知信息\n- 发现新的关联\n- 调整推理方向\n\n示例:\n```\n他铺开所有线索:\n- 死者的戒指(戴在右手,异常)\n- 目击证词(矛盾点)\n- 时间线(空白2小时)\n\n盯着这三点,他突然发现了关联——\n那2小时,死者不是一个人。\n\n(新线索引出下一章行动)\n```\n\n**类型B:关系深化(言情/情感类)**\n\n内容:\n- 两人独处时光\n- 情感升温时刻\n- 秘密分享/脆弱时刻\n- 误解解除/加深\n\n示例:\n```\n他们坐在屋顶上,没说话。\n\n远处是城市的灯火,近处只有彼此的呼吸声。\n\n\"那天,\"她突然开口,\"谢谢你。\"\n\"哪天?\"\n\"就是...算了。\"\n\n他没追问。但有些话不需要说完。\n\n(关系升温,为下章阻碍铺垫)\n```\n\n**类型C:收获盘点(升级/种田类)**\n\n内容:\n- 展示升级成果\n- 盘点资源收获\n- 规划下一步\n- 享受成就感\n\n示例:\n```\n他看着那块田:\n- 灵稻:3亩,预计收成500斤\n- 药草:1亩,可炼制聚气丹\n- 新挖的池塘:鱼苗刚放下\n\n三个月前,这里还是荒地。\n\n现在,他要考虑的是——怎么防止别人来抢。\n\n(收获+新挑战)\n```\n\n**类型D:人物消化(现实/成长类)**\n\n内容:\n- 主角处理情绪\n- 面对失败/成功\n- 价值观被挑战\n- 做出重要决定\n\n示例:\n```\n他坐在黑暗里,回想今天发生的一切。\n\n那个选择是对的。他知道。\n但为什么心里这么空?\n\n手机亮了。是妈妈的未接来电,三个。\n\n他盯着那个名字看了很久,最后回拨过去——\n\"妈,我想回家一趟。\"\n\n(情绪处理+新行动)\n```\n\n---\n\n#### 第三部分:钩子(20%,500-600字)\n\n**绝对不能省!**\n\n喘息章的钩子比平常更重要,因为读者刚放松,需要新的张力。\n\n**适合的钩子类型**(低-中强度):\n\n1. **言外之意**(表面正常,隐藏信息)\n```\n\"你和你父亲很像。\"\n\"谢谢。\"\n\"他入狱那年,也是这个年纪。\"\n\n(她不知道他父亲坐过牢)\n```\n\n2. **承诺/威胁**\n```\n\"明天之前,我会让所有人知道你做了什么。\"\n(匿名信,只有这一行字)\n```\n\n3. **神秘物品**\n```\n包裹里没有寄件人信息。\n里面只有一张照片——照片里的地点,她从没告诉过任何人。\n```\n\n4. **信息差**\n```\n\"你听说了吗?\"朋友问。\n\"听说什么?\"\n\"...算了,没什么。\"\n\n(主角被排除在信息圈外)\n```\n\n**不适合的钩子类型**(避免):\n- ❌ 突然揭示(强度太高,破坏喘息氛围)\n- ❌ 身份反转(应该在高潮章)\n- ❌ 紧急危机(太紧张,不是喘息)\n- ❌ 生存悬念(强度过高)\n\n---\n\n## 何时需要喘息章\n\n### 必须安排喘息章的时机\n\n1. **连续3章高强度后**\n - 连续战斗/冲突/危机\n - 每章都是3-4级钩子\n\n2. **大高潮后1-2章内**\n - 主线悬念回收后\n - 重大转折后\n\n3. **世界观/设定需要解释时**\n - 新系统/新规则引入\n - 复杂背景需要梳理\n\n4. **人物重大变化后**\n - 价值观被挑战\n - 做出代价性选择\n\n5. **关系重大突破后**\n - 告白/分手/和解\n - 需要展示关系新状态\n\n### 喘息章频率\n\n| 章节位置 | 建议频率 | 说明 |\n|---------|---------|------|\n| 前10% | 不需要 | 建立紧张感 |\n| 10-30% | 每5-7章1次 | 给读者喘息 |\n| 30-70% | 每3-4章1次 | 中段压力最大,需要调节 |\n| 70-90% | 每2-3章1次 | 加速阶段,喘息要短 |\n| 后10% | 不需要 | 直奔结局 |\n\n---\n\n## 喘息章节奏控制\n\n### 紧张度曲线\n\n```\n正常章: ★★★★☆ → ★★★★★(持续高)\n喘息章: ★★★★☆ → ★★☆☆☆ → ★★★☆☆(低-中)\n 余波 核心 钩子\n```\n\n### 情绪类型选择\n\n喘息章的情绪应该是:\n- **满足/收获**(种田文)\n- **温情/亲密**(言情文)\n- **思考/发现**(悬疑文)\n- **平静/日常**(都市文)\n\n**避免**:恐惧、紧张、愤怒(留给正常章)\n\n---\n\n## 常见错误\n\n### ❌ 错误1:喘息章太长\n\n**表现**:用一整章写主角吃饭、睡觉、发呆。\n\n**后果**:读者感到无聊,直接弃书。\n\n**修正**:\n- 控制在2500字以内(比正常章短)\n- 核心内容(第二部分)要有信息/关系推进\n- 钩子(第三部分)必须有\n\n---\n\n### ❌ 错误2:喘息章没有钩子\n\n**表现**:结尾就是\"他睡着了\"\"一天过去了\"。\n\n**后果**:读者觉得\"这章什么都没发生\",追更动力下降。\n\n**修正**:\n- 必须用低-中强度钩子收尾\n- 让读者\"喘完气更想看下一章\"\n\n---\n\n### ❌ 错误3:喘息章变成\"水章\"\n\n**表现**:大段环境描写、日常流水账、无关对话。\n\n**后果**:读者感觉被糊弄,质量下降。\n\n**修正**:\n- 每个段落都要有功能(信息/关系/收获/钩子)\n- 环境描写要服务于人物心情\n- 对话要推进关系或揭示信息\n\n---\n\n### ❌ 错误4:喘息章太多\n\n**表现**:每2章就有一个喘息章。\n\n**后果**:整体节奏太平,缺乏张力。\n\n**修正**:\n- 前30%不需要喘息章\n- 70%以后要加速,喘息章要短\n- 保持\"紧张-喘息\"的比例约3:1\n\n---\n\n## 不同题材的喘息章\n\n### 悬疑/推理\n\n**功能**:线索整理、推理复盘、新方向确立\n\n**示例**:\n```\n[余波] 案件暂时告一段落,警方收队\n[核心] 主角整理线索,发现之前忽略的关联\n[钩子] 新线索指向一个意想不到的人\n```\n\n---\n\n### 玄幻升级\n\n**功能**:升级成果展示、技能熟练、新目标确立\n\n**示例**:\n```\n[余波] 突破后的虚弱期\n[核心] 测试新能力,盘点收获,规划下一步\n[钩子] 新功法/新敌人/新挑战出现\n```\n\n---\n\n### 言情/情感\n\n**功能**:关系深化、情感升温、秘密分享\n\n**示例**:\n```\n[余波] 上章危机解除后的平静\n[核心] 两人独处,感情推进,可能有小亲密\n[钩子] 新的阻碍出现(前任/误会/家庭反对)\n```\n\n---\n\n### 种田/基建\n\n**功能**:收获盘点、规划发展、享受成果\n\n**示例**:\n```\n[余波] 上一季收成后的整理\n[核心] 盘点资源,扩建计划,新作物/建筑\n[钩子] 新挑战(天灾/盗匪/市场波动)\n```\n\n---\n\n### 都市/职场\n\n**功能**:情绪处理、选择反思、关系调整\n\n**示例**:\n```\n[余波] 职场危机后的余波\n[核心] 主角处理情绪,与家人/朋友交流\n[钩子] 新的职场挑战/家庭问题浮现\n```\n\n---\n\n## 喘息章检查清单\n\n设计喘息章时:\n\n- [ ] 余波部分 ≤ 500字\n- [ ] 核心部分有明确功能(信息/关系/收获)\n- [ ] 钩子存在(低-中强度)\n- [ ] 整体字数 ≤ 2500字\n- [ ] 情绪类型是满足/温情/思考/平静,不是恐惧/紧张\n- [ ] 每个段落都有功能,没有\"水\"的内容\n\n交付前:\n\n- [ ] 读者读完会满足但仍有期待\n- [ ] 没有\"这章什么都没发生\"的感觉\n- [ ] 为下一章的行动做好了铺垫\n\n---\n\n## 快速模板\n\n```markdown\n# 第X章:[标题](喘息章)\n\n## 本章功能\n- [ ] 信息整合 / [ ] 关系深化 / [ ] 收获盘点 / [ ] 情绪处理\n- 承接上章:___\n- 本章核心:___\n- 下章铺垫:___\n\n## 结构\n1. **余波**(≤500字):___\n2. **核心**(1500-2000字):___\n3. **钩子**(500字):___(低-中强度)\n\n## 钩子设计\n类型:[ ] 言外之意 / [ ] 承诺威胁 / [ ] 神秘物品 / [ ] 信息差\n内容:___\n```\n\n---\n\n*好的喘息章让读者觉得\"终于能喘口气了\",但喘完气后\"更想看下一章\"。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":9182,"content_sha256":"fc7ae80eb5875c4d077e5f769473d0b4ef1118e5ae9c40807897a4d5df6c82b3"},{"filename":"references/13-钩子映射表.md","content":"# 钩子类型与关键节点映射表\n\n> 知道要用钩子,但不知道用什么类型?这个映射表告诉你答案。\n\n---\n\n## 快速查找表\n\n| 关键节点 | 推荐钩子类型 | 悬念强度 | 目的 |\n|---------|-------------|---------|------|\n| **开篇钩子** | 突然揭示、震撼对话、危机时刻 | 3-4级 | 立即建立兴趣 |\n| **第3章结尾** | 神秘物品、未完成的动作 | 3级 | 建立追更习惯 |\n| **小高潮章** | 身份反转、两难选择 | 4级 | 情绪高点 |\n| **喘息章** | 言外之意、承诺威胁 | 2-3级 | 维持兴趣但不过度 |\n| **中点转折** | 突然揭示+离奇消失 | 5级 | 最大震撼 |\n| **高潮前** | 时间限制、紧急危机 | 4-5级 | 迫近感 |\n| **结局前** | 终极选择、生存悬念 | 5级 | 迫近终点 |\n\n---\n\n## 详细映射\n\n### 1. 开篇钩子(第1章,0%位置)\n\n**目标**:让读者在3分钟内决定\"我要追这本书\"\n\n**推荐钩子类型**(按优先级):\n\n#### 1A. 突然揭示(最推荐)\n\n**示例**:\n```\n警官看着死者的手机,最后一条短信来自一个他认识的人——\n他自己。\n```\n\n**为什么有效**:\n- 立即打破预期\n- 读者想知道\"为什么\"\n- 适合悬疑、推理、惊悚\n\n**变体**:\n- 死者是主角认识的人\n- 凶器上有主角的指纹\n- 案发现场有主角的物品\n\n---\n\n#### 1B. 震撼对话\n\n**示例**:\n```\n\"我终于找到你了,弟弟。\"\n那个说着完美普通话的男人摘下面具——\n露出了一张她父亲的脸。\n```\n\n**为什么有效**:\n- 一句话改变一切\n- 关系/身份瞬间重定义\n- 适合言情、家庭、悬疑\n\n**变体**:\n- \"你杀的人,其实还活着\"\n- \"我和你母亲,二十年前就认识了\"\n- \"那个孩子,是你的\"\n\n---\n\n#### 1C. 危机时刻\n\n**示例**:\n```\n地板开始震动,灰尘从天花板簌簌落下。\n她抬头一看,裂缝正在迅速扩大——\n在头顶正上方。\n```\n\n**为什么有效**:\n- 立即进入紧张状态\n- 读者想知道\"她会不会死\"\n- 适合动作、灾难、冒险\n\n**变体**:\n- 被追杀的开场\n- 爆炸/火灾现场\n- 手术台上醒来\n\n---\n\n### 2. 第3章结尾(前10%,建立追更习惯)\n\n**目标**:让读者形成\"每章都有爆点\"的预期\n\n**推荐钩子类型**:\n\n#### 2A. 神秘物品\n\n**示例**:\n```\n保险箱里只有一张照片,拍摄于昨天。\n照片里是熟睡中的她,从窗外角度拍摄。\n```\n\n**为什么有效**:\n- 具体、可感知\n- 意义不明但暗示威胁\n- 适合所有题材\n\n**变体**:\n- 陌生号码的短信\n- 不该存在的日记本\n- 寄错的包裹\n\n---\n\n#### 2B. 未完成的动作\n\n**示例**:\n```\n他举起枪,手指扣在扳机上——\n\"别动!\"身后传来一个声音。\n```\n\n**为什么有效**:\n- 动作被打断\n- 不知道结果\n- 适合动作、悬疑\n\n**变体**:\n- 开门到一半\n- 告白被打断\n- 即将揭露真相时被阻止\n\n---\n\n### 3. 小高潮章(前30%,10-30%位置)\n\n**目标**:建立\"这书有料\"的信心\n\n**推荐钩子类型**:\n\n#### 3A. 身份反转\n\n**示例**:\n```\n\"你骗了我。\"\n\"我没有——\"\n\"你有。\"她拿出那张照片,\"因为这张照片里的人,\n二十年前就已经死了。\"\n```\n\n**为什么有效**:\n- 重新定义关系\n- 之前的信息全部要重新解读\n- 适合悬疑、言情、权谋\n\n---\n\n#### 3B. 两难选择\n\n**示例**:\n```\n救生艇只能载两个人。\n她的丈夫和女儿都在水里,海浪越来越大。\n她伸出手——\n```\n\n**为什么有效**:\n- 道德困境\n- 无论选什么都有代价\n- 适合言情、伦理、灾难\n\n---\n\n### 4. 喘息章(30-70%,调节节奏)\n\n**目标**:让读者喘口气,但仍有期待\n\n**推荐钩子类型**(低-中强度):\n\n#### 4A. 言外之意\n\n**示例**:\n```\n\"恭喜你通过面试,\"面试官笑着握住她的手,\n\"和你姐姐一样优秀。\"\n\n可她是独生女。\n```\n\n**为什么有效**:\n- 表面正常,隐藏信息\n- 需要读者解读\n- 适合所有题材\n\n**变体**:\n- \"你父亲生前...\"(主角以为父亲还活着)\n- \"我们又见面了\"(主角不记得见过)\n\n---\n\n#### 4B. 承诺/威胁\n\n**示例**:\n```\n\"今晚午夜之前,我会让所有人知道你十年前真正做了什么。\"\n\n匿名邮件,只有这一行字。\n```\n\n**为什么有效**:\n- 明确的时间框架\n- 读者知道\"有事要发生\"\n- 适合悬疑、复仇\n\n---\n\n### 5. 中点转折(50%位置,全书核心)\n\n**目标**:最大震撼,重新定义全书走向\n\n**推荐钩子类型**:\n\n#### 5A. 突然揭示 + 离奇消失(组合技)\n\n**示例**:\n```\n\"你父亲不是病死的。\"律师递过来一份文件,\n\"他是被谋杀的。凶手是——\"\n\n灯灭了。\n\n等电力恢复,律师不见了。\n文件也不见了。\n只剩下一摊血,和墙上用血写的两个字:\n\"别查\"\n```\n\n**为什么有效**:\n- 最高强度钩子\n- 多个钩子叠加\n- 信息+生存双重悬念\n\n**其他组合**:\n- 身份反转 + 紧急危机\n- 突然揭示 + 两难选择\n- 离奇消失 + 神秘物品\n\n---\n\n### 6. 高潮前(70-90%,加速阶段)\n\n**目标**:迫近终点,不能停止\n\n**推荐钩子类型**:\n\n#### 6A. 时间限制\n\n**示例**:\n```\n定时器显示 03:00。\n\n而拆弹包里少了一根关键的红线。\n```\n\n**为什么有效**:\n- 明确倒计时\n- 读者感到窒息\n- 适合动作、悬疑、灾难\n\n**变体**:\n- 毒药起效倒计时\n- 炸弹倒计时\n- 日食/月食前的仪式\n\n---\n\n#### 6B. 紧急危机\n\n**示例**:\n```\n他推开那扇门——\n\n她吊在房梁上,脚还在踢。\n但绳子已经断了三分之一。\n```\n\n**为什么有效**:\n- 立即行动需求\n- 没有时间思考\n- 适合动作、惊悚\n\n---\n\n### 7. 结局前(90-100%,终点)\n\n**目标**:终极悬念,完美收官\n\n**推荐钩子类型**:\n\n#### 7A. 终极选择\n\n**示例**:\n```\n两个按钮:\nA. 拯救世界,但失去所有记忆(包括她)\nB. 保留记忆,但世界毁灭\n\n他的手悬在空中。\n倒计时:10、9、8...\n```\n\n**为什么有效**:\n- 最高代价的选择\n- 主角核心价值的终极考验\n- 适合所有题材的高潮\n\n---\n\n#### 7B. 生存悬念\n\n**示例**:\n```\n他看着她掉下去。\n\n抓住了她的手——但自己的身体也在滑向边缘。\n两个人的重量,那根树枝撑不住。\n\n他必须做出选择。\n```\n\n**为什么有效**:\n- 生死一线\n- 本能vs理性的冲突\n- 适合动作、灾难、言情\n\n---\n\n## 题材特化映射\n\n### 悬疑/推理\n\n| 位置 | 推荐钩子 | 效果 |\n|------|---------|------|\n| 开篇 | 突然揭示(新线索) | 建立谜题 |\n| 第3章 | 神秘物品(关键证据) | 推动调查 |\n| 小高潮 | 身份反转(嫌疑人改变) | 误导有效 |\n| 中点 | 突然揭示+离奇消失(证人失踪) | 最大震撼 |\n| 结局前 | 终极选择(真相vs保护某人) | 道德困境 |\n\n---\n\n### 玄幻升级\n\n| 位置 | 推荐钩子 | 效果 |\n|------|---------|------|\n| 开篇 | 危机时刻(强敌出现) | 建立威胁 |\n| 第3章 | 神秘物品(金手指/功法) | 升级动力 |\n| 小高潮 | 身份反转(隐藏身份被揭) | 震惊众人 |\n| 中点 | 突然揭示(身世/秘密) | 重新定义目标 |\n| 结局前 | 终极选择(力量vs情感) | 成长考验 |\n\n---\n\n### 言情\n\n| 位置 | 推荐钩子 | 效果 |\n|------|---------|------|\n| 开篇 | 震撼对话(误会/告白) | 情感触发 |\n| 第3章 | 未完成的动作(告白被打断) | 建立期待 |\n| 小高潮 | 两难选择(爱情vs责任) | 情感张力 |\n| 中点 | 身份反转(秘密揭露) | 关系重定义 |\n| 结局前 | 终极选择(原谅vs离开) | 情感升华 |\n\n---\n\n### 都市/职场\n\n| 位置 | 推荐钩子 | 效果 |\n|------|---------|------|\n| 开篇 | 危机时刻(职场危机) | 建立压力 |\n| 第3章 | 言外之意(办公室政治) | 暗示复杂 |\n| 小高潮 | 两难选择(职场vs道德) | 价值观考验 |\n| 中点 | 突然揭示(真相大白) | 重新定义处境 |\n| 结局前 | 终极选择(成功vs幸福) | 成长完成 |\n\n---\n\n## 钩子强度与章节位置关系\n\n### 整体趋势\n\n```\n强度\n 5 │ ★\n │ ╱ ╲\n 4 │ ★ ╱ ★\n │ ╱ ╲ ╱ ╲\n 3 │ ★ ★ ★\n │╱ ╲ ╱ ╲ ╱\n 2 │ ★ ★ ╱\n │ ★ ╱\n 1 │ ★ ╱\n └────────────────────────────────────→ 章节位置\n 0% 25% 50% 75% 100%\n 小高潮 中点 高潮前 结局\n```\n\n**原则**:\n- 整体上升趋势\n- 允许波动(高潮后可以有低强度钩子)\n- 中点必须最高或次高\n- 结局前必须最高\n\n---\n\n## 钩子选择决策树\n\n```\n当前要设计钩子的章节是什么位置?\n│\n├─ 第1章 → 突然揭示 / 震撼对话 / 危机时刻\n│\n├─ 第2-3章 → 神秘物品 / 未完成的动作\n│\n├─ 前30%(小高潮)→ 身份反转 / 两难选择\n│\n├─ 30-50% → 推进型钩子(新线索/升级)\n│\n├─ 50%中点 → 突然揭示+离奇消失(组合技)\n│\n├─ 50-70% → 时间限制 / 新悬念提出\n│\n├─ 70-90% → 时间限制 / 紧急危机\n│\n└─ 后10% → 终极选择 / 生存悬念\n```\n\n---\n\n## 常见错误\n\n### ❌ 开篇用低强度钩子\n\n**错误**:\"他看着窗外,思考着人生。\"\n**后果**:读者3秒内决定弃书\n**修正**:必须用3-4级强度钩子开篇\n\n### ❌ 中点用低强度钩子\n\n**错误**:中点只是普通章节,没有转折\n**后果**:全书节奏太平,缺乏高潮\n**修正**:50%位置必须有4-5级强度钩子\n\n### ❌ 连续高强度钩子\n\n**错误**:第8、9、10章都是5级钩子\n**后果**:读者疲劳,失去冲击力\n**修正**:高潮后安排喘息章(2-3级钩子)\n\n### ❌ 钩子类型与题材不匹配\n\n**错误**:言情用\"危机时刻\",玄幻用\"言外之意\"\n**后果**:违和感,破坏阅读体验\n**修正**:参考\"题材特化映射\"表格\n\n---\n\n## 快速检查清单\n\n设计章节钩子时:\n\n- [ ] 钩子强度与章节位置匹配(对照整体趋势图)\n- [ ] 钩子类型与题材匹配\n- [ ] 不是\"虚假悬念\"(结果是误会)\n- [ ] 不是\"机械降神\"(突然出现的解决)\n- [ ] 回收前有足够铺垫(提及≥3次)\n- [ ] 回收带来新的悬念或升级\n\n---\n\n## 钩子映射速查卡\n\n打印出来,写作时对照:\n\n```\n┌─────────────────────────────────────────┐\n│ 钩子类型选择速查 │\n├─────────────────────────────────────────┤\n│ 开篇(0%) → 突然揭示/震撼对话/危机时刻 │\n│ 第3章(3%) → 神秘物品/未完成的动作 │\n│ 小高潮(30%) → 身份反转/两难选择 │\n│ 中点(50%) → 组合技(突然揭示+消失) │\n│ 升级期(70%) → 时间限制/新悬念 │\n│ 结局前(90%) → 终极选择/生存悬念 │\n└─────────────────────────────────────────┘\n```\n\n---\n\n*好钩子的标准:读者必须知道答案,否则会睡不着觉。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":11573,"content_sha256":"9e5229a31117230a32ecb634482433e6d7f7d64b520c7c89ae29c3d358b0851a"},{"filename":"references/ai-style-by-genre.md","content":"# 按题材AI味专项清单\n\n> 不同题材有不同的AI味陷阱,针对性防治更有效。\n\n---\n\n## 悬疑 / 推理\n\n### 常见AI味症状\n\n#### 1. 线索铺陈太明显\n\n**典型错误**:\n```\n请注意,这个细节将在后面成为破案关键。有经验的读者可能已经注意到...\n```\n\n**为什么错**:\n- 直接告诉读者\"这是线索\"\n- 破坏了推理的乐趣\n- 像在解数学题,不是在讲故事\n\n**改写示范**:\n```\n❌ \"这个指纹将证明凶手是熟人。\"(直接告诉)\n✅ \"他在门把手上看到了指纹——清晰的、没有挣扎痕迹的指纹。\"\n\n❌ \"请注意,凶手就在这三个人之中。\"(作者旁白)\n✅ \"只有三个人有钥匙。只有三个人知道密码。只有三个人——\"他停住,\"只有三个人。\"\n```\n\n**防治要点**:\n- 线索要像普通细节一样自然出现\n- 让读者自己\"发现\"而不是被告知\n- 重要线索要重复出现2-3次,但不做解释\n\n---\n\n#### 2. 推理过程像论文\n\n**典型错误**:\n```\n第一,死者死亡时间在晚上8点到10点之间。\n第二,现场没有打斗痕迹。\n第三,凶手必须熟悉现场。\n因此,凶手是...\n```\n\n**为什么错**:\n- 一二三罗列缺乏叙事感\n- 不像角色在思考,像作者在写报告\n\n**改写示范**:\n```\n❌ \"根据以上三点,我们可以得出结论...\"\n✅ \"八点到十点。没有打斗。熟悉现场。\"他盯着这三个事实,突然站起来,\"我知道了。\"\n\n❌ \"综上所述,凶手只能是...\"\n✅ \"只有一个解释。\"他转向人群,\"凶手就在你们之中。\"\n```\n\n**防治要点**:\n- 推理要有情绪推动(愤怒、困惑、顿悟)\n- 用动作打断推理(突然站起来、摔东西)\n- 省略中间步骤,直接呈现结论\n\n---\n\n#### 3. 红鲱鱼太过刻意\n\n**典型错误**:\n```\n所有人都怀疑张三。然而,真正的凶手其实是...\n```\n\n**为什么错**:\n- \"然而\"是作者提醒,不是叙事转折\n- 真正的误导应该让读者自己误判\n\n**改写示范**:\n```\n❌ \"张三看起来很可疑。然而,他其实是无辜的。\"\n✅ 写张三的可疑行为,但不解释。让读者自己怀疑。\n然后在关键时刻揭示张三有不在场证明——这才是有效的误导。\n```\n\n**防治要点**:\n- 不直接说\"他是嫌疑人\"\n- 用行为和证据让读者自己怀疑\n- 误导和真相要有同等强度的证据\n\n---\n\n### 悬疑类正向范例\n\n**好的线索投放**:\n```\n他注意到死者手里的戒指——婚戒,但戴在右手。在左手有长期佩戴痕迹。\n(不解释,让读者自己发现异常)\n```\n\n**好的推理时刻**:\n```\n\"等等。\"他突然停住,\"那个时间,他在哪?\"\n没有人回答。沉默像水一样漫上来。\n他知道了。\n```\n\n**好的误导**:\n```\n张三有动机,有机会,有凶器。\n直到他们发现——那个\"凶器\"上,根本没有张三的指纹。\n(让读者怀疑张三,然后给出反证据)\n```\n\n---\n\n## 言情 / 情感\n\n### 常见AI味症状\n\n#### 1. 情绪形容词堆砌\n\n**典型错误**:\n```\n她心中涌起甜蜜的悸动,脸颊泛起羞涩的红晕,眼神中闪烁着幸福的光芒。\n```\n\n**为什么错**:\n- 连续使用\"甜蜜\"\"羞涩\"\"幸福\"等抽象词\n- 像美妆广告,不像真实感受\n\n**改写示范**:\n```\n❌ \"她感到前所未有的幸福\"\n✅ \"她差点撞上门框,手里的咖啡洒了一半也没在意\"\n\n❌ \"他的眼中充满了爱意\"\n✅ \"他的目光跟着她,从她拿起杯子,到放下,再到她低头时耳后的一小块皮肤\"\n\n❌ \"她心中充满了悲伤\"\n✅ \"她把那条消息看了三遍,然后长按,删除\"\n```\n\n**防治要点**:\n- 用身体细节代替情绪标签\n- 用行为暗示心理(删除消息、反复看照片)\n- 情绪的强烈程度与行为的失控程度成正比\n\n---\n\n#### 2. 告白场景太\"完美\"\n\n**典型错误**:\n```\n\"从第一次见到你,我就知道你是我的唯一。你的笑容如阳光般温暖,你的眼睛如星辰般璀璨...\n```\n\n**为什么错**:\n- 过于诗意,脱离真实\n- 真实告白通常是笨拙、紧张、词不达意的\n\n**改写示范**:\n```\n❌ \"我爱你。从第一次见到你开始。\"\n✅ \"我——\"他张了张嘴,又闭上,\"我不是想说这个。我是说...算了。\"\n\n❌ \"你是我生命中最重要的人。\"\n✅ \"那件事,我只告诉过你。连我妈都不知道。\"\n\n❌ \"我愿意为你做任何事。\"\n✅ \"那个...你需要什么吗?我是说,不管什么都行。\"\n```\n\n**防治要点**:\n- 真实告白有停顿、重复、自我打断\n- 用行动代替宣言(\"我只告诉过你\")\n- 紧张时注意力会转移到无关细节(\"你扣子掉了\")\n\n---\n\n#### 3. 内心独白过度\n\n**典型错误**:\n```\n她看着他,心里想着:他今天为什么要来?他是不是对我有意思?可是昨天他才和那个女生说话...\n```\n\n**为什么错**:\n- 大段内心独白打断了叙事节奏\n- 把潜台词变成了明台词,失去了暧昧\n\n**改写示范**:\n```\n❌ 她心里想:\"他是不是喜欢我?\"\n✅ 他坐下时,她把手边的水杯推远了一点。又拉回来。\n\n❌ 她疑惑:\"他为什么对我这么好?\"\n✅ 他递过来的那杯咖啡,是她喜欢的口味,不加糖。她没告诉过他。\n\n❌ 她决定:\"我要忘记他。\"\n✅ 她删掉了那个对话框。过了五分钟,又从回收站里恢复了。\n```\n\n**防治要点**:\n- 用动作暗示心理活动\n- 把\"她在想什么\"变成\"她做了什么\"\n- 保留潜台词,不要全说出来\n\n---\n\n### 言情类正向范例\n\n**好的心动描写**:\n```\n他低头系鞋带。她发现自己盯着他的后脑勺看了太久,赶紧移开视线。\n又忍不住看回去。\n```\n\n**好的暧昧场景**:\n```\n\"你头发上有东西。\"他伸手。\n她僵住,忘了躲。\n\"好了。\"他说,手收回去了。\n她不知道那是什么东西,也不知道是不是真的有过。\n```\n\n**好的分手场景**:\n```\n\"那就这样吧。\"她说。\n\"好。\"他说。\n两个人都没动。电梯来了又走,第三趟的时候,她说:\"我先走了。\"\n\"好。\"\n她走了。他没有。\n```\n\n---\n\n## 奇幻 / 仙侠 / 科幻\n\n### 常见AI味症状\n\n#### 1. 设定词扎堆\n\n**典型错误**:\n```\n张三运转太玄经第七层心法,催动紫府丹田中的元婴之力,施展出天罡三十六变中的第一变——身外化身。\n```\n\n**为什么错**:\n- 新名词密集轰炸,读者记不住\n- 像是在读游戏说明书\n\n**改写示范**:\n```\n❌ \"他运转太玄经第七层心法...\"\n✅ \"他闭上眼睛。那股力量从丹田升起,像一条温热的蛇,顺着脊椎往上爬。\"\n(先给感觉,再慢慢解释这是什么)\n\n❌ \"这是天罡三十六变的第一变。\"\n✅ \"一个,变成两个。两个一模一样的人,连惊讶的表情都一样。\"\n(先展示效果,再告诉名字)\n```\n\n**防治要点**:\n- 先给感官体验,再给术语名称\n- 一个新名词要有\"代价\"或\"限制\",不能无成本使用\n- 设定通过角色犯错/付出代价来展示,不是讲解\n\n---\n\n#### 2. 技能名称像游戏数值\n\n**典型错误**:\n```\n攻击力+50,防御力+30,暴击率15%,持续3回合。\n```\n\n**为什么错**:\n- 没有叙事感\n- 读者无法感受到这个技能的\"重量\"\n\n**改写示范**:\n```\n❌ \"使用技能'烈焰斩',攻击力+50\"\n✅ \"那一刀下去,他感到手臂的骨头都在震动。刀身烫得握不住,但伤口周围的血瞬间蒸发了。\"\n\n❌ \"激活护盾,防御力+30,持续3回合\"\n✅ \"那层光罩出现的时候,他松了一口气。但很快发现,每挡下一次攻击,光罩就薄一分。三击之后,碎了。\"\n```\n\n**防治要点**:\n- 用身体感受代替数值\n- 强调代价(\"骨头震动\"\"握不住\")\n- 强调限制(\"三击之后碎了\")\n\n---\n\n#### 3. 升级太快太顺利\n\n**典型错误**:\n```\n他闭关三天,突破了筑基期,直接进入金丹期。\n```\n\n**为什么错**:\n- 没有代价的升级缺乏张力\n- 读者不会为\"免费\"的成长感到兴奋\n\n**改写示范**:\n```\n❌ \"他闭关三天,成功突破。\"\n✅ \"他醒来时,发现自己动不了。丹田里有什么东西在燃烧,烧得他想要尖叫。但嗓子也烧坏了,发不出声音。\"\n\"三天后,那团火终于灭了。他爬出洞府,发现头发全白了。\"\n```\n\n**防治要点**:\n- 升级必须有代价(身体、记忆、情感)\n- 升级后要有\"震惊众人\"的爽点\n- 升级不能解决所有问题,要制造新问题\n\n---\n\n### 奇幻类正向范例\n\n**好的设定揭示**:\n```\n他试着运转那股力量。第一次,经脉像被火烧。第二次,耳朵开始流血。第三次——\n他倒下了,但感觉到了。那股力量,在他的血液里,终于肯流动了。\n(通过痛苦和代价来展示设定的存在)\n```\n\n**好的战斗描写**:\n```\n对方的剑比他快。他只能看到一道光,然后感到脖子上一凉。\n不是致命伤。对方留手了。\n但这一下,他知道了自己和对方的差距——不是技巧,是层次。\n(用感受和认知代替技能名称)\n```\n\n**好的升级时刻**:\n```\n他突破的那一刻,整座山都在震动。\n不是因为他的力量有多强。是因为那股力量不属于这里,被这个世界排斥。\n他成功了。但他也知道了,以后每一次使用,都会是这样——与整个世界为敌。\n(升级有代价,而且代价持续存在)\n```\n\n---\n\n## 都市 / 职场\n\n### 常见AI味症状\n\n#### 1. 职场术语堆砌\n\n**典型错误**:\n```\n我们需要优化KPI,提高ROI,降低成本,增强核心竞争力,实现双赢...\n```\n\n**为什么错**:\n- 像年终总结,不像人在说话\n- 缺乏具体的\"人\"的感受\n\n**改写示范**:\n```\n❌ \"我们需要提高ROI。\"\n✅ \"老板看了报表,把那张纸摔在桌上。'三个月,亏了三十万。谁的责任?'\"\n\n❌ \"优化资源配置\"\n✅ \"他看着那份裁员名单。上面有他的名字——被划掉了,换成了他手下小李的。\"\n```\n\n**防治要点**:\n- 职场压力要具体化(裁员、 deadline、上司的怒火)\n- 用人物命运承载职场概念\n- 不要直接说术语,说术语带来的后果\n\n---\n\n#### 2. 现实压力悬浮\n\n**典型错误**:\n```\n房贷、车贷、信用卡账单,压得他喘不过气。\n```\n\n**为什么错**:\n- 罗列压力但无具体细节\n- 读者无法感同身受\n\n**改写示范**:\n```\n❌ \"房贷压得他喘不过气\"\n✅ \"每月15号,那个自动扣款的短信都会来。这个月的数字比上个月又多了三百。他看了三遍,确认自己没有看错。\"\n\n❌ \"他很焦虑\"\n✅ \"他把药瓶拿出来,又放回去。又拿出来。那瓶安眠药已经过期三个月了。\"\n```\n\n**防治要点**:\n- 用具体数字、具体日期、具体物品承载抽象压力\n- 焦虑要有行为出口(反复检查、睡不着、吃药)\n- 压力要有\"最后一根稻草\"的具体事件\n\n---\n\n#### 3. 主角开挂太假\n\n**典型错误**:\n```\n关键时刻,他想起了父亲的教诲,突然开悟,成功解决了所有问题。\n```\n**为什么错**:\n- 现实题材不应该有\"顿悟解决一切\"\n- 读者在现实中知道这不可能\n\n**改写示范**:\n```\n❌ \"他想起了父亲的话,突然有了灵感\"\n✅ \"他试遍了所有办法,都失败了。最后,他做了那件事——他父亲生前一直反对的那件事。\"\n\"不是顿悟。是投降。\"\n\n❌ \"他成功了,证明努力就会有回报\"\n✅ \"他成功了。代价是离婚、住院、和唯一的朋友闹翻。\"\n\"他不知道这算不算成功。\"\n```\n\n**防治要点**:\n- 现实题材没有\"完美解决\"\n- 每个选择都有代价\n- 结局可以是\" bittersweet\",不是必须圆满\n\n---\n\n### 都市类正向范例\n\n**好的职场描写**:\n```\n会议室里坐了十二个人。只有四把椅子是留给\"自己人\"的。\n他坐在第五把椅子上,那把椅子比其他的矮一寸,坐久了腰疼。\n他知道。这是故意的。\n```\n\n**好的压力描写**:\n```\n那个月的信用卡账单来了。他没有打开。\n第二天,又来了。\n第三天,电话来了。他看着那个号码,按了静音。\n```\n\n**好的选择描写**:\n```\n两个选择:留在公司,被边缘化;辞职,房贷断供。\n他没有选。他拖着,直到公司替他做了选择。\n那不是选择。那是逃避。但谁说逃避就不是答案呢?\n```\n\n---\n\n## 跨题材通用原则\n\n### 无论写什么题材,都要避免:\n\n1. **总结性叙述**:\"总而言之\"\"不难看出\"\n2. **过度解释**:\"这是因为...\"\"这意味着...\"\n3. **抽象标签**:\"他很悲伤\"\"她很开心\"\n4. **均匀句式**:短句短句短句,没有变化\n5. **视角混乱**:一句话内切换多个角色的内心\n6. **信息倾倒**:大段背景说明\n7. **完美解决**:没有代价的成功\n\n### 无论什么题材,都要追求:\n\n1. **具体细节**:数字、物品、动作\n2. **感官体验**:视觉、听觉、触觉、嗅觉\n3. **行为暗示**:用动作代替心理描写\n4. **句式变化**:长短交替,倒装省略\n5. **视角稳定**:一节内保持同一视角\n6. **信息嵌入**:通过行动揭示设定\n7. **代价原则**:每个获得都有失去\n\n---\n\n*好故事的原则是通用的,但每个题材有自己的陷阱。针对性防治,事半功倍。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":13435,"content_sha256":"7dc8c4faa5ead7cb4032da057d76b866af4892ad1923bbec5e25e49a73d9292c"},{"filename":"references/ai-style-examples.md","content":"# AI味改写范例库\n\n> 不是告诉用户\"不要做什么\",而是展示\"要怎么做\"。\n\n---\n\n## 使用说明\n\n1. **检测**:先用 `scripts/check_ai_style.py` 检测章节\n2. **定位**:根据报告找到具体问题类型\n3. **对照**:在本文件中找到对应症状的改写范例\n4. **应用**:参考范例修改你的文本\n\n---\n\n## 症状1:空泛形容词堆砌\n\n### 典型错误\n\"他感到前所未有的悲伤和绝望,内心充满了无尽的痛苦。\"\n\n### 为什么错\n用抽象词总结情绪,读者无法感知。\"悲伤\"是什么?每个人的理解不同。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他很悲伤 | 他盯着手机屏幕,拇指在玻璃上滑了三次,没点开那条消息 | 动作替代 |\n| 她内心充满喜悦 | 她差点撞上门框,手里的咖啡洒了一半也没在意 | 行为展示 |\n| 一种复杂的感觉涌上心头 | 他张了张嘴,那个名字在舌尖转了一圈,又咽了回去 | 未完成的动作 |\n| 他很生气 | 他把杯子放下,杯底和桌面碰撞的声音比预想的大 | 细节放大 |\n| 她感到无比孤独 | 她给自己买了生日蛋糕,插了一根蜡烛,又吹灭了 | 行为叙事 |\n| 他十分紧张 | 他把那张纸对折,展开,再对折,纸边已经起毛了 | 重复动作 |\n| 她非常害怕 | 她把卧室的门锁了又检查了一遍,虽然知道这没什么用 | 矛盾行为 |\n| 他很失望 | 他看着那盘菜,筷子拿起又放下,最后推开了碗 | 动作链 |\n\n### 核心技巧\n\n**动作替代**:用具体动作代替情绪标签\n- ❌ \"他很生气\"\n- ✅ \"他一拳砸在墙上,指节破皮了也没觉得疼\"\n\n**行为展示**:用行为暗示情绪\n- ❌ \"她很紧张\"\n- ✅ \"她把那张纸看了七遍,还是没有填自己的名字\"\n\n**感官细节**:用感官体验代替抽象描述\n- ❌ \"他很痛苦\"\n- ✅ \"他弯下腰,像是被人从里面掏空了\"\n\n---\n\n## 症状2:四字成语堆砌\n\n### 典型错误\n\"他情不自禁、不由自主,思绪万千、百感交集,恍然大悟、若有所思。\"\n\n### 为什么错\n成语是高度浓缩的表达,连续使用会造成\"概念轰炸\",失去画面感。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他恍然大悟 | 他盯着那个数字,突然站了起来,椅子在身后倒地 | 顿悟时刻 |\n| 她若有所思 | 她停下搅拌咖啡的手,勺子悬在半空,忘了放下 | 动作中断 |\n| 他目不转睛 | 他连眼睛都没眨,怕一眨眼那个身影就不见了 | 恐惧失去 |\n| 她忐忑不安 | 她把那个信封在手里转来转去,迟迟没拆开 | 行为暗示 |\n| 他垂头丧气 | 他盯着地面,肩膀垮下来,脚步比来时重了一倍 | 身体语言 |\n| 她欣喜若狂 | 她抓着那张纸在原地转了一圈,差点撞到桌角 | 动作失控 |\n| 他心不在焉 | 她把那个问题问了第三遍,他才\"啊\"了一声 | 反应延迟 |\n| 她愁眉苦脸 | 她对着镜子练习了三种笑容,最后选了最假的一种 | 行为矛盾 |\n\n### 核心技巧\n\n**分解动作**:把成语分解成具体动作序列\n- ❌ \"他夺门而出\"\n- ✅ \"门还没完全打开,他已经挤了出去,门板撞在墙上弹回来\"\n\n**身体语言**:用身体反应代替心理成语\n- ❌ \"他心潮澎湃\"\n- ✅ \"他把手按在胸口,心跳声大得像要震破耳膜\"\n\n**场景化**:把成语放进具体场景\n- ❌ \"她思绪万千\"\n- ✅ \"她坐在黑暗里,想起他第一次笑的样子,最后一次说话的声音,以及那些再也不会回来的日子\"\n\n---\n\n## 症状3:解释性连接词\n\n### 典型错误\n\"然而他并不知道,因为这个决定,所以他将失去一切。\"\n\n### 为什么错\n解释性连接词像作者在旁白,打断了沉浸感。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 然而,他不知道 | 他不知道。此刻,在城市的另一端... | 直接陈述+场景切换 |\n| 因为天气不好,所以... | 雨下了三天。码头停工,他只好... | 事实陈述 |\n| 虽然他很害怕,但是... | 他的手在抖。还是伸了出去 | 动作分割 |\n| 这意味着... | (删除,让读者自己发现) | 信任读者 |\n| 事实上... | (删除,直接陈述事实) | 直接陈述 |\n| 不难看出... | (删除,直接展示) | 展示代替告诉 |\n| 总而言之... | (删除,这是总结不是场景) | 场景内不要总结 |\n| 某种程度上... | (删除,确定就确定,不确定就不写) | 确定立场 |\n\n### 核心技巧\n\n**直接陈述**:去掉连接词,直接说\n- ❌ \"然而,事情并没有结束\"\n- ✅ \"事情还没有结束\"\n\n**场景切换**:用场景变化代替逻辑连接\n- ❌ \"他不知道的是,与此同时...\"\n- ✅ \"他不知道。此刻...\"\n\n**动作分割**:把转折放进动作\n- ❌ \"虽然害怕,他还是走了过去\"\n- ✅ \"他停了一步。然后继续走了过去\"\n\n---\n\n## 症状4:时间转折词滥用\n\n### 典型错误\n\"就在这时,突然门开了。下一秒,他看到了她。\"\n\n### 为什么错\n\"就在这时\"\"突然\"\"下一秒\"是AI的高频词,过度使用会造成机械感。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 就在这时,门开了 | 门开了 | 直接陈述 |\n| 突然,他看到了她 | 她站在门口 | 直接呈现 |\n| 下一秒,电话响了 | 电话响了 | 时间自然流动 |\n| 正在这时,他注意到 | 他注意到 | 删除时间标记 |\n| 刹那间,他明白了 | 他明白了 | 顿悟不需要时间标记 |\n| 转眼间,三天过去了 | 三天后 | 简洁时间跳跃 |\n| 与此同时,在另一边... | (换行或分段)与此同时... | 排版代替连接词 |\n\n### 核心技巧\n\n**直接呈现**:让事件自己发生\n- ❌ \"突然,枪响了\"\n- ✅ \"枪响了\"\n\n**感官先行**:用感官代替时间标记\n- ❌ \"就在这时,他闻到了烟味\"\n- ✅ \"烟味。他停下脚步\"\n\n**省略时间词**:信任读者能理解时间流动\n- ❌ \"下一秒,他扣动了扳机\"\n- ✅ \"他扣动了扳机\"\n\n---\n\n## 症状5:情绪标签句\n\n### 典型错误\n\"他感到前所未有的愤怒,心中涌起一股难以名状的情绪。\"\n\n### 为什么错\n\"感到...\"\"心中...\"是典型的AI情绪表达,告诉读者情绪而不是展示。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他感到愤怒 | 他盯着那封信,指节泛白 | 身体反应 |\n| 她心中涌起喜悦 | 她差点叫出声,又捂住了嘴 | 压抑的喜悦 |\n| 一种复杂的感觉涌上心头 | 他想笑,又想哭,最后只是叹了口气 | 矛盾表现 |\n| 他感到前所未有的孤独 | 他给自己买了生日蛋糕,插了一根蜡烛 | 行为叙事 |\n| 她心中充满恐惧 | 她检查了三遍门锁,虽然知道没用 | 无效行为 |\n| 他感到无比愧疚 | 他把那个名字写了又划掉,划掉又写 | 重复行为 |\n| 她感到幸福 | 她走路时数着自己的脚步,七步,又七步 | 注意力转移 |\n| 他感到绝望 | 他不再看表,因为知道时间已经不够了 | 放弃行为 |\n\n### 核心技巧\n\n**身体先行**:情绪先体现在身体\n- ❌ \"他很紧张\"\n- ✅ \"他的手心全是汗,在裤子上擦了三次\"\n\n**行为矛盾**:用矛盾行为展示复杂情绪\n- ❌ \"她感到矛盾\"\n- ✅ \"她拿起电话,又放下,又拿起\"\n\n**注意力转移**:情绪强烈时注意力会转移\n- ❌ \"他非常痛苦\"\n- ✅ \"他数着天花板上的裂纹,第三十七道,第三十八道\"\n\n---\n\n## 症状6:均匀的句式节奏\n\n### 典型错误\n\"他走进了房间。他看到了她。她站了起来。他们互相看着。\"\n\n### 为什么错\n均匀的短句像打字机,没有韵律感。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他走进了房间。他看到了她。 | 他推开门,她已经在了 | 合并+省略冗余 |\n| 他很生气。他说:\"你骗我。\" | \"你骗我。\"声音比他想象的大 | 倒装+意外效果 |\n| 他哭了。他很伤心。 | 他用手背抹眼睛,越抹越湿 | 动作代替陈述 |\n| 她笑了。她很高兴。 | 她笑了一声,又笑了一声,停不下来 | 重复+失控感 |\n\n### 句式变化技巧\n\n**长短交替**:\n```\n短句。短句。短句。长句,里面有逗号,还有更多的内容,让读者喘口气。\n```\n\n**倒装句**:\n```\n正常:他推开了门。\n倒装:门开了,被他推开。\n```\n\n**省略句**:\n```\n完整:他看着那个方向,一句话也说不出来。\n省略:他看着那个方向。一句话。\n```\n\n**破碎句**:\n```\n正常:他不知道该怎么办。\n破碎:不知道。怎么办。\n```\n\n---\n\n## 症状7:过度书面化的对话\n\n### 典型错误\n\"我认为这个假设存在三个明显的漏洞。首先...其次...最后...\"\n\n### 为什么错\n真实的人不会这样说话。口语有停顿、重复、打断、半截话。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| \"我认为你说的不对\" | \"不对。\"他打断她,\"全都不对\" | 打断+重复 |\n| \"我非常感谢你帮助我\" | \"谢了。真的。\"他顿了顿,\"我是说真的\" | 重复+停顿 |\n| \"我绝不会原谅你\" | \"我原——\"他停住,\"算了\" | 自我打断 |\n| \"这件事让我非常困扰\" | \"那件事...算了,不说了\" | 欲言又止 |\n| \"我不确定这是否正确\" | \"对吗?我是说...大概对吧?\" | 自我怀疑 |\n| \"我们必须立即采取行动\" | \"得做点什么。现在\" | 省略+紧急感 |\n\n### 口语化技巧\n\n**打断**:\n```\n\"我想告诉你——\"\n\"等一下。\"她举起手,\"让我先说\"\n```\n\n**重复**:\n```\n\"真的。我真的不知道。真的\"\n```\n\n**半截话**:\n```\n\"我本来以为...算了,没什么\"\n```\n\n**填充词**:\n```\n\"那个...我是说...你明白吗?\"\n```\n\n**沉默**:\n```\n\"你愿意原谅我吗?\"\n她继续翻杂志,没有抬头\n```\n\n---\n\n## 症状8:视角混乱\n\n### 典型错误\n\"他不知道她在想什么。她其实也在想同样的事。\"\n\n### 为什么错\n一句话内切换两个角色的内心,读者不知道站在谁的视角。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 他不知道她在想什么。她其实在想... | 【切换到她的视角】她在想...他不知道 | 明确换行/换段 |\n| 他看着她的脸,猜测她的想法 | 他看着她的脸。那张脸上没有表情 | 只写可观察的 |\n| 她感到害怕,他也一样 | 【切换到他的视角】他看着她颤抖的手 | 分段处理 |\n\n### 视角清晰技巧\n\n**一节一人**:\n```\n尽可能在同一节/同一段内保持同一视角\n```\n\n**换视角标记**:\n```\n#### 主角视角\n...\n\n---\n\n#### 反派视角\n...\n```\n\n**只写可观察的**:\n```\n❌ 他不知道她在害怕\n✅ 他注意到她的手在抖\n```\n\n---\n\n## 症状9:信息倾倒\n\n### 典型错误\n\"这是发生在2087年的未来世界,由于第三次世界大战,地球环境恶化,人类不得不迁移到地下城市。我们的主角出生于...\"\n\n### 为什么错\n大段背景说明让读者失去兴趣。信息应该通过行动揭示。\n\n### 改写示范\n\n| 原句 | 改写 | 技巧 |\n|------|------|------|\n| 这个世界有严格的等级制度 | \"停下。\"守卫拦住他,\"D级不能进A区\" | 行动揭示 |\n| 主角来自一个贫困的家庭 | 他数着钱包里的硬币,只有七个 | 细节暗示 |\n| 这个组织很神秘 | 那个信封上没有寄件人,也没有邮票 | 物品暗示 |\n| 时间紧迫 | 他看了一眼手机:23:58。还有两分钟 | 具体数字 |\n\n### 信息揭示技巧\n\n**行动揭示**:\n```\n❌ 这个世界水资源短缺\n✅ 他把那半瓶水递过去,对方愣了一下才接\n```\n\n**对话揭示**:\n```\n❌ 主角是个侦探\n✅ \"你凭什么管我?\" \"凭这个。\"他亮出警徽\n```\n\n**代价揭示**:\n```\n❌ 使用魔法需要代价\n✅ 他念完咒文,发现自己说不出话了\n```\n\n---\n\n## 综合改写示例\n\n### 原文(重度AI味)\n\n```\n李明感到前所未有的愤怒和绝望。他情不自禁地握紧拳头,心中涌起一股难以名状的情绪。就在这时,门突然开了,他看到了张华。张华站在门口,目不转睛地看着他。\n\n\"我认为这件事我们需要好好谈谈。\"张华说。\n\n\"然而,我没有什么可说的。\"李明回答。\n\n张华若有所思地点点头。事实上,他已经知道了真相。不难看出,李明在隐瞒什么。\n```\n\n### 改写后\n\n```\n李明盯着那扇门,指节泛白。门开了。\n\n张华站在门口。他没有动,也没有说话。两个人隔着三步的距离,谁也没往前。\n\n\"我们得谈谈。\"张华说。\n\n\"没什么好说的。\"李明的声音比他想象的大。在空房间里,像一声枪响。\n\n张华点点头。他已经知道了。李明的沉默,本身就是答案。\n```\n\n### 改动说明\n\n| 原文 | 改动 | 原因 |\n|------|------|------|\n| 感到前所未有的愤怒和绝望 | 盯着那扇门,指节泛白 | 动作替代情绪标签 |\n| 情不自禁地握紧拳头 | 删除 | 前面已暗示 |\n| 就在这时,门突然开了 | 门开了 | 删除时间连接词 |\n| 他看到了张华 | 张华站在门口 | 直接呈现 |\n| 目不转睛地看着 | 删除 | 冗余描述 |\n| 我认为这件事我们需要好好谈谈 | 我们得谈谈 | 口语化 |\n| 然而,我没有什么可说的 | 没什么好说的 | 删除连接词 |\n| 张华若有所思地点点头 | 张华点点头 | 删除成语 |\n| 事实上,他已经知道了真相 | 他已经知道了 | 删除连接词 |\n| 不难看出,李明在隐瞒什么 | 李明的沉默,本身就是答案 | 展示代替告诉 |\n\n---\n\n## 快速检查清单\n\n修改完一段后,问自己:\n\n- [ ] 有没有\"感到/心中涌起\"类情绪标签?→ 改为动作\n- [ ] 有没有连续3个四字成语?→ 改为具体描写\n- [ ] 有没有\"就在这时/突然/然而\"?→ 删除或简化\n- [ ] 有没有\"解释/说明/总结\"?→ 改为展示\n- [ ] 有没有\"第一/第二/首先/其次\"?→ 改为自然叙述\n- [ ] 对话是否像论文?→ 增加打断、重复、半截话\n- [ ] 句式是否均匀?→ 长短交替,使用倒装、省略\n\n---\n\n*好的写作不是堆砌技巧,而是让技巧隐形。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":14313,"content_sha256":"d3f44eb96aeeade9cc5e0714b7d39dfd5e3b084bfc6863190e801626f2db266c"},{"filename":"references/chapter-guide.md","content":"# 章节写作指南\n\n每一章都应该是一个完整的叙事单元,同时推动整体故事向前发展。\n\n## ⚠️ 关键原则:前 20% 决定生死\n\n**读者在前 20% 的内容决定是否继续阅读。**\n\n如果开头不够吸引人,读者会放弃,无论后面写得多么精彩。\n\n### 前 20% 必须达到的效果\n\n1. **即时紧张感** - 读者立即感受到危机/冲突\n2. **重大事件** - 发生推动剧情的重要事情\n3. **情感冲击** - 读者产生强烈情绪(好奇、震惊、担忧)\n4. **继续阅读的欲望** - 迫切想知道接下来发生什么\n\n### 开头致命错误(绝对避免)\n\n| 错误类型 | 示例 | 为什么致命 |\n|---------|------|-----------|\n| 天气描写 | \"那天天气晴朗,万里无云...\" | 与故事无关,读者无耐心 |\n| 日常流程 | \"李明醒来,刷牙洗脸,吃早餐...\" | 无聊,没有冲突 |\n| 回顾上章 | \"上一章我们说到...\" | 读者已经知道,浪费时间 |\n| 缓慢铺垫 | \"先介绍一下这个城市的背景...\" | 信息倾倒,没有行动 |\n| 平淡对话 | \"你好,你好吗?我很好。\" | 无意义对话,没有张力 |\n| 过度解释 | \"这是因为,所以,然后...\" | 讲述而非展示 |\n\n---\n\n## 十种强力开头技巧\n\n### 1. 行动中开场(In Media Res)\n\n直接从冲突/动作的高潮点开始。\n\n**示例:**\n> 子弹擦过他的耳边,击碎了身后的花瓶。李明没有回头,翻滚躲到沙发后面。\n\n**为什么有效:** 立即建立紧张感,读者想知道为什么被打。\n\n### 2. 反常情境\n\n呈现一个不符合常理的场景,激发好奇。\n\n**示例:**\n> 死人坐在办公桌前,正在写一份报告。\n\n**为什么有效:** 不可能的事物,读者想了解怎么回事。\n\n### 3. 震撼对话\n\n用一句惊人的对话开场。\n\n**示例:**\n> \"我把孩子卖了。\" 妻子平静地说,继续翻阅杂志。\n\n**为什么有效:** 立即制造情感冲击和悬念。\n\n### 4. 倒计时开场\n\n从时间压力开始。\n\n**示例:**\n> 还有三分钟,炸弹就会爆炸。而拆弹包里少了一根红线。\n\n**为什么有效:** 紧迫感,读者想知道能否及时。\n\n### 5. 重大发现\n\n从发现关键线索/真相开始。\n\n**示例:**\n> 法医报告摊在桌上。死因不是意外,是精心策划的谋杀。而嫌疑人只有一个——他自己。\n\n**为什么有效:** 重大转折,重新理解之前的事件。\n\n### 6. 危机时刻\n\n从角色面临最大危机开始。\n\n**示例:**\n> 门被踹开的瞬间,她知道藏不住了。保险箱里的秘密即将曝光。\n\n**为什么有效:** 高风险,读者关心角色命运。\n\n### 7. 谜团浮现\n\n从无法解释的现象开始。\n\n**示例:**\n> 醒来时,他发现右手背上出现了一个从未见过的纹身。而他不记得昨晚发生了什么。\n\n**为什么有效:** 神秘感,读者想解开谜题。\n\n### 8. 背叛开场\n\n从背叛/信任崩塌开始。\n\n**示例:**\n> 枪口对准他的后背。\"对不起,\" 他信任了十年的搭档说,\"他们给的太多了。\"\n\n**为什么有效:** 情感冲击,角色陷入绝境。\n\n### 9. 重大选择\n\n从角色的艰难决定开始。\n\n**示例:**\n> 救生艇只能载一个人。她的丈夫和女儿都在冰冷的海水里挣扎。她伸出手——\n\n**为什么有效:** 道德困境,读者想知道她如何选择。\n\n### 10. 结局预告\n\n从未来的某个关键时刻开始,然后倒叙。\n\n**示例:**\n> 三天后,所有人都会后悔今天的决定。但此刻,会议室里的每个人都在微笑。\n\n**为什么有效:** 预示灾难,读者想知道如何发生。\n\n---\n\n## 标准章节结构\n\n### 1. 开头钩子(前 20%)⚠️ 最关键\n\n**必须包含:**\n- ✅ 即时冲突/危机\n- ✅ 重大事件/信息\n- ✅ 强烈情感冲击\n- ✅ 行动场景\n\n**使用上述十种技巧之一,或组合使用。**\n\n### 2. 发展推进(中间 50-60%)\n\n本章的核心内容,必须推进剧情或深化人物。\n\n**推进方式:**\n- **新信息揭示**:让读者/主角获得重要信息\n- **关系变化**:人物关系发生转变\n- **问题升级**:现状恶化,新危机出现\n- **角色成长**:主角获得新技能、新认知\n\n**避免:**\n- 纯粹的场景描写(风景、房间布局等)\n- 与剧情无关的人物互动\n- 重复已知的对话\n\n### 3. 高潮时刻(后 15-20%)\n\n本章的情感或动作最高点。\n\n**高潮类型:**\n- **动作高潮**:战斗、追逐、对抗\n- **情感高潮**:重大发现、背叛、告白、牺牲\n- **心理高潮**:主角的内心转折点\n\n### 4. 结尾钩子(最后 5-10%)\n\n留下悬念,让读者想看下一章。详见 [hook-techniques.md](hook-techniques.md)\n\n---\n\n## 章节类型分类\n\n### 情节推进章\n\n**目的**:推动主线剧情发展\n**特征**:有明确的事件进展、重要信息揭示\n**示例**:主角发现线索、敌人发动攻击、盟友背叛\n\n### 人物深化章\n\n**目的**:深化读者对人物的理解\n**特征**:揭示人物背景、动机、内心冲突\n**示例**:回忆片段、私密对话、独处时刻\n**注意**:必须与主线相关,不能是纯粹的人物小传\n\n### 氛围营造章\n\n**目的**:建立特定情绪或紧张感\n**特征**:注重感官描写、节奏控制\n**示例**:暴风雨前的宁静、潜伏行动、等待审判\n\n### 过渡衔接章\n\n**目的**:连接两个重大事件\n**特征**:信息整理、位置转换、时间跳跃\n**注意**:保持简洁,避免拖沓\n\n---\n\n## 章节节奏控制\n\n### 节奏变化\n\n同一章内应包含节奏变化:\n\n```\n紧张 → 缓解 → 新紧张 → 更紧张\n```\n\n示例:\n```\n紧张:主角被追捕\n缓解:躲进安全屋,短暂喘息\n新紧张:发现安全屋已被入侵\n更紧张:必须立即逃离\n```\n\n### 信息密度\n\n- **高密度**:动作场面、大量对话、快速事件\n- **低密度**:内心独白、环境描写、情感沉淀\n\n**原则**:高低密度交替,避免持续高密度(读者疲劳)或持续低密度(读者无聊)\n\n---\n\n## 章节长度与内容密度对照\n\n| 章节字数 | 核心事件数量 | 场景数量 |\n|---------|-------------|---------|\n| 800-1500 | 1 个主要事件 | 1-2 个场景 |\n| 1500-3000 | 1-2 个主要事件 | 2-3 个场景 |\n| 3000-5000 | 2-3 个主要事件 | 3-5 个场景 |\n\n**原则**:每章至少包含一个不可删除的核心事件。如果一个事件可以移除而不影响理解,则应删除。\n\n---\n\n## 章节写作检查清单\n\n撰写每章后自查:\n\n### ⚠️ 开头检查(最关键)\n- [ ] **前 20% 是否极其吸引人?**(如果不是,重写)\n- [ ] 是否在第一段就建立冲突/紧张?\n- [ ] 是否有重大事件或信息揭示?\n- [ ] 是否有强烈的情感冲击?\n- [ ] 读者是否会迫切想知道接下来发生什么?\n- [ ] 是否避免了所有\"致命错误\"?(天气、日常、回顾等)\n\n### 内容检查\n- [ ] 本章是否推进了主线剧情或深化了人物?\n- [ ] 是否有冲突或转折?\n- [ ] 对话是否推动情节或揭示人物?\n- [ ] 是否展示了而非讲述了关键信息?\n- [ ] 结尾是否留下悬念钩子?\n- [ ] 是否为下一章埋下伏笔?\n\n### 开头自测问题\n如果对开头有任何问题回答\"否\",必须重写:\n1. 读者读了前三段后,会想继续读吗?\n2. 开头是否有冲突或危机?\n3. 开头是否有意外或转折?\n4. 开头是否让读者产生强烈情绪?\n5. 开头是否避免了平淡的日常/天气/背景说明?\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":7592,"content_sha256":"b68d6ec967293be161fa5f0af9a5186ed841c8d8626b1e8a8930249006bfe4f3"},{"filename":"references/chapter-template.md","content":"# 第[X]章:[章节标题]\n\n## 本章任务卡\n- **章节功能**:\n- **承接上章**:\n- **本章目标**:\n- **主要阻碍**:\n- **情绪推进**:\n- **关键转折**:\n- **结尾钩子**:\n\n## 场景拆分\n1. **场景一**:起始冲突 / 进入方式\n2. **场景二**:信息推进 / 关系变化\n3. **场景三**:转折 / 升级\n4. **场景四**:钩子落点\n\n---\n\n## 正文\n\n[正文放在这里。长篇默认建议 2500-4000 字;如果项目目标是重度连载或出版向长章,可提升到 3000-5000 字。]\n\n---\n\n## 章节复盘\n- **本章摘要**:\n- **新增信息 / 伏笔**:\n- **已回应悬念**:\n- **人物状态变化**:\n- **下一章必须处理**:\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":699,"content_sha256":"a4e3294a46da7f94c8a5de1ca2bf5aff89ab8818329e5a6af44fab11f3f79baf"},{"filename":"references/character-building.md","content":"# 人物塑造原则\n\n好的人物是故事的灵魂。读者记住的是人,不是情节。\n\n## 人物档案模板\n\n每个主要角色都应建立完整档案:\n\n### 基本信息\n\n```\n姓名:(有意义的名字更好)\n年龄:\n职业:\n外貌特征:(2-3个显著特征,避免泛泛而谈)\n```\n\n### 性格核心\n\n```\n核心价值观:(他最相信什么)\n最大恐惧:(他最害怕什么)\n致命缺陷:(什么会导致他失败)\n内心渴望:(他真正想要什么)\n```\n\n### 背景故事\n\n```\n成长环境:\n创伤经历:(过去伤害他的事)\n关键记忆:(塑造他现在的关键事件)\n秘密:(别人不知道的事)\n```\n\n### 行为模式\n\n```\n说话方式:(口头禅、语速、用词习惯)\n肢体语言:(习惯动作、紧张时的小动作)\n社交风格:(内向/外向、如何对待陌生人)\n压力反应:(压力下如何表现)\n```\n\n---\n\n## 人物类型塑造\n\n### 主角(Protagonist)\n\n**必须有:**\n- **明确目标** - 他想要什么\n- **强大动机** - 为什么想要\n- **可共情性** - 读者能理解他的感受\n- **成长空间** - 故事中会改变\n\n**主角原型:**\n| 类型 | 特征 | 故事作用 |\n|-----|------|---------|\n| 英雄型 | 勇敢、正义、利他 | 战胜外在威胁 |\n| 成长型 | 从弱小到强大 | 克服内在缺陷 |\n| 反英雄型 | 道德灰色、复杂 | 挑战传统道德 |\n| 平凡型 | 普通人卷入非凡事 | 读者代入感强 |\n\n### 反派(Antagonist)\n\n**好反派的特点:**\n- **强大可信** - 不应该是草台班子\n- **有自己的逻辑** - 他相信自己在做正确的事\n- **与主角有深层联系** - 不是单纯为了作恶\n- **揭示主题** - 挑战主角的信念\n\n**反派动机类型:**\n- 理想主义扭曲(\"为了大局必须牺牲\")\n- 过去创伤(\"世界伤害了我,我要报复\")\n- 权力渴望(\"我配得上更多\")\n- 与主角相同目标(不同方法)\n\n### 配角(Supporting Characters)\n\n**配角功能:**\n- **导师型** - 指引主角,传递信息\n- **盟友型** - 协助主角,提供情感支持\n- **搞笑型** - 缓解紧张,提供喜剧元素\n- **爱情型** - 制造浪漫线索,增加个人利害\n- **叛徒型** - 制造背叛和转折\n\n**配角原则:**\n- 每个配角必须有明确作用\n- 删除\"只是存在\"的角色\n- 避免刻板印象(除非是有意为之)\n\n---\n\n## 人物深度塑造技巧\n\n### 1. 矛盾性\n\n真实的人是复杂的,充满矛盾。\n\n**示例:**\n- 暴力的黑帮成员但爱护流浪猫\n- 无神论的牧师\n- 害怕黑暗的侦探\n- 重视友情但总是背叛朋友\n\n### 2. 侧面揭示\n\n不要直接陈述性格,通过行为展示。\n\n| 错误(直接陈述) | 正确(侧面展示) |\n|----------------|----------------|\n| 他很愤怒 | 他捏碎手中的纸杯 |\n| 她很紧张 | 她反复调整眼镜位置 |\n| 他很傲慢 | 他从不直视下属的眼睛 |\n| 她很善良 | 她偷偷喂流浪狗三年 |\n\n### 3. 声音独特性\n\n每个人说话方式不同,对话中能分辨角色。\n\n**区分要素:**\n- 用词选择(正式/俚语/方言)\n- 句子长度\n- 是否打断别人\n- 是否喜欢隐喻\n- 情绪表达方式\n\n### 4. 动机合理化\n\n每个角色行为必须有合理动机,即使动机扭曲。\n\n**反派动机合理化示例:**\n- \"我想毁灭世界\" → 乏味\n- \"我失去了一切,世界对我没有意义\" → 可理解但扭曲\n- \"人类是地球的病毒,我必须清除\" → 有哲学支撑\n\n### 5. 缺陷致命化\n\n主角必须有缺陷,缺陷在关键时刻导致失败。\n\n**经典缺陷模式:**\n| 缺陷 | 导致的失败 |\n|-----|----------|\n| 傲慢 | 低估对手,落入陷阱 |\n| 信任问题 | 拒绝帮助,孤立无援 |\n| 完美主义 | 无法及时行动,错失机会 |\n| 复仇心 | 被利用,失去理智 |\n\n---\n\n## 人物关系设计\n\n### 关系类型\n\n| 关系 | 戏剧潜力 | 应用 |\n|-----|---------|-----|\n| 亦敌亦友 | 高 | 悬疑、动作 |\n| 禁忌之爱 | 高 | 言情、悲剧 |\n| 师徒关系 | 中 | 成长故事 |\n| 兄弟竞争 | 中 | 家庭剧 |\n| 陌生人联盟 | 中 | 冒险、悬疑 |\n\n### 关系动态变化\n\n**好的关系会随故事发展:**\n```\n第一章:陌生人\n第三章:不情愿的盟友\n第五章:建立信任\n第七章:背叛/考验\n终章:真正的友谊(或决裂)\n```\n\n### 关系揭示\n\n**逐步揭示关系深度:**\n- 表层:表面互动\n- 中层:共同经历\n- 深层:真实感受/秘密\n\n---\n\n## 人物一致性检查\n\n角色行为必须符合已建立的性格。\n\n**检查问题:**\n- 这件事符合他的核心价值观吗?\n- 以他的背景,会有这样的反应吗?\n- 他的恐惧会如何影响这个决定?\n- 他的缺陷会导致他犯什么错?\n\n**例外处理:**\n- 如果角色\"不符合性格\"行事,必须有原因\n- 解释应该在相同/下一章提供\n- 可以是成长的标志(角色克服缺陷)\n\n---\n\n## 人物出场设计\n\n### 首次出场原则\n\n**有效的出场方式:**\n- **行动中** - 展示能力或性格\n- **冲突中** - 立即建立关系/对立\n- **误解中** - 建立悬念\n\n**避免:**\n- 镜子自照描写外貌\n- 姓名+年龄+职业的简历式介绍\n- 无意义的日常活动\n\n### 出场示例对比\n\n| 无效出场 | 有效出场 |\n|---------|---------|\n| 李明,28岁,是一名侦探。他走进办公室。| 李明跨过警戒线,警官试图拦住他。\"市刑警队,李明。\"他亮出证件,径直走向尸体。|\n| 美丽的女孩坐在窗边,她叫小红。| 她已经三天没睡了,咖啡杯里的液体在颤抖。当门铃响起时,她几乎把杯子摔在地上。|\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5691,"content_sha256":"4fb405c8d86fd8fabc237a4c78c97ffe2aabb6a4cdd6fc9e75f58594c66efe92"},{"filename":"references/character-template-v2.md","content":"# 人物档案v2(驱动式引擎)\n\n> 人物档案不是静态记录,而是驱动写作决策的引擎。\n\n---\n\n## 核心理念\n\n**v1版本的问题**:填写后变成静态文档,写作时无法调用。\n\n**v2版本的目标**:每个字段都能转化为具体的写作约束。\n\n---\n\n## 核心引擎(必须回答)\n\n### 1. 欲望-恐惧双引擎\n\n**自觉欲望**(主角认为Ta想要的):\n```\n例子:成为武林盟主 / 找到真爱 / 查明真相\n```\n\n**不自觉欲望**(主角真正需要的):\n```\n例子:被认可 / 自我接纳 / 放下执念\n```\n\n**核心恐惧**(如果欲望不能实现,最坏的结果):\n```\n例子:孤独终老 / 失去自我 / 被所有人背叛\n```\n\n**道德前提**(主角相信的\"真理\",将在故事中被挑战):\n```\n例子:\"只有强大才能被爱\" / \"真相总会大白\"\n```\n\n### 2. 声音指纹\n\n**标志性对白样本**(3-5句,写作时的锚点):\n```markdown\n1. \"从理论上看,这个问题至少有三个漏洞。\"(教授型)\n2. \"扯淡。那帮人就是想蒙你。\"(街头型)\n3. \"我......我是说,如果你不介意的话......\"(害羞型)\n```\n\n**禁止用语**(这个人物绝对不会说的话):\n```markdown\n- 绝对不会说:\"我爱你\"(只说\"你今天看起来不错\")\n- 绝对不会说:\"对不起\"(用行动补偿)\n- 绝对不会说脏话\n```\n\n**情绪状态下的声音变化**:\n```markdown\n- 愤怒时:短句,重复,打断别人\n- 恐惧时:迟疑,破碎句,语速变慢\n- 开心时:话多,使用俚语/方言\n```\n\n### 3. 缺陷-失败映射\n\n**固有缺陷**:\n```\n例子:过度自信 / 回避冲突 / 控制欲强\n```\n\n**缺陷导致的典型行为**:\n```markdown\n- 听到反对意见时立刻反驳\n- 遇到压力时选择逃避\n- 对亲近的人 micromanaging\n```\n\n**缺陷可能造成的失败场景**(必须发生2-3次):\n```markdown\n1. 第X章:因过度自信低估敌人,导致队友受伤\n2. 第Y章:关键决策时因回避冲突失去机会\n3. 第Z章:控制欲让重要人物离开\n```\n\n**缺陷被克服/被接受的转折点**:\n```\n第___章:主角意识到缺陷并付出代价,开始改变\n```\n\n---\n\n## 人物弧线(可追踪的里程碑)\n\n### 弧线模板\n\n```markdown\n| 章节 | 触发事件 | 变化类型 | 变化描述 | 代价 |\n|------|---------|---------|---------|------|\n| 第1章 | 初始状态 | - | 懦弱、逃避 | - |\n| 第5章 | 好友因Ta的懦弱而受伤 | 前进 | 第一次主动面对 | 好友受伤 |\n| 第12章 | 误以为胜利在望 | 倒退 | 再次逃避,失去信任 | 团队解散 |\n| 第20章 | 看到逃避的后果 | 前进 | 决心改变 | 承认错误 |\n| 第30章 | 最终对决 | 完成 | 勇敢面对,不再逃避 | 重伤但获胜 |\n```\n\n### 变化类型定义\n\n- **前进**:向目标状态迈进\n- **倒退**:回到旧模式(重要!人物弧线不是直线)\n- **完成**:达到目标状态\n- **揭示**:隐藏的一面暴露\n\n### 关键规则\n\n1. **必须有倒退**:真实的人物成长是进三步退两步\n2. **每次变化必须有代价**:没有代价的改变不真实\n3. **变化要可见**:必须体现在行动和选择上\n\n---\n\n## 关系张力网络\n\n### 双人对立表\n\n对每一对重要关系:\n\n```markdown\n### 主角 vs 反派\n\n**欲望冲突**:\n- 主角想要:查明真相\n- 反派想要:隐藏真相\n- 冲突点:只有一个能如愿\n\n**信息差**:\n- 主角知道:___\n- 反派知道:___\n- 观众知道:___(可以高于/低于双方)\n\n**权力关系变化**:\n| 章节 | 权力状态 | 主导者 |\n|------|---------|--------|\n| 第1章 | 反派绝对强势 | 反派 |\n| 第10章 | 势均力敌 | 平衡 |\n| 第20章 | 主角占据主动 | 主角 |\n```\n\n### 群像场景张力\n\n**三人及以上场景的默认张力模式**:\n\n```markdown\n### 场景类型:团队决策\n\n**人物A**:想要X(推动)\n**人物B**:想要Y(反对A)\n**人物C**:想要Z(和事佬/骑墙)\n\n**预设冲突**:\n- A和B直接对立\n- C的犹豫加剧矛盾\n- 决策必须在压力下做出\n\n**场景结果**:\n- 有人妥协(关系变化)\n- 或者分裂(关系破裂)\n```\n\n---\n\n## 写作调用协议\n\n### 开写前提取(AI自动执行)\n\n```markdown\n## 人物约束提取\n\n**主角[XXX]**:\n- 核心价值观:___(用于判断行为合理性)\n- 当前恐惧:___(用于决策影响)\n- 声音锚点:___(3句标志性对白)\n- 当前缺陷状态:___(是否准备好付出代价)\n\n**反派[XXX]**:\n- 真实动机:___(不是表面目标)\n- 与主角的镜像点:___\n- 弱点:___(可被利用)\n\n**场景关系状态**:\n- A与B:信任度___%(影响互动方式)\n- B与C:权力关系___(谁主导)\n```\n\n### 写作时实时约束\n\n每生成一段人物相关内容,检查:\n\n- [ ] **行为检查**:这个决策能否由核心价值观+恐惧推导?\n- [ ] **对白检查**:是否符合声音锚点?是否使用了禁止用语?\n- [ ] **关系检查**:双方互动是否符合当前的信任度/权力关系?\n- [ ] **缺陷检查**:缺陷是否影响了决策(正面或负面)?\n\n### 场景结束后更新\n\n```markdown\n## 本场景人物变化\n\n**主角[XXX]**:\n- 变化:___(情绪/认知/关系/处境)\n- 代价:___(付出了什么)\n- 下章影响:___\n\n**关系变化**:\n- A与B:信任度 ___% → ___%\n- 原因:___\n```\n\n---\n\n## 人物一致性自动检查\n\n### 检查项\n\n1. **声音一致性**\n - 本场景对白与声音锚点对比\n - 标记风格突变的句子\n\n2. **行为一致性**\n - 决策是否符合核心价值观\n - 是否与恐惧/欲望冲突\n\n3. **关系一致性**\n - 互动方式是否符合当前关系状态\n - 是否有未铺垫的突然亲近/疏远\n\n4. **弧线一致性**\n - 本场景是否推进了人物弧线\n - 变化是否有代价\n\n### 输出示例\n\n```\n人物一致性检查报告:第X章\n\n🔴 声音不一致\n位置:第3段\n当前:\"我认为这个假设有三个漏洞。\"\n问题:太学术,不符合该人物\"街头型\"声音锚点\n建议:改为\"扯淡。这说法有三个问题。\"\n\n🟡 行为可能有疑问\n位置:第10段\n行为:主角主动承认错误\n问题:与\"回避冲突\"缺陷冲突\n建议:要么增加内心挣扎描写,要么改为被迫承认\n\n✅ 关系一致\nA与B的互动符合当前30%信任度设定\n```\n\n---\n\n## 与进度仪表盘的集成\n\n进度仪表盘的「人物状态」区块自动从人物档案提取:\n\n```markdown\n## 👥 人物状态\n\n| 角色 | 当前位置 | 当前情绪 | 关键变化 | 下章预期 |\n|------|---------|---------|---------|---------|\n| 主角 | 逃离现场 | 恐惧+自责 | 因懦弱导致失败 | 必须做出改变 |\n| 反派 | 总部 | 得意 | 确认了主角的弱点 | 准备下一击 |\n| 导师 | 医院 | 失望 | 对主角失去信心 | 可能离开团队 |\n\n**关键提醒**:\n⚠️ 主角已连续3章处于\"恐惧\"状态,建议下一章转为\"愤怒\"或\"决心\"\n⚠️ 导师与主角信任度降至20%,接近破裂临界点\n```\n\n---\n\n## 常见错误修正\n\n### ❌ 错误1:完美主角\n\n**表现**:主角聪明、勇敢、善良,没有明显缺陷。\n\n**后果**:\n- 缺乏成长空间\n- 难以让读者产生共鸣\n- 选择没有代价\n\n**修正**:\n- 增加一个**致命的**性格缺陷\n- 确保缺陷在第5章、第15章、第25章各导致一次失败\n- 结局时缺陷被克服或被接受(不是消失,是管理)\n\n### ❌ 错误2:声音同质化\n\n**表现**:所有角色说话都像作者换个名字。\n\n**修正**:\n- 为每个主要角色设计3-5句标志性对白\n- 设定\"禁止用语\"(这个人物绝对不会说的话)\n- 情绪波动时变化声音特征\n\n### ❌ 错误3:关系跳跃\n\n**表现**:第5章还是陌生人,第6章就成生死之交。\n\n**修正**:\n- 使用信任度量化(0%→30%→60%→90%)\n- 每次关系变化必须有具体事件支撑\n- 倒退同样重要(信任度可以下降)\n\n### ❌ 错误4:弧线直线化\n\n**表现**:主角从懦弱变勇敢是一条直线。\n\n**修正**:\n- 设计至少2次\"倒退\"(以为自己变了,其实没有)\n- 每次前进和倒退都有明确触发事件\n- 最终克服缺陷时,必须有足够代价铺垫\n\n---\n\n## 快速启动模板\n\n如果只有10分钟建立人物档案,只填这5项:\n\n```markdown\n## 人物快速档案\n\n**名字**:\n**欲望**(想要的):\n**恐惧**(最怕失去的):\n**缺陷**(最大的):\n**标志性对白**(3句):\n1.\n2.\n3.\n\n**禁止用语**(绝对不会说的话):\n```\n\n写作时,对照这5项检查即可。\n\n---\n\n## 检查清单\n\n每章交付前:\n\n- [ ] 主角行为符合核心价值观\n- [ ] 人物对白符合声音锚点(没有使用禁止用语)\n- [ ] 关系互动符合当前信任度\n- [ ] 本场景是否推进了人物弧线(前进或倒退)\n- [ ] 变化是否有代价\n\n---\n\n*好的人物不是被描述出来的,而是在选择中显现出来的。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":9033,"content_sha256":"1ce3472a9693d3d02714e6429109359fb43824b24a6be47459a95046d58377b0"},{"filename":"references/character-template.md","content":"> ⚠️ **此为 v1 版本,已过时。推荐使用 [character-template-v2.md](character-template-v2.md)(驱动式引擎,含欲望 - 恐惧双引擎、声音指纹、缺陷 - 失败映射)。本文件仅作参考保留。**\n\n# 人物档案\n\n## 主角\n\n### [角色姓名]\n- **身份 / 职业**:\n- **年龄 / 阶段**:\n- **外貌识别点**:\n- **一句话定位**:\n- **最大欲望**:\n- **内在需求**:\n- **致命缺陷**:\n- **核心价值观**:\n- **最大恐惧**:\n- **秘密**:\n- **背景创伤 / 关键记忆**:\n- **说话风格**:\n- **习惯动作**:\n- **人物弧线(起点 → 终点)**:\n- **与主线冲突的关系**:\n\n## 反派\n\n### [角色姓名]\n- **身份 / 位置**:\n- **表层目标**:\n- **真实动机**:\n- **为何自认正确**:\n- **与主角的镜像关系**:\n- **力量 / 资源**:\n- **弱点**:\n- **秘密**:\n- **首次出场方式**:\n\n## 关键配角\n\n### [角色姓名]\n- **功能定位**:导师 / 盟友 / 爱情线 / 对照组 / 叛徒 / 信息源\n- **与主角关系**:\n- **个人目标**:\n- **能提供什么推进**:\n- **会制造什么麻烦**:\n- **说话风格 / 识别点**:\n\n## 关系变化表\n\n| 关系双方 | 初始状态 | 中段变化 | 高潮状态 | 结局状态 |\n|----------|----------|----------|----------|----------|\n| | | | | |\n\n## 当前状态快照\n\n| 角色 | 当前位置 | 当前情绪 | 当前公开目标 | 当前隐藏动机 |\n|------|----------|----------|--------------|--------------|\n| | | | | |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1619,"content_sha256":"462ca79fc4086692c2f37355cd9d7e121a02ef801704440cae9dd6686d4b2e31"},{"filename":"references/consistency.md","content":"# 连贯性保证机制\n\n长篇最容易崩的,不是某一章写差,而是写到中段后人物、时间线、伏笔和设定互相打架。\n\n## 每章开写前先看什么\n\n开写前至少回看这 4 处:\n\n1. `00-大纲.md` 的最近 2-3 章摘要\n2. 上一章正文\n3. `01-人物档案.md` 的当前状态快照\n4. `02-世界观与伏笔.md` 的伏笔、时间线、角色状态表\n\n如果要写重大转折,先把相关章节再读一遍,不要只凭印象续写。\n\n## 四张必须维护的账\n\n### 1. 人物状态账\n\n- 人在哪\n- 身上带着什么信息或物品\n- 当前情绪和判断\n- 与关键角色的关系温度\n- 眼下公开目标和隐藏动机\n\n### 2. 时间线账\n\n- 当前是当天、次日、隔了几周,还是多年后\n- 各人物在同一时间点是否能出现在那个地点\n- 消息、旅途、伤势恢复、修炼成长是否需要时间\n\n### 3. 伏笔账\n\n- 这个坑什么时候埋的\n- 读者现在知道多少\n- 文中角色知道多少\n- 什么时候该回应,什么时候还不能揭\n\n### 4. 规则账\n\n- 这个世界允许什么,不允许什么\n- 代价是否一致\n- 同类事件是否遵守同一套规则\n\n## 写作中的三种连贯操作\n\n### 回应\n\n对上一章或更早埋下的问题给出反馈,让读者感觉作者记得。\n\n### 升级\n\n旧悬念不能总停留在原地,要么扩大代价,要么扩大真相范围。\n\n### 偏转\n\n让读者以为问题是 A,结果推进后发现真正的问题是 B,但必须能回溯自洽。\n\n## 最常见的断裂点\n\n### 人物断裂\n\n- 前面极度谨慎,后面突然莽撞\n- 前面不信任某人,后面突然完全托底\n\n### 情节断裂\n\n- 上章刚埋的钩子,这章完全不提\n- 重要线索出现后,无人讨论、无人处理\n\n### 时间断裂\n\n- 角色像瞬移\n- 重伤角色下一章像没受过伤\n- 多线叙事互相对不上日期\n\n### 设定断裂\n\n- 为了解围临时新增能力\n- 规则代价前后不一致\n\n## 章节写完后必须回写\n\n至少把这些信息写回台账:\n\n- 本章新增线索\n- 本章回应了哪个旧悬念\n- 本章新开的悬念\n- 人物状态变化\n- 时间推进\n- 物品 / 证据 / 能力变化\n\n## 快速自查\n\n- [ ] 上章结尾的压力,这章有没有接住\n- [ ] 本章出现的重要信息,后文有没有机会继续处理\n- [ ] 人物行为是否符合既有伤口、欲望、恐惧和关系状态\n- [ ] 时间、地点、物品、伤势、能力是否可追踪\n- [ ] 伏笔是推进了,不是被遗忘了\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2500,"content_sha256":"cbc994ed21f6067b62f155c132af7502694d9926a7a6d3a018682e3bac11144b"},{"filename":"references/content-expansion.md","content":"# 内容扩充技巧\n\n当章节内容不足时,使用以下技巧自然扩充。\n\n## 1. 场景细节描写\n\n不要只说\"他走进房间\",描写:\n- 房间的布局、光线、气味\n- 物品的细节和质感\n- 环境对人物的影响\n- 人物在空间中的移动\n\n## 2. 人物内心活动\n\n展示而非讲述内心世界:\n- 角色的犹豫和纠结\n- 过去记忆的闪回(1-2段)\n- 对未来的担忧和期待\n- 道德选择的内心辩论\n\n## 3. 对话扩展\n\n不要只推进剧情,让对话:\n- 展现人物性格和说话方式\n- 包含潜台词和暗示\n- 有来回交锋和试探\n- 偶尔跑题再拉回(更真实)\n\n## 4. 感官体验\n\n调动五感描写:\n- 视觉:颜色、光影、形状\n- 听觉:声音、音乐、沉默\n- 触觉:温度、质感、疼痛\n- 嗅觉:气味、香味、腐臭\n- 味觉:食物、饮料、血腥味\n\n## 5. 次要情节线\n\n在主剧情中穿插:\n- 配角的小故事\n- 暗线的发展\n- 伏笔的埋设\n- 人物关系的微妙变化\n\n## 6. 节奏放慢\n\n关键时刻慢下来描写:\n- 动作场景的分解\n- 情感转变的过程\n- 发现真相的时刻\n- 紧张对峙的延展\n\n## 7. 环境烘托\n\n用环境反映情绪:\n- 天气和氛围\n- 社会环境背景\n- 文化习俗细节\n- 时代特征展现\n\n## 扩充原则\n\n- **自然融入** - 扩充内容要服务于故事,不要注水\n- **保持张力** - 即使扩充场景也不能失去冲突\n- **推进主线** - 所有扩充最终都要指向核心剧情\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1490,"content_sha256":"c58764582fc3cc003462a4ad3f421acd0028997bb7c0007a172ded3569474bbd"},{"filename":"references/dialogue-writing.md","content":"# 对话写作规范\n\n好对话要同时做到三件事:推动情节、暴露人物、制造张力。真正差的对白,不是不够漂亮,而是说了很多,局面却没有变化。\n\n## 对话核心原则\n\n### 1. 每段对白都要有任务\n\n对白至少命中以下一项:\n\n| 任务 | 示例 |\n|------|------|\n| 推动情节 | “我找到凶器了,在河边草丛里。” |\n| 揭示人物 | “我不信警察,他们从来不帮我这样的人。” |\n| 制造冲突 | “你骗了我。你从头到尾都在骗我。” |\n| 传递信息 | “炸弹会在三点引爆。” |\n| 改变关系 | “从现在起,你别再叫我名字。” |\n| 制造悬念 | “你知道那天晚上真正发生了什么吗?” |\n\n### 2. 让双方目标不同\n\n一段对白里,最怕两个人都只是在交换信息。更有效的情况是:\n\n- A 想套话,B 想隐瞒\n- A 想靠近,B 想维持距离\n- A 想求和,B 想算旧账\n\n### 3. 真正的人不会完整表达\n\n真实对话常包含:\n\n- 打断\n- 迟疑\n- 话题转移\n- 只说一半\n- 用沉默代替回答\n\n## 中文格式建议\n\n### 标点和引号\n\n优先使用中文全角引号和中文标点:\n\n```text\n“说话内容。”他说。\n“说话内容?”她问。\n“说话内容!”他大喊。\n```\n\n多行对话:\n\n```text\n“第一句话。”他说,“第二句话。”\n\n“第一句话。\n第二句话。”他说,“第三句话。”\n```\n\n对话动作:\n\n```text\n“说话内容。”他把杯子放下。\n他把杯子放下。“说话内容。”\n```\n\n项目内格式要统一,不要半角全角混用。\n\n### 标签使用\n\n规则:\n\n- 能辨识说话人时,省略标签\n- 优先用“说”“问”这类中性标签\n- 少用“愤怒地说”“悲伤地说道”这类解释式副词\n\n| 过度使用 | 改进后 |\n|---------|--------|\n| “你骗了我。”他愤怒地说。 | “你骗了我。”他的声音发紧。 |\n| “好的。”她高兴地同意道。 | 她眼睛亮了。“好的。” |\n| “我不知道。”他悲伤地回答。 | 他低下头。“我不知道。” |\n\n更自然的中文写法通常是:\n\n- “对话。”他说。\n- 他说:“对话。”\n- “前半句,”他说,“后半句。”\n\n### 段落划分\n\n每个说话人的发言开始新段落。\n\n```text\n正确:\n“第一句。”甲说。\n“第二句。”乙回答。\n“第三句。”甲点头。\n\n错误:\n“第一句。”甲说。“第二句。”乙回答。“第三句。”甲点头。\n```\n\n## 角色声音区分\n\n每个主要角色都该有自己的声音,不要所有人都像作者换个名字在说话。\n\n### 区分维度\n\n| 维度 | 可区分方式 |\n|------|------------|\n| 用词 | 正式、俚语、专业术语、方言 |\n| 句式 | 长句、短句、破碎句 |\n| 语气 | 温和、尖锐、冷嘲、平淡 |\n| 停顿 | 流畅、迟疑、频繁打断 |\n| 习惯语 | 固定口头禅、特定说法 |\n\n### 声音示例\n\n教授型:\n\n> “从理论上看,这个假设至少有三个漏洞。”\n\n街头型:\n\n> “扯淡。那帮人就是想蒙你。”\n\n害羞型:\n\n> “我……我是说,如果你不介意的话……”\n\n傲慢型:\n\n> “让我来告诉你,什么叫专业。”\n\n## 潜台词\n\n好的对白,真正的意思常常不在字面上。\n\n| 直接说法 | 更有戏的说法 |\n|---------|--------------|\n| “我很生气。” | “没事。我挺好的。真的。” |\n| “我喜欢你。” | “你今天看起来……不错。” |\n| “我不信任你。” | “谢谢你告诉我。我会记住的。” |\n| “我想离开。” | “这个地方空气不太好。” |\n\n### 常见潜台词技巧\n\n1. 话题转移\n\n```text\n“你爱我吗?”\n“你看天气预报了吗?明天有雨。”\n```\n\n2. 反问代替回答\n\n```text\n“你杀了他吗?”\n“你觉得像我这样的人会做那种事?”\n```\n\n3. 沉默和动作\n\n```text\n“你愿意原谅我吗?”\n她继续翻杂志,没有抬头。\n```\n\n## 对话与动作结合\n\n动作不是装饰,而是对白的一部分。\n\n### 一致\n\n> “我爱你。”她抱紧他,声音发抖。\n\n### 矛盾\n\n> “我完全支持你。”他看向别处,手却在口袋里攥紧。\n\n### 动作打断\n\n```text\n“我本来想告诉你,”他停下脚步,回过身,“但我想你已经知道了。”\n```\n\n### 动作替代标签\n\n```text\n“你在撒谎。”她拍案而起。\n“坐下。”他头也不抬。\n```\n\n## 常见场景的对白节奏\n\n### 争吵场景\n\n特征:\n\n- 短句\n- 打断\n- 重复强调\n- 情绪升级\n\n示例:\n\n> “你答应过的!”\n> “情况变了!”\n> “那是你的借口!”\n> “你根本不懂!”\n> “我当然不懂!你什么都不告诉我!”\n\n### 告白场景\n\n特征:\n\n- 迟疑\n- 停顿\n- 寻找词语\n- 真诚或尴尬\n\n示例:\n\n> “我……我想说……这些年,我一直在想……如果我们……”\n> 她低下头,声音变小。\n> “如果我们什么?”\n> “如果我们早一点相遇。”\n\n### 审讯场景\n\n特征:\n\n- 提问控制\n- 信息不对称\n- 压力递增\n- 试探和误导并存\n\n示例:\n\n> “那天晚上你在哪里?”\n> “在家。”\n> “有人能证明吗?”\n\n## 快速自查\n\n- [ ] 这段对白里双方目标是否不同\n- [ ] 说完后,局面或关系是否发生变化\n- [ ] 能不能少写一句解释,多写一个动作\n- [ ] 把人名遮住后,主要角色的声音还能区分吗\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5450,"content_sha256":"ba86f83ebdef3052b8de28b2eae6e9b7b323a66a2af4333000634c8db6da2953"},{"filename":"references/ending-design.md","content":"# 结局设计与兑现\n\n差结局最常见的不是“不够震撼”,而是没有兑现前面答应过读者的东西。\n\n## 结局先看兑现,不先看反转\n\n写结局前先问:\n\n1. 主线问题有没有回答\n2. 主角弧线有没有完成\n3. 核心关系有没有落点\n4. 关键伏笔有没有回收\n5. 这本书一开始承诺的快感有没有交货\n\n如果这五件事没完成,再大的反转也救不了结局。\n\n## 结局必须完成的三层收束\n\n### 1. 事件收束\n\n- 冲突结束或进入明确的新状态\n- 真相揭示、胜负已分或选择已经做下\n\n### 2. 人物收束\n\n- 主角与开局相比发生了什么变化\n- 这个变化是成长、堕落、认清现实,还是完成执念\n\n### 3. 情绪收束\n\n- 读者最后应该带着什么情绪离场\n- 释然、心痛、兴奋、余震、温柔留白,都可以,但要稳定\n\n## 常见结局类型\n\n### 圆满兑现\n\n主线解决,角色得到应得结果,适合大部分商业向和情感向作品。\n\n### 代价式胜利\n\n问题解决了,但主角失去了重要东西,适合悬疑、冒险、成长故事。\n\n### 开放式结局\n\n可以保留余味,但核心问题必须大致解决。开放不等于不写清楚。\n\n### 反讽式结局\n\n角色达成了目标,却失去了更重要的东西,适合黑色、现实、心理类型作品。\n\n## 伏笔回收优先级\n\n结局前先排三层优先级:\n\n### 必回收\n\n- 主线谜底\n- 关键人物关系\n- 核心世界规则\n\n### 最好回收\n\n- 中段重点伏笔\n- 反派动机补全\n- 关键配角归宿\n\n### 可保留\n\n- 续作接口\n- 世界更大谜团\n- 次要配角后续\n\n只有在主线已经稳稳落地的前提下,才去留续作钩子。\n\n## 差结局的典型信号\n\n- 最后突然加入新设定解题\n- 最关键的冲突靠巧合结束\n- 主角像没经历过这本书\n- 大量伏笔不处理,只留一句“以后再说”\n- 结尾忙着解释,没有场面和情绪\n\n## 结尾章节推荐结构\n\n```text\n前段:冲突逼近最终点\n中段:关键选择 / 对决 / 真相揭示\n后段:代价与结果落地\n收尾:新常态或情绪余波\n```\n\n## 终章与尾声的区别\n\n### 终章\n\n- 解决主要矛盾\n- 完成角色最终选择\n\n### 尾声\n\n- 展示余波\n- 给关系和世界一个新的安置\n\n不是每本书都需要尾声。如果终章已足够完整,可以直接结束。\n\n## 结局自查\n\n- [ ] 主线问题是否已经得到明确回答\n- [ ] 主角是否完成了应有的弧线变化\n- [ ] 关键关系是否有落点\n- [ ] 重大伏笔是否已回收\n- [ ] 结尾情绪是否和题材匹配\n- [ ] 是否为了续作而牺牲本书完整性\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2646,"content_sha256":"e5b5babc7ca92c025252f55e73aaeebc2d9eeab1b32ea20b211d356cfc3527fc"},{"filename":"references/hook-techniques.md","content":"# 悬念设置技巧\n\n悬念是让读者继续阅读的关键。每章结尾必须设置有效的钩子。\n\n## 十种经典悬念钩子\n\n### 1. 突然揭示\n\n在章节结尾突然揭示一个改变一切的信息。\n\n**示例:**\n> 警官看着死者的手机,最后一条短信来自一个他认识的人——他自己三天前发出的号码。\n\n**关键要素:**\n- 信息出乎意料\n- 改变现状理解\n- 留下\"为什么\"的疑问\n\n### 2. 紧急危机\n\n角色面临迫在眉睫的危险,下一章必须立即应对。\n\n**示例:**\n> 地板开始震动,灰尘从天花板簌簌落下。她抬头一看,裂缝正在迅速扩大。\n\n**关键要素:**\n- 时间紧迫\n- 威胁明确\n- 后果严重\n\n### 3. 未完成的动作\n\n一个动作被中断,留下\"接下来会发生什么\"的疑问。\n\n**示例:**\n> 他举起枪,手指扣在扳机上——\"别动!\"身后传来一个声音。\n\n**关键要素:**\n- 动作进行中被打断\n- 不确定结果\n- 新变量出现\n\n### 4. 身份反转\n\n某人被揭示为不是我们以为的那样。\n\n**示例:**\n> \"我终于找到你了,弟弟。\" 那个说着完美普通话的男人摘下面具,露出了一张她父亲的脸。\n\n**关键要素:**\n- 身份误解\n- 关系重定义\n- 动机重新解读\n\n### 5. 两难选择\n\n角色必须做出一个艰难的选择,但章节在决定前结束。\n\n**示例:**\n> 救生艇只能载两个人。她的丈夫和女儿都在水里,海浪越来越大。她伸出手——\n\n**关键要素:**\n- 选项都不理想\n- 必须选择\n- 高风险\n\n### 6. 神秘物品/线索\n\n发现一个重要但意义不明的东西。\n\n**示例:**\n> 保险箱里只有一张照片,拍摄于昨天。照片里是熟睡中的她,从窗外角度拍摄。\n\n**关键要素:**\n- 物品意义不明\n- 暗示威胁\n- 激发好奇\n\n### 7. 时间限制\n\n一个截止时间被设定,制造紧迫感。\n\n**示例:**\n> 定时器显示 03:00。而拆弹包里少了一根关键的红线。\n\n**关键要素:**\n- 明确时限\n- 资源不足\n- 后果已知\n\n### 8. 承诺/威胁\n\n某人做出承诺或威胁,改变预期。\n\n**示例:**\n> \"今晚午夜之前,我会让所有人知道你十年前真正做了什么。\" 匿名邮件只有这一行字。\n\n**关键要素:**\n- 明确意图\n- 伤害/揭露的威胁\n- 时间框架\n\n### 9. 离奇消失\n\n某人或某物突然消失,留下谜团。\n\n**示例:**\n> 他转身只一秒钟,再回头时,空荡荡的牢房里,那个戴着手铐的囚犯不见了。\n\n**关键要素:**\n- 不可能的行为\n- 缺乏解释\n- 安全感丧失\n\n### 10. 言外之意\n\n一句话表面正常,但暗示了更深层的东西。\n\n**示例:**\n> \"恭喜你通过面试,\" 面试官笑着握住她的手,\"和你的姐姐一样优秀。\" 可她是独生女。\n\n**关键要素:**\n- 表面正常\n- 隐藏信息\n- 需要解读\n\n---\n\n## 章节间悬念连接\n\n### 伏笔与呼应\n\n**伏笔技巧:**\n- 早期埋下不起眼的细节\n- 让读者忽略其重要性\n- 后期揭示时造成\"原来如此\"的效果\n\n**呼应方式:**\n- 对称场景(相似情境,不同结果)\n- 重复对话(不同语境,新含义)\n- 物品回归(重要物品再次出现)\n\n### 悬念升级\n\n**递进原则:** 后续悬念应比前一个更强或更深入\n\n```\n第一章:谁偷了文件?\n第二章:小偷是主角的同事\n第三章:同事是卧底特工\n第四章:特工知道主角的秘密身份\n```\n\n### 多线悬念\n\n**同时维持多条悬念线:**\n- 主线悬念(核心谜题)\n- 人物悬念(某人的真实身份)\n- 关系悬念(A和B之间发生什么)\n- 时间悬念(倒计时/最后期限)\n\n---\n\n## 悬念设置禁忌\n\n### 避免:\n\n1. **虚假悬念** - 制造紧张但结果是误会\n > 错误:他听到了脚步声...原来是猫\n > 正确:他听到了脚步声...但追他的人已经死了\n\n2. **机械降神** - 突然出现从未提及的解决方案\n > 错误:她突然想起自己会武术\n > 正确:她想起父亲教过的防身术(第五章提过)\n\n3. **过度留白** - 留下太多未回答问题\n > 原则:每章至少回答一个旧悬念,再提出新悬念\n\n4. **低风险钩子** - 结尾事件不够重要\n > 错误:他不知道晚饭吃什么\n > 正确:他的晚餐被人下了毒\n\n---\n\n## 悬念强度等级\n\n| 等级 | 类型 | 读者反应 | 适用位置 |\n|-----|------|---------|---------|\n| 1 | 好奇悬念 | \"这很有趣\" | 中间章节 |\n| 2 | 关切悬念 | \"接下来会发生什么\" | 中间章节 |\n| 3 | 迫切悬念 | \"他必须马上行动\" | 高潮章节 |\n| 4 | 生存悬念 | \"他会活下去吗\" | 高潮/结局前 |\n| 5 | 终极悬念 | \"一切到底是什么意思\" | 全书结尾 |\n\n**递进建议:** 故事中悬念强度应总体上升,但可以波动\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4825,"content_sha256":"a9e62358fbfd227a99ee3f03b2d03dc9680bc714270386041436ac4a9fb63beb"},{"filename":"references/opening-design.md","content":"# 首章设计指南\n\n首章不是普通章节。它要一次性完成三件事:\n\n1. 让读者愿意继续读\n2. 让读者知道这本书大概会提供什么快感\n3. 让主角和核心冲突站住\n\n## 首章必须交付的四样东西\n\n### 1. 人设立住\n\n首章结束前,读者至少要知道:\n\n- 主角是谁\n- 主角现在缺什么\n- 主角最在意什么\n- 主角和别人有什么不一样\n\n### 2. 故事承诺立住\n\n首章要让读者知道这本书主要卖什么:\n\n- 看真相\n- 看关系\n- 看升级\n- 看冒险\n- 看群像交汇\n\n如果首章既没立人,也没立承诺,后面再精彩也容易流失。\n\n### 3. 主钩子立住\n\n首章结尾最好抛出一个足够清楚的问题:\n\n- 谁干的\n- 为什么会这样\n- 主角会不会出事\n- 两人会不会靠近\n- 这条路到底通向哪里\n\n### 4. 风格立住\n\n首章的语言、密度、节奏,基本决定读者对整本书的预期。不要首章很猛,后面突然变成平铺直叙。\n\n## 首章推荐结构\n\n```text\n前 10%:异常 / 危机 / 反差切入\n前 30%:主角出场并展现鲜明反应\n中段:局势升级,抛出更大的问题\n后段:角色被迫做出选择\n结尾:主钩子落下\n```\n\n## 首章最容易犯的错\n\n### 1. 设定倾倒\n\n一上来讲世界观、历史、门派、家谱、系统说明,读者还没在意人,就先被信息压垮。\n\n### 2. 主角太被动\n\n主角一直在看、听、接受,没有判断和选择,读者很难记住他。\n\n### 3. 冲突太晚\n\n写了很多铺垫,前三段还看不到异常、压力、目标或危险。\n\n### 4. 钩子太虚\n\n首章结尾只是“他陷入沉思”“她看向远方”,没有具体问题,追读率会很差。\n\n## 不同题材的首章重点\n\n### 悬疑 / 推理\n\n- 尽快给案件或异常\n- 主角最好在处理问题时出场\n- 线索要少而准,不要一章塞满\n\n### 言情\n\n- 尽快让关系对象出现,哪怕只短暂露面\n- 先给吸引,再给阻碍\n- 情绪要具体,不要空喊悸动\n\n### 奇幻 / 仙侠 / 科幻\n\n- 先给异常和代价,再慢慢解释规则\n- 新名词不宜密集轰炸\n- 首章最好有一次能体现世界独特性的事件\n\n### 都市现实\n\n- 先给现实压力和人物处境\n- 细节要具体,别悬浮\n- 开头事件要能照见主角的人生困境\n\n## 首章自查\n\n- [ ] 前 3 段是否已经出现张力\n- [ ] 主角有没有做出判断或选择\n- [ ] 读者能否说出这本书主要卖点\n- [ ] 结尾是否留下具体而非空泛的问题\n- [ ] 如果只读首章,读者会不会想点下一章\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2563,"content_sha256":"a43abf6dc8b510ad1da6a2942b7180026391a265db3df4a218dea920c3780bd5"},{"filename":"references/outline-template-v1-minimal.md","content":"# [小说名称] 大纲(极简版)\n\n> 这个模板只需回答10个核心问题,5分钟内即可完成。适合快速启动项目。\n\n---\n\n## 1. 主角是谁,想要什么?\n\n**主角:**\n- 名字:\n- 身份/职业:\n- **自觉欲望**(TA认为自己想要的):\n- **不自觉欲望**(TA真正需要的):\n\n---\n\n## 2. 核心冲突是什么?\n\n**一句话冲突:**\n主角想要___,但是___阻拦,因为___。\n\n**核心悬念:**\n读者追下去的理由:___\n\n---\n\n## 3. 结局是什么?\n\n**结局类型:**\n- [ ] 圆满结局(HE)\n- [ ] 悲剧结局(BE)\n- [ ] 开放式结局\n- [ ] bittersweet(苦乐参半)\n\n**一句话结局:**\n主角最终___,代价是___。\n\n---\n\n## 4. 分几章,每章干嘛?\n\n| 章节 | 核心事件 | 钩子 |\n|------|---------|------|\n| 第1章 | | |\n| 第2章 | | |\n| 第3章 | | |\n| ... | | |\n\n> 只需列出前10章,后续可在连载中逐步补充\n\n---\n\n## 5. 核心悬念是什么?\n\n**主悬念:**\n___(贯穿全书的核心问题)\n\n**副悬念(可选):**\n1. ___\n2. ___\n\n---\n\n## 6. 主要人物(一句话定位)\n\n| 角色 | 身份 | 与主角关系 | 一句话定位 |\n|------|------|-----------|-----------|\n| 主角 | | - | |\n| 反派/对手 | | | |\n| 重要配角 | | | |\n| 重要配角 | | | |\n\n---\n\n## 7. 故事引擎(一句话)\n\n**公式:** 主角必须___,每___就___。\n\n**示例:**\n- 「主角必须每破解一个暗号才能多活一天,每多用一次能力就失去一段记忆。」\n- 「主角必须在30天内找到真凶,每查错一个人就失去一个盟友。」\n\n**你的故事引擎:**\n\n\n---\n\n## 8. 目标读者\n\n- **年龄段:**\n- **性别倾向:**\n- **阅读场景:** 通勤 / 睡前 / 周末\n- **他们喜欢看:** ___(如:爽文升级 / 悬疑推理 / 甜虐言情)\n\n---\n\n## 9. 文风关键词(选3-5个)\n\n| 维度 | 选择 |\n|------|------|\n| 语言风格 | [ ] 简洁 [ ] 细腻 [ ] 幽默 [ ] 冷峻 [ ] 华丽 |\n| 叙事节奏 | [ ] 紧凑 [ ] 舒缓 [ ] 张弛有度 |\n| 情感浓度 | [ ] 克制 [ ] 浓烈 [ ] 中性 |\n| 视角 | [ ] 第一人称 [ ] 第三人称 |\n\n**关键词:** ___、___、___\n\n---\n\n## 10. 预计字数\n\n- **预计章节数:** ___章\n- **每章字数:** ___字\n- **总字数目标:** ___万字\n\n---\n\n## 快速检查\n\n完成以上10项后,问自己:\n- [ ] 主角的欲望是否足够强烈,能支撑整本书?\n- [ ] 结局是否回答了核心悬念?\n- [ ] 看完前3章,读者会想知道接下来发生什么吗?\n\n如果答案都是\"是\",就可以开始写了!\n\n---\n\n*此模板是起点,写作过程中可随时补充更详细的人物档案和世界观。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2681,"content_sha256":"c6f3734c55c6e10520ac5210c48e4186ef453e85b9e60f80010cb3dc3dced8ae"},{"filename":"references/outline-template.md","content":"> ⚠️ **此为完整版大纲模板(50+ 字段),适用于复杂项目。快速启动请使用 [outline-template-v1-minimal.md](outline-template-v1-minimal.md)(10 字段,5 分钟完成)。**\n\n# [小说名称] 大纲\n\n## 项目定位\n\n- **作者 / 笔名**:\n- **题材 / 子类型**:\n- **目标读者**:\n- **叙事视角**:\n- **文风关键词**:\n- **预计章节数**:\n- **目标单章字数**:\n- **总字数目标**:\n\n## 故事引擎\n\n> 这一部分描述故事的核心驱动力。明确\"引擎\"比描述\"主题\"更能指导写作——读者追一本书的理由,往往是一个具体的机制,而不是一个抽象的主题。\n\n### 核心机制\n用一句话说清楚:这个故事靠什么驱动读者往下看?\n\n**公式:** 主角必须___,每___就___。\n\n**示例:** 「主角必须每破解一个暗号才能多活一天,每多用一次能力就失去一段记忆。」\n\n**检验标准:** 如果说不出\"读者为什么追下去\",这个字段就不够具体。\n\n### 代价与资源\n每行动一次,主角/世界要失去什么?什么资源是有限的?\n\n**公式:** ___是有限的,每次___就会消耗___。\n\n**示例:** 「每天只有一次解码机会。用尽后会被强制淘汰出游戏。」\n\n### 升级规则\n随着故事推进,代价如何递增?紧张感如何升级?\n\n**公式:** 第 N 阶段,代价变成___。\n\n**示例:** 「前 10 章代价是记忆,中 10 章代价是生命,后 10 章代价是身边人的命运。」\n\n**检验标准:** 代价必须真的变重,不能只是\"越来越难\"。\n\n## 项目概览\n\n- **Logline**:\n- **核心卖点**:\n- **主角外部目标**:\n- **主角内在需求**:\n- **核心冲突**:\n- **主要对抗力量**:\n- **失败代价**:\n- **主题句**:\n- **结局类型**:\n\n## 结构方案\n\n- **采用结构**:\n- **第一幕任务**:\n- **中段升级点**:\n- **高潮设计**:\n- **结局兑现**:\n\n## 角色弧线总览\n\n| 角色 | 开局状态 | 中段变化 | 终局状态 | 关键转折 |\n|------|----------|----------|----------|----------|\n| 主角 | | | | |\n| 反派 | | | | |\n| 配角 | | | | |\n\n## TODO List\n\n### 待确认\n- [ ] 书名\n- [ ] 结构模板\n- [ ] 结局兑现方式\n\n### 待创作\n- [ ] 第[X]章:[章节标题] - [核心事件]\n\n### 进行中\n- [ ] 第[X]章:[章节标题] - [核心事件]\n\n### 已完成\n- [x] 第[X]章:[章节标题] - [核心事件]([字数]字)\n\n## 章节规划\n\n| 章节 | 标题 | 章节功能 | 开场冲突 | 中段转折 | 结尾钩子 | 预估字数 | 状态 |\n|------|------|----------|----------|----------|----------|----------|------|\n| 第 1 章 | | | | | | | 待创作 |\n| 第 2 章 | | | | | | | 待创作 |\n\n## 悬念与伏笔总表\n\n| 项目 | 类型 | 首次出现 | 当前状态 | 计划回收 |\n|------|------|----------|----------|----------|\n| | 主线悬念 / 支线伏笔 | | 待回收 | |\n\n## 字数与进度\n\n- **已完成章节数**:\n- **累计字数**:\n- **完成进度**:\n- **当前卡点**:\n\n---\n\n## 章节摘要\n\n### 第[X]章:[章节标题]\n- **本章摘要**:\n- **人物变化**:\n- **新增信息 / 伏笔**:\n- **已回应悬念**:\n- **下一章必须处理**:\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3463,"content_sha256":"87ac160039aaf9a6f140b6b4f1bab695715cd6590bb79da6634a133f033d6124"},{"filename":"references/plot-structures.md","content":"## 如何识别故事引擎\n\n写大纲之前,先问自己三个问题:\n\n### 1. 核心机制是什么?\n「这个故事靠什么让读者翻页?」\n- 不是\"成长\"或\"复仇\"这种主题\n- 而是具体的、可描述的机制\n- 例如:「每回答一个谜题就能多活一天」\n\n### 2. 代价是什么?\n「每行动一次,要失去什么?」\n- 代价必须是读者能感知到的\n- 不能是无关痛痒的代价\n- 例如:「记忆」、「时间」、「身边人」\n\n### 3. 代价如何升级?\n「故事越往后,代价怎么变得更重?」\n- 前10章的代价 vs 后10章的代价\n- 如果代价不升级,故事会越写越疲\n\n---\n\n# 情节结构模板\n\n常见的故事结构模板,可用于规划小说章节。\n\n## 先选故事承诺\n\n开始拆结构前,先确认这本书卖给读者的承诺是什么:\n\n- **悬疑承诺**:读者想知道真相\n- **言情承诺**:读者想看关系升温、破裂、再靠近\n- **升级承诺**:读者想看主角越来越强、越来越接近目标\n- **冒险承诺**:读者想看不断打开新世界和更大危机\n- **群像承诺**:读者想看不同人物线最终交汇\n\n结构必须服务承诺,不能只像一个结构。\n\n## 三幕式结构\n\n最经典,适用于大多数短篇和中篇。\n\n### 第一幕:设置,约 25%\n\n| 章节 | 内容 |\n|------|------|\n| 第1章 | 现状、人物、缺口 |\n| 第2章 | 激励事件,打破现状 |\n| 第3章 | 拒绝、犹豫,最终决定行动 |\n\n### 第二幕:对抗,约 50%\n\n| 章节 | 内容 |\n|------|------|\n| 第4-5章 | 进入新局面,开始遭遇挑战 |\n| 第6章 | 中点,重大转折或重大认知变化 |\n| 第7-8章 | 困难升级,代价抬高 |\n\n### 第三幕:结局,约 25%\n\n| 章节 | 内容 |\n|------|------|\n| 第9章 | 最低点,似乎一切失败 |\n| 第10章 | 高潮,对决或最终选择 |\n| 终章 | 余波与新常态 |\n\n### 放到长篇时怎么拉长\n\n- 第一幕不要拖太久,尽量在前 10-20% 进入主线\n- 第二幕按 `小目标 -> 小胜利 -> 更大代价` 循环推进\n- 中点必须改变读者对局势的理解\n- 第三幕前要让主角付出真正代价,不然高潮会轻\n\n## 英雄之旅\n\n适合冒险、奇幻、成长型故事。\n\n| 阶段 | 章节 | 内容 |\n|------|------|------|\n| 平凡世界 | 第1章 | 主角的旧秩序 |\n| 冒险召唤 | 第1-2章 | 激励事件 |\n| 拒绝召唤 | 第2章 | 犹豫与抗拒 |\n| 遇见导师 | 第2-3章 | 获得指引 |\n| 跨越门槛 | 第3章 | 进入新世界 |\n| 考验盟友敌人 | 第4-5章 | 新规则与新关系 |\n| 接近洞穴 | 第5-6章 | 逼近核心威胁 |\n| 苦难煎熬 | 第6-7章 | 重大失败或接近毁灭 |\n| 奖赏 | 第7-8章 | 获得关键力量或信息 |\n| 返回之路 | 第8章 | 回归途中再遭阻碍 |\n| 复活 | 第9章 | 最终考验与蜕变 |\n| 满载而归 | 第10章 | 带着改变回归 |\n\n## 悬疑小说结构\n\n适合侦探、推理、惊悚题材。\n\n### 第一幕:谜题出现\n\n| 章节 | 内容 | 钩子 |\n|------|------|------|\n| 第1章 | 案件发生 / 尸体出现 | 谁干的 |\n| 第2章 | 主角接手,发现案件特殊 | 为什么特殊 |\n| 第3章 | 初查,第一批线索浮现 | 线索指向谁 |\n\n### 第二幕:调查深入\n\n| 章节 | 内容 | 钩子 |\n|------|------|------|\n| 第4章 | 审讯与排查 | 谁在撒谎 |\n| 第5章 | 意外线索出现 | 我们是不是一开始就错了 |\n| 第6章 | 第二起事件或旧案连接 | 这是同一只手吗 |\n| 第7章 | 主角被卷入危险 | 主角会不会成为下一个目标 |\n\n### 第三幕:真相揭示\n\n| 章节 | 内容 | 钩子 |\n|------|------|------|\n| 第8章 | 重大突破或反转 | 我们信任的人有问题 |\n| 第9章 | 最终逼近真相 | 真相是什么,代价是什么 |\n| 第10章 | 真相落地与余波 | 真的结束了吗 |\n\n## 言情小说结构\n\n适合爱情和关系推进题材。\n\n### 第一幕:相遇\n\n| 章节 | 内容 | 情感节点 |\n|------|------|---------|\n| 第1章 | 主角 A 的现状和缺口 | 读者共情 A |\n| 第2章 | 主角 B 的现状和缺口 | 读者共情 B |\n| 第3章 | 相遇,第一印象不好或错位 | 有吸引,也有阻碍 |\n\n### 第二幕:发展\n\n| 章节 | 内容 | 情感节点 |\n|------|------|---------|\n| 第4-5章 | 被迫靠近,逐渐看见对方 | 关系升温 |\n| 第6章 | 高亲密时刻 | 接近 |\n| 第7-8章 | 误解、秘密、外力阻碍 | 拉远 |\n| 第9章 | 关系断裂或看似无望 | 情绪谷底 |\n\n### 第三幕:和解\n\n| 章节 | 内容 | 情感节点 |\n|------|------|---------|\n| 第10章 | 克服障碍,完成选择 | 高潮 |\n| 终章 | 新关系状态 | 圆满或留白 |\n\n### 言情特别提醒\n\n- 吸引和阻碍必须同时存在\n- 甜和虐要交替,不要连续重复同一种拉扯\n- 真正推进关系的,是选择和行动,不是反复口头确认喜欢\n\n## 惊悚 / 动作结构\n\n适合快节奏、强压迫感题材。\n\n```text\n第1章:危机出现\n第2章:应对计划\n第3章:追逐 / 对抗\n第4章:逆转机会\n第5章:最终对抗\n第6章:结局余波\n```\n\n特点:\n\n- 节奏快\n- 高密度事件\n- 时间压力持续存在\n- 悬念强度递增\n\n## 反转结构\n\n适合心理惊悚和反转型悬疑。\n\n```text\n第1-2章:建立“真实”情况\n第3-4章:出现疑点,但不明显\n第5-6章:第一次小反转\n第7-8章:第二次反转\n第9-10章:最终反转\n```\n\n关键:\n\n- 前期埋下看似无辜的线索\n- 每次反转都合乎逻辑\n- 避免机械降神\n\n## 多线叙事结构\n\n适合多主角和复杂剧情。\n\n### 交叉剪辑模式\n\n```text\n第1章:主角 A\n第2章:主角 B\n第3章:主角 A 推进\n第4章:主角 B 推进\n第5章:线索交汇\n```\n\n### 时间线模式\n\n```text\n第1章:现在\n第2章:过去\n第3章:现在 +1 天\n第4章:过去 +1 月\n```\n\n收敛原则:\n\n- 各线最终必须交汇\n- 早期看似无关,后期必须有关\n- 收敛时要产生原来如此的效果\n\n## 中文网文 / 长篇连载结构\n\n适合 20-100 章以上的持续推进型作品。\n\n### 核心节奏\n\n```text\n起钩 -> 给目标 -> 遇阻 -> 小赢 -> 反噬 -> 再升级 -> 阶段回收 -> 更大目标\n```\n\n### 分卷思路\n\n| 阶段 | 常见章数占比 | 任务 |\n|------|-------------|------|\n| 开卷 | 前 10-15% | 立人设、立承诺、立主钩子 |\n| 第一阶段推进 | 20-25% | 建立规则,给第一次明显成果 |\n| 中段升级 | 25-35% | 扩大舞台,抬高代价,关系重组 |\n| 大转折 | 10-15% | 认知翻转或重大失败 |\n| 终局推进 | 15-20% | 回收主线,处理终极对抗 |\n\n### 连载章注意点\n\n- 每 3-5 章最好出现一次明显兑现\n- 每个小阶段要有局部闭环\n- 追更节点的章末,优先落在新危机、身份反转、重大发现、关系突变\n- 不要连续多章都只做过渡\n\n## 单章内部结构\n\n### 标准模板\n\n```text\n开头(10%):钩子 + 上下文连接\n发展(60%):事件推进 + 冲突\n高潮(20%):本章最高点\n结尾(10%):悬念钩子 + 下章铺垫\n```\n\n### 更适合连载的模板\n\n```text\n进入(15%):异常 / 威胁 / 任务\n施压(35%):目标受阻,信息不对称\n转折(25%):认知变化 / 关系变化 / 局面恶化\n余波(15%):人物反应与决定\n钩子(10%):把问题抛给下一章\n```\n\n### 无效章节结构\n\n```text\n开头:漫长铺垫 / 背景说明\n中间:日常活动 / 对话流水账\n结尾:平淡结束 / 无悬念\n```\n\n## 结构选择指南\n\n| 故事类型 | 推荐结构 | 章节数 |\n|---------|---------|--------|\n| 冒险 / 奇幻 | 英雄之旅 | 8-12章 |\n| 侦探 / 悬疑 | 悬疑结构 | 8-10章 |\n| 言情 | 言情结构 | 6-10章 |\n| 动作 / 惊悚 | 惊悚结构 | 5-8章 |\n| 心理 / 反转 | 反转结构 | 6-8章 |\n| 多主角 | 多线叙事 | 10-15章 |\n| 微型小说 | 3章结构 | 3章 |\n| 中文网文 / 长篇连载 | 分卷推进结构 | 20章以上 |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":7931,"content_sha256":"e3512dbf66cbcbdd10a1c5e308887377c1df4aa3511bf5336a7241e97cb023ba"},{"filename":"references/progress-dashboard-template.md","content":"# [书名] 创作进度\n\n> 此文件由AI自动维护,每次写作后更新。用户可快速查看当前状态。\n\n---\n\n## 📍 当前位置\n\n| 项目 | 状态 |\n|------|------|\n| **正在写** | 第___章 |\n| **本章状态** | [ ] 场景拆分中 / [ ] 写作中 / [ ] 待修改 / [ ] 已完成 |\n| **下章预告** | 第___章:___ |\n| **当前阶段** | 策划期 / 连载期 / 收尾期 |\n| **写作速度** | 快速模式 / 标准模式 |\n\n---\n\n## ⚠️ 关键提醒(AI自动检测)\n\n### 🔔 悬念状态\n| 悬念ID | 内容摘要 | 状态 | 告警 |\n|--------|---------|------|------|\n| 1 | ___ | ✅ 活跃(最近提及:第X章) | |\n| 2 | ___ | ⚠️ 即将过期(已5章未提及) | |\n| 3 | ___ | ❌ 已过期(已10章未提及,需在本章提及) | 🔴 |\n\n**当前活跃悬念数:** ___ / 6(超过6个会警告)\n\n### 👥 人物状态\n| 角色 | 当前位置 | 当前情绪 | 关键变化 |\n|------|---------|---------|---------|\n| 主角 | | | |\n| 反派 | | | |\n| 重要配角 | | | |\n\n### 📊 质量概况\n- **已完章节数:** ___章\n- **平均字数:** ___字/章\n- **红灯通过率:** ___%\n- **黄灯警告:** ___处\n- **AI味评级:** 轻度 / 中度 / 重度\n\n### 📝 最近修改\n- 第___章:___(修改时间:___)\n\n---\n\n## 🔗 快速导航\n\n| 文件 | 链接 |\n|------|------|\n| 大纲 | [00-大纲.md](00-大纲.md) |\n| 人物档案 | [01-人物档案.md](01-人物档案.md) |\n| 世界观 | [02-世界观与伏笔.md](02-世界观与伏笔.md) |\n| 上一章 | [第___章-___](第___章-___.md) |\n| 当前章 | [第___章-___](第___章-___.md) |\n\n---\n\n## 📈 进度可视化\n\n```\n总进度:[████████░░░░░░░░░░░░] 40% (8/20章)\n\n本月进度:\n[███░░░░░░░░░░░░░░░░░] 15% (3/20章)\n```\n\n---\n\n## 🎯 下章任务卡(自动生成)\n\n**第___章:___**\n\n- **章节功能**:___\n- **承接上章**:___\n- **本章目标**:___\n- **主要阻碍**:___\n- **关键转折**:___\n- **结尾钩子**:___\n\n---\n\n## 📝 AI续写摘要(用于快速续写)\n\n当用户说\"继续写\"时,AI读取此区块即可获取足够上下文:\n\n**前文关键事件:**\n1. ___\n2. ___\n3. ___\n\n**当前人物状态:**\n- 主角:位置___,情绪___,目标___\n- 反派:位置___,情绪___,目标___\n\n**未回收伏笔:**\n1. ___(第X章提出)\n2. ___(第Y章提出)\n\n**下章必须处理:**\n1. ___\n2. ___\n\n---\n\n## 🔧 维护说明\n\n此文件由AI在以下时机自动更新:\n1. 每章完成后 → 更新章节数、质量概况\n2. 每5章后 → 更新悬念状态、检测过期\n3. 人物状态变化时 → 更新人物区块\n4. 用户要求时 → 手动刷新所有数据\n\n---\n\n*最后更新:___由___更新*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2794,"content_sha256":"3cd821065d62d10a8e87a3b600c2d0ff3e6eda2632f8a49426953a48e4934024"},{"filename":"references/quality-checklist.md","content":"# 质量检查清单\n\n交付任何章节或整书前,先确认当前模式,再按对应清单检查。\n\n## 0. 阶段确认\n\n- [ ] 当前是 `策划期 / 连载期 / 收尾期`\n- [ ] 写作速度:`快速模式 / 标准模式`\n- [ ] 目标单章字数已锁定(标准≥3000 / 快速≥2500)\n- [ ] 本次交付目标清晰:大纲 / 单章 / 连续章节 / 全书收尾\n\n## 1. 章节基础\n\n- [ ] **章节有明确功能**\n - 推剧情 / 推关系 / 推人物弧线 / 回收伏笔,至少命中其一\n\n- [ ] **字数符合项目设定**\n - 轻连载:2000-3000 字\n - 标准长章:2500-4000 字\n - 重度长章:3000-5000 字\n\n- [ ] **本章不是可删章**\n - 删除后会造成信息缺口、关系断层或节奏问题\n\n- [ ] **时间地点清晰**\n - 场景切换时读者不会迷路\n\n## 2. 开头检查\n\n- [ ] **前 3 段内进入有效张力**\n - 有冲突、异常、选择、威胁、倒计时或信息反差\n\n- [ ] **没有低效开头**\n - 不是天气描写起手\n - 不是刷牙洗脸式日常流程\n - 不是整段背景讲解\n\n- [ ] **与上一章衔接自然**\n - 回应旧钩子,或给出清楚的时间地点切换\n\n### 如果这是首章\n- [ ] 主角已经立住,不是模糊旁观者\n- [ ] 这本书的核心卖点已经显形\n- [ ] 首章结尾抛出了具体主钩子\n\n## 3. 内容推进\n\n- [ ] **本章有不可逆变化**\n - 信息被揭示、关系被改变、局势被升级、人物做出代价性选择\n\n- [ ] **冲突持续存在**\n - 不是只聊天、只解释、只回忆\n\n- [ ] **有转折**\n - 至少有一次预期被改变或认知被修正\n\n- [ ] **因果成立**\n - 事件不是靠巧合硬推\n\n## 4. 人物与对白\n\n- [ ] **人物行为符合既有设定**\n - 若反常,文本内给出原因\n\n- [ ] **主要角色声音可区分**\n - 用词、语气、句长、态度存在差异\n\n- [ ] **每段对白有功能**\n - 推动情节 / 暴露关系 / 制造冲突 / 放出信息\n\n- [ ] **潜台词成立**\n - 角色不会把所有心事都直白说完\n\n## 5. 叙事表达\n\n- [ ] **展示大于讲述**\n - 少用抽象情绪总结,多用动作、细节、反应和选择\n\n- [ ] **细节服务剧情**\n - 不是为了凑字数而堆环境描写\n\n- [ ] **句式有变化**\n - 长短句交替,避免整段平均长度\n\n- [ ] **段落可读性好**\n - 动作场景不堆成文字墙\n\n## 6. AI 味清理\n\n- [ ] **删掉空泛修饰词**\n - 如“复杂的情绪”“深邃的目光”“莫名的感觉”这类可替换空话\n\n- [ ] **删掉机械排比和成语堆砌**\n - 不用四字词串成整段情绪\n\n- [ ] **减少解释腔**\n - 少用“这意味着”“然而”“与此同时”“某种程度上”这类说明式连接\n\n- [ ] **保留人物口气**\n - 角色对话不像统一的作者口吻\n\n## 7. 悬念与连贯性\n\n- [ ] **结尾有钩子**\n - 回应、升级或偏转至少一条悬念线\n\n- [ ] **旧伏笔有推进**\n - 不是只开新坑不填旧坑\n\n- [ ] **世界规则未被破坏**\n - 特别是悬疑、奇幻、科幻中的规则系统\n\n- [ ] **人物状态已更新**\n - 位置、情绪、关系、公开目标、隐藏动机有记录\n\n## 8. 类型特定补充\n\n### 悬疑 / 推理\n- [ ] 线索公平\n- [ ] 红鲱鱼不过度作弊\n- [ ] 真相能回溯自洽\n\n### 言情 / 情感\n- [ ] 关系温差有推进\n- [ ] 吸引与阻碍同时存在\n- [ ] 情感节点不是空喊“喜欢”\n\n### 奇幻 / 科幻\n- [ ] 规则有代价\n- [ ] 世界信息是嵌入剧情而非讲义\n- [ ] 新设定不会临时救场\n\n### 动作 / 惊悚\n- [ ] 空间方位清晰\n- [ ] 危机层层升级\n- [ ] 紧张和缓冲节奏交替\n\n## 9. 收尾期额外检查\n\n- [ ] 主线冲突已收束\n- [ ] 主角弧线有兑现\n- [ ] 关键配角去向明确\n- [ ] 重大伏笔已回收或明确保留到续作\n- [ ] 结局情绪与题材匹配\n- [ ] 没有为了续作接口牺牲本书完整性\n- [ ] 终章和尾声分工清楚,没有重复收尾\n\n## 10. 交付前评分\n\n| 维度 | 评分 | 说明 |\n|------|------|------|\n| 开头吸引力 | /10 | 前 3 段是否有效抓人 |\n| 情节推进 | /10 | 本章是否真的推进主线 |\n| 人物张力 | /10 | 人物关系和选择是否有戏 |\n| 对话质量 | /10 | 是否自然、有功能、有声音 |\n| 悬念强度 | /10 | 读者是否会想继续读 |\n| 连贯性 | /10 | 与全书设定是否吻合 |\n| 去 AI 味 | /10 | 是否摆脱模板腔和空话感 |\n| 语言质量 | /10 | 无 AI 痕迹,用词精确? |\n| **总分** | **/80** | **>60 可交付,>70 优秀** |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4526,"content_sha256":"73044464996c2cb31bb4bd516eecd10142f68a2d9c01a9062746733e0912c926"},{"filename":"references/scene-design-v2.md","content":"# 场景设计v2(可执行工具版)\n\n> 从\"概念理解\"到\"可执行工具\",降低场景设计门槛。\n\n---\n\n## 场景核心三问\n\n每个场景开始前,必须回答:\n\n1. **谁最想要某样东西?**(主动方)\n2. **什么在阻止Ta?**(阻碍)\n3. **最后谁赢了?**(结果)\n\n如果答不上来,这个场景可能没有存在的必要。\n\n---\n\n## 场景任务检查卡\n\n### 四种任务类型(量化标准)\n\n#### 推主线任务\n\n**完成标准(满足1项即可)**:\n- [ ] 揭示了新线索/信息\n- [ ] 危机升级了\n- [ ] 对抗双方首次正面交锋\n\n**失败信号**:\n- 场景结束后,主线没有前进\n- 只是\"聊了聊\",没有新信息\n\n#### 推人物任务\n\n**完成标准(满足1项即可)**:\n- [ ] 角色做出了不符合以往形象的选择\n- [ ] 角色的某个秘密被揭示\n- [ ] 角色被迫说出\"我绝不会...\"后立刻打破誓言\n\n**失败信号**:\n- 角色的反应完全符合读者预期\n- 情绪变化只停留在描写层面,没有转化为行动\n\n#### 推关系任务\n\n**完成标准(满足1项即可)**:\n- [ ] 信任度发生了可感知的变化(增加或减少)\n- [ ] 权力关系发生了转移\n- [ ] 双方说出了\"不能收回的话\"\n\n**失败信号**:\n- 对话很多,但关系状态没变\n- 互动结束后,双方立场和之前完全一样\n\n#### 推设定任务\n\n**完成标准(满足1项即可)**:\n- [ ] 通过行动暴露了规则(不是讲课)\n- [ ] 用代价证明了规则(角色因规则受伤)\n- [ ] 在冲突中展示了世界观(角色被迫适应规则)\n\n**失败信号**:\n- 大段背景说明,没有角色被影响\n- \"这是因为...\"的解释性叙述\n\n---\n\n## Scene/Sequel 实用指南\n\n### 什么时候用 Scene(推进)?\n\n**特征**:\n- 外部事件为主\n- 目标明确\n- 有明确输赢\n\n**典型场景**:\n- 战斗、追逐、谈判、比赛\n- 调查取证、寻找线索\n- 逃脱、潜入、拦截\n\n### 什么时候用 Sequel(消化)?\n\n**特征**:\n- 内部反应为主\n- 没有明确输赢\n- 为下一个决定做准备\n\n**典型场景**:\n- 失败后的情绪处理\n- 新信息后的重新评估\n- 重大选择前的犹豫\n\n### 节奏配比表\n\n| 章节类型 | Scene 数量 | Sequel 数量 | 推荐模式 |\n|---------|-----------|------------|---------|\n| 强动作章 | 3-4 | 0-1 | Scene-Scene-Scene-Sequel |\n| 情感转折章 | 1-2 | 2-3 | Scene-Sequel-Sequel-Scene |\n| 信息揭示章 | 2 | 1-2 | Scene-Sequel-Scene |\n| 多线并行章 | 2-3 | 0 | 纯 Scene 快速切换 |\n| 喘息章 | 1 | 2-3 | Sequel-Scene-Sequel |\n\n### Sequel 长度判断\n\n**刚才有大事件改变人物命运** → Sequel 可以长(500-800字)\n- 示例:主角刚失去重要人物\n\n**只是日常推进** → Sequel 应该短(200字以内)\n- 示例:完成一次普通调查\n\n**连续多个 Scene 后** → 必须有一个较长的 Sequel\n- 让读者喘息,让角色消化\n\n---\n\n## 晚进早出方法论\n\n### 不同类型场景的切入点评分\n\n#### 动作场景\n\n| 切入点类型 | 得分 | 示例 |\n|-----------|------|------|\n| 直接进入冲突高潮(已经在打/逃/追) | +2 | \"子弹擦着他的耳朵飞过。\" |\n| 从异常发现开始(发现尸体/密室/痕迹) | +1 | \"她推开门,发现地上有一滩血。\" |\n| 从准备行动开始(决定去打/正在准备装备) | 0 | \"他决定去教训那个人。\" |\n| 从日常开始(起床/吃饭/聊天) | -1 | \"他起床,洗漱,准备出门。\" |\n\n**判断标准**:\n- ≥+1分:可用\n- ≥+2分:推荐\n- ≤0分:建议重写\n\n#### 对话场景\n\n| 切入点类型 | 得分 | 示例 |\n|-----------|------|------|\n| 从冲突中间切入(已经在争吵/对峙) | +2 | \"你骗我!\"她摔门而去。\" |\n| 从关键信息开始(一句话改变一切) | +1 | \"你父亲不是意外死的。\" |\n| 从寒暄开始(铺垫太长) | 0 | \"最近怎么样?\" \"还不错。\" |\n| 从背景介绍开始 | -1 | \"我们认识三年了,从大学开始...\" |\n\n#### 内心独白场景\n\n| 切入点类型 | 得分 | 示例 |\n|-----------|------|------|\n| 从情绪峰值切入(已经在崩溃/顿悟) | +2 | \"那一刻,她终于明白了一切。\" |\n| 从触发事件开始(某事引发了思考) | +1 | \"看到那封信,她开始怀疑。\" |\n| 从平静状态开始(慢慢进入) | 0 | \"她坐在窗前,想着最近的事。\" |\n| 从背景回忆开始 | -1 | \"她想起了三年前的那一天...\" |\n\n### 早出原则\n\n**冲击落下后,最多再写2段就应该切走。**\n\n**弱收尾**:\n```\n他扣动扳机,敌人倒下了。然后他走上前,检查了伤口,\n确认对方已经死了。他长出一口气,把枪收好,整理了一下\n衣服,转身离开现场。走出大门时,他回头看了一眼...\n```\n\n**强收尾**:\n```\n他扣动扳机。\n\n敌人倒下。\n\n他转身离开,没有回头。\n```\n\n---\n\n## 六种场景过渡技术\n\n### 1. 因果链过渡(最常用)\n\n上一场的结果 = 下一场的起因\n\n```\nA场景:主角发现被跟踪\n↓\nB场景:主角开始逃跑/设反跟踪\n```\n\n**适用**:连续动作、追踪、逃脱\n\n### 2. 悬念转移\n\n把上一场的悬念带到下一场开头\n\n```\nA场景结尾:\"门开了\"(悬念:谁来了?)\n↓\nB场景开头:\"门外站着的是...\"(揭晓)\n```\n\n**适用**:悬疑、揭示、意外\n\n### 3. 情绪对比\n\n上一场的高潮情绪 vs 下一场的平静/反差\n\n```\nA场景:激烈争吵(高潮)\n↓\nB场景:独自沉默整理情绪(低谷)\n```\n\n**适用**:情绪调节、深度刻画\n\n### 4. 时间压缩\n\n用一句话跳过中间时间\n\n```\n\"三天后...\"\n\"直到午夜,他才...\"\n\"一周后,当一切平息...\"\n```\n\n**适用**:过渡时期、非关键时间\n\n### 5. 空间跳转\n\n明确的空间转移信号\n\n```\n\"与此同时,在城市的另一端...\"\n\"千里之外的总部...\"\n\"与此同时...\"\n```\n\n**适用**:多线叙事、并行事件\n\n### 6. POV 切换\n\n切换到另一个角色的视角\n\n```\nA场景:主角发现线索(主角视角)\n↓\nB场景:反派得知计划泄露(反派视角)\n```\n\n**适用**:多视角小说、展示信息差\n\n---\n\n## 场景价值测试(死场景识别)\n\n回答以下5个问题:\n\n1. **如果删除这个场景,读者会看不懂后续剧情吗?**\n - [ ] 会 → 保留,但需要检查是否更高效\n - [ ] 不会 → 进入问题2\n\n2. **这个场景是否改变了至少一个角色的状态?**\n - [ ] 是(情绪/认知/关系/处境)→ 保留\n - [ ] 否 → 进入问题3\n\n3. **这个场景是否揭示了让读者惊讶的新信息?**\n - [ ] 是 → 保留,但检查能否并入其他场景\n - [ ] 否 → 进入问题4\n\n4. **这个场景的对话是否\"不能发生在其他场景\"?**\n - [ ] 是 → 保留(独特情境)\n - [ ] 否 → 考虑删除或重写\n\n5. **这个场景的氛围/情绪是否为后续必需的铺垫?**\n - [ ] 是 → 缩短到最小有效长度\n - [ ] 否 → 删除\n\n**测试结果**:\n- 第1题选\"会\" → 保留(核心场景)\n- 第2-3题任选一\"是\" → 保留(功能场景)\n- 全部\"否\" → 考虑删除\n\n---\n\n## 情绪曲线设计模板\n\n### 单场景内情绪变化\n\n```markdown\n## 场景情绪曲线\n\n**起点情绪**:___(如:平静/紧张/愤怒)\n**情绪触发点**:___(具体事件,200字内必须出现)\n**情绪峰值**:___(最强烈的情绪,场景中段)\n**情绪落点**:___(场景结束时的情绪)\n\n**检查**:\n- [ ] 情绪是否有明确变化?(没有变化 = 死场景)\n- [ ] 情绪变化是否驱动了行动?(情绪→决策→行动)\n- [ ] 情绪落点是否自然引出下一场?\n```\n\n### 情绪曲线示例\n\n```\n场景:主角发现被背叛\n\n起点:信任(90%)\n ↓\n触发:看到证据(第3段)\n ↓\n峰值:愤怒+痛苦(第8段)\n ↓\n落点:决心报复(第12段)→ 引出下一场行动\n\n情绪变化:信任 → 怀疑 → 愤怒 → 决心\n```\n\n---\n\n## 功能性场景处理指南\n\n### 什么是功能性场景\n\n\"必须存在但不好看\"的场景:\n- 解释世界观规则\n- 人物背景介绍\n- 过渡性情节\n\n### 处理策略\n\n#### 策略1:合并法\n\n把功能信息并入其他有冲突的场景\n\n```\n不要:专门开一场解释修炼体系\n要:在生死战斗中,主角被迫使用规则取胜\n\n不要:回忆主角童年\n要:反派揭露主角不知道的身世秘密\n```\n\n#### 策略2:伪装法\n\n用有张力的形式包装功能信息\n\n```\n不要:主角自言自语介绍世界\n要:外来者提问,本地人回答(信息不对称产生张力)\n\n不要:旁白解释历史\n要:两人在争论历史真相(观点冲突产生张力)\n```\n\n#### 策略3:加速法\n\n功能场景快速完成,把篇幅留给精彩场景\n\n```\n字数标准:功能场景 ≤ 平均场景的30%\n\n示例:\n过渡场景:500字(交代必须信息)\n平均场景:2000字\n精彩场景:3000字\n```\n\n#### 策略4:跳笔法\n\n完全跳过,用叙述代替场景\n\n```\n\"三天后,他们抵达了王城。期间一切顺利。\"\n\n\"一周后的会议上,所有人都同意了这个方案。\"\n```\n\n**适用**:\n- 旅程(除非途中有事件)\n- 准备过程(除非遇到阻碍)\n- 时间流逝(除非期间有变化)\n\n---\n\n## 多POV场景切换指南\n\n### 切换时机\n\n**必须切换时**:\n- 需要展示主角不知道的信息\n- 需要展示反派的计划\n- 需要展示并行发生的事件\n\n**避免频繁切换**:\n- 同一场景内多次切换(让读者混乱)\n- 每章都切换(失去主线连贯性)\n- 切换到不重要的角色(分散焦点)\n\n### 切换标记\n\n```\n#### 场景A:主角视角\n...\n\n---\n\n#### 场景B:反派视角(3小时后)\n...\n\n---\n\n#### 场景C:主角视角(继续)\n```\n\n### 切换后快速定位\n\n每次切换后,用1句话快速建立新视角:\n\n```\n❌ 错误:\n他看着窗外。他不知道的是,她正在做准备。\n\n✅ 正确:\n他看着窗外。\n\n---\n\n她正在整理装备——三把刀、两包炸药,和一张地图。\n(新视角,直接展示行动)\n```\n\n---\n\n## 场景设计工作卡\n\n每个场景设计前填写:\n\n```markdown\n## 场景工作卡\n\n**场景编号**:第X章-场景Y\n\n**场景任务**(只能选一个主任务):\n[ ] 推主线 - 具体是:______\n[ ] 推人物 - 具体是:______\n[ ] 推关系 - 具体是:______\n[ ] 推设定 - 具体是:______\n\n**场景类型**:\n[ ] Scene(推进) [ ] Sequel(消化)\n\n**晚进早出**:\n切入点:______(从哪一刻开始)\n预期结束点:______(什么时候切走)\n切入点评分:___/2\n\n**过渡方式**(与上一场的衔接):\n[ ] 因果链 [ ] 悬念转移 [ ] 情绪对比\n[ ] 时间压缩 [ ] 空间跳转 [ ] POV切换\n\n**情绪曲线**:\n起点:___ → 触发:___ → 峰值:___ → 落点:___\n\n**预期字数**:______\n**实际字数**:______\n\n**价值测试**(写完后填写):\n[ ] 删除后会影响剧情理解\n[ ] 改变了角色状态\n[ ] 揭示了重要信息\n[ ] 以上都不是(考虑删除)\n```\n\n---\n\n## 场景自查清单\n\n每章交付前:\n\n- [ ] 每个场景有明确任务(推主线/人物/关系/设定)\n- [ ] 每个场景的切入点评分 ≥ +1\n- [ ] 场景之间有过渡(不是生硬跳跃)\n- [ ] 没有连续3个Scene没有Sequel\n- [ ] 每个场景有价值(通过价值测试至少1项)\n- [ ] 功能性场景已合并/伪装/加速/跳笔\n\n---\n\n## 常见错误修正\n\n### ❌ 场景没有任务\n\n**表现**:角色在聊天、吃饭、走路,什么都没发生。\n\n**修正**:\n- 给场景一个明确的任务\n- 或者删掉,用叙述代替\n\n### ❌ 场景切入太晚\n\n**表现**:铺垫太长,读者已经失去兴趣。\n\n**修正**:\n- 使用切入点评分表\n- 从冲突/异常开始,不要从日常开始\n\n### ❌ 场景结束太晚\n\n**表现**:高潮后还写了很多\"余波\"。\n\n**修正**:\n- 高潮后最多2段,然后切走\n- 余波留给下一场或叙述带过\n\n### ❌ 场景之间没有过渡\n\n**表现**:场景A结束,突然跳到场景B,读者困惑。\n\n**修正**:\n- 使用六种过渡技术之一\n- 至少让读者知道\"时间/地点/视角\"变了\n\n### ❌ 功能性场景太长\n\n**表现**:大段世界观解释、背景介绍。\n\n**修正**:\n- 使用四种处理策略之一\n- 字数控制在平均场景的30%以内\n\n---\n\n*好场景的标准:读者看完后,局面与之前不同了。*\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":12508,"content_sha256":"10da8054b59d425111cbfb1953b1b16a2269b64ccb931e70c6c00bd2128a2d14"},{"filename":"references/scene-design.md","content":"> ⚠️ **此为 v1 版本,已过时。推荐使用 [scene-design-v2.md](scene-design-v2.md)(含场景任务检查卡、切入点评分表、六种过渡技术、场景价值测试)。本文件仅作参考保留。**\n\n# 场景设计指南\n\n章节不是一团连续文字,而是一组有任务的场景。死章通常不是文笔不够,而是场景没有任务、阻碍和结果。\n\n## 场景最小骨架\n\n每个有效场景至少要回答 5 个问题:\n\n1. 谁在推动场景\n2. 他这一段想要什么\n3. 阻碍是什么\n4. 结果是成功、失败还是偏差成功\n5. 这段结束后,局面变了什么\n\n如果一段写完后局面没变,这段通常可以删。\n\n## 经典场景引擎\n\n### Scene:推进\n\n适合外部事件推进。\n\n- **Goal**:角色此刻想达成什么\n- **Conflict**:谁或什么拦住他\n- **Disaster**:结果变差,或付出代价\n\n### Sequel:消化\n\n适合高潮后的反应和下一个决定。\n\n- **Reaction**:人物如何承受刚发生的事\n- **Dilemma**:接下来有哪些都不理想的路\n- **Decision**:角色做出选择,推进下一场\n\n长篇好看,往往不是全靠 Scene,而是 Scene 和 Sequel 交替得当。\n\n## 章节内场景排序\n\n一个标准强章节,常见顺序如下:\n\n1. 进入点:异常、威胁、选择、误会、坏消息\n2. 施压点:阻碍升级,信息不对称\n3. 反应点:人物情绪、关系、判断发生变化\n4. 转折点:线索反转、关系扭转、计划落空\n5. 钩子点:把问题抛到下一章\n\n不要求每章都 5 场,但至少要有进入、施压、转折、钩子。\n\n## 四种常见场景任务\n\n### 1. 推主线\n\n- 线索推进\n- 危机升级\n- 对抗升级\n\n### 2. 推人物\n\n- 暴露缺陷\n- 测试价值观\n- 迫使角色做代价性选择\n\n### 3. 推关系\n\n- 信任增加或破裂\n- 权力关系变化\n- 情感温差变化\n\n### 4. 推设定\n\n- 通过行动暴露规则\n- 用代价证明规则\n- 在冲突中展示世界观,而不是讲课\n\n## 场景进入原则\n\n尽量晚进早出:\n\n- **晚进**:从已经有张力的位置切入,不从准备动作写起\n- **早出**:冲击落下后尽快切走,把余波留给下一场或下一章\n\n### 例子\n\n**弱进入:**\n他起床,洗脸,穿衣,出门,准备去见嫌疑人。\n\n**强进入:**\n嫌疑人看见他第一眼就跑了。\n\n## 场景里的信息投放\n\n一场里最多优先做 1-2 件核心事:\n\n- 揭示新信息\n- 改变关系状态\n- 制造新麻烦\n- 回收旧伏笔\n\n什么都想做,通常会散;什么都没做,通常会空。\n\n## 死场景信号\n\n- 角色只是在走流程\n- 大段解释背景,没有人被影响\n- 对话来回很多轮,但关系没变\n- 情绪写了很多,决定没有变化\n- 细节很多,但没有压力\n\n## 自查清单\n\n- [ ] 这个场景里谁最主动\n- [ ] 主动方的目标是否明确\n- [ ] 阻碍是否具体,不是笼统“很难”\n- [ ] 结尾是否让局面发生变化\n- [ ] 下一场是否因此被逼出来\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2996,"content_sha256":"1e8acc7df106df7a4e78af164d96c69c35269ca8390ade8ec6a48d2899d70cd5"},{"filename":"references/story-bible-template.md","content":"# 世界观与伏笔台账\n\n## 项目基准\n\n- **书名**:\n- **一句话卖点**:\n- **题材 / 子类型**:\n- **叙事视角**:\n- **目标读者**:\n- **文风关键词**:\n\n## 世界规则\n\n### 时空与社会背景\n- **时代 / 世界类型**:\n- **核心场景**:\n- **社会秩序 / 阶层关系**:\n- **关键禁忌 / 习俗**:\n\n### 规则系统\n- **力量 / 技术 / 推理规则**:\n- **规则边界**:\n- **代价**:\n- **常见误解**:\n\n## 势力与关系网\n\n| 势力 / 阵营 | 诉求 | 资源 | 与主角关系 | 当前状态 |\n|------------|------|------|------------|----------|\n| | | | | |\n\n## 长线伏笔台账\n\n| 伏笔 / 线索 | 首次出现 | 当前状态 | 计划回收章节 | 回收方式 |\n|------------|----------|----------|--------------|----------|\n| | | 待回收 | | |\n\n## 悬念追踪\n\n| 悬念问题 | 读者当前认知 | 真相 | 预计揭示节点 |\n|---------|--------------|------|--------------|\n| | | | |\n\n## 时间线锚点\n\n| 时间点 | 事件 | 影响人物 / 剧情 |\n|-------|------|------------------|\n| | | |\n\n## 角色当前状态\n\n| 角色 | 所在位置 | 情绪 | 公开目标 | 隐藏动机 | 与主角关系 |\n|------|----------|------|----------|----------|------------|\n| | | | | | |\n\n## 绝对不能忘的约束\n\n- \n- \n- \n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1500,"content_sha256":"42b170740e86422effdb5ce8014658a27a62e3a7b20a4d0ab0c1ba86b8b73fd3"},{"filename":"references/style-polishing.md","content":"# 中文小说文风打磨\n\n这份指南的目标不是写得华丽,而是写得像中文小说,而不是像把提纲翻译成段落。\n\n## 一、先清掉最常见的 AI 味\n\n### 1. 空泛情绪句\n\n避免:\n\n- 他心中涌起复杂的情绪。\n- 她的内心久久不能平静。\n- 一种难以言喻的感觉蔓延开来。\n\n改法:\n\n- 写身体反应\n- 写即时动作\n- 写说不出口的话\n- 写判断和选择\n\n### 2. 解释腔连接词\n\n少用:\n\n- 然而\n- 与此同时\n- 某种程度上\n- 这意味着\n- 可以说\n\n这些词不是不能用,而是 AI 常靠它们硬连接逻辑。中文小说更常用动作、停顿、视线、场景切换来承接。\n\n### 3. 四字词堆砌\n\n避免连续出现:\n\n- 心潮澎湃、思绪万千、恍然大悟、怒火中烧\n\n一两个点到为止可以,连续堆叠会像套模板。\n\n## 二、让句子有呼吸感\n\n### 长短句交替\n\n同一段里不要全是均匀句长。\n\n**弱:**\n他走进房间,发现桌上放着一封信,信封已经被拆开,里面的内容让他十分震惊,因为署名写着一个不该出现的人。\n\n**强:**\n他推门进去。\n\n桌上摆着一封信。封口已经被拆开。\n\n他只看了一眼署名,后背就绷紧了。\n\n那名字,不该出现。\n\n### 关键句单独成段\n\n重要发现、威胁、反转、告白、决定,单独成段会更有力。\n\n## 三、把“讲述”改成“落地”\n\n优先落到以下四类信息:\n\n- **动作**:他做了什么\n- **感官**:他看见、听见、闻到什么\n- **判断**:他当下怎么理解局面\n- **选择**:他接下来决定怎么做\n\n如果一句话既没有动作,也没有感官、判断或选择,通常就太虚了。\n\n## 四、视角要稳\n\n### 单视角时\n\n- 一场只贴一个主要视角人物\n- 不要同时写出别人心里怎么想,除非能从外在反应推出来\n\n### 群像时\n\n- 切视角要有明显换场或分隔\n- 每个视角都要有自己关心的问题\n- 不要只是轮流汇报情报\n\n## 五、对白要像人,不像作者分身\n\n- 每个人不要都说完整、正确、漂亮的话\n- 重要关系里,多写回避、打断、试探、沉默\n- 强人物不是靠金句多,而是靠选择和态度稳定\n\n## 六、信息披露要克制\n\n读者最不怕没全懂,最怕全讲完。\n\n### 好的披露方式\n\n- 先给异常,再补解释\n- 先给代价,再补规则\n- 先给结果,再慢慢揭原因\n\n### 差的披露方式\n\n- 一上来整段世界观说明\n- 角色像念设定文档\n- 刚有悬念就立刻解释完\n\n## 七、不同题材的文风偏向\n\n### 悬疑 / 推理\n\n- 更准,更冷,更少抒情废句\n- 描写优先服务线索与误导\n\n### 言情 / 情感\n\n- 重视关系温差和细节反应\n- 少喊“爱”,多写靠近、退让、迟疑和失衡\n\n### 奇幻 / 仙侠 / 科幻\n\n- 新名词不要扎堆首章倾倒\n- 设定词出现时,要立刻绑定代价、用途或风险\n\n### 都市现实\n\n- 多用具体生活细节和社会压力\n- 少用悬浮的大词概括人生\n\n## 八、终稿前的快速清理\n\n交稿前重点扫这几类句子:\n\n- 抽象情绪总结句\n- 连续三句同长度句子\n- 过度整齐的排比\n- 可删不影响剧情的修饰语\n- 所有人都像一个人说话的对白\n\n## 九、最后判断标准\n\n问自己三件事:\n\n- 这一段像不像有人正在经历,而不是有人正在解释\n- 这一章有没有非看不可的推进\n- 把人名遮住后,主要角色的声音还能不能区分\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3481,"content_sha256":"58b8896588067adddf1372b4b98af99443bd08dffc874d5b55c923b3506735d6"},{"filename":"scripts/character_tracker.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n人物一致性检查脚本\n从章节文件中提取人物出现、对白、情绪关键词,\n与人物档案对照,标记可能的矛盾。\n\"\"\"\n\nimport re\nimport sys\nfrom pathlib import Path\n\n# Ensure scripts/ directory is in path for utils import\nsys.path.insert(0, str(Path(__file__).resolve().parent))\n\nfrom utils import extract_text_from_chapter, find_chapter_files, setup_windows_encoding\n\nsetup_windows_encoding()\n\n\n# 情绪关键词映射\nEMOTION_KEYWORDS = {\n '愤怒': ['怒', '愤', '气', '吼', '咆哮', '拍桌', '踢', '摔', '咬牙', '攥拳'],\n '恐惧': ['怕', '恐惧', '惊恐', '战栗', '颤抖', '发抖', '后退', '冷汗'],\n '悲伤': ['悲', '哭', '泪', '抽泣', '哽咽', '低落', '黯然', '沉默'],\n '喜悦': ['笑', '喜', '乐', '欢呼', '跳跃', '兴奋', '激动'],\n '紧张': ['紧', '焦虑', '不安', '踱步', '来回', '坐立', '出汗'],\n '决心': ['决', '必须', '一定', '绝不', '发誓', '握拳'],\n '困惑': ['疑', '惑', '困惑', '不解', '皱眉', '思索', '纳闷'],\n}\n\n# 对白提取正则\nDIALOGUE_RE = re.compile(r'[\"「『]([^\"」』]+)[\"」』]')\n\n\ndef load_character_profiles(novel_dir: Path) -> list:\n \"\"\"从人物档案文件中加载人物信息\"\"\"\n profiles = []\n\n # 尝试读取 v2 人物档案\n v2_files = list(novel_dir.glob('01-人物档案*.md'))\n for profile_file in v2_files:\n content = profile_file.read_text(encoding='utf-8')\n # 提取人物名和声音锚点\n name = _extract_character_name(content)\n voice_anchors = _extract_voice_anchors(content)\n forbidden_words = _extract_forbidden_words(content)\n if name:\n profiles.append({\n 'name': name,\n 'voice_anchors': voice_anchors,\n 'forbidden_words': forbidden_words,\n 'file': str(profile_file),\n })\n\n return profiles\n\n\ndef _extract_character_name(content: str) -> str:\n \"\"\"从人物档案中提取人物名\"\"\"\n match = re.search(r'##\\s*(?:人物|角色)[::]?\\s*(.+)', content)\n if match:\n return match.group(1).strip()\n # 尝试标题\n match = re.search(r'#\\s*(.+?)(?:的|人物|角色)', content)\n if match:\n return match.group(1).strip()\n return ''\n\n\ndef _extract_voice_anchors(content: str) -> list:\n \"\"\"从人物档案中提取声音锚点(标志性对白)\"\"\"\n anchors = []\n matches = re.findall(r'[\"「『]([^\"」』]+)[\"」』]', content)\n anchors.extend(matches[:5])\n also = re.findall(r'\"([^\"]+)\"', content)\n anchors.extend(a for a in also if a not in anchors)\n return anchors[:5]\n\n\ndef _extract_forbidden_words(content: str) -> list:\n \"\"\"从人物档案中提取禁止用语\"\"\"\n forbidden = []\n section = ''\n for line in content.split('\\n'):\n if '禁止' in line and ('用语' in line or '说话' in line):\n section = 'forbidden'\n continue\n if section == 'forbidden' and line.strip().startswith('-'):\n word = line.strip().lstrip('- ').strip()\n if word:\n forbidden.append(word)\n elif section == 'forbidden' and line.startswith('#'):\n section = ''\n return forbidden\n\n\ndef detect_character_mentions(text: str, profile_names: list) -> dict:\n \"\"\"检测章节中人物的出现和情绪\"\"\"\n mentions = {}\n for name in profile_names:\n if name and name in text:\n # 提取该人物附近的对白\n dialogues = []\n for m in DIALOGUE_RE.finditer(text):\n dialogue = m.group(1)\n # 检查对白前后 200 字内是否有该人物名\n start = max(0, m.start() - 200)\n context = text[start:m.start()]\n if name in context:\n dialogues.append(dialogue)\n\n # 检测该人物附近的情绪关键词\n emotions_detected = {}\n for emotion, keywords in EMOTION_KEYWORDS.items():\n count = 0\n for kw in keywords:\n # 在人物名前后 500 字范围内搜索\n for nm in re.finditer(re.escape(name), text):\n start = max(0, nm.start() - 500)\n end = min(len(text), nm.end() + 500)\n context = text[start:end]\n count += context.count(kw)\n if count > 0:\n emotions_detected[emotion] = count\n\n mentions[name] = {\n 'appearances': text.count(name),\n 'dialogues': dialogues[:5],\n 'emotions': emotions_detected,\n }\n\n return mentions\n\n\ndef check_consistency(novel_dir: Path) -> dict:\n \"\"\"检查人物一致性\"\"\"\n chapter_files = find_chapter_files(novel_dir)\n if not chapter_files:\n return {'error': '未找到章节文件'}\n\n profiles = load_character_profiles(novel_dir)\n profile_names = [p['name'] for p in profiles if p['name']]\n\n if not profile_names:\n return {'error': '未找到人物档案(01-人物档案*.md),无法执行一致性检查'}\n\n warnings = []\n chapter_data = []\n\n for chapter_file in chapter_files:\n content = extract_text_from_chapter(chapter_file)\n match = re.match(r'第(\\d+)章', chapter_file.name)\n chapter_num = int(match.group(1)) if match else 0\n\n mentions = detect_character_mentions(content, profile_names)\n\n # 检查禁止用语\n for profile in profiles:\n name = profile['name']\n if name in mentions:\n for dialogue in mentions[name].get('dialogues', []):\n for forbidden in profile['forbidden_words']:\n if forbidden in dialogue:\n warnings.append({\n 'chapter': chapter_num,\n 'character': name,\n 'type': 'forbidden_word',\n 'detail': f'使用了禁止用语\"{forbidden}\"',\n 'context': dialogue[:40],\n })\n\n chapter_data.append({\n 'chapter': chapter_num,\n 'mentions': mentions,\n })\n\n # 检测情绪突变:同一人物连续章节情绪大幅波动\n for name in profile_names:\n prev_emotion = None\n prev_chapter = None\n for cd in chapter_data:\n if name not in cd['mentions']:\n continue\n emotions = cd['mentions'][name].get('emotions', {})\n dominant = max(emotions, key=emotions.get) if emotions else None\n\n if prev_emotion and dominant:\n # 敌对情绪突变(愤怒→喜悦 或 恐惧→决心 等)\n opposite_pairs = [('愤怒', '喜悦'), ('恐惧', '决心'), ('悲伤', '喜悦'), ('困惑', '决心')]\n if (prev_emotion, dominant) in opposite_pairs or (dominant, prev_emotion) in opposite_pairs:\n if prev_chapter and cd['chapter'] - prev_chapter \u003c= 1:\n warnings.append({\n 'chapter': cd['chapter'],\n 'character': name,\n 'type': 'emotion_spike',\n 'detail': f'情绪从\"{prev_emotion}\"突变为\"{dominant}\"(第{prev_chapter}-{cd[\"chapter\"]}章)',\n 'context': '',\n })\n\n prev_emotion = dominant\n prev_chapter = cd['chapter']\n\n # 优先级排序\n type_order = {'forbidden_word': 0, 'emotion_spike': 1}\n warnings.sort(key=lambda w: type_order.get(w['type'], 2))\n\n return {\n 'total_chapters': len(chapter_files),\n 'profiles': profiles,\n 'chapter_data': chapter_data,\n 'warnings': warnings,\n }\n\n\ndef print_report(novel_dir: Path, results: dict):\n \"\"\"打印人物一致性报告\"\"\"\n print('\\n' + '=' * 60)\n print('人物一致性检查报告')\n print('=' * 60)\n print(f'小说:{novel_dir.name}')\n print(f'检查章节:{results[\"total_chapters\"]}章')\n print(f'人物档案:{len(results[\"profiles\"])}个')\n print()\n\n # 人物概览\n print('【人物出现统计】')\n for cd in results['chapter_data']:\n mentions_str = ', '.join(\n f'{name}({data[\"appearances\"]}次)' for name, data in cd['mentions'].items()\n )\n if mentions_str:\n print(f\" 第{cd['chapter']:2d}章:{mentions_str}\")\n print()\n\n # 警告\n if results['warnings']:\n warn_icons = {'forbidden_word': '🔴', 'emotion_spike': '🟡'}\n print('【警告】')\n for w in results['warnings']:\n icon = warn_icons.get(w['type'], '⚠️')\n if w['context']:\n print(f\" {icon} 第{w['chapter']}章 | {w['character']} | {w['detail']}\")\n print(f\" 上下文:{w['context']}\")\n else:\n print(f\" {icon} 第{w['chapter']}章 | {w['character']} | {w['detail']}\")\n print()\n else:\n print('✅ 未检测到明显的人物一致性问题\\n')\n\n print('=' * 60)\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法:python scripts/character_tracker.py \u003c小说目录路径>')\n print('示例:python scripts/character_tracker.py novels/书名')\n return\n\n novel_dir = Path(sys.argv[1])\n if not novel_dir.exists():\n print(f'错误:目录不存在 - {novel_dir}')\n return\n\n results = check_consistency(novel_dir)\n if 'error' in results:\n print(f'错误:{results[\"error\"]}')\n return\n\n print_report(novel_dir, results)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":9872,"content_sha256":"81977305b8f9fccc072f9bf705550e2abad1645db417ab4158c564706e78aa2b"},{"filename":"scripts/check_ai_style.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nAI 味检测脚本\n检测章节文件中的 9 种 AI 写作痕迹,提供量化报告和改进建议\n支持单文件和批量检测(--all)\n\"\"\"\n\nimport re\nimport sys\nimport math\nfrom pathlib import Path\n\n# Ensure scripts/ directory is in path for utils import\nsys.path.insert(0, str(Path(__file__).resolve().parent))\n\nfrom utils import extract_text_from_chapter, count_chinese_words, find_chapter_files, setup_windows_encoding\n\nsetup_windows_encoding()\n\n\n# AI 味检测规则(9 种症状,与 SKILL.md 和 ai-style-examples.md 对齐)\nAI_PATTERNS = {\n 'vague_adjectives': {\n 'name': '空泛形容词',\n 'patterns': [\n r'很\\w{1,3}的',\n r'非常\\w{1,3}的',\n r'无比\\w{1,3}的',\n r'十分\\w{1,3}的',\n r'相当\\w{1,3}的',\n r'特别\\w{1,3}的',\n r'极其\\w{1,3}的',\n r'格外\\w{1,3}的',\n ],\n 'threshold': 3,\n 'severity': 'high',\n 'suggestion': '用具体动作或细节替代抽象形容词,如\"他很悲伤\"→\"他盯着手机屏幕,拇指在玻璃上滑了三次\"'\n },\n 'four_char_idioms': {\n 'name': '四字成语堆砌',\n 'check_func': 'check_four_char_idioms',\n 'common_idioms': {\n '情不自禁', '不由自主', '心潮澎湃', '思绪万千', '百感交集',\n '恍然大悟', '若有所思', '目不转睛', '聚精会神', '全神贯注',\n '忐忑不安', '心惊胆战', '惶恐不安', '惊慌失措', '大惊失色',\n '喜出望外', '欣喜若狂', '兴高采烈', '眉开眼笑', '笑容满面',\n '愁眉苦脸', '垂头丧气', '无精打采', '闷闷不乐', '唉声叹气',\n '心神不宁', '坐立不安', '魂不守舍', '心不在焉',\n '感慨万千', '不胜唏嘘', '五味杂陈', '难以言表',\n '心旷神怡', '义正辞严', '义愤填膺', '忧心忡忡',\n '瞠目结舌', '不寒而栗', '毛骨悚然', '如释重负',\n '心领神会', '心照不宣', '暗自心惊', '面如死灰',\n },\n 'threshold': 5,\n 'severity': 'medium',\n 'suggestion': '减少成语使用,用自然描述替代。如\"他喜出望外\"→\"他差点撞上门框\"'\n },\n 'explanatory_connectors': {\n 'name': '解释性连接词',\n 'patterns': [\n r'然而', '不过', '可是', '但是',\n r'因为', '由于', '因此', '所以',\n r'虽然', '尽管', '即使',\n r'而且', '并且', '同时',\n r'其实', '事实上', '实际上',\n r'这意味着', '这表明', '这说明',\n r'某种程度上', '从某种意义上',\n r'不难看出', '显而易见',\n r'总而言之', '总的来说',\n ],\n 'threshold': 8,\n 'severity': 'medium',\n 'suggestion': '减少解释性连接词,让情节自然推进。如\"然而他并不知道\"→直接写\"他不知道\"'\n },\n 'time_transitions': {\n 'name': '时间转折词滥用',\n 'patterns': [\n r'突然', '忽然', '猛然', '骤然',\n r'就在这时', '就在此时', '正在这时',\n r'下一秒', '下一刻', '转眼间',\n r'紧接着', '随即', '立刻', '马上',\n r'与此同时', '另一边', '另一边厢',\n ],\n 'threshold': 5,\n 'unit': 'chapter',\n 'severity': 'low',\n 'suggestion': '控制时间转折词频率,用场景自然过渡替代。如\"突然门开了\"→\"门开了\"'\n },\n 'emotion_tags': {\n 'name': '情绪标签句',\n 'patterns': [\n r'[他她它]感到.*?的',\n r'[他她它]心中.*?的',\n r'[他她它]心里.*?的',\n r'[他她它]的.?里.*?的',\n r'一种.?的感觉涌上心头',\n r'[他她它]不禁',\n r'[他她它]不由得',\n r'前所未有的',\n ],\n 'threshold': 2,\n 'severity': 'high',\n 'suggestion': '用动作和细节展示情绪,而非直接标签。如\"他感到悲伤\"→\"他低下头,盯着地面\"'\n },\n 'stiff_dialogue': {\n 'name': '过度书面化对白',\n 'patterns': [\n r'\"[^\"]{0,5}(认为|认为这个|假设|假设存在|建议|提议|表示)[^\"]*\"',\n r'\"[^\"]{0,10}(有必要|不可或缺|至关重要|值得注意)[^\"]*\"',\n r'\"[^\"]*(也就是说|换言之|简而言之|综上所述)[^\"]*\"',\n r'\"[^\"]*(首先|其次|最后|第一|第二)[^\"]{5,}\"',\n ],\n 'threshold': 2,\n 'severity': 'medium',\n 'suggestion': '对白应口语化,如\"我认为这个假设存在漏洞\"→\"扯淡,这说法有三个问题\"'\n },\n 'pov_confusion': {\n 'name': '视角混乱',\n 'check_func': 'check_pov_confusion',\n 'threshold': 2,\n 'severity': 'high',\n 'suggestion': '同一段内不应切换多个角色的内心视角。用对话和动作替代跳转'\n },\n 'info_dump': {\n 'name': '信息倾倒',\n 'check_func': 'check_info_dump',\n 'threshold': 2,\n 'severity': 'medium',\n 'suggestion': '背景信息应嵌入对话和行动,而非整段说明。每段不超过 3 句纯说明'\n },\n 'uniform_sentences': {\n 'name': '句式均匀度',\n 'check_func': 'check_sentence_variety',\n 'threshold': 10,\n 'severity': 'low',\n 'suggestion': '增加句式变化:短句破开长句、倒装句、省略句、碎片化表达'\n }\n}\n\n\ndef check_four_char_idioms(text: str, pattern_info: dict) -> tuple:\n \"\"\"检查四字成语堆砌——只匹配已知成语列表,避免误杀\"\"\"\n common = pattern_info['common_idioms']\n matches = []\n for idiom in common:\n count = text.count(idiom)\n if count > 0:\n matches.extend([idiom] * count)\n return len(matches), len(matches), matches[:5]\n\n\ndef check_pov_confusion(text: str, pattern_info: dict) -> tuple:\n \"\"\"检查视角混乱——同一段内切换多个角色内心\"\"\"\n paragraphs = text.split('\\n\\n')\n matches = []\n pov_pattern = re.compile(r'([他她它])[^\\n]{0,20}(想|觉得|感到|知道|明白|意识到|心[中里])')\n\n for para in paragraphs:\n found_persons = set()\n for m in pov_pattern.finditer(para):\n found_persons.add(m.group(1))\n # 如果同一段内出现\"他想\"+\"她想\"等混合人称内心,标记\n if len(found_persons) >= 2:\n matches.append(para[:50] + '...' if len(para) > 50 else para)\n\n return len(matches), len(matches), matches[:3]\n\n\ndef check_info_dump(text: str, pattern_info: dict) -> tuple:\n \"\"\"检查信息倾倒——连续 3 句以上纯说明性内容(无对话、无动作、无情感反应)\"\"\"\n paragraphs = text.split('\\n\\n')\n matches = []\n has_dialogue = re.compile(r'[\"「『]')\n has_action = re.compile(r'[他她]([走跑坐站拿推拉打挥握伸点头摇头叹息微笑皱眉咬握紧攥])')\n\n for para in paragraphs:\n sentences = [s.strip() for s in re.split(r'[。!?]', para) if s.strip()]\n if len(sentences) \u003c 3:\n continue\n consecutive_exposition = 0\n for sent in sentences:\n is_exposition = not has_dialogue.search(sent) and not has_action.search(sent)\n if is_exposition:\n consecutive_exposition += 1\n else:\n consecutive_exposition = 0\n if consecutive_exposition >= 3:\n matches.append(para[:60] + '...' if len(para) > 60 else para)\n\n return len(matches), len(matches), matches[:3]\n\n\ndef check_sentence_variety(text: str, pattern_info: dict) -> tuple:\n \"\"\"检查句式均匀度——句长标准差\"\"\"\n sentences = re.split(r'[。!?]+', text)\n sentences = [s.strip() for s in sentences if s.strip()]\n if len(sentences) \u003c 5:\n return 0, 0, []\n\n lengths = [count_chinese_words(s) for s in sentences]\n mean = sum(lengths) / len(lengths)\n variance = sum((x - mean) ** 2 for x in lengths) / len(lengths)\n std = math.sqrt(variance)\n\n return std, std, []\n\n\ndef check_pattern(text: str, pattern_name: str) -> tuple:\n \"\"\"检查特定 AI 味模式\"\"\"\n pattern_info = AI_PATTERNS[pattern_name]\n\n # 特殊处理函数\n if 'check_func' in pattern_info:\n func_name = pattern_info['check_func']\n func_map = {\n 'check_four_char_idioms': check_four_char_idioms,\n 'check_pov_confusion': check_pov_confusion,\n 'check_info_dump': check_info_dump,\n 'check_sentence_variety': check_sentence_variety,\n }\n func = func_map.get(func_name)\n if func:\n return func(text, pattern_info)\n return 0, 0, []\n\n patterns = pattern_info['patterns']\n matches = []\n\n if isinstance(patterns, list):\n for pattern in patterns:\n if isinstance(pattern, str) and not pattern.startswith('\\\\'):\n count = text.count(pattern)\n if count > 0:\n matches.extend([pattern] * count)\n else:\n found = re.findall(pattern, text)\n matches.extend(found)\n\n count = len(matches)\n return count, count, matches[:5]\n\n\ndef calculate_severity_score(check_results: dict, total_words: int) -> dict:\n \"\"\"计算严重程度和 AI 味评级\"\"\"\n total_score = 0\n severity_weights = {'high': 3, 'medium': 2, 'low': 1}\n\n for pattern_name, result in check_results.items():\n if pattern_name in ('uniform_sentences', 'pov_confusion', 'info_dump'):\n if pattern_name == 'uniform_sentences':\n std = result['count']\n if std \u003c 10:\n total_score += (10 - std) * 0.5\n elif pattern_name == 'pov_confusion':\n ratio = result['count'] / AI_PATTERNS[pattern_name]['threshold'] if AI_PATTERNS[pattern_name]['threshold'] > 0 else 0\n total_score += ratio * 3\n elif pattern_name == 'info_dump':\n ratio = result['count'] / AI_PATTERNS[pattern_name]['threshold'] if AI_PATTERNS[pattern_name]['threshold'] > 0 else 0\n total_score += ratio * 2\n continue\n\n info = AI_PATTERNS[pattern_name]\n count = result['count']\n threshold = info['threshold']\n severity = info['severity']\n\n words_per_thousand = total_words / 1000 if total_words > 0 else 1\n if info.get('unit') == 'chapter':\n ratio = count / threshold if threshold > 0 else 0\n else:\n ratio = (count / words_per_thousand) / threshold if threshold > 0 else 0\n\n weight = severity_weights.get(severity, 1)\n total_score += ratio * weight\n\n if total_score \u003c 3:\n rating = '轻度'\n rating_emoji = '🟢'\n elif total_score \u003c 6:\n rating = '中度'\n rating_emoji = '🟡'\n else:\n rating = '重度'\n rating_emoji = '🔴'\n\n return {\n 'score': round(total_score, 1),\n 'rating': rating,\n 'rating_emoji': rating_emoji\n }\n\n\ndef check_ai_style(file_path: str) -> dict:\n \"\"\"检查单个文件的 AI 味\"\"\"\n path = Path(file_path)\n\n if not path.exists():\n return {\n 'file': str(path),\n 'exists': False,\n 'error': f'文件不存在:{file_path}'\n }\n\n text = extract_text_from_chapter(path)\n total_words = count_chinese_words(text)\n\n if total_words == 0:\n return {\n 'file': str(path),\n 'exists': True,\n 'word_count': 0,\n 'error': '未检测到正文内容'\n }\n\n results = {}\n for pattern_name, info in AI_PATTERNS.items():\n count, raw_count, examples = check_pattern(text, pattern_name)\n\n threshold = info['threshold']\n\n if info.get('unit') == 'chapter':\n density = count\n threshold_display = f'\u003c{threshold}/章'\n elif pattern_name == 'uniform_sentences':\n density = round(count, 1)\n threshold_display = f'>{threshold}'\n else:\n density = round((count / total_words) * 1000, 2) if total_words > 0 else 0\n threshold_display = f'\u003c{threshold}/千字'\n\n if pattern_name == 'uniform_sentences':\n status = '✅' if density >= threshold else '❌'\n elif pattern_name in ('pov_confusion', 'info_dump'):\n status = '✅' if count \u003c= threshold else '❌'\n else:\n status = '✅' if density \u003c= threshold else '❌'\n\n results[pattern_name] = {\n 'name': info['name'],\n 'count': count,\n 'density': density,\n 'threshold': threshold,\n 'threshold_display': threshold_display,\n 'severity': info['severity'],\n 'status': status,\n 'suggestion': info['suggestion'],\n 'examples': examples\n }\n\n severity = calculate_severity_score(results, total_words)\n\n return {\n 'file': str(path),\n 'exists': True,\n 'word_count': total_words,\n 'check_results': results,\n 'severity': severity\n }\n\n\ndef print_report(result: dict):\n \"\"\"打印单个文件的检测报告\"\"\"\n if not result.get('exists', False):\n print(f'❌ {result.get(\"error\", \"文件不存在\")}')\n return\n\n if 'error' in result:\n print(f'⚠️ {result[\"error\"]}')\n return\n\n print('\\n' + '=' * 70)\n print('🤖 AI 味检测报告')\n print('=' * 70)\n print(f'\\n📄 文件:{Path(result[\"file\"]).name}')\n print(f'📝 字数:{result[\"word_count\"]:,} 字')\n\n severity = result['severity']\n print(f'\\n{severity[\"rating_emoji\"]} AI 味评级:{severity[\"rating\"]} (综合得分:{severity[\"score\"]})')\n\n print('\\n' + '-' * 70)\n print('详细检测结果:')\n print('-' * 70)\n\n sorted_results = sorted(\n result['check_results'].items(),\n key=lambda x: {'high': 0, 'medium': 1, 'low': 2}.get(x[1]['severity'], 3)\n )\n\n for pattern_name, check in sorted_results:\n status = check['status']\n name = check['name']\n density = check['density']\n threshold_display = check['threshold_display']\n severity_level = check['severity']\n\n severity_icon = {'high': '🔴', 'medium': '🟡', 'low': '🟢'}.get(severity_level, '⚪')\n\n print(f'\\n{status} {severity_icon} {name}')\n print(f' 当前:{density} | 阈值:{threshold_display}')\n\n if check['examples']:\n ex_str = ', '.join(str(e)[:30] for e in check['examples'][:3])\n print(f' 示例:{ex_str}')\n\n if status == '❌':\n suggestion = check['suggestion']\n print(f' 💡 建议:{suggestion[:60]}{\"...\" if len(suggestion) > 60 else \"\"}')\n\n print('\\n' + '=' * 70)\n\n if severity['rating'] == '重度':\n print('\\n⚠️ 重度 AI 味警告')\n print(' 建议重写本章,重点参考以下改进方向:')\n print(' 1. 用具体动作替代情绪标签(\"他很悲伤\"→\"他低着头\")')\n print(' 2. 减少成语和四字词堆砌')\n print(' 3. 增加句式变化,使用短句、省略句')\n failed = [c for c in result['check_results'].values() if c['status'] == '❌']\n if failed:\n print(f' 4. 重点修复:{\", \".join(c[\"name\"] for c in failed[:3])}')\n elif severity['rating'] == '中度':\n print('\\n💡 中度 AI 味,建议优化以下方面:')\n failed_checks = [c for c in result['check_results'].values() if c['status'] == '❌']\n for i, check in enumerate(failed_checks[:3], 1):\n print(f' {i}. {check[\"name\"]}: {check[\"suggestion\"][:50]}...')\n else:\n print('\\n✅ AI 味控制良好,保持当前写作风格')\n\n print('\\n📚 参考文档:references/ai-style-examples.md')\n print('=' * 70 + '\\n')\n\n\ndef print_batch_summary(results: list):\n \"\"\"打印批量检测结果摘要\"\"\"\n print('\\n' + '=' * 70)\n print('🤖 AI 味批量检测报告')\n print('=' * 70)\n\n total = len(results)\n mild = sum(1 for r in results if r.get('severity', {}).get('rating') == '轻度')\n moderate = sum(1 for r in results if r.get('severity', {}).get('rating') == '中度')\n severe = sum(1 for r in results if r.get('severity', {}).get('rating') == '重度')\n errors = sum(1 for r in results if 'error' in r and r.get('exists', True))\n\n print(f'\\n📊 总览:{total} 章 | 🟢轻度 {mild} | 🟡中度 {moderate} | 🔴重度 {severe} | ⚠️错误 {errors}')\n\n # 按严重程度排序\n severity_order = {'重度': 0, '中度': 1, '轻度': 2}\n valid_results = [r for r in results if 'severity' in r]\n valid_results.sort(key=lambda r: severity_order.get(r['severity']['rating'], 3))\n\n print('\\n' + '-' * 70)\n print(f'{\"章节\":\u003c30} {\"字数\":>6} {\"评级\":>6} {\"得分\":>6} {\"主要问题\"}')\n print('-' * 70)\n\n for r in valid_results:\n name = Path(r['file']).name\n word_count = r['word_count']\n rating = r['severity']['rating']\n score = r['severity']['score']\n\n failed = [c['name'] for c in r['check_results'].values() if c['status'] == '❌']\n issues = ', '.join(failed[:2]) if failed else '—'\n\n print(f'{name:\u003c30} {word_count:>6,} {rating:>6} {score:>6} {issues}')\n\n if severe > 0:\n print(f'\\n⚠️ {severe} 章重度 AI 味,建议优先重写')\n if moderate > 0:\n print(f'💡 {moderate} 章中度 AI 味,建议针对性优化')\n\n print('\\n📚 参考文档:references/ai-style-examples.md')\n print('=' * 70 + '\\n')\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法:')\n print(' python scripts/check_ai_style.py \u003c章节文件路径>')\n print(' python scripts/check_ai_style.py --all \u003c小说目录路径>')\n print('')\n print('示例:')\n print(' python scripts/check_ai_style.py novels/故事/第01章.md')\n print(' python scripts/check_ai_style.py --all novels/故事')\n return\n\n if sys.argv[1] == '--all':\n if len(sys.argv) \u003c 3:\n print('错误:使用 --all 时需要指定目录路径')\n return\n novel_dir = Path(sys.argv[2])\n if not novel_dir.exists():\n print(f'错误:目录不存在 - {novel_dir}')\n return\n\n chapter_files = find_chapter_files(novel_dir)\n if not chapter_files:\n print('未找到章节文件')\n return\n\n all_results = []\n for chapter_file in chapter_files:\n result = check_ai_style(str(chapter_file))\n all_results.append(result)\n\n # 打印每个文件的简要结果\n for result in all_results:\n if 'error' in result and not result.get('exists', True):\n print(f'❌ {Path(result[\"file\"]).name}: {result[\"error\"]}')\n continue\n if 'error' in result:\n continue\n\n severity = result['severity']\n name = Path(result['file']).name\n failed = [c['name'] for c in result['check_results'].values() if c['status'] == '❌']\n if failed:\n print(f'{severity[\"rating_emoji\"]} {name}: {severity[\"rating\"]}({\", \".join(failed[:2])}超标)')\n else:\n print(f'✅ {name}: {severity[\"rating\"]}')\n\n # 打印汇总\n print_batch_summary(all_results)\n else:\n file_path = sys.argv[1]\n result = check_ai_style(file_path)\n print_report(result)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":19831,"content_sha256":"867f453529adaa31b0bda6c8b410c504e95a79ffa60c72a251026e8e353c1427"},{"filename":"scripts/check_chapter_wordcount.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n章节字数检查脚本\n检查指定章节文件的字数,低于 3000 字时提示需要扩充\n\"\"\"\n\nimport sys\nfrom pathlib import Path\n\n# Ensure scripts/ directory is in path for utils import\nsys.path.insert(0, str(Path(__file__).resolve().parent))\n\nfrom utils import extract_text_from_chapter, count_chinese_words, find_chapter_files, setup_windows_encoding\n\nsetup_windows_encoding()\n\n# Backward compatibility alias for existing tests\nextract_content_from_chapter = extract_text_from_chapter\n\n\ndef check_chapter(file_path: str, min_words: int = 3000) -> dict:\n \"\"\"检查单个章节的字数\"\"\"\n path = Path(file_path)\n\n if not path.exists():\n return {\n 'file': str(path),\n 'exists': False,\n 'word_count': 0,\n 'status': 'error',\n 'message': f'文件不存在:{file_path}'\n }\n\n main_content = extract_text_from_chapter(path)\n word_count = count_chinese_words(main_content)\n\n status = 'pass' if word_count >= min_words else 'fail'\n message = f'字数:{word_count}' + (\n f' (✓ 达标)' if word_count >= min_words else f' (✗ 不足,需要至少 {min_words} 字)'\n )\n\n return {\n 'file': str(path),\n 'exists': True,\n 'word_count': word_count,\n 'status': status,\n 'message': message\n }\n\n\ndef check_all_chapters(directory: str, min_words: int = 3000) -> list:\n \"\"\"检查目录下所有符合模式的章节文件\"\"\"\n dir_path = Path(directory)\n if not dir_path.exists():\n print(f'错误:目录不存在 - {directory}')\n return []\n\n chapter_files = find_chapter_files(dir_path)\n results = []\n\n for chapter_file in chapter_files:\n result = check_chapter(str(chapter_file), min_words)\n results.append(result)\n\n return results\n\n\ndef print_results(results: list, min_words: int = 3000):\n \"\"\"打印检查结果\"\"\"\n if not results:\n print('没有找到章节文件')\n return\n\n total_words = 0\n passed = 0\n failed = 0\n\n print('\\n' + '=' * 60)\n print('章节字数检查报告')\n print('=' * 60)\n\n for result in results:\n if not result['exists']:\n print(f'\\n❌ {result[\"file\"]}')\n print(f' {result[\"message\"]}')\n continue\n\n total_words += result['word_count']\n if result['status'] == 'pass':\n passed += 1\n icon = '✅'\n else:\n failed += 1\n icon = '⚠️ '\n\n print(f'\\n{icon} {Path(result[\"file\"]).name}')\n print(f' {result[\"message\"]}')\n\n print('\\n' + '-' * 60)\n print(f'总计:{len(results)} 章 | {passed} 章达标 | {failed} 章不足 | 总字数:{total_words:,}')\n print('-' * 60)\n\n if failed > 0:\n print(f'\\n⚠️ 有 {failed} 章内容不足 {min_words} 字,建议使用扩充技巧:')\n print(' - 添加细节描写(环境、心理、动作)')\n print(' - 增加对话场景')\n print(' - 扩展人物内心活动')\n print(' - 补充背景故事')\n print(f'\\n 参考:references/content-expansion.md')\n\n\ndef main():\n \"\"\"主函数\"\"\"\n min_words = 3000\n\n if len(sys.argv) \u003c 2:\n print('用法:')\n print(' 检查单个章节:python scripts/check_chapter_wordcount.py \u003c章节文件路径> [最小字数]')\n print(' 检查所有章节:python scripts/check_chapter_wordcount.py --all \u003c目录路径> [最小字数]')\n print('')\n print('示例:')\n print(' python scripts/check_chapter_wordcount.py novels/故事/第01章.md')\n print(' python scripts/check_chapter_wordcount.py novels/故事/第01章.md 3500')\n print(' python scripts/check_chapter_wordcount.py --all novels/故事')\n print(' python scripts/check_chapter_wordcount.py --all novels/故事 3500')\n return\n\n if sys.argv[1] == '--all':\n if len(sys.argv) \u003c 3:\n print('错误:使用 --all 时需要指定目录路径')\n return\n directory = sys.argv[2]\n min_words = int(sys.argv[3]) if len(sys.argv) > 3 else 3000\n results = check_all_chapters(directory, min_words=min_words)\n print_results(results, min_words)\n else:\n file_path = sys.argv[1]\n min_words = int(sys.argv[2]) if len(sys.argv) > 2 else 3000\n result = check_chapter(file_path, min_words)\n print_results([result], min_words)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":4553,"content_sha256":"835f08f5a612bfd3441310f93de9ceb4bf2b5bb2d799f4f684492b376048ef0a"},{"filename":"scripts/check_novel_health.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n小说健康检查脚本(整合版)\n整合原有 check_novel_health.py 和 check_rhythm.py 的功能。\n检查字数健康、节奏健康、场景多样性和连续性,生成体检报告。\n\"\"\"\n\nimport re\nimport sys\nfrom pathlib import Path\nfrom collections import defaultdict\n\n# Ensure scripts/ directory is in path for utils import\nsys.path.insert(0, str(Path(__file__).resolve().parent))\n\nfrom utils import extract_text_from_chapter, count_chinese_words, find_chapter_files, setup_windows_encoding\n\nsetup_windows_encoding()\n\n\n# 场景类型检测关键词(统一版本,移除重复定义)\nSCENE_KEYWORDS = {\n '室内对话': ['房间', '室内', '屋里', '屋内', '客厅', '卧室', '办公室', '教室'],\n '户外场景': ['外面', '户外', '街道', '路上', '天空', '花园', '广场', '野外', '山上', '河边'],\n '动作场景': ['跑', '跳', '战斗', '打架', '追逐', '冲', '飞', '砍', '射'],\n '回忆闪回': ['想起', '记得', '回忆', '那时候', '从前', '曾经', '往事'],\n '情感沉淀': ['沉默', '久久', '凝视', '望着', '独自', '一个人'],\n}\n\n# 对白密度阈值\nDIALOGUE_MARKER = re.compile(r'[\"「『]')\n\n\ndef detect_scene_type(text: str) -> str:\n \"\"\"检测场景类型(升级版:6 种类型)\"\"\"\n scores = {}\n for scene_type, keywords in SCENE_KEYWORDS.items():\n scores[scene_type] = sum(1 for kw in keywords if kw in text)\n\n # 对白密度判定:对白占比高的归为对话场景\n dialogue_count = len(DIALOGUE_MARKER.findall(text))\n chinese_count = count_chinese_words(text)\n if chinese_count > 0 and dialogue_count / (chinese_count / 100) > 2:\n scores['室内对话'] = scores.get('室内对话', 0) + 3\n\n best_type = max(scores, key=scores.get) if any(scores.values()) else '其他'\n if scores[best_type] \u003c 1:\n return '其他'\n return best_type\n\n\ndef check_novel(novel_dir: Path) -> dict:\n \"\"\"检查小说健康状态\"\"\"\n chapter_files = find_chapter_files(novel_dir)\n\n if not chapter_files:\n return {'error': '未找到章节文件'}\n\n chapters = []\n word_counts = []\n scene_types = []\n\n for chapter_file in chapter_files:\n content = extract_text_from_chapter(chapter_file)\n word_count = count_chinese_words(content)\n scene_type = detect_scene_type(content)\n\n match = re.match(r'第(\\d+)章', chapter_file.name)\n chapter_num = int(match.group(1)) if match else 0\n\n chapters.append({'number': chapter_num, 'word_count': word_count, 'scene_type': scene_type, 'file': chapter_file})\n word_counts.append(word_count)\n scene_types.append(scene_type)\n\n # 字数统计\n avg_words = sum(word_counts) / len(word_counts) if word_counts else 0\n max_words = max(word_counts) if word_counts else 0\n min_words = min(word_counts) if word_counts else 0\n max_chapter = chapters[word_counts.index(max_words)]['number'] if word_counts else 0\n min_chapter = chapters[word_counts.index(min_words)]['number'] if word_counts else 0\n variance = sum((w - avg_words) ** 2 for w in word_counts) / len(word_counts) if word_counts else 0\n std_dev = variance ** 0.5\n\n # 场景分布\n scene_counts = defaultdict(int)\n for st in scene_types:\n scene_counts[st] += 1\n\n # 场景重复警告\n scene_warnings = []\n consecutive_count = 1\n consecutive_type = scene_types[0] if scene_types else None\n for i in range(1, len(scene_types)):\n if scene_types[i] == consecutive_type:\n consecutive_count += 1\n else:\n if consecutive_count >= 3:\n scene_warnings.append(f\"'{consecutive_type}'连续{consecutive_count}章\")\n consecutive_count = 1\n consecutive_type = scene_types[i]\n if consecutive_count >= 3:\n scene_warnings.append(f\"'{consecutive_type}'连续{consecutive_count}章\")\n\n # 字数健康评分 (5 分制)\n if std_dev \u003c 500:\n word_score = 5\n elif std_dev \u003c 800:\n word_score = 4\n elif std_dev \u003c 1200:\n word_score = 3\n elif std_dev \u003c 2000:\n word_score = 2\n else:\n word_score = 1\n\n # 节奏健康评分(场景多样性)\n unique_scenes = len(set(scene_types))\n if unique_scenes >= 5:\n rhythm_score = 5\n elif unique_scenes >= 4:\n rhythm_score = 4\n elif unique_scenes >= 3:\n rhythm_score = 3\n elif unique_scenes >= 2:\n rhythm_score = 2\n else:\n rhythm_score = 1\n if scene_warnings:\n rhythm_score = max(1, rhythm_score - 1)\n\n return {\n 'chapters': chapters,\n 'total_chapters': len(chapters),\n 'total_words': sum(word_counts),\n 'avg_words': avg_words,\n 'std_dev': std_dev,\n 'max_words': max_words,\n 'max_chapter': max_chapter,\n 'min_words': min_words,\n 'min_chapter': min_chapter,\n 'word_score': word_score,\n 'scene_counts': dict(scene_counts),\n 'scene_warnings': scene_warnings,\n 'rhythm_score': rhythm_score,\n }\n\n\ndef print_report(novel_dir: Path, results: dict):\n \"\"\"打印体检报告\"\"\"\n print('\\n' + '=' * 60)\n print('小说体检报告')\n print('=' * 60)\n print(f'小说:{novel_dir.name}')\n print(f'检查章节:{results[\"total_chapters\"]}章')\n print(f'总字数:{results[\"total_words\"]:,}')\n print()\n\n print('【评分】')\n print(f' 字数健康:{results[\"word_score\"]}/5 {\"✅\" if results[\"word_score\"] >= 4 else \"⚠️\"}')\n print(f' 节奏健康:{results[\"rhythm_score\"]}/5 {\"✅\" if results[\"rhythm_score\"] >= 4 else \"⚠️\"}')\n print()\n\n print('【字数统计】')\n print(f' 平均:{results[\"avg_words\"]:.0f}字/章')\n print(f' 标准差:{results[\"std_dev\"]:.0f}')\n print(f' 最高:第{results[\"max_chapter\"]}章({results[\"max_words\"]:,}字)')\n print(f' 最低:第{results[\"min_chapter\"]}章({results[\"min_words\"]:,}字)')\n print()\n\n print('【场景分布】')\n for scene, count in sorted(results['scene_counts'].items(), key=lambda x: -x[1]):\n pct = count / results['total_chapters'] * 100\n print(f' {scene}:{count}章({pct:.0f}%)')\n print()\n\n if results.get('scene_warnings'):\n print('【警告】场景重复')\n for warning in results['scene_warnings']:\n print(f' ⚠️ {warning}')\n print()\n\n print('【章节概览】')\n for ch in results['chapters']:\n print(f\" 第{ch['number']:2d}章:{ch['word_count']:5,}字 | {ch['scene_type']}\")\n print()\n\n overall = (results['word_score'] * 0.5 + results['rhythm_score'] * 0.5)\n print(f'【综合评分】{overall:.1f}/5 {\"✅\" if overall >= 3.5 else \"⚠️\"}')\n print('=' * 60)\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法:python scripts/check_novel_health.py \u003c小说目录路径>')\n print('示例:python scripts/check_novel_health.py novels/书名')\n return\n\n novel_dir = Path(sys.argv[1])\n if not novel_dir.exists():\n print(f'错误:目录不存在 - {novel_dir}')\n return\n\n results = check_novel(novel_dir)\n if 'error' in results:\n print(f'错误:{results[\"error\"]}')\n return\n\n print_report(novel_dir, results)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":7400,"content_sha256":"c2f08f25b2365cb9a7cc7fa793500010f8f9dfa3dd42948a8f6b132c4362d262"},{"filename":"scripts/check_timeline.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n时间线一致性检查脚本\n从章节正文中提取时间线索(季节、天气、节日等),\n检测前后矛盾的时间线问题。\n\"\"\"\n\nimport re\nimport sys\nfrom pathlib import Path\n\n# Ensure scripts/ directory is in path for utils import\nsys.path.insert(0, str(Path(__file__).resolve().parent))\n\nfrom utils import extract_text_from_chapter, find_chapter_files, setup_windows_encoding\n\nsetup_windows_encoding()\n\n\n# 时间线索提取规则\nTIME_SIGNALS = {\n '季节': {\n '春': ['春天', '春季', '春日', '初春', '暮春', '三月', '四月', '桃花', '樱花', '柳絮'],\n '夏': ['夏天', '夏季', '夏日', '初夏', '盛夏', '六月', '七月', '酷暑', '蝉鸣', '荷花'],\n '秋': ['秋天', '秋季', '秋日', '初秋', '深秋', '九月', '十月', '落叶', '秋霜', '桂花'],\n '冬': ['冬天', '冬季', '冬日', '初冬', '寒冬', '十二月', '一月', '大雪', '寒风', '冰'],\n },\n '时段': {\n '早晨': ['清晨', '早上', '黎明', '拂晓', '日出', '晨光'],\n '白天': ['白天', '上午', '中午', '午后', '下午', '阳光'],\n '傍晚': ['傍晚', '黄昏', '日落', '夕阳', '暮色'],\n '夜晚': ['夜', '夜晚', '深夜', '凌晨', '月光', '星', '灯'],\n },\n '天气': {\n '晴': ['晴', '阳光', '万里无云', '艳阳'],\n '雨': ['雨', '暴雨', '细雨', '倾盆', '雷阵雨'],\n '雪': ['雪', '大雪', '暴雪', '鹅毛雪'],\n '雾': ['雾', '浓雾', '薄雾', '雾霾'],\n },\n}\n\n\ndef extract_time_signals(text: str) -> dict:\n \"\"\"从章节正文中提取时间线索\"\"\"\n signals = {}\n for category, groups in TIME_SIGNALS.items():\n found = {}\n for group_name, keywords in groups.items():\n count = sum(text.count(kw) for kw in keywords)\n if count > 0:\n found[group_name] = count\n if found:\n # 返回出现最多的信号\n dominant = max(found, key=found.get)\n signals[category] = {\n 'dominant': dominant,\n 'all': found,\n }\n return signals\n\n\ndef check_timeline(novel_dir: Path) -> dict:\n \"\"\"检查时间线一致性\"\"\"\n chapter_files = find_chapter_files(novel_dir)\n if not chapter_files:\n return {'error': '未找到章节文件'}\n\n chapters = []\n warnings = []\n\n for chapter_file in chapter_files:\n content = extract_text_from_chapter(chapter_file)\n match = re.match(r'第(\\d+)章', chapter_file.name)\n chapter_num = int(match.group(1)) if match else 0\n\n signals = extract_time_signals(content)\n chapters.append({\n 'chapter': chapter_num,\n 'signals': signals,\n })\n\n # 检测季节不一致\n prev_season = None\n prev_chapter = None\n for ch in chapters:\n season_info = ch['signals'].get('季节')\n if not season_info:\n continue\n\n current_season = season_info['dominant']\n\n if prev_season and current_season != prev_season:\n # 季节跳跃是否合理(相邻章节不该从冬跳到夏)\n season_order = ['春', '夏', '秋', '冬']\n prev_idx = season_order.index(prev_season) if prev_season in season_order else -1\n curr_idx = season_order.index(current_season) if current_season in season_order else -1\n\n if prev_idx >= 0 and curr_idx >= 0:\n # 相邻章节,不该跳过 2+ 个季节\n gap = abs(curr_idx - prev_idx)\n if gap > 1 and gap != 3: # gap=3 表示相邻(冬→春)\n warnings.append({\n 'chapter': ch['chapter'],\n 'type': 'season_inconsistency',\n 'detail': f'第{prev_chapter}章是{prev_season},第{ch[\"chapter\"]}章突变为{current_season}',\n })\n\n prev_season = current_season\n prev_chapter = ch['chapter']\n\n # 检测时段矛盾(同章内早晨和深夜同时出现大量)\n for ch in chapters:\n period_info = ch['signals'].get('时段')\n if not period_info:\n continue\n all_periods = period_info.get('all', {})\n if len(all_periods) >= 3:\n # 一章内出现 3 种以上时段,可能有叙事跳跃\n dominant = period_info['dominant']\n others = [p for p in all_periods if p != dominant and all_periods[p] >= 2]\n if len(others) >= 2:\n warnings.append({\n 'chapter': ch['chapter'],\n 'type': 'time_jump_heavy',\n 'detail': f'本章时段分散:{\", \".join(f\"{p}({c})\" for p, c in all_periods.items())}',\n })\n\n # 检测天气快速切换\n prev_weather = None\n prev_chapter = None\n for ch in chapters:\n weather_info = ch['signals'].get('天气')\n if not weather_info:\n continue\n current_weather = weather_info['dominant']\n\n if prev_weather and current_weather != prev_weather:\n # 完全相反的天气在相邻章节\n opposites = [('晴', '雨'), ('晴', '雪'), ('雾', '晴')]\n if (prev_weather, current_weather) in opposites or (current_weather, prev_weather) in opposites:\n # 仅在两章都没有过渡时警告\n pass # 天气变化本身合理,不标记为硬矛盾\n\n prev_weather = current_weather\n prev_chapter = ch['chapter']\n\n # 排序\n type_order = {'season_inconsistency': 0, 'time_jump_heavy': 1}\n warnings.sort(key=lambda w: type_order.get(w['type'], 2))\n\n return {\n 'total_chapters': len(chapters),\n 'chapters': chapters,\n 'warnings': warnings,\n }\n\n\ndef print_report(novel_dir: Path, results: dict):\n \"\"\"打印时间线检查报告\"\"\"\n print('\\n' + '=' * 60)\n print('时间线一致性检查报告')\n print('=' * 60)\n print(f'小说:{novel_dir.name}')\n print(f'检查章节:{results[\"total_chapters\"]}章')\n print()\n\n # 时间线概览\n print('【时间线概览】')\n for ch in results['chapters']:\n signals = ch['signals']\n parts = []\n for cat in ['季节', '时段', '天气']:\n info = signals.get(cat)\n if info:\n parts.append(f'{cat}:{info[\"dominant\"]}')\n line = ', '.join(parts) if parts else '无明确时间线索'\n print(f\" 第{ch['chapter']:2d}章:{line}\")\n print()\n\n # 警告\n if results['warnings']:\n warn_icons = {'season_inconsistency': '🔴', 'time_jump_heavy': '🟡'}\n print('【警告】')\n for w in results['warnings']:\n icon = warn_icons.get(w['type'], '⚠️')\n print(f\" {icon} 第{w['chapter']}章 | {w['detail']}\")\n print()\n else:\n print('✅ 未检测到时间线矛盾\\n')\n\n print('=' * 60)\n\n\ndef main():\n \"\"\"主函数\"\"\"\n if len(sys.argv) \u003c 2:\n print('用法:python scripts/check_timeline.py \u003c小说目录路径>')\n print('示例:python scripts/check_timeline.py novels/书名')\n return\n\n novel_dir = Path(sys.argv[1])\n if not novel_dir.exists():\n print(f'错误:目录不存在 - {novel_dir}')\n return\n\n results = check_timeline(novel_dir)\n if 'error' in results:\n print(f'错误:{results[\"error\"]}')\n return\n\n print_report(novel_dir, results)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":7583,"content_sha256":"253a6e6315222857a558c950f901682587566db1106df7e5e3ee9451f2bec9ed"},{"filename":"scripts/generate_epub.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nEPUB 生成脚本\n将小说项目导出为 EPUB 格式的电子书\n\"\"\"\n\nimport argparse\nimport re\nimport sys\nimport uuid\nimport zipfile\nfrom datetime import datetime\nfrom pathlib import Path\nfrom xml.sax.saxutils import escape as xml_escape\n\n# 修复 Windows 控制台编码问题\nif sys.platform == 'win32':\n import io\n sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')\n sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')\n\n\n# 非正文部分的章节标题模式(这些不是真正的章节标题)\nNON_CONTENT_SECTIONS = {\n '本章任务卡', '场景拆分', '正文', '章节复盘',\n '章节摘要', '章节钩子', '本章摘要', '本章钩子',\n '人物状态变化', '下一章必须处理', '新增信息', '已回应悬念',\n '承接上章', '本章目标', '主要阻碍', '情绪推进', '关键转折',\n '结尾钩子', '章节功能'\n}\n\n\ndef extract_content_from_chapter(file_path: Path) -> str:\n \"\"\"从章节文件中提取正文内容,优先只统计 `## 正文` 区块\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n lines = content.split('\\n')\n\n body_start = None\n body_end = None\n\n for i, line in enumerate(lines):\n stripped = line.strip()\n # 匹配 ## 正文,允许前后有空格\n if stripped == '## 正文' or stripped == '##正文':\n body_start = i + 1\n continue\n if body_start is not None and stripped.startswith('## '):\n # 遇到下一个 ## 标题时停止,包括 ## 章节复盘 等\n body_end = i\n break\n\n if body_start is not None:\n body_content = '\\n'.join(lines[body_start:body_end]).strip()\n # 移除 --- 分隔符\n body_content = re.sub(r'^---+\\s*

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, '', body_content, flags=re.MULTILINE).strip()\n return body_content\n\n # 兼容旧模板:如果没有 `## 正文`,则退回到章节标题之后、下一个 ## 之前的内容\n content_start = 0\n content_end = None\n for i, line in enumerate(lines):\n stripped = line.strip()\n # 找到章节标题(# 第X章)\n if stripped.startswith('#') and '章' in stripped and not stripped.startswith('##'):\n content_start = i + 1\n continue\n # 找到下一个 ## 标题时停止\n if content_start > 0 and stripped.startswith('## '):\n content_end = i\n break\n\n if content_end is None:\n content_end = len(lines)\n\n main_content = '\\n'.join(lines[content_start:content_end]).strip()\n # 移除 --- 分隔符\n main_content = re.sub(r'^---+\\s*

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, '', main_content, flags=re.MULTILINE).strip()\n return main_content\n\n\ndef parse_outline(outline_path: Path) -> dict:\n \"\"\"解析大纲文件,获取书名、作者等信息\"\"\"\n if not outline_path.exists():\n return {'title': '未知书名', 'author': '未知作者'}\n\n with open(outline_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n # 提取书名(从第一行 # [书名] 大纲)\n title_match = re.search(r'^#\\s*(.+?)\\s*大纲', content, re.MULTILINE)\n title = title_match.group(1).strip() if title_match else '未知书名'\n\n # 提取作者\n author_match = re.search(r'\\*\\*作者\\s*/\\s*笔名\\*\\*[::]\\s*(.+)', content)\n author = author_match.group(1).strip() if author_match else ''\n\n # 如果作者为空或只有空白字符,设置为空字符串(后续会提示用户输入)\n if not author or not author.strip():\n author = ''\n\n return {'title': title, 'author': author}\n\n\ndef find_chapters(novel_dir: Path) -> list:\n \"\"\"查找目录下所有章节文件\"\"\"\n chapter_files = sorted(novel_dir.glob('第*.md'))\n chapters = []\n\n for chapter_file in chapter_files:\n # 提取章节标题\n with open(chapter_file, 'r', encoding='utf-8') as f:\n first_line = f.readline().strip()\n\n # 从文件名提取标题作为后备\n title_match = re.search(r'第\\d+章[-(]*(.+?)\\.md

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, chapter_file.name)\n if title_match:\n chapter_title = title_match.group(1)\n else:\n chapter_title = chapter_file.stem\n\n # 从文件内容中提取标题(优先使用文件内的标题)\n # 跳过非内容章节:## 本章任务卡, ## 场景拆分, ## 正文, ## 章节复盘 等\n with open(chapter_file, 'r', encoding='utf-8') as f:\n content = f.read()\n\n # 查找所有 ## 标题\n content_title_matches = re.findall(r'^##\\s+(.+?)

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, content, re.MULTILINE)\n\n # 找到第一个不是非内容章节的标题(前缀匹配,支持 \"本章任务卡:xxx\" 格式)\n for match in content_title_matches:\n section_title = match.strip()\n # 检查是否以非内容章节标题开头\n is_non_content = any(section_title.startswith(prefix) for prefix in NON_CONTENT_SECTIONS)\n if not is_non_content:\n chapter_title = section_title\n break\n\n chapters.append({\n 'file': chapter_file,\n 'title': chapter_title,\n 'order': len(chapters) + 1\n })\n\n return chapters\n\n\ndef convert_markdown_to_xhtml(content: str) -> str:\n \"\"\"将简化的 Markdown 转换为 XHTML\"\"\"\n # 转义 HTML 特殊字符\n content = xml_escape(content)\n\n # 转换段落(空行分隔)\n paragraphs = content.split('\\n\\n')\n xhtml_paragraphs = []\n\n for para in paragraphs:\n para = para.strip()\n if not para:\n continue\n\n # 处理标题(以 # 开头的行)\n if para.startswith('#'):\n level = len(para) - len(para.lstrip('#'))\n text = para.lstrip('#').strip()\n xhtml_paragraphs.append(f'\u003ch{level}>{text}\u003c/h{level}>')\n else:\n # 普通段落\n xhtml_paragraphs.append(f'\u003cp>{para}\u003c/p>')\n\n return '\\n'.join(xhtml_paragraphs)\n\n\ndef prompt_for_author(book_title: str) -> str:\n \"\"\"提示用户输入作者名字\"\"\"\n print(f'\\n图书 \"{book_title}\" 的作者名字未设置。')\n while True:\n author = input('请输入作者名字: ').strip()\n if author:\n return author\n print('作者名字不能为空,请重新输入。')\n\n\ndef generate_epub(\n novel_dir: Path,\n output_path: Path,\n author_override: str = None,\n lang: str = 'zh-CN'\n) -> bool:\n \"\"\"生成 EPUB 文件\n\n Args:\n novel_dir: 小说项目目录路径\n output_path: 输出 EPUB 文件路径\n author_override: 覆盖大纲中的作者\n lang: 语言设置,'zh-CN' 中文 或 'en' 英文\n \"\"\"\n novel_dir = Path(novel_dir)\n original_novel_dir = novel_dir\n\n if not novel_dir.exists() or not novel_dir.is_dir():\n print(f'错误: 目录不存在 - {novel_dir}')\n return False\n\n # 处理英文版\n output_lang = lang\n if lang == 'en':\n en_dir = novel_dir / 'en'\n if en_dir.exists():\n novel_dir = en_dir\n print(f'使用英文目录: {en_dir}')\n # 尝试读取原大纲获取中文书名,然后翻译\n original_outline = original_novel_dir / '00-大纲.md'\n original_metadata = parse_outline(original_outline)\n original_title = original_metadata.get('title', 'Unknown')\n\n # 尝试从英文目录获取英文书名(查找包含书名信息的文件)\n en_title = None\n en_outline_files = list(novel_dir.glob('*.md'))\n for en_file in en_outline_files:\n # 跳过章节文件,查找可能有书名的文件\n if en_file.name.startswith('第') or en_file.name.startswith('Chapter'):\n continue\n try:\n with open(en_file, 'r', encoding='utf-8') as f:\n en_content = f.read()\n # 查找类似 \"# Book Title\" 的标题,且不是章节标题\n en_title_match = re.search(r'^#\\s+(.+?)(?:\\s+大纲|\\s+简介|$)', en_content, re.MULTILINE)\n if en_title_match:\n en_title = en_title_match.group(1).strip()\n break\n except Exception:\n continue\n\n title = en_title if en_title else f'{original_title} (English)'\n\n # 处理作者\n if author_override:\n author = author_override\n else:\n # 尝试从英文大纲获取作者\n author = 'Unknown Author'\n for en_file in en_outline_files:\n if en_file.name.startswith('第') or en_file.name.startswith('Chapter'):\n continue\n try:\n with open(en_file, 'r', encoding='utf-8') as f:\n en_content = f.read()\n en_author_match = re.search(r'(?:作者|Author)[::\\s]+(.+)', en_content, re.MULTILINE)\n if en_author_match:\n author = en_author_match.group(1).strip()\n break\n except Exception:\n continue\n\n metadata = {'title': title, 'author': author}\n else:\n print(f'警告: 英文目录不存在: {en_dir}')\n metadata = {'title': 'English Title', 'author': author_override or 'Unknown Author'}\n title = metadata['title']\n author = metadata['author']\n else:\n # 解析大纲\n outline_path = novel_dir / '00-大纲.md'\n metadata = parse_outline(outline_path)\n title = metadata['title']\n author = author_override if author_override else metadata['author']\n\n # 如果作者为空,提示用户输入\n if not author or author.strip() == '':\n author = prompt_for_author(title)\n print(f'已设置作者: {author}')\n\n # 查找章节\n chapters = find_chapters(novel_dir)\n\n if not chapters:\n print(f'错误: 未找到章节文件 - {novel_dir}')\n return False\n\n print(f'生成 EPUB: {title} - {author}')\n print(f'章节数: {len(chapters)}')\n\n # 生成 UUID\n book_id = str(uuid.uuid4())\n timestamp = datetime.now().strftime('%Y-%m-%dT%H:%M:%SZ')\n\n # 创建 EPUB\n with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as epub:\n # mimetype (必须是最先添加,不压缩)\n epub.writestr('mimetype', 'application/epub+zip', compress_type=zipfile.ZIP_STORED)\n\n # META-INF/container.xml\n container_xml = '''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003ccontainer version=\"1.0\" xmlns=\"urn:oasis:names:tc:opendocument:xmlns:container\">\n \u003crootfiles>\n \u003crootfile full-path=\"OEBPS/content.opf\" media-type=\"application/oebps-package+xml\"/>\n \u003c/rootfiles>\n\u003c/container>'''\n epub.writestr('META-INF/container.xml', container_xml)\n\n # OEBPS/content.opf\n content_opf = f'''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003cpackage version=\"3.0\" xmlns=\"http://www.idpf.org/2007/opf\" unique-identifier=\"book-id\">\n \u003cmetadata xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n \u003cdc:identifier id=\"book-id\">{book_id}\u003c/dc:identifier>\n \u003cdc:title>{xml_escape(title)}\u003c/dc:title>\n \u003cdc:creator>{xml_escape(author)}\u003c/dc:creator>\n \u003cdc:language>{output_lang}\u003c/dc:language>\n \u003cmeta property=\"dcterms:modified\">{timestamp}\u003c/meta>\n \u003c/metadata>\n \u003cmanifest>\n \u003citem id=\"nav\" href=\"nav.xhtml\" media-type=\"application/xhtml+xml\" properties=\"nav\"/>\n \u003citem id=\"title-page\" href=\"title-page.xhtml\" media-type=\"application/xhtml+xml\"/>\n'''\n for i, chapter in enumerate(chapters):\n content_opf += f' \u003citem id=\"chapter{i+1}\" href=\"chapter{i+1}.xhtml\" media-type=\"application/xhtml+xml\"/>\\n'\n\n content_opf += ''' \u003c/manifest>\n \u003cspine>\n \u003citemref idref=\"title-page\"/>\n \u003citemref idref=\"nav\"/>\n'''\n for i in range(len(chapters)):\n content_opf += f' \u003citemref idref=\"chapter{i+1}\"/>\\n'\n\n content_opf += ''' \u003c/spine>\n\u003c/package>'''\n epub.writestr('OEBPS/content.opf', content_opf)\n\n # OEBPS/toc.ncx (目录)\n toc_ncx = f'''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003cncx xmlns=\"http://www.daisy.org/z3986/2005/ncx/\" version=\"2005-1\">\n \u003chead>\n \u003cmeta name=\"dtb:uid\" content=\"{book_id}\"/>\n \u003cmeta name=\"dtb:depth\" content=\"1\"/>\n \u003cmeta name=\"dtb:totalPageCount\" content=\"0\"/>\n \u003cmeta name=\"dtb:maxPageNumber\" content=\"0\"/>\n \u003c/head>\n \u003cdocTitle>\n \u003ctext>{xml_escape(title)}\u003c/text>\n \u003c/docTitle>\n \u003cnavMap>\n \u003cnavPoint id=\"title\" playOrder=\"1\">\n \u003cnavLabel>\u003ctext>封面\u003c/text>\u003c/navLabel>\n \u003ccontent src=\"title-page.xhtml\"/>\n \u003c/navPoint>\n'''\n for i, chapter in enumerate(chapters):\n toc_ncx += f''' \u003cnavPoint id=\"chapter{i+1}\" playOrder=\"{i+2}\">\n \u003cnavLabel>\u003ctext>{xml_escape(chapter['title'])}\u003c/text>\u003c/navLabel>\n \u003ccontent src=\"chapter{i+1}.xhtml\"/>\n \u003c/navPoint>\n'''\n\n toc_ncx += ''' \u003c/navMap>\n\u003c/ncx>'''\n epub.writestr('OEBPS/toc.ncx', toc_ncx)\n\n # OEBPS/nav.xhtml (Navigation Document)\n nav_xhtml = f'''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003c!DOCTYPE html>\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\">\n\u003chead>\n \u003ctitle>目录\u003c/title>\n\u003c/head>\n\u003cbody>\n \u003cnav epub:type=\"toc\" id=\"toc\">\n \u003ch1>目录\u003c/h1>\n \u003col>\n \u003cli>\u003ca href=\"title-page.xhtml\">封面\u003c/a>\u003c/li>\n'''\n for i, chapter in enumerate(chapters):\n nav_xhtml += f' \u003cli>\u003ca href=\"chapter{i+1}.xhtml\">{xml_escape(chapter[\"title\"])}\u003c/a>\u003c/li>\\n'\n\n nav_xhtml += ''' \u003c/ol>\n \u003c/nav>\n\u003c/body>\n\u003c/html>'''\n epub.writestr('OEBPS/nav.xhtml', nav_xhtml)\n\n # OEBPS/title-page.xhtml (封面)\n title_page_xhtml = f'''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003c!DOCTYPE html>\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\">\n\u003chead>\n \u003ctitle>{xml_escape(title)}\u003c/title>\n\u003c/head>\n\u003cbody>\n \u003cdiv style=\"text-align: center; padding: 50% 0;\">\n \u003ch1>{xml_escape(title)}\u003c/h1>\n \u003cp>作者: {xml_escape(author)}\u003c/p>\n \u003c/div>\n\u003c/body>\n\u003c/html>'''\n epub.writestr('OEBPS/title-page.xhtml', title_page_xhtml)\n\n # OEBPS/chapter*.xhtml (各章节)\n for i, chapter in enumerate(chapters):\n content = extract_content_from_chapter(chapter['file'])\n xhtml_content = convert_markdown_to_xhtml(content)\n\n chapter_xhtml = f'''\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003c!DOCTYPE html>\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\">\n\u003chead>\n \u003ctitle>{xml_escape(chapter[\"title\"])}\u003c/title>\n\u003c/head>\n\u003cbody>\n \u003ch2>{xml_escape(chapter[\"title\"])}\u003c/h2>\n {xhtml_content}\n\u003c/body>\n\u003c/html>'''\n epub.writestr(f'OEBPS/chapter{i+1}.xhtml', chapter_xhtml)\n\n print(f'EPUB 已生成: {output_path}')\n return True\n\n\ndef main():\n \"\"\"主函数\"\"\"\n parser = argparse.ArgumentParser(\n description='将小说项目导出为 EPUB 格式',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog='''\n示例:\n python scripts/generate_epub.py novels/书名\n python scripts/generate_epub.py novels/书名 --author \"金庸\"\n python scripts/generate_epub.py novels/书名 -o output.epub\n python scripts/generate_epub.py novels/书名 --author \"金庸\" -o output.epub\n python scripts/generate_epub.py novels/书名 --lang en\n'''\n )\n parser.add_argument('novel_dir', help='小说项目目录路径')\n parser.add_argument('-o', '--output', help='输出 EPUB 文件路径 (默认: \u003c书名>.epub)')\n parser.add_argument('--author', help='覆盖大纲中的作者')\n parser.add_argument('--lang', default='zh-CN', choices=['zh-CN', 'en'],\n help='语言: zh-CN (中文) 或 en (英文,默认: zh-CN)')\n\n args = parser.parse_args()\n\n novel_dir = Path(args.novel_dir)\n\n if not novel_dir.exists():\n print(f'错误: 目录不存在 - {novel_dir}')\n sys.exit(1)\n\n # 确定输出路径\n if args.output:\n output_path = Path(args.output)\n else:\n # 从大纲获取书名作为默认文件名\n if args.lang == 'en':\n # 尝试获取英文书名\n en_dir = novel_dir / 'en'\n if en_dir.exists():\n en_outline_files = list(en_dir.glob('*.md'))\n title = None\n for en_file in en_outline_files:\n if en_file.name.startswith('第') or en_file.name.startswith('Chapter'):\n continue\n try:\n with open(en_file, 'r', encoding='utf-8') as f:\n en_content = f.read()\n en_title_match = re.search(r'^#\\s+(.+?)(?:\\s+大纲|\\s+简介|$)', en_content, re.MULTILINE)\n if en_title_match:\n title = en_title_match.group(1).strip()\n break\n except Exception:\n continue\n\n if not title:\n # 回退到中文书名\n outline_path = novel_dir / '00-大纲.md'\n metadata = parse_outline(outline_path)\n title = f\"{metadata['title']} (English)\"\n else:\n outline_path = novel_dir / '00-大纲.md'\n metadata = parse_outline(outline_path)\n title = f\"{metadata['title']} (English)\"\n else:\n outline_path = novel_dir / '00-大纲.md'\n metadata = parse_outline(outline_path)\n title = metadata['title']\n\n # 清理书名中的非法字符\n safe_title = re.sub(r'[\u003c>:\"/\\\\|?*]', '', title)\n if args.lang == 'en':\n output_path = novel_dir / f'{safe_title}-en.epub'\n else:\n output_path = novel_dir / f'{safe_title}.epub'\n\n # 生成 EPUB\n success = generate_epub(novel_dir, output_path, args.author, args.lang)\n sys.exit(0 if success else 1)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":18160,"content_sha256":"01b24a59d41d507084026dfa35154e83e47b0c5b84c7e0dd04bd081e3155c46c"},{"filename":"scripts/translate_to_english.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nEnglish Translation Script\n将中文小说深度翻译为英文版本\n\"\"\"\n\nimport argparse\nimport os\nimport re\nimport sys\nfrom pathlib import Path\n\n# 修复编码问题\nif sys.platform == 'win32':\n import io\n sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')\n sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')\n\n\ndef extract_novel_info(novel_dir: Path) -> dict:\n \"\"\"提取小说基本信息\"\"\"\n info = {\n 'title': 'Unknown Title',\n 'author': 'Unknown Author',\n 'genre': '',\n 'synopsis': '',\n 'characters': '',\n 'worldbuilding': ''\n }\n\n # 提取大纲信息\n outline_path = novel_dir / '00-大纲.md'\n if outline_path.exists():\n with open(outline_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n # 书名\n title_match = re.search(r'^#\\s*(.+?)\\s*大纲', content, re.MULTILINE)\n if title_match:\n info['title'] = title_match.group(1).strip()\n\n # 作者\n author_match = re.search(r'\\*\\*作者\\s*/\\s*笔名\\*\\*[::]\\s*(.+)', content)\n if author_match:\n info['author'] = author_match.group(1).strip()\n\n # 类型\n genre_match = re.search(r'\\*\\*题材\\s*/\\s*类型\\*\\*[::]\\s*(.+)', content)\n if genre_match:\n info['genre'] = genre_match.group(1).strip()\n\n # 简介\n synopsis_match = re.search(r'\\*\\*一句话简介\\*\\*[::]\\s*(.+?)(?=\\n\\*\\*|\\Z)', content, re.DOTALL)\n if synopsis_match:\n info['synopsis'] = synopsis_match.group(1).strip()\n\n # 提取人物档案\n characters_path = novel_dir / '01-人物档案.md'\n if characters_path.exists():\n with open(characters_path, 'r', encoding='utf-8') as f:\n info['characters'] = f.read()\n\n # 提取世界观\n worldbuilding_path = novel_dir / '02-世界观与伏笔.md'\n if worldbuilding_path.exists():\n with open(worldbuilding_path, 'r', encoding='utf-8') as f:\n info['worldbuilding'] = f.read()\n\n return info\n\n\ndef extract_chapter_content(file_path: Path) -> str:\n \"\"\"提取章节正文内容\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n lines = content.split('\\n')\n body_start = None\n body_end = None\n\n for i, line in enumerate(lines):\n stripped = line.strip()\n if stripped == '## 正文':\n body_start = i + 1\n continue\n if body_start is not None and stripped.startswith('## '):\n body_end = i\n break\n\n if body_start is not None:\n return '\\n'.join(lines[body_start:body_end]).strip()\n\n # 兼容旧模板\n content_start = 0\n for i, line in enumerate(lines):\n if line.startswith('#') and '章' in line:\n content_start = i + 1\n break\n\n return '\\n'.join(lines[content_start:]).strip()\n\n\ndef find_chapters(novel_dir: Path) -> list:\n \"\"\"查找所有章节文件\"\"\"\n chapter_files = sorted(novel_dir.glob('第*.md'))\n chapters = []\n\n for chapter_file in chapter_files:\n # 从文件名提取章节号和标题\n match = re.match(r'第(\\d+)章[-(]*(.+?)\\.md

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…

, chapter_file.name)\n if match:\n chapter_num = int(match.group(1))\n chapter_title = match.group(2)\n else:\n chapter_num = len(chapters) + 1\n chapter_title = chapter_file.stem\n\n chapters.append({\n 'file': chapter_file,\n 'number': chapter_num,\n 'title': chapter_title\n })\n\n return chapters\n\n\ndef build_translation_prompt(novel_info: dict, chapter_content: str, chapter_title: str) -> str:\n \"\"\"构建翻译提示词\"\"\"\n prompt = f\"\"\"# Translation Task\n\nYou are a professional novel translator. Translate the following Chinese novel chapter into fluent English.\n\n## Novel Information\n- Title: {novel_info['title']}\n- Author: {novel_info['author']}\n- Genre: {novel_info['genre']}\n- Synopsis: {novel_info['synopsis']}\n\n## Characters\n{novel_info['characters'][:2000] if novel_info['characters'] else 'N/A'}\n\n## Worldview\n{novel_info['worldbuilding'][:2000] if novel_info['worldbuilding'] else 'N/A'}\n\n## Translation Requirements\n1. Maintain the narrative rhythm and emotional tension\n2. Use pinyin for character names (e.g., Zhang Wei)\n3. Keep Chinese-specific terms (gongfu, qigong) with pinyin or explanatory translation\n4. Preserve chapter structure with \"## Title\" and \"## Body\" headings\n5. Use modern English, avoid stiff literal translations\n6. Keep dialogue natural and fluent\n7. Translate the chapter title as well\n\n## Chapter Title\n{chapter_title}\n\n## Chapter to Translate\n{chapter_content}\n\n## Output Format\nProvide only the translated chapter in Markdown format, with \"## Title\" for the chapter title and \"## Body\" for the content. Do not include any additional explanation.\n\"\"\"\n return prompt\n\n\ndef translate_with_openai(prompt: str) -> str:\n \"\"\"使用 OpenAI API 翻译\"\"\"\n try:\n from openai import OpenAI\n except ImportError:\n print(\"错误: 请安装 openai 库 (pip install openai)\")\n raise\n\n api_key = os.getenv('OPENAI_API_KEY')\n if not api_key:\n print(\"错误: 请设置 OPENAI_API_KEY 环境变量\")\n raise ValueError(\"Missing OPENAI_API_KEY\")\n\n client = OpenAI(api_key=api_key)\n response = client.chat.completions.create(\n model=\"gpt-4o\",\n messages=[{\"role\": \"user\", \"content\": prompt}]\n )\n return response.choices[0].message.content\n\n\ndef translate_with_anthropic(prompt: str) -> str:\n \"\"\"使用 Anthropic API 翻译\"\"\"\n try:\n from anthropic import Anthropic\n except ImportError:\n print(\"错误: 请安装 anthropic 库 (pip install anthropic)\")\n raise\n\n api_key = os.getenv('ANTHROPIC_API_KEY')\n if not api_key:\n print(\"错误: 请设置 ANTHROPIC_API_KEY 环境变量\")\n raise ValueError(\"Missing ANTHROPIC_API_KEY\")\n\n client = Anthropic(api_key=api_key)\n message = client.messages.create(\n model=\"claude-sonnet-4-20250514\",\n max_tokens=8000,\n messages=[{\"role\": \"user\", \"content\": prompt}]\n )\n return message.content[0].text\n\n\ndef translate_with_gemini(prompt: str) -> str:\n \"\"\"使用 Google Gemini API 翻译\"\"\"\n try:\n import google.genai as genai\n except ImportError:\n print(\"错误: 请安装 google-generativeai 库 (pip install google-generativeai)\")\n raise\n\n api_key = os.getenv('GEMINI_API_KEY')\n if not api_key:\n print(\"错误: 请设置 GEMINI_API_KEY 环境变量\")\n raise ValueError(\"Missing GEMINI_API_KEY\")\n\n genai.configure(api_key=api_key)\n model = genai.GenerativeModel('gemini-2.0-flash')\n response = model.generate_content(prompt)\n return response.text\n\n\ndef translate_with_ai(prompt: str, provider: str = None) -> str:\n \"\"\"调用 AI 进行翻译\n\n Args:\n prompt: 翻译提示词\n provider: AI 提供商 (openai/anthropic/gemini),如果为 None 则自动检测\n\n Returns:\n 翻译后的内容\n \"\"\"\n if provider:\n providers = [provider]\n else:\n # 自动检测可用的 API\n providers = []\n if os.getenv('OPENAI_API_KEY'):\n providers.append('openai')\n if os.getenv('ANTHROPIC_API_KEY'):\n providers.append('anthropic')\n if os.getenv('GEMINI_API_KEY'):\n providers.append('gemini')\n\n if not providers:\n print(\"\\n请配置以下任一 AI API 环境变量:\")\n print(\" - OPENAI_API_KEY\")\n print(\" - ANTHROPIC_API_KEY\")\n print(\" - GEMINI_API_KEY\")\n print(\"\\n或者通过 --provider 参数指定提供商\")\n raise ValueError(\"No AI API configured\")\n\n # 尝试第一个可用的提供商\n for p in providers:\n try:\n if p == 'openai':\n return translate_with_openai(prompt)\n elif p == 'anthropic':\n return translate_with_anthropic(prompt)\n elif p == 'gemini':\n return translate_with_gemini(prompt)\n except Exception as e:\n print(f\"警告: {p} API 调用失败: {e}\")\n continue\n\n raise RuntimeError(\"所有配置的 AI API 都不可用\")\n\n\ndef save_translated_chapter(output_path: Path, title: str, content: str):\n \"\"\"保存翻译后的章节\"\"\"\n output_path.parent.mkdir(parents=True, exist_ok=True)\n\n with open(output_path, 'w', encoding='utf-8') as f:\n f.write(f\"## {title}\\n\\n\")\n f.write(f\"## Body\\n\\n\")\n f.write(content)\n\n\ndef translate_novel(\n novel_dir: Path,\n output_dir: str = 'en',\n chapters: str = None,\n provider: str = None\n):\n \"\"\"翻译小说\"\"\"\n novel_dir = Path(novel_dir)\n\n if not novel_dir.exists():\n print(f\"错误: 目录不存在 - {novel_dir}\")\n return False\n\n print(f\"开始翻译: {novel_dir.name}\")\n\n # 提取小说信息\n novel_info = extract_novel_info(novel_dir)\n print(f\"书名: {novel_info['title']}\")\n print(f\"作者: {novel_info['author']}\")\n if provider:\n print(f\"使用 AI: {provider}\")\n else:\n print(\"自动检测 AI 提供商...\")\n\n # 确定输出目录\n output_path = novel_dir / output_dir\n\n # 查找章节\n chapter_files = find_chapters(novel_dir)\n\n if not chapter_files:\n print(f\"错误: 未找到章节文件\")\n return False\n\n print(f\"找到 {len(chapter_files)} 个章节\")\n\n # 解析要翻译的章节范围\n chapters_to_translate = None\n if chapters:\n chapters_to_translate = parse_chapter_range(chapters, len(chapter_files))\n\n # 翻译每个章节\n for i, chapter in enumerate(chapter_files):\n if chapters_to_translate and chapter['number'] not in chapters_to_translate:\n continue\n\n print(f\"\\n翻译第 {chapter['number']} 章: {chapter['title']}\")\n\n # 提取章节内容\n content = extract_chapter_content(chapter['file'])\n\n # 构建提示词\n prompt = build_translation_prompt(novel_info, content, chapter['title'])\n\n try:\n # 调用 AI 翻译\n translated_content = translate_with_ai(prompt, provider)\n\n # 保存翻译结果\n output_file = output_path / f\"Chapter-{chapter['number']:03d}.md\"\n save_translated_chapter(output_file, chapter['title'], translated_content)\n\n print(f\"已保存: {output_file}\")\n\n except NotImplementedError as e:\n print(f\"错误: {e}\")\n return False\n except Exception as e:\n print(f\"翻译第 {chapter['number']} 章失败: {e}\")\n continue\n\n print(f\"\\n翻译完成!英文版保存在: {output_path}\")\n return True\n\n\ndef parse_chapter_range(chapters_str: str, max_chapters: int) -> set:\n \"\"\"解析章节范围字符串,如 \"1,3-5,10\" \"\"\"\n chapters = set()\n parts = chapters_str.split(',')\n\n for part in parts:\n part = part.strip()\n if '-' in part:\n start, end = part.split('-')\n chapters.update(range(int(start), int(end) + 1))\n else:\n chapters.add(int(part))\n\n return chapters\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description='将中文小说翻译为英文版本',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog='''\n示例:\n python scripts/translate_to_english.py novels/书名\n python scripts/translate_to_english.py novels/书名 --chapters \"1,3-5\"\n python scripts/translate_to_english.py novels/书名 -o en\n python scripts/translate_to_english.py novels/书名 --provider openai\n\n环境变量:\n OPENAI_API_KEY OpenAI API 密钥\n ANTHROPIC_API_KEY Anthropic API 密钥\n GEMINI_API_KEY Google Gemini API 密钥\n'''\n )\n parser.add_argument('novel_dir', help='小说项目目录路径')\n parser.add_argument('-o', '--output', default='en', help='输出目录 (默认: en)')\n parser.add_argument('--chapters', help='要翻译的章节范围,如 \"1,3-5,10\"')\n parser.add_argument('--provider', choices=['openai', 'anthropic', 'gemini'],\n help='指定 AI 提供商')\n\n args = parser.parse_args()\n\n success = translate_novel(\n Path(args.novel_dir),\n output_dir=args.output,\n chapters=args.chapters,\n provider=args.provider\n )\n sys.exit(0 if success else 1)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":12595,"content_sha256":"dedce6141ad0fc7a2c071f978dbaecf3737e1a127a5507662a88a4f042fc2d29"},{"filename":"scripts/utils.py","content":"#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\n共享工具函数\n供 check_chapter_wordcount.py、check_ai_style.py、check_rhythm.py、\ncheck_novel_health.py、check_timeline.py 等脚本共用\n\"\"\"\n\nimport re\nfrom pathlib import Path\n\n\ndef extract_text_from_chapter(file_path: Path) -> str:\n \"\"\"从章节文件中提取正文内容,优先提取 `## 正文` 区块\"\"\"\n with open(file_path, 'r', encoding='utf-8') as f:\n content = f.read()\n\n lines = content.split('\\n')\n body_start = None\n body_end = None\n\n for i, line in enumerate(lines):\n stripped = line.strip()\n if stripped == '## 正文':\n body_start = i + 1\n continue\n if body_start is not None and stripped.startswith('## '):\n body_end = i\n break\n\n if body_start is not None:\n return '\\n'.join(lines[body_start:body_end]).strip()\n\n # 兼容旧模板:没有 ## 正文 标记时,取章节标题之后的所有内容\n content_start = 0\n for i, line in enumerate(lines):\n if line.startswith('#') and '章' in line:\n content_start = i + 1\n break\n\n return '\\n'.join(lines[content_start:])\n\n\ndef count_chinese_words(text: str) -> int:\n \"\"\"统计中文字数(排除 Markdown 标记)\"\"\"\n text = re.sub(r'#{1,6}\\s*', '', text)\n text = re.sub(r'\\*\\*(.*?)\\*\\*', r'\\1', text)\n text = re.sub(r'\\*(.*?)\\*', r'\\1', text)\n text = re.sub(r'~~(.*?)~~', r'\\1', text)\n text = re.sub(r'`(.*?)`', r'\\1', text)\n text = re.sub(r'\\[(.*?)\\]\\(.*?\\)', r'\\1', text)\n chinese_chars = re.findall(r'[\\u4e00-\\u9fff]', text)\n return len(chinese_chars)\n\n\ndef split_sentences(text: str) -> list:\n \"\"\"中文分句(简化版)\"\"\"\n sentences = re.split(r'[。!?]+', text)\n return [s.strip() for s in sentences if s.strip()]\n\n\ndef find_chapter_files(directory: Path) -> list:\n \"\"\"在目录中查找所有章节文件,按章节号排序\"\"\"\n chapter_files = sorted(\n directory.glob('第*.md'),\n key=lambda p: _extract_chapter_num(p)\n )\n return chapter_files\n\n\ndef _extract_chapter_num(path: Path) -> int:\n \"\"\"从文件名中提取章节号\"\"\"\n match = re.match(r'第(\\d+)章', path.name)\n return int(match.group(1)) if match else 0\n\n\ndef setup_windows_encoding():\n \"\"\"修复 Windows 控制台编码问题\"\"\"\n import sys\n if sys.platform == 'win32':\n import io\n sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')\n sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')\n","content_type":"text/x-python; charset=utf-8","language":"python","size":2612,"content_sha256":"8876d354d7c614a8ab7259589da78ff9f54b861421e87d7dc2a937a8379ccf01"},{"filename":"test-prompts.json","content":"[\n {\n \"id\": 1,\n \"prompt\": \"帮我写一本玄幻修仙小说,主角是个废柴但天赋惊人,大概30章\",\n \"expected\": \"应进入策划期,引导填写极简大纲,生成3-5个候选书名,不走弯路直接开始\"\n },\n {\n \"id\": 2,\n \"prompt\": \"继续写\",\n \"expected\": \"应自动读取进度仪表盘和上下文,检查悬念状态,按标准/快速模式继续写作下一章\"\n },\n {\n \"id\": 3,\n \"prompt\": \"修改第5章,开头太拖了,对话也不自然\",\n \"expected\": \"应进入修改工作流:诊断问题→定级→参考对应文档→针对性修改→验证,而非泛泛地重写整章\"\n },\n {\n \"id\": 4,\n \"prompt\": \"自动写完整本悬疑小说,主角是侦探,大概20章\",\n \"expected\": \"应进入自动驾驶模式:不追问Intake缺失项(用题材模板填充),不等待书名选择(自动选推荐项),不停顿等确认,写完一章自动继续下一章,直到全书完成\"\n }\n]\n","content_type":"application/json; charset=utf-8","language":"json","size":986,"content_sha256":"adf806c8bec0ae2b0cceaf0bb40aadb53d31994953a50b45d03eb1258fdb67cc"},{"filename":"tests/test_check_chapter_wordcount.py","content":"import tempfile\nimport unittest\nfrom pathlib import Path\n\nfrom scripts.check_chapter_wordcount import check_chapter, extract_content_from_chapter\n\n\nclass CheckChapterWordcountTests(unittest.TestCase):\n def test_extracts_only_body_between_body_and_review_sections(self):\n content = \"\"\"# 第01章:测试\n\n## 本章任务卡\n- **章节功能**:推进冲突\n\n## 正文\n这里是正文内容。\n第二段正文继续推进。\n\n## 章节复盘\n- **本章摘要**:不应该计入正文\n\"\"\"\n\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n\n extracted = extract_content_from_chapter(path)\n\n self.assertEqual(extracted.strip(), \"这里是正文内容。\\n第二段正文继续推进。\")\n\n def test_check_chapter_counts_only_body_chinese_characters(self):\n content = \"\"\"# 第01章:测试\n\n## 本章任务卡\n- **章节功能**:推进冲突\n- **结尾钩子**:有人敲门\n\n## 正文\n这是正文。\n这里还有第二句。\n\n## 章节复盘\n- **新增信息 / 伏笔**:门外的人是谁\n\"\"\"\n\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n\n result = check_chapter(str(path), min_words=5)\n\n self.assertEqual(result[\"status\"], \"pass\")\n self.assertEqual(result[\"word_count\"], 11)\n\n\nif __name__ == \"__main__\":\n unittest.main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":1528,"content_sha256":"df2b4c56dcb4d4fb605b3cc9bf9370043c2b41769ce2a4a4c116a0ae83dcdcd6"},{"filename":"tests/test_generate_epub.py","content":"import os\nimport tempfile\nimport unittest\nimport zipfile\nfrom pathlib import Path\n\nfrom scripts.generate_epub import (\n convert_markdown_to_xhtml,\n extract_content_from_chapter,\n find_chapters,\n generate_epub,\n parse_outline,\n)\n\n\nclass ParseOutlineTests(unittest.TestCase):\n def test_parses_title_and_author_from_outline(self):\n content = \"\"\"# 射雕英雄传 大纲\n\n## 项目定位\n\n- **作者 / 笔名**:金庸\n- **题材 / 子类型**:武侠\n\"\"\"\n\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"00-大纲.md\"\n path.write_text(content, encoding=\"utf-8\")\n\n result = parse_outline(path)\n\n self.assertEqual(result[\"title\"], \"射雕英雄传\")\n self.assertEqual(result[\"author\"], \"金庸\")\n\n def test_handles_missing_outline_file(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n result = parse_outline(Path(tmpdir) / \"00-大纲.md\")\n\n self.assertEqual(result[\"title\"], \"未知书名\")\n self.assertEqual(result[\"author\"], \"未知作者\")\n\n def test_handles_missing_author_field(self):\n content = \"\"\"# 测试小说 大纲\n\n## 项目定位\n\n- **题材 / 子类型**:都市\n\"\"\"\n\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"00-大纲.md\"\n path.write_text(content, encoding=\"utf-8\")\n\n result = parse_outline(path)\n\n self.assertEqual(result[\"title\"], \"测试小说\")\n # 当作者字段为空时,返回空字符串(后续会提示用户输入)\n self.assertEqual(result[\"author\"], \"\")\n\n\nclass FindChaptersTests(unittest.TestCase):\n def test_finds_chapter_files_in_directory(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n # 创建章节文件\n (tmppath / \"第01章-开始.md\").write_text(\"# 第01章 开始\\n\\n## 正文\\n第一章内容\", encoding=\"utf-8\")\n (tmppath / \"第02章-发展.md\").write_text(\"# 第02章 发展\\n\\n## 正文\\n第二章内容\", encoding=\"utf-8\")\n (tmppath / \"第03章-高潮.md\").write_text(\"# 第03章 高潮\\n\\n## 正文\\n第三章内容\", encoding=\"utf-8\")\n\n chapters = find_chapters(tmppath)\n\n self.assertEqual(len(chapters), 3)\n self.assertEqual(chapters[0][\"title\"], \"开始\")\n self.assertEqual(chapters[1][\"title\"], \"发展\")\n self.assertEqual(chapters[2][\"title\"], \"高潮\")\n\n def test_finds_chapter_title_excluding_task_card(self):\n \"\"\"测试:章节标题应该是真正的章节标题,而不是本章任务卡\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n # 创建带有本章任务卡的章节文件\n content = \"\"\"# 第01章-林墨的抉择\n\n## 本章任务卡\n- **章节功能**:\n- **承接上章**:\n\n## 场景拆分\n1. 场景一\n\n---\n\n## 正文\n\n林墨站在破碎的甲板上,看着远方的星空。他知道,这是最后的机会了。\n\n---\n\n## 章节复盘\n- **本章摘要**:\n\"\"\"\n (tmppath / \"第01章-林墨的抉择.md\").write_text(content, encoding=\"utf-8\")\n\n chapters = find_chapters(tmppath)\n\n self.assertEqual(len(chapters), 1)\n # 标题不应该是\"本章任务卡\",应该是从文件名提取或跳过任务卡\n self.assertNotEqual(chapters[0][\"title\"], \"本章任务卡\")\n\n def test_returns_empty_list_when_no_chapters(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n chapters = find_chapters(Path(tmpdir))\n\n self.assertEqual(chapters, [])\n\n\nclass ExtractContentFromChapterTests(unittest.TestCase):\n def test_extracts_only_body_content(self):\n \"\"\"测试:只提取 ## 正文 区块的内容,不包含任务卡、摘要、钩子等\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n content = \"\"\"# 第01章 林墨的抉择\n\n## 本章任务卡\n- **章节功能**:\n- **承接上章**:\n\n## 场景拆分\n1. 场景一\n\n---\n\n## 正文\n\n林墨站在破碎的甲板上,看着远方的星空。他知道,这是最后的机会了。\n\n苏晴紧紧握住他的手:\"一定要回来。\"\n\n---\n\n## 章节复盘\n- **本章摘要**:林墨决定牺牲自己\n- **章节钩子**:老马说的还有一个人能救地球\n\"\"\"\n (tmppath / \"第01章-林墨的抉择.md\").write_text(content, encoding=\"utf-8\")\n\n result = extract_content_from_chapter(tmppath / \"第01章-林墨的抉择.md\")\n\n # 验证不包含任务卡、摘要、钩子等内容\n self.assertNotIn(\"本章任务卡\", result)\n self.assertNotIn(\"章节摘要\", result)\n self.assertNotIn(\"章节钩子\", result)\n self.assertNotIn(\"章节复盘\", result)\n # 验证包含正文内容\n self.assertIn(\"林墨站在破碎的甲板上\", result)\n self.assertIn(\"苏晴紧紧握住他的手\", result)\n\n def test_handles_missing_body_section(self):\n \"\"\"测试:没有 ## 正文 时的回退行为\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n # 旧模板:没有 ## 正文\n content = \"\"\"# 第01章 开始\n\n这是第一章的内容。\n故事从这里开始。\n\n## 本章任务卡\n任务内容\n\"\"\"\n (tmppath / \"第01章-开始.md\").write_text(content, encoding=\"utf-8\")\n\n result = extract_content_from_chapter(tmppath / \"第01章-开始.md\")\n\n # 应该包含正文内容,但不包含任务卡\n self.assertIn(\"这是第一章的内容\", result)\n self.assertNotIn(\"本章任务卡\", result)\n\n\nclass ConvertMarkdownToXhtmlTests(unittest.TestCase):\n def test_converts_paragraphs(self):\n content = \"第一段\\n\\n第二段\"\n result = convert_markdown_to_xhtml(content)\n\n self.assertIn(\"\u003cp>第一段\u003c/p>\", result)\n self.assertIn(\"\u003cp>第二段\u003c/p>\", result)\n\n def test_converts_headings(self):\n content = \"# 大标题\\n\\n## 二级标题\\n\\n### 三级标题\"\n result = convert_markdown_to_xhtml(content)\n\n self.assertIn(\"\u003ch1>大标题\u003c/h1>\", result)\n self.assertIn(\"\u003ch2>二级标题\u003c/h2>\", result)\n self.assertIn(\"\u003ch3>三级标题\u003c/h3>\", result)\n\n def test_escapes_html_characters(self):\n content = \"\u003cscript>alert('xss')\u003c/script>\"\n result = convert_markdown_to_xhtml(content)\n\n self.assertIn(\"<script>\", result)\n\n\nclass GenerateEpubTests(unittest.TestCase):\n def test_generates_valid_epub_file(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n # 创建大纲文件\n outline = \"\"\"# 测试小说 大纲\n\n## 项目定位\n\n- **作者 / 笔名**:测试作者\n- **题材 / 子类型**:都市\n\"\"\"\n (tmppath / \"00-大纲.md\").write_text(outline, encoding=\"utf-8\")\n\n # 创建章节文件\n chapter1 = \"\"\"# 第01章 开始\n\n## 正文\n这是第一章的内容。\n故事从这里开始。\n\"\"\"\n (tmppath / \"第01章-开始.md\").write_text(chapter1, encoding=\"utf-8\")\n\n chapter2 = \"\"\"# 第02章 发展\n\n## 正文\n这是第二章的内容。\n故事继续发展。\n\"\"\"\n (tmppath / \"第02章-发展.md\").write_text(chapter2, encoding=\"utf-8\")\n\n # 生成 EPUB\n output_path = tmppath / \"test.epub\"\n result = generate_epub(tmppath, output_path)\n\n self.assertTrue(result)\n self.assertTrue(output_path.exists())\n\n # 验证 EPUB 结构\n with zipfile.ZipFile(output_path, 'r') as epub:\n names = epub.namelist()\n self.assertIn('mimetype', names)\n self.assertIn('META-INF/container.xml', names)\n self.assertIn('OEBPS/content.opf', names)\n self.assertIn('OEBPS/nav.xhtml', names)\n self.assertIn('OEBPS/title-page.xhtml', names)\n\n # 验证 mimetype\n mimetype = epub.read('mimetype').decode('utf-8')\n self.assertEqual(mimetype, 'application/epub+zip')\n\n def test_overrides_author_from_command_line(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n tmppath = Path(tmpdir)\n\n # 创建大纲文件\n outline = \"\"\"# 测试小说 大纲\n\n## 项目定位\n\n- **作者 / 笔名**:大纲作者\n\"\"\"\n (tmppath / \"00-大纲.md\").write_text(outline, encoding=\"utf-8\")\n\n # 创建章节文件\n chapter = \"\"\"# 第01章 开始\n\n## 正文\n内容\n\"\"\"\n (tmppath / \"第01章-开始.md\").write_text(chapter, encoding=\"utf-8\")\n\n # 生成 EPUB 并覆盖作者\n output_path = tmppath / \"test.epub\"\n result = generate_epub(tmppath, output_path, author_override=\"命令行作者\")\n\n self.assertTrue(result)\n\n # 验证作者被覆盖\n with zipfile.ZipFile(output_path, 'r') as epub:\n content_opf = epub.read('OEBPS/content.opf').decode('utf-8')\n self.assertIn(\"命令行作者\", content_opf)\n self.assertNotIn(\"大纲作者\", content_opf)\n\n def test_fails_for_nonexistent_directory(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n result = generate_epub(Path(tmpdir) / \"nonexistent\", Path(tmpdir) / \"test.epub\")\n\n self.assertFalse(result)\n\n\nif __name__ == \"__main__\":\n unittest.main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":9527,"content_sha256":"3e6493e852f2766245f8568212f7d77bf8bcc90e1f86c7fd7eb99fca6c5db3c0"},{"filename":"tests/test_scripts.py","content":"import tempfile\nimport unittest\nfrom pathlib import Path\nimport sys\n\nsys.path.insert(0, str(Path(__file__).resolve().parent.parent / \"scripts\"))\n\nfrom utils import extract_text_from_chapter, count_chinese_words, find_chapter_files\n\n\nclass TestUtils(unittest.TestCase):\n def test_count_chinese_words_basic(self):\n text = \"这是中文测试\"\n self.assertEqual(count_chinese_words(text), 6)\n\n def test_count_chinese_words_ignores_markdown(self):\n text = \"**这是**中文`测试`\"\n self.assertEqual(count_chinese_words(text), 6)\n\n def test_count_chinese_words_ignores_english(self):\n text = \"这是hello中文world测试\"\n self.assertEqual(count_chinese_words(text), 6)\n\n def test_extract_text_from_chapter_body_section(self):\n content = \"\"\"# 第01章-测试\n\n## 本章任务卡\n- **章节功能**:推进冲突\n\n## 正文\n这是正文内容。\n第二段正文。\n\n## 章节复盘\n- **本章摘要**:不计入\n\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n extracted = extract_text_from_chapter(path)\n self.assertIn(\"这是正文内容\", extracted)\n self.assertNotIn(\"不计入\", extracted)\n\n def test_extract_text_from_chapter_fallback(self):\n content = \"\"\"# 第01章-测试\n\n这里是正文内容,没有## 正文标记。\n\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n extracted = extract_text_from_chapter(path)\n self.assertIn(\"正文内容\", extracted)\n\n def test_find_chapter_files(self):\n with tempfile.TemporaryDirectory() as tmpdir:\n (Path(tmpdir) / \"第01章-开始.md\").write_text(\"# 第01章\", encoding=\"utf-8\")\n (Path(tmpdir) / \"第02章-发展.md\").write_text(\"# 第02章\", encoding=\"utf-8\")\n (Path(tmpdir) / \"00-大纲.md\").write_text(\"# 大纲\", encoding=\"utf-8\")\n files = find_chapter_files(Path(tmpdir))\n self.assertEqual(len(files), 2)\n\n def test_find_chapter_files_sorting(self):\n \"\"\"Chapter files should be sorted by chapter number.\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n (Path(tmpdir) / \"第10章-后半.md\").write_text(\"第10章\", encoding=\"utf-8\")\n (Path(tmpdir) / \"第01章-开始.md\").write_text(\"第01章\", encoding=\"utf-8\")\n (Path(tmpdir) / \"第03章-中间.md\").write_text(\"第03章\", encoding=\"utf-8\")\n files = find_chapter_files(Path(tmpdir))\n self.assertEqual(len(files), 3)\n self.assertEqual(files[0].name, \"第01章-开始.md\")\n self.assertEqual(files[1].name, \"第03章-中间.md\")\n self.assertEqual(files[2].name, \"第10章-后半.md\")\n\n\nclass CheckAiStyleTests(unittest.TestCase):\n def test_ai_style_single_file(self):\n from check_ai_style import check_ai_style\n content = \"\"\"# 第01章-测试\n\n## 正文\n他感到前所未有的悲伤。然而她非常开心的笑了。突然,门开了。\n\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n result = check_ai_style(str(path))\n self.assertTrue(result['exists'])\n self.assertGreater(result['word_count'], 0)\n self.assertIn('check_results', result)\n # Should detect 9 patterns\n self.assertEqual(len(result['check_results']), 9)\n\n def test_ai_style_nonexistent_file(self):\n from check_ai_style import check_ai_style\n result = check_ai_style(\"/nonexistent/path/第01章.md\")\n self.assertFalse(result['exists'])\n\n def test_ai_style_detects_emotion_tags(self):\n \"\"\"Emotion tag detection should catch patterns like '他感到前所未有的悲伤'.\"\"\"\n from check_ai_style import check_ai_style\n content = \"\"\"# 第01章-测试\n\n## 正文\n他感到前所未有的悲伤。她心中一阵恐惧。\n\"\"\"\n with tempfile.TemporaryDirectory() as tmpdir:\n path = Path(tmpdir) / \"第01章-测试.md\"\n path.write_text(content, encoding=\"utf-8\")\n result = check_ai_style(str(path))\n self.assertTrue(result['exists'])\n emotion_result = result['check_results'].get('emotion_tags', {})\n self.assertGreater(emotion_result.get('count', 0), 0)\n\n\nclass CheckNovelHealthTests(unittest.TestCase):\n def test_novel_health_basic(self):\n from check_novel_health import check_novel\n with tempfile.TemporaryDirectory() as tmpdir:\n content = \"\"\"# 第01章-测试\n\n## 正文\n他在房间里坐着。她走了进来。他们开始对话。\n\"\"\" * 10\n (Path(tmpdir) / \"第01章-测试.md\").write_text(content, encoding=\"utf-8\")\n result = check_novel(Path(tmpdir))\n self.assertEqual(result['total_chapters'], 1)\n self.assertIn('word_score', result)\n self.assertIn('rhythm_score', result)\n\n def test_novel_health_multiple_chapters(self):\n \"\"\"Health check should work with multiple chapter files.\"\"\"\n from check_novel_health import check_novel\n with tempfile.TemporaryDirectory() as tmpdir:\n (Path(tmpdir) / \"第01章-开始.md\").write_text(\n \"# 第01章\\n## 正文\\n他在房间里坐着看窗外。\\n\" * 50,\n encoding=\"utf-8\"\n )\n (Path(tmpdir) / \"第02章-发展.md\").write_text(\n \"# 第02章\\n## 正文\\n她冲到外面街道上跑了。\\n\" * 50,\n encoding=\"utf-8\"\n )\n result = check_novel(Path(tmpdir))\n self.assertEqual(result['total_chapters'], 2)\n self.assertGreater(result['total_words'], 0)\n\n\nif __name__ == \"__main__\":\n unittest.main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":5933,"content_sha256":"269bdca2897491c2100fddc374552843c7fc091cb55e2f064410f80cf39c0cc9"},{"filename":"tests/test_skill_docs.py","content":"import re\nimport unittest\nfrom pathlib import Path\n\n\nROOT = Path(__file__).resolve().parent.parent\nMARKDOWN_FILES = [ROOT / \"SKILL.md\", ROOT / \"README.md\"]\n\n\nclass SkillDocsTests(unittest.TestCase):\n def test_skill_and_readme_reference_opening_and_ending_guides(self):\n required = {\"references/opening-design.md\", \"references/ending-design.md\"}\n\n combined = \"\\n\".join(path.read_text(encoding=\"utf-8\") for path in MARKDOWN_FILES)\n\n for rel_path in required:\n self.assertIn(rel_path, combined)\n\n def test_local_markdown_links_resolve(self):\n pattern = re.compile(r\"\\[[^\\]]+\\]\\(([^)]+)\\)\")\n\n # Template files contain placeholder links that only resolve at runtime\n # (e.g. progress-dashboard-template.md links to 00-大纲.md which\n # only exists inside novels/ directories)\n TEMPLATE_LINKS = {\n '00-大纲.md', '01-人物档案.md', '02-世界观与伏笔.md',\n '03-悬念追踪表.md',\n }\n\n for path in ROOT.rglob(\"*.md\"):\n # Skip historical design docs (their links don't resolve from docs/plans/)\n if 'docs/plans' in str(path):\n continue\n content = path.read_text(encoding=\"utf-8\")\n for target in pattern.findall(content):\n if target.startswith(\"http://\") or target.startswith(\"https://\") or target.startswith(\"#\"):\n continue\n # Template placeholder links only resolve at runtime in novels/ directories\n if target in TEMPLATE_LINKS:\n continue\n if '___' in target or target.startswith('第'):\n continue\n resolved = (path.parent / target).resolve()\n self.assertTrue(\n resolved.exists(),\n msg=f\"{path.relative_to(ROOT)} has broken link: {target}\",\n )\n\n\nif __name__ == \"__main__\":\n unittest.main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":1966,"content_sha256":"81183be79aeec1d32b7c62e8ba53934c5ea2310d15b0c7668161a10d9095abcc"},{"filename":"WORKFLOW_GUIDE.md","content":"# 工作流可视化指南\n\n> 一张图看懂 chinese-novelist-skill 的完整工作流\n\n---\n\n## 整体流程图\n\n```\n┌────────────────────────────────────────────────────────────────────┐\n│ 三阶段工作流 │\n├────────────────────────────────────────────────────────────────────┤\n│ │\n│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │\n│ │ 策划期 │ ───→ │ 连载期 │ ───→ │ 收尾期 │ │\n│ └──────────────┘ └──────────────┘ └──────────────┘ │\n│ │ │ │ │\n│ ▼ ▼ ▼ │\n│ 极简大纲(10字段) 按章推进 完稿检查 │\n│ 首章任务卡 自动维护悬念 伏笔回收 │\n│ 进度仪表盘 质量检查 结局收束 │\n│ │\n│ 出口条件: 触发词: 触发词: │\n│ 首章任务卡完成 \"继续写\" \"写完了\" │\n│ │\n└────────────────────────────────────────────────────────────────────┘\n```\n\n---\n\n## 详细流程图\n\n### 阶段 1:策划期(第 1 次使用)\n\n```\n用户说:\"帮我写本悬疑小说\"\n │\n ▼\n┌─────────────────────────────┐\n│ 1. 引导填写极简大纲 │\n│ (10个问题,5分钟) │\n│ │\n│ 问题示例: │\n│ - 主角是谁,想要什么? │\n│ - 核心冲突是什么? │\n│ - 结局是什么? │\n└─────────────────────────────┘\n │\n ▼\n┌─────────────────────────────┐\n│ 2. 生成基础文件 │\n│ │\n│ novels/我的小说/ │\n│ ├── 00-大纲.md │\n│ └── 99-进度仪表盘.md │\n└─────────────────────────────┘\n │\n ▼\n┌─────────────────────────────┐\n│ 3. 生成书名候选(3-5个) │\n│ 用户选择确认 │\n└─────────────────────────────┘\n │\n ▼\n┌─────────────────────────────┐\n│ 4. 进入连载期 │\n│ 开始写第1章 │\n└─────────────────────────────┘\n```\n\n---\n\n### 阶段 2:连载期(日常使用)\n\n```\n用户说:\"继续写\"\n │\n ▼\n┌──────────────────────────────────────┐\n│ AI自动执行(\u003c 2秒) │\n│ │\n│ 1. 读取 99-进度仪表盘.md │\n│ - 当前章节:第X章 │\n│ - 本章状态:[场景拆分完成] │\n│ - 活跃悬念:3个 │\n│ │\n│ 2. 检查悬念状态 │\n│ - 001:🟢 活跃(第8章提及) │\n│ - 002:🔴 已过期(需立即处理) │\n│ - 003:🟡 即将过期 │\n│ │\n│ 3. 提取人物状态 │\n│ - 主角:[位置] [情绪] [目标] │\n│ - 核心价值观:[用于行为约束] │\n│ - 声音锚点:[3句标志性对白] │\n│ │\n│ 4. 读取上一章结尾(最后500字) │\n└──────────────────────────────────────┘\n │\n ▼\n┌──────────────────────────────────────┐\n│ 规划本章 │\n│ │\n│ 悬念操作: │\n│ - 002(已过期):提及 │\n│ - 001(活跃):推进(给出新线索) │\n│ │\n│ 钩子强度:3级(与章节位置匹配) │\n│ 钩子类型:神秘物品 │\n└──────────────────────────────────────┘\n │\n ▼\n┌──────────────────────────────────────┐\n│ 写作执行 │\n│ │\n│ 模式选择: │\n│ - 用户说\"快写\" → 快速模式 │\n│ - 默认 → 标准模式(场景拆分) │\n│ │\n│ 标准模式步骤: │\n│ 1. 场景拆分(3-6个场景) │\n│ 2. 写正文 │\n│ 3. 自检(字数+基础钩子) │\n└──────────────────────────────────────┘\n │\n ▼\n┌──────────────────────────────────────┐\n│ 交付章节 │\n│ │\n│ 生成文件:第XX章-标题.md │\n│ 更新进度仪表盘 │\n│ 显示质量概况 │\n└──────────────────────────────────────┘\n │\n ▼\n┌──────────────────────────────────────┐\n│ 质量检查(可选) │\n│ │\n│ 运行:check_ai_style.py │\n│ │\n│ 🔴 红灯项(必须过关): │\n│ ✓ 变化原则 ✓ 字数 ✓ 钩子 ✓ 人物 │\n│ │\n│ 🟡 黄灯项(建议优化): │\n│ ⚠️ AI味中度:空泛形容词超标 │\n│ │\n│ 修复 → 参考 ai-style-examples.md │\n└──────────────────────────────────────┘\n │\n ▼\n [循环:继续写下一章]\n```\n\n---\n\n### 阶段 3:收尾期\n\n```\n用户说:\"写完了\"\n │\n ▼\n┌──────────────────────────────────────┐\n│ 完稿检查流程 │\n│ │\n│ 1. 绿灯质量检查 │\n│ - 伏笔回收状态 │\n│ - 整体节奏曲线 │\n│ - 人物弧线完整性 │\n│ │\n│ 2. 悬念回收验证 │\n│ - 所有活跃悬念已回收 │\n│ - 没有僵尸悬念(未提及) │\n│ │\n│ 3. 结局收束 │\n│ - 主线悬念兑现 │\n│ - 人物弧线完成 │\n│ - 设定规则一致 │\n└──────────────────────────────────────┘\n │\n ▼\n┌──────────────────────────────────────┐\n│ 导出成书 │\n│ │\n│ python scripts/generate_epub.py │\n│ novels/我的小说 │\n│ │\n│ 输出:我的小说.epub │\n└──────────────────────────────────────┘\n```\n\n---\n\n## 质量检查流程图\n\n### 红绿灯机制\n\n```\n┌─────────────────────────────────────────────┐\n│ 每章交付前质量检查 │\n├─────────────────────────────────────────────┤\n│ │\n│ 🟥 红灯项(必须过关,否则不能交付) │\n│ ┌─────────────────────────────────────┐ │\n│ │ □ 变化原则:本章有不能删除的变化 │ │\n│ │ □ 字数达标:≥3000字 │ │\n│ │ □ 钩子存在:结尾有明确悬念 │ │\n│ │ □ 人物一致:行为符合设定 │ │\n│ └─────────────────────────────────────┘ │\n│ │\n│ 🟨 黄灯项(建议优化,AI自动检测) │\n│ ┌─────────────────────────────────────┐ │\n│ │ □ AI味程度(check_ai_style.py) │ │\n│ │ □ 对白自然度 │ │\n│ │ □ 展示vs讲述比例 │ │\n│ └─────────────────────────────────────┘ │\n│ │\n│ 🟩 绿灯项(完稿时统一检查) │\n│ ┌─────────────────────────────────────┐ │\n│ │ □ 伏笔回收状态 │ │\n│ │ □ 整体节奏曲线 │ │\n│ │ □ 人物弧线完整性 │ │\n│ └─────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────┘\n```\n\n---\n\n## 悬念管理流程图\n\n### 悬念生命周期\n\n```\n┌──────────────────────────────────────────────┐\n│ 悬念生命周期状态机 │\n├──────────────────────────────────────────────┤\n│ │\n│ ⚪ 待激活 ──→ 🟢 活跃 ──→ ✅ 已回收 │\n│ │ │ │\n│ │ ├─→ 🟡 即将过期 │\n│ │ │ (5章未提及) │\n│ │ │ │\n│ │ └─→ 🔴 已过期 │\n│ │ (10章未提及) │\n│ │ │\n│ └────────→ 🚫 已废弃 │\n│ │\n└──────────────────────────────────────────────┘\n\n关键规则:\n- 活跃悬念上限:6个\n- 每章至少提及1个已有悬念\n- 每3-5章推进至少1个悬念\n```\n\n### 悬念规划流程\n\n```\n每章写作前:\n │\n ▼\n┌────────────────────────────┐\n│ Step 1: 悬念盘点 │\n│ │\n│ 查看进度仪表盘: │\n│ - 活跃悬念(待推进) │\n│ - 即将过期(需提及) │\n│ - 计划新增(检查上限) │\n└────────────────────────────┘\n │\n ▼\n┌────────────────────────────┐\n│ Step 2: 悬念分配 │\n│ │\n│ 本章操作: │\n│ - 悬念001:推进(新线索) │\n│ - 悬念002:提及(保温) │\n│ - 悬念003:不处理 │\n└────────────────────────────┘\n │\n ▼\n┌────────────────────────────┐\n│ Step 3: 强度检查 │\n│ │\n│ 本章位置:第15章(50%) │\n│ 要求强度:4级 │\n│ 实际强度:4级(突然揭示) │\n│ 匹配度:✅ │\n└────────────────────────────┘\n │\n ▼\n [开始写作]\n```\n\n---\n\n## 三层叙事节奏图\n\n### 宏观层(全本)\n\n```\n紧张度\n 5 │ ★\n │ ╱ ╲\n 4 │ ★ ╱ ★\n │ ╱ ╲ ╱ ╲\n 3 │ ★ ╱ ★ ★\n │ ╱ ╲ ╱ ╲ ╱\n 2 │ ★╱ ★ ╱\n │ ★ ╱\n 1 │ ★ ╱\n └────────────────────────────────────→\n 0% 10% 25% 50% 75% 90% 100%\n │ │ │ │ │ │\n │ │ │ │ │ └─ 结局\n │ │ │ │ └─ 高潮前\n │ │ │ └─ 高潮\n │ │ └─ 中点转折\n │ └─ 小高潮\n └─ 开篇钩子\n\n四幕结构:\n[第一幕 25%] [第二幕 50%] [第三幕 20%] [第四幕 5%]\n```\n\n### 中观层(章节组)\n\n```\n黄金三章模式:\n\n第N章 第N+1章 第N+2章\n[铺垫] → [升级] → [小高潮+钩子]\n │ │ │\n建立情境 矛盾激化 情绪高点+新问题\n紧张度:★★☆ → ★★★ → ★★★☆\n\n每3章一个节奏单元\n单元结束后必须推进主线\n```\n\n### 微观层(单章)\n\n```\n单章内部结构:\n\n[0-20%] [20-50%] [50-80%] [80-100%]\n ↓ ↓ ↓ ↓\n进入冲突 矛盾激化 转折/升级 钩子落下\n紧张度: 紧张度: 紧张度: 紧张度:\n★★☆ ★★★ ★★★☆ ★★★★☆\n\n每章至少3次情绪变化\n字数:≥3000字\n```\n\n---\n\n## AI 味检测流程\n\n```\n运行 check_ai_style.py\n │\n ▼\n┌──────────────────────────────┐\n│ 检测9种AI味症状 │\n│ │\n│ 🔴 重度: │\n│ - 空泛形容词堆砌 │\n│ - 情绪标签句 │\n│ - 视角混乱 │\n│ │\n│ 🟡 中度: │\n│ - 四字成语堆砌 │\n│ - 解释性连接词 │\n│ - 过度书面化对白 │\n│ - 信息倾倒 │\n│ │\n│ 🟢 轻度: │\n│ - 时间转折词滥用 │\n│ - 句式均匀 │\n└──────────────────────────────┘\n │\n ▼\n┌──────────────────────────────┐\n│ 输出报告 │\n│ │\n│ 示例: │\n│ ❌ 空泛形容词: 5/千字 │\n│ 建议:用具体动作替代 │\n│ │\n│ 改写示例: │\n│ 原:他很悲伤 │\n│ 改:他盯着手机屏幕, │\n│ 拇指在玻璃上滑了三次 │\n└──────────────────────────────┘\n │\n ▼\n [对照 ai-style-examples.md 修改]\n │\n ▼\n [重新运行检测]\n```\n\n---\n\n## 人机协作流程\n\n### v2 简化版(默认)\n\n```\n┌─────────────────────────────────────────┐\n│ 快速续写模式(v2) │\n├─────────────────────────────────────────┤\n│ │\n│ 用户:\"继续写\" │\n│ │ │\n│ ▼ │\n│ AI自动执行(\u003c2秒): │\n│ - 读取进度仪表盘 │\n│ - 提取关键上下文 │\n│ - 自动场景拆分 │\n│ - 开始写作 │\n│ │ │\n│ ▼ │\n│ AI:\"已读取(第X章,3个活跃悬念, │\n│ 人物在[位置])。正在写第X章...\" │\n│ │ │\n│ ▼ │\n│ [直接开始写作] │\n│ │\n└─────────────────────────────────────────┘\n\n不再需要:\n❌ 正式化上下文传递格式\n❌ 每次确认\n❌ 手动填写多个文件\n```\n\n### v1 正式版(可选)\n\n```\n仅在特殊情况下使用:\n- 人类修改后交接给AI\n- 多人协作\n- 长时间中断后恢复\n```\n\n---\n\n## 文件依赖关系图\n\n```\n novels/我的小说/\n │\n ├── 00-大纲.md ◄─── 极简大纲(用户填写)\n │ ├─ 主角欲望/恐惧\n │ ├─ 核心悬念\n │ └─ 章节规划\n │\n ├── 99-进度仪表盘.md ◄─── 自动维护(AI更新)\n │ ▲ ├─ 当前章节\n │ │ ├─ 悬念状态\n │ │ ├─ 人物状态\n │ │ └─ 质量概况\n │ │\n ├── 01-人物档案-v2.md ◄─── 人物引擎(用户填写)\n │ │ ├─ 声音锚点\n │ │ ├─ 缺陷-失败映射\n │ │ └─ 弧线里程碑\n │ │\n ├── 02-世界观与伏笔.md ◄─── 世界观(可选)\n │ │\n ├── 03-悬念追踪表.md ◄─── 悬念管理(AI维护)\n │ │\n ├── 第01章-标题.md ◄─── 章节正文\n │ │ ├─ 任务卡\n │ │ ├─ 正文\n │ │ └─ 复盘\n │ │\n ├── 第02章-标题.md\n │ ...\n │\n └── 我的小说.epub ◄─── 导出成品\n\n AI读取顺序:\n 1. 99-进度仪表盘.md(获取当前状态)\n 2. 03-悬念追踪表.md(检查悬念状态)\n 3. 01-人物档案-v2.md(提取人物约束)\n 4. 第X-1章.md(读取上一章结尾)\n 5. 第X章.md(如已存在任务卡)\n```\n\n---\n\n## 常见问题决策树\n\n```\n问题:我应该用快速模式还是标准模式?\n │\n ▼\n 用户说\"快写\"\"初稿\"?\n │\n ┌────┴────┐\n │ │\n 是 否\n │ │\n ▼ ▼\n快速模式 用户说\"修改\"?\n(跳过场景 │\n 拆分) ┌┴┐\n │ │\n 是 否\n │ │\n ▼ ▼\n 修改模式 标准模式\n (修改) (完整流程)\n\n\n问题:AI写的我不满意,怎么办?\n │\n ▼\n 具体问题是什么?\n │\n ┌────┼────┬────────┐\n │ │ │ │\n对白 节奏 细节 整体\n不自然 太慢 不够 不满意\n │ │ │ │\n ▼ ▼ ▼ ▼\n参考 参考 增加 重写\n对白 节奏 描写 整章\n指南 模板 或\n 切换\n 模式\n```\n\n---\n\n## 版本对比\n\n```\n┌──────────────────────────────────────────────────────────┐\n│ v2.0 → v2.1 优化 │\n├──────────────────────────────────────────────────────────┤\n│ │\n│ AI味检测:6种症状 → 9种症状+批量模式 │\n│ 遗漏3种 完整覆盖 │\n│ │\n│ 脚本:3个工具 → 7个工具 │\n│ 缺人物/时间线检查 新增character_tracker │\n│ check_timeline │\n│ check_novel_health合并 │\n│ │\n│ 收尾期:仅出版门控 → 三步流程(绿灯→润色→门控) │\n│ 缺少润色 完稿三轮润色+版本管理 │\n│ │\n│ 多线叙事:无 → 线切换决策+POV规则 │\n│ 只能单线 支持群像多线 │\n│ │\n│ 中断恢复:一行描述 → 完整恢复协议 │\n│ 不够用 续写简报+校验+断路器恢复 │\n│ │\n│ v1模板:未标注废弃 → 全部标注+指向v2 │\n│ │\n└──────────────────────────────────────────────────────────┘\n```\n\n---\n\n保存这张图,写作时对照使用!\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":24991,"content_sha256":"c2d3828ac91b3b092a8e36aa6063013461448651b20b8f41f3ea153dbcf0989f"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Chinese Novelist","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Version","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Version","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"2.3.0","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Version Date","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"2026-05-06","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Changes","type":"text","marks":[{"type":"strong"}]},{"text":": Darwin 架构升级:引入角色智能体推演机制,将写作架构从\"章节任务驱动\"升级为\"角色认知驱动\"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Previous Versions","type":"text","marks":[{"type":"strong"}]},{"text":": see ","type":"text"},{"text":"CHANGELOG.md","type":"text","marks":[{"type":"link","attrs":{"href":"CHANGELOG.md","title":null}}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Overview","type":"text"}]},{"type":"paragraph","content":[{"text":"为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"执行入口速查","type":"text"}]},{"type":"paragraph","content":[{"text":"先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用户意图","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"触发词示例","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"进入流程","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"首轮必须交付","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"新建小说","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"写一本\"、\"帮我写小说\"、\"从头开始\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"策划期","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3-5 个书名候选 + 极简总纲 + 首章任务卡","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"继续连载","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"继续写\"、\"下一章\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连载期","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"读取/索要小说目录,定位仪表盘、大纲和最近章节,再给下一章任务或正文","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"快速出稿","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"快写\"、\"先写\"、\"初稿\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连载期快速模式","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"跳过场景拆分,直接写正文,并只做字数和基础钩子检查","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改章节","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"修改第 X 章\"、\"重写\"、\"打磨\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改工作流","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"定位章节,诊断问题,判定修改级别,再针对性改写","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动写完","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"自动写完整本\"、\"全部写完\"、\"autopilot\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动驾驶模式","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动补齐缺失项,选定书名,创建/更新项目文件,并立即开始第 1 章或下一章","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"完稿发布","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"写完了\"、\"准备发布\"、\"导出 epub\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"收尾期 / Export","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"完稿门控或 EPUB 导出路径","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"质量检查","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"字数检查\"、\"AI 味检查\"、\"检查节奏\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"脚本工具","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"运行对应脚本并解释结果","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"首轮输出契约","type":"text"}]},{"type":"paragraph","content":[{"text":"每次响应先完成当前入口的最小闭环:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"先定位阶段","type":"text","marks":[{"type":"strong"}]},{"text":":明确是策划期、连载期、收尾期、修改、导出还是检查。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"再收集缺口","type":"text","marks":[{"type":"strong"}]},{"text":":只追问会阻塞下一步的缺失项;自动驾驶模式不追问,按题材模板推断。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"立刻给可用产物","type":"text","marks":[{"type":"strong"}]},{"text":":新书给书名和总纲,续写给下一章任务或正文,修改给诊断和修改方案,检查给脚本结果。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"少解释流程","type":"text","marks":[{"type":"strong"}]},{"text":":除非用户问方法,不要长篇介绍本 skill;把流程体现在产物里。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"维护文件状态","type":"text","marks":[{"type":"strong"}]},{"text":":凡是创建、续写、修改章节,都同步更新 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的进度、人物状态和悬念状态。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户要从零开始写中文小说、网文、长篇故事、连载故事","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户已有设定,想补大纲、人物档案、世界观、章节规划","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户要续写已有章节,要求前后连贯","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户要重写某章,增强钩子、节奏、对白、人物张力或减少 AI 味","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户要将小说导出为 EPUB 电子书(如\"帮我导出 epub\"、\"把这本书导出为电子书\")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户要检查章节字数(如\"帮我看看这章多少字\")","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"三阶段工作流","type":"text"}]},{"type":"paragraph","content":[{"text":"本 skill 采用简化后的三阶段工作流:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"阶段","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"目标","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"出口条件","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"适用场景","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"策划期","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"锁定大纲、人物、首章任务","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"首章任务卡完成","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"从零开始或重置项目","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连载期","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"按章推进,持续输出","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"大纲章节全部完成","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"已有基础,继续写作","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"收尾期","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"完稿检查、结局收束","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"出版门控通过","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"全部章节完成","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"阶段切换","type":"text"}]},{"type":"paragraph","content":[{"text":"用户说... → 进入...","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"帮我写个小说\" / \"从头开始\" → ","type":"text"},{"text":"策划期","type":"text","marks":[{"type":"strong"}]},{"text":"(从极简大纲开始)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"继续写\" / \"下一章\" → ","type":"text"},{"text":"连载期","type":"text","marks":[{"type":"strong"}]},{"text":"(自动读取进度)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"写完了\" / \"准备发布\" → ","type":"text"},{"text":"收尾期","type":"text","marks":[{"type":"strong"}]},{"text":"(完稿检查)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"⚠️ 阶段转换检查点","type":"text"}]},{"type":"paragraph","content":[{"text":"策划期 → 连载期(必须确认):","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"极简大纲已完成,logline 清晰","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"主角身份和核心冲突明确","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"用户已确认书名","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"首章任务卡已设计","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"人工模式","type":"text","marks":[{"type":"strong"}]},{"text":" → 向用户确认:\"大纲和首章任务已就绪,是否开始写第 1 章?\" ","type":"text"},{"text":"自动驾驶模式","type":"text","marks":[{"type":"strong"}]},{"text":" → 自动通过,立即开始写第 1 章(书名自动选推荐项排名第 1)","type":"text"}]},{"type":"paragraph","content":[{"text":"连载期 → 收尾期(必须确认):","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"大纲规定的所有章节已写完","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"所有活跃悬念有明确的回收或延后说明","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"用户明确表示\"写完了\"或\"准备收尾\"","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"人工模式","type":"text","marks":[{"type":"strong"}]},{"text":" → 向用户确认:\"全部章节已完成,是否进入完稿检查?\" ","type":"text"},{"text":"自动驾驶模式","type":"text","marks":[{"type":"strong"}]},{"text":" → 自动通过,直接进入完稿检查","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"写作速度开关","type":"text"}]},{"type":"paragraph","content":[{"text":"在连载期内,支持两种速度:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"模式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"触发词","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"特点","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"质量检查","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"快速模式","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\"快写\"、\"先写\"、\"初稿\"","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"跳过场景拆分,直接输出","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"仅字数 + 基础钩子","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"标准模式","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"默认 / 不明确时","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"完整流程","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"红绿灯检查","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"快速模式原则:","type":"text"},{"text":"写出来比写对更重要","type":"text","marks":[{"type":"strong"}]},{"text":"。写完再改,不打断创作流。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"🤖 自动驾驶模式(Autopilot)","type":"text"}]},{"type":"paragraph","content":[{"text":"当触发词包含\"自动写完整本\"、\"全部写完\"、\"写完整本书\"、\"自动完成\"、\"autopilot\"时,进入自动驾驶模式。此模式下,AI 自主走完从策划到收尾的全流程,","type":"text"},{"text":"不停顿等待人工确认","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"与人工模式的核心区别","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"环节","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人工模式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动驾驶模式","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Intake 缺失项","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"暂停追问用户","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"从初始请求最大程度推断,推断不出用题材模板填充","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"书名选择","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"生成 3-5 候选等用户选","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动选推荐项(排名第 1 的候选)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"阶段转换","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"向用户确认后进入","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动通过检查点,继续下一阶段","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"每章写完","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"交付后等待用户反馈","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动回写状态,立即开始下一章","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改后确认","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"向用户确认","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动视为通过,继续","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"收尾期","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用户确认后才进入","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"大纲章节全部写完后自动进入","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"自动驾驶安全机制","type":"text"}]},{"type":"paragraph","content":[{"text":"自动驾驶模式虽不等待人工确认,但需遵守以下护栏:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"规则","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"说明","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"红灯重试上限","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"同一章红灯不通过,最多重写 2 次(不是 1 次),2 次不过则标注问题后继续","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连续失败熔断","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连续 3 章红灯不通过 → ","type":"text"},{"text":"强制暂停","type":"text","marks":[{"type":"strong"}]},{"text":",输出诊断报告,等待人工介入","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节上限保护","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单章最长不超过 8000 字,防止失控膨胀","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"悬念过期强制","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"即使自动驾驶,仍严格遵守 5/10 章过期预警(这是质量底线,不可跳过)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"进度报告","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"每写完 5 章输出简报:已完成 X/Y 章、活跃悬念 N 个、红灯通过率、预估剩余","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Intake 自动填充规则","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户初始请求中信息不足时,按以下规则自动填充:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"缺失项","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动填充策略","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"故事引擎","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"根据题材自动选择:玄幻→升级流、悬疑→解谜流、言情→成长流、都市→逆袭流","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"叙事视角","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"默认第三人称(最通用)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"篇幅目标","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用户指定优先;未指定时根据题材模板填充(如玄幻 50-100 章、悬疑 20-40 章);默认 30 章×3000 字","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"文风关键词","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"根据题材选择:玄幻→热血爽快、悬疑→冷峻紧凑、言情→细腻温暖","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"目标读者","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"默认对应题材的主流读者群","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"主角缺陷","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"根据题材模板配对(如:玄幻→过度自信、悬疑→偏执、言情→不信任他人)","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"题材模板(自动填充用)","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"题材","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"故事引擎","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"篇幅","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"文风","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"主角缺陷","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"玄幻修仙","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"升级流:境阶体系 + 资源竞争 + 越级挑战","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"50-100 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"热血爽快","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"过度自信→吃大亏→学会敬畏","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"都市重生","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"逆袭流:前世经验 + 二次机会 + 逐步翻盘","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-50 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"冷静务实","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"前世傲慢→重生后学会谦逊","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"悬疑推理","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解谜流:核心谜题 + 线索链 + 反转揭示","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"20-40 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"冷峻紧凑","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"偏执追真相→代价极高→学会放下","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"言情甜宠","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"成长流:相遇→误会→和好→在一起","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-50 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"细腻温暖","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"不信任他人→被温暖感化","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"职场商战","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"升级流:从小员工到行业大佬","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-50 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"干练利落","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"过于理想主义→碰壁→学会变通","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"历史穿越","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"逆袭流:现代知识 + 古人环境 + 改变历史","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-60 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"沉稳大气","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自视甚高→时局教训→学会敬畏时代","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"科幻未来","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"升级流:技术突破 + 资源竞争 + 文明对抗","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-50 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"理性冷峻","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"过度依赖技术→人性代价→学会平衡","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"武侠江湖","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"升级流:武学进境 + 江湖恩怨 + 正邪抉择","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-60 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"豪迈苍凉","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"执念复仇→悟道放下","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"恐怖灵异","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解谜流:诡异事件 + 规则探索 + 生存对抗","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"20-40 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"压抑阴冷","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"好奇心太重→付出代价→学会敬畏未知","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"校园青春","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"成长流:学业挑战 + 友情爱情 + 自我发现","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"20-30 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"清新明快","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"逃避现实→被迫面对→勇敢担当","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"未覆盖题材","type":"text","marks":[{"type":"strong"}]},{"text":":使用最接近的模板(如末日→科幻,古言→历史),故事引擎默认升级流,文风默认\"紧凑流畅\",缺陷默认\"执念→代价→成长\"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"自动写作循环","type":"text"}]},{"type":"paragraph","content":[{"text":"进入自动驾驶后,连载期按以下循环执行,","type":"text"},{"text":"直到大纲全部章节写完","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"while 大纲还有未写章节:\n 1. 读取进度仪表盘 → 获取当前状态\n 2. 检查悬念状态 → 处理过期悬念\n 3. 明确本章任务 → 目标/阻碍/转折/钩子\n 4. 场景拆分 → 3-6个场景\n 5. 写正文 → 完整章节(不超过8000字)\n 6. 质量检查 → 红灯项必须通过\n 7. 回写状态 → 更新进度仪表盘\n 8. 自动开始下一章 → 不停顿","type":"text"}]},{"type":"paragraph","content":[{"text":"红灯项未通过时","type":"text","marks":[{"type":"strong"}]},{"text":":自动重写该章节最多 2 次。2 次后仍不通过,标注问题后继续下一章。","type":"text"}]},{"type":"paragraph","content":[{"text":"连续失败熔断","type":"text","marks":[{"type":"strong"}]},{"text":":连续 3 章红灯不通过 → 强制暂停,输出诊断报告,等待人工介入。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"收尾触发","type":"text"}]},{"type":"paragraph","content":[{"text":"大纲全部章节写完后,自动进入收尾期:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"执行出版门控检查(倒序检查 + 烂尾预警)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"输出完稿报告","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如用户要求,自动运行 EPUB 导出","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"策划期流程","type":"text"}]},{"type":"paragraph","content":[{"text":"进入策划期后,按以下顺序执行:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Intake","type":"text","marks":[{"type":"strong"}]},{"text":" → 补齐关键信息(7 项)(详见下方 ","type":"text"},{"text":"Intake","type":"text","marks":[{"type":"link","attrs":{"href":"#intake","title":null}}]},{"text":" 章节)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"素材积累","type":"text","marks":[{"type":"strong"}]},{"text":"(如需)→ 题材涉及专业领域时,参考 ","type":"text"},{"text":"04-素材积累.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/04-%E7%B4%A0%E6%9D%90%E7%A7%AF%E7%B4%AF.md","title":null}}]},{"text":" 收集资料,标记\"必须准确\"vs\"可以虚构\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"书名生成","type":"text","marks":[{"type":"strong"}]},{"text":" → 生成 3-5 个候选书名供用户选择(详见下方 ","type":"text"},{"text":"书名生成","type":"text","marks":[{"type":"link","attrs":{"href":"#%E4%B9%A6%E5%90%8D%E7%94%9F%E6%88%90","title":null}}]},{"text":" 章节)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"创建文件","type":"text","marks":[{"type":"strong"}]},{"text":" → 按 ","type":"text"},{"text":"Required Files","type":"text","marks":[{"type":"link","attrs":{"href":"#required-files","title":null}}]},{"text":" 创建大纲和仪表盘","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"规划确认","type":"text","marks":[{"type":"strong"}]},{"text":" → 按 ","type":"text"},{"text":"Planning Rules","type":"text","marks":[{"type":"link","attrs":{"href":"#planning-rules","title":null}}]},{"text":" 锁定核心内容","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户确认","type":"text","marks":[{"type":"strong"}]},{"text":" → 阶段转换检查点通过后,进入连载期","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Intake","type":"text"}]},{"type":"paragraph","content":[{"text":"只补问真正缺失的关键信息,优先补齐以下 7 项:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"故事引擎(核心机制、代价/资源、升级规则)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"题材 / 子类型","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"一句话 premise 或核心冲突","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主角身份、最大欲望、致命缺陷","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"目标读者、文风关键词、禁忌","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"叙事视角(第一人称 / 第三人称 / 群像)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"篇幅目标与交付模式","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"如果用户只给了模糊想法,不要空泛追问;应给出具体备选并推荐更稳的方案。","type":"text"}]},{"type":"paragraph","content":[{"text":"关于故事引擎:","type":"text","marks":[{"type":"strong"}]},{"text":" 如果用户说不清引擎,用引导问题帮助提炼:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"「读者追这本书的理由是什么?是主角的成长?还是谜题解开的那一刻爽感?」","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"「主角每赢一次,代价是什么?代价会越来越大吗?」","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"「这个故事到最后,代价会大到什么程度?」","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"书名生成","type":"text"}]},{"type":"paragraph","content":[{"text":"策划模式开始时,","type":"text"},{"text":"必须","type":"text","marks":[{"type":"strong"}]},{"text":"为小说生成 3-5 个候选书名供用户选择。每个书名需在 20 字以内,且必须满足以下原则:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"命名原则","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"避免模板感","type":"text","marks":[{"type":"strong"}]},{"text":":不直接使用「xxx 的 xxx」「xxx 传」「xxx 记」等通用套路","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"有画面感或隐喻感","type":"text","marks":[{"type":"strong"}]},{"text":":标题能引发读者联想,激发好奇心","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"体现核心主题或人物命运","type":"text","marks":[{"type":"strong"}]},{"text":":不是单纯描述事件,而是暗示更深层的东西","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"音韵节奏","type":"text","marks":[{"type":"strong"}]},{"text":":中文书名要顺口、有抑扬顿挫","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"标题结构参考","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"类型","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"公式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"示例","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"悬念型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"「反常识/矛盾/设问」","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"《她杀了他三次》《没有人能活着离开》","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"意象型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"「核心意象 + 延伸」","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"《枯叶刀》《深海里的牙》《第七次下雪》","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人物命运型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"「身份/处境 + 悬念」","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"《扫地僧的秘密》《被遗忘的继承人》","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"双关型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"「表里两层含义」","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"《局中人》(既是棋局,也是局外人视角)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"诗意型","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"「文学性表达」","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"《春风不度玉门关》《一蓑烟雨任平生》","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"生成流程","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"分析","type":"text"},{"text":"故事引擎","type":"text","marks":[{"type":"strong"}]},{"text":"(核心机制、代价、升级规则)—— 书名往往暗示机制","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提取 2-3 个关键词作为标题元素","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运用上表中的结构,组合生成 5 个以上候选","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"评估每个候选的:独特性、画面感、与主题的关联度","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"精选 3-5 个最佳选项,每项附上一句话说明推荐理由","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"让用户最终确认书名","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"示例输出","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"根据你的设定,我生成以下候选书名:\n\n1. **《枯叶刀》** — 以主角标志性武器为意象,暗示她看似脆弱实则锋利\n2. **《第七次下雪时我来接你》** — 数字+时间承诺,营造悬疑与浪漫交织\n3. **《没有人能活着离开这个镇》** — 反常识宣言,直接激发读者好奇心\n4. **《她的名字是秘密》** — 聚焦核心悬念,暗示名字背后的隐情\n5. **《雾中来信》** — 意象型,营造神秘通信的紧张感\n\n推荐优先考虑「枯叶刀」或「第七次下雪时我来接你」,前者更独特,后者更易引发好奇。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Required Files","type":"text"}]},{"type":"paragraph","content":[{"text":"在 ","type":"text"},{"text":"novels/\u003c书名>/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 内创建或更新:","type":"text"}]},{"type":"paragraph","content":[{"text":"核心文件(必须):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"00-大纲.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"outline-template-v1-minimal.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/outline-template-v1-minimal.md","title":null}}]},{"text":"(默认,10 个字段,5 分钟完成)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"progress-dashboard-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/progress-dashboard-template.md","title":null}}]},{"text":"(自动生成,AI 维护)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"可选深化文件(按需选用):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"01-人物档案.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"character-template-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/character-template-v2.md","title":null}}]},{"text":"(默认推荐,欲望 - 恐惧双引擎驱动写作)或 ","type":"text"},{"text":"character-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/character-template.md","title":null}}]},{"text":"(v1 简单静态版)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"02-世界观与伏笔.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"story-bible-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/story-bible-template.md","title":null}}]},{"text":"(世界观复杂时补充)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"章节文件:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"第XX章-标题.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"chapter-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/chapter-template.md","title":null}}]}]}]}]},{"type":"paragraph","content":[{"text":"专用文件(按需):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"03-多线管理.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"references/03-多线管理.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/03-%E5%A4%9A%E7%BA%BF%E7%AE%A1%E7%90%86.md","title":null}}]},{"text":"(仅多线叙事小说)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"03-悬念追踪表.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"references/09-悬念生命周期管理.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/09-%E6%82%AC%E5%BF%B5%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86.md","title":null}}]},{"text":"(悬念超过 3 条时必须启用)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"03-悬念-章节匹配.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 使用 ","type":"text"},{"text":"references/10-悬念-章节匹配矩阵.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/10-%E6%82%AC%E5%BF%B5-%E7%AB%A0%E8%8A%82%E5%8C%B9%E9%85%8D%E7%9F%A9%E9%98%B5.md","title":null}}]},{"text":"(长篇连载时启用)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Planning Rules","type":"text"}]},{"type":"paragraph","content":[{"text":"开始批量写章节前,至少锁定以下内容:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"logline","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主线冲突、对抗力量、利害关系","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主角外部目标与内在成长弧线","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"结局类型与兑现方式","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"采用的结构模板(参见 ","type":"text"},{"text":"plot-structures.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/plot-structures.md","title":null}}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"逐章功能分配","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"未回收悬念、伏笔、时间线、关系状态","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"人物档案(推荐 v2):","type":"text","marks":[{"type":"strong"}]},{"text":" 使用 ","type":"text"},{"text":"character-template-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/character-template-v2.md","title":null}}]},{"text":",核心包括欲望 - 恐惧双引擎(驱动写作决策)、声音指纹(保持对白一致性)、缺陷 - 失败映射(让人物真实可信)","type":"text"}]},{"type":"paragraph","content":[{"text":"除非用户明确要求跳过规划,否则不要直接写完全书。即使用户要求”直接开写”,也先产出一页精简总纲再动笔。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"质量检查红绿灯","type":"text"}]},{"type":"paragraph","content":[{"text":"每章交付前,执行三级检查:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"红灯项(必须过关)","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"变化原则","type":"text","marks":[{"type":"strong"}]},{"text":":本章发生了不能删除的变化(情节推进/关系变化/状态改变)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"字数达标","type":"text","marks":[{"type":"strong"}]},{"text":":≥3000 字(快速模式≥2500 字)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"钩子存在","type":"text","marks":[{"type":"strong"}]},{"text":":结尾有明确的悬念/问题/张力","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"人物一致","type":"text","marks":[{"type":"strong"}]},{"text":":主要人物行为符合设定","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"黄灯项(建议优化)","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"AI 味程度(运行 ","type":"text"},{"text":"python3 scripts/check_ai_style.py \u003c章节文件路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 自动检测)","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"对白自然度","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"展示 vs 讲述比例","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"AI 味检测详情:","type":"text","marks":[{"type":"strong"}]},{"text":" 检测 9 种症状(空泛形容词、四字成语、情绪标签句、解释连接词、过度书面化对白、视角混乱、信息倾倒、时间转折词、句式均匀),详见 ","type":"text"},{"text":"references/ai-style-examples.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-examples.md","title":null}}]},{"text":"(改写范例)和 ","type":"text"},{"text":"references/ai-style-by-genre.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-by-genre.md","title":null}}]},{"text":"(按题材专项防治)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"绿灯项(完稿时统一检查)","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"伏笔回收状态","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"整体节奏曲线","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"人物弧线完整性","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"执行原则","type":"text","marks":[{"type":"strong"}]},{"text":":红灯项必须全部通过;黄灯项超标时给出修改建议;绿灯项在收尾期统一处理。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"连载期写作循环","type":"text"}]},{"type":"paragraph","content":[{"text":"每写一章都按这个循环执行:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"读取上下文","type":"text","marks":[{"type":"strong"}]},{"text":":先读 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 获取当前状态,再读 ","type":"text"},{"text":"00-大纲.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"、最近章节摘要、","type":"text"},{"text":"02-世界观与伏笔.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"检查悬念","type":"text","marks":[{"type":"strong"}]},{"text":":查阅进度仪表盘中的悬念状态,如有🔴过期悬念,本章必须提及;如有🟡即将过期悬念,本章建议推进","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"角色状态推演","type":"text","marks":[{"type":"strong"}]},{"text":"(核心新增):在决定\"本章写什么\"之前,先推演每个主要角色的当前状态,让剧情从角色认知自然生长,而非由任务驱动。详见下方「角色智能体推演」章节","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"明确本章任务","type":"text","marks":[{"type":"strong"}]},{"text":":基于角色状态推演结果,确定本章目标 / 阻碍 / 转折 / 结尾钩子","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"场景拆分","type":"text","marks":[{"type":"strong"}]},{"text":"(标准模式):拆 3-6 个场景,再落正文;快速模式跳过此步直接写","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"写正文","type":"text","marks":[{"type":"strong"}]},{"text":":开头前 20% 必须尽快进入冲突,参考 ","type":"text"},{"text":"chapter-guide.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/chapter-guide.md","title":null}}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果在写首章,额外参考 ","type":"text"},{"text":"opening-design.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/opening-design.md","title":null}}]}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"对话、扩写、连贯性、结尾钩子分别参考:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"dialogue-writing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/dialogue-writing.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"content-expansion.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/content-expansion.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"consistency.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/consistency.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"hook-techniques.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/hook-techniques.md","title":null}}]},{"text":" 或按章节位置选用 ","type":"text"},{"text":"13-钩子映射表.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/13-%E9%92%A9%E5%AD%90%E6%98%A0%E5%B0%84%E8%A1%A8.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"scene-design-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/scene-design-v2.md","title":null}}]},{"text":"(默认推荐,含场景任务检查卡和价值测试)或 ","type":"text"},{"text":"scene-design.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/scene-design.md","title":null}}]},{"text":"(v1 基础版)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"style-polishing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/style-polishing.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"AI 味改写:","type":"text"},{"text":"ai-style-examples.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-examples.md","title":null}}]},{"text":" 和 ","type":"text"},{"text":"ai-style-by-genre.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-by-genre.md","title":null}}]},{"text":"(按题材专项防治)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"质量检查","type":"text","marks":[{"type":"strong"}]},{"text":":运行 ","type":"text"},{"text":"python3 scripts/check_chapter_wordcount.py \u003c章节文件路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 检查字数;按「质量检查红绿灯」执行三级检查(见上方)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"回写状态","type":"text","marks":[{"type":"strong"}]},{"text":":更新章节摘要、人物状态、伏笔状态与章节进度到 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"},{"text":"同时更新角色认知状态和压力状态","type":"text","marks":[{"type":"strong"}]},{"text":"(见「角色智能体推演」章节)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自动驾驶模式专用","type":"text","marks":[{"type":"strong"}]},{"text":":回写完成后立即开始下一章,不停顿等待反馈","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"悬念管理","type":"text"}]},{"type":"paragraph","content":[{"text":"连载期间(人工和自动驾驶均适用),每章写作前必须检查悬念状态,防止悬念过期或遗忘。","type":"text"}]},{"type":"paragraph","content":[{"text":"每章悬念操作流程:","type":"text","marks":[{"type":"strong"}]}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"查看 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中的悬念状态","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"标记本章要操作的悬念:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"推进(给出新线索/新进展)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提及(保温,防止过期)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"解决(回收悬念)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"新增(本章引入新悬念,需检查活跃悬念≤6 条)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"写入章节钩子中","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"悬念过期预警规则:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🟡 即将过期:5 章未提及 → 本章必须提及","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🔴 已过期:10 章未提及 → 必须在本章推进或解决","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"详细参考:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"references/09-悬念生命周期管理.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/09-%E6%82%AC%E5%BF%B5%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86.md","title":null}}]},{"text":"(状态定义和预警规则) ","type":"text"},{"text":"references/10-悬念-章节匹配矩阵.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/10-%E6%82%AC%E5%BF%B5-%E7%AB%A0%E8%8A%82%E5%8C%B9%E9%85%8D%E7%9F%A9%E9%98%B5.md","title":null}}]},{"text":"(章节 - 悬念匹配和强度检查)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"角色智能体推演","type":"text"}]},{"type":"paragraph","content":[{"text":"核心理念","type":"text","marks":[{"type":"strong"}]},{"text":":每写一章前,先让 AI 把每个主要角色当下的认知状态和压力状态过一遍,再决定他这一章去找谁、说什么、做什么。这将写作架构从\"任务驱动\"升级为\"角色认知驱动\",让角色行为从\"作者安排\"变成\"角色自然反应\"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"为什么需要角色智能体","type":"text"}]},{"type":"paragraph","content":[{"text":"传统问题","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"角色行为服从剧情需要,而非角色自身逻辑","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"长篇写作时角色容易\"失忆\"或行为不一致","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"缺少\"角色在当前压力下会主动做什么\"的推理","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"智能体方案","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每个主要角色是一个独立的\"智能体\",有自己的认知状态、压力状态、目标和选择空间","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每章开始前,先推演每个角色的当前状态,再决定他们的行动","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"角色行为由其认知和压力决定,而非由章节任务决定","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"角色状态推演的 8 个维度","type":"text"}]},{"type":"paragraph","content":[{"text":"在每章写作前(步骤 3),对每个主要角色进行以下推演:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"维度","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"推演问题","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"输出","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1. 目标","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色当前最想达成什么?短期目标和长期目标是否冲突?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"当前首要目标 + 目标冲突","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2. 信息","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色知道什么?不知道什么?他的认知与真相的差距是什么?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"已知信息清单 + 认知盲区","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3. 情绪","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色当前的情绪状态?是愤怒、恐惧、焦虑还是兴奋?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"主导情绪 + 情绪强度(1-10)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"4. 压力","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色面临什么压力?时间压力、道德压力、生存压力?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"压力源 + 压力等级(1-10)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"5. 关系","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色与其他角色的关系状态?信任度、依赖度、冲突度?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"关系网络 + 关系变化","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"6. 资源","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色有什么资源(金钱、人脉、技能、信息)?缺什么?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"可用资源 + 资源缺口","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"7. 时间","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"这个角色有多少时间?是否面临截止日期或倒计时?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"时间窗口 + 紧迫度","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"8. 选择空间","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"基于以上 7 个维度,这个角色有哪些合理的行动选项?","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3-5 个可能的行动 + 每个行动的代价","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"推演流程","type":"text"}]},{"type":"paragraph","content":[{"text":"步骤 1:识别主要角色","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"从 ","type":"text"},{"text":"01-人物档案.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中提取主要角色(通常 2-5 个)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主要角色 = 有独立目标 + 会主动行动 + 影响剧情走向的角色","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"步骤 2:读取角色上一章的状态","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"从 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 的\"角色状态快照\"区域读取","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果是首次推演,从 ","type":"text"},{"text":"01-人物档案.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 初始化","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"步骤 3:逐个推演角色状态","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"按 8 个维度逐一推演","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"重点关注:信息差(角色不知道的真相)、压力源(驱动角色行动的动力)、选择空间(角色的理性选择)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"步骤 4:生成角色行动预测","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"基于推演结果,预测每个角色在本章最可能做什么","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"格式:","type":"text"},{"text":"[角色名] 会 [行动],因为 [认知/压力原因]","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"步骤 5:设计角色互动","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果多个角色的行动会产生交集,设计互动场景","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果角色之间有信息差,设计戏剧反讽(A 知道但 B 不知道)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"步骤 6:确定本章任务","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"基于角色行动预测,确定本章的目标、阻碍、转折、钩子","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"此时的\"任务\"是角色行动的自然结果,而非外部强加","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"推演输出示例","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 第 X 章角色状态推演\n\n### 角色 A(主角)\n- **目标**:找到失踪的妹妹(长期);今天必须拿到线索(短期)\n- **信息**:知道妹妹最后出现在码头;不知道妹妹已被绑架\n- **情绪**:焦虑(8/10),开始怀疑自己的判断\n- **压力**:时间压力(9/10,48 小时内必须找到);道德压力(是否要用非法手段)\n- **关系**:与警察 B 的信任度下降(B 认为他隐瞒信息)\n- **资源**:有一个线人的联系方式;缺钱(无法支付线人费用)\n- **时间**:剩余 36 小时\n- **选择空间**:\n 1. 去找线人(代价:需要借钱或欠人情)\n 2. 自己去码头调查(代价:可能打草惊蛇)\n 3. 向警察 B 坦白(代价:可能被限制行动)\n\n**预测行动**:A 会去找线人,因为时间压力太大,他无法等警察的慢节奏。他会向朋友 C 借钱。\n\n### 角色 B(警察)\n- **目标**:破案(长期);今天要审讯嫌疑人(短期)\n- **信息**:知道码头有黑帮活动;不知道 A 有线人\n- **情绪**:怀疑(6/10),觉得 A 在隐瞒什么\n- **压力**:职业压力(7/10,上级要求尽快破案)\n- **关系**:与 A 的信任度下降;与上级的关系紧张\n- **资源**:有警方数据库;缺少关键证据\n- **时间**:今天必须有进展\n- **选择空间**:\n 1. 跟踪 A(代价:违反程序)\n 2. 审讯嫌疑人(代价:可能打草惊蛇)\n 3. 申请搜查令(代价:时间太长)\n\n**预测行动**:B 会跟踪 A,因为他怀疑 A 知道更多信息。这会导致 B 发现 A 的线人。\n\n### 本章互动设计\n- **场景 1**:A 去找朋友 C 借钱(展示 A 的压力和资源困境)\n- **场景 2**:A 与线人见面(B 在暗中跟踪)\n- **场景 3**:B 突然出现,打断 A 与线人的对话(冲突爆发)\n- **结尾钩子**:线人在逃跑时留下一句话:\"你妹妹还活着,但你们都找错方向了\"","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"角色状态快照(进度仪表盘新增区域)","type":"text"}]},{"type":"paragraph","content":[{"text":"在 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 中新增以下区域:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 🎭 角色状态快照(第 X 章后)\n\n| 角色 | 目标 | 情绪 | 压力 | 关键信息 | 下一步倾向 |\n|------|------|------|------|---------|-----------|\n| 主角 A | 找到妹妹 | 焦虑 8/10 | 时间压力 9/10 | 知道码头线索 | 去找线人 |\n| 警察 B | 破案 | 怀疑 6/10 | 职业压力 7/10 | 怀疑 A 隐瞒 | 跟踪 A |\n| 朋友 C | 帮助 A | 担心 5/10 | 无 | 不知道危险 | 借钱给 A |\n\n**关系网络变化**:\n- A ↔ B:信任度从 7/10 降至 4/10(B 开始怀疑 A)\n- A ↔ C:依赖度从 5/10 升至 8/10(A 需要 C 的帮助)\n\n**信息差地图**:\n- A 不知道:妹妹已被绑架、绑匪的真实身份\n- B 不知道:A 有线人、线人的身份\n- C 不知道:A 面临的真实危险","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"何时跳过角色推演","type":"text"}]},{"type":"paragraph","content":[{"text":"以下情况可以简化或跳过:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"快速模式","type":"text","marks":[{"type":"strong"}]},{"text":":只推演主角,其他角色用简化版(目标 + 压力 + 下一步)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"单一 POV 小说","type":"text","marks":[{"type":"strong"}]},{"text":":只推演 POV 角色,其他角色作为\"环境\"处理","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"过渡章节","type":"text","marks":[{"type":"strong"}]},{"text":":如果本章只是场景转换或时间跳跃,可以只更新状态不做完整推演","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"角色推演与人物档案的关系","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"人物档案","type":"text","marks":[{"type":"strong"}]},{"text":"(","type":"text"},{"text":"01-人物档案.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"):角色的静态设定(性格、背景、欲望、恐惧)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"角色状态推演","type":"text","marks":[{"type":"strong"}]},{"text":":角色的动态状态(当前目标、情绪、压力、选择)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"关系","type":"text","marks":[{"type":"strong"}]},{"text":":人物档案是\"角色是谁\",状态推演是\"角色现在想做什么\"","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"推演时,角色的行动必须符合人物档案中的性格和欲望-恐惧引擎。如果推演结果与人物档案冲突,优先检查人物档案是否需要更新。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"修改工作流","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户要求修改、重写或打磨某一章时,按以下流程执行:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第一步:问题诊断","type":"text"}]},{"type":"paragraph","content":[{"text":"读取目标章节,对照质量标准,找出具体问题。用一句话描述问题(如\"开头 300 字太拖,没有进冲突\")。","type":"text"}]},{"type":"paragraph","content":[{"text":"常用问题诊断清单:","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"开头问题","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"开头是否在 20% 内进入冲突?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否有\"钩子\"吸引读者继续看?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否有过多的背景/设定说明?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"节奏问题","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否有过多的\"summary\"(概述)而非\"scene\"(场景)?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否在某段停留太久?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"每章是否有明确的事件推进?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"对白问题","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"对白是否推进了剧情/关系?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"对白是否有多余的\"解释腔\"?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"人物说话是否符合性格?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"结尾问题","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"结尾是否有钩子?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否留下了悬念或转折?","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"一致性问题","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否与前文设定冲突?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"人物状态是否连贯?","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第二步:修改分级","type":"text"}]},{"type":"paragraph","content":[{"text":"根据问题类型和严重程度,判断修改级别:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"级别","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"问题类型","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改范围","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"预计耗时","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"轻度","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"错别字、语句不通顺、标点错误","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"局部修改","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"10-20 分钟","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"中度","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"某段对话不够自然、某个场景不够具体","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"单场景/单段落","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"30-60 分钟","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"重度","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"节奏问题、结构问题、开头钩子太弱","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"多场景或全章重写","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1-3 小时","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第三步:针对性修改","type":"text"}]},{"type":"paragraph","content":[{"text":"根据诊断结果,按问题类型选择参考文档:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"钩子太弱 → 参考 ","type":"text"},{"text":"hook-techniques.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/hook-techniques.md","title":null}}]},{"text":" 或按章节位置选用 ","type":"text"},{"text":"13-钩子映射表.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/13-%E9%92%A9%E5%AD%90%E6%98%A0%E5%B0%84%E8%A1%A8.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"节奏太慢 → 参考 ","type":"text"},{"text":"chapter-guide.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/chapter-guide.md","title":null}}]},{"text":" 的节奏部分,长篇参考 ","type":"text"},{"text":"11-叙事节奏框架.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/11-%E5%8F%99%E4%BA%8B%E8%8A%82%E5%A5%8F%E6%A1%86%E6%9E%B6.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"对白太水 → 参考 ","type":"text"},{"text":"dialogue-writing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/dialogue-writing.md","title":null}}]},{"text":",对人物声音一致性参考 ","type":"text"},{"text":"character-template-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/character-template-v2.md","title":null}}]},{"text":" 的声音指纹部分","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"场景空洞 → 参考 ","type":"text"},{"text":"scene-design-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/scene-design-v2.md","title":null}}]},{"text":"(含场景任务检查卡和价值测试)和 ","type":"text"},{"text":"content-expansion.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/content-expansion.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"AI 味重 → 参考 ","type":"text"},{"text":"ai-style-examples.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-examples.md","title":null}}]},{"text":" 和 ","type":"text"},{"text":"ai-style-by-genre.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-by-genre.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"整体重写 → 从 ","type":"text"},{"text":"chapter-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/chapter-template.md","title":null}}]},{"text":" 的场景拆分开始","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第四步:验证","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"重读修改后的段落,确认问题已解决","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运行字数检查:","type":"text"},{"text":"python3 scripts/check_chapter_wordcount.py \u003c章节文件路径>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运行 AI 味检测:","type":"text"},{"text":"python3 scripts/check_ai_style.py \u003c章节文件路径>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认字数没有严重缩水(轻度修改不应影响总字数)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"红灯项复核","type":"text","marks":[{"type":"strong"}]},{"text":":修改后仍须通过所有红灯项(变化原则、字数、钩子、人物一致)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"向用户确认","type":"text","marks":[{"type":"strong"}]},{"text":":\"修改完成,主要改动:[列出改动]。确认满意?\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"节奏检查","type":"text"}]},{"type":"paragraph","content":[{"text":"每写完 5-10 章后,运行健康检查脚本,生成报告:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/check_novel_health.py \u003c小说目录路径>","type":"text"}]},{"type":"paragraph","content":[{"text":"检查项:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"字数统计(平均、最高、最低、标准差)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"场景分布与连续重复警告","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"字数健康评分与节奏健康评分","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"报告模板:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"references/05-节奏健康报告.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/05-%E8%8A%82%E5%A5%8F%E5%81%A5%E5%BA%B7%E6%8A%A5%E5%91%8A.md","title":null}}]}]},{"type":"paragraph","content":[{"text":"触发时机:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每写完 5-10 章后","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户说\"检查节奏\"时","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Export","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户要求导出 EPUB 时:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认小说目录路径(用户已提供或在 novels/ 下查找)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运行导出脚本:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/generate_epub.py \u003c小说目录路径>","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"可选参数:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--author \u003c作者名>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 覆盖大纲中的作者","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"-o \u003c输出路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 指定输出文件位置","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--lang en","type":"text","marks":[{"type":"code_inline"}]},{"text":" 导出英文版(需要先通过翻译功能生成 ","type":"text"},{"text":"en/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 目录)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"告诉用户生成的 EPUB 文件路径","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"清洁导出说明:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"导出脚本只提取章节文件中的 ","type":"text"},{"text":"## 正文","type":"text","marks":[{"type":"code_inline"}]},{"text":" 部分","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果需要完全干净的章节文件(无任务卡、无复盘等),创建平行文件:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"写作版:","type":"text"},{"text":"第01章-标题.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(含任务卡、场景拆分、复盘)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"清洁版:","type":"text"},{"text":"第01章-标题-正文.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(仅正文)","type":"text"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"质量检查清单(详细版)","type":"text"}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"红绿灯是日常快速检查(4 项)。需要深入诊断时,展开以下 6 项量化指标。完整检查项列表见 ","type":"text"},{"text":"quality-checklist.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/quality-checklist.md","title":null}}]},{"text":"。","type":"text"}]}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"原则","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"量化指标","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"变化原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"≥1 个主角\"选择\"事件 + ≥1 个\"状态变化\"","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"悬念原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节内悬念提及≥1 + 新增悬念≥1","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"钩子原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"结尾含悬念触发词 + 结尾句不完整","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"展示原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"对话标签\u003c30% 对话段落 + 含动作描写对话≥50%","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"文风原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连续相同句式≤3 句 + 单段\"很 X\"形容词≤2 个 + 句长标准差>5","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景原则","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"有明确任务的场景≥3 + 场景间有信息差或状态变化","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"收尾期流程","type":"text"}]},{"type":"paragraph","content":[{"text":"进入收尾期后,按以下三步执行:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第一步:绿灯质量检查","type":"text"}]},{"type":"paragraph","content":[{"text":"逐项检查绿灯项(连载期仅做红绿灯,此处展开全部绿灯):","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"伏笔回收","type":"text","marks":[{"type":"strong"}]},{"text":":每条伏笔是否已回收或有明确的续作延后说明","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"节奏曲线","type":"text","marks":[{"type":"strong"}]},{"text":":整体紧张度是否符合设计的节奏曲线,对照 ","type":"text"},{"text":"11-叙事节奏框架.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/11-%E5%8F%99%E4%BA%8B%E8%8A%82%E5%A5%8F%E6%A1%86%E6%9E%B6.md","title":null}}]}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"人物弧线","type":"text","marks":[{"type":"strong"}]},{"text":":主角弧线是否完成(起点→倒退→突破→兑现),对照 ","type":"text"},{"text":"character-template-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/character-template-v2.md","title":null}}]}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"时间线连贯","type":"text","marks":[{"type":"strong"}]},{"text":":季节/天气/节日是否前后一致,运行 ","type":"text"},{"text":"python3 scripts/check_timeline.py \u003c小说目录路径>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第二步:完稿润色","type":"text"}]},{"type":"paragraph","content":[{"text":"第一轮:通读全书","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"从第 1 章读到最后一章,记录:节奏突变处、文风不统一处、前后矛盾处","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"重点检查:前 3 章是否足够抓人、中点是否有重大转折、结局是否有兑现","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"第二轮:统一文风","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运行 ","type":"text"},{"text":"python3 scripts/check_ai_style.py --all \u003c小说目录路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 批量检测","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"标记重度 AI 味章节,优先重写","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"运行 ","type":"text"},{"text":"python3 scripts/character_tracker.py \u003c小说目录路径>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 检查人物一致性","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"标记声音突变处,对齐人物声音指纹","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"第三轮:细节补强","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"对照 ","type":"text"},{"text":"ai-style-examples.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ai-style-examples.md","title":null}}]},{"text":" 改写残留 AI 味","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"对照 ","type":"text"},{"text":"style-polishing.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/style-polishing.md","title":null}}]},{"text":" 打磨措辞","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"补充感官细节(视觉/听觉/触觉/嗅觉/味觉至少覆盖 3 种)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第三步:出版门控","type":"text"}]},{"type":"paragraph","content":[{"text":"通过出版门控检查(见下方出版门控章节),确认达到目标级别后即可交付。","type":"text"}]},{"type":"paragraph","content":[{"text":"版本管理建议","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"初稿","type":"text","marks":[{"type":"strong"}]},{"text":":完成后以 ","type":"text"},{"text":"v1-draft","type":"text","marks":[{"type":"code_inline"}]},{"text":" 标记,运行全量检查","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"二稿","type":"text","marks":[{"type":"strong"}]},{"text":":润色后以 ","type":"text"},{"text":"v2-polished","type":"text","marks":[{"type":"code_inline"}]},{"text":" 标记,重点修复 AI 味和人物一致性","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"终稿","type":"text","marks":[{"type":"strong"}]},{"text":":通过出版门控后以 ","type":"text"},{"text":"v3-final","type":"text","marks":[{"type":"code_inline"}]},{"text":" 标记,可导出 EPUB","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"续作钩子决策","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"只有用户明确要求时才保留续作钩子","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"续作钩子不得以牺牲本书完整性为代价","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"预留续作时,核心悬念必须回收,只留新悬念苗头","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"多线叙事写作循环","type":"text"}]},{"type":"paragraph","content":[{"text":"当小说包含 3 条以上叙事线(多 POV、群像)时,连载期写作循环需增加以下步骤:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"线切换时机决策","type":"text"}]},{"type":"paragraph","content":[{"text":"每章写完前,决定下一章写哪条线:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"因素","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"决策规则","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"悬念紧迫度","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"有🔴过期悬念的线优先","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"读者期待度","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"上一条线刚抛出大悬念→切到另一条线保温","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"信息差管理","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"A 线刚揭示的关键信息,B 线角色尚不知→切 B 线制造戏剧反讽","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节节奏","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"连续 2 章高强度同线→必须切换到另线喘息","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"时间同步","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"两条线事件同时发生时→交替推进","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"POV 转换规则","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"每章单一 POV","type":"text","marks":[{"type":"strong"}]},{"text":":默认一章一个视角人物,不在章内切换","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"换章即换线","type":"text","marks":[{"type":"strong"}]},{"text":":章与章之间切换线,用进度仪表盘记录当前线","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"换线保温","type":"text","marks":[{"type":"strong"}]},{"text":":切到新线的前 200 字内,必须提及该线上次的关键事件(读者可能忘了)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"跨线交汇","type":"text","marks":[{"type":"strong"}]},{"text":":两条线的角色终于相遇时,选择读者更关心的 POV 来写,另一线用事后回溯","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"进度仪表盘多线扩展","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 📍 当前位置\n- 正在写:第___章([线名]线)\n- 当前主线:[线名]\n- 各线进度:\n | 叙事线 | 最新章节 | 活跃悬念 | 状态 |\n |--------|---------|---------|------|\n | A 线 | 第 10 章 | 2 个 | 🟢 正常 |\n | B 线 | 第 8 章 | 3 个 | 🔴 1 个过期 |\n | C 线 | 第 9 章 | 1 个 | 🟡 需推进 |","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"详细参考","type":"text"}]},{"type":"paragraph","content":[{"text":"references/03-多线管理.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/03-%E5%A4%9A%E7%BA%BF%E7%AE%A1%E7%90%86.md","title":null}}]},{"text":"(多线叙事管理模板)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"中断恢复协议","type":"text"}]},{"type":"paragraph","content":[{"text":"长期中断后返回写作时(超过 3 天未写),按以下流程恢复:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"人工模式恢复","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"读取仪表盘","type":"text","marks":[{"type":"strong"}]},{"text":":获取当前进度和悬念状态","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"校验仪表盘","type":"text","marks":[{"type":"strong"}]},{"text":":读最近 3 章摘要,检查仪表盘信息是否与实际一致","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成续写简报","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 续写简报\n\n**当前进度**:第 X 章已写,共 Y 章\n**当前阶段**:连载期/收尾期\n**各线状态**:[线名]线进度、悬念\n**未回收伏笔**:列出 ID 和首次出现章节\n**过期悬念**:🔴列出所有需立即处理的\n**人物当前状态**:主角位置/情绪/目标、关键关系\n**下章任务**:目标/阻碍/钩子\n\n**一致性校验**:\n- [ ] 仪表盘人物状态与最近章节匹配\n- [ ] 仪表盘悬念状态与追踪表匹配\n- [ ] 仪表盘章节数与实际文件数匹配","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"向用户确认","type":"text","marks":[{"type":"strong"}]},{"text":":\"续写简报已生成,确认信息正确后开始写第 X 章\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"自动驾驶模式恢复","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自动执行上述 1-3 步","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"发现仪表盘过期信息时,自动从章节文件重建","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"不等待确认,直接开始写作(但首章输出后附简报)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"从任意章节恢复","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户要求跳到某章重写或从断点恢复时:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"读取目标章节及前后各 1 章","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"更新仪表盘中的\"当前位置\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"检查该章到最新章之间是否有悬念或伏笔依赖","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如有依赖,提醒用户:\"重写第 X 章可能影响第 Y 章中对[Z 悬念]的推进\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"断路器恢复协议(自动驾驶)","type":"text"}]},{"type":"paragraph","content":[{"text":"当连续失败熔断触发后:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"输出诊断报告:哪几章失败、具体红灯项、可能原因","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"暂停等待人工","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"人工确认后,提供恢复选项:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"选项 A","type":"text","marks":[{"type":"strong"}]},{"text":":从失败章节重写(重置重试计数器)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"选项 B","type":"text","marks":[{"type":"strong"}]},{"text":":跳过失败章节,标注问题后继续下一章","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"选项 C","type":"text","marks":[{"type":"strong"}]},{"text":":降级为人工模式,后续章节手动确认","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"人工选择后恢复写作,重置连续失败计数器","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Completion","type":"text"}]},{"type":"paragraph","content":[{"text":"在收尾期时,必须额外检查:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主线悬念是否回收","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"主角弧线是否完成","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"设定规则是否前后一致","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"是否存在遗失角色、断裂线索、无兑现伏笔","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"是否需要留下续作钩子;只有用户要时才保留","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"终稿收尾方式参考 ","type":"text"},{"text":"ending-design.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/ending-design.md","title":null}}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"出版门控","type":"text"}]},{"type":"paragraph","content":[{"text":"在进入出版或发布前,按以下流程做系统性验收:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"倒序检查法","type":"text"}]},{"type":"paragraph","content":[{"text":"从结局往前推,验证每章是否服务结局:","type":"text"}]},{"type":"paragraph","content":[{"text":"结局要求 → 倒数第 3 章 → 倒数第 2 章 → 倒数第 1 章 → 结局","type":"text","marks":[{"type":"strong"}]}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"结局是否兑现了大纲承诺?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"每章的进展是否导向结局?","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"是否有偏离结局的章节?","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"常见烂尾模式预警","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"烂尾模式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"描述","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"检查项","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"机械降神","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"结局靠突然出现的力量解决","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"结局的解决方案是否在前文有铺垫?","type":"text"}]}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"主角光环","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"主角轻易获胜,无代价","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"主角是否付出了合理的代价?","type":"text"}]}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"支线烂尾","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"支线挖坑不填","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"每条支线是否都有回收?","type":"text"}]}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"匆忙收场","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"结尾突然,像赶工","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"结局是否有足够的篇幅?","type":"text"}]}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"开放结局滥用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"所有问题都没回答","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"核心问题是否都有答案?","type":"text"}]}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"反派弱化","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"反派结局时突然变弱","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"反派是否保持了一致性?","type":"text"}]}]}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"出版分级标准","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"级别","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"要求","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"入门级","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"字数达标、无明显错误、主线完整、人物一致","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"专业级","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"入门级 + 无逻辑漏洞、伏笔基本回收、节奏良好","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"出版级","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"专业级 + 所有伏笔回收、主题清晰、人物有成长弧线","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"详细检查清单:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"references/06-出版门控.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/06-%E5%87%BA%E7%89%88%E9%97%A8%E6%8E%A7.md","title":null}}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"叙事节奏曲线","type":"text"}]},{"type":"paragraph","content":[{"text":"设计全书的紧张程度起伏,确保节奏有峰有谷,避免越写越平。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"选择曲线类型","type":"text"}]},{"type":"paragraph","content":[{"text":"根据你的故事类型,选择一种节奏曲线:","type":"text"}]},{"type":"paragraph","content":[{"text":"A. 递进型","type":"text","marks":[{"type":"strong"}]},{"text":" — 紧张度持续上升 适用:升级流、复仇流、打怪升级","type":"text"}]},{"type":"paragraph","content":[{"text":"B. 波浪型","type":"text","marks":[{"type":"strong"}]},{"text":" — 紧张度波浪起伏 适用:悬疑、探险、探险解密","type":"text"}]},{"type":"paragraph","content":[{"text":"C. 高原型","type":"text","marks":[{"type":"strong"}]},{"text":" — 紧张度保持中高水平 适用:都市、职场、情感","type":"text"}]},{"type":"paragraph","content":[{"text":"D. 反转型","type":"text","marks":[{"type":"strong"}]},{"text":" — 开头紧张,结局更紧张 适用:宫斗、权谋、阴谋","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"关键节点","type":"text"}]},{"type":"paragraph","content":[{"text":"每个故事必须有这些关键节点:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"节点","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"位置","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"紧张度","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"必须元素","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"开篇钩子","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"第 1 章","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★☆","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"危机/悬念/目标","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"第一个小高潮","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"前 10%","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★☆","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"小胜利或小失败","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"中点转折","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"50%","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★★★","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"认知翻转/重大失败","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"中段升级","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"60-70%","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★★☆","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"代价增大","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"倒数第二个高潮","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"85%","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★★★","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"终极选择","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"结局","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"100%","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"★★★★★","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"终极对决/终极选择","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"曲线跟踪","type":"text"}]},{"type":"paragraph","content":[{"text":"每写完 5 章,对照设计检查紧张度:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"紧张度低于设计 → 需要加强","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"紧张度高于设计 → 可能太快,需要喘息","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"详细模板:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"references/07-叙事节奏曲线.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/07-%E5%8F%99%E4%BA%8B%E8%8A%82%E5%A5%8F%E6%9B%B2%E7%BA%BF.md","title":null}}]},{"text":"(基础版)或 ","type":"text"},{"text":"references/11-叙事节奏框架.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/11-%E5%8F%99%E4%BA%8B%E8%8A%82%E5%A5%8F%E6%A1%86%E6%9E%B6.md","title":null}}]},{"text":"(推荐,含三层体系和 5 种题材模板)","type":"text"}]},{"type":"paragraph","content":[{"text":"喘息章设计:","type":"text","marks":[{"type":"strong"}]},{"text":" 如果连续 3 章以上高强度,参考 ","type":"text"},{"text":"references/12-喘息机制.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/12-%E5%96%98%E6%81%AF%E6%9C%BA%E5%88%B6.md","title":null}}]},{"text":" 设计喘息章(20% 余波 +60% 收获/关系 +20% 新威胁)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"人机协作","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户以人机混合方式写作时,按以下指南执行:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"协作分工","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"内容类型","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人类写","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"AI 写","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"说明","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"核心设定","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人物性格、核心冲突、底线","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"关键情节","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"重大转折、结局设计","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"对白风格","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人物语言特点","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"具体场景","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"场景描写、环境渲染","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"过渡衔接","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节之间的过渡","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"扩写","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"已有大纲的详细内容展开","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"✅","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph"}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"明确指出问题所在","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"上下文传递","type":"text"}]},{"type":"paragraph","content":[{"text":"每次让 AI 继续写之前,必须传递上下文:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"**当前进度**\n- 章节:第 X 章\n- 当前场景:...\n- 主要人物:...\n- 上文关键事件:...\n\n**写作要求**\n- 继续写:...(具体说明要写什么)\n- 风格参考:...(文风要求)\n- 注意:...(特别注意事项)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"交接协议","type":"text"}]},{"type":"paragraph","content":[{"text":"人类修改完一段后,告诉 AI:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"**人类修改记录**\n- 修改位置:第 X 章 第 Y 段\n- 修改原因:...\n- 继续要求:...\n\n**上一段结尾**\n\"...\"(引用上段结尾,让 AI 接上)","type":"text"}]},{"type":"paragraph","content":[{"text":"快速续写模式(默认):","type":"text","marks":[{"type":"strong"}]},{"text":" 用户只需说\"继续写\",AI 自动从 ","type":"text"},{"text":"99-进度仪表盘.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 提取上下文,无需手动填写交接格式。","type":"text"}]},{"type":"paragraph","content":[{"text":"详细模板:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"references/08-人机协作-v2.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/08-%E4%BA%BA%E6%9C%BA%E5%8D%8F%E4%BD%9C-v2.md","title":null}}]},{"text":"(推荐,含快速续写和信息提取协议)或 ","type":"text"},{"text":"references/08-人机协作.md","type":"text","marks":[{"type":"link","attrs":{"href":"references/08-%E4%BA%BA%E6%9C%BA%E5%8D%8F%E4%BD%9C.md","title":null}}]},{"text":"(v1 基础版)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"异常处理","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"异常","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人工模式","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动驾驶模式","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"指令矛盾","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"优先具体指令,暂停确认","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"以最新指令为准","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"项目不存在","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"引导进入策划期","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"直接启动策划流程","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"仪表盘缺失","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动从章节重建","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"同左","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节损坏","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"回退上一章,提醒检查","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"跳过并标注","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"字数不达标","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"标注差距 + 扩写建议","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动扩写 1 次","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"长期中断后返回","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"生成续写简报 + 校验仪表盘 + 确认(见中断恢复协议)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动生成简报 + 重建仪表盘 + 直接继续(见中断恢复协议)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"脚本失败","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用 quality-checklist.md 自检","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"同左","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人物设定冲突","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"以最新文件为准,提醒确认","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"以大纲为权威","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"断路器触发","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"—","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"强制暂停→输出诊断报告→提供 3 个恢复选项(见断路器恢复协议)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"多线叙事线偏移","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"提醒用户当前在哪条线,确认后切换","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动选择最紧迫的线继续","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"脚本工具","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"脚本","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用途","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"使用方式","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"check_chapter_wordcount.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"章节字数检查","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/check_chapter_wordcount.py \u003c文件或--all 目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"check_ai_style.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"AI 味检测(9 种症状)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/check_ai_style.py \u003c文件或--all 目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"check_novel_health.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"小说健康体检(字数 + 节奏)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/check_novel_health.py \u003c目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"check_timeline.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"时间线一致性检查","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/check_timeline.py \u003c目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"character_tracker.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"人物一致性检查","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/character_tracker.py \u003c目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"generate_epub.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"EPUB 导出","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/generate_epub.py \u003c目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"translate_to_english.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"翻译成英文","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"python3 scripts/translate_to_english.py \u003c目录>","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Translation","type":"text"}]},{"type":"paragraph","content":[{"text":"当用户要求翻译成英文时执行:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"执行流程","type":"text"}]},{"type":"paragraph","content":[{"text":"第一步:准备阶段","type":"text","marks":[{"type":"strong"}]}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认小说目录和翻译范围(全本 / 部分章节)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"读取上下文文件:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"00-大纲.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 书名、作者、类型、简介","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"01-人物档案.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 人物信息","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"02-世界观与伏笔.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" → 世界观要点","type":"text"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"第二步:生成术语表","type":"text","marks":[{"type":"strong"}]},{"text":" 3. 分析小说内容,提取需要统一的术语:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"角色人名及拼音","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"修炼体系/境界名称","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"武器、法宝、门派名称","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"中文特有词汇(功夫、气功、灵气等)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"量词和时间表达","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"第三步:并行翻译","type":"text","marks":[{"type":"strong"}]},{"text":" 4. 将章节分成多个批次(每批 2-3 章,相邻章节在同一批次) 5. 为每个批次创建一个 subagent,并行翻译 6. 每个 subagent 携带:小说信息 + 术语表 + 翻译规则","type":"text"}]},{"type":"paragraph","content":[{"text":"第四步:最终校对","type":"text","marks":[{"type":"strong"}]},{"text":" 7. 所有翻译完成后,派一个 subagent 做全局校对:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"检查术语一致性","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"检查人名一致性","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"检查剧情衔接","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"修正发现的问题","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"第五步:保存结果","type":"text","marks":[{"type":"strong"}]},{"text":" 8. 汇总所有翻译结果,写入 ","type":"text"},{"text":"en/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 目录:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Chapter-001.md","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"Chapter-002.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 等","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"术语表格式","type":"text"}]},{"type":"paragraph","content":[{"text":"生成包含以下分类的统一术语表,翻译时严格遵守:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"人物名称:","type":"text"},{"text":"[中文名] → [Pinyin]","type":"text","marks":[{"type":"code_inline"}]},{"text":"(如 张三 → Zhang San)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"修炼体系/境界:","type":"text"},{"text":"[中文] → [English]","type":"text","marks":[{"type":"code_inline"}]},{"text":"(如 筑基 → Foundation Building)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"门派与武器:","type":"text"},{"text":"[中文] → [Pinyin or English]","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"中文特有表达:","type":"text"},{"text":"盏茶 → the time it takes to drink a cup of tea","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"并行翻译","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"将章节分批(每批 2-3 章,相邻章节在同一批次)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"为每批创建 subagent 并行翻译,携带:小说信息 + 术语表 + 翻译规则(保持叙事节奏、统一译名、对话自然流畅)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"全部完成后派 subagent 做全局校对(术语一致性 + 人名一致性 + 剧情衔接 + 风格统一)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"结果写入 ","type":"text"},{"text":"en/Chapter-XXX.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"英文版导出","type":"text"}]},{"type":"paragraph","content":[{"text":"英文版也支持 EPUB 导出:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"python3 scripts/generate_epub.py \u003c小说目录路径> --lang en","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"chinese-novelist-skill","author":"@skillopedia","source":{"stars":5,"repo_name":"chinese-novelist-skill","origin_url":"https://github.com/zh30/chinese-novelist-skill/blob/HEAD/SKILL.md","repo_owner":"zh30","body_sha256":"986821a019847af48e2ce8b27bc1cbfaec343912ebcd41727c05ed373e828402","cluster_key":"ea1d83d2a85feb821eede19ccdbd4f4c0e11161f4dd91461f74ffb03dfef5283","clean_bundle":{"format":"clean-skill-bundle-v1","source":"zh30/chinese-novelist-skill/SKILL.md","attachments":[{"id":"5494bbb3-c5a2-5cc9-b34b-ade7a4c5e950","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5494bbb3-c5a2-5cc9-b34b-ade7a4c5e950/attachment.json","path":".claude/settings.local.json","size":111,"sha256":"7fc6d224fa8a50b4ff10b6a7bcda07e1f7b954526da297a3b400b2c673fe11c0","contentType":"application/json; charset=utf-8"},{"id":"402ec6b0-87df-522e-8d43-2d5d226ae95a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/402ec6b0-87df-522e-8d43-2d5d226ae95a/attachment.tsv","path":".claude/skills/auto-optimize-results.tsv","size":1207,"sha256":"1d19998b526fba7b974eb7581b25a1e9f8774b0514b6678332e4d25b2ea5fde8","contentType":"text/tab-separated-values"},{"id":"99e1840a-dce7-50bc-8714-bf8e2e94af05","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/99e1840a-dce7-50bc-8714-bf8e2e94af05/attachment","path":".gitignore","size":29,"sha256":"60c9bdd905fcf45ac485c680d32e9773962cf061b6f041dcddd033911558a672","contentType":"text/plain; charset=utf-8"},{"id":"9c70ddb0-a317-518c-b742-28cb1dcbc43a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9c70ddb0-a317-518c-b742-28cb1dcbc43a/attachment.md","path":"AGENTS.md","size":4590,"sha256":"c40b70f8cc9a43f7b084b8d24448afae6ac7631ffb7591577a9a09ce2abd0a96","contentType":"text/markdown; charset=utf-8"},{"id":"1cba747c-16c6-59a0-a5f1-56b93bbb7529","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1cba747c-16c6-59a0-a5f1-56b93bbb7529/attachment.md","path":"CHANGELOG.md","size":11263,"sha256":"bc32ba18a69129b03760ad16aa3dcfdf52445b3ecaf3fb5a525f98ee8187be6f","contentType":"text/markdown; charset=utf-8"},{"id":"de9f15c3-733b-52d6-b1c4-fe8fce402843","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/de9f15c3-733b-52d6-b1c4-fe8fce402843/attachment.md","path":"CLAUDE.md","size":4609,"sha256":"d7412cc9f154977c0388d1d857a4f02c17945d4d34d896f3b43c92ec87b16dce","contentType":"text/markdown; charset=utf-8"},{"id":"83bcc567-8d9f-5282-9a0d-9275dab349e7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/83bcc567-8d9f-5282-9a0d-9275dab349e7/attachment.md","path":"FILE_INDEX.md","size":14061,"sha256":"173eeaec666155f2178c78a355098e13d5f05ae429a10e8fe7edbb407ac67940","contentType":"text/markdown; charset=utf-8"},{"id":"0e61e7ab-0eac-5cf2-99d5-ba3dc175445d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0e61e7ab-0eac-5cf2-99d5-ba3dc175445d/attachment.md","path":"OPTIMIZATION_PLAN.md","size":14424,"sha256":"3ae5aca2f6fbdcf21ff772be53b32fbdc3d817d54bca489c121b6294f37d8715","contentType":"text/markdown; charset=utf-8"},{"id":"8cd3a816-9082-5f9d-9056-33ce55f6faab","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8cd3a816-9082-5f9d-9056-33ce55f6faab/attachment.md","path":"QUICK_START.md","size":6437,"sha256":"2c96b143923e94f79688bd73ed41700d49bca053a30f4e50d8646543389b7eff","contentType":"text/markdown; charset=utf-8"},{"id":"164d6659-94cb-537e-ad33-7b531cc68127","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/164d6659-94cb-537e-ad33-7b531cc68127/attachment.md","path":"README.md","size":16028,"sha256":"fa750b7df0057d9f7e31bb7fc2a00d93ede5dc806bee01d8a193af6f7947971a","contentType":"text/markdown; charset=utf-8"},{"id":"fae826a1-be78-575d-b5f6-e5168483b179","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fae826a1-be78-575d-b5f6-e5168483b179/attachment.md","path":"WORKFLOW_GUIDE.md","size":24991,"sha256":"c2d3828ac91b3b092a8e36aa6063013461448651b20b8f41f3ea153dbcf0989f","contentType":"text/markdown; charset=utf-8"},{"id":"140a6d15-8649-5907-834f-b028bd391fa5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/140a6d15-8649-5907-834f-b028bd391fa5/attachment.png","path":"assets/beginning-01.png","size":102699,"sha256":"53ac6dc450d54242acb287f9524d0d764055c0e7f924fb37b41e47cbcd2817ee","contentType":"image/png"},{"id":"15e6409e-b42d-5e3c-b83a-b494056a17b0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/15e6409e-b42d-5e3c-b83a-b494056a17b0/attachment.png","path":"assets/ending-01.png","size":93987,"sha256":"2a716bd049d00e02f107105db718220956292538372f6d890f1bdff84b20a3d8","contentType":"image/png"},{"id":"6ee4fcb0-ad12-5895-94f9-58e4dd9af614","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6ee4fcb0-ad12-5895-94f9-58e4dd9af614/attachment.png","path":"assets/ending-02.png","size":35768,"sha256":"2422f334cfbda71d4f1ff9813daa14b74d0017c71822e923fc4940cb4fcf95a8","contentType":"image/png"},{"id":"3aff8ebb-9baa-5c0b-b354-dc5b52e4f23b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3aff8ebb-9baa-5c0b-b354-dc5b52e4f23b/attachment.md","path":"docs/plans/2026-03-09-english-translation-design.md","size":2877,"sha256":"07ad0ccde160f82cec1d771ef5d7ef31f3271943c27a1160db01ebdec81a419b","contentType":"text/markdown; charset=utf-8"},{"id":"98ba0277-1ba5-5168-8db9-af55b033add1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/98ba0277-1ba5-5168-8db9-af55b033add1/attachment.md","path":"docs/plans/2026-03-09-english-translation-implementation.md","size":14535,"sha256":"5bc81ab285d17385b726938a35f7477e05523a39fa1fc20cb0cea5ecc2d76eee","contentType":"text/markdown; charset=utf-8"},{"id":"c4ead1ae-a610-5a56-af0b-8f6156fd7a0a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c4ead1ae-a610-5a56-af0b-8f6156fd7a0a/attachment.md","path":"docs/plans/2026-03-20-human-ai-collaboration-design.md","size":2231,"sha256":"a277995bce64575cd8345d33b668b78e8a3dadcd838fb549a5cdba56da0fdcbd","contentType":"text/markdown; charset=utf-8"},{"id":"fb77458f-aecf-5e58-982d-dd388fa52315","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fb77458f-aecf-5e58-982d-dd388fa52315/attachment.md","path":"docs/plans/2026-03-20-human-ai-collaboration-implementation.md","size":4441,"sha256":"5d5be1aac3fc2349b563750e359c572e5d0f497097e78c2d15baf4e45e693a0f","contentType":"text/markdown; charset=utf-8"},{"id":"50b1ce31-902f-5d21-ba8c-81596c0ae507","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/50b1ce31-902f-5d21-ba8c-81596c0ae507/attachment.md","path":"docs/plans/2026-03-20-multiline-narrative-design.md","size":4730,"sha256":"cd051553f0778b45f93c4affc133a4646a1277265771de9b678934663a9022a9","contentType":"text/markdown; charset=utf-8"},{"id":"14336d49-dc91-545a-9eeb-2fd4137fbbaa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/14336d49-dc91-545a-9eeb-2fd4137fbbaa/attachment.md","path":"docs/plans/2026-03-20-multiline-narrative-implementation.md","size":5808,"sha256":"2968806e797d28b57048a283147069de0ffb1adfe9e3331070fbe2935a985919","contentType":"text/markdown; charset=utf-8"},{"id":"59d3a9fd-1f4e-5d90-b213-2e8ce2072375","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/59d3a9fd-1f4e-5d90-b213-2e8ce2072375/attachment.md","path":"docs/plans/2026-03-20-novel-health-check-design.md","size":2778,"sha256":"53519f033f0ed7d50b7a5bd5a2cddd988ef85462ecb8e5760e84ae162b77e173","contentType":"text/markdown; charset=utf-8"},{"id":"41f817be-b84e-52fe-99f4-9f9450f6ee31","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/41f817be-b84e-52fe-99f4-9f9450f6ee31/attachment.md","path":"docs/plans/2026-03-20-novel-health-check-implementation.md","size":10507,"sha256":"41de61136e05827e593d86ce5ebcda7e538d8ac3c9b6c959b99bb249215e16e6","contentType":"text/markdown; charset=utf-8"},{"id":"07c0ed2d-05c3-5f8a-b4ca-2077d214c8e3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/07c0ed2d-05c3-5f8a-b4ca-2077d214c8e3/attachment.md","path":"docs/plans/2026-03-20-publishing-gate-design.md","size":3530,"sha256":"eccb70aa836a750cda31ac2ed9d2a104364f4c82f8dd0caa7b8e4f99785f2dfb","contentType":"text/markdown; charset=utf-8"},{"id":"3ac36061-9b0b-58f6-9f93-e81feede8c4b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3ac36061-9b0b-58f6-9f93-e81feede8c4b/attachment.md","path":"docs/plans/2026-03-20-publishing-gate-implementation.md","size":6035,"sha256":"af3719fcd205bf6de1f61833b75066ad000b88d22dbd0b6277a55fd70ca83c34","contentType":"text/markdown; charset=utf-8"},{"id":"13732e30-fcb3-57a9-948c-53d98bdc9b58","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/13732e30-fcb3-57a9-948c-53d98bdc9b58/attachment.md","path":"docs/plans/2026-03-20-quality-standards-design.md","size":3937,"sha256":"0e6d2a516f910f0834a38cb8c8af0289dc797856fce77e5adccc5f74230bdc7c","contentType":"text/markdown; charset=utf-8"},{"id":"33b8e664-d457-5eee-ba29-dfce35235341","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/33b8e664-d457-5eee-ba29-dfce35235341/attachment.md","path":"docs/plans/2026-03-20-quality-standards-implementation.md","size":4321,"sha256":"9b27bef1ac1d343de934c76a3a2145ee6509fc7570b5c825fc82fe88f7f4a91a","contentType":"text/markdown; charset=utf-8"},{"id":"ac0ae0c6-e5ac-565f-9611-b8eb30127678","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ac0ae0c6-e5ac-565f-9611-b8eb30127678/attachment.md","path":"docs/plans/2026-03-20-research-material-design.md","size":3570,"sha256":"0518e007a7a67e99e8841c87963c25c0f14e31c847465e083459e769a80f7a81","contentType":"text/markdown; charset=utf-8"},{"id":"91a77594-49d5-52f9-8476-4d6ad3fbe006","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/91a77594-49d5-52f9-8476-4d6ad3fbe006/attachment.md","path":"docs/plans/2026-03-20-research-material-implementation.md","size":5336,"sha256":"a79ba0697480874d90e3e0fc7e973e211071705edeeaf0f51d057cb7511fadd2","contentType":"text/markdown; charset=utf-8"},{"id":"ad944c95-fac7-53ca-8f71-b7792d0c4343","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ad944c95-fac7-53ca-8f71-b7792d0c4343/attachment.md","path":"docs/plans/2026-03-20-revision-workflow-design.md","size":2792,"sha256":"b16a17058afdb63e1176efcb280799276a99b6c6b30456963a4b7fa17d77ec89","contentType":"text/markdown; charset=utf-8"},{"id":"aa5be28a-7fe4-5472-94a1-2b090e04f9aa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aa5be28a-7fe4-5472-94a1-2b090e04f9aa/attachment.md","path":"docs/plans/2026-03-20-revision-workflow-implementation.md","size":3600,"sha256":"35a333af464bd0c1a31a80a3770728f25d7a5f12f85aa1dd1ecd16faebd36195","contentType":"text/markdown; charset=utf-8"},{"id":"8e5adcc0-5fb5-58aa-b3cb-63619940cd5e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8e5adcc0-5fb5-58aa-b3cb-63619940cd5e/attachment.md","path":"docs/plans/2026-03-20-rhythm-alert-design.md","size":4409,"sha256":"b921d0e2866752b82ef8bb8675d1301b61c110be1586826c1d877f551458e3b8","contentType":"text/markdown; charset=utf-8"},{"id":"08147969-93db-5acd-8527-e184ce9c6850","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/08147969-93db-5acd-8527-e184ce9c6850/attachment.md","path":"docs/plans/2026-03-20-rhythm-alert-implementation.md","size":10862,"sha256":"452e69762c6f0ebed5513c92ee250ca4f70c6c99b5fa90e871bd500b87cf3c8a","contentType":"text/markdown; charset=utf-8"},{"id":"242f247a-0144-544a-9bdf-1296bf617dc7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/242f247a-0144-544a-9bdf-1296bf617dc7/attachment.md","path":"docs/plans/2026-03-20-rhythm-curve-design.md","size":2410,"sha256":"ef2d45687f716eb63f2390f29874c96d6d5d09dca116ad302c50b3d8f46d500c","contentType":"text/markdown; charset=utf-8"},{"id":"d23b73a9-dd97-5b9d-84f5-25047216b18a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d23b73a9-dd97-5b9d-84f5-25047216b18a/attachment.md","path":"docs/plans/2026-03-20-rhythm-curve-implementation.md","size":5544,"sha256":"e60c5c35c98b0d94feb92236f14f98b557b217d5467af70b68c1f2a8db49b104","contentType":"text/markdown; charset=utf-8"},{"id":"fb19a70a-b276-523b-a399-8325fc6be266","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fb19a70a-b276-523b-a399-8325fc6be266/attachment.md","path":"docs/plans/2026-03-20-story-engine-design.md","size":2557,"sha256":"0e1c7b19a9c837e9f751b67da3ffd9f020dac79655beb8d1acdfb9eb6aefcd0a","contentType":"text/markdown; charset=utf-8"},{"id":"009cefa3-9197-5d4b-9706-1bc3836d1c53","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/009cefa3-9197-5d4b-9706-1bc3836d1c53/attachment.md","path":"docs/plans/2026-03-20-story-engine-implementation.md","size":6877,"sha256":"640f6a0b959e4e8b366f78e029724f87b3da86dfd12ca8f60ec053596bcafb22","contentType":"text/markdown; charset=utf-8"},{"id":"1551d73b-d564-57b0-86ff-5bb7211e8ba9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1551d73b-d564-57b0-86ff-5bb7211e8ba9/attachment.md","path":"docs/plans/2026-03-20-writing-modes-design.md","size":3008,"sha256":"9b56d19460f960d242a85d04b112fb1df864450cc2214bcb04e3fb4c64e61a91","contentType":"text/markdown; charset=utf-8"},{"id":"c59ed4c4-7b97-550e-8490-6606e522ff78","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c59ed4c4-7b97-550e-8490-6606e522ff78/attachment.md","path":"docs/plans/2026-03-20-writing-modes-implementation.md","size":4208,"sha256":"140bc906b249df72315120031b6617d90ce44b39f4c7960891d122344834f84a","contentType":"text/markdown; charset=utf-8"},{"id":"db6eff8f-6bb6-55d5-baa2-f3cf4d8c89f1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/db6eff8f-6bb6-55d5-baa2-f3cf4d8c89f1/attachment.html","path":"optimization-result.html","size":11406,"sha256":"be73f4fa4dc758b2422de4bced3ec2211d356cbd2b82f67e824b0d830232a266","contentType":"text/html; charset=utf-8"},{"id":"883dd5d6-78bf-500f-adf3-f4486a86d2d9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/883dd5d6-78bf-500f-adf3-f4486a86d2d9/attachment.png","path":"optimization-result.png","size":216660,"sha256":"ce5aa45d72f86086462357a9e3bf74ead7257ba32afb1fe6530d546f4f7c0133","contentType":"image/png"},{"id":"0cb006d2-9476-5792-aee5-8bce3c75a60a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0cb006d2-9476-5792-aee5-8bce3c75a60a/attachment.md","path":"references/03-多线管理.md","size":3614,"sha256":"00bc12a1243ca19b49d46a85d9f9c0a7a2be6463b0aace884ce2da81e7e18922","contentType":"text/markdown; charset=utf-8"},{"id":"da7ddc63-1c03-5eed-a5cc-9a217bd66b3b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/da7ddc63-1c03-5eed-a5cc-9a217bd66b3b/attachment.md","path":"references/04-素材积累.md","size":1892,"sha256":"8060abd8fee7da2aa256a57ba89c4f76a2081277a7fa3df724aaab892f28ab1b","contentType":"text/markdown; charset=utf-8"},{"id":"c17b363a-2493-5ad3-945a-8436f8707dae","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c17b363a-2493-5ad3-945a-8436f8707dae/attachment.md","path":"references/05-节奏健康报告.md","size":2191,"sha256":"cd116847b9a9da1ad40c33693118bb8dc079d68cbec47a5d21f0454ee00cd2b6","contentType":"text/markdown; charset=utf-8"},{"id":"f0574ba2-7975-5934-aac9-04367c074491","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f0574ba2-7975-5934-aac9-04367c074491/attachment.md","path":"references/06-出版门控.md","size":2542,"sha256":"013feaa435a4a40ee864298042f0b23a31989a326179b2bc5c2922301a977f05","contentType":"text/markdown; charset=utf-8"},{"id":"670a69da-2c36-5e72-a1f2-5e5a9f95ccf2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/670a69da-2c36-5e72-a1f2-5e5a9f95ccf2/attachment.md","path":"references/07-叙事节奏曲线.md","size":2453,"sha256":"e7368364b5a8613146a1dfe9a6fc87acf08847f6c9152d713ede14e3ec52265e","contentType":"text/markdown; charset=utf-8"},{"id":"39799bc9-a603-5889-a396-adae351789a6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/39799bc9-a603-5889-a396-adae351789a6/attachment.md","path":"references/08-人机协作-v2.md","size":7459,"sha256":"82ad4d6f450f3b812a47bd63ac0feb71545a5af39a7ebb86bc10276ccf0aaa38","contentType":"text/markdown; charset=utf-8"},{"id":"246f800c-0921-5c84-bff2-907f01d2d6e1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/246f800c-0921-5c84-bff2-907f01d2d6e1/attachment.md","path":"references/08-人机协作.md","size":1544,"sha256":"c6ff295caeab4449a42ad9c581f87e54419167cbcdbb42e5cd3e4f2ab59c159a","contentType":"text/markdown; charset=utf-8"},{"id":"888d8a5b-5bd6-52bd-8341-f6175203ea67","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/888d8a5b-5bd6-52bd-8341-f6175203ea67/attachment.md","path":"references/09-小说体检报告.md","size":1699,"sha256":"75913544c887636474515172097578f11a2f3c3652e362a5e7d92ad0c1d408ae","contentType":"text/markdown; charset=utf-8"},{"id":"7e90da69-3bd4-5ba1-90d1-1aba0912a005","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7e90da69-3bd4-5ba1-90d1-1aba0912a005/attachment.md","path":"references/09-悬念生命周期管理.md","size":6999,"sha256":"89c8303df6ad697b8930e26acedf9ce1be24ef0b2547e8fd679f525a5971dc45","contentType":"text/markdown; charset=utf-8"},{"id":"e7adacab-14b0-58e3-be9e-58470b1f3f99","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e7adacab-14b0-58e3-be9e-58470b1f3f99/attachment.md","path":"references/10-悬念-章节匹配矩阵.md","size":7263,"sha256":"6e9b685b21a8f2e30b301adb02734d6cf93370b31699b4d2ce78c53afe19334b","contentType":"text/markdown; charset=utf-8"},{"id":"a12020ed-92ac-5c65-a4c6-b7f7ed5bcc96","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a12020ed-92ac-5c65-a4c6-b7f7ed5bcc96/attachment.md","path":"references/11-叙事节奏框架.md","size":11063,"sha256":"8922c370d6b1fcf989a93d57354f3615892581e5ee7cb920509d326f2df4c75d","contentType":"text/markdown; charset=utf-8"},{"id":"d94dd3cc-7c1b-546b-a581-54f6fc390bf9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d94dd3cc-7c1b-546b-a581-54f6fc390bf9/attachment.md","path":"references/12-喘息机制.md","size":9182,"sha256":"fc7ae80eb5875c4d077e5f769473d0b4ef1118e5ae9c40807897a4d5df6c82b3","contentType":"text/markdown; charset=utf-8"},{"id":"01c4e99e-dda8-5dec-b67e-36ab8138ff7f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/01c4e99e-dda8-5dec-b67e-36ab8138ff7f/attachment.md","path":"references/13-钩子映射表.md","size":11573,"sha256":"9e5229a31117230a32ecb634482433e6d7f7d64b520c7c89ae29c3d358b0851a","contentType":"text/markdown; charset=utf-8"},{"id":"09c3de59-55b5-5a38-a3e5-68321968e960","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09c3de59-55b5-5a38-a3e5-68321968e960/attachment.md","path":"references/ai-style-by-genre.md","size":13435,"sha256":"7dc8c4faa5ead7cb4032da057d76b866af4892ad1923bbec5e25e49a73d9292c","contentType":"text/markdown; charset=utf-8"},{"id":"b22c59a6-9b50-5790-8c1b-65b55da1dbad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b22c59a6-9b50-5790-8c1b-65b55da1dbad/attachment.md","path":"references/ai-style-examples.md","size":14313,"sha256":"d3f44eb96aeeade9cc5e0714b7d39dfd5e3b084bfc6863190e801626f2db266c","contentType":"text/markdown; charset=utf-8"},{"id":"ea2045e8-4172-5567-b198-575c39fb841d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ea2045e8-4172-5567-b198-575c39fb841d/attachment.md","path":"references/chapter-guide.md","size":7592,"sha256":"b68d6ec967293be161fa5f0af9a5186ed841c8d8626b1e8a8930249006bfe4f3","contentType":"text/markdown; charset=utf-8"},{"id":"5bb30407-ba38-5ab8-85cf-19670568e367","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5bb30407-ba38-5ab8-85cf-19670568e367/attachment.md","path":"references/chapter-template.md","size":699,"sha256":"a4e3294a46da7f94c8a5de1ca2bf5aff89ab8818329e5a6af44fab11f3f79baf","contentType":"text/markdown; charset=utf-8"},{"id":"c05a1c2e-94b8-50c9-a167-8fcec2811c60","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c05a1c2e-94b8-50c9-a167-8fcec2811c60/attachment.md","path":"references/character-building.md","size":5691,"sha256":"4fb405c8d86fd8fabc237a4c78c97ffe2aabb6a4cdd6fc9e75f58594c66efe92","contentType":"text/markdown; charset=utf-8"},{"id":"55e60d6b-210e-5f39-ae50-37d33d220ea0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/55e60d6b-210e-5f39-ae50-37d33d220ea0/attachment.md","path":"references/character-template-v2.md","size":9033,"sha256":"1ce3472a9693d3d02714e6429109359fb43824b24a6be47459a95046d58377b0","contentType":"text/markdown; charset=utf-8"},{"id":"9a15668a-d786-53f6-99af-0d8c3ebb151b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9a15668a-d786-53f6-99af-0d8c3ebb151b/attachment.md","path":"references/character-template.md","size":1619,"sha256":"462ca79fc4086692c2f37355cd9d7e121a02ef801704440cae9dd6686d4b2e31","contentType":"text/markdown; charset=utf-8"},{"id":"aaa5bb53-2a0c-53bf-8fa6-9c80d0f3f9df","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aaa5bb53-2a0c-53bf-8fa6-9c80d0f3f9df/attachment.md","path":"references/consistency.md","size":2500,"sha256":"cbc994ed21f6067b62f155c132af7502694d9926a7a6d3a018682e3bac11144b","contentType":"text/markdown; charset=utf-8"},{"id":"60cba007-a369-5e84-b964-ac62e447a0fc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/60cba007-a369-5e84-b964-ac62e447a0fc/attachment.md","path":"references/content-expansion.md","size":1490,"sha256":"c58764582fc3cc003462a4ad3f421acd0028997bb7c0007a172ded3569474bbd","contentType":"text/markdown; charset=utf-8"},{"id":"69c8f0bc-c0e1-51a2-a1dd-d513d691f837","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/69c8f0bc-c0e1-51a2-a1dd-d513d691f837/attachment.md","path":"references/dialogue-writing.md","size":5450,"sha256":"ba86f83ebdef3052b8de28b2eae6e9b7b323a66a2af4333000634c8db6da2953","contentType":"text/markdown; charset=utf-8"},{"id":"1e206fb9-1dd2-5051-904b-fcc1972ba58d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1e206fb9-1dd2-5051-904b-fcc1972ba58d/attachment.md","path":"references/ending-design.md","size":2646,"sha256":"e5b5babc7ca92c025252f55e73aaeebc2d9eeab1b32ea20b211d356cfc3527fc","contentType":"text/markdown; charset=utf-8"},{"id":"ec2f9c21-e753-5fb1-b727-1eee3eda7c98","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ec2f9c21-e753-5fb1-b727-1eee3eda7c98/attachment.md","path":"references/hook-techniques.md","size":4825,"sha256":"a9e62358fbfd227a99ee3f03b2d03dc9680bc714270386041436ac4a9fb63beb","contentType":"text/markdown; charset=utf-8"},{"id":"a3062629-085b-530d-a154-5e03d0e4bd47","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a3062629-085b-530d-a154-5e03d0e4bd47/attachment.md","path":"references/opening-design.md","size":2563,"sha256":"a43abf6dc8b510ad1da6a2942b7180026391a265db3df4a218dea920c3780bd5","contentType":"text/markdown; charset=utf-8"},{"id":"8c520912-2168-58f1-97fd-ed052bb18f3d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8c520912-2168-58f1-97fd-ed052bb18f3d/attachment.md","path":"references/outline-template-v1-minimal.md","size":2681,"sha256":"c6f3734c55c6e10520ac5210c48e4186ef453e85b9e60f80010cb3dc3dced8ae","contentType":"text/markdown; charset=utf-8"},{"id":"df1111b8-8bf9-5fae-b719-c9570efb3d4a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/df1111b8-8bf9-5fae-b719-c9570efb3d4a/attachment.md","path":"references/outline-template.md","size":3463,"sha256":"87ac160039aaf9a6f140b6b4f1bab695715cd6590bb79da6634a133f033d6124","contentType":"text/markdown; charset=utf-8"},{"id":"43bb301f-64fb-5f29-b2a0-6919085525f3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/43bb301f-64fb-5f29-b2a0-6919085525f3/attachment.md","path":"references/plot-structures.md","size":7931,"sha256":"e3512dbf66cbcbdd10a1c5e308887377c1df4aa3511bf5336a7241e97cb023ba","contentType":"text/markdown; charset=utf-8"},{"id":"7a0dc757-5bb0-5f43-9b0e-7bdd3db24d8c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7a0dc757-5bb0-5f43-9b0e-7bdd3db24d8c/attachment.md","path":"references/progress-dashboard-template.md","size":2794,"sha256":"3cd821065d62d10a8e87a3b600c2d0ff3e6eda2632f8a49426953a48e4934024","contentType":"text/markdown; charset=utf-8"},{"id":"682321e0-785d-549e-8794-d894edd32d82","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/682321e0-785d-549e-8794-d894edd32d82/attachment.md","path":"references/quality-checklist.md","size":4526,"sha256":"73044464996c2cb31bb4bd516eecd10142f68a2d9c01a9062746733e0912c926","contentType":"text/markdown; charset=utf-8"},{"id":"9f752739-0dbc-5bb3-9704-994ebaecdff0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9f752739-0dbc-5bb3-9704-994ebaecdff0/attachment.md","path":"references/scene-design-v2.md","size":12508,"sha256":"10da8054b59d425111cbfb1953b1b16a2269b64ccb931e70c6c00bd2128a2d14","contentType":"text/markdown; charset=utf-8"},{"id":"9bb1d7dd-bd7f-5ca2-ad27-34ed3aede726","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9bb1d7dd-bd7f-5ca2-ad27-34ed3aede726/attachment.md","path":"references/scene-design.md","size":2996,"sha256":"1e8acc7df106df7a4e78af164d96c69c35269ca8390ade8ec6a48d2899d70cd5","contentType":"text/markdown; charset=utf-8"},{"id":"84d2dc85-24fe-513f-894d-ea0338e77d54","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/84d2dc85-24fe-513f-894d-ea0338e77d54/attachment.md","path":"references/story-bible-template.md","size":1500,"sha256":"42b170740e86422effdb5ce8014658a27a62e3a7b20a4d0ab0c1ba86b8b73fd3","contentType":"text/markdown; charset=utf-8"},{"id":"7ab0f2d7-ebd1-51b3-941f-59e920f6d9af","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7ab0f2d7-ebd1-51b3-941f-59e920f6d9af/attachment.md","path":"references/style-polishing.md","size":3481,"sha256":"58b8896588067adddf1372b4b98af99443bd08dffc874d5b55c923b3506735d6","contentType":"text/markdown; charset=utf-8"},{"id":"c51a3bb4-6c7c-5210-88e5-3d2e6976ce89","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c51a3bb4-6c7c-5210-88e5-3d2e6976ce89/attachment.tsv","path":"results.tsv","size":440,"sha256":"52613fc0bfb106a9cb2efe87ed24f81bc59c006a9fa150952daa0afb18d00faa","contentType":"text/tab-separated-values"},{"id":"156692be-8968-5ecb-b520-672fa7698c04","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/156692be-8968-5ecb-b520-672fa7698c04/attachment.py","path":"scripts/character_tracker.py","size":9872,"sha256":"81977305b8f9fccc072f9bf705550e2abad1645db417ab4158c564706e78aa2b","contentType":"text/x-python; charset=utf-8"},{"id":"1dfe51bc-8cc7-56f2-825b-fa86e41e942d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1dfe51bc-8cc7-56f2-825b-fa86e41e942d/attachment.py","path":"scripts/check_ai_style.py","size":19831,"sha256":"867f453529adaa31b0bda6c8b410c504e95a79ffa60c72a251026e8e353c1427","contentType":"text/x-python; charset=utf-8"},{"id":"2746708b-1fc8-591f-8c9a-94fc0dedd7dc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2746708b-1fc8-591f-8c9a-94fc0dedd7dc/attachment.py","path":"scripts/check_chapter_wordcount.py","size":4553,"sha256":"835f08f5a612bfd3441310f93de9ceb4bf2b5bb2d799f4f684492b376048ef0a","contentType":"text/x-python; charset=utf-8"},{"id":"cb31ffd7-9297-5375-ab8d-8c879fb72c27","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cb31ffd7-9297-5375-ab8d-8c879fb72c27/attachment.py","path":"scripts/check_novel_health.py","size":7400,"sha256":"c2f08f25b2365cb9a7cc7fa793500010f8f9dfa3dd42948a8f6b132c4362d262","contentType":"text/x-python; charset=utf-8"},{"id":"3a52ec44-d7d7-52c4-88d2-7d7f5d657a09","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3a52ec44-d7d7-52c4-88d2-7d7f5d657a09/attachment.py","path":"scripts/check_timeline.py","size":7583,"sha256":"253a6e6315222857a558c950f901682587566db1106df7e5e3ee9451f2bec9ed","contentType":"text/x-python; charset=utf-8"},{"id":"2e8f844c-d654-5ca7-ba7c-aaddee541cb3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2e8f844c-d654-5ca7-ba7c-aaddee541cb3/attachment.py","path":"scripts/generate_epub.py","size":18160,"sha256":"01b24a59d41d507084026dfa35154e83e47b0c5b84c7e0dd04bd081e3155c46c","contentType":"text/x-python; charset=utf-8"},{"id":"53510e07-b0d2-5f28-a310-758654fcf3ce","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/53510e07-b0d2-5f28-a310-758654fcf3ce/attachment.py","path":"scripts/translate_to_english.py","size":12595,"sha256":"dedce6141ad0fc7a2c071f978dbaecf3737e1a127a5507662a88a4f042fc2d29","contentType":"text/x-python; charset=utf-8"},{"id":"8d94cfb7-4c61-5e7a-aff3-b6f51a071abd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8d94cfb7-4c61-5e7a-aff3-b6f51a071abd/attachment.py","path":"scripts/utils.py","size":2612,"sha256":"8876d354d7c614a8ab7259589da78ff9f54b861421e87d7dc2a937a8379ccf01","contentType":"text/x-python; charset=utf-8"},{"id":"5e672e97-22a6-5180-a1d9-f47b7df30996","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5e672e97-22a6-5180-a1d9-f47b7df30996/attachment.json","path":"test-prompts.json","size":986,"sha256":"adf806c8bec0ae2b0cceaf0bb40aadb53d31994953a50b45d03eb1258fdb67cc","contentType":"application/json; charset=utf-8"},{"id":"11dfda10-9ebb-58b8-8f99-bd8610ad1984","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/11dfda10-9ebb-58b8-8f99-bd8610ad1984/attachment.py","path":"tests/test_check_chapter_wordcount.py","size":1528,"sha256":"df2b4c56dcb4d4fb605b3cc9bf9370043c2b41769ce2a4a4c116a0ae83dcdcd6","contentType":"text/x-python; charset=utf-8"},{"id":"d17a0f30-ffc2-57a6-b183-f1bc7e3c9ccf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d17a0f30-ffc2-57a6-b183-f1bc7e3c9ccf/attachment.py","path":"tests/test_generate_epub.py","size":9527,"sha256":"3e6493e852f2766245f8568212f7d77bf8bcc90e1f86c7fd7eb99fca6c5db3c0","contentType":"text/x-python; charset=utf-8"},{"id":"f8188eae-698b-5f96-8905-9fde7d427a74","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f8188eae-698b-5f96-8905-9fde7d427a74/attachment.py","path":"tests/test_scripts.py","size":5933,"sha256":"269bdca2897491c2100fddc374552843c7fc091cb55e2f064410f80cf39c0cc9","contentType":"text/x-python; charset=utf-8"},{"id":"0254831b-8608-5cfc-a87d-894f99cc48f9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0254831b-8608-5cfc-a87d-894f99cc48f9/attachment.py","path":"tests/test_skill_docs.py","size":1966,"sha256":"81183be79aeec1d32b7c62e8ba53934c5ea2310d15b0c7668161a10d9095abcc","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"48ce233894394cfc4282f192a1a4cc9da0398d4b84066a92a2516863116b4807","attachment_count":89,"text_attachments":84,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":5,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"documents-office","category_label":"Documents"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"documents-office","import_tag":"clean-skills-v1","description":"Chinese novel/web novel writing skill. Plan, write, revise, export EPUB, check quality. Triggers: 写小说,写一本,继续写,下一章,修改第 X 章,重写,导出 epub, 字数检查,AI 味检查,质量检查,检查节奏,自动写完整本,autopilot. Also: EPUB export, word count check."}},"renderedAt":1782981907712}

Chinese Novelist Version - Version : - Version Date : - Changes : Darwin 架构升级:引入角色智能体推演机制,将写作架构从"章节任务驱动"升级为"角色认知驱动"。每章写作前推演角色8维状态(目标/信息/情绪/压力/关系/资源/时间/选择空间),让剧情从角色认知自然生长。新增角色状态快照持久化到进度仪表盘,解决长篇连载角色失真问题。评分:76.7 → 90.0 (+13.3) - Previous Versions : see CHANGELOG.md Overview 为中文长篇小说和网文创作提供一套可持续执行的工作流:先稳住设定与大纲,再按章节推进,持续维护人物状态、悬念台账和文风质量,避免写到后面失控、注水或前后打架。 执行入口速查 先判断用户意图,再进入对应流程。不要把所有能力一次性展开;首轮只交付当前入口最需要的内容。 | 用户意图 | 触发词示例 | 进入流程 | 首轮必须交付 | |----------|------------|----------|--------------| | 新建小说 | "写一本"、"帮我写小说"、"从头开始" | 策划期 | 3-5 个书名候选 + 极简总纲 + 首章任务卡 | | 继续连载 | "继续写"、"下一章" | 连载期 | 读取/索要小说目录,定位仪表盘、…