@cloud411716/fancy-webnovel 1.0.46 → 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.
Files changed (134) hide show
  1. package/client.js +183 -0
  2. package/cordis.patch.yml +0 -14
  3. package/index.js +21 -37
  4. package/lib/chinese-num.js +111 -0
  5. package/lib/deployed-state.js +141 -0
  6. package/lib/error-codes.js +104 -0
  7. package/lib/infra.js +569 -0
  8. package/lib/llm-wiki.js +109 -0
  9. package/lib/safe-rm.js +94 -0
  10. package/lib/scraper-utils.js +165 -0
  11. package/package.json +37 -5
  12. package/plugins/fancy-analyze/command-input.js +65 -0
  13. package/plugins/fancy-analyze/index.js +973 -0
  14. package/plugins/fancy-analyze/schema-analyze.md +379 -0
  15. package/plugins/fancy-analyze/schema-write.md +178 -0
  16. package/plugins/fancy-analyze/scripts/split_source.js +292 -0
  17. package/plugins/fancy-analyze/summary-progress.js +431 -0
  18. package/plugins/fancy-analyze/templates.js +881 -0
  19. package/plugins/fancy-bootstrap/index.js +168 -0
  20. package/plugins/fancy-bootstrap/scripts/init.js +143 -0
  21. package/plugins/fancy-bootstrap/scripts/path-utils.js +21 -0
  22. package/plugins/fancy-bootstrap/templates.js +54 -0
  23. package/plugins/fancy-import/import-core.js +1118 -0
  24. package/plugins/fancy-import/import-driver.js +581 -0
  25. package/plugins/fancy-import/index.js +730 -0
  26. package/plugins/fancy-import/prompts/01-import-prompt.md +106 -0
  27. package/plugins/fancy-import/templates.js +49 -0
  28. package/plugins/fancy-scan/index.js +319 -0
  29. package/plugins/fancy-scan/scripts/run-scan.js +520 -0
  30. package/plugins/fancy-scan/scripts/scrapers/fanqie-rank-scraper.js +794 -0
  31. package/plugins/fancy-scan/scripts/scrapers/jjwxc-rank-scraper.js +339 -0
  32. package/plugins/fancy-scan/scripts/scrapers/qimao-rank-scraper.js +611 -0
  33. package/plugins/fancy-scan/templates.js +295 -0
  34. package/plugins/fancy-story-builder/deploy-manifest.js +239 -0
  35. package/plugins/fancy-story-builder/deslop-driver.js +821 -0
  36. package/plugins/fancy-story-builder/flesh-output.js +155 -0
  37. package/plugins/fancy-story-builder/index.js +3152 -0
  38. package/plugins/fancy-story-builder/prompts/01-skeleton-prompt.md +553 -0
  39. package/plugins/fancy-story-builder/prompts/02-flesh-prompt.md +540 -0
  40. package/plugins/fancy-story-builder/prompts/03-rhythm-prompt.md +504 -0
  41. package/plugins/fancy-story-builder/prompts/04-writing-prompt.md +188 -0
  42. package/plugins/fancy-story-builder/prompts/05-deslop-prompt.md +96 -0
  43. package/plugins/fancy-story-builder/purpose-template.md +107 -0
  44. package/plugins/fancy-story-builder/references/formulas-rhythm.json +302 -0
  45. package/plugins/fancy-story-builder/references/formulas-skeleton.json +229 -0
  46. package/plugins/fancy-story-builder/references/glossary.md +585 -0
  47. package/plugins/fancy-story-builder/references/index.md +490 -0
  48. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/00-index.md +174 -0
  49. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/01-scene.md +150 -0
  50. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/02-chapter-workflow.md +99 -0
  51. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/03-opening-chapter.md +104 -0
  52. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/04-dialogue-mastery.md +274 -0
  53. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/05-genre-formulas.md +432 -0
  54. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/06-tone-ensemble.md +259 -0
  55. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/07-ledger-audit.md +222 -0
  56. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/08-diagnosis-revision.md +205 -0
  57. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/09-reading-power.md +135 -0
  58. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/10-deslop.md +129 -0
  59. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/00-index.md +98 -0
  60. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/01-upgrade-rhythm.md +300 -0
  61. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/02-arc-rhythm.md +168 -0
  62. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/03-highpoint-hooks.md +189 -0
  63. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/04-satisfaction.md +226 -0
  64. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/05-foreshadow-density.md +195 -0
  65. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/06-chapter-outline.md +226 -0
  66. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/07-audit.md +163 -0
  67. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/00-index.md +100 -0
  68. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/01-character.md +239 -0
  69. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/02-worldbuilding.md +245 -0
  70. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/03-relations.md +181 -0
  71. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/04-emotion-methods.md +286 -0
  72. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/05-audit.md +177 -0
  73. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/00-index.md +91 -0
  74. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/01-positioning.md +208 -0
  75. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/02-packaging.md +135 -0
  76. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/03-entities.md +305 -0
  77. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/04-conflict.md +328 -0
  78. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/05-quota.md +187 -0
  79. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/06-audit.md +142 -0
  80. package/plugins/fancy-story-builder/rhythm-output.js +140 -0
  81. package/plugins/fancy-story-builder/schema-setting.md +324 -0
  82. package/plugins/fancy-story-builder/scripts/ai-patterns.js +619 -0
  83. package/plugins/fancy-story-builder/scripts/check-guide-compliance.js +289 -0
  84. package/plugins/fancy-story-builder/scripts/content-quality.js +413 -0
  85. package/plugins/fancy-story-builder/scripts/deslop-validate.js +143 -0
  86. package/plugins/fancy-story-builder/scripts/error-classes.js +112 -0
  87. package/plugins/fancy-story-builder/scripts/flesh-validate.js +1189 -0
  88. package/plugins/fancy-story-builder/scripts/formula-engine.js +112 -0
  89. package/plugins/fancy-story-builder/scripts/graph-utils.js +1385 -0
  90. package/plugins/fancy-story-builder/scripts/label-coverage.js +171 -0
  91. package/plugins/fancy-story-builder/scripts/prompt-drift-check.js +441 -0
  92. package/plugins/fancy-story-builder/scripts/reading-power.js +298 -0
  93. package/plugins/fancy-story-builder/scripts/rhythm-validate.js +1216 -0
  94. package/plugins/fancy-story-builder/scripts/semantic-lint.js +377 -0
  95. package/plugins/fancy-story-builder/scripts/skeleton-quota.js +145 -0
  96. package/plugins/fancy-story-builder/scripts/skeleton-validate.js +1832 -0
  97. package/plugins/fancy-story-builder/scripts/stage-batches.js +1371 -0
  98. package/plugins/fancy-story-builder/scripts/stage-contract.js +417 -0
  99. package/plugins/fancy-story-builder/scripts/upstream-query.js +198 -0
  100. package/plugins/fancy-story-builder/scripts/writing-rules.js +167 -0
  101. package/plugins/fancy-story-builder/scripts/writing-validate.js +682 -0
  102. package/plugins/fancy-story-builder/skeleton-output.js +199 -0
  103. package/plugins/fancy-story-builder/stage-driver.js +1049 -0
  104. package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//346/227/266/345/272/217/346/230/240/345/260/204/346/250/241/346/235/277.json +204 -0
  105. package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//347/253/240/350/212/202/347/273/206/347/272/262/346/250/241/346/235/277.json +34 -0
  106. package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//347/253/240/350/212/202/350/247/204/345/210/222/346/250/241/346/235/277.json +24 -0
  107. package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//350/212/202/345/245/217/345/217/202/346/225/260/346/250/241/346/235/277.json +27 -0
  108. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//344/270/226/347/225/214/350/247/202/350/247/204/345/210/231/346/250/241/346/235/277.json +66 -0
  109. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/205/263/351/224/256/351/201/223/345/205/267/346/250/241/346/235/277.json +76 -0
  110. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/206/262/347/252/201/346/250/241/346/235/277.json +72 -0
  111. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/211/247/346/203/205/346/250/241/346/235/277.json +37 -0
  112. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/212/277/345/212/233/346/250/241/346/235/277.json +53 -0
  113. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/234/260/347/202/271/346/250/241/346/235/277.json +40 -0
  114. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//347/273/223/345/261/200/346/250/241/346/235/277.json +79 -0
  115. package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//350/247/222/350/211/262/346/250/241/346/235/277.json +132 -0
  116. package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/205/263/347/263/273/346/250/241/346/235/277.json +133 -0
  117. package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/256/236/344/275/223/346/250/241/346/235/277.json +160 -0
  118. package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/261/202/347/272/247/346/250/241/346/235/277.json +65 -0
  119. package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//346/241/206/346/236/266/346/250/241/346/235/277.json +134 -0
  120. package/plugins/fancy-story-builder/templates.js +1248 -0
  121. package/plugins/fancy-story-builder/wiki-references.js +204 -0
  122. package/plugins/fancy-story-builder/writing-driver.js +1061 -0
  123. package/plugins/fancy-topic/index.js +704 -0
  124. package/plugins/fancy-topic/scripts/select-topic.js +274 -0
  125. package/plugins/fancy-topic/templates.js +373 -0
  126. package/commands/bootstrap/index.js +0 -164
  127. package/commands/bootstrap/init-project.js +0 -121
  128. package/commands/scan/index.js +0 -283
  129. package/commands/scan/platforms/fanqie.js +0 -146
  130. package/commands/scan/platforms/jinjiang.js +0 -143
  131. package/commands/scan/platforms/qidian.js +0 -102
  132. package/commands/scan/platforms/qimao.js +0 -127
  133. package/commands/scan/scraper.js +0 -195
  134. package/infra.js +0 -160
@@ -0,0 +1,379 @@
1
+ # 小说写作技法分析规范(必须严格遵循)
2
+
3
+ ## ⚠️ 语言强制要求
4
+
5
+ **所有输出内容必须是中文,包括:**
6
+ - 文件名:使用中文,格式为`书名-技法名-章节名.md`,如`全球高武-悬念设置-第1章.md`
7
+ - title:使用中文,格式为`书名 技法名 章号`,如`全球高武 悬念设置 第1章`
8
+ - 正文内容:所有文字描述必须使用中文
9
+ - 表格内容:所有表格中的文字必须使用中文
10
+ - YAML frontmatter:tags 中的文字使用中文
11
+
12
+ **禁止输出英文内容:**
13
+ - ❌ 英文描述、英文分析
14
+ - ❌ 英文标签、英文关键词
15
+ - ❌ 中英混合
16
+
17
+ ---
18
+
19
+ ## 核心目标
20
+
21
+ 从原文中提取**可复用的写作技法**,而非仅仅是信息归档。每一页都要能回答:这个技法怎么用?何时用?为何有效?
22
+
23
+ ---
24
+
25
+ ## ⚠️ 最重要的工作流程(必须严格执行)
26
+
27
+ ### 第一步:系统化分析
28
+ 对于**每一章**的原文,**必须**从以下**全部16种**类型逐一进行分析:
29
+
30
+ | 序号 | TYPE 值 | 中文名称 |
31
+ |------|---------|---------|
32
+ | 1 | 叙事视角 | 叙事视角 |
33
+ | 2 | 章节结构 | 章节结构 |
34
+ | 3 | 节奏韵律 | 节奏韵律 |
35
+ | 4 | 对话技巧 | 对话技巧 |
36
+ | 5 | 描写技法 | 描写技法 |
37
+ | 6 | 伏笔回收 | 伏笔回收 |
38
+ | 7 | 世界观构建 | 世界观构建 |
39
+ | 8 | 角色弧光 | 角色弧光 |
40
+ | 9 | 情节机制 | 情节机制 |
41
+ | 10 | 开头钩子 | 开头钩子 |
42
+ | 11 | 结尾收束 | 结尾收束 |
43
+ | 12 | 句式变化 | 句式变化 |
44
+ | 13 | 段落布局 | 段落布局 |
45
+ | 14 | 场景转换 | 场景转换 |
46
+ | 15 | 情绪渲染 | 情绪渲染 |
47
+ | 16 | 张力构建 | 张力构建 |
48
+
49
+ **规则:**
50
+ - 每种类型都必须分析,回答"有"或"无"
51
+ - **禁止跳过任何类型**
52
+ - 如果"有":必须引用原文片段并写出分析
53
+
54
+ ### 第二步:创建页面(仅限"有"的情况)
55
+
56
+ **⚠️ 强制约束:分析结果为"有"的类型,必须创建对应的独立页面**
57
+
58
+ - 只有**分析结果为"有"**的类型才需要创建独立页面
59
+ - 如果某类型分析结果为"无",**不要创建该类型的页面**
60
+ - **禁止**在 related 或 wikilink 中引用尚未创建页面的技法
61
+
62
+ ### 第三步:填写来源页面的"可深挖的技法点"
63
+ - 在来源页面的"可深挖的技法点"中,列出所有分析结果为"有"的技法
64
+ - 这些技法应该已经创建了独立页面
65
+
66
+ ### ⚠️ 强制约束:禁止遗漏必须创建的页面
67
+
68
+ **本章所有分析结果为"有"的技法页面必须全部创建完成后,才能处理下一章。**
69
+
70
+ 具体要求:
71
+ 1. **每章必须完成的事项清单:**
72
+ - [ ] 完成全部16种类型的分析(回答"有"或"无")
73
+ - [ ] 对于所有"有"的类型,创建对应的独立页面
74
+ - [ ] 填写来源页面的"可深挖的技法点"
75
+ - [ ] 确保所有页面之间的交叉引用(related、wikilink)都是有效的
76
+
77
+ 2. **禁止的行为:**
78
+ - ❌ 跳过任何一种类型的分析
79
+ - ❌ 分析结果为"有"但不创建对应页面
80
+ - ❌ 创建的页面数量少于"有"的类型数量
81
+ - ❌ 留下未完成的页面(如:创建了文件但没有填写内容)
82
+ - ❌ 在所有"有"的页面创建完成之前,处理下一章
83
+
84
+ 3. **检查清单示例:**
85
+
86
+ 如果某章的分析结果如下:
87
+
88
+ | 类型 | 分析结果 |
89
+ |------|----------|
90
+ | 叙事视角 | 有 |
91
+ | 章节结构 | 无 |
92
+ | 节奏韵律 | 有 |
93
+ | ... | ... |
94
+ | 张力构建 | 无 |
95
+
96
+ 则**必须创建**以下页面:
97
+ - `wiki/叙事视角/全球高武-叙事视角-第X章.md`
98
+ - `wiki/节奏韵律/全球高武-节奏韵律-第X章.md`
99
+ - `wiki/来源/全球高武-第X章-xxx.md`
100
+
101
+ **禁止**在未完成上述页面创建之前处理下一章。
102
+
103
+ ---
104
+
105
+ ## 页面类型(输出目录)
106
+
107
+ | TYPE 值 | 目录 | 中文名称 | 何时创建 |
108
+ |---------|------|---------|---------|
109
+ | 叙事视角 | wiki/叙事视角/ | 叙事视角 | 分析结果为"有"时 |
110
+ | 章节结构 | wiki/章节结构/ | 章节结构 | 分析结果为"有"时 |
111
+ | 节奏韵律 | wiki/节奏韵律/ | 节奏韵律 | 分析结果为"有"时 |
112
+ | 对话技巧 | wiki/对话技巧/ | 对话技巧 | 分析结果为"有"时 |
113
+ | 描写技法 | wiki/描写技法/ | 描写技法 | 分析结果为"有"时 |
114
+ | 伏笔回收 | wiki/伏笔回收/ | 伏笔回收 | 分析结果为"有"时 |
115
+ | 世界观构建 | wiki/世界观构建/ | 世界观构建 | 分析结果为"有"时 |
116
+ | 角色弧光 | wiki/角色弧光/ | 角色弧光 | 分析结果为"有"时 |
117
+ | 情节机制 | wiki/情节机制/ | 情节机制 | 分析结果为"有"时 |
118
+ | 开头钩子 | wiki/开头钩子/ | 开头钩子 | 分析结果为"有"时 |
119
+ | 结尾收束 | wiki/结尾收束/ | 结尾收束 | 分析结果为"有"时 |
120
+ | 句式变化 | wiki/句式变化/ | 句式变化 | 分析结果为"有"时 |
121
+ | 段落布局 | wiki/段落布局/ | 段落布局 | 分析结果为"有"时 |
122
+ | 场景转换 | wiki/场景转换/ | 场景转换 | 分析结果为"有"时 |
123
+ | 情绪渲染 | wiki/情绪渲染/ | 情绪渲染 | 分析结果为"有"时 |
124
+ | 张力构建 | wiki/张力构建/ | 张力构建 | 分析结果为"有"时 |
125
+ | 来源 | wiki/来源/ | 来源 | **每章必创建**,包含完整分析结果 |
126
+
127
+ **⚠️ TYPE 值必须与上表第一列精确匹配,禁止使用未定义的 TYPE**
128
+
129
+ ---
130
+
131
+ ## 文件名规则
132
+
133
+ **格式:`书名-技法名-章节名.md`**
134
+
135
+ | 规则 | 正确示例 | 错误示例 |
136
+ |------|---------|---------|
137
+ | 必须包含书名 | `全球高武-节奏韵律-第1章.md` | `节奏韵律-第1章.md` |
138
+ | 技法名必须与目录名一致 | `全球高武-节奏韵律-第1章.md` | `全球高武-张弛交替-第1章.md` |
139
+ | 章节名必须与文件名中的章号一致 | `全球高武-情绪渲染-第1章.md` | `全球高武-情绪渲染-第2章.md` |
140
+ | 禁止下划线 | `全球高武-对话潜台词-第3章.md` | `dialogue_ch3.md` |
141
+ | 禁止空格 | `全球高武-情绪渲染-第10章.md` | `emotion ch10.md` |
142
+
143
+ **⚠️ 禁止使用子技法名作为文件名**:
144
+ - 正确:`全球高武-节奏韵律-第1章.md`(节奏韵律目录下的一级技法名)
145
+ - 错误:`全球高武-张弛交替-第1章.md`(张弛交替是节奏韵律的子技法)
146
+ - 即使某章使用了"张弛交替"这种具体技法,文件名仍应为 `全球高武-节奏韵律-第1章.md`,在文件内部用 `# 张弛交替` 来标记具体技法
147
+
148
+ ---
149
+
150
+ ## Title 规则
151
+
152
+ **Title 必须从文件名派生,格式:`书名 技法名 章号`**
153
+
154
+ | 文件名 | title |
155
+ |--------|-------|
156
+ | `全球高武-悬念设置-第1章.md` | `全球高武 悬念设置 第1章` |
157
+ | `全球高武-对话潜台词-通用.md` | `全球高武 对话潜台词 通用` |
158
+
159
+ ---
160
+
161
+ ## Frontmatter 格式
162
+
163
+ ```yaml
164
+ ---
165
+ type: 伏笔回收
166
+ title: 全球高武 伏笔回收 第3章
167
+ tags: [悬念, 伏笔, 技法]
168
+ related: [全球高武-情绪渲染-第3章, 全球高武-开头钩子-第3章]
169
+ created: YYYY-MM-DD
170
+ updated: YYYY-MM-DD
171
+ sources: [第3章.txt]
172
+ ---
173
+ ```
174
+
175
+ **⚠️ related 中的引用必须满足:被引用的页面必须已经创建(第二步已创建),且格式为`书名-技法名-章节名`**
176
+
177
+ ---
178
+
179
+ ## 交叉引用规则(关键)
180
+
181
+ 1. **related 引用规则**:`related: [全球高武-情绪渲染-第3章]`
182
+ - **前提**:被引用的页面必须已创建
183
+ - **格式为`书名-技法名-章节名`**
184
+ - **禁止**:引用不存在的页面
185
+
186
+ 2. **正文 wikilink**:`[[全球高武-情绪渲染-第3章]]`
187
+ - 同样必须引用已创建的页面,且格式为`书名-技法名-章节名`
188
+
189
+ 3. **禁止**在 wikilink 中加目录前缀:`[[人物/方平]]`、`[[wiki/xxx]]`
190
+
191
+ ---
192
+
193
+ ## 技法页面内容模板
194
+
195
+ 每个技法页面必须使用**多级标题结构**:
196
+
197
+ ```markdown
198
+ # 张弛交替
199
+
200
+ ## 技法定义
201
+
202
+ 张弛交替是指在叙事中交替使用紧张和放松的节奏,让读者在紧张之后得到舒缓,避免疲劳。
203
+
204
+ ## 原理解析
205
+
206
+ 为什么这个技法有效?读者心理机制是什么?
207
+
208
+ ## 使用时机
209
+
210
+ 什么时候适合用这个技法?什么情况下不适用?
211
+
212
+ ## 章节实例
213
+
214
+ ### 实例1:第X章
215
+ **原文片段:**
216
+ > 原文摘录...
217
+
218
+ **技法分析:**
219
+ 这里如何运用该技法?效果如何?
220
+
221
+ ## 可复用的抽象规则
222
+
223
+ 从实例中提炼出的通用规则:
224
+ 1. 规则1
225
+ 2. 规则2
226
+
227
+ ---
228
+
229
+ # 欲扬先抑
230
+
231
+ ## 技法定义
232
+
233
+ 欲扬先抑是指先描述低落或困难的情况,再转向高潮或成功的叙事手法。
234
+
235
+ ## 原理解析
236
+
237
+ ...
238
+
239
+ ## 使用时机
240
+
241
+ ...
242
+
243
+ ## 章节实例
244
+
245
+ ### 实例1:第X章
246
+ ...
247
+
248
+ ## 可复用的抽象规则
249
+
250
+ ...
251
+ ```
252
+
253
+ **结构说明:**
254
+ - `# 具体技法名`(一级标题):标记本章使用的具体技法名称,可以出现多次(每个具体技法一个)
255
+ - `## 技法定义`(二级标题):用一句话定义这个具体技法
256
+ - `## 原理解析`(二级标题):为什么这个技法有效?
257
+ - `## 使用时机`(二级标题):什么时候适合用?什么情况下不适用?
258
+ - `## 章节实例`(二级标题):具体章节中的使用示例
259
+ - `### 实例N`(三级标题):第X章的实例
260
+ - `## 可复用的抽象规则`(二级标题):从实例中提炼出的通用规则
261
+
262
+ **⚠️ 注意**:
263
+ - 每个 `# 具体技法名` 下面都必须包含完整的 `##` 二级结构
264
+ - 同一章中可以使用多种不同的具体技法,每个都有自己的一级标题和二级结构
265
+ - 文件名必须是 `全球高武-节奏韵律-第1章.md`,而不是 `全球高武-张弛交替-第1章.md`
266
+
267
+ ---
268
+
269
+ ## 来源页面格式(来源)
270
+
271
+ **⚠️ 强制约束:必须先填写下面的"列表"表格,才能继续分析每种技法。禁止跳过此表格。**
272
+
273
+ ```yaml
274
+ ---
275
+ type: 来源
276
+ title: 全球高武 第3章 气血检查
277
+ tags: []
278
+ related: [全球高武-悬念设置-第3章, 全球高武-对话潜台词-第3章]
279
+ created: YYYY-MM-DD
280
+ updated: YYYY-MM-DD
281
+ sources: [raw/sources/全球高武/第3章/气血检查.txt]
282
+ ---
283
+
284
+ # 第3章 气血检查
285
+
286
+ ## 本章核心事件
287
+ (3-5句话概括本章发生的事)
288
+
289
+ ## 技法分析(全部16种)
290
+
291
+ ### 列表
292
+
293
+ | 技法 | 有/无 |
294
+ |------|-------|
295
+ | 叙事视角 | 有/无 |
296
+ | 章节结构 | 有/无 |
297
+ | 节奏韵律 | 有/无 |
298
+ | 对话技巧 | 有/无 |
299
+ | 描写技法 | 有/无 |
300
+ | 伏笔回收 | 有/无 |
301
+ | 世界观构建 | 有/无 |
302
+ | 角色弧光 | 有/无 |
303
+ | 情节机制 | 有/无 |
304
+ | 开头钩子 | 有/无 |
305
+ | 结尾收束 | 有/无 |
306
+ | 句式变化 | 有/无 |
307
+ | 段落布局 | 有/无 |
308
+ | 场景转换 | 有/无 |
309
+ | 情绪渲染 | 有/无 |
310
+ | 张力构建 | 有/无 |
311
+
312
+ ### 叙事视角
313
+ 【有/无】
314
+ (有的话:原文片段 + 技法分析)
315
+
316
+ ### 章节结构
317
+ 【有/无】
318
+ ...
319
+
320
+ (按顺序罗列全部16种类型)
321
+
322
+ ## 可深挖的技法点
323
+ (只列出分析结果为"有"的技法,这些技法应该有独立的页面)
324
+ - 全球高武-悬念设置-第3章
325
+ - 全球高武-对话潜台词-第3章
326
+ ```
327
+
328
+ ---
329
+
330
+ ## 常见错误
331
+
332
+ ### ❌ 引用未创建的页面
333
+ ```
334
+ ❌ 在全球高武-伏笔回收-第1章的 related 中写 [全球高武-悬念设置-第1章],但全球高武-悬念设置-第1章.md 尚未创建
335
+ ✓ 只有创建了全球高武-悬念设置-第1章.md 后,才能在 related 中引用
336
+ ```
337
+
338
+ ### ❌ 为"无"的类型创建页面
339
+ ```
340
+ ❌ 某章没有使用对话潜台词技法,但仍然创建了"全球高武-对话潜台词-第X章.md"
341
+ ✓ 只有分析结果为"有"时才创建页面
342
+ ```
343
+
344
+ ### ❌ 只有描述,没有提炼
345
+ ```
346
+ ❌ 这个章节用了悬念设置,让读者想看下去
347
+ ✓ 这个章节在第3段埋下"方平的真实身份"这个悬念,
348
+ 通过...的描写制造...的感觉,在第8段通过...事件回收。
349
+ 通用规则:当...时,可以用"身份悬念"来吸引读者。
350
+ ```
351
+
352
+ ---
353
+
354
+ ## 第四步:完整性检查与补充
355
+
356
+ **⚠️ 必须根据"### 列表"表格检查并补充缺失的页面:**
357
+
358
+ 1. **逐项核对**:对照"### 列表"表格中所有"有"的技法
359
+ 2. **检查文件夹**:检查 `wiki/{技法名}/` 目录下是否存在对应的页面文件(文件名为`书名-技法名-第X章.md`格式)
360
+ 3. **补充缺失**:如果某个"有"的技法在对应文件夹中没有找到页面,**必须**立即创建该页面
361
+ 4. **禁止遗漏**:所有"有"的技法都必须有对应的独立页面,**禁止遗漏任何一项**
362
+
363
+ **示例:**
364
+
365
+ 假设"### 列表"中:
366
+ | 技法 | 有/无 |
367
+ |------|-------|
368
+ | 叙事视角 | 有 |
369
+ | 伏笔回收 | 有 |
370
+ | 情绪渲染 | 无 |
371
+
372
+ 则**必须**确认:
373
+ - `wiki/叙事视角/` 目录下存在 `全球高武-叙事视角-第X章.md` 格式的文件
374
+ - `wiki/伏笔回收/` 目录下存在 `全球高武-伏笔回收-第X章.md` 格式的文件
375
+ - 不需要为"情绪渲染"创建页面(因为分析结果为"无")
376
+
377
+ 如果发现缺失,必须**立即补充创建**,才能结束本章的分析工作。
378
+
379
+
@@ -0,0 +1,178 @@
1
+ # Wiki 结构规范(必须严格遵循)
2
+
3
+ ## 页面类型
4
+
5
+ | TYPE 值(精确) | 目录 | 说明 |
6
+ |----------------|------|------|
7
+ | characters | wiki/characters/ | 人物角色 |
8
+ | entities | wiki/entities/ | 命名实体 |
9
+ | plots | wiki/plots/ | 剧情单元 |
10
+ | concepts | wiki/concepts/ | 概念思想 |
11
+ | sources | wiki/sources/ | 来源摘要 |
12
+ | techniques | wiki/techniques/ | 写作技法 |
13
+ | worldbuildings | wiki/worldbuildings/ | 世界观设定 |
14
+ | templates | wiki/templates/ | 复用模板 |
15
+ | queries | wiki/queries/ | 开放问题 |
16
+
17
+ **⚠️ TYPE 值必须与上表第一列精确匹配,禁止使用复数形式或其他变体**
18
+ **⚠️ 错误示例:type: character(正确:type: characters)**
19
+ **⚠️ 错误示例:type: 角色(正确:type: characters)**
20
+ **⚠️ 错误示例:type: queries(正确:type: queries)**
21
+
22
+ ---
23
+
24
+ ## 文件名规则
25
+
26
+ **格式:`中文内容-中文内容-中文内容.md`**
27
+
28
+ | 规则 | 正确示例 | 错误示例 |
29
+ |------|---------|---------|
30
+ | 仅用中文、横线、数字 | `全球高武-第10章-气血检查.md` | `全球高武_第10章.md`(下划线) |
31
+ | 禁止空格 | `方平.md` | `方 平.md`(空格) |
32
+ | 禁止标点符号 | `杨建-身份背景.md` | `杨建,身份.md`(逗号) |
33
+ | 禁止 `.md` 以外的点号 | `全球高武-第1章.md` | `全球.高武.md`(多点号) |
34
+
35
+ **⚠️ 文件名中的 `-` 在生成 title 时必须替换为空格**
36
+
37
+ ---
38
+
39
+ ## Title 规则
40
+
41
+ **Title 必须从文件名派生:去掉 `.md`,把 `-` 替换为空格**
42
+
43
+ | 文件名 | 正确 title | 错误 title(禁止) |
44
+ |--------|-----------|-------------------|
45
+ | `方平.md` | `方平` | `《方平》`、`角色方平` |
46
+ | `全球高武-第10章-气血检查.md` | `全球高武 第10章 气血检查` | `《全球高武》第十章` |
47
+ | `杨建-身份背景.md` | `杨建 身份背景` | `杨建的身份背景` |
48
+
49
+ **⚠️ Title 不得自行发挥,必须按上述规则派生**
50
+ **⚠️ 不要在 title 中添加书名号、的、角色等额外文字**
51
+
52
+ ---
53
+
54
+ ## Frontmatter 格式
55
+
56
+ ```yaml
57
+ ---
58
+ type: characters
59
+ title: 方平
60
+ tags: []
61
+ related: [杨建, 全球高武]
62
+ created: YYYY-MM-DD
63
+ updated: YYYY-MM-DD
64
+ ---
65
+ ```
66
+
67
+ **必填字段:type, title, tags, related, created, updated**
68
+
69
+ ---
70
+
71
+ ## Wikilink 规则
72
+
73
+ **⚠️ Wikilink 中只写 bare slug(无目录前缀、无文件扩展名)**
74
+
75
+ | 正确格式 | 错误格式(禁止) |
76
+ |---------|----------------|
77
+ | `[[方平]]` | `[[characters/方平]]` |
78
+ | `[[杨建]]` | `[[entities/杨建]]` |
79
+ | `[[全球高武]]` | `[[wiki/全球高武]]` |
80
+ | `[[气血检查]]` | `[[方平.md]]` |
81
+
82
+ **禁止在 `[[` 和 `]]` 之间出现:**
83
+ - 目录前缀:如 `characters/`、`entities/`、`wiki/`
84
+ - 文件扩展名:如 `.md`、`.txt`
85
+ - 标点符号
86
+
87
+ ---
88
+
89
+ ## 交叉引用规则
90
+
91
+ - Related 数组中只写 bare slug:`related: [方平, 杨建]`
92
+ - 正文中的 wikilink 只用 bare slug:`[[方平]]`、`[[全球高武]]`
93
+ - 禁止:`related: [characters/方平]`、`[[方平.md]]`
94
+
95
+ ---
96
+
97
+ ## 常见错误(必须避免)
98
+
99
+ ### ❌ 错误的 TYPE 值
100
+ ```
101
+ type: character (应为:type: characters)
102
+ type: query (应为:type: queries)
103
+ type: 角色 (应为:type: characters)
104
+ type: Entity (应为:type: entities)
105
+ ```
106
+
107
+ ### ❌ 错误的文件名
108
+ ```
109
+ 方平_杨建.md (下划线禁止)
110
+ 方 平.md (空格禁止)
111
+ 杨建,身份.md (逗号禁止)
112
+ ```
113
+
114
+ ### ❌ 错误的 TITLE
115
+ ```
116
+ title: "《方平》" (禁止书名号)
117
+ title: "方平的角色" (禁止额外文字)
118
+ title: "全球高武 第十章"(应为:"全球高武 第10章 气血检查")
119
+ ```
120
+
121
+ ### ❌ 错误的 WIKILINK
122
+ ```
123
+ [[方平.md]] (禁止扩展名)
124
+ [[characters/方平]] (禁止目录前缀)
125
+ [[杨建|杨建武圣]] (禁止别名格式,如需别名另想办法)
126
+ ```
127
+
128
+ ---
129
+
130
+ ## 来源页面额外字段
131
+
132
+ ```yaml
133
+ ---
134
+ type: sources
135
+ title: 全球高武-第10章-气血检查
136
+ tags: []
137
+ related: []
138
+ created: YYYY-MM-DD
139
+ updated: YYYY-MM-DD
140
+ sources: [原文路径]
141
+ ---
142
+ ```
143
+
144
+ ---
145
+
146
+ ## 索引格式
147
+
148
+ `wiki/index.md` 按类型分组,每项一行:
149
+
150
+ ```markdown
151
+ ## characters
152
+ - [[方平]] — 小说主角
153
+ - [[杨建]] — 方平的好友
154
+
155
+ ## entities
156
+ - [[全球高武]] — 小说名称
157
+ ```
158
+
159
+ ---
160
+
161
+ ## 日志格式
162
+
163
+ `wiki/log.md` 逆时间顺序:
164
+
165
+ ```markdown
166
+ ## YYYY-MM-DD
167
+
168
+ - 已采取的行动 / 已注意到的发现
169
+ ```
170
+
171
+ ---
172
+
173
+ ## 矛盾处理
174
+
175
+ 1. 在相关角色/概念页面中记录矛盾
176
+ 2. 创建/更新 `queries` 类型页面跟踪问题
177
+ 3. 从 `queries` 页面链接两个来源
178
+ 4. 证据充足后在综合页面中解决