Skill v1.0.1
currentAutomated scan100/100+2 new
version: "1.0.1" name: novel-manager description: Use when user wants to manage project settings, create characters, update world-building, view outline, or check foreshadowing status. Triggers include "新建", "角色", "世界观", "大纲", "伏笔", "项目".
小说项目管理
管理角色、世界观、伏笔、大纲等项目数据。
Studio 与单源契约
- Studio 左侧“大纲”从
src/outline.md实时投影卷/幕/节/章树;原文仍可直接编辑,“故事”不混入大纲。 - Studio 大纲树支持就地改名、新增卷/幕/节/章、删除未含正文的节点;删除后,后续同类节点自动连续补位,确认框先展示级联影响。每次只增量写回对应 Markdown 片段,并自动建立 Git 存档。
- 搜索可单独限定“大纲”,对应
src/outline.md。 src/outline.md是大纲唯一语义真源,data/hierarchy.yaml仅为派生缓存。- Studio 关系拓扑与 ReAct 的
get_world_relations共用人物和世界实体文件,不使用graph.yaml。 - 修改一条关系时先用
edit_world_relation(confirm=false)预览 diff;只有用户明确确认后才携带同一base_revision与confirm=true写入。revision 冲突必须重新预览。
结构树与智能选章
- 用
get_outline_structure读取与 Studio 同源的树、原文行号、已有正文状态和下一章建议;该工具只读。 - 用
edit_outline_structure携带最新 revision 执行rename、add_child、add_after或delete;delete会删除目标子树,并按全书顺序压缩其后同类卷/幕/节/章的编号,附录不参与。先以confirm=false预览包含全部补位变化的 diff,用户明确确认后才以相同 revision 和confirm=true写入。陈旧 revision、重复章节号、包含已有正文的删除,以及会让已有正文ch_XXX换号的补位必须拒绝。无法识别编号的标题保持不变并报告跳过。 - 将 Markdown 的 H1/H2/H3/H4 投影为卷/幕/节/章;将附录隔离为附录树,不混入正文层级统计。
- 默认推荐大纲顺序中最早尚无正文的章纲,不按最大章节号盲猜。
- 从所选章纲、所属节摘要和最近三章实际字数预填章节 ID、要求和目标字数。
- 写作前携带大纲
revision;revision 已变化时重新读取建议,不得写入旧目标。 - 已有正文的章纲只允许打开,不得由“创建建议章节”覆盖。
触发条件
- 角色: "新建角色"、"查看角色"、"更新角色"
- 世界观: "世界观"、"创建实体"、"关系"
- 大纲: "查看大纲"、"修改大纲"、"大纲结构"
- 伏笔: "伏笔状态"、"待回收伏笔"、"埋伏笔"
- 项目: "项目信息"、"初始化项目"
子功能
1. 角色管理
digraph character_mgmt {"角色请求" [shape=box];"操作类型?" [shape=diamond];"创建角色" [shape=box];"查询角色" [shape=box];"更新角色" [shape=box];"列出角色" [shape=box];"角色请求" -> "操作类型?";"操作类型?" -> "创建角色" [label="新建"];"操作类型?" -> "查询角色" [label="查看"];"操作类型?" -> "更新角色" [label="更新"];"操作类型?" -> "列出角色" [label="列表"];}
创建角色
用户: 新建角色 张三 主角AI: 我来创建角色 "张三"。请提供以下信息:1. 简要描述:张三是什么样的人?2. 外貌特征(可选)3. 性格特点(可选)用户: 张三是个落魄书生,性格正直但有些迂腐AI: ✅ 角色已创建**角色卡**: `characters/cards/zhang_san.yaml`**档案**: `characters/profiles/zhang_san.md`| 字段 | 值 ||------|-----|| ID | zhang_san || 名字 | 张三 || 层级 | 主角 || 描述 | 落魄书生,性格正直但有些迂腐 || 首次出场 | 未设置 |
查询角色
用户: 查看张三的档案AI: 📋 角色档案:张三**基本信息**- 层级: 主角- 年龄: 25- 身份: 落魄书生**外貌**面容清瘦,常穿一件洗得发白的青衫...**性格**- 正直- 迂腐- 固执**关系**- 李四: 好友- 王五: 敌对**时间线事件**1. ch_001: 初次登场2. ch_003: 与李四结识
2. 世界观管理
实体操作
用户: 创建地点 天衡档案馆AI: 我来创建地点 "天衡档案馆"。请描述这个地点:- 它是什么地方?- 有什么特点?- 有什么规则?用户: 天衡档案馆是中立的信息机构,只有持有凭证的人才能进入AI: ✅ 实体已创建**实体**: `world/entities/archive_hall.md`| 字段 | 值 ||------|-----|| ID | archive_hall || 类型 | location || 名称 | 天衡档案馆 || 描述 | 中立信息机构 || 规则 | 需凭证进入 |
关系查询
用户: 张三和哪些人有关系?AI: 🔗 关系网络:张三
张三 (protagonist) ├── 李四 (friend) - 好友 ├── 王五 (enemy) - 敌对 └── 天衡档案馆 (member) - 成员
3. 大纲管理
查看大纲
用户: 查看第五章的大纲AI: 📖 第五章大纲**路径**: arc_001 > section_002 > ch_005| 字段 | 值 ||------|-----|| 标题 | 真相大白 || 摘要 | 主角发现信件,揭开阴谋 || 目标字数 | 5000 || 出场角色 | 张三、李四 || 伏笔引用 | ch_002_mystery_letter || 状态 | outlined |**创作目标**:- 揭示第二章埋下的伏笔- 推动主线剧情发展- 制造新的悬念
修改大纲
用户: 把第五章的标题改成"惊天内幕"AI: ✅ 大纲已更新**修改内容**:- 标题: "真相大白" → "惊天内幕"**影响范围**:- src/outline.md(唯一真源,增量修改)- data/hierarchy.yaml(随后重建的派生缓存)是否需要同步修改其他内容?
4. 伏笔管理
查看伏笔状态
用户: 有哪些伏笔待回收?AI: 🎯 待回收伏笔 (3个)| ID | 描述 | 埋下章节 | 计划回收 ||----|------|---------|---------|| ch_002_mystery_letter | 神秘信件 | ch_002 | ch_005 || ch_003_hidden_skill | 隐藏武功 | ch_003 | ch_008 || ch_001_prophecy | 预言诗 | ch_001 | arc_002 |⚠️ 注意:ch_002_mystery_letter 计划在本章回收
伏笔 DAG 检查
用户: 检查伏笔有没有循环依赖AI: 🔍 伏笔 DAG 检查✅ 无循环依赖✅ 无孤立节点⚠️ 发现 1 个超期未回收的伏笔:- ch_001_hint (已超期 3 章)
5. 项目信息
用户: 项目信息AI: 📊 项目概览**基本信息**- 小说 ID: my_novel- 标题: 《江湖风云录》- 作者: 张三- 目标字数: 500,000**进度统计**- 已完成章节: 12- 总字数: 58,000- 角色数: 15- 伏笔数: 8 (待回收: 3)**目录结构**
data/novels/my_novel/ ├── outline/ │ ├── hierarchy.yaml │ └── outline.md ├── src/ │ ├── characters/ (15) │ └── world/ │ ├── rules.md # 世界底层规则 │ ├── timeline.md # 关键事件时间线 │ ├── terminology.md # 术语表 │ └── entities/ # 实体(*.md) └── data/ ├── characters/cards/ (15) ├── foreshadowing/dag.yaml └── manuscript/arc_001/ (12 chapters)
文件访问
| 操作 | 路径 | |
|---|---|---|
| 角色卡 | data/novels/{id}/data/characters/cards/*.yaml | |
| 角色档 | data/novels/{id}/src/characters/*.md | |
| 世界规则 | data/novels/{id}/src/world/rules.md | |
| 时间线 | data/novels/{id}/src/world/timeline.md | |
| 术语表 | data/novels/{id}/src/world/terminology.md | |
| 世界实体 | data/novels/{id}/src/world/entities/*.md | |
| 世界图谱 | python3 tools/world_query.py {id} --relations (自动生成) | |
| 可写大纲 | data/novels/{id}/src/outline.md |
数据格式定义
角色卡片字段
id: zhang_san # 唯一标识(拼音或英文)name: 张三 # 角色名称tier: protagonist # 层级age: 18 # 年龄(可选)identity: 书生 # 身份/职业description: 简要描述first_appearance: ch_001 # 首次出场章节status: active # 状态
枚举值定义
tier (角色层级):
protagonist: 主角antagonist: 反派supporting: 配角background: 背景角色
type (实体类型):
location: 地点item: 物品organization: 组织event: 事件concept: 概念
status (状态):
active: 活跃archived: 归档deceased: 已故(角色)destroyed: 摧毁(实体)hidden: 隐藏sealed: 封印
ID 生成规则
将中文名转换为ID时使用拼音:
- 张三 → zhang_san
- 天衡档案馆 → archive_hall
推荐使用 pypinyin 库:
from pypinyin import lazy_pinyinid_str = "_".join(lazy_pinyin(name)).lower()
模板文件
模板文件位于 skills/novel-manager/templates/:
character_card.yaml- 角色卡片模板character_profile.md- 角色档案模板world_entity.md- 世界观实体模板(Markdown 格式)
错误处理
| 错误 | 处理 | |
|---|---|---|
| 角色不存在 | 提示创建新角色 | |
| 循环依赖 | 拒绝操作,显示依赖链 | |
| 数据格式错误 | 尝试修复或提示手动修复 |
与其他 Skill 的关系
- novel-creator: 创作时查询大纲、角色、伏笔
- novel-reviewer: 审查后更新伏笔状态