novelws 3.1.0 → 5.0.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 (358) hide show
  1. package/CHANGELOG.md +115 -564
  2. package/README.md +81 -598
  3. package/dist/cli.js +1 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +18 -103
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/upgrade.d.ts.map +1 -1
  9. package/dist/commands/upgrade.js +18 -52
  10. package/dist/commands/upgrade.js.map +1 -1
  11. package/dist/core/config.d.ts +7 -36
  12. package/dist/core/config.d.ts.map +1 -1
  13. package/dist/core/config.js +11 -38
  14. package/dist/core/config.js.map +1 -1
  15. package/dist/core/errors.d.ts +0 -31
  16. package/dist/core/errors.d.ts.map +1 -1
  17. package/dist/core/errors.js +0 -58
  18. package/dist/core/errors.js.map +1 -1
  19. package/dist/utils/diagnostics.d.ts +2 -16
  20. package/dist/utils/diagnostics.d.ts.map +1 -1
  21. package/dist/utils/diagnostics.js +7 -73
  22. package/dist/utils/diagnostics.js.map +1 -1
  23. package/dist/utils/project.d.ts +1 -1
  24. package/dist/utils/project.d.ts.map +1 -1
  25. package/dist/utils/project.js +3 -3
  26. package/dist/utils/project.js.map +1 -1
  27. package/package.json +1 -2
  28. package/templates/commands/analyze.md +65 -265
  29. package/templates/commands/expand.md +70 -0
  30. package/templates/commands/plan.md +47 -452
  31. package/templates/commands/specify.md +43 -869
  32. package/templates/commands/write.md +49 -556
  33. package/templates/dot-claude/CLAUDE.md +38 -202
  34. package/templates/resources/anti-ai.md +16 -0
  35. package/templates/resources/style-reference.md +19 -0
  36. package/templates/tracking/character-state.json +1 -76
  37. package/templates/tracking/plot-tracker.json +3 -60
  38. package/templates/tracking/relationships.json +1 -68
  39. package/templates/tracking/timeline.json +1 -47
  40. package/dist/commands/plugin.d.ts +0 -6
  41. package/dist/commands/plugin.d.ts.map +0 -1
  42. package/dist/commands/plugin.js +0 -135
  43. package/dist/commands/plugin.js.map +0 -1
  44. package/dist/plugins/identifier.d.ts +0 -13
  45. package/dist/plugins/identifier.d.ts.map +0 -1
  46. package/dist/plugins/identifier.js +0 -72
  47. package/dist/plugins/identifier.js.map +0 -1
  48. package/dist/plugins/installers/base.d.ts +0 -27
  49. package/dist/plugins/installers/base.d.ts.map +0 -1
  50. package/dist/plugins/installers/base.js +0 -30
  51. package/dist/plugins/installers/base.js.map +0 -1
  52. package/dist/plugins/installers/github.d.ts +0 -22
  53. package/dist/plugins/installers/github.d.ts.map +0 -1
  54. package/dist/plugins/installers/github.js +0 -133
  55. package/dist/plugins/installers/github.js.map +0 -1
  56. package/dist/plugins/installers/local.d.ts +0 -16
  57. package/dist/plugins/installers/local.d.ts.map +0 -1
  58. package/dist/plugins/installers/local.js +0 -69
  59. package/dist/plugins/installers/local.js.map +0 -1
  60. package/dist/plugins/installers/npm.d.ts +0 -20
  61. package/dist/plugins/installers/npm.d.ts.map +0 -1
  62. package/dist/plugins/installers/npm.js +0 -99
  63. package/dist/plugins/installers/npm.js.map +0 -1
  64. package/dist/plugins/manager.d.ts +0 -77
  65. package/dist/plugins/manager.d.ts.map +0 -1
  66. package/dist/plugins/manager.js +0 -349
  67. package/dist/plugins/manager.js.map +0 -1
  68. package/dist/plugins/registry.d.ts +0 -48
  69. package/dist/plugins/registry.d.ts.map +0 -1
  70. package/dist/plugins/registry.js +0 -111
  71. package/dist/plugins/registry.js.map +0 -1
  72. package/dist/plugins/types.d.ts +0 -66
  73. package/dist/plugins/types.d.ts.map +0 -1
  74. package/dist/plugins/types.js +0 -2
  75. package/dist/plugins/types.js.map +0 -1
  76. package/dist/plugins/validator.d.ts +0 -19
  77. package/dist/plugins/validator.d.ts.map +0 -1
  78. package/dist/plugins/validator.js +0 -164
  79. package/dist/plugins/validator.js.map +0 -1
  80. package/dist/utils/logger.d.ts +0 -13
  81. package/dist/utils/logger.d.ts.map +0 -1
  82. package/dist/utils/logger.js +0 -48
  83. package/dist/utils/logger.js.map +0 -1
  84. package/plugins/authentic-voice/README.md +0 -31
  85. package/plugins/authentic-voice/commands/authentic-voice.md +0 -73
  86. package/plugins/authentic-voice/commands/authenticity-audit.md +0 -37
  87. package/plugins/authentic-voice/config.yaml +0 -30
  88. package/plugins/authentic-voice/experts/authentic-editor.md +0 -27
  89. package/plugins/export/README.md +0 -319
  90. package/plugins/export/commands/export.md +0 -460
  91. package/plugins/export/commands/generate-cover.md +0 -256
  92. package/plugins/export/commands/metadata.md +0 -309
  93. package/plugins/export/config.yaml +0 -47
  94. package/plugins/export/experts/publishing-expert.md +0 -171
  95. package/plugins/export/templates/epub/chapter-template.html +0 -13
  96. package/plugins/export/templates/epub/cover-template.html +0 -14
  97. package/plugins/export/templates/epub/stylesheet.css +0 -200
  98. package/plugins/export/templates/pdf/ebook-style.css +0 -137
  99. package/plugins/export/templates/pdf/print-style.css +0 -179
  100. package/plugins/export/templates/platforms/jinjiang-format.md +0 -101
  101. package/plugins/export/templates/platforms/qidian-format.md +0 -108
  102. package/plugins/export/templates/platforms/tomato-format.md +0 -95
  103. package/plugins/translate/README.md +0 -265
  104. package/plugins/translate/commands/glossary.md +0 -731
  105. package/plugins/translate/commands/translate-preview.md +0 -543
  106. package/plugins/translate/commands/translate.md +0 -649
  107. package/plugins/translate/config.yaml +0 -43
  108. package/plugins/translate/experts/literary-translator.md +0 -605
  109. package/templates/commands/character.md +0 -287
  110. package/templates/commands/checklist.md +0 -744
  111. package/templates/commands/clarify.md +0 -269
  112. package/templates/commands/constitution.md +0 -269
  113. package/templates/commands/expert.md +0 -188
  114. package/templates/commands/facts.md +0 -552
  115. package/templates/commands/guide.md +0 -900
  116. package/templates/commands/help-me.md +0 -221
  117. package/templates/commands/recap.md +0 -748
  118. package/templates/commands/relations.md +0 -385
  119. package/templates/commands/revise.md +0 -450
  120. package/templates/commands/search.md +0 -531
  121. package/templates/commands/tasks.md +0 -396
  122. package/templates/commands/timeline.md +0 -309
  123. package/templates/commands/track-init.md +0 -149
  124. package/templates/commands/track.md +0 -704
  125. package/templates/commands/volume-summary.md +0 -471
  126. package/templates/config/keyword-mappings.json +0 -226
  127. package/templates/knowledge/audit-config.json +0 -26
  128. package/templates/knowledge/character-profiles.md +0 -152
  129. package/templates/knowledge/character-voices.md +0 -137
  130. package/templates/knowledge/locations.md +0 -184
  131. package/templates/knowledge/world-setting.md +0 -121
  132. package/templates/knowledge-base/README.md +0 -285
  133. package/templates/knowledge-base/character-archetypes/01-hero.md +0 -233
  134. package/templates/knowledge-base/character-archetypes/02-mentor.md +0 -177
  135. package/templates/knowledge-base/character-archetypes/03-shadow.md +0 -221
  136. package/templates/knowledge-base/character-archetypes/04-ally.md +0 -178
  137. package/templates/knowledge-base/character-archetypes/05-shapeshifter.md +0 -177
  138. package/templates/knowledge-base/character-archetypes/06-trickster.md +0 -181
  139. package/templates/knowledge-base/character-archetypes/07-threshold-guardian.md +0 -177
  140. package/templates/knowledge-base/character-archetypes/08-herald.md +0 -180
  141. package/templates/knowledge-base/character-archetypes/09-father.md +0 -249
  142. package/templates/knowledge-base/character-archetypes/10-mother.md +0 -202
  143. package/templates/knowledge-base/character-archetypes/11-child.md +0 -183
  144. package/templates/knowledge-base/character-archetypes/12-sage.md +0 -202
  145. package/templates/knowledge-base/character-archetypes/README.md +0 -60
  146. package/templates/knowledge-base/character-archetypes/application-guide.md +0 -222
  147. package/templates/knowledge-base/character-archetypes/archetype-combinations.md +0 -242
  148. package/templates/knowledge-base/character-archetypes/config.yaml +0 -28
  149. package/templates/knowledge-base/character-archetypes/examples-analysis.md +0 -223
  150. package/templates/knowledge-base/craft/character-arc.md +0 -1153
  151. package/templates/knowledge-base/craft/dialogue.md +0 -1170
  152. package/templates/knowledge-base/craft/hook-design.md +0 -345
  153. package/templates/knowledge-base/craft/pacing.md +0 -1200
  154. package/templates/knowledge-base/craft/power-system.md +0 -254
  155. package/templates/knowledge-base/craft/scene-structure.md +0 -1136
  156. package/templates/knowledge-base/craft/show-not-tell.md +0 -1012
  157. package/templates/knowledge-base/craft/story-structures.md +0 -134
  158. package/templates/knowledge-base/craft/tension-management.md +0 -168
  159. package/templates/knowledge-base/emotional-beats/01-first-meeting.md +0 -145
  160. package/templates/knowledge-base/emotional-beats/02-bonding-moment.md +0 -226
  161. package/templates/knowledge-base/emotional-beats/03-declaration.md +0 -284
  162. package/templates/knowledge-base/emotional-beats/04-triumph.md +0 -240
  163. package/templates/knowledge-base/emotional-beats/05-reunion.md +0 -396
  164. package/templates/knowledge-base/emotional-beats/06-forgiveness.md +0 -204
  165. package/templates/knowledge-base/emotional-beats/07-betrayal.md +0 -204
  166. package/templates/knowledge-base/emotional-beats/08-loss.md +0 -214
  167. package/templates/knowledge-base/emotional-beats/09-rejection.md +0 -254
  168. package/templates/knowledge-base/emotional-beats/10-failure.md +0 -244
  169. package/templates/knowledge-base/emotional-beats/11-misunderstanding.md +0 -205
  170. package/templates/knowledge-base/emotional-beats/12-farewell.md +0 -283
  171. package/templates/knowledge-base/emotional-beats/13-revelation.md +0 -242
  172. package/templates/knowledge-base/emotional-beats/14-point-of-no-return.md +0 -215
  173. package/templates/knowledge-base/emotional-beats/15-dark-night.md +0 -244
  174. package/templates/knowledge-base/emotional-beats/16-sacrifice.md +0 -246
  175. package/templates/knowledge-base/emotional-beats/17-awakening.md +0 -246
  176. package/templates/knowledge-base/emotional-beats/18-confrontation.md +0 -217
  177. package/templates/knowledge-base/emotional-beats/19-bittersweet-goodbye.md +0 -368
  178. package/templates/knowledge-base/emotional-beats/20-moral-dilemma.md +0 -248
  179. package/templates/knowledge-base/emotional-beats/21-temptation.md +0 -240
  180. package/templates/knowledge-base/emotional-beats/22-redemption.md +0 -210
  181. package/templates/knowledge-base/emotional-beats/README.md +0 -104
  182. package/templates/knowledge-base/emotional-beats/beat-sequences.md +0 -276
  183. package/templates/knowledge-base/emotional-beats/config.yaml +0 -30
  184. package/templates/knowledge-base/emotional-beats/pacing-guide.md +0 -390
  185. package/templates/knowledge-base/genres/game-lit.md +0 -174
  186. package/templates/knowledge-base/genres/historical.md +0 -1127
  187. package/templates/knowledge-base/genres/horror.md +0 -211
  188. package/templates/knowledge-base/genres/military.md +0 -209
  189. package/templates/knowledge-base/genres/mystery.md +0 -1123
  190. package/templates/knowledge-base/genres/rebirth.md +0 -177
  191. package/templates/knowledge-base/genres/revenge.md +0 -846
  192. package/templates/knowledge-base/genres/romance.md +0 -948
  193. package/templates/knowledge-base/genres/sci-fi.md +0 -156
  194. package/templates/knowledge-base/genres/sports.md +0 -216
  195. package/templates/knowledge-base/genres/thriller.md +0 -166
  196. package/templates/knowledge-base/genres/urban.md +0 -170
  197. package/templates/knowledge-base/genres/workplace.md +0 -214
  198. package/templates/knowledge-base/genres/wuxia.md +0 -143
  199. package/templates/knowledge-base/genres/xuanhuan.md +0 -234
  200. package/templates/knowledge-base/genres/youth.md +0 -219
  201. package/templates/knowledge-base/references/README.md +0 -96
  202. package/templates/knowledge-base/references/china-1920s/culture.md +0 -423
  203. package/templates/knowledge-base/references/china-1920s/daily-life.md +0 -616
  204. package/templates/knowledge-base/references/china-1920s/overview.md +0 -298
  205. package/templates/knowledge-base/references/china-1920s/society.md +0 -703
  206. package/templates/knowledge-base/references/china-1920s/warlords.md +0 -427
  207. package/templates/knowledge-base/references/cultivation-world/daily-life.md +0 -108
  208. package/templates/knowledge-base/references/cultivation-world/overview.md +0 -64
  209. package/templates/knowledge-base/references/cultivation-world/power-system.md +0 -108
  210. package/templates/knowledge-base/references/cultivation-world/sects.md +0 -104
  211. package/templates/knowledge-base/references/cultivation-world/world-setting.md +0 -108
  212. package/templates/knowledge-base/references/modern-workplace/corporate.md +0 -115
  213. package/templates/knowledge-base/references/modern-workplace/daily-life.md +0 -129
  214. package/templates/knowledge-base/references/modern-workplace/overview.md +0 -73
  215. package/templates/knowledge-base/references/modern-workplace/relationships.md +0 -107
  216. package/templates/knowledge-base/references/modern-workplace/tech-industry.md +0 -131
  217. package/templates/knowledge-base/references/tang-dynasty/culture.md +0 -135
  218. package/templates/knowledge-base/references/tang-dynasty/daily-life.md +0 -139
  219. package/templates/knowledge-base/references/tang-dynasty/overview.md +0 -76
  220. package/templates/knowledge-base/references/tang-dynasty/politics.md +0 -121
  221. package/templates/knowledge-base/references/tang-dynasty/society.md +0 -126
  222. package/templates/knowledge-base/requirements/README.md +0 -240
  223. package/templates/knowledge-base/requirements/anti-ai-v3.md +0 -46
  224. package/templates/knowledge-base/requirements/anti-ai-v4-deprecated.md +0 -442
  225. package/templates/knowledge-base/requirements/anti-ai-v5-balanced.md +0 -203
  226. package/templates/knowledge-base/requirements/concretization.md +0 -90
  227. package/templates/knowledge-base/requirements/fast-paced.md +0 -552
  228. package/templates/knowledge-base/requirements/no-poison.md +0 -60
  229. package/templates/knowledge-base/requirements/romance-angst.md +0 -102
  230. package/templates/knowledge-base/requirements/romance-sweet.md +0 -63
  231. package/templates/knowledge-base/requirements/serious-literature.md +0 -45
  232. package/templates/knowledge-base/requirements/strong-emotion.md +0 -60
  233. package/templates/knowledge-base/styles/README.md +0 -302
  234. package/templates/knowledge-base/styles/ancient-style.md +0 -579
  235. package/templates/knowledge-base/styles/literary.md +0 -439
  236. package/templates/knowledge-base/styles/minimal.md +0 -472
  237. package/templates/knowledge-base/styles/natural-voice.md +0 -930
  238. package/templates/knowledge-base/styles/web-novel.md +0 -525
  239. package/templates/memory/personal-voice.md +0 -113
  240. package/templates/scripts/README.md +0 -187
  241. package/templates/scripts/bash/analyze-story.sh +0 -170
  242. package/templates/scripts/bash/check-analyze-stage.sh +0 -108
  243. package/templates/scripts/bash/check-consistency.sh +0 -463
  244. package/templates/scripts/bash/check-facts.sh +0 -214
  245. package/templates/scripts/bash/check-plot.sh +0 -374
  246. package/templates/scripts/bash/check-timeline.sh +0 -346
  247. package/templates/scripts/bash/check-world.sh +0 -395
  248. package/templates/scripts/bash/check-writing-state.sh +0 -854
  249. package/templates/scripts/bash/clarify-story.sh +0 -117
  250. package/templates/scripts/bash/common.sh +0 -151
  251. package/templates/scripts/bash/constitution.sh +0 -114
  252. package/templates/scripts/bash/generate-tasks.sh +0 -65
  253. package/templates/scripts/bash/init-tracking.sh +0 -183
  254. package/templates/scripts/bash/manage-relations.sh +0 -174
  255. package/templates/scripts/bash/migrate-tracking.sh +0 -183
  256. package/templates/scripts/bash/plan-story.sh +0 -100
  257. package/templates/scripts/bash/specify-story.sh +0 -93
  258. package/templates/scripts/bash/tasks-story.sh +0 -96
  259. package/templates/scripts/bash/test-word-count.sh +0 -182
  260. package/templates/scripts/bash/tests/bench-preload-cache.sh +0 -100
  261. package/templates/scripts/bash/tests/run-all-benchmarks.sh +0 -16
  262. package/templates/scripts/bash/tests/test-cache-semantics.sh +0 -199
  263. package/templates/scripts/bash/tests/test-cross-platform.sh +0 -35
  264. package/templates/scripts/bash/tests/test-edge-cases-bash.sh +0 -60
  265. package/templates/scripts/bash/tests/test-phase1-bash.sh +0 -28
  266. package/templates/scripts/bash/tests/test-preload-cache.sh +0 -123
  267. package/templates/scripts/bash/tests/test-regex-precompile.sh +0 -89
  268. package/templates/scripts/bash/tests/test-regression-bash.sh +0 -42
  269. package/templates/scripts/bash/tests/test-task6-verification.sh +0 -200
  270. package/templates/scripts/bash/text-audit.sh +0 -144
  271. package/templates/scripts/bash/track-progress.sh +0 -194
  272. package/templates/scripts/powershell/analyze-story.ps1 +0 -174
  273. package/templates/scripts/powershell/check-analyze-stage.ps1 +0 -110
  274. package/templates/scripts/powershell/check-consistency.ps1 +0 -138
  275. package/templates/scripts/powershell/check-facts.ps1 +0 -195
  276. package/templates/scripts/powershell/check-plot.ps1 +0 -139
  277. package/templates/scripts/powershell/check-timeline.ps1 +0 -112
  278. package/templates/scripts/powershell/check-writing-state.ps1 +0 -486
  279. package/templates/scripts/powershell/clarify-story.ps1 +0 -107
  280. package/templates/scripts/powershell/common.ps1 +0 -36
  281. package/templates/scripts/powershell/constitution.ps1 +0 -145
  282. package/templates/scripts/powershell/generate-tasks.ps1 +0 -70
  283. package/templates/scripts/powershell/init-tracking.ps1 +0 -98
  284. package/templates/scripts/powershell/manage-relations.ps1 +0 -134
  285. package/templates/scripts/powershell/migrate-tracking.ps1 +0 -145
  286. package/templates/scripts/powershell/plan-story.ps1 +0 -99
  287. package/templates/scripts/powershell/specify-story.ps1 +0 -85
  288. package/templates/scripts/powershell/tests/bench-ps-cache.ps1 +0 -80
  289. package/templates/scripts/powershell/tests/test-cross-platform.ps1 +0 -27
  290. package/templates/scripts/powershell/tests/test-edge-cases-ps.ps1 +0 -29
  291. package/templates/scripts/powershell/tests/test-phase1-ps.ps1 +0 -28
  292. package/templates/scripts/powershell/tests/test-ps-cache.ps1 +0 -73
  293. package/templates/scripts/powershell/tests/test-regression-ps.ps1 +0 -40
  294. package/templates/scripts/powershell/text-audit.ps1 +0 -102
  295. package/templates/scripts/powershell/track-progress.ps1 +0 -105
  296. package/templates/skills/analysis/character-analysis/SKILL.md +0 -71
  297. package/templates/skills/analysis/foreshadow-analysis/SKILL.md +0 -45
  298. package/templates/skills/analysis/hook-analysis/SKILL.md +0 -111
  299. package/templates/skills/analysis/logic-analysis/SKILL.md +0 -58
  300. package/templates/skills/analysis/opening-analysis/SKILL.md +0 -59
  301. package/templates/skills/analysis/pacing-analysis/SKILL.md +0 -55
  302. package/templates/skills/analysis/power-analysis/SKILL.md +0 -148
  303. package/templates/skills/analysis/reader-analysis/SKILL.md +0 -117
  304. package/templates/skills/analysis/style-analysis/SKILL.md +0 -60
  305. package/templates/skills/analysis/voice-analysis/SKILL.md +0 -42
  306. package/templates/skills/auto-tracking/SKILL.md +0 -280
  307. package/templates/skills/genre-knowledge/fantasy/SKILL.md +0 -355
  308. package/templates/skills/genre-knowledge/mystery/SKILL.md +0 -337
  309. package/templates/skills/genre-knowledge/romance/SKILL.md +0 -228
  310. package/templates/skills/genre-knowledge/sci-fi/SKILL.md +0 -65
  311. package/templates/skills/genre-knowledge/thriller/SKILL.md +0 -95
  312. package/templates/skills/planning/volume-detail/SKILL.md +0 -219
  313. package/templates/skills/quality-assurance/consistency-checker/SKILL.md +0 -412
  314. package/templates/skills/quality-assurance/continuity-tracker/SKILL.md +0 -157
  315. package/templates/skills/quality-assurance/facts-checker/SKILL.md +0 -405
  316. package/templates/skills/quality-assurance/forgotten-elements/SKILL.md +0 -147
  317. package/templates/skills/quality-assurance/getting-started/SKILL.md +0 -224
  318. package/templates/skills/quality-assurance/hook-checker/SKILL.md +0 -164
  319. package/templates/skills/quality-assurance/hook-checker/experts/hook-analyst.md +0 -33
  320. package/templates/skills/quality-assurance/long-series-continuity/SKILL.md +0 -570
  321. package/templates/skills/quality-assurance/pacing-monitor/SKILL.md +0 -143
  322. package/templates/skills/quality-assurance/pov-validator/SKILL.md +0 -135
  323. package/templates/skills/quality-assurance/pre-write-checklist/SKILL.md +0 -583
  324. package/templates/skills/quality-assurance/requirement-detector/CONFLICT_RESOLUTION.md +0 -119
  325. package/templates/skills/quality-assurance/requirement-detector/EXAMPLES.md +0 -146
  326. package/templates/skills/quality-assurance/requirement-detector/KEYWORDS.md +0 -160
  327. package/templates/skills/quality-assurance/requirement-detector/SKILL.md +0 -149
  328. package/templates/skills/quality-assurance/setting-detector/SKILL.md +0 -611
  329. package/templates/skills/quality-assurance/style-detector/CONFLICT_RESOLUTION.md +0 -126
  330. package/templates/skills/quality-assurance/style-detector/EXAMPLES.md +0 -206
  331. package/templates/skills/quality-assurance/style-detector/KEYWORDS.md +0 -207
  332. package/templates/skills/quality-assurance/style-detector/SKILL.md +0 -264
  333. package/templates/skills/quality-assurance/voice-consistency-checker/SKILL.md +0 -103
  334. package/templates/skills/quality-assurance/voice-consistency-checker/experts/voice-analyst.md +0 -21
  335. package/templates/skills/quality-assurance/workflow-guide/SKILL.md +0 -381
  336. package/templates/skills/writing-techniques/character-arc/SKILL.md +0 -267
  337. package/templates/skills/writing-techniques/dialogue-techniques/SKILL.md +0 -366
  338. package/templates/skills/writing-techniques/multi-thread-narrative/SKILL.md +0 -708
  339. package/templates/skills/writing-techniques/multi-thread-narrative/experts/thread-analyst.md +0 -226
  340. package/templates/skills/writing-techniques/pacing-control/SKILL.md +0 -480
  341. package/templates/skills/writing-techniques/reader-expectation/SKILL.md +0 -1026
  342. package/templates/skills/writing-techniques/reader-expectation/experts/expectation-analyst.md +0 -209
  343. package/templates/skills/writing-techniques/revision-polish/SKILL.md +0 -496
  344. package/templates/skills/writing-techniques/revision-polish/experts/revision-editor.md +0 -221
  345. package/templates/skills/writing-techniques/scene-structure/SKILL.md +0 -361
  346. package/templates/skills/writing-techniques/style-learning/SKILL.md +0 -436
  347. package/templates/skills/writing-techniques/writing-balance/.gitkeep +0 -0
  348. package/templates/skills/writing-techniques/writing-balance/SKILL.md +0 -460
  349. package/templates/skills/writing-techniques/writing-techniques/SKILL.md +0 -727
  350. package/templates/specification-example.md +0 -146
  351. package/templates/tracking/story-facts.json +0 -5
  352. package/templates/tracking/summary/characters-summary.json +0 -7
  353. package/templates/tracking/summary/plot-summary.json +0 -13
  354. package/templates/tracking/summary/timeline-summary.json +0 -8
  355. package/templates/tracking/summary/volume-summaries.json +0 -5
  356. package/templates/tracking/tracking-log.md +0 -110
  357. package/templates/tracking/validation-rules.json +0 -128
  358. /package/templates/{memory → resources}/constitution.md +0 -0
@@ -1,226 +0,0 @@
1
- # Bonding Moment (联结时刻)
2
-
3
- ## 核心定义
4
-
5
- 联结时刻 = 两个角色之间建立深层情感连接的关键场景。它是从"认识"到"在乎"的转折点,是关系发展中最重要的里程碑之一。
6
-
7
- 在联结时刻之前,角色之间可能只是点头之交、同事、甚至敌人。在联结时刻之后,他们之间产生了一种无法轻易切断的纽带——不一定是爱情,可以是友情、战友情、师徒情,甚至是对手之间的惺惺相惜。
8
-
9
- **关键区分:**
10
- - **初遇 (First Meeting)** 是"注意到对方"
11
- - **联结时刻 (Bonding Moment)** 是"真正看见对方"
12
- - **告白 (Declaration)** 是"说出在乎"
13
-
14
- 联结时刻的本质是:两个人在某一瞬间,卸下了各自的面具,看到了彼此真实的一面。
15
-
16
- ---
17
-
18
- ## 核心元素
19
-
20
- 一个有效的联结时刻通常包含以下四个核心元素中的至少两个:
21
-
22
- ### 1. 脆弱展示 (Vulnerability Display)
23
-
24
- 一方或双方展示自己脆弱的一面。这种脆弱可以是情感上的(承认恐惧、悲伤),也可以是处境上的(身处困境、失去控制)。关键在于:这种脆弱是真实的,不是表演。
25
-
26
- **示例:** 一个一向强势的角色在深夜独自哭泣时被另一个角色撞见,而他没有立刻擦干眼泪假装无事。
27
-
28
- ### 2. 共同经历 (Shared Experience)
29
-
30
- 两个角色一起经历了某件困难的、危险的、或者特殊的事情。共同经历本身不足以产生联结——关键是在经历中,双方展现了真实的自我。
31
-
32
- **示例:** 两个角色一起被困在暴风雪中,在等待救援的过程中,从互相抱怨到互相扶持。
33
-
34
- ### 3. 秘密分享 (Secret Sharing)
35
-
36
- 一方向另一方分享了不为人知的事情——可以是过去的经历、隐藏的身份、内心的恐惧、或者不可告人的梦想。分享秘密的行为本身就是信任的表达。
37
-
38
- **示例:** 一个角色告诉另一个角色,自己其实不是孤儿,而是主动离开了家庭,因为无法承受父母的期望。
39
-
40
- ### 4. 非言语连接 (Non-verbal Connection)
41
-
42
- 不需要说话也能理解对方。一个眼神、一个动作、一段共同的沉默,传达了语言无法表达的东西。这是联结最高级的形式。
43
-
44
- **示例:** 两个角色在葬礼上站在一起,什么都没说,但其中一个人轻轻握住了另一个人的手,而对方没有抽开。
45
-
46
- ---
47
-
48
- ## 常见套路(应避免)
49
-
50
- 以下是联结时刻中最常见的陈旧写法,读者一眼就能看穿:
51
-
52
- ### 1. 突然的深夜谈心(无铺垫)
53
-
54
- 两个角色白天还互相看不顺眼,晚上突然在阳台/天台/篝火旁敞开心扉,倾诉人生故事。没有任何铺垫,没有信任的逐步建立,仿佛夜晚自带"真心话"buff。
55
-
56
- **问题所在:** 真实的人不会对刚认识的人毫无保留。信任需要时间和契机。
57
-
58
- ### 2. 一起淋雨 / 困在电梯等强制亲密
59
-
60
- 通过外部环境强制两个角色待在一起,然后在物理距离缩短的情况下自动产生情感联结。这种写法把"空间接近"等同于"心理接近",过于简单粗暴。
61
-
62
- **问题所在:** 被困在一起不等于产生联结。很多人被困在电梯里只会更加烦躁。
63
-
64
- ### 3. 救命之恩 = 深层联结
65
-
66
- A 救了 B 的命,B 从此对 A 产生深层联结。这种写法把"感激"等同于"联结",忽略了联结需要双向的情感投入。
67
-
68
- **问题所在:** 感激是单向的,联结是双向的。救命之恩可以是联结的起点,但不能是联结本身。
69
-
70
- ### 4. 过快的信任建立
71
-
72
- 两个角色在第一次深入交谈后就建立了无条件的信任,仿佛一次对话就能抵消多年的防备和创伤。
73
-
74
- **问题所在:** 真实的信任是分层的——先信任对方不会伤害自己,再信任对方会帮助自己,最后才信任对方能理解自己。跳过中间步骤会让读者觉得虚假。
75
-
76
- ### 5. 酒后吐真言
77
-
78
- 角色喝醉后说出真心话,第二天假装不记得,但双方都知道那些话是真的。这种写法用酒精作为"情感催化剂",回避了清醒状态下建立联结的难度。
79
-
80
- **问题所在:** 酒后的脆弱不是真正的脆弱,因为角色可以用"我喝多了"作为退路。真正的联结需要清醒的选择。
81
-
82
- ---
83
-
84
- ## 新颖变体
85
-
86
- ### 变体1:无声联结——共同沉默中建立连接
87
-
88
- 两个角色不通过对话,而是通过共同的沉默建立联结。他们可能在做同一件事(钓鱼、看日落、修理东西),在安静中感受到彼此的存在,发现对方是一个"可以不说话也不尴尬"的人。
89
-
90
- **示例场景:** 两个角色在医院走廊里等待各自亲人的手术结果。他们不认识,也没有交谈。但在漫长的等待中,其中一个人从自动贩卖机买了两杯咖啡,把一杯放在另一个人旁边。对方接过来喝了一口,点了点头。整个过程没有一句话,但双方都感受到了一种深层的理解——"我知道你在经历什么,因为我也在经历。"
91
-
92
- **为什么有效:** 沉默比语言更难伪装。愿意和一个人安静地待在一起,本身就是信任的表达。
93
-
94
- ### 变体2:对抗中联结——敌人之间的意外理解
95
-
96
- 两个处于对立面的角色,在对抗过程中意外发现了彼此的相似之处。他们可能仍然是敌人,但在某一瞬间,他们理解了对方为什么会做出那样的选择。
97
-
98
- **示例场景:** 一个警察在审讯一个小偷时,发现对方偷的东西全是儿童药品。警察没有说话,只是看了小偷很久,然后默默把审讯记录中的"盗窃金额"写低了一些。小偷看到了,也没有说话。两个人都知道发生了什么,但谁都不会提起。
99
-
100
- **为什么有效:** 对立关系中的理解比友好关系中的理解更有张力,因为它意味着角色必须跨越立场的鸿沟。
101
-
102
- ### 变体3:日常联结——平凡时刻的深层连接
103
-
104
- 联结不发生在戏剧性的场景中,而是发生在最平凡的日常里。两个角色在一起做一件极其普通的事情时,突然意识到对方已经成为自己生活的一部分。
105
-
106
- **示例场景:** 两个室友已经住在一起三个月了。某天早上,A 起床后发现 B 已经把咖啡煮好了,而且是 A 喜欢的浓度。A 端起咖啡喝了一口,突然意识到:B 不知道从什么时候开始,已经记住了自己喝咖啡的习惯。而自己也不知道从什么时候开始,已经习惯了每天早上有一杯 B 煮的咖啡。
107
-
108
- **为什么有效:** 日常细节比宏大场景更能打动人,因为它展示的是"持续的关注"而非"一时的冲动"。读者会在这种场景中看到自己的生活。
109
-
110
- ### 变体4:创伤联结——共同创伤经历中的连接
111
-
112
- 两个角色因为共同经历了创伤性事件而产生联结。这种联结是复杂的——它既包含理解和支持,也包含痛苦和回避。他们可能是唯一能理解彼此的人,但见到对方也会想起那段经历。
113
-
114
- **示例场景:** 两个战争幸存者在和平年代偶然重逢。他们没有拥抱,没有叙旧,只是在嘈杂的餐厅里突然听到一声巨响(有人摔了盘子),两个人同时僵住了,同时低下了头,同时深呼吸。然后他们对视了一眼,那一眼里包含了所有不需要说出口的东西。
115
-
116
- **为什么有效:** 创伤联结的力量在于它的排他性——只有经历过同样事情的人才能真正理解。这种"只有我们知道"的感觉是最强烈的联结形式之一。
117
-
118
- ---
119
-
120
- ## 情感真实性
121
-
122
- 如何让联结时刻令读者信服?关键在于以下三个原则:
123
-
124
- ### 1. 渐进式信任建立 (Gradual Trust Building)
125
-
126
- 联结不是一个开关,而是一个渐变的过程。在联结时刻到来之前,角色之间应该已经有了多次小规模的互动,每次互动都让信任增加一点点。
127
-
128
- **具体做法:**
129
- - 第一次:角色 A 注意到角色 B 的一个小习惯
130
- - 第二次:A 在 B 需要帮助时提供了不引人注目的帮助
131
- - 第三次:B 发现了 A 的帮助,但没有点破
132
- - 第四次:两人第一次有了超出表面的对话
133
- - 联结时刻:在前面铺垫的基础上,一个触发事件让双方的情感防线同时松动
134
-
135
- ### 2. 赢得的脆弱 (Earned Vulnerability)
136
-
137
- 角色展示脆弱必须是"赢得的"——读者需要理解为什么这个角色在这个时刻、对这个人展示了脆弱。如果一个角色一向封闭,那么他的每一次敞开都应该有充分的理由。
138
-
139
- **反面教材:** "他不知道为什么,就是觉得可以信任她。" ——这不是理由,这是偷懒。
140
-
141
- **正面示范:** "他看着她把自己的外套脱下来盖在流浪猫身上,想起了小时候母亲也会这样做。那一瞬间,他的防备松动了一点。" ——具体的细节触发了具体的情感反应。
142
-
143
- ### 3. 具体细节 (Specific Details)
144
-
145
- 联结时刻的力量来自具体的、独特的细节,而不是笼统的情感描述。"他们聊了很多,感觉很亲近"是无效的;"她发现他也会在紧张的时候用左手食指敲桌面,就像她自己一样"是有效的。
146
-
147
- **原则:** 越具体,越真实。越独特,越动人。
148
-
149
- ---
150
-
151
- ## 示例分析
152
-
153
- ### 示例1:《指环王》——弗罗多与山姆 (Frodo and Sam)
154
-
155
- 弗罗多和山姆的联结并非建立在某一个戏剧性的时刻,而是通过无数个日常的、平凡的瞬间逐渐加深的。但如果要选一个最关键的联结时刻,那就是在末日山的山坡上,弗罗多已经无法继续前行时,山姆说出了那句经典台词:"I can't carry it for you, but I can carry you!"(我没法替你背负它,但我可以背你!)
156
-
157
- **分析:**
158
- - **脆弱展示:** 弗罗多承认自己走不动了——对于一个一直坚持"这是我的任务"的角色来说,这是极大的脆弱
159
- - **共同经历:** 他们已经一起走过了整个中土世界,经历了无数危险
160
- - **非言语连接:** 山姆没有犹豫,没有问"你确定吗",他直接把弗罗多背了起来
161
- - **为什么有效:** 这个联结时刻之所以动人,是因为它建立在整部作品的铺垫之上。山姆从第一页开始就在展示他的忠诚,但直到这一刻,他的忠诚才从"义务"升华为"选择"——他不是因为甘道夫的嘱托才留下,而是因为他真正在乎弗罗多
162
-
163
- ### 示例2:《肖申克的救赎》——安迪与瑞德 (Andy and Red)
164
-
165
- 安迪和瑞德的联结时刻是一个典型的"日常联结"。在监狱的屋顶上,安迪用自己的智慧为狱友们赢得了几瓶冰啤酒。瑞德看着安迪坐在阳光下,嘴角带着微笑,却自己没有喝一口啤酒。
166
-
167
- **分析:**
168
- - **非言语连接:** 瑞德通过观察安迪的行为(不喝啤酒、只是微笑)理解了安迪的内心——他追求的不是啤酒,而是自由的感觉
169
- - **秘密分享:** 安迪没有用语言解释自己为什么这样做,但瑞德"读懂"了他。这种无需解释的理解本身就是一种秘密分享
170
- - **为什么有效:** 这个场景的力量在于"不对称的理解"——安迪不知道瑞德在观察他,瑞德也没有告诉安迪自己理解了什么。但读者同时看到了两个人的内心,感受到了一种安静的、深层的连接。这种联结不是通过对话建立的,而是通过一个人对另一个人的深度观察建立的
171
-
172
- ---
173
-
174
- ## 写作提示
175
-
176
- ### 五个设计问题
177
-
178
- 在设计联结时刻之前,问自己以下五个问题:
179
-
180
- 1. **为什么是现在?** 是什么触发事件让这个联结时刻在此刻发生,而不是更早或更晚?角色之间的信任是否已经积累到了临界点?
181
-
182
- 2. **为什么是这个人?** 角色为什么选择对这个特定的人展示脆弱?对方身上有什么特质让角色感到安全?这种安全感是如何在之前的互动中建立的?
183
-
184
- 3. **代价是什么?** 这个联结时刻让角色付出了什么代价?展示脆弱意味着放弃控制,分享秘密意味着交出把柄。如果联结没有代价,它就没有重量。
185
-
186
- 4. **之后会怎样?** 联结时刻之后,角色之间的关系会发生什么变化?他们会更亲近,还是因为暴露了太多而感到不安?联结时刻的余波往往比时刻本身更有戏剧性。
187
-
188
- 5. **读者能感同身受吗?** 这个联结时刻是否触及了普遍的人类经验?读者是否能在其中看到自己的影子?最好的联结时刻让读者想起自己生命中类似的瞬间。
189
-
190
- ### 五项检查清单
191
-
192
- 完成联结时刻的写作后,用以下清单检查:
193
-
194
- - [ ] **铺垫充分:** 联结时刻之前有足够的互动铺垫,信任的建立是渐进的
195
- - [ ] **动机清晰:** 角色展示脆弱的原因是具体的、可信的,而不是"不知道为什么就想说"
196
- - [ ] **细节具体:** 场景中有独特的、具体的细节,而不是笼统的情感描述
197
- - [ ] **双向互动:** 联结是双向的——不只是一方倾诉、另一方倾听,而是双方都有所给予
198
- - [ ] **余波真实:** 联结时刻之后,角色的行为发生了可观察的变化,而不是仿佛什么都没发生
199
-
200
- ---
201
-
202
- ## 进阶技巧
203
-
204
- ### 技巧1:延迟确认 (Delayed Confirmation)
205
-
206
- 不要在联结时刻发生时就让角色意识到联结已经建立。让角色在事后——可能是几天、几周、甚至几个月后——才突然意识到"原来从那一刻起,我就已经在乎这个人了"。
207
-
208
- **具体做法:** 在联结场景中,用客观的、克制的笔触描写事件本身。不要写角色的内心感受。然后在后续的章节中,让角色在某个不相关的时刻突然回忆起那个场景,这时才揭示那个时刻的情感意义。
209
-
210
- **效果:** 这种技巧模拟了真实生活中的情感体验——我们往往不是在当下意识到一段关系的重要性,而是在回忆中才明白。延迟确认让联结时刻的情感冲击力翻倍,因为读者会和角色一起经历那个"恍然大悟"的瞬间。
211
-
212
- ### 技巧2:不完美联结 (Imperfect Bonding)
213
-
214
- 让联结时刻带有瑕疵。也许一方说错了话,也许时机不太对,也许联结被外部事件打断了。不完美的联结比完美的联结更真实,因为现实生活中的重要时刻很少是完美的。
215
-
216
- **具体做法:** 在联结场景的高潮处引入一个小小的"错误"——角色说了一句不合时宜的玩笑、手机突然响了、有人敲门。然后让角色在这个不完美中找到真实的连接——正是因为这个时刻不完美,它才更像真实的生活,而不是电影里的桥段。
217
-
218
- **效果:** 不完美让读者放下"这是虚构的"的防备,因为他们自己的人生经验告诉他们:真正重要的时刻从来不会像想象中那样完美。瑕疵反而成为了真实性的证明。
219
-
220
- ### 技巧3:多层联结 (Layered Bonding)
221
-
222
- 不要把联结时刻写成单一的情感事件。让它同时在多个层面上发生——表面上是一件事,深层是另一件事。角色可能以为自己在因为 A 而联结,但实际上真正的联结原因是 B。
223
-
224
- **具体做法:** 设计一个表面事件(比如一起完成一个任务)和一个深层事件(比如在任务中发现对方和自己有相同的童年创伤)。让角色在表面事件结束后说"我们配合得不错",但让读者通过细节看到真正的联结发生在深层。
225
-
226
- **效果:** 多层联结创造了一种"冰山效应"——读者看到的比角色意识到的更多,这种信息不对称让读者产生一种参与感和优越感,同时也为后续的情节发展埋下伏笔。当角色最终意识到真正的联结原因时,读者会感到一种"我早就知道了"的满足感。
@@ -1,284 +0,0 @@
1
- # Declaration (告白)
2
-
3
- ## 核心定义
4
-
5
- 告白 = 角色表达爱、忠诚、承诺或重要情感的关键时刻。
6
-
7
- 告白不限于浪漫爱情。它可以是:
8
- - **爱情告白:** 向心仪之人表达爱意
9
- - **友情宣言:** "你是我最重要的人"
10
- - **忠诚誓言:** "我会站在你这边,无论发生什么"
11
- - **信念宣告:** "我相信你,即使全世界都不信"
12
- - **身份坦白:** 揭露自己一直隐藏的真实身份或秘密
13
-
14
- 告白的本质是**脆弱性的主动暴露**——角色选择放下防备,将自己最真实的一面交给另一个人。这意味着权力关系的转移:告白者将"伤害自己的权力"交到了对方手中。
15
-
16
- ---
17
-
18
- ## 核心元素
19
-
20
- ### 1. 情感积累 (Emotional Build-up)
21
-
22
- 告白不能凭空出现。读者需要看到情感从萌芽到无法压抑的完整过程。
23
-
24
- **积累方式:**
25
- - 多次欲言又止的铺垫场景
26
- - 角色内心独白中反复出现对方
27
- - 小动作泄露真实情感(不自觉地注视、下意识地保护)
28
- - 第三方角色的旁敲侧击("你对他/她的态度不一样")
29
-
30
- **关键原则:** 积累时间越长,告白的爆发力越强。但积累不等于拖延——每一个铺垫场景都应该增加新的情感层次,而不是简单重复"我喜欢他/她但不敢说"。
31
-
32
- ### 2. 风险与代价 (Stakes)
33
-
34
- 没有风险的告白没有张力。角色必须有可能失去什么。
35
-
36
- **常见风险:**
37
- - 被拒绝的羞耻
38
- - 破坏现有关系(友情变质、合作关系崩塌)
39
- - 暴露弱点被敌人利用
40
- - 违背自己的原则或立场
41
- - 社会地位、家族关系的损失
42
-
43
- **设计要点:** 风险越具体、越不可逆,告白场景的紧张感越强。"被拒绝会尴尬"远不如"被拒绝意味着我们再也无法并肩作战"。
44
-
45
- ### 3. 时机选择 (Timing)
46
-
47
- 为什么是**现在**?这个问题必须有令人信服的答案。
48
-
49
- **好的时机触发器:**
50
- - 生死关头——可能再也没有机会说
51
- - 即将分离——不说就永远没机会了
52
- - 目睹对方受伤或陷入危险——情感压过理智
53
- - 被第三者的行动逼到墙角——再不说就来不及了
54
- - 内心积累到了临界点——一个微小的触发事件引爆所有情感
55
-
56
- **差的时机:** 没有任何外部或内部压力,角色突然决定"今天是个好日子,我要告白"。
57
-
58
- ### 4. 表达方式 (Mode of Expression)
59
-
60
- 告白不一定是说出"我爱你"三个字。事实上,最动人的告白往往不直接说出口。
61
-
62
- **表达光谱:**
63
- - 语言直接表达(最常见,但最容易落入俗套)
64
- - 行动表达(用牺牲、选择、放弃来证明)
65
- - 象征物表达(一件物品承载所有未说出口的话)
66
- - 沉默表达(眼神、停顿、未完成的句子)
67
- - 反向表达(试图否认但越描越黑)
68
-
69
- ---
70
-
71
- ## 常见套路(应避免)
72
-
73
- 以下是被过度使用的告白模式,除非你有意颠覆它们,否则应当回避:
74
-
75
- - **直接说"我爱你":** 缺乏新意,且在很多文化语境中显得突兀。真实生活中,人们很少用这三个字来告白——他们会绕弯子、会结巴、会说一些看似无关的话。
76
- - **雨中告白 / 机场追人:** 影视剧的经典桥段,但在小说中已经严重过度使用。读者看到"雨"和"追"就能猜到接下来的每一句台词。
77
- - **误会解除后立刻告白:** 误会刚刚解开,角色立刻深情表白。问题在于:情感转换太快,缺乏消化和犹豫的过程,显得不真实。
78
- - **完美的长篇独白:** 角色突然变成诗人,说出一段毫无瑕疵的深情告白。现实中,越是重要的话越说不好——结巴、词不达意、说到一半跑题,这些才是真实的。
79
- - **背景音乐式的环境配合:** 夕阳、樱花飘落、星空……环境过于完美反而削弱了情感的力量。最好的告白场景往往发生在最不浪漫的地方。
80
-
81
- ---
82
-
83
- ## 新颖变体
84
-
85
- ### 变体1:行动告白 (Declaration by Action)
86
-
87
- 角色不说一个字,但用行为证明一切。
88
-
89
- **核心逻辑:** 当语言不够用时,行动比千言万语更有力。
90
-
91
- **示例场景:** 一个一直声称"我不在乎任何人"的角色,在关键时刻放弃了自己追求多年的目标,只为救对方一命。他事后依然嘴硬:"我只是觉得你死了太麻烦。"但对方和读者都明白真正的含义。
92
-
93
- **适用情境:**
94
- - 角色性格内敛、不善言辞
95
- - 角色有"绝不承认弱点"的人设
96
- - 语言在当前情境中显得苍白(战场、灾难现场)
97
-
98
- **写作要点:** 行动的代价必须足够大,大到不可能用其他理由解释。如果角色只是帮对方倒了杯水,读者不会将其解读为告白。
99
-
100
- ### 变体2:失败的告白 (Failed Declaration)
101
-
102
- 告白了,但被拒绝、被打断、或时机完全错误。
103
-
104
- **核心逻辑:** 失败的告白比成功的告白更有戏剧张力,因为它打开了更多叙事可能性。
105
-
106
- **示例场景:** 角色鼓起全部勇气说出心意,对方沉默了很久,然后说:"我知道。但我现在没办法回应你。"——不是拒绝,不是接受,而是一个悬而未决的状态,比任何明确答案都更折磨人。
107
-
108
- **适用情境:**
109
- - 故事中段,需要制造情感波折
110
- - 角色关系需要经历考验才能升华
111
- - 想要展示告白者的脆弱和勇气
112
-
113
- **写作要点:** 失败不等于结束。失败的告白应该改变两人的关系动态——即使被拒绝,"说出口"这件事本身就让一切不同了。
114
-
115
- ### 变体3:间接告白 (Indirect Declaration)
116
-
117
- 通过第三者、物品、信件、或隐喻来传达情感。
118
-
119
- **核心逻辑:** 有些话直接说太沉重,需要一个"中介"来缓冲。
120
-
121
- **示例场景:** 角色写了一封信,但没有寄出。信被第三个人无意中发现并转交。收信人读到的不是精心措辞的告白,而是一封充满涂改、犹豫、自我否定的草稿——正是这些不完美暴露了最真实的情感。
122
-
123
- **适用情境:**
124
- - 角色之间有物理距离或身份障碍
125
- - 角色的性格不允许直接表达
126
- - 想要增加信息传递的不确定性和戏剧性
127
-
128
- **写作要点:** 间接传达的信息容易被误解或不完整,这本身就是制造冲突的好工具。
129
-
130
- ### 变体4:沉默告白 (Silent Declaration)
131
-
132
- 什么都没说,但双方都懂了。
133
-
134
- **核心逻辑:** 最深的情感往往存在于语言的空白处。
135
-
136
- **示例场景:** 两个角色并肩坐着,看着远方。一个人的手慢慢移过去,覆盖在另一个人的手上。没有人说话。没有人看对方。但两个人都没有把手抽开。沉默持续了很久,然后其中一个人轻轻收紧了手指。这就是全部。
137
-
138
- **适用情境:**
139
- - 角色之间已经有深厚的默契
140
- - 环境不允许言语(旁人在场、危险情境)
141
- - 想要营造含蓄、余韵悠长的氛围
142
-
143
- **写作要点:** 沉默告白依赖前文的大量铺垫。如果读者不了解两人的关系历程,沉默就只是沉默,不会被解读为告白。同时,身体语言的描写必须精准——一个微小的动作要承载巨大的情感重量。
144
-
145
- ---
146
-
147
- ## 情感真实性
148
-
149
- 如何让告白场景令读者信服?
150
-
151
- ### 原则1:不完美才真实
152
-
153
- 真实的告白充满瑕疵:
154
- - 说到一半忘词
155
- - 准备好的台词全部作废,最后说出完全不同的话
156
- - 紧张导致的不合时宜的笑或沉默
157
- - 说完之后立刻后悔
158
-
159
- ### 原则2:身体反应先于语言
160
-
161
- 人在极度紧张时,身体会先于大脑做出反应:
162
- - 心跳加速、手心出汗
163
- - 声音发抖或突然变小
164
- - 无法直视对方的眼睛
165
- - 不自觉地摆弄手边的东西
166
-
167
- **写作技巧:** 先写身体反应,再写语言。"他的手在发抖。他把手插进口袋里,又拿出来。'我……'他开口了,但声音像是从很远的地方传来的。"
168
-
169
- ### 原则3:角色一致性
170
-
171
- 告白方式必须符合角色性格:
172
- - 一个骄傲的角色不会突然变得卑微
173
- - 一个沉默寡言的角色不会突然口若悬河
174
- - 一个理性的角色可能会用逻辑来包装情感("从概率上来说,和你在一起是最优解")
175
-
176
- ### 原则4:对方的反应同样重要
177
-
178
- 很多作者把所有笔墨放在告白者身上,忽略了被告白者的反应。被告白者的震惊、犹豫、感动、恐惧——这些反应决定了场景的情感走向。
179
-
180
- ---
181
-
182
- ## 示例分析
183
-
184
- ### 示例1:《傲慢与偏见》达西的两次求婚
185
-
186
- **第一次求婚(失败的告白):**
187
-
188
- 达西的第一次求婚是一个经典的"失败告白"。他表达了爱意,但同时表达了对伊丽莎白家庭地位的轻蔑:"违背自己的意愿、理智和性格"而爱上她。这不是谦卑的告白,而是居高临下的施舍。
189
-
190
- **为什么有效:**
191
- - 告白中包含了角色的核心缺陷(傲慢)
192
- - 伊丽莎白的拒绝既合理又有力
193
- - 失败推动了达西的角色成长
194
- - 读者同时感受到达西的真诚和他的盲点
195
-
196
- **第二次求婚(成功的告白):**
197
-
198
- 第二次求婚几乎没有直接描写。奥斯汀用极其克制的笔法,让读者通过伊丽莎白的视角感受到达西的变化——他不再傲慢,不再强调自己的牺牲,而是简单地、真诚地再次表达了心意。
199
-
200
- **为什么有效:**
201
- - 与第一次形成鲜明对比,展示角色成长
202
- - 克制的描写反而增强了情感力量
203
- - 读者经历了整本书的铺垫,此刻的满足感是积累的结果
204
-
205
- **写作启示:** 同一对角色的两次告白,可以成为展示角色弧光 (character arc) 的绝佳工具。第一次的失败让第二次的成功更有分量。
206
-
207
- ### 示例2:非浪漫告白——战友之间的忠诚宣言
208
-
209
- **场景设定:** 一个被所有人背叛的角色,在最低谷时,他曾经最不信任的同伴站了出来。
210
-
211
- **场景描写:**
212
- 同伴没有说"我会保护你"或"我站在你这边"这样的话。他只是默默地走到角色身边,把自己的武器放在地上——在这个世界里,放下武器意味着把生命交给对方。然后他说了一句看似无关的话:"你上次做的那顿饭太难吃了,我还没来得及抱怨。"
213
-
214
- **为什么有效:**
215
- - 行动(放下武器)比任何语言都有力
216
- - 轻描淡写的台词与沉重的行动形成反差
217
- - 符合角色性格(不善表达的战士)
218
- - 用日常细节(难吃的饭)暗示"我打算继续和你在一起"
219
-
220
- ---
221
-
222
- ## 写作提示
223
-
224
- ### 5 个设计问题
225
-
226
- 在写告白场景之前,回答以下问题:
227
-
228
- 1. **角色为什么现在告白?** 是什么具体事件或内心变化让他/她无法再沉默?如果答案是"因为剧情需要",那你需要重新设计触发点。
229
-
230
- 2. **告白失败的后果是什么?** 如果被拒绝,角色会失去什么?后果越严重,场景张力越大。如果失败没有任何代价,读者不会紧张。
231
-
232
- 3. **这个角色会怎么告白?** 基于性格、背景、当前情绪状态,这个角色最可能的表达方式是什么?一个军人和一个诗人的告白方式应该截然不同。
233
-
234
- 4. **对方准备好了吗?** 被告白者的心理状态是什么?完全没有预料到?早就在等待?还是正处于无法回应的困境中?
235
-
236
- 5. **这个告白如何改变两人的关系?** 无论成功还是失败,告白之后两人的关系动态应该发生不可逆的变化。如果告白后一切照旧,这个场景就没有存在的必要。
237
-
238
- ### 5 项检查清单
239
-
240
- 完成告白场景后,逐项检查:
241
-
242
- - [ ] **铺垫充分:** 回顾前文,确认有至少 3 个场景暗示了这份情感的存在
243
- - [ ] **风险明确:** 读者能清楚感受到告白者在冒什么险
244
- - [ ] **表达方式符合角色:** 告白的语言/行为与角色一贯的性格一致
245
- - [ ] **对方有真实反应:** 被告白者不是一个被动的接收器,而是有自己的情感反应和内心冲突
246
- - [ ] **场景有后续影响:** 告白的结果(无论成败)在后续章节中持续产生影响
247
-
248
- ---
249
-
250
- ## 进阶技巧
251
-
252
- ### 技巧1:延迟满足 (Delayed Gratification)
253
-
254
- 不要让告白在一个场景内完成。把它拆分成多个阶段:
255
-
256
- - **第一阶段:** 角色几乎说出口,但被打断或自己退缩
257
- - **第二阶段:** 对方察觉到了什么,但不确定
258
- - **第三阶段:** 真正的告白发生,但可能不是在读者期待的时刻
259
-
260
- **效果:** 每一次"差一点"都在增加读者的期待值。当告白最终发生时,积累的情感张力会在一瞬间释放,产生远超单次告白的冲击力。
261
-
262
- **实操建议:** 在第一阶段和第二阶段之间插入其他情节线,让读者在等待中焦虑。但注意不要拖延太久——超过读者的耐心阈值,期待会变成厌烦。
263
-
264
- ### 技巧2:环境反差 (Environmental Contrast)
265
-
266
- 让告白发生在与情感氛围完全不匹配的环境中。
267
-
268
- - 在嘈杂的战场上低声说出最温柔的话
269
- - 在无聊的超市货架之间突然袒露心声
270
- - 在葬礼上意识到自己必须对活着的人说出真相
271
-
272
- **效果:** 环境与情感的反差会产生强烈的戏剧张力。完美的环境让告白显得像电影桥段;不完美的环境让告白显得像真实人生。
273
-
274
- **实操建议:** 环境不仅是背景,还可以成为告白的催化剂。比如超市里某个商品触发了共同回忆,角色在那个瞬间再也忍不住了。让环境参与叙事,而不仅仅是装饰。
275
-
276
- ### 技巧3:多层告白 (Layered Declaration)
277
-
278
- 在一个告白场景中同时传达多层含义。
279
-
280
- **示例:** 角色说"我不想让你一个人去"。表面上是在说即将到来的危险任务,但潜台词是"我不想失去你",更深层是"我的人生不能没有你"。对方听懂了哪一层,取决于他们之间的关系深度。
281
-
282
- **效果:** 多层告白让场景经得起反复阅读。第一遍读者可能只看到表面意思,重读时会发现更深的含义。这种"发现感"会极大提升读者的阅读体验。
283
-
284
- **实操建议:** 设计多层告白时,确保每一层都能独立成立。即使读者只理解了表面意思,场景依然有效;理解了深层含义的读者会获得额外的情感奖励。同时,可以通过后续情节逐渐揭示更深的层次,让读者产生"原来那句话还有这个意思"的顿悟。