@oh-story/dsh 0.1.10 → 0.1.12

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 (444) hide show
  1. package/README.md +11 -11
  2. package/lib/client.js +7 -3
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +212 -142
  5. package/lib/drama/skills/short-drama/SKILL.md +14 -2
  6. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
  8. package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
  9. package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
  10. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  11. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  12. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  13. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  14. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  15. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  16. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  17. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  18. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  19. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  20. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
  21. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  22. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  23. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  25. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  26. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  27. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  28. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  29. package/lib/drama/skills/short-drama-edit/SKILL.md +43 -20
  30. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  31. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  32. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  33. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  46. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +4 -2
  47. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +3 -1
  48. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +6 -2
  49. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +12 -6
  50. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +13 -8
  51. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1153 -121
  53. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +49 -9
  54. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  55. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  56. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  57. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  58. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  59. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  60. package/lib/drama/skills/short-drama-review/SKILL.md +2 -2
  61. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  62. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  63. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  64. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -0
  65. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  66. package/lib/drama/skills/short-drama-storyboard/SKILL.md +13 -5
  67. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  68. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +82 -14
  70. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +4 -2
  71. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +5 -3
  72. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +12 -0
  73. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  74. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  75. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +40 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +20 -14
  77. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +1 -1
  78. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +8 -7
  79. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  80. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  81. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  82. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  83. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  84. package/lib/drama/skills/short-drama-write/SKILL.md +8 -3
  85. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  86. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  87. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  88. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  89. package/lib/index.js +71 -21
  90. package/lib/index.js.map +3 -3
  91. package/lib/oh-story/manifest.json +545 -310
  92. package/lib/oh-story/roles/chapter-extractor.md +11 -11
  93. package/lib/oh-story/roles/character-designer.md +1 -2
  94. package/lib/oh-story/roles/consistency-checker.md +11 -9
  95. package/lib/oh-story/roles/narrative-writer.md +24 -25
  96. package/lib/oh-story/roles/story-architect.md +9 -61
  97. package/lib/oh-story/roles/story-explorer.md +20 -125
  98. package/lib/oh-story/roles/story-researcher.md +0 -1
  99. package/lib/oh-story/skills/story/SKILL.md +6 -6
  100. package/lib/oh-story/skills/story/VERSION +1 -1
  101. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  102. package/lib/oh-story/skills/story/references/author-memory.md +40 -118
  103. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +3 -3
  104. package/lib/oh-story/skills/story-deslop/SKILL.md +24 -25
  105. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  106. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +1 -1
  107. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  108. package/lib/oh-story/skills/story-deslop/references/author-memory.md +40 -118
  109. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  110. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +21 -4
  111. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  112. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +3 -3
  113. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  114. package/lib/oh-story/skills/story-import/SKILL.md +63 -579
  115. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  116. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  117. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  118. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  119. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  120. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  121. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  122. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  123. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +95 -91
  124. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  125. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  126. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +11 -9
  127. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  128. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +101 -14
  129. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +278 -23
  130. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +179 -23
  131. package/lib/oh-story/skills/story-long-analyze/SKILL.md +28 -50
  132. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +12 -5
  133. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +1 -1
  134. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  135. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  136. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +21 -55
  137. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  139. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  141. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  142. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +17 -0
  143. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +1 -1
  144. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  145. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +47 -8
  146. package/lib/oh-story/skills/story-long-scan/SKILL.md +41 -193
  147. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  148. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  149. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  150. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  151. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  152. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  153. package/lib/oh-story/skills/story-long-write/SKILL.md +32 -73
  154. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  155. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +1 -1
  156. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +18 -201
  157. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  158. package/lib/oh-story/skills/story-long-write/references/author-memory.md +40 -118
  159. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  160. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +6 -10
  161. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  162. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  163. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  164. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  165. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  166. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +3 -2
  167. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  168. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  169. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  170. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  171. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  172. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  173. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  174. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  175. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  176. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  177. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -6
  178. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
  179. package/lib/oh-story/skills/story-long-write/references/reference-index.md +4 -4
  180. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  181. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  182. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  183. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  184. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  185. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +11 -9
  186. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +33 -44
  187. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +18 -51
  188. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  189. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +53 -67
  190. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -251
  191. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  192. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +5 -3
  193. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +18 -56
  194. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +3 -3
  195. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  196. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +96 -16
  197. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  198. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +101 -14
  199. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  200. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +2 -1
  201. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +250 -50
  202. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +278 -23
  203. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +179 -23
  204. package/lib/oh-story/skills/story-review/SKILL.md +19 -273
  205. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  206. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +1 -1
  207. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  208. package/lib/oh-story/skills/story-review/references/author-memory.md +40 -118
  209. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  210. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  211. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  212. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -1
  213. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  214. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  215. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  216. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  217. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +11 -9
  218. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +3 -3
  219. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  220. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +278 -23
  221. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +179 -23
  222. package/lib/oh-story/skills/story-setup/SKILL.md +69 -458
  223. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  224. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +1 -1
  225. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  226. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  227. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  228. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +21 -4
  229. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  230. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  234. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  236. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  237. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  238. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  239. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  240. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  241. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  242. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  243. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  244. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  245. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  246. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +18 -56
  247. package/lib/oh-story/skills/story-setup/references/diagnostics.md +3 -3
  248. package/lib/oh-story/skills/story-short-analyze/SKILL.md +37 -110
  249. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  250. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  251. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  252. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  253. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  254. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  255. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/{material-decomposition.md → stage4-6-reversal-summary.md} +303 -374
  257. package/lib/oh-story/skills/story-short-scan/SKILL.md +30 -64
  258. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  259. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  260. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  261. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  262. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -34
  263. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  264. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  265. package/lib/oh-story/skills/story-short-write/references/author-memory.md +40 -118
  266. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  267. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  268. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  270. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  271. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -49
  272. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  273. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  274. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  276. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  277. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  278. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  279. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  280. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +19 -12
  281. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +22 -32
  282. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +84 -17
  283. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  284. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +3 -3
  285. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  286. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  287. package/lib/types/client/video-studio.d.ts.map +1 -1
  288. package/lib/types/native-hooks.d.ts +2 -2
  289. package/lib/types/native-hooks.d.ts.map +1 -1
  290. package/lib/types/role-tool.d.ts.map +1 -1
  291. package/lib/types/skill-provider.d.ts.map +1 -1
  292. package/lib/types/video-project.d.ts.map +1 -1
  293. package/lib/types/workspace-route.d.ts.map +1 -1
  294. package/lib/video-recap/CHANGELOG.md +60 -1
  295. package/lib/video-recap/README.en.md +348 -137
  296. package/lib/video-recap/README.md +340 -136
  297. package/lib/video-recap/manifest.json +406 -251
  298. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  299. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  300. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  301. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  302. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  303. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  304. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  305. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  306. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  307. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  308. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  309. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  310. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  311. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  312. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  313. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  314. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  315. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  316. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  317. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  318. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  319. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  320. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  321. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  322. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  323. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  324. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  325. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  326. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  327. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  328. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  329. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  330. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  331. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  332. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  333. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  334. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  335. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  336. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  337. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  338. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  339. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  340. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  341. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  342. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  343. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  344. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  345. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  346. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  347. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  348. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  349. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  350. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  351. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  352. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  353. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  354. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  355. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  356. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  357. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  358. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  359. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  360. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  361. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  362. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  363. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  364. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  365. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  366. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  367. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  368. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  369. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  370. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  371. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  372. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  373. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  374. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  375. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  376. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  377. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  378. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  379. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  380. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  381. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  382. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  383. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  384. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  385. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  386. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  387. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  388. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  389. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  390. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  391. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  392. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  393. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  394. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  395. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  396. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  397. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  398. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  399. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  400. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  401. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  402. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  403. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  404. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  405. package/lib/video-recap/skills/video-understanding/scripts/{agent_brief.py → briefing/builder.py} +38 -35
  406. package/lib/video-recap/skills/{video-script/scripts/brief_context.py → video-understanding/scripts/briefing/context.py} +4 -35
  407. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  408. package/lib/video-recap/skills/video-understanding/scripts/{brief_timeline.py → briefing/timeline.py} +5 -6
  409. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  410. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  411. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  412. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  413. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  414. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  415. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  416. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  417. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  418. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  419. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  420. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  421. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  422. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  423. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  424. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  425. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  426. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  427. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  428. package/package.json +41 -41
  429. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -538
  430. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -603
  431. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  432. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  433. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  435. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  436. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  437. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +0 -399
  438. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +0 -327
  439. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  440. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +0 -348
  441. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  442. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  443. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  444. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -65,8 +65,8 @@
65
65
 
66
66
  | 级别 | 判定 | 动作 |
67
67
  |---|---|---|
68
- | blocking / critical | 核心契约、因果或事实无法成立 | 先修再继续下游写作 |
69
- | high | 会明显损害追读、人物可信度或核心卖点 | 本轮修复 |
70
- | medium | 局部拖慢、重复或表达不清 | 按收益排序修复 |
71
- | low / optional | 不影响成立,只是可增强 | 不得包装成硬门槛 |
68
+ | blocking / critical | 核心契约、因果或事实无法成立 | 必须修:先修再继续下游写作 |
69
+ | high | 会明显损害追读、人物可信度或核心卖点 | 必须修:本轮修复 |
70
+ | medium | 局部拖慢、重复或表达不清 | 建议看:按收益排序修复 |
71
+ | low / optional | 不影响成立,只是可增强 | 仅提示:不得包装成硬门槛 |
72
72
 
@@ -285,7 +285,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
285
285
  - 剧透式点破潜台词:「那点笑她看得分明」「谁都看得出他在撒谎」-> 把藏着的挑明了。留着别点破。
286
286
  - 定性比喻/盖棺句:「像在宣判一件早已定好的事」「像看一件死物」-> 比喻在替角色下定论。非角色此刻强烈主观感受就删;要留也只能是她带偏见的瞬间感觉,不是客观断言。
287
287
 
288
- 自检:每句问一遍——这是"角色在经历",还是"作者在讲解/安排"?凡作者跳出来讲,删,或改成角色视角内的呈现。根治办法是锁定深度限知视角(见 writing-craft.md「视角姿态:深度限知」),镜头钉死在角色身体里,作者就没位置跳出来了。
288
+ 自检:每句问一遍——这是"角色在经历",还是"作者在讲解/安排"?凡作者跳出来讲,删,或改成角色视角内的呈现。根治办法是锁定深度限知视角:只写视角人物此刻看得见、听得见、想得到的,镜头钉死在角色身体里,作者就没位置跳出来了。
289
289
 
290
290
  改法优先级:先删或原位替换污染句,不在段尾另补“人味”尾巴。需要补信息时,把原来的总结/动机/评价句改成角色当下能碰到的问题、手续、回信、付款、门外动静等具体压力;已有手机/屏幕/公告/门牌/表单等信息,优先作为角色看见的场内载体保留,不要转写成叙述者解释。具体载体跟剧情走,不套固定清单。
291
291
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## 默认优先检查的句式(先对照本书文风)
8
8
 
9
- 写网文最毒的 AI 句式,作者一旦养成就会反复出现。Gate A 第一遍扫描必须命中:
9
+ 写网文最毒的 AI 句式,作者一旦养成就会反复出现。以下是优先检查的句式:
10
10
 
11
11
  | 毒级 | 句式 | 错误例 | 修法 |
12
12
  |------|------|--------|------|
@@ -21,7 +21,7 @@
21
21
  | ★★★ | 抽象命运/开端收束:"命运……棋局/獠牙" / "这一刻终于明白" / "反击才刚刚开始" | "命运终于露出獠牙;属于他的反击才刚刚开始" | 回到角色当下可见的文件、动作、对话或物理后果 |
22
22
  | ★★ | 章末预告 "他不知道的是……" | "他不知道的是,更大的风暴即将来临" | 用具体钩子物件/事件收束,避免空泛预告 |
23
23
 
24
- > 凡命中 ★★★★★ 一处即视为重度AI味的强证据;★★★★ 命中 ≥2 处即触发中度复扫。
24
+ > ★★★★★ 命中一处就要改;轻/中/重分档只按去 AI 味诊断的密度指标定。
25
25
 
26
26
  `check-ai-patterns.js` 的 `formulaic-parallelism` 还会提示「至于X不X,怎么X」和同动词「不V A,不V B」。这两类可能是功能性口语,因此只做 advisory;Gate B 必须连同台词读语境复核,若只是复述细纲/前文就压成一次判断,不能因 hook 豁免台词而跳过。
27
27
 
@@ -0,0 +1,107 @@
1
+ # 对标文风召回(story-explorer · benchmark_style_load)
2
+
3
+ 只在 `query_type` 为 `benchmark_style_load` 时读本文件;其他查询类型不读。输出同样遵守 agent 定义里的「纯 JSON、字符串转义」规则,原文锚点片段尤其要转义。
4
+
5
+ ## 流程
6
+
7
+ 加载对标书的情绪模块 + 节奏索引 + 文风 + 按本章情绪/基调匹配可参考章节 + 原文锚点片段。
8
+
9
+ 1. **解析输入**:项目目录 + 本章情绪/基调 + (可选)本章爽点类型 + (可选)本章目标字数
10
+ 2. **主对标书选择**:
11
+ - 先按项目目录名、`.active-book` 与本书设定识别当前作品;`拆文库/{当前书}/` 是 story-import 的本书分析,不是对标候选。历史误建的 `对标/{当前书}/` 也必须排除,并返回 `gaps.self_benchmark_ignored: true`
12
+ - `Read 设定/题材定位.md`,提取 `主对标书` 字段
13
+ - 若有且不是当前作品 → 用该书;若字段指向当前作品 → 忽略该字段并设置 `gaps.self_benchmark_ignored: true`
14
+ - **路径一律用字段值逐字拼接**:不添加《》等任何装饰、不改一字——拼错时 Glob 只会静默返回空,与「书不存在」无法区分
15
+ - **登记的主对标按步骤 3 探不到书目录**(目录下探不到任何文件)→ 返回 `gaps.benchmark_book_missing: true` 与 `expected_path`(原样写入实际探测的完整路径,供核对拼写),`results` 置空**停止**;不得改用其他书,也不得走下面的缺失回退。**书目录存在但缺 `文风.md` 不属于本情形**——照常进入步骤 4-6,由步骤 6 归类为 `profile_missing`
16
+ - 若字段缺失或已忽略 → `Glob 对标/*/**/*`,从命中文件所属的书目录(`对标/` 下的第一层目录,排除当前作品)取字典序第一个,并在 `gaps.main_benchmark_unspecified: true` 提示主对标书未指定;**枚举条件是书目录下有文件,不是有 `文风.md`**——缺文风但资料完整的候选仍算命中
17
+ - 若排除后无命中,继续向上找工作区根下的 `拆文库/*/**/*`,同样排除当前作品;仍无 → 返回 `gaps.no_benchmark: true`,`results` 置空,**不报错、不继续读文风**
18
+ 3. **对标书路径查找(只判书目录有效性,不判文风)**:优先探 `{项目}/对标/{书名}/**/*`,回退探 `拆文库/{书名}/**/*`(向上找到工作区根,再下钻拆文库);探针是目录下的任意文件——Glob 不接受纯目录模式,`{书名}/` 恒返回空。任一处命中文件即视为书目录有效,进入步骤 4;两处都无命中才是 `benchmark_book_missing`。**不得用 `文风.md` 兼作目录存在性探针**——那会把「书在但缺文风」误判成「书不存在」,吞掉步骤 6 的 `profile_missing` 与调用方的 `custom_style` 降级分支
19
+ 4. **主产物探针与资料代际**:
20
+ - 先探 `{对标书路径}/剧情/情绪模块.md` 和 `{对标书路径}/剧情/节奏.md`,两者都存在才进入当前权威召回。
21
+ - 任一未命中时直接按下面两项返回并停止准备;`schema_version` 不参与新旧判断。两份老权威产物都存在时正常召回,缺少因果、双时间线或三维节奏等新增内嵌字段不阻断。
22
+ - 缺 `剧情/情绪模块.md` → `gaps.missing_primary_contract: true`、`gaps.module_missing: true`,`repair_action` 写“重跑 /story-long-analyze Stage 3,补齐情绪模块”。
23
+ - 缺 `剧情/节奏.md` → `gaps.missing_primary_contract: true`、`gaps.rhythm_missing: true`,`repair_action` 写“重跑 /story-long-analyze Stage 3,补齐节奏索引”。
24
+ 5. **当前权威召回**:
25
+ - 对存在的 `{对标书路径}/剧情/情绪模块.md`,从读者需求、情绪引擎或可复现模块中选择 1 条 `selected_emotion_module`,写入 `module_source_path`。
26
+ - 对存在的 `{对标书路径}/剧情/节奏.md`,从关键信息推进、情绪触动点、爆发/冷却中选择 1 条 `rhythm_reference`,写入 `rhythm_source_path`。
27
+ - 若两个权威文件都存在但对同一章节/模块的读者情绪或爆发点描述互相矛盾,保留两条原文摘要,并返回 `gaps.module_rhythm_conflict: true` 与 `gaps.conflict: "..."`;调用方按两个权威文件优先于 `拆文报告.md` / `故事线.md` 的规则处理,禁止自行改写
28
+ 6. **读文风**:
29
+ - `Read {对标书路径}/文风.md`
30
+ - 不存在 → 返回 `gaps.profile_missing: true, expected_path: "..."`,**不继续后续步骤**;书目录本身有效,不得改填 `benchmark_book_missing`——调用方按 `custom_style` 决定继续或停止
31
+ - 检查「生成记录」里的 `文风可用:否` → 返回 `gaps.profile_degenerate: true`,后续不把文风作为强约束
32
+ 7. **可用性检查(只读可执行)**:
33
+ - 本 agent 只有 `Read/Glob/Grep`,不能调用 Bash/stat。
34
+ - 只读取文风文件「生成记录」:若写有 `文风可用:否`、`需重生`、`原文缺失` 等标记 → `gaps.profile_stale: true` 或 `gaps.profile_degenerate: true`,并在 `stale_reason` 写明原因。
35
+ - 不做文件时间比较;默认 `profile_stale: false`。
36
+ 8. **章节基调候选集**:
37
+ - `Glob {对标书路径}/章节/*_摘要.md`
38
+ - 对每个文件 `Grep -hE '基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)'`(**全角冒号**,不锚定行首)拿到该章所有情节点基调
39
+ - 章基调聚合:众数;并列时按 grep 输出顺序取最早
40
+ - 候选集 = 章基调 == 本章情绪/基调的章节列表
41
+ 9. **相近基调兜底**(完全没有同基调章节时):
42
+ - 先从本章细纲/查询参数里判断更接近“紧张、热血、爽、甜、轻松、温馨、悲伤、恐怖、压抑”哪一类;不要写死对照表。
43
+ - 选择一个最接近的基调重新筛候选集,并在结果里说明“使用相近基调兜底”。
44
+ - 仍空 → `gaps.tone_match_failed: true`,跳过匹配章节读取,但仍返回整书文风、`selected_emotion_module` 和 `rhythm_reference`。
45
+ 10. **多候选章节选择规则**(候选集多章时):
46
+ - L1 爽点类型最强匹配(调用方提供爽点字段时,对每个候选章读 `_摘要.md` 的「关键事件」判断)
47
+ - L2 摘要情节点数 / 可读到的原文章节估算长度最接近本章目标字数(如提供);本 agent 不用 Bash 统计,拿不到原文长度时跳过 L2,不得把摘要文件字数当原文字数
48
+ - L3 章节号最小
49
+ 11. **读匹配章节资料**:
50
+ - 先 `Read {对标书路径}/章节/第K章_摘要.md`,提取本章基调序列、关键事件、爽点/情绪节点
51
+ - 新版轻量摘要直接读取「信息变化」「状态变化」「章尾钩子」「三维节奏」字段;旧摘要缺这些字段时再读取「关键信息与扩写技法」表,作为 `matched_chapter_techniques` 的证据/补足;两者都不覆盖 `剧情/节奏.md`
52
+ - 若 `{对标书路径}/章节/第K章_深度拆解.md` 存在,再读取并提取「可借鉴要素」+ 反应层 + 章尾钩子类型
53
+ - 若同章深度拆解不存在(常见:只有黄金三章有深度拆解),不要失败;回退读取 `第1章_深度拆解.md`、`第2章_深度拆解.md`、`第3章_深度拆解.md` 中基调最接近的一章,或仅使用文风「可借鉴技巧」
54
+ - 在 `gaps.matched_deep_dive_missing: true` 标记该回退
55
+ 12. **抽取原文锚点片段**(从文风文件里):
56
+ - 从文风文件 `## 原文锚点片段` 段读出所有按基调标注的片段
57
+ - 按本章情绪/基调选 1-2 段(精确匹配优先,无则取相近基调)
58
+ - 完整传递 300-500 字原文(不要截断/概括)
59
+ 13. **返回结构化 JSON**
60
+
61
+ ## 缺失即停与降级
62
+
63
+ - 缺两个老权威主产物(`剧情/情绪模块.md`、`剧情/节奏.md`)时返回 `missing_primary_contract` 与 `repair_action`,停止准备。
64
+ - 登记的主对标书目录探不到时返回 `benchmark_book_missing` 与 `expected_path`,不换书。
65
+ - 书目录在、缺 `文风.md` 归 `profile_missing`,由调用方按 `custom_style` 决定继续或停止。
66
+
67
+ ## 输出结构
68
+
69
+ ```json
70
+ {
71
+ "query_type": "benchmark_style_load",
72
+ "results": {
73
+ "style_profile_path": "对标/{书名}/文风.md",
74
+ "style_profile_summary": "<≤200字 提取核心:标点习惯 + 对话技法 + 情绪交替模式>",
75
+ "selected_emotion_module": "<从 剧情/情绪模块.md 选出的读者需求/触发器/戏剧单元/可复现骨架;缺失时为 null>",
76
+ "rhythm_reference": "<从 剧情/节奏.md 选出的关键信息推进/情绪触动点/爆发节奏/冷却参考;缺失时为 null>",
77
+ "module_source_path": "对标/{书名}/剧情/情绪模块.md",
78
+ "rhythm_source_path": "对标/{书名}/剧情/节奏.md",
79
+ "matched_chapter_K": 14,
80
+ "matched_chapter_techniques": "<匹配章摘要 + 深度拆解/黄金三章回退中的可借鉴要素,≤300字>",
81
+ "anchor_excerpts": [
82
+ {"tone": "悲伤", "source": "第14章 第7段(行 823-901)", "demo_point": "对话潜台词手法", "text": "<300-500字原文>"},
83
+ {"tone": "热血", "source": "第8章 第3段(行 401-465)", "demo_point": "爽点铺放比", "text": "<300-500字原文>"}
84
+ ]
85
+ },
86
+ "source_files": ["设定/题材定位.md", "对标/{书名}/剧情/情绪模块.md", "对标/{书名}/剧情/节奏.md", "对标/{书名}/文风.md", "对标/{书名}/拆文报告.md", "对标/{书名}/章节/第14章_深度拆解.md"],
87
+ "gaps": {
88
+ "no_benchmark": false,
89
+ "module_missing": false,
90
+ "rhythm_missing": false,
91
+ "module_rhythm_conflict": false,
92
+ "conflict": null,
93
+ "missing_primary_contract": false,
94
+ "repair_action": null,
95
+ "profile_missing": false,
96
+ "profile_stale": false,
97
+ "profile_degenerate": false,
98
+ "stale_reason": null,
99
+ "main_benchmark_unspecified": false,
100
+ "benchmark_book_missing": false,
101
+ "self_benchmark_ignored": false,
102
+ "raw_text_unavailable": false,
103
+ "tone_match_failed": false,
104
+ "matched_deep_dive_missing": false
105
+ }
106
+ }
107
+ ```
@@ -151,7 +151,7 @@
151
151
 
152
152
  检查角色行为是否只是为了让剧情往某方向发展。如果角色"恰好"做了推进剧情的事但没有自身动机,标记为"人设偏移",必须为该行为补充角色层面的合理理由。
153
153
 
154
- ### 第二步:情绪目标确认
154
+ ### 第二步:目标情绪确认
155
155
 
156
156
  写每段前明确三个要素:
157
157
  1. 本段目标情绪:这段剧情要让读者产生什么情绪?
@@ -368,6 +368,54 @@
368
368
 
369
369
  ---
370
370
 
371
+ ## 后宫文女主人设设计法
372
+
373
+ ### 核心思路
374
+ 后宫文的关键是弱化男主"主动渣"的感觉,让女主自身设定成为推动后宫的主力。
375
+
376
+ ### 设计原则
377
+ 1. **女主人设要预设方向**:开书前就设计好每个女主的核心特质
378
+ 2. **差异化设计**:不同女主有完全不同的价值观和背景
379
+ 3. **同居培养感情**:开局让女主们同住一个屋檐下,彼此成为朋友
380
+
381
+ ### 温水煮青蛙法
382
+ 以三个女主为例:
383
+
384
+ | 角色 | 人设设计 | 在后宫中的作用 |
385
+ |------|----------|---------------|
386
+ | 青梅(正宫) | 传统价值观,占据防守位 | 从小一起长大,天然正宫 |
387
+ | 女主B | 家庭圆满家教开明,理性看待感情 | 不在意名分,只在意快乐 |
388
+ | 女主C | 缺少父爱和社交,爱情观模糊 | 不存在一夫一妻制思想束缚 |
389
+
390
+ 核心逻辑:
391
+ - 青梅占据正宫与防守位
392
+ - 另两个女主不在意后宫,只在意跟主角在一起
393
+ - 把"主角脚踏多条船"的问题转化为"青梅防守 vs 另两人共享"的问题
394
+ - 一点一点突破青梅的防守底线,等反应过来时已经是既成事实
395
+
396
+
397
+ ## 男频极简爱情线构型
398
+
399
+ ### 核心原则
400
+ 男频爱情线不需要复杂的情感博弈,核心是"英雄救美 + 事业舞台 + 对手衬托"三要素。
401
+
402
+ ### 极简构型
403
+ 1. **英雄救美**:女主陷入困境 -> 主角用金手指/实力解决 -> 建立初始好感
404
+ 2. **事业舞台**:主角在事业上展示金手指 -> 女主在场作为重要观众 -> 好感随事业成就升级
405
+ 3. **对手衬托**:情敌/对手同时是事业对手 -> 打败对手既是事业胜利也是感情胜利
406
+
407
+ ### 关键操作
408
+ - 女主的每一次好感升级都绑定在主角的事业成就上,不单独写纯感情戏
409
+ - 女主有自己的事业线/目标,不是花瓶——她的事业目标与主角有交叉但独立
410
+ - 情敌的价值在于他同时威胁主角的事业和感情,打脸时有双重爽感
411
+ - 感情节奏跟着事业节奏走:事业低谷时感情拉扯,事业高峰时感情升温
412
+
413
+ ### 爱情线与事业线融合检查
414
+ - 删掉所有爱情线段落,事业线是否还成立?如果不行 = 爱情线拖后腿了
415
+ - 删掉所有事业线段落,爱情线是否还有看点?如果不行 = 爱情线太弱
416
+ - 理想状态:两条线互相增强,拆开各自能看,合在一起更好看
417
+
418
+
371
419
  ## 质量检查清单
372
420
 
373
421
  每次完成角色关系/感情线设计后,逐项核查:
@@ -8,10 +8,10 @@
8
8
 
9
9
  1. 删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折?都不丢则直接删,不进 Gate。
10
10
  2. 丢任意一项 → 保留信息进对应 Gate 改写(只删"怎么说"的 AI 味,不删"说什么")。
11
- 3. 删除服从既有"过度去AI味保护"与「诊断与分级」比例上限:不整段删、不删剧情功能;若删后跌破字数下限,改为降AI重写,不删完再用新废话凑字。
11
+ 3. 删除服从过度去AI味保护:不整段删、不删剧情功能;删除比例上限按 AI 味等级,轻度 ≤15%,中度 ≤25%,重度 ≤35%;若删后跌破本次字数范围的下沿,改为降AI重写,不删完再用新废话凑字。
12
12
  4. 删完通读:若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴,就是删过头的电报体(见 anti-ai-writing.md 模式 9)——把非峰值叙述句恢复成自然白话,不是接着删。删的是废话,不是中文的自然冗余;这条只调删减的度,禁用词与套路句式的清理力度不因此降低。
13
13
 
14
- 以下为各 Gate 的详细规则(删不掉的标记项按此润色;无论 agent 还是主线程执行,均须遵循):
14
+ 以下为各 Gate 的详细规则(删不掉的标记项按此润色;无论 agent 还是主会话执行,均须遵循):
15
15
 
16
16
  #### 门禁 A:禁用词替换
17
17
 
@@ -125,6 +125,7 @@ AI写作的结尾特征:总想总结、升华、点题。
125
125
  - 删掉总结性语句
126
126
  - 用动作/场景收尾,不要用感慨收尾
127
127
  - 如果结尾有"他知道...""这一刻..."→ 基本可以删
128
+ - 短篇(单个 正文.md)带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点,保留;只删中立、与角色情绪无关的作者讲解。
128
129
 
129
130
  #### 门禁 G:去解释腔/上帝感/安排感
130
131
 
@@ -136,9 +137,25 @@ AI写作的结尾特征:总想总结、升华、点题。
136
137
  - 删替读者定性:「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删,证据留给读者判断。
137
138
  - 删隐蔽的软评判:评判性副词(「关切得恰到好处」)、剧透点破(「那点笑她看得分明」)、定性比喻(「像在宣判一件早已定好的事」)→ 删,或改成角色此刻带偏见的瞬间感觉。
138
139
  - 注意:Gate G 删的是"非故事性的作者旁白",不是删情节。删完若变薄,靠角色动作/对话补,不补叙述者解说。
140
+ - 短篇(单个 正文.md)带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点,保留;只删中立、与角色情绪无关的作者讲解。
139
141
 
140
142
  **任务卡点修法边界**:任务卡点不是固定公式,也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时,可以把解释总结压成角色当下要处理的具体卡点;原文没有缺口时,只删解释或改动作/对话,不新造剧情。所有卡点都先做“删掉试试”:删掉后不丢伏笔、钩子、信息、关系变化或必要转折,就压缩或删除。
141
143
 
144
+ ## 写法抽查(审查侧,只指认已有问题)
145
+
146
+ 对爽点段与检测器标记处逐问。只许指出正文里**已有**的那一处,没有就答「无」,**不许为了让某一问有答案回头补内容**。详写的关键场景里,遮住一处发生、感知或反应后读者什么也没损失,就判为可删并报告位置;套式反应按 `banned-words.md`「套式反应逐处删除测试」逐处过。审稿只报告、不改文件;去味执行者再按删除保护落改,只报告实际删改与保留理由。
147
+
148
+ | # | 自问 | 不合格的样子 |
149
+ |---|---|---|
150
+ | 1 | 本章最大的那次状态变化,读者看见了几个中间态? | 只给了"起点"和"终点";或同一状态换十种说法说十遍 |
151
+ | 2 | 有没有一组同类并列项被平均分配了笔墨? | 三样物件、四拨人马各给同样的分辨率 |
152
+ | 3 | 本章的设定/能力/威胁,是被说出来的,还是被谁付了代价试出来的? | 旁白直接给出结论,读者没有自己发现的机会 |
153
+ | 4 | "厉害/难得/要命"这些判断,是谁给出的?他有什么立场? | 叙述者自己下的判断;结论由旁白先说出来、在场的人只负责吃惊;或标价人就在场却没标价 |
154
+ | 5 | 每个给了镜头的人,此刻在为自己争取什么? | 遮住名字认不出是谁说的;所有人同向配合主角;用手部/喉部微动作代替立场;或把他的算计写成一段旁白独白 |
155
+ | 6 | 该说出口的话,是写出来了还是被概括了? | "他吼了一声""他说了句什么""三言两语解释了缘由";本该来回几轮的交锋压成一次说完 |
156
+ | 7 | 本章最重的那一句,是不是最短的那一段? | 最重的一拍写成了全章最长的段落 |
157
+ | 8 | 判为"密"的段落里,有没有量词加概括? | "一连七八下""半晌""众人纷纷"出现在密处 |
158
+
142
159
  ---
143
160
 
144
161
  ## 写手 A-G 判据
@@ -150,5 +167,5 @@ AI写作的结尾特征:总想总结、升华、点题。
150
167
  - **C 情绪**:删空泛 AI 情绪总结句;上下文已成立就删补充说明;不设「情绪词→身体动作」默认转换。
151
168
  - **D 节奏**:只拆臃肿修饰、堆叠比喻、信息过载的长句;句长按书级文风带执行,长短随情绪 beat 交错——沉淀放慢、冲突骤短,忌通篇同长度。
152
169
  - **E 对话去腔调**:所有角色同一语气→按语言风格档案差异化;犹豫/打断/拖长用动作、短句或换行承担。
153
- - **F 结尾去升华**:大段抒情收尾→安静细节收尾。
154
- - **G 去解释腔/上帝感**:先按本书叙述姿态判断;授权的有限全知、评论或旁人内心不因形式删除。删无功能的解释、未经授权的剧透、重复总结和空泛定性(之所以/原来/这意味着/她不知道的是/殊不知/多年以后);承担锚点或情绪的压成角色白话;已有场内载体(手机/公告/屏幕)优先保留为角色看到的文本。
170
+ - **F 结尾去升华**:大段抒情收尾→安静细节收尾;短篇例外见门禁 F。
171
+ - **G 去解释腔/上帝感**:先按本书叙述姿态判断,短篇例外见门禁 G;授权的有限全知、评论或旁人内心不因形式删除。删无功能的解释、未经授权的剧透、重复总结和空泛定性(之所以/原来/这意味着/她不知道的是/殊不知/多年以后);承担锚点或情绪的压成角色白话;已有场内载体(手机/公告/屏幕)优先保留为角色看到的文本。
@@ -0,0 +1,116 @@
1
+ # 情绪落到纸面:写一章时的情绪执行
2
+
3
+ > 细纲与单元卡已经定了本章的目标情绪和它在弧线上的位置;本文件只管写这一章时怎么把情绪写出来。选弧线、排节奏、管期待是排纲时的事,见 emotional-arc-design.md。
4
+
5
+ ## 情绪核心公式
6
+
7
+ 写每个场景时分离三层情绪:
8
+ 1. 角色自己的情绪(角色感受到的)
9
+ 2. 文本传递的情绪(文本要让读者感受的)
10
+ 3. 读者实际感受的情绪(读者真正的体验)
11
+
12
+ 同一场景三层可以完全不同:角色在哭,文本在撩,读者在爽。
13
+
14
+ 例:女主当众被退婚,强忍着没掉泪——角色:屈辱;文本写她嘴角还挂着笑(角色:撑);读者替她憋着、等后面打脸(读者:爽前蓄力)。
15
+
16
+ ---
17
+
18
+ ## 前反应-复现-后反应情绪结构
19
+
20
+ 用于虐/悲壮/遗憾类场景。按顺序执行三步:
21
+
22
+ 1. **前反应**:让读者提前知道坏结果,然后描写美好事物(读者预知法)
23
+ 2. **复现**:让坏结果真的发生
24
+ 3. **后反应**:主角真情流露,作出改变(愤怒/拼命/振作)
25
+
26
+ 操作示例:知道某人一天后要死 -> 让她经历美好(逛街、看烟花) -> 她真的死了 -> 主角愤怒拼命
27
+
28
+ ---
29
+
30
+ ## 以小搏大情绪结构
31
+
32
+ 用于热血/逆袭类场景。按顺序执行四步:
33
+
34
+ 1. **前反应**:铺垫弱者的苦,用对比强化(现在的弱 vs 以前的强)
35
+ 2. **复现**:强者到来,"我知道你们苦,我来了"
36
+ 3. **后反应**:弱势方被拯救
37
+ 4. **士气如虹**:整体气势转变
38
+
39
+ ---
40
+
41
+ ## 基于不该如此的情绪驱动
42
+
43
+ - "不该如此"是最根本的情绪驱动力——写诬告、不公、恃强凌弱,读者天生生出"不该如此"的念头
44
+ - 核心情绪逻辑:想要爽,必先不爽;想要公平,必先不公平;想要强大,必先不强大
45
+ - "悬而未决"也是强驱动力
46
+ - 好的题材必须具备勾起人们惋惜、渴望改变的特质
47
+
48
+ ---
49
+
50
+ ## 理念矛盾的情感爆发力
51
+
52
+ - 理念之争比利益之争更能引发读者深层共鸣
53
+ - 少量关键场景即可,不需要大量笔墨
54
+ - 理想主义与现实的冲突是塑造配角封神级人设的手法
55
+ - 理念认同 = 人设认同 = 读者情感投入
56
+ - 在主线中穿插理念型角色,用他们的追求和牺牲拔高全书情绪上限
57
+
58
+ ---
59
+
60
+ ## 情绪调动的三层方法
61
+
62
+ 三层:**长期感情投入**、**短期事件冲突**、**场景描绘**。三者可叠加,核心是前两层。
63
+
64
+ ### 长期引导三步骤
65
+
66
+ 1. **抛出共鸣炸弹**:找到角色最易引发共鸣的情感锚点(梦想、仇恨、恐惧)
67
+ 2. **让读者变见证者**:展示角色付出和挣扎,每一步伴随收获
68
+ 3. **让读者变参与者**:通过足够铺垫和细节,产生命运共同体感
69
+
70
+ ### 短期情绪引导
71
+
72
+ 短期靠独立事件冲突。**直白冲突比繁杂情节更容易引起共鸣**。
73
+
74
+ 两种事件类型:
75
+ - **推动情节发展的事件**:让读者对角色处境产生认同
76
+ - **塑造人物性格的事件**:让读者对角色思想性格产生认同
77
+
78
+ 开篇必须选择塑造人物性格的事件——先认同角色这个人才关心角色的事。
79
+
80
+ ### 情绪代入的陷阱
81
+
82
+ 读者未代入主角前:主角弱势可以引起同情,但**敌人弱势也同样引起同情**。读者还没建立认同时,不要把对手写得可怜。
83
+
84
+ ### 情绪文笔技法
85
+
86
+ - **句长跟着情绪和节奏走**:紧张、决断处用短句提速,铺垫、沉淀处用长句蓄势;短句是提速工具,不是默认底色,别通篇拆短
87
+ - **情绪词**:骤然、猛然、刺眼——制造紧迫感
88
+ - **动作词**:抽、划、留下——画面感强,情绪外化
89
+ - **修饰词**:精准克制地使用形容词,不堆砌
90
+ - **进阶规则**:优先通过角色行为暗示情绪,而非直接描写(非硬性,必要的内心可以直写,别为外化堆无功能的小动作)。**以乐写悲**:角色在最悲伤时表现开心,情绪张力更强(赴死的人很开心,往往比哭更悲)
91
+
92
+ ---
93
+
94
+ ## 情绪调动统一视角
95
+
96
+ > 写完一段觉得不到位 / 读者反馈平淡时使用。
97
+
98
+ ### 终极公式
99
+
100
+ **平静 -> 调动 -> 释放 -> 爽**
101
+
102
+ | 技法 | 调动 | 释放 | 结果 |
103
+ |------|------|------|------|
104
+ | 装逼打脸 | 反派嚣张 | 主角碾压 | 爽 |
105
+ | 拉仇恨 | 负面情绪 | 恶人受罚 | 爽 |
106
+ | 先抑后扬 | 打压 | 爆发 | 爽 |
107
+ | 期待感 | 制造鸿沟 | 弥合鸿沟 | 爽 |
108
+
109
+ ### 实操要点
110
+
111
+ - 每个场景标注:读者当前情绪在哪个阶段;下一步是调动还是释放。
112
+ - 只有调动没有释放 = 读者憋屈弃书
113
+ - 只有释放没有调动 = 爽感平淡无力
114
+ - 调动程度决定释放爽度:仇恨拉多满,打脸就多爽
115
+
116
+ ---
@@ -1,5 +1,5 @@
1
1
  # 情绪弧线操作手册
2
- > 写故事时选弧线、控制节奏、调动情绪的速查操作手册。
2
+ > 排卷纲、设计剧情单元时选弧线、排节奏、管期待的速查手册。写一章时怎么把情绪落到纸面见 emotion-on-page.md。
3
3
 
4
4
  ## 决策路由表
5
5
 
@@ -197,42 +197,6 @@
197
197
 
198
198
  ---
199
199
 
200
- ## 情绪核心公式
201
-
202
- 写每个场景时分离三层情绪:
203
- 1. 角色自己的情绪(角色感受到的)
204
- 2. 文本传递的情绪(文本要让读者感受的)
205
- 3. 读者实际感受的情绪(读者真正的体验)
206
-
207
- 同一场景三层可以完全不同:角色在哭,文本在撩,读者在爽。
208
-
209
- 例:女主当众被退婚,强忍着没掉泪——角色:屈辱;文本写她嘴角还挂着笑(角色:撑);读者替她憋着、等后面打脸(读者:爽前蓄力)。
210
-
211
- ---
212
-
213
- ## 前反应-复现-后反应情绪结构
214
-
215
- 用于虐/悲壮/遗憾类场景。按顺序执行三步:
216
-
217
- 1. **前反应**:让读者提前知道坏结果,然后描写美好事物(读者预知法)
218
- 2. **复现**:让坏结果真的发生
219
- 3. **后反应**:主角真情流露,作出改变(愤怒/拼命/振作)
220
-
221
- 操作示例:知道某人一天后要死 -> 让她经历美好(逛街、看烟花) -> 她真的死了 -> 主角愤怒拼命
222
-
223
- ---
224
-
225
- ## 以小搏大情绪结构
226
-
227
- 用于热血/逆袭类场景。按顺序执行四步:
228
-
229
- 1. **前反应**:铺垫弱者的苦,用对比强化(现在的弱 vs 以前的强)
230
- 2. **复现**:强者到来,"我知道你们苦,我来了"
231
- 3. **后反应**:弱势方被拯救
232
- 4. **士气如虹**:整体气势转变
233
-
234
- ---
235
-
236
200
  ## 冲突中的情绪层次与死亡赌注
237
201
 
238
202
  ### 选择死亡赌注
@@ -257,59 +221,6 @@
257
221
 
258
222
  ---
259
223
 
260
- ## 基于不该如此的情绪驱动
261
-
262
- - "不该如此"是最根本的情绪驱动力——写诬告、不公、恃强凌弱,读者天生生出"不该如此"的念头
263
- - 核心情绪逻辑:想要爽,必先不爽;想要公平,必先不公平;想要强大,必先不强大
264
- - "悬而未决"也是强驱动力
265
- - 好的题材必须具备勾起人们惋惜、渴望改变的特质
266
-
267
- ---
268
-
269
- ## 理念矛盾的情感爆发力
270
-
271
- - 理念之争比利益之争更能引发读者深层共鸣
272
- - 少量关键场景即可,不需要大量笔墨
273
- - 理想主义与现实的冲突是塑造配角封神级人设的手法
274
- - 理念认同 = 人设认同 = 读者情感投入
275
- - 在主线中穿插理念型角色,用他们的追求和牺牲拔高全书情绪上限
276
-
277
- ---
278
-
279
- ## 情绪调动的三层方法
280
-
281
- 三层:**长期感情投入**、**短期事件冲突**、**场景描绘**。三者可叠加,核心是前两层。
282
-
283
- ### 长期引导三步骤
284
-
285
- 1. **抛出共鸣炸弹**:找到角色最易引发共鸣的情感锚点(梦想、仇恨、恐惧)
286
- 2. **让读者变见证者**:展示角色付出和挣扎,每一步伴随收获
287
- 3. **让读者变参与者**:通过足够铺垫和细节,产生命运共同体感
288
-
289
- ### 短期情绪引导
290
-
291
- 短期靠独立事件冲突。**直白冲突比繁杂情节更容易引起共鸣**。
292
-
293
- 两种事件类型:
294
- - **推动情节发展的事件**:让读者对角色处境产生认同
295
- - **塑造人物性格的事件**:让读者对角色思想性格产生认同
296
-
297
- 开篇必须选择塑造人物性格的事件——先认同角色这个人才关心角色的事。
298
-
299
- ### 情绪代入的陷阱
300
-
301
- 读者未代入主角前:主角弱势可以引起同情,但**敌人弱势也同样引起同情**。读者还没建立认同时,不要把对手写得可怜。
302
-
303
- ### 情绪文笔技法
304
-
305
- - **句长跟着情绪和节奏走**:紧张、决断处用短句提速,铺垫、沉淀处用长句蓄势;短句是提速工具,不是默认底色,别通篇拆短
306
- - **情绪词**:骤然、猛然、刺眼——制造紧迫感
307
- - **动作词**:抽、划、留下——画面感强,情绪外化
308
- - **修饰词**:精准克制地使用形容词,不堆砌
309
- - **进阶规则**:优先通过角色行为暗示情绪,而非直接描写(非硬性,必要的内心可以直写,别为外化堆无功能的小动作)。**以乐写悲**:角色在最悲伤时表现开心,情绪张力更强(赴死的人很开心,往往比哭更悲)
310
-
311
- ---
312
-
313
224
  ## 男频恋爱文情绪设计
314
225
 
315
226
  ### 两大核心需求
@@ -339,30 +250,6 @@
339
250
 
340
251
  ---
341
252
 
342
- ## 情绪调动统一视角
343
-
344
- > 写完一段觉得不到位 / 读者反馈平淡时使用。
345
-
346
- ### 终极公式
347
-
348
- **平静 -> 调动 -> 释放 -> 爽**
349
-
350
- | 技法 | 调动 | 释放 | 结果 |
351
- |------|------|------|------|
352
- | 装逼打脸 | 反派嚣张 | 主角碾压 | 爽 |
353
- | 拉仇恨 | 负面情绪 | 恶人受罚 | 爽 |
354
- | 先抑后扬 | 打压 | 爆发 | 爽 |
355
- | 期待感 | 制造鸿沟 | 弥合鸿沟 | 爽 |
356
-
357
- ### 实操要点
358
-
359
- - 每个场景标注:读者当前情绪在哪个阶段;下一步是调动还是释放。
360
- - 只有调动没有释放 = 读者憋屈弃书
361
- - 只有释放没有调动 = 爽感平淡无力
362
- - 调动程度决定释放爽度:仇恨拉多满,打脸就多爽
363
-
364
- ---
365
-
366
253
  ## 期待感维持的底层机制
367
254
 
368
255
  > 写了目标但读者不关心 / 六法则用了但效果不好时使用。
@@ -146,7 +146,7 @@
146
146
 
147
147
  | 平台 | 章节标记 | 对话格式 | 特殊要求 |
148
148
  |------|----------|----------|----------|
149
- | 知乎盐言 | `1.` | `「」` | 导语需单独标注 |
149
+ | 知乎盐言 | `1.` | `「」` | 导语即正文开头几段,不另标 |
150
150
  | 番茄 | `###第一章` | `""` | 首段需有吸引力 |
151
151
  | 红果 | `###1.` | `""` | 无 |
152
152
 
@@ -18,7 +18,7 @@
18
18
  1. 先读 `设定/题材定位.md`,确认主题材、目标平台、性向频道、主对标书和核心梗。
19
19
  2. 先查本索引匹配题材,再只读取同目录的 `genre-prose-cards/{题材}.md` 这一张卡;不要把整套题材卡全部加载进 prompt。
20
20
  3. 跨题材时,主题材读取 1 张完整卡,辅题材读取 1 张并只摘 1-2 条“常见场面/禁止漂移”;不要把两套节奏并行堆满。
21
- 4. 高置信卡可直接用于 Phase 2 `设定/题材正文提示卡.md`;中置信卡需结合本书对标/细纲对照;低置信卡只能兜底,必须标注低置信并优先补同题材对标。
21
+ 4. 高置信卡可直接用于写第 1 章前生成的 `设定/题材正文提示卡.md`;中置信卡需结合本书对标/细纲对照;低置信卡只能兜底,必须标注低置信并优先补同题材对标。
22
22
  5. 每章传给 narrative-writer 的 `genre_prose_card` 只保留本章相关条目,推荐 120-300 字;包含:题材限制、核心逻辑、读者期待、核心爽点/情绪、正文落点、前中后期打法、场景颗粒、禁止漂移、本章取舍、卡片置信度。
23
23
  6. **题材卡只在写手内部校准题材味,绝不出现在正文里**:正文不得写卡名、题材标签、置信度、条目编号或“证据摘要”数据,也不得写“已按题材卡/满足字数/零违规”一类合规自评或写作过程说明——只输出故事本身。
24
24
 
@@ -260,7 +260,7 @@
260
260
  | 逆向型 | 失去X→获得更强Y | 越惨越强、负债越有钱 |
261
261
 
262
262
  ### 写长方法
263
- 核心卖点确定后多套路交织循环;单元故事围绕一个套路展开,主线串联;一级结构循环(模式重复但对象/场景/规模升级)
263
+ 核心卖点确定后多套路交织循环;单元故事围绕一个套路展开,主线串联;剧情单元循环(模式重复但对象/场景/规模升级)
264
264
 
265
265
  ### 脑洞四类
266
266
  1. 金手指类(聊天群/系统/戒指老爷爷)
@@ -79,7 +79,7 @@
79
79
  **断期待的判断**:某章既无期待点也无爽点,前一爽点已结束,本身没拉起新期待→读者觉得书失去了"灵魂"开始弃书。
80
80
 
81
81
  **两种运转模式**:
82
- - 不断循环型:每个一级结构运行一次,变奏场景/对象/条件
82
+ - 不断循环型:每个剧情单元运行一次,变奏场景/对象/条件
83
83
  - 只运行一次型:围绕一个核心情绪分阶段推进
84
84
 
85
85
  ### 检验清单
@@ -95,7 +95,7 @@
95
95
  | 误区 | 表现 |
96
96
  |------|------|
97
97
  | 核心梗太多 | 什么都想写=没有核心梗 |
98
- | 立意不明确 | 没有情绪目标,文字干巴巴 |
98
+ | 立意不明确 | 没有目标情绪,文字干巴巴 |
99
99
  | 纯装逼打脸无主题 | 剧情没有意义 |
100
100
  | 核心梗用完不升级 | 生硬重复,审美疲劳 |
101
101
  | 挂羊头卖狗肉 | 书名暗示与实际内容不符 |
@@ -297,7 +297,7 @@
297
297
  - **关系拉扯**:推进和拉开交替,不能只拉近。扯开可用心有芥蒂/暂时冷静/误会,避免直接分手
298
298
  - **英雄救美**:男主事业线行为无意间救女主→女主倒追(非白给)
299
299
  - **误会**:制造隔阂延缓推进,也是装逼打脸工具
300
- - **窗户纸事件**:好感度质变→关系阶段变化,事业线为主的放在一级结构小高潮
300
+ - **窗户纸事件**:好感度质变→关系阶段变化,事业线为主的放在剧情单元小高潮
301
301
 
302
302
  ### 狗粮文循环
303
303
 
@@ -19,14 +19,16 @@
19
19
  - [ ] 短期、中期、远期期待都有人维护;回收旧期待前已建立下一层期待。
20
20
  - [ ] 单章反转改变下一步行动,卷级反转改变对阶段机制的理解,全书真相没有被提前透支。
21
21
 
22
- ## 读者契约与终局储备
22
+ ## 读者契约与终局储备:契约四问
23
23
 
24
- - [ ] 核心卖点按开篇承诺兑现,收益和高光没有被配角、机构或巧合无交换地拿走。
25
- - [ ] 主角保有因果权与结算权;配角可以执行局部动作,但不能无声夺走关键选择和结算。
26
- - [ ] 延期的期待支付了利息,而不是被流程、解释或新设定吞掉。
27
- - [ ] 本卷没有动用后续阶段才该解锁的宿敌、身份、真相或能力上限。
24
+ - [ ] ①主角靠自己的选择挣到结果:保有因果权与结算权;配角可以执行局部动作,但不能无声夺走关键选择和结算。
25
+ - [ ] ②核心卖点按开篇承诺兑现,收益和高光没有被配角、机构或巧合无交换地拿走。
26
+ - [ ] ③本卷没有动用后续阶段才该解锁的宿敌、身份、真相或能力上限,升级线没有顶到天花板。
27
+ - [ ] ④延期的期待支付了利息,而不是被流程、解释或新设定吞掉;旧期待回收时留下新期待。
28
28
  - [ ] 高潮后允许短暂低压和可见奖励,不机械立即追加更大危机。
29
29
 
30
+ 四问都过=契约安全;能靠补交换、铺垫或成本补上=需补强;补不上=契约破坏,先修纲再写。
31
+
30
32
  ## 长篇反向检查
31
33
 
32
34
  - 删除“安全解释”后情绪是否更强、因果仍成立?
@@ -56,13 +56,13 @@
56
56
  | 出场 3 个以上主要角色 | 信息过载 |
57
57
  | 序章/楔子/引 | 除非以叙事为主、足够简短且与第一章逻辑紧密 |
58
58
  | 插叙/切视角/回忆梦境 | 正叙为主 |
59
- | 世界观详细解说 | 至少等到第一个一级结构结束 |
59
+ | 世界观详细解说 | 至少等到第一个剧情单元结束 |
60
60
 
61
61
  ### 冲突节奏
62
62
 
63
63
  - 背景融入冲突(如用旁人议论同时完成背景和冲突)
64
64
  - 两个紧张场景间要有缓和,但缓和 ≠ 无冲突
65
- - 背景信息分批释放(信息团排版),优先级:危机感 > 人设 > 金手指暗示 > 世界观,每次释放服务于当前情绪目标
65
+ - 背景信息分批释放(信息团排版),优先级:危机感 > 人设 > 金手指暗示 > 世界观,每次释放服务于当前目标情绪
66
66
 
67
67
  ### 开篇结构范例(鬼灭之刃)
68
68