novel-maker 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +209 -0
- package/bin/novel-maker.js +229 -0
- package/package.json +33 -0
- package/skill/CHANGELOG.md +82 -0
- package/skill/QUICK-REF.md +168 -0
- package/skill/README.md +75 -0
- package/skill/SKILL.md +715 -0
- package/skill/agents/README.md +59 -0
- package/skill/agents/auditor.md +234 -0
- package/skill/agents/coordinator.md +150 -0
- package/skill/agents/planner.md +220 -0
- package/skill/agents/reviewer.md +249 -0
- package/skill/agents/reviser.md +144 -0
- package/skill/agents/writer.md +213 -0
- package/skill/arc-templates/README.md +43 -0
- package/skill/arc-templates/apocalypse/ability.md +81 -0
- package/skill/arc-templates/apocalypse/faction.md +81 -0
- package/skill/arc-templates/apocalypse/humanity.md +81 -0
- package/skill/arc-templates/apocalypse/survival.md +81 -0
- package/skill/arc-templates/game/competition.md +81 -0
- package/skill/arc-templates/game/dungeon.md +81 -0
- package/skill/arc-templates/game/guild-war.md +81 -0
- package/skill/arc-templates/game/leveling.md +80 -0
- package/skill/arc-templates/general/challenge.md +44 -0
- package/skill/arc-templates/general/conflict.md +71 -0
- package/skill/arc-templates/general/explore.md +71 -0
- package/skill/arc-templates/general/growth.md +71 -0
- package/skill/arc-templates/general/mystery.md +71 -0
- package/skill/arc-templates/general/relation.md +71 -0
- package/skill/arc-templates/history/battle.md +71 -0
- package/skill/arc-templates/history/politics.md +71 -0
- package/skill/arc-templates/history/reform.md +71 -0
- package/skill/arc-templates/infinite-flow/boss.md +71 -0
- package/skill/arc-templates/infinite-flow/dungeon.md +71 -0
- package/skill/arc-templates/infinite-flow/enhance.md +71 -0
- package/skill/arc-templates/infinite-flow/team.md +71 -0
- package/skill/arc-templates/mystery/case.md +71 -0
- package/skill/arc-templates/mystery/deduction.md +71 -0
- package/skill/arc-templates/mystery/twist.md +71 -0
- package/skill/arc-templates/romance/angst.md +80 -0
- package/skill/arc-templates/romance/chase.md +71 -0
- package/skill/arc-templates/romance/slow-burn.md +71 -0
- package/skill/arc-templates/romance/sweet.md +80 -0
- package/skill/arc-templates/sci-fi/awakening.md +81 -0
- package/skill/arc-templates/sci-fi/breakthrough.md +81 -0
- package/skill/arc-templates/sci-fi/contact.md +81 -0
- package/skill/arc-templates/sci-fi/exploration.md +81 -0
- package/skill/arc-templates/urban/business.md +71 -0
- package/skill/arc-templates/urban/revenge.md +71 -0
- package/skill/arc-templates/urban/rise.md +71 -0
- package/skill/arc-templates/urban/romance.md +71 -0
- package/skill/arc-templates/western-fantasy/adventure.md +80 -0
- package/skill/arc-templates/western-fantasy/kingdom.md +71 -0
- package/skill/arc-templates/western-fantasy/magic-awakening.md +71 -0
- package/skill/arc-templates/western-fantasy/racial-conflict.md +71 -0
- package/skill/arc-templates/wuxia/breakthrough.md +71 -0
- package/skill/arc-templates/wuxia/grudge.md +71 -0
- package/skill/arc-templates/wuxia/hero-path.md +71 -0
- package/skill/arc-templates/wuxia/sect-war.md +71 -0
- package/skill/arc-templates/xianxia/breakthrough.md +71 -0
- package/skill/arc-templates/xianxia/dungeon.md +71 -0
- package/skill/arc-templates/xianxia/tournament.md +71 -0
- package/skill/arc-templates/xianxia/tribulation.md +71 -0
- package/skill/docs/examples.md +61 -0
- package/skill/docs/faq.md +81 -0
- package/skill/docs/installation.md +87 -0
- package/skill/docs/quickstart.md +83 -0
- package/skill/genre-packs/README.md +47 -0
- package/skill/genre-packs/_default/arc-types.md +153 -0
- package/skill/genre-packs/_default/rules.md +56 -0
- package/skill/genre-packs/_default/templates.md +135 -0
- package/skill/genre-packs/apocalypse/arc-types.md +109 -0
- package/skill/genre-packs/apocalypse/rules.md +113 -0
- package/skill/genre-packs/apocalypse/settings.md +106 -0
- package/skill/genre-packs/apocalypse/templates.md +192 -0
- package/skill/genre-packs/game/arc-types.md +109 -0
- package/skill/genre-packs/game/rules.md +113 -0
- package/skill/genre-packs/game/settings.md +103 -0
- package/skill/genre-packs/game/templates.md +173 -0
- package/skill/genre-packs/history/arc-types.md +109 -0
- package/skill/genre-packs/history/rules.md +107 -0
- package/skill/genre-packs/history/settings.md +126 -0
- package/skill/genre-packs/history/templates.md +179 -0
- package/skill/genre-packs/infinite-flow/arc-types.md +101 -0
- package/skill/genre-packs/infinite-flow/rules.md +75 -0
- package/skill/genre-packs/infinite-flow/settings.md +102 -0
- package/skill/genre-packs/infinite-flow/templates.md +226 -0
- package/skill/genre-packs/mystery/arc-types.md +109 -0
- package/skill/genre-packs/mystery/rules.md +107 -0
- package/skill/genre-packs/mystery/settings.md +103 -0
- package/skill/genre-packs/mystery/templates.md +178 -0
- package/skill/genre-packs/romance/arc-types.md +130 -0
- package/skill/genre-packs/romance/rules.md +88 -0
- package/skill/genre-packs/romance/settings.md +146 -0
- package/skill/genre-packs/romance/templates.md +245 -0
- package/skill/genre-packs/sci-fi/arc-types.md +109 -0
- package/skill/genre-packs/sci-fi/rules.md +113 -0
- package/skill/genre-packs/sci-fi/settings.md +99 -0
- package/skill/genre-packs/sci-fi/templates.md +170 -0
- package/skill/genre-packs/urban/arc-types.md +101 -0
- package/skill/genre-packs/urban/rules.md +75 -0
- package/skill/genre-packs/urban/settings.md +82 -0
- package/skill/genre-packs/urban/templates.md +212 -0
- package/skill/genre-packs/western-fantasy/arc-types.md +128 -0
- package/skill/genre-packs/western-fantasy/rules.md +88 -0
- package/skill/genre-packs/western-fantasy/settings.md +160 -0
- package/skill/genre-packs/western-fantasy/templates.md +225 -0
- package/skill/genre-packs/wuxia/arc-types.md +126 -0
- package/skill/genre-packs/wuxia/rules.md +86 -0
- package/skill/genre-packs/wuxia/settings.md +150 -0
- package/skill/genre-packs/wuxia/templates.md +195 -0
- package/skill/genre-packs/xianxia/arc-types.md +101 -0
- package/skill/genre-packs/xianxia/rules.md +74 -0
- package/skill/genre-packs/xianxia/settings.md +107 -0
- package/skill/genre-packs/xianxia/templates.md +202 -0
- package/skill/hooks/README.md +102 -0
- package/skill/hooks/chapter-complete.md +176 -0
- package/skill/hooks/context-injection.md +152 -0
- package/skill/hooks/intent-detection.md +183 -0
- package/skill/hooks/review-trigger.md +219 -0
- package/skill/hooks/summary-trigger.md +185 -0
- package/skill/references/act-guidance.md +228 -0
- package/skill/references/audit-core.md +130 -0
- package/skill/references/audit-dimensions.md +202 -0
- package/skill/references/character-voice-card.md +196 -0
- package/skill/references/consistency-checker.md +209 -0
- package/skill/references/content-expansion.md +68 -0
- package/skill/references/creative-constraints.md +200 -0
- package/skill/references/data-agent.md +286 -0
- package/skill/references/dialogue-writing.md +104 -0
- package/skill/references/editorial-perspective.md +166 -0
- package/skill/references/emotion-curve.md +127 -0
- package/skill/references/genre-rules.md +389 -0
- package/skill/references/golden-opening.md +81 -0
- package/skill/references/memory-system.md +288 -0
- package/skill/references/pacing-analysis.md +201 -0
- package/skill/references/platform-rules.md +244 -0
- package/skill/references/plot-structures.md +108 -0
- package/skill/references/reader-feedback.md +119 -0
- package/skill/references/rhythm-system.md +204 -0
- package/skill/references/style-imitation.md +193 -0
- package/skill/references/sweet-spot-tracking.md +182 -0
- package/skill/references/usage-guide.md +174 -0
- package/skill/references/writing-methods.md +169 -0
- package/skill/rules/anti-ai-expressions.md +206 -0
- package/skill/rules/character-voice.md +184 -0
- package/skill/rules/consistency-check.md +232 -0
- package/skill/rules/smart-query.md +263 -0
- package/skill/scripts/README.md +380 -0
- package/skill/scripts/auditor/chapter_transition.py +217 -0
- package/skill/scripts/auditor/consistency_scan.py +194 -0
- package/skill/scripts/auditor/dialogue_checker.py +194 -0
- package/skill/scripts/auditor/hook_report.py +115 -0
- package/skill/scripts/auditor/pacing_optimizer.py +303 -0
- package/skill/scripts/auditor/pacing_report.py +275 -0
- package/skill/scripts/auditor/pre_audit.py +203 -0
- package/skill/scripts/auditor/style_check.py +158 -0
- package/skill/scripts/auditor/worldbuilding_checker.py +637 -0
- package/skill/scripts/common/analyze.py +129 -0
- package/skill/scripts/common/init_guide.py +796 -0
- package/skill/scripts/common/install.py +169 -0
- package/skill/scripts/common/nm_utils.py +296 -0
- package/skill/scripts/common/validate.py +215 -0
- package/skill/scripts/coordinator/stats_report.py +165 -0
- package/skill/scripts/coordinator/volume_batch.py +121 -0
- package/skill/scripts/planner/outline_extractor.py +89 -0
- package/skill/scripts/planner/planner_context.py +220 -0
- package/skill/scripts/planner/query_engine.py +289 -0
- package/skill/scripts/reviewer/chapter_diff.py +143 -0
- package/skill/scripts/reviewer/character_arc_tracker.py +191 -0
- package/skill/scripts/reviewer/emotion_curve.py +340 -0
- package/skill/scripts/reviewer/foreshadowing_tracker.py +286 -0
- package/skill/scripts/reviewer/subplot_tracker.py +207 -0
- package/skill/scripts/reviewer/summary_generator.py +130 -0
- package/skill/scripts/reviewer/truth_diff.py +227 -0
- package/skill/scripts/reviewer/truth_manager.py +120 -0
- package/skill/scripts/test_scripts.py +366 -0
- package/skill/scripts/writer/build_write_context.py +255 -0
- package/skill/scripts/writer/chapter_info.py +67 -0
- package/skill/scripts/writer/check_wordcount.py +115 -0
- package/skill/scripts/writer/scene_builder.py +227 -0
- package/skill/scripts/writer/style_anchor.py +135 -0
- package/skill/styles/author-styles.md +53 -0
- package/skill/styles/authors//344/270/245/350/260/250/350/256/276/345/256/232/346/265/201//345/277/230/350/257/255.md +110 -0
- package/skill/styles/authors//344/270/245/350/260/250/350/256/276/345/256/232/346/265/201//347/210/261/346/275/234/346/260/264/347/232/204/344/271/214/350/264/274.md +110 -0
- package/skill/styles/authors//344/270/245/350/260/250/350/256/276/345/256/232/346/265/201//350/250/200/345/275/222/346/255/243/344/274/240.md +110 -0
- package/skill/styles/authors//345/244/232/347/245/236/350/257/235/347/203/255/350/241/200/346/265/201//344/270/211/344/271/235/351/237/263/345/237/237.md +108 -0
- package/skill/styles/authors//346/202/254/347/226/221/346/216/250/347/220/206/346/265/201//346/235/200/350/231/253/351/230/237/351/230/237/345/221/230.md +108 -0
- package/skill/styles/authors//346/220/236/347/254/221/345/271/275/351/273/230/346/265/201//344/270/211/345/244/251/344/270/244/350/247/211.md +110 -0
- package/skill/styles/authors//346/220/236/347/254/221/345/271/275/351/273/230/346/265/201//344/274/232/350/257/264/350/257/235/347/232/204/350/202/230/345/255/220.md +110 -0
- package/skill/styles/authors//346/220/236/347/254/221/345/271/275/351/273/230/346/265/201//345/215/226/346/212/245/345/260/217/351/203/216/345/220/233.md +108 -0
- package/skill/styles/authors//346/220/236/347/254/221/345/271/275/351/273/230/346/265/201//345/274/210/351/235/222/345/263/260.md +123 -0
- package/skill/styles/authors//347/203/255/350/241/200/345/215/207/347/272/247/346/265/201//345/224/220/345/256/266/344/270/211/345/260/221.md +109 -0
- package/skill/styles/authors//347/203/255/350/241/200/345/215/207/347/272/247/346/265/201//345/244/251/350/232/225/345/234/237/350/261/206.md +110 -0
- package/skill/styles/authors//347/203/255/350/241/200/345/215/207/347/272/247/346/265/201//346/210/221/345/220/203/350/245/277/347/272/242/346/237/277.md +108 -0
- package/skill/styles/authors//347/203/255/350/241/200/345/215/207/347/272/247/346/265/201//346/273/232/345/274/200.md +109 -0
- package/skill/styles/authors//347/203/255/350/241/200/345/215/207/347/272/247/346/265/201//350/276/260/344/270/234.md +109 -0
- package/skill/styles/authors//347/211/271/350/211/262/351/242/206/345/237/237/346/265/201//345/244/251/344/270/213/351/234/270/345/224/261.md +110 -0
- package/skill/styles/authors//347/211/271/350/211/262/351/242/206/345/237/237/346/265/201//346/234/210/345/205/263.md +108 -0
- package/skill/styles/authors//347/211/271/350/211/262/351/242/206/345/237/237/346/265/201//350/220/247/351/274/216.md +109 -0
- package/skill/styles/authors//347/211/271/350/211/262/351/242/206/345/237/237/346/265/201//350/235/264/350/235/266/350/223/235.md +112 -0
- package/skill/styles/authors//347/273/206/350/205/273/346/226/207/351/235/222/346/265/201//346/204/244/346/200/222/347/232/204/351/246/231/350/225/211.md +109 -0
- package/skill/styles/authors//347/273/206/350/205/273/346/226/207/351/235/222/346/265/201//347/203/275/347/201/253/346/210/217/350/257/270/344/276/257.md +109 -0
- package/skill/styles/authors//347/273/206/350/205/273/346/226/207/351/235/222/346/265/201//347/214/253/350/205/273.md +110 -0
- package/skill/styles/authors//347/273/206/350/205/273/346/226/207/351/235/222/346/265/201//350/200/263/346/240/271.md +109 -0
- package/skill/templates/INDEX.md +48 -0
- package/skill/templates/act-plan.md +72 -0
- package/skill/templates/chapter.md +53 -0
- package/skill/templates/character-profile.md +107 -0
- package/skill/templates/character-voice.md +106 -0
- package/skill/templates/constitution.md +90 -0
- package/skill/templates/emotional-arcs.md +37 -0
- package/skill/templates/hook-template.md +68 -0
- package/skill/templates/outline.md +155 -0
- package/skill/templates/plot-card.md +432 -0
- package/skill/templates/power-system.md +124 -0
- package/skill/templates/presets.json +69 -0
- package/skill/templates/review-report.md +135 -0
- package/skill/templates/scene-plan.md +221 -0
- package/skill/templates/scene-template.md +78 -0
- package/skill/templates/subplot-board.md +48 -0
- package/skill/templates/summary-10chapters.md +79 -0
- package/skill/templates/summary-50chapters.md +131 -0
- package/skill/templates/summary-volume.md +148 -0
- package/skill/templates/timeline.md +37 -0
- package/skill/templates/volume-plan.md +44 -0
- package/skill/templates/world-setting.md +151 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Hook 系统
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
Hook 系统提供5个自动化钩子,在写作流程的关键节点自动执行预定义操作,提升写作效率。
|
|
6
|
+
|
|
7
|
+
## Hook 列表
|
|
8
|
+
|
|
9
|
+
| Hook | 触发时机 | 功能 |
|
|
10
|
+
|------|----------|------|
|
|
11
|
+
| [context-injection](context-injection.md) | 写作前 | 自动注入上下文(角色状态、世界观、前情摘要) |
|
|
12
|
+
| [intent-detection](intent-detection.md) | 用户输入时 | 检测用户意图,自动路由到对应功能 |
|
|
13
|
+
| [chapter-complete](chapter-complete.md) | 章节完成后 | 自动更新大纲、记忆文件、伏笔表 |
|
|
14
|
+
| [review-trigger](review-trigger.md) | 每章完成后 | 自动触发质量审查 |
|
|
15
|
+
| [summary-trigger](summary-trigger.md) | 每10章/50章后 | 自动生成阶段总结 |
|
|
16
|
+
|
|
17
|
+
## 工作原理
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
用户输入 → [intent-detection] → 识别意图 → 路由到对应功能
|
|
21
|
+
↓
|
|
22
|
+
写作前 → [context-injection] → 注入上下文 → 开始写作
|
|
23
|
+
↓
|
|
24
|
+
写作中 → AI 生成内容 → 用户确认
|
|
25
|
+
↓
|
|
26
|
+
章节完成 → [chapter-complete] → 更新大纲/记忆/伏笔
|
|
27
|
+
↓
|
|
28
|
+
[review-trigger] → 质量审查 → 生成报告
|
|
29
|
+
↓
|
|
30
|
+
[summary-trigger] → 检查是否需要总结 → 生成总结
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 使用方式
|
|
34
|
+
|
|
35
|
+
### 自动触发
|
|
36
|
+
|
|
37
|
+
Hook 会在对应时机自动触发,无需手动调用。
|
|
38
|
+
|
|
39
|
+
### 手动触发
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
/novel-maker hook context-injection # 手动注入上下文
|
|
43
|
+
/novel-maker hook chapter-complete # 手动触发章节完成流程
|
|
44
|
+
/novel-maker hook review-trigger # 手动触发质量审查
|
|
45
|
+
/novel-maker hook summary-trigger # 手动触发阶段总结
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 禁用 Hook
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
/novel-maker hook disable context-injection # 禁用上下文注入
|
|
52
|
+
/novel-maker hook enable context-injection # 启用上下文注入
|
|
53
|
+
/novel-maker hook status # 查看 Hook 状态
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 配置
|
|
57
|
+
|
|
58
|
+
Hook 配置文件位于 `.novel-maker/config.json`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"hooks": {
|
|
63
|
+
"context-injection": {
|
|
64
|
+
"enabled": true,
|
|
65
|
+
"priority": 1
|
|
66
|
+
},
|
|
67
|
+
"intent-detection": {
|
|
68
|
+
"enabled": true,
|
|
69
|
+
"priority": 0
|
|
70
|
+
},
|
|
71
|
+
"chapter-complete": {
|
|
72
|
+
"enabled": true,
|
|
73
|
+
"priority": 2
|
|
74
|
+
},
|
|
75
|
+
"review-trigger": {
|
|
76
|
+
"enabled": true,
|
|
77
|
+
"priority": 3
|
|
78
|
+
},
|
|
79
|
+
"summary-trigger": {
|
|
80
|
+
"enabled": true,
|
|
81
|
+
"priority": 4
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 执行顺序
|
|
88
|
+
|
|
89
|
+
Hook 按优先级顺序执行:
|
|
90
|
+
|
|
91
|
+
1. **intent-detection** (优先级 0) - 最先执行,识别用户意图
|
|
92
|
+
2. **context-injection** (优先级 1) - 写作前注入上下文
|
|
93
|
+
3. **chapter-complete** (优先级 2) - 章节完成后更新状态
|
|
94
|
+
4. **review-trigger** (优先级 3) - 触发质量审查
|
|
95
|
+
5. **summary-trigger** (优先级 4) - 检查是否需要总结
|
|
96
|
+
|
|
97
|
+
## 注意事项
|
|
98
|
+
|
|
99
|
+
1. Hook 执行不影响主流程,即使 Hook 失败也不会中断写作
|
|
100
|
+
2. Hook 结果会自动应用到项目中
|
|
101
|
+
3. 可以通过配置禁用不需要的 Hook
|
|
102
|
+
4. Hook 执行日志保存在 `.novel-maker/logs/hooks.log`
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Chapter Complete Hook
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
在章节完成后自动更新大纲、记忆文件、伏笔表等,确保项目状态与写作进度同步。
|
|
6
|
+
|
|
7
|
+
## 触发时机
|
|
8
|
+
|
|
9
|
+
- `/novel-maker write` 执行完成后
|
|
10
|
+
- 用户确认章节内容后
|
|
11
|
+
|
|
12
|
+
## 更新内容
|
|
13
|
+
|
|
14
|
+
### 1. 更新大纲
|
|
15
|
+
|
|
16
|
+
**操作**:标记当前章节为已完成状态
|
|
17
|
+
|
|
18
|
+
**文件**:`novels/outline.md`
|
|
19
|
+
|
|
20
|
+
**更新内容**:
|
|
21
|
+
- 将章节状态从"待写"改为"已完成"
|
|
22
|
+
- 添加章节完成时间
|
|
23
|
+
- 添加章节摘要
|
|
24
|
+
|
|
25
|
+
**示例**:
|
|
26
|
+
```markdown
|
|
27
|
+
## 第三幕:高潮
|
|
28
|
+
|
|
29
|
+
### 第50章 王都风云 [已完成] 2026-06-26
|
|
30
|
+
- 林风进入王都
|
|
31
|
+
- 遭遇皇室势力
|
|
32
|
+
- 古剑·风吟封印觉醒
|
|
33
|
+
- 字数:3200字
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. 更新记忆文件
|
|
37
|
+
|
|
38
|
+
**操作**:更新世界状态和角色状态
|
|
39
|
+
|
|
40
|
+
**文件**:`truth-files/current-state.md`
|
|
41
|
+
|
|
42
|
+
**更新内容**:
|
|
43
|
+
- 角色状态变化
|
|
44
|
+
- 世界状态变化
|
|
45
|
+
- 新获得的物品/技能
|
|
46
|
+
|
|
47
|
+
**示例**:
|
|
48
|
+
```markdown
|
|
49
|
+
## 世界状态
|
|
50
|
+
|
|
51
|
+
### 角色状态
|
|
52
|
+
- 林风:高级修士,当前在王都,获得古剑·风吟(已解封)
|
|
53
|
+
- 苏雨:医修,当前在林风身边
|
|
54
|
+
|
|
55
|
+
### 物品状态
|
|
56
|
+
- 古剑·风吟:已解封,剑灵觉醒
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. 更新伏笔表
|
|
60
|
+
|
|
61
|
+
**操作**:标记伏笔回收状态
|
|
62
|
+
|
|
63
|
+
**文件**:`truth-files/pending-hooks.md`
|
|
64
|
+
|
|
65
|
+
**更新内容**:
|
|
66
|
+
- 标记已回收的伏笔
|
|
67
|
+
- 添加新埋设的伏笔
|
|
68
|
+
- 更新伏笔状态
|
|
69
|
+
|
|
70
|
+
**示例**:
|
|
71
|
+
```markdown
|
|
72
|
+
## 伏笔表
|
|
73
|
+
|
|
74
|
+
### 古剑·风吟 [已回收]
|
|
75
|
+
- 埋设:第3章,神秘老人赠剑
|
|
76
|
+
- 回收:第50章,剑中封印觉醒
|
|
77
|
+
- 状态:已回收
|
|
78
|
+
|
|
79
|
+
### 神秘老人身份 [未回收]
|
|
80
|
+
- 埋设:第3章,老人身份成谜
|
|
81
|
+
- 预期回收:第80章
|
|
82
|
+
- 状态:未回收
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. 生成章节摘要
|
|
86
|
+
|
|
87
|
+
**操作**:生成本章摘要供后续参考
|
|
88
|
+
|
|
89
|
+
**文件**:`.novel-maker/summaries/chapter-XX-summary.md`
|
|
90
|
+
|
|
91
|
+
**摘要内容**:
|
|
92
|
+
- 章节主要事件
|
|
93
|
+
- 角色状态变化
|
|
94
|
+
- 新埋设的伏笔
|
|
95
|
+
- 关键转折点
|
|
96
|
+
|
|
97
|
+
**示例**:
|
|
98
|
+
```markdown
|
|
99
|
+
# 第50章摘要
|
|
100
|
+
|
|
101
|
+
## 主要事件
|
|
102
|
+
- 林风进入王都
|
|
103
|
+
- 遭遇皇室势力阻挠
|
|
104
|
+
- 古剑·风吟封印觉醒,剑灵现身
|
|
105
|
+
|
|
106
|
+
## 角色变化
|
|
107
|
+
- 林风:获得剑灵协助,实力提升
|
|
108
|
+
- 苏雨:与林风汇合
|
|
109
|
+
|
|
110
|
+
## 伏笔
|
|
111
|
+
- 新埋设:皇室势力的目的
|
|
112
|
+
- 已回收:古剑·风吟封印
|
|
113
|
+
|
|
114
|
+
## 关键转折
|
|
115
|
+
- 剑灵觉醒,揭示古剑来历
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 实现逻辑
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
def chapter_complete(project_dir: str, chapter_num: int, chapter_content: str):
|
|
122
|
+
"""章节完成后的自动更新"""
|
|
123
|
+
|
|
124
|
+
# 1. 更新大纲
|
|
125
|
+
update_outline(project_dir, chapter_num, status="已完成")
|
|
126
|
+
|
|
127
|
+
# 2. 更新记忆文件
|
|
128
|
+
update_current_state(project_dir, chapter_content)
|
|
129
|
+
|
|
130
|
+
# 3. 更新伏笔表
|
|
131
|
+
update_pending_hooks(project_dir, chapter_num, chapter_content)
|
|
132
|
+
|
|
133
|
+
# 4. 生成章节摘要
|
|
134
|
+
generate_chapter_summary(project_dir, chapter_num, chapter_content)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 输出格式
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
【章节完成更新】
|
|
141
|
+
|
|
142
|
+
✅ 大纲已更新:第50章标记为已完成
|
|
143
|
+
✅ 记忆文件已更新:角色状态、世界状态
|
|
144
|
+
✅ 伏笔表已更新:标记1个伏笔回收,新增1个伏笔
|
|
145
|
+
✅ 章节摘要已生成:.novel-maker/summaries/chapter-50-summary.md
|
|
146
|
+
|
|
147
|
+
【幕内进度】
|
|
148
|
+
当前幕:第三幕 - 高潮
|
|
149
|
+
进度:第50章 / 共60章(83%)
|
|
150
|
+
下一章:第51章 - 皇室阴谋
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 配置选项
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"chapter-complete": {
|
|
158
|
+
"enabled": true,
|
|
159
|
+
"priority": 2,
|
|
160
|
+
"options": {
|
|
161
|
+
"update_outline": true,
|
|
162
|
+
"update_memory": true,
|
|
163
|
+
"update_hooks": true,
|
|
164
|
+
"generate_summary": true,
|
|
165
|
+
"show_progress": true
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 注意事项
|
|
172
|
+
|
|
173
|
+
1. 章节完成后必须执行此 Hook,确保项目状态同步
|
|
174
|
+
2. 如果某些文件不存在,会跳过对应更新
|
|
175
|
+
3. 更新操作是增量的,不会覆盖已有内容
|
|
176
|
+
4. 章节摘要会保存供后续章节参考
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Context Injection Hook
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
在写作前自动注入上下文信息,包括角色状态、世界观设定、前情摘要等,确保 AI 写作时有足够的背景信息。
|
|
6
|
+
|
|
7
|
+
## 触发时机
|
|
8
|
+
|
|
9
|
+
- `/novel-maker write` 执行前
|
|
10
|
+
- 用户开始新章节写作时
|
|
11
|
+
|
|
12
|
+
## 注入内容
|
|
13
|
+
|
|
14
|
+
### 1. 角色状态
|
|
15
|
+
|
|
16
|
+
**来源**:`truth-files/characters.md` + `truth-files/current-state.md`
|
|
17
|
+
|
|
18
|
+
**注入内容**:
|
|
19
|
+
- 主要角色当前状态(等级、位置、情绪)
|
|
20
|
+
- 角色关系网络
|
|
21
|
+
- 角色近期经历
|
|
22
|
+
|
|
23
|
+
**示例**:
|
|
24
|
+
```markdown
|
|
25
|
+
【角色状态】
|
|
26
|
+
- 林风:高级修士,当前在王都,情绪:警惕
|
|
27
|
+
- 苏雨:医修,当前在林风身边,情绪:担忧
|
|
28
|
+
- 关系:林风与苏雨是恋人关系
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. 世界观设定
|
|
32
|
+
|
|
33
|
+
**来源**:`truth-files/world-setting.md` + `truth-files/power-system.md`
|
|
34
|
+
|
|
35
|
+
**注入内容**:
|
|
36
|
+
- 当前地点设定
|
|
37
|
+
- 相关力量体系规则
|
|
38
|
+
- 社会制度约束
|
|
39
|
+
|
|
40
|
+
**示例**:
|
|
41
|
+
```markdown
|
|
42
|
+
【世界观设定】
|
|
43
|
+
- 当前地点:王都,大陆中央,政治经济中心
|
|
44
|
+
- 修炼体系:剑修/法修/体修,等级:初级→中级→高级→大师→宗师
|
|
45
|
+
- 社会制度:皇权至上,修士有特权但受皇室约束
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. 前情摘要
|
|
49
|
+
|
|
50
|
+
**来源**:`.novel-maker/summaries/` + 前2章内容
|
|
51
|
+
|
|
52
|
+
**注入内容**:
|
|
53
|
+
- 前2章摘要
|
|
54
|
+
- 当前剧情进展
|
|
55
|
+
- 未解决的伏笔
|
|
56
|
+
|
|
57
|
+
**示例**:
|
|
58
|
+
```markdown
|
|
59
|
+
【前情摘要】
|
|
60
|
+
- 第48章:林风击败张天,获得古剑·风吟的线索
|
|
61
|
+
- 第49章:林风与苏雨汇合,准备前往王都
|
|
62
|
+
- 未解决伏笔:神秘老人身份、古籍预言、林风的怪病
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 4. 本章目标
|
|
66
|
+
|
|
67
|
+
**来源**:`outline.md` / `volume-XX/plan.md`
|
|
68
|
+
|
|
69
|
+
**注入内容**:
|
|
70
|
+
- 本章在大纲中的定位
|
|
71
|
+
- 预期剧情走向
|
|
72
|
+
- 需要埋设/回收的伏笔
|
|
73
|
+
|
|
74
|
+
**示例**:
|
|
75
|
+
```markdown
|
|
76
|
+
【本章目标】
|
|
77
|
+
- 大纲定位:第50章,第三幕高潮
|
|
78
|
+
- 预期走向:林风进入王都,遭遇皇室势力
|
|
79
|
+
- 伏笔回收:古剑·风吟封印觉醒
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 实现逻辑
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
def context_injection(project_dir: str, chapter_num: int) -> str:
|
|
86
|
+
"""注入上下文信息"""
|
|
87
|
+
context = []
|
|
88
|
+
|
|
89
|
+
# 1. 加载角色状态
|
|
90
|
+
characters = load_characters(project_dir)
|
|
91
|
+
current_state = load_current_state(project_dir)
|
|
92
|
+
context.append(format_character_status(characters, current_state))
|
|
93
|
+
|
|
94
|
+
# 2. 加载世界观设定
|
|
95
|
+
world_setting = load_world_setting(project_dir)
|
|
96
|
+
power_system = load_power_system(project_dir)
|
|
97
|
+
context.append(format_world_setting(world_setting, power_system))
|
|
98
|
+
|
|
99
|
+
# 3. 加载前情摘要
|
|
100
|
+
summaries = load_recent_summaries(project_dir, count=2)
|
|
101
|
+
context.append(format_previous_summary(summaries))
|
|
102
|
+
|
|
103
|
+
# 4. 加载本章目标
|
|
104
|
+
outline = load_outline(project_dir)
|
|
105
|
+
chapter_goal = extract_chapter_goal(outline, chapter_num)
|
|
106
|
+
context.append(format_chapter_goal(chapter_goal))
|
|
107
|
+
|
|
108
|
+
return "\n\n".join(context)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## 输出格式
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
【写作上下文】
|
|
115
|
+
## 角色状态 → 来自 truth-files/characters.md + current-state.md
|
|
116
|
+
[角色状态内容]
|
|
117
|
+
|
|
118
|
+
## 世界设定 → 来自 truth-files/world-setting.md + power-system.md
|
|
119
|
+
[世界设定内容]
|
|
120
|
+
|
|
121
|
+
## 前情摘要 → 来自 .novel-maker/summaries/ + 前2章摘要
|
|
122
|
+
[前情摘要内容]
|
|
123
|
+
|
|
124
|
+
## 本章目标 → 来自 outline.md / volume-XX/plan.md
|
|
125
|
+
[本章目标内容]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 配置选项
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"context-injection": {
|
|
133
|
+
"enabled": true,
|
|
134
|
+
"priority": 1,
|
|
135
|
+
"options": {
|
|
136
|
+
"include_characters": true,
|
|
137
|
+
"include_world_setting": true,
|
|
138
|
+
"include_previous_summary": true,
|
|
139
|
+
"include_chapter_goal": true,
|
|
140
|
+
"summary_count": 2,
|
|
141
|
+
"max_context_length": 2000
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 注意事项
|
|
148
|
+
|
|
149
|
+
1. 上下文注入不会修改任何文件,只读取信息
|
|
150
|
+
2. 如果某些文件不存在,会跳过对应部分
|
|
151
|
+
3. 上下文长度有上限,避免占用过多 token
|
|
152
|
+
4. 可以通过配置禁用不需要的部分
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Intent Detection Hook
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
在用户输入时自动检测意图,将自然语言请求路由到对应的功能模块,提供更智能的交互体验。
|
|
6
|
+
|
|
7
|
+
## 触发时机
|
|
8
|
+
|
|
9
|
+
- 用户输入任何文本时
|
|
10
|
+
- 在其他 Hook 执行前
|
|
11
|
+
|
|
12
|
+
## 意图类型
|
|
13
|
+
|
|
14
|
+
### 1. 写作意图
|
|
15
|
+
|
|
16
|
+
**关键词**:写、创作、续写、继续、下一章、开始写
|
|
17
|
+
|
|
18
|
+
**路由目标**:`/novel-maker write`
|
|
19
|
+
|
|
20
|
+
**示例**:
|
|
21
|
+
```
|
|
22
|
+
用户:帮我写第一章
|
|
23
|
+
→ 识别为写作意图
|
|
24
|
+
→ 执行 /novel-maker write 写第一章
|
|
25
|
+
|
|
26
|
+
用户:继续写,主角遇到了敌人
|
|
27
|
+
→ 识别为写作意图
|
|
28
|
+
→ 执行 /novel-maker write 继续写,主角遇到了敌人
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. 查询意图
|
|
32
|
+
|
|
33
|
+
**关键词**:什么、谁、哪里、怎么、为什么、查询、查看
|
|
34
|
+
|
|
35
|
+
**路由目标**:`/novel-maker query`
|
|
36
|
+
|
|
37
|
+
**示例**:
|
|
38
|
+
```
|
|
39
|
+
用户:林风是什么等级?
|
|
40
|
+
→ 识别为查询意图(角色查询)
|
|
41
|
+
→ 执行 /novel-maker query 林风是什么等级?
|
|
42
|
+
|
|
43
|
+
用户:第三章发生了什么?
|
|
44
|
+
→ 识别为查询意图(剧情查询)
|
|
45
|
+
→ 执行 /novel-maker query 第三章发生了什么?
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. 审查意图
|
|
49
|
+
|
|
50
|
+
**关键词**:检查、审查、看看、有没有问题、质量、矛盾
|
|
51
|
+
|
|
52
|
+
**路由目标**:`/novel-maker review`
|
|
53
|
+
|
|
54
|
+
**示例**:
|
|
55
|
+
```
|
|
56
|
+
用户:帮我看看这一章
|
|
57
|
+
→ 识别为审查意图
|
|
58
|
+
→ 执行 /novel-maker review
|
|
59
|
+
|
|
60
|
+
用户:检查有没有矛盾
|
|
61
|
+
→ 识别为审查意图
|
|
62
|
+
→ 执行 /novel-maker review consistency
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 4. 规划意图
|
|
66
|
+
|
|
67
|
+
**关键词**:大纲、规划、计划、下一幕、走向、剧情
|
|
68
|
+
|
|
69
|
+
**路由目标**:`/novel-maker plan` 或 `/novel-maker act`
|
|
70
|
+
|
|
71
|
+
**示例**:
|
|
72
|
+
```
|
|
73
|
+
用户:帮我生成总大纲
|
|
74
|
+
→ 识别为规划意图
|
|
75
|
+
→ 执行 /novel-maker plan 帮我生成总大纲
|
|
76
|
+
|
|
77
|
+
用户:下一幕怎么走
|
|
78
|
+
→ 识别为规划意图
|
|
79
|
+
→ 执行 /novel-maker act 下一幕怎么走
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 5. 设置意图
|
|
83
|
+
|
|
84
|
+
**关键词**:文风、风格、切换、设置、配置
|
|
85
|
+
|
|
86
|
+
**路由目标**:`/novel-maker style`
|
|
87
|
+
|
|
88
|
+
**示例**:
|
|
89
|
+
```
|
|
90
|
+
用户:换个文风
|
|
91
|
+
→ 识别为设置意图
|
|
92
|
+
→ 执行 /novel-maker style
|
|
93
|
+
|
|
94
|
+
用户:用辰东的风格
|
|
95
|
+
→ 识别为设置意图
|
|
96
|
+
→ 执行 /novel-maker style 用辰东的风格
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 实现逻辑
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
def detect_intent(user_input: str) -> dict:
|
|
103
|
+
"""检测用户意图"""
|
|
104
|
+
intent_keywords = {
|
|
105
|
+
"write": ["写", "创作", "续写", "继续", "下一章", "开始写"],
|
|
106
|
+
"query": ["什么", "谁", "哪里", "怎么", "为什么", "查询", "查看"],
|
|
107
|
+
"review": ["检查", "审查", "看看", "有没有问题", "质量", "矛盾"],
|
|
108
|
+
"plan": ["大纲", "规划", "计划", "下一幕", "走向", "剧情"],
|
|
109
|
+
"style": ["文风", "风格", "切换", "设置", "配置"]
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
# 统计每个意图的关键词匹配数
|
|
113
|
+
intent_scores = {}
|
|
114
|
+
for intent, keywords in intent_keywords.items():
|
|
115
|
+
score = sum(1 for keyword in keywords if keyword in user_input)
|
|
116
|
+
intent_scores[intent] = score
|
|
117
|
+
|
|
118
|
+
# 返回得分最高的意图
|
|
119
|
+
if max(intent_scores.values()) > 0:
|
|
120
|
+
primary_intent = max(intent_scores, key=intent_scores.get)
|
|
121
|
+
return {
|
|
122
|
+
"intent": primary_intent,
|
|
123
|
+
"confidence": intent_scores[primary_intent],
|
|
124
|
+
"input": user_input
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# 默认为写作意图
|
|
128
|
+
return {
|
|
129
|
+
"intent": "write",
|
|
130
|
+
"confidence": 0,
|
|
131
|
+
"input": user_input
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 路由逻辑
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
def route_to_function(intent: str, user_input: str) -> str:
|
|
139
|
+
"""根据意图路由到对应功能"""
|
|
140
|
+
routes = {
|
|
141
|
+
"write": "/novel-maker write",
|
|
142
|
+
"query": "/novel-maker query",
|
|
143
|
+
"review": "/novel-maker review",
|
|
144
|
+
"plan": "/novel-maker plan",
|
|
145
|
+
"style": "/novel-maker style"
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
command = routes.get(intent, "/novel-maker write")
|
|
149
|
+
return f"{command} {user_input}"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 输出格式
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+
【意图检测】
|
|
156
|
+
- 输入:帮我写第一章
|
|
157
|
+
- 检测意图:write(写作意图)
|
|
158
|
+
- 置信度:3
|
|
159
|
+
- 路由命令:/novel-maker write 帮我写第一章
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## 配置选项
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"intent-detection": {
|
|
167
|
+
"enabled": true,
|
|
168
|
+
"priority": 0,
|
|
169
|
+
"options": {
|
|
170
|
+
"default_intent": "write",
|
|
171
|
+
"confidence_threshold": 1,
|
|
172
|
+
"show_detection_result": false
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 注意事项
|
|
179
|
+
|
|
180
|
+
1. 意图检测是第一优先级的 Hook,最先执行
|
|
181
|
+
2. 如果置信度低于阈值,使用默认意图
|
|
182
|
+
3. 可以通过配置显示检测结果,方便调试
|
|
183
|
+
4. 意图检测结果会影响后续 Hook 的执行
|