novel-writer-cli 0.3.0 → 0.5.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/README.md +1 -1
- package/agents/chapter-writer.md +43 -14
- package/agents/character-weaver.md +7 -1
- package/agents/plot-architect.md +20 -7
- package/agents/quality-judge.md +199 -20
- package/agents/style-analyzer.md +14 -8
- package/agents/style-refiner.md +10 -3
- package/agents/world-builder.md +8 -1
- package/dist/__tests__/agent-prompts-anti-ai-upgrade.test.js +194 -6
- package/dist/__tests__/agent-prompts-platform-expansion.test.js +33 -0
- package/dist/__tests__/anti-ai-infrastructure.test.js +548 -0
- package/dist/__tests__/anti-ai-templates.test.js +2 -2
- package/dist/__tests__/canon-status-lifecycle.test.js +481 -0
- package/dist/__tests__/commit-gate-decision.test.js +65 -0
- package/dist/__tests__/commit-prototype-pollution.test.js +1 -1
- package/dist/__tests__/excitement-type-annotation.test.js +240 -0
- package/dist/__tests__/excitement-type.test.js +21 -0
- package/dist/__tests__/gate-decision.test.js +62 -15
- package/dist/__tests__/genre-excitement-mapping.test.js +355 -0
- package/dist/__tests__/golden-chapter-gates.test.js +79 -0
- package/dist/__tests__/golden-chapter-mini-planning.test.js +485 -0
- package/dist/__tests__/helpers/quickstart-mini-planning.js +61 -0
- package/dist/__tests__/init.test.js +57 -5
- package/dist/__tests__/instructions-platform-expansion.test.js +125 -0
- package/dist/__tests__/next-step-gate-decision-routing.test.js +98 -0
- package/dist/__tests__/orchestrator-state-write-path.test.js +1 -1
- package/dist/__tests__/platform-profile.test.js +57 -1
- package/dist/__tests__/quickstart-pipeline.test.js +73 -6
- package/dist/__tests__/scoring-weights.test.js +193 -0
- package/dist/__tests__/steps-id.test.js +2 -0
- package/dist/__tests__/validate-quickstart-prereqs.test.js +2 -0
- package/dist/advance.js +27 -2
- package/dist/anti-ai-context.js +535 -0
- package/dist/cli.js +3 -1
- package/dist/commit.js +22 -0
- package/dist/excitement-type.js +12 -0
- package/dist/gate-decision.js +98 -2
- package/dist/golden-chapter-gates.js +143 -0
- package/dist/init.js +76 -7
- package/dist/instructions.js +552 -6
- package/dist/next-step.js +124 -88
- package/dist/platform-profile.js +20 -8
- package/dist/quickstart-mini-planning.js +30 -0
- package/dist/scoring-weights.js +38 -3
- package/dist/steps.js +1 -1
- package/dist/validate.js +293 -214
- package/dist/volume-commit.js +271 -5
- package/dist/volume-planning.js +78 -3
- package/docs/user/README.md +1 -0
- package/docs/user/migration-guide.md +166 -0
- package/docs/user/novel-cli.md +4 -3
- package/docs/user/quick-start.md +354 -57
- package/package.json +1 -1
- package/schemas/platform-profile.schema.json +2 -2
- package/scripts/lint-blacklist.sh +221 -76
- package/scripts/lint-structural.sh +538 -0
- package/skills/continue/SKILL.md +6 -0
- package/skills/continue/references/context-contracts.md +71 -6
- package/skills/continue/references/periodic-maintenance.md +12 -1
- package/skills/novel-writing/references/quality-rubric.md +79 -26
- package/skills/novel-writing/references/style-guide.md +129 -19
- package/skills/start/SKILL.md +23 -3
- package/skills/start/references/vol-planning.md +12 -3
- package/templates/ai-blacklist.json +1024 -246
- package/templates/ai-sentence-patterns.json +167 -0
- package/templates/genre-excitement-map.json +48 -0
- package/templates/genre-golden-standards.json +80 -0
- package/templates/genre-weight-profiles.json +15 -0
- package/templates/golden-chapter-gates.json +230 -0
- package/templates/novel-ask/example.question.json +3 -2
- package/templates/platform-profile.json +141 -1
- package/templates/platforms/fanqie.md +35 -0
- package/templates/platforms/jinjiang.md +35 -0
- package/templates/platforms/qidian.md +35 -0
- package/templates/style-profile-template.json +3 -0
package/docs/user/quick-start.md
CHANGED
|
@@ -1,97 +1,394 @@
|
|
|
1
1
|
# 快速起步指南
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这份指南面向第一次使用 `novel-writer-cli` 的作者:从安装、建项目、跑通黄金三章(golden chapters),到进入日常续写。这里的“黄金三章”指项目开局的第 1–3 章,用来尽早验证平台门控、题材门控和开篇留存能力。
|
|
4
|
+
|
|
5
|
+
> 本文默认你走的是 Skill 入口(`/novel:start`、`/novel:continue`、`/novel:status`)。如果你更喜欢手动调用 CLI,可配合阅读 [`docs/user/novel-cli.md`](novel-cli.md)。如果你是老项目升级到 M8,请看 [`docs/user/migration-guide.md`](migration-guide.md)。
|
|
6
|
+
|
|
7
|
+
## 目录
|
|
8
|
+
|
|
9
|
+
- [安装与前置条件](#安装与前置条件)
|
|
10
|
+
- [创建项目](#创建项目)
|
|
11
|
+
- [选择风格来源](#选择风格来源)
|
|
12
|
+
- [跑通黄金三章](#跑通黄金三章)
|
|
13
|
+
- [进入正式卷规划](#进入正式卷规划)
|
|
14
|
+
- [日常写作工作流](#日常写作工作流)
|
|
15
|
+
- [质量评审与门控决策](#质量评审与门控决策)
|
|
16
|
+
- [常见问题](#常见问题)
|
|
17
|
+
|
|
18
|
+
## 安装与前置条件
|
|
19
|
+
|
|
20
|
+
先把运行环境准备好,后面流程才能顺滑推进。
|
|
21
|
+
|
|
22
|
+
1. **安装 Node.js**:本 CLI 要求 `Node.js >= 18`。
|
|
23
|
+
```bash
|
|
24
|
+
node -v
|
|
25
|
+
```
|
|
26
|
+
2. **准备执行器环境**:
|
|
27
|
+
- 如果你使用 `/novel:*` Skill 入口,需准备好 Claude Code,并确保当前环境能访问 Claude API。
|
|
28
|
+
- 如果你是在 Codex 或其他执行器里装载本仓库的 Skills,核心前提仍是底层能调用 `novel` CLI;具体入口名以执行器环境为准。
|
|
29
|
+
- 如果你只使用 `novel` CLI 做确定性编排,则 CLI 本身**不会直接调用 LLM API**。
|
|
30
|
+
3. **安装 CLI**:
|
|
31
|
+
```bash
|
|
32
|
+
npm i -g novel-writer-cli
|
|
33
|
+
```
|
|
34
|
+
4. **验证安装**:当前 CLI 还没有 `--version` 命令,建议用帮助命令验证。
|
|
35
|
+
```bash
|
|
36
|
+
novel --help
|
|
37
|
+
```
|
|
38
|
+
或一次性运行:
|
|
39
|
+
```bash
|
|
40
|
+
npx novel-writer-cli --help
|
|
41
|
+
```
|
|
42
|
+
5. **准备项目目录**:新建一个空目录作为小说项目根目录,避免把模板文件写进现有仓库或杂乱目录。
|
|
43
|
+
|
|
44
|
+
## 创建项目
|
|
45
|
+
|
|
46
|
+
目标是把项目骨架、平台绑定和题材入口一次性定好。
|
|
47
|
+
|
|
48
|
+
### 推荐方式:使用 `/novel:start`
|
|
49
|
+
|
|
50
|
+
在空目录中执行:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
/novel:start
|
|
54
|
+
```
|
|
4
55
|
|
|
5
|
-
|
|
56
|
+
首次启动时,Skill 入口会先调用 `novel init` 建立项目边界,然后进入 Quick Start(快速起步)流程。你通常会依次确认这些信息:
|
|
57
|
+
|
|
58
|
+
1. **平台**:`qidian` / `fanqie` / `jinjiang`
|
|
59
|
+
- `tomato` 仍作为 `fanqie` 的兼容别名(alias)在系统内部工作;老项目或手动输入时仍可用。
|
|
60
|
+
- 新建项目的可见选项只展示 `fanqie(番茄)`,不会再把 `tomato` 单独列成新选项。
|
|
61
|
+
- 可用下面这张表快速判断:
|
|
62
|
+
|
|
63
|
+
| 平台 | 适合优先强调什么 |
|
|
64
|
+
|------|------------------|
|
|
65
|
+
| `qidian` | 世界差异点、系统/规则、沉浸感、长期主线承诺 |
|
|
66
|
+
| `fanqie` | 快冲突、快反馈、章末钩子、可复述的爽点 |
|
|
67
|
+
| `jinjiang` | 人物关系张力、情绪基调、CP 存在感、角色个性落地 |
|
|
68
|
+
|
|
69
|
+
2. **题材**:如玄幻、都市、科幻、历史、悬疑、言情。
|
|
70
|
+
- 启动阶段这里的选择主要用于兼容性提醒,并帮助你后续把 `brief.md` 填对。
|
|
71
|
+
- 真正决定 `genre-excitement-map.json` 与 `genre-golden-standards.json` 是否命中的,是 `brief.md` 里的 `- **题材**:` 字段。
|
|
72
|
+
- 因此后续填写 `brief.md` 时,题材字段最好与这里保持一致,否则题材映射可能不稳定。
|
|
73
|
+
3. **创作纲领(brief)**:至少把书名、核心冲突、主角概念、目标平台、目标读者写清楚。最少可以先填成这样:
|
|
74
|
+
|
|
75
|
+
```md
|
|
76
|
+
- **书名**:待定
|
|
77
|
+
- **题材**:玄幻
|
|
78
|
+
- **核心冲突**:主角必须在失控的力量体系里活下来
|
|
79
|
+
- **目标平台**:fanqie
|
|
80
|
+
- **目标读者**:喜欢快节奏升级与反转的读者
|
|
81
|
+
```
|
|
82
|
+
4. **平台绑定提醒**:`platform-profile.json.platform` 与 `platform-profile.json.scoring.genre_drive_type` 一旦写入,就视为项目的**不可变绑定**。如果你想从起点切到晋江,最稳妥的方式是新建项目目录重新初始化。
|
|
83
|
+
|
|
84
|
+
### 备选方式:直接使用 CLI
|
|
85
|
+
|
|
86
|
+
如果你想手动控制初始化,可以执行:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
mkdir my-novel && cd my-novel
|
|
90
|
+
novel init --platform fanqie
|
|
91
|
+
```
|
|
6
92
|
|
|
7
|
-
|
|
93
|
+
初始化后,项目根目录通常会看到这些关键文件:
|
|
8
94
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
95
|
+
| 文件 | 作用 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| `.checkpoint.json` | 记录当前工作流状态与断点恢复信息 |
|
|
98
|
+
| `brief.md` | 创作纲领,题材 / 平台 / 核心冲突 / 风格来源都写在这里 |
|
|
99
|
+
| `style-profile.json` | 风格指纹,由 StyleAnalyzer 提取,后续写作与润色都会读它 |
|
|
100
|
+
| `genre-excitement-map.json` | 题材 → 黄金三章 `excitement_type` 默认分配规则 |
|
|
101
|
+
| `genre-golden-standards.json` | 题材特定黄金三章评审标准 |
|
|
102
|
+
| `ai-blacklist.json` | AI 痕迹规避词库 |
|
|
103
|
+
| `web-novel-cliche-lint.json` | 可选的套路词 / 模板腔 lint 词库 |
|
|
104
|
+
| `platform-profile.json` | 平台画像,只有你指定 `--platform` 或在启动时确认平台后才会生成 |
|
|
105
|
+
| `genre-weight-profiles.json` | 动态评分权重配置;同样只会在已选择平台时一并生成 |
|
|
106
|
+
| `golden-chapter-gates.json` | 平台特定的黄金三章硬门控;同样只会在已选择平台时生成 |
|
|
107
|
+
| `platform-writing-guide.md` | 平台写作指南;同样只会在已选择平台时生成并透传给写作 Agent |
|
|
13
108
|
|
|
14
|
-
##
|
|
109
|
+
## 选择风格来源
|
|
15
110
|
|
|
16
|
-
|
|
111
|
+
这一段决定系统“往哪种文风靠”。最好把方向在开局就定清楚。
|
|
17
112
|
|
|
18
|
-
|
|
19
|
-
/novel:start
|
|
20
|
-
```
|
|
113
|
+
Quick Start 支持 4 种风格来源:
|
|
21
114
|
|
|
22
|
-
|
|
115
|
+
| 方式 | 适用场景 | `style-profile.json.source_type` |
|
|
116
|
+
|------|----------|--------------------------------|
|
|
117
|
+
| 提供原创样本 | 你已经写过 1–3 章,想保留自己的笔感 | `original` |
|
|
118
|
+
| 指定参考作者 | 你想靠近某位作者的节奏、措辞或叙事气质 | `reference` |
|
|
119
|
+
| 使用预置模板 | 你还没有样本,只想先快速开工 | `template` |
|
|
120
|
+
| 先写后提 | 先让系统试写,再从试写结果回提风格 | `write_then_extract` |
|
|
23
121
|
|
|
24
|
-
|
|
25
|
-
2. **主角概念**:一句话描述——谁 + 起始处境
|
|
26
|
-
3. **核心冲突**:一句话描述——主角要克服什么
|
|
27
|
-
4. **平台画像**:确认发布平台与叙事驱动类型(`genre_drive_type`),用于生成 `platform-profile.json` + `genre-weight-profiles.json`
|
|
122
|
+
### 什么时候选哪一种?
|
|
28
123
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
124
|
+
- **最推荐:原创样本**。这是风格最稳的来源,尤其适合已经写过开头或有旧稿的作者。
|
|
125
|
+
- **参考作者** 适合做“方向锚定”,不适合指望 1:1 模仿。系统会提取风格特征,而不是复制表层句子。
|
|
126
|
+
- **预置模板** 适合快速起盘,但后续通常还要再补样本,才能把“像你写的”这件事做实。
|
|
127
|
+
- **先写后提** 适合完全空白时的最低阻力开局,但你最好在黄金三章之后尽快回头校准。
|
|
32
128
|
|
|
33
|
-
|
|
129
|
+
### `style-profile.json` 里有什么?
|
|
34
130
|
|
|
35
|
-
|
|
131
|
+
`StyleAnalyzer` 会把样本整理成可复用的风格指纹,常见字段包括:
|
|
36
132
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
133
|
+
- `source_type`:风格来源类型。
|
|
134
|
+
- `reference_author`:如果你走的是参考作者模式,这里会记录作者名。
|
|
135
|
+
- `style_exemplars`:3–5 段代表性原文片段,供写作与润色阶段对齐质感。
|
|
136
|
+
- `writing_directives`:正向写作指令,最好用 DO / DON'T 对比结构写清“该怎么写”和“不要怎么写”。
|
|
137
|
+
- `avg_sentence_length`、`sentence_length_std_dev`、`paragraph_length_cv`:句长和段落节奏特征。
|
|
138
|
+
- `dialogue_ratio`、`description_ratio`、`action_ratio`:对话 / 描写 / 动作配比。
|
|
139
|
+
- `emotional_volatility`、`register_mixing`、`vocabulary_richness`:情绪波动、语域混合、词汇丰富度。
|
|
140
|
+
- `preferred_expressions`、`forbidden_words`:偏好表达与明确避用词。
|
|
43
141
|
|
|
44
|
-
|
|
142
|
+
如果你后续觉得文风“不像自己”,优先检查这三件事:
|
|
45
143
|
|
|
46
|
-
|
|
144
|
+
1. 样本是否足够代表你的目标风格;
|
|
145
|
+
2. `style_exemplars` 是否抓到了真正关键的段落;
|
|
146
|
+
3. `writing_directives` 是否写得具体,而不是只有“文风自然一点”这种空话。
|
|
47
147
|
|
|
48
|
-
|
|
148
|
+
## 跑通黄金三章
|
|
49
149
|
|
|
50
|
-
|
|
51
|
-
2. CharacterWeaver 创建主角和核心配角
|
|
52
|
-
3. 初始化 1 条主线故事线
|
|
53
|
-
4. StyleAnalyzer 提取风格指纹(若提供了样本)
|
|
150
|
+
M8 之后,Quick Start 的固定顺序是:`world → characters → style → f0 → trial → results`。
|
|
54
151
|
|
|
55
|
-
|
|
152
|
+
### Step F0 是什么?
|
|
56
153
|
|
|
57
|
-
|
|
154
|
+
Step F0(迷你卷规划,mini volume planning)是黄金三章之前新增的一步。它会先把第 1 卷前 3 章的规划种子做好,再进入试写。
|
|
58
155
|
|
|
59
|
-
|
|
156
|
+
执行 `quickstart:f0` 时,系统会把这些产物先写到 `staging/volumes/vol-01/`,验证通过后再提交到 `volumes/vol-01/`:
|
|
157
|
+
|
|
158
|
+
- `outline.md`:第 1–3 章的简版卷大纲
|
|
159
|
+
- `chapter-contracts/chapter-001.json` ~ `chapter-003.json`:黄金三章的 L3 章节契约
|
|
160
|
+
- `storyline-schedule.json`:故事线调度
|
|
161
|
+
- `foreshadowing.json`:伏笔计划
|
|
162
|
+
- `new-characters.json`:新角色声明(如有)
|
|
163
|
+
|
|
164
|
+
这一步的意义是:你不再是“先裸写三章,再回头补规划”,而是先拿到一版最小可用的卷规划,再让 ChapterWriter 按契约写。这样黄金三章的质量、节奏和后续可扩展性都会更稳。
|
|
165
|
+
|
|
166
|
+
### Step F(试写)会做什么?
|
|
167
|
+
|
|
168
|
+
当 F0 的规划种子通过校验并提交后,Quick Start 会进入 `quickstart:trial`。当前实现会先产出 **1 个试写章**(临时写入 `staging/quickstart/trial-chapter.md`),并优先读取 `volumes/vol-01/chapter-contracts/chapter-001.json`、卷大纲与伏笔计划来验证开局手感。
|
|
169
|
+
|
|
170
|
+
试写阶段走的仍然是完整章节流水线:
|
|
171
|
+
|
|
172
|
+
```text
|
|
60
173
|
ChapterWriter → Summarizer → StyleRefiner → QualityJudge
|
|
61
174
|
```
|
|
62
175
|
|
|
63
|
-
|
|
176
|
+
随后 `quickstart:results` 会评估这份试写章,并结合 Ch1–3 的迷你规划种子给出“进入正式卷规划 / 调整风格 / 重新试写”等决策入口。通过后,试写章和评估结果会归档到 `logs/quickstart/`,而不是直接进入正式章节目录。F0 负责先把黄金三章的迷你规划立住;Step F 则用代表性的试写章验证这个方向值不值得继续推进。
|
|
177
|
+
|
|
178
|
+
### `excitement_type` 在黄金三章里怎么用?
|
|
179
|
+
|
|
180
|
+
兴奋点类型(`excitement_type`)会写进 L3 章节契约,常见值有:`reversal`、`face_slap`、`power_up`、`reveal`、`cliffhanger`、`setup`、`null`。
|
|
181
|
+
|
|
182
|
+
- Step F0 / 卷规划时,PlotArchitect 会优先参考 `genre-excitement-map.json` 给前三章分配默认爽点类型。
|
|
183
|
+
- 例如:玄幻通常是 `setup → power_up → face_slap`,悬疑更常见 `reveal → setup → cliffhanger`。
|
|
184
|
+
- QualityJudge 在评节奏(pacing)时,会根据 `excitement_type` 切换评审口径:
|
|
185
|
+
- `setup` 看“铺垫是否有效”;
|
|
186
|
+
- 其他类型看“爽点是否落地(hit / partial / miss)”;
|
|
187
|
+
- `null` 则按普通节奏标准评估,不做额外爽点落地检查。
|
|
188
|
+
|
|
189
|
+
### 平台特定的黄金三章门控
|
|
190
|
+
|
|
191
|
+
黄金三章(golden chapters)不是只有综合分数,还会叠加平台门控和题材门控。
|
|
192
|
+
|
|
193
|
+
| 平台 | 你需要重点注意什么 |
|
|
194
|
+
|------|------------------|
|
|
195
|
+
| `fanqie` | 第 1 章主角必须在前 200 字内出现;前三章必须有明确冲突和章末钩子;核心爽点类型必须落在 `reversal / face_slap / power_up` 之一 |
|
|
196
|
+
| `qidian` | 可以稍慢,但必须持续建立世界差异点 / 系统线索;前三章 `immersion` 必须达到 `3.5` 以上 |
|
|
197
|
+
| `jinjiang` | 角色个性必须通过动作、对白、反应体现;CP 或核心关系对象必须尽早建立存在感;情感基调要站住,`style_naturalness` 必须达到 `3.5` 以上 |
|
|
198
|
+
|
|
199
|
+
除此之外,题材特定标准(genre-specific standards)还会从 `genre-golden-standards.json` 叠加一层要求:
|
|
200
|
+
|
|
201
|
+
- 玄幻更看重世界 / 力量体系存在感与沉浸感;
|
|
202
|
+
- 悬疑更看重核心疑问与逻辑自洽;
|
|
203
|
+
- 言情更看重人物关系张力、情绪钩子和 `style_naturalness`;
|
|
204
|
+
- 如果你的 `brief.md` 题材为空,或项目里缺少题材模板文件,就会退回通用标准,不会报错。
|
|
205
|
+
|
|
206
|
+
### 如果黄金三章没过怎么办?
|
|
207
|
+
|
|
208
|
+
如果没过,先看失败点到底来自平台门控、题材门控,还是常规质量评分。
|
|
209
|
+
|
|
210
|
+
- **只要黄金门控没过**,即使综合分不低,也可能被强制判为 `revise`。
|
|
211
|
+
- **如果 Step F0 或试写中断**,重新运行 `/novel:start` 即可续跑,系统会按 `quickstart_phase` 从 `style`、`f0`、`trial` 或 `results` 恢复。
|
|
212
|
+
- **如果平台 × 题材组合有风险**(例如题材与平台偏好不匹配),初始化阶段会给出 warning,但不会阻止你继续。此时更需要你在黄金三章里主动补强对应卖点。
|
|
213
|
+
|
|
214
|
+
## 进入正式卷规划
|
|
215
|
+
|
|
216
|
+
黄金三章过关后,你就从“试写阶段”进入“可持续生产阶段”。
|
|
217
|
+
|
|
218
|
+
通常在 `quickstart:results` 后,系统会建议你进入卷规划。此时再运行 `/novel:start`,会进入 `VOL_PLANNING` 分支,由 PlotArchitect 补齐正式卷规划。
|
|
219
|
+
|
|
220
|
+
### 正式卷规划会产出什么?
|
|
221
|
+
|
|
222
|
+
- `volumes/vol-01/outline.md`:本卷完整大纲
|
|
223
|
+
- `volumes/vol-01/chapter-contracts/*.json`:从第 4 章开始继续补齐的 L3 契约
|
|
224
|
+
- `volumes/vol-01/storyline-schedule.json`:多线叙事排期
|
|
225
|
+
- `volumes/vol-01/foreshadowing.json`:本卷伏笔台账
|
|
226
|
+
- `volumes/vol-01/new-characters.json`:本卷新增角色声明
|
|
227
|
+
|
|
228
|
+
如果黄金三章的 F0 种子已经存在,正式卷规划会**在原有 Ch1–3 规划基础上增量扩展**,不会覆盖掉已有契约。
|
|
229
|
+
|
|
230
|
+
### 怎么管理 `storyline-schedule.json`?
|
|
231
|
+
|
|
232
|
+
如果你写的是多线叙事,`storyline-schedule.json` 不只是“一个会生成的文件”,它决定了主线 / 副线 / 调味线在本卷的出场节奏。实操上可以这样理解:
|
|
64
233
|
|
|
65
|
-
|
|
234
|
+
- 把它当成“每章该推进哪条线、哪条线先压后放”的排期表;
|
|
235
|
+
- 当某条线连续多章不出现时,用 `/novel:status` 看休眠提醒,避免支线蒸发;
|
|
236
|
+
- 如果你在卷中途调整重心,优先通过重新规划或设定更新来改排期,而不是手写正文时临场硬拐。
|
|
66
237
|
|
|
67
|
-
|
|
238
|
+
### `canon_status` 应该怎么理解?
|
|
68
239
|
|
|
69
|
-
|
|
70
|
-
2. **调整风格设定** — 重新提供样本或修改参数
|
|
71
|
-
3. **重新试写** — 清除结果重来
|
|
240
|
+
正典状态(`canon_status`)用于告诉系统:哪些规则 / 角色“现在就生效”,哪些只是“先露头,后面再正式落地”。
|
|
72
241
|
|
|
73
|
-
|
|
242
|
+
- `established`:已生效;会被当成硬约束参与上下文组装与评审。
|
|
243
|
+
- `planned`:已被看见,但暂不强制;适合未来会兑现的设定、伏笔角色、延后上线的规则。
|
|
244
|
+
- `deprecated`:已废弃;不会继续进入写作与评审上下文。
|
|
245
|
+
- **缺失字段**:默认按 `established` 处理,这是老项目向后兼容的关键。
|
|
74
246
|
|
|
75
|
-
|
|
247
|
+
实际使用建议:
|
|
76
248
|
|
|
77
|
-
|
|
249
|
+
- 如果你已经决定某条世界规则从现在开始必须遵守,就标 `established`。
|
|
250
|
+
- 如果某个新角色只是准备在第 20 章登场,现在先给前几章做铺垫,就标 `planned`。
|
|
251
|
+
- 如果旧设定已弃用,但你又不想直接删除历史记录,可以标 `deprecated`。
|
|
78
252
|
|
|
253
|
+
## 日常写作工作流
|
|
254
|
+
|
|
255
|
+
当卷规划准备好后,你的日常动作会非常固定:续写、查看状态、必要时回顾和更新设定。
|
|
256
|
+
|
|
257
|
+
### 续写下一章
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
/novel:continue
|
|
79
261
|
```
|
|
80
|
-
|
|
262
|
+
|
|
263
|
+
底层章节流水线是:
|
|
264
|
+
|
|
265
|
+
```text
|
|
266
|
+
ChapterWriter → Summarizer → StyleRefiner → QualityJudge
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
每章至少会留下这些正式产物:
|
|
270
|
+
|
|
271
|
+
- `chapters/chapter-XXX.md`:章节正文
|
|
272
|
+
- `summaries/chapter-XXX-summary.md`:章节摘要
|
|
273
|
+
- `evaluations/chapter-XXX-eval.json`:质量评估
|
|
274
|
+
- `state/current-state.json`:世界状态快照(提交后更新)
|
|
275
|
+
|
|
276
|
+
如果你想一次推进多章:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
/novel:continue 3
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
建议单次不要太多,通常 `1–5` 章最容易控制质量和成本。
|
|
283
|
+
|
|
284
|
+
### 查看项目状态
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
/novel:status
|
|
81
288
|
```
|
|
82
289
|
|
|
83
|
-
|
|
290
|
+
你会看到的典型信息包括:
|
|
291
|
+
|
|
292
|
+
- 当前写到哪一卷、哪一章
|
|
293
|
+
- 最近章节评分趋势
|
|
294
|
+
- 伏笔推进情况
|
|
295
|
+
- 故事线节奏 / 休眠提醒
|
|
296
|
+
- 成本与执行摘要
|
|
297
|
+
|
|
298
|
+
### 什么时候重新回到 `/novel:start`?
|
|
299
|
+
|
|
300
|
+
`/novel:start` 不只用于开新项目,它还是很多“非写正文”动作的入口:
|
|
301
|
+
|
|
302
|
+
- 规划下一卷
|
|
303
|
+
- 做卷末回顾
|
|
304
|
+
- 查看质量回顾
|
|
305
|
+
- 更新世界观 / 角色设定
|
|
306
|
+
- 导入研究资料
|
|
307
|
+
|
|
308
|
+
如果你写到中途断掉,也优先重新运行 `/novel:start`。这个入口是幂等的,适合恢复现场。
|
|
309
|
+
|
|
310
|
+
## 质量评审与门控决策
|
|
311
|
+
|
|
312
|
+
你最终要学会读的,不只是“这章总分多少”,而是“系统为什么这么判”。
|
|
313
|
+
|
|
314
|
+
### 先看两层门控
|
|
315
|
+
|
|
316
|
+
QualityJudge 采用双轨验收:
|
|
317
|
+
|
|
318
|
+
1. **硬约束检查**:L1 / L2 / L3 / LS 合规校验;如果有 high-confidence violation,会直接触发强制修订。
|
|
319
|
+
2. **质量评分**:按 8 个维度做加权综合分。
|
|
320
|
+
|
|
321
|
+
### 8 维度默认权重(legacy fallback)
|
|
322
|
+
|
|
323
|
+
> 实际权重优先读取 `platform-profile.json.scoring` + `genre-weight-profiles.json` 计算得到的动态权重;下表只是缺省回退值。
|
|
324
|
+
|
|
325
|
+
| 维度 | 默认权重 |
|
|
326
|
+
|------|----------|
|
|
327
|
+
| 情节逻辑(plot_logic) | 18% |
|
|
328
|
+
| 角色塑造(character) | 18% |
|
|
329
|
+
| 沉浸感(immersion) | 15% |
|
|
330
|
+
| 风格自然度(style_naturalness) | 15% |
|
|
331
|
+
| 伏笔处理(foreshadowing) | 10% |
|
|
332
|
+
| 节奏(pacing) | 8% |
|
|
333
|
+
| 情感冲击(emotional_impact) | 8% |
|
|
334
|
+
| 故事线连贯(storyline_coherence) | 8% |
|
|
335
|
+
|
|
336
|
+
如果平台画像启用了 `hook_policy.required=true`,还会额外启用章末钩子强度(`hook_strength`)维度,但它是否计入总分,要看动态权重配置。
|
|
337
|
+
|
|
338
|
+
### 分数对应什么动作?
|
|
339
|
+
|
|
340
|
+
| 结果 | 说明 |
|
|
341
|
+
|------|------|
|
|
342
|
+
| `>= 4.0` | 直接通过 |
|
|
343
|
+
| `3.5 - 3.9` | 先走一次 StyleRefiner 二次润色 |
|
|
344
|
+
| `3.0 - 3.4` | 自动修订(revision) |
|
|
345
|
+
| `2.0 - 2.9` | 通知你进入人工审核,由你决定局部重写还是整章重写;在 Skill 入口里通常表现为流程暂停等待确认 |
|
|
346
|
+
| `< 2.0` | 强制全章重写 |
|
|
347
|
+
| 任意分数 + high-confidence violation | 强制修订,分数不豁免 |
|
|
348
|
+
|
|
349
|
+
### 怎么读低分原因?
|
|
350
|
+
|
|
351
|
+
可以用“维度 → 处理动作”的方式看:
|
|
352
|
+
|
|
353
|
+
- **情节逻辑 / 伏笔处理低**:回头看 `outline.md`、L3 契约和 `foreshadowing.json` 是否已经给出足够明确的推进线索。
|
|
354
|
+
- **角色塑造 / 情感冲击低**:补人物反应、内心活动和关系张力,不要只堆动作和信息。
|
|
355
|
+
- **沉浸感 / 风格自然度低**:检查 `style-profile.json` 是否真的代表你的目标文风,必要时更新样本或收紧 `writing_directives`。如果主要是 `style_naturalness` 低,再往下看 7 个常见信号:
|
|
356
|
+
- `blacklist_hit_rate`:套话、黑名单词或连接词命中过多;
|
|
357
|
+
- `sentence_repetition_rate`:相邻句式太像,读起来像同一个模版反复回放;
|
|
358
|
+
- `sentence_length_std_dev`:句长过匀,缺少长短句切换;
|
|
359
|
+
- `paragraph_length_cv`:段长过匀,段落像复制粘贴;
|
|
360
|
+
- `vocabulary_richness`:高频表达反复回流,词汇层次不够;
|
|
361
|
+
- `narration_connector_count`:靠“于是 / 然后 / 随即”一类连接词串段;
|
|
362
|
+
- `humanize_technique_variety`:缺少停顿、迟疑、误差感、自我修正等“像人写的”细节。
|
|
363
|
+
- 此外,`structural_rule_violations` 还会作为附加罚分锚点,说明正文结构或确定性 lint 规则也在拖分。
|
|
364
|
+
- **节奏低**:先看当前章的 `excitement_type` 是否和正文落点一致,再看是否缺冲突、缺回报或铺垫太空。
|
|
365
|
+
|
|
366
|
+
### `excitement_type` 对评审的实际影响
|
|
367
|
+
|
|
368
|
+
这是 M8 后最值得理解的新点之一:
|
|
369
|
+
|
|
370
|
+
- `setup`:系统会更看“有没有把后续期待和因果链搭起来”,而不是强求本章爆点。
|
|
371
|
+
- `reversal` / `face_slap` / `power_up` / `reveal` / `cliffhanger`:系统会结合大纲目标、角色能力和情节逻辑,判断这类爽点有没有真正落地,并把判断写进评估结果。
|
|
372
|
+
- `null`:说明这章没有明确爽点类型标注,QualityJudge 会按常规节奏标准判断。
|
|
373
|
+
|
|
374
|
+
`excitement_type` 不是让作者去背枚举,而是告诉系统:这一章想提供哪类阅读回报,从而减少节奏误判。
|
|
84
375
|
|
|
85
376
|
## 常见问题
|
|
86
377
|
|
|
87
|
-
**
|
|
88
|
-
A
|
|
378
|
+
**Q1:黄金三章或日常章节评分很低,第一步该做什么?**
|
|
379
|
+
A:先不要立刻大修正文,先看 `evaluations/*-eval.json` 里是哪个维度拖分。如果低分集中在 `style_naturalness` 或 `immersion`,优先补风格样本;如果低在 `plot_logic`、`foreshadowing`,优先回看卷大纲和 L3 契约。
|
|
380
|
+
|
|
381
|
+
**Q2:我能跳过黄金三章,直接进入正式写作吗?**
|
|
382
|
+
A:不建议。M8 的 Step F0 + Step F 就是为了让你在最早阶段验证平台门控、题材门控、风格与节奏是否匹配;跳过它,后面返工成本通常更高。
|
|
383
|
+
|
|
384
|
+
**Q3:项目写到一半,能把平台从番茄切到晋江吗?**
|
|
385
|
+
A:不建议在同一项目里硬切。因为 `platform-profile.json.platform` 和 `scoring.genre_drive_type` 是不可变绑定;想换平台,最稳的做法是新建项目目录重新初始化,再把可复用素材迁过去。
|
|
89
386
|
|
|
90
|
-
**
|
|
91
|
-
A
|
|
387
|
+
**Q4:我可以手动调 `style-profile.json` 吗?**
|
|
388
|
+
A:可以,而且很多时候值得这么做。优先改 `style_exemplars`、`writing_directives`、`preferred_expressions` 这类高杠杆字段;统计字段如果你没有明确依据,不要为了“看起来专业”乱填。
|
|
92
389
|
|
|
93
|
-
**
|
|
94
|
-
A
|
|
390
|
+
**Q5:`canon_status` 里的 `planned` 和 `deprecated` 什么时候用?**
|
|
391
|
+
A:`planned` 适合未来才会正式生效的规则或角色,用来给伏笔和铺垫留位置;`deprecated` 适合保留历史记录但不再参与当前创作。老文件没有这个字段时,会自动按 `established` 处理。
|
|
95
392
|
|
|
96
|
-
**
|
|
97
|
-
A
|
|
393
|
+
**Q6:`excitement_type` 需要我每章手填吗?**
|
|
394
|
+
A:通常不需要。系统会在 Step F0 或正式卷规划时自动生成;你只有在手动维护 L3 契约,或者觉得当前章目标体验与规划不一致时,才需要手动调整。
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"platform": {
|
|
31
31
|
"type": "string",
|
|
32
|
-
"enum": ["qidian", "tomato"],
|
|
32
|
+
"enum": ["qidian", "tomato", "fanqie", "jinjiang"],
|
|
33
33
|
"description": "Immutable platform binding chosen at init."
|
|
34
34
|
},
|
|
35
35
|
"created_at": {
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"properties": {
|
|
104
104
|
"max_new_entities_per_chapter": { "type": "integer", "minimum": 0 },
|
|
105
105
|
"max_unknown_entities_per_chapter": { "type": "integer", "minimum": 0 },
|
|
106
|
-
"max_new_terms_per_1k_words": { "type": "
|
|
106
|
+
"max_new_terms_per_1k_words": { "type": "number", "minimum": 0 }
|
|
107
107
|
}
|
|
108
108
|
},
|
|
109
109
|
"compliance_policy": {
|