@oh-story/dsh 0.1.7 → 0.1.9

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 (272) hide show
  1. package/README.md +30 -15
  2. package/lib/client.js +93 -16
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +165 -69
  5. package/lib/drama/skills/short-drama/SKILL.md +5 -1
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +126 -9
  7. package/lib/drama/skills/short-drama/scripts/project_tool.py +11 -0
  8. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +18 -0
  9. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +10 -1
  10. package/lib/drama/skills/short-drama-edit/SKILL.md +148 -0
  11. package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
  12. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
  13. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
  14. package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
  15. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
  16. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
  17. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
  18. package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
  19. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
  20. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
  21. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
  22. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +81 -0
  23. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +58 -0
  24. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +96 -0
  25. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +113 -0
  26. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +55 -0
  27. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1041 -0
  28. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +456 -0
  29. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
  30. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
  31. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
  32. package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
  33. package/lib/drama/skills/short-drama-produce/SKILL.md +24 -3
  34. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +28 -0
  35. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +24 -5
  36. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
  37. package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
  38. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
  39. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +57 -2
  40. package/lib/drama/skills/short-drama-review/SKILL.md +3 -0
  41. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +20 -0
  42. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +36 -0
  43. package/lib/drama/skills/short-drama-storyboard/SKILL.md +7 -0
  44. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
  45. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +39 -0
  46. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
  47. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +7 -1
  48. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +101 -6
  49. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +7 -1
  50. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +35 -0
  51. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +3 -1
  52. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +13 -3
  53. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +35 -4
  54. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -1
  55. package/lib/drama/skills/short-drama-write/SKILL.md +13 -2
  56. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
  57. package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
  58. package/lib/index.js +4 -2
  59. package/lib/index.js.map +2 -2
  60. package/lib/novel-to-game/VERSION +1 -1
  61. package/lib/novel-to-game/manifest.json +28 -28
  62. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +6 -27
  63. package/lib/novel-to-game/skills/game-build/SKILL.md +12 -29
  64. package/lib/novel-to-game/skills/game-concept/SKILL.md +10 -26
  65. package/lib/novel-to-game/skills/game-qa/SKILL.md +5 -15
  66. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +1 -1
  67. package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -28
  68. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +1 -2
  69. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +6 -9
  70. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +6 -11
  71. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -4
  72. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +1 -3
  73. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +3 -5
  74. package/lib/oh-story/manifest.json +292 -172
  75. package/lib/oh-story/roles/character-designer.md +1 -1
  76. package/lib/oh-story/roles/narrative-writer.md +56 -242
  77. package/lib/oh-story/roles/story-architect.md +1 -1
  78. package/lib/oh-story/skills/story/SKILL.md +1 -1
  79. package/lib/oh-story/skills/story/VERSION +1 -1
  80. package/lib/oh-story/skills/story/references/author-memory.md +10 -8
  81. package/lib/oh-story/skills/story-deslop/SKILL.md +20 -182
  82. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +19 -47
  83. package/lib/oh-story/skills/story-deslop/references/author-memory.md +10 -8
  84. package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
  85. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
  86. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
  87. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
  88. package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
  89. package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
  90. package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
  91. package/lib/oh-story/skills/story-import/SKILL.md +2 -2
  92. package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
  93. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
  94. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +2 -29
  95. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +176 -12
  96. package/lib/oh-story/skills/story-long-analyze/SKILL.md +1 -1
  97. package/lib/oh-story/skills/story-long-write/SKILL.md +20 -193
  98. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +19 -47
  99. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +62 -7
  100. package/lib/oh-story/skills/story-long-write/references/author-memory.md +10 -8
  101. package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
  102. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
  103. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +6 -4
  104. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +2 -2
  105. package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
  106. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
  107. package/lib/oh-story/skills/story-long-write/references/project-files.md +108 -0
  108. package/lib/oh-story/skills/story-long-write/references/reference-index.md +87 -0
  109. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
  110. package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
  111. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  112. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
  113. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
  114. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +2 -29
  115. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +51 -52
  116. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +8 -7
  117. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +36 -15
  118. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
  119. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +69 -2
  120. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +410 -0
  121. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
  122. package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
  123. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +176 -12
  124. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
  125. package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
  126. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +283 -0
  127. package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
  128. package/lib/oh-story/skills/story-review/SKILL.md +13 -3
  129. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +19 -47
  130. package/lib/oh-story/skills/story-review/references/author-memory.md +10 -8
  131. package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
  132. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +6 -4
  133. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -2
  134. package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
  135. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
  136. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +2 -29
  137. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
  138. package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
  139. package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
  140. package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
  141. package/lib/oh-story/skills/story-setup/SKILL.md +17 -10
  142. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +19 -47
  143. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
  144. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
  145. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +6 -4
  146. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
  147. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
  148. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
  149. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  150. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +27 -0
  151. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +69 -2
  152. package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
  153. package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
  154. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
  155. package/lib/oh-story/skills/story-short-write/SKILL.md +18 -186
  156. package/lib/oh-story/skills/story-short-write/references/author-memory.md +10 -8
  157. package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
  158. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
  159. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +6 -4
  160. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +2 -2
  161. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
  162. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
  163. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +3 -3
  164. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
  165. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +5 -5
  166. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +4 -4
  167. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
  168. package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
  169. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +1 -1
  170. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
  171. package/lib/oh-story/skills/story-short-write/references/reference-index.md +53 -0
  172. package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
  173. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
  174. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
  175. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
  176. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
  177. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +77 -0
  178. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
  179. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
  180. package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
  181. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
  182. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
  183. package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
  184. package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
  185. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  186. package/lib/types/client/index.d.ts.map +1 -1
  187. package/lib/types/client/production-prompts.d.ts.map +1 -1
  188. package/lib/types/client/production-runtime.d.ts +17 -0
  189. package/lib/types/client/production-runtime.d.ts.map +1 -1
  190. package/lib/types/skill-provider.d.ts.map +1 -1
  191. package/lib/video-recap/CHANGELOG.md +31 -1
  192. package/lib/video-recap/manifest.json +162 -162
  193. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
  194. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
  195. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
  196. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
  197. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
  198. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
  199. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
  200. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
  201. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
  202. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
  203. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
  204. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
  205. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
  206. package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
  207. package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
  208. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
  209. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
  210. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
  211. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
  212. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
  213. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
  214. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
  215. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
  216. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
  217. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
  218. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
  219. package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
  220. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
  221. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
  222. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
  223. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
  224. package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
  225. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
  226. package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
  227. package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
  228. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
  229. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
  230. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
  231. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
  232. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
  233. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
  234. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
  235. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
  236. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
  237. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
  238. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
  239. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
  240. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
  241. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
  242. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
  243. package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
  244. package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
  245. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
  246. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
  247. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
  248. package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
  249. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
  250. package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
  251. package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
  252. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
  253. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
  254. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
  255. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
  256. package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
  257. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
  258. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
  259. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
  260. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
  261. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
  262. package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
  263. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
  264. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
  265. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
  266. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
  267. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
  268. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
  269. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
  270. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
  271. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
  272. package/package.json +41 -41
@@ -0,0 +1,154 @@
1
+ # 去AI味 Gate 执行细则
2
+
3
+ 本文件承接调用方选定 Gate;只执行所选范围,不扩大为全量。表达先按 [style-resolution.md](style-resolution.md) 的本书裁决,剧情和信息保护边界仍有效。写作自检与写后审查沿用下方「写手 A-G 判据」;独立去味沿用「删除优先判断」及各门禁详细步骤。模式解释、三遍法与范例见 [anti-ai-writing.md](anti-ai-writing.md)。
4
+
5
+ #### 删除优先判断(先于各 Gate)
6
+
7
+ 每条被标记项先判能否删除,再考虑润色——很多 AI 味句是废话(解释、注水、凑数),润色后照样冗余。
8
+
9
+ 1. 删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折?都不丢则直接删,不进 Gate。
10
+ 2. 丢任意一项 → 保留信息进对应 Gate 改写(只删"怎么说"的 AI 味,不删"说什么")。
11
+ 3. 删除服从既有"过度去AI味保护"与「诊断与分级」比例上限:不整段删、不删剧情功能;若删后跌破字数下限,改为降AI重写,不删完再用新废话凑字。
12
+ 4. 删完通读:若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴,就是删过头的电报体(见 anti-ai-writing.md 模式 9)——把非峰值叙述句恢复成自然白话,不是接着删。删的是废话,不是中文的自然冗余;这条只调删减的度,禁用词与套路句式的清理力度不因此降低。
13
+
14
+ 以下为各 Gate 的详细规则(删不掉的标记项按此润色;无论 agent 还是主线程执行,均须遵循):
15
+
16
+ #### 门禁 A:禁用词替换
17
+
18
+ 加载 [references/banned-words.md](banned-words.md),对照禁用词表逐项检查。
19
+
20
+ **白名单机制**:按 [references/style-resolution.md](style-resolution.md) 读取书目录的 `.deslop-whitelist`。获准字面片段由深扫、标点整理和 hook 一致豁免;无文件不创建空表,不因检测器报警自行放行,也不继承其他书的白名单。
21
+
22
+ **保护规则优先级**:保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式;Gate G 删的是非故事性的作者解释/旁白(不是情节)。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折;遇到冲突时改为降AI重写或标注 `[需复核]`。
23
+
24
+ 替换规则:
25
+ - 禁用词 → 具体动作/细节描写
26
+ - 不能简单换成另一个形容词
27
+ - 要用"展示"替代"告诉"
28
+
29
+ 示例:
30
+ - ❌ "眼中闪过一丝不易察觉的悲伤" → ✅ "他垂下眼"
31
+ - ❌ "深吸一口气" → ✅ 直接删;若确有功能,改成角色当下动作(如把话咽回去)
32
+ - ❌ "嘴角勾起一抹冷笑" → ✅ "他冷笑了一声"
33
+
34
+ #### 门禁 B:句式去套路
35
+
36
+ 检测并替换以下AI高频句式:
37
+
38
+ | 句式 | 问题 | 替代方案 |
39
+ |------|------|----------|
40
+ | 否定铺垫后接肯定翻转 | **最毒** 中文 AI 句式之一 | 直接写后项,或改成动作/细节呈现 |
41
+ | 跨段「不是A / 也不是B / 只是C」 | 可能是工整铺排,也可能是辩解、悬念排除或情绪递进 | `formulaic-parallelism` advisory;通读语境,仅在重复提纲或拖慢画面时压缩 |
42
+ | 「至于X不X,怎么X」/同动词「不V A,不V B」 | 工整决策栏、否定清单;正常台词也可能出现 | 结合语境复核;若只是复述前文或细纲,压成一次判断或只留一项 |
43
+ | "...,带着..." | 万能状语,AI最爱 | 用独立短句或动作描写 |
44
+ | "声音不大,却带着……" | AI 最爱声音描写 | 直接写声音特征或动作 |
45
+ | 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 优先直接白描;确需比喻时只留少数生活化、角色化比喻 |
46
+ | "他/她知道..." | 直接告诉读者 | 用行为展示认知 |
47
+ | 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通"说"可保留;高频或公式化时用动作/上下文替代 |
48
+ | "仿佛/犹如/宛若/如同" | 文言腔过重 | 口语化表达或白描 |
49
+ | "不容置疑/显而易见" | 书面化判断词 | 用具体事实说话 |
50
+
51
+ **修饰词清扫**:检查物品/人物前面的形容词、定语、副词、指示代词、量词,多余即删。删除后阅读不影响才删;含义流失则改成简洁名词。
52
+
53
+ 示例:
54
+ - "白色的药片" → "药片"
55
+ - "飞驰的汽车" → "汽车"
56
+ - "手里那截链子" → "链子"
57
+ - "多年的衣服" → "旧衣服"(保留含义)
58
+
59
+ 形容词原则:一次只用一个形容词修饰或不修饰,不连用、不堆砌。
60
+
61
+ #### 门禁 C:情绪落地
62
+
63
+ 直接写情绪本身不是 AI 味。上下文已让情绪成立,就保留准确的直写或删掉重复说明;需要补足信息时,沿用原文的选择、台词、物件和后果,不为情绪词另配动作。
64
+
65
+ 身体细节按功能取舍:伤势、动作失败、人物习惯或情节后果可以保留;只重复标注情绪的微动作删掉,不换部位或同义动作。具体判据见 `anti-ai-writing.md` 规则 2。
66
+
67
+ **重复描写去重**:当相邻段反复表达同一信息、同一动作或同一情绪时,按 Gate C/D 处理,不另开专项流程。
68
+
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
+ #### 门禁 D:节奏调整
95
+
96
+ AI写作的节奏问题:句式过于整齐、段落过于匀称。
97
+
98
+ 处理方法:
99
+ - 打断连续排比句(保留1-2个,删掉其余)
100
+ - 只拆臃肿修饰、堆叠比喻、抽象总结的长句;改写后叙述仍以逗号长句为主(见 anti-ai-writing.md 规则 3),不要把正常的逗号长句拆成短句串
101
+ - 偶尔用不完整句(口语感)
102
+ - 段落长短交错(不要每段都3-5行)
103
+ - 不按硬指标排版:番茄高分样本不是 50-60 字一行,也不是逢句号必换行;按动作/信息变化自然断段,读起来不卡即可
104
+ - 标点节奏跟语气走:避免通篇句号化;保留有功能的 `?` / 少量 `!`,把 `……` / `——` 改成动作、短句、换行、逗号或句号,删除随机堆砌或刷屏符号
105
+
106
+ #### 门禁 E:对话去腔调
107
+
108
+ AI写的对话特征:每句话都信息完整、逻辑清晰、表达精准。
109
+
110
+ 处理方法:
111
+ - 加入口语化表达("嗯""哦""行吧")
112
+ - 适当打断对话(角色可以答非所问);对话被打断或拖长时用动作、换行或短句处理,不用 `——`
113
+ - 用动作穿插对话("她喝了口水。'然后呢?'")
114
+ - 删掉解释性对话(角色不会把自己的动机说清楚)
115
+ - Gate B 同样检查台词:连续工整否定、`至于X不X,怎么X`、同动词 `不V A,不V B` 不能因脚本的台词豁免而漏审;有明确人物/任务功能才保留
116
+ - 不为凑比例硬扩台词;番茄对话占比随题材波动,台词只在角色此刻真会说、必须说时增加
117
+ - 口误、停顿、粗话和重复要服务人物身份与情绪,不作为“真人感”装饰批量添加
118
+ - 不把所有对话末尾改成句号:质问保留问号,爆发峰值保留少量感叹;吞回去/没说完用动作停顿、短句或换行,不用 `……`
119
+
120
+ #### 门禁 F:结尾去升华
121
+
122
+ AI写作的结尾特征:总想总结、升华、点题。
123
+
124
+ 处理方法:
125
+ - 删掉总结性语句
126
+ - 用动作/场景收尾,不要用感慨收尾
127
+ - 如果结尾有"他知道...""这一刻..."→ 基本可以删
128
+
129
+ #### 门禁 G:去解释腔/上帝感/安排感
130
+
131
+ 最难察觉、最"像 AI"的一类(对应 anti-ai-writing.md 模式 8)。叙述者跳出角色当下去解释、剧透、总结、定性、升华,读者闻到"作者在场/剧情被安排"。
132
+
133
+ 处理方法:
134
+ - 删解释因果:「之所以…是因为」「原来…」「这意味着」→ 删,因果让读者从动作对话里自己拼。
135
+ - 删上帝视角剧透:「她不知道的是」「殊不知」「多年以后」「仿佛预示着」→ 删。
136
+ - 删替读者定性:「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删,证据留给读者判断。
137
+ - 删隐蔽的软评判:评判性副词(「关切得恰到好处」)、剧透点破(「那点笑她看得分明」)、定性比喻(「像在宣判一件早已定好的事」)→ 删,或改成角色此刻带偏见的瞬间感觉。
138
+ - 注意:Gate G 删的是"非故事性的作者旁白",不是删情节。删完若变薄,靠角色动作/对话补,不补叙述者解说。
139
+
140
+ **任务卡点修法边界**:任务卡点不是固定公式,也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时,可以把解释总结压成角色当下要处理的具体卡点;原文没有缺口时,只删解释或改动作/对话,不新造剧情。所有卡点都先做“删掉试试”:删掉后不丢伏笔、钩子、信息、关系变化或必要转折,就压缩或删除。
141
+
142
+ ---
143
+
144
+ ## 写手 A-G 判据
145
+
146
+ 以下为原 narrative-writer 的写作自检/审查判据,调用方给了 Gate 就只执行该范围;未给时仍 A-G。
147
+
148
+ - **A 禁用词**:命运齿轮/如潮水般/心猛地一沉类逐一替换(对照 `banned-words.md`;书级文风有裁决按其配额)。
149
+ - **B 句式**:连续排比、刻意对称打散;**禁止高置信否定铺垫后再肯定翻转**——同句「不是A,(而)是B」「没有X没有Y只是Z」直接写肯定内容或改动作承担对比;跨段「不是A / 也不是B / 只是C」、`至于X不X,怎么X`、同动词 `不V A,不V B` 只作语义复核(advisory),重复细纲或拖慢画面时改,承担辩解、悬念排除或情绪递进时可保留(书级文风另有裁定按其执行);普通名词不加引号强调(对话、逐字引用、场内载体原文除外)。
150
+ - **C 情绪**:删空泛 AI 情绪总结句;上下文已成立就删补充说明;不设「情绪词→身体动作」默认转换。
151
+ - **D 节奏**:只拆臃肿修饰、堆叠比喻、信息过载的长句;句长按书级文风带执行,长短随情绪 beat 交错——沉淀放慢、冲突骤短,忌通篇同长度。
152
+ - **E 对话去腔调**:所有角色同一语气→按语言风格档案差异化;犹豫/打断/拖长用动作、短句或换行承担。
153
+ - **F 结尾去升华**:大段抒情收尾→安静细节收尾。
154
+ - **G 去解释腔/上帝感**:先按本书叙述姿态判断;授权的有限全知、评论或旁人内心不因形式删除。删无功能的解释、未经授权的剧透、重复总结和空泛定性(之所以/原来/这意味着/她不知道的是/殊不知/多年以后);承担锚点或情绪的压成角色白话;已有场内载体(手机/公告/屏幕)优先保留为角色看到的文本。
@@ -133,13 +133,15 @@
133
133
 
134
134
  角色情绪是连续的、循序渐进的。从生气到高兴:生气 → 不那么生气 → 不生气 → 高兴,每次转变需对应事件触发。不能跳步。
135
135
 
136
- ### 情绪四步法(缺一不可)
136
+ ### 情绪与行动的因果检查
137
137
 
138
138
  1. 遇到事件(失衡状态)
139
- 2. 情绪反应(外在表现:动作、表情、语言)
140
- 3. 内心思考(即使没思考也要写出"没有思考",表达鲁莽)
139
+ 2. 情绪反应(可以直写,也可以体现在语言、选择或有功能的动作中)
140
+ 3. 内心思考(只写影响理解的判断;鲁莽可以直接体现在行动里)
141
141
  4. 采取行动(基于前三步结果回应)
142
142
 
143
+ 用于检查转变是否成立,不要求逐步写满;上下文已清楚的反应或思考无需补写。
144
+
143
145
  ### 对话不平淡三思路
144
146
 
145
147
  - 对话本身带来/强化某个核心驱动力(期待、爽感、悬念)
@@ -154,7 +156,7 @@
154
156
  - 大量信息通过对话展示会显得啰嗦,部分信息转化为情节、心理描写、旁白、环境、动作
155
157
  - 用角色的语气和立场包裹信息,不是机械陈述设定
156
158
  - 设定用到哪个稍微带出来就行,不需完完全全讲明白前因后果
157
- - **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G 同样适用于角色台词。拆成角色在压力下挤出的半句话 + 身体反应 + 留白,用到哪带哪点
159
+ - **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G 同样适用于角色台词。按角色当下的目的和对话阻力取舍信息,用到哪带哪点,不固定拼接身体反应。
158
160
 
159
161
  ### 信息拉扯示例(以"主角新书起飞了"为例)
160
162
 
@@ -108,7 +108,7 @@
108
108
 
109
109
  执行规则:
110
110
  - 写对话时先看角色关系和权力位置:强势角色常短句收束,试探角色多问号和半句,崩溃角色才允许少量感叹/省略。
111
- - 写叙述时用句长、逗号停顿和单句成段制造节奏;不要把破折号当节奏工具,对话里也不要用。
111
+ - 写叙述时用句长、逗号停顿和单句成段制造节奏;默认不用破折号硬造节奏;本书文风明确授权的功能性用法保留。
112
112
  - 精修时检查两类问题:**通篇句号化**(语气全被压平)与**随机标点堆砌**(问号/感叹号不承载情绪功能,或用省略号/破折号硬造停顿)。
113
113
  - 引号风格按项目/平台约定;知乎盐言的 `「」` 是合法对话格式,`quote-mode keep` 时不得擅自改掉。
114
114
 
@@ -163,6 +163,6 @@
163
163
  3. **避免对话标签机械化**:高频或公式化的「他说」「她道」「他笑了笑说」用动作/上下文替代;普通“说”可保留
164
164
  4. **禁止缩进**:不使用 `  `(全角空格)或半角空格缩进
165
165
  5. **禁止正文段落 Markdown 渲染**:除统一的小节/章节标记(如 `###1.`)外,正文段落中不使用加粗 `**`、斜体 `*`、标题 `#`、分隔线 `---` 等 Markdown 语法
166
- 6. **正文不使用破折号**:正文(含叙述、对话、心理描写)不使用破折号 `——`/`—` 或双连字符 `--`,改用句号、逗号、换行、动作 beat 或短句断开;不再设置“对话例外”
166
+ 6. **默认停顿写法**:正文默认用句号、逗号、换行、动作 beat 或短句承担停顿;本书明确选择的功能性破折号/省略号按调用方文风裁决与书级白名单保留。标点偏好不属于不可覆盖的文件结构协议。
167
167
  7. **禁止通篇句号化或随机标点堆砌**:标点必须跟语气/人物声线/情绪功能匹配;该质问时用问号,该爆发时少量感叹;犹豫、吞咽、未说完用动作或句长变化表达,不用 `……` / `——` 硬造停顿,也不得无功能地乱撒 `?`/`!`
168
168
  8. **禁止正文混入章节元信息**:章节号只允许出现在标题/小节标记/文件名/追踪记录中。正文叙述、对话、心理描写里不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词;要改成角色能感知的事件锚点或相对时间,例如把“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
@@ -47,7 +47,7 @@
47
47
 
48
48
  **情绪**:愤怒→爽→紧张→更爽→极爽→余韵+震撼
49
49
  **必选场景**:当众羞辱开场、冷静到可怕的反击、标志性动作、逐层揭露证据、反派自曝、隐藏伏笔回收
50
- **规则**:主角永不失态;用动作替代情绪;对方越歇斯底里主角越平静;先让反派得意再翻转
50
+ **规则**:主角永不失态;情绪克制直写,不堆体感;对方越歇斯底里主角越平静;先让反派得意再翻转
51
51
 
52
52
  ---
53
53
 
@@ -17,7 +17,7 @@
17
17
  | 写新媒体/短平快装逼 | 新媒体写作与题材套路 |
18
18
  | 搭建装逼舞台 | 舞台搭建法 |
19
19
  | 打脸写了但不爽 | 检查:爽点释放到位法则 + 前置小无敌准备了吗 + 对手层级够不够 |
20
- | 战斗场景枯燥/流水账 | 检查:战斗描写三板斧 + 情绪调动三阶法 + 缺少感官细节和身体反应 |
20
+ | 战斗场景枯燥/流水账 | 检查:战斗描写三板斧 + 情绪调动三阶法 + 攻防选择、伤势和动作后果是否清楚 |
21
21
 
22
22
  ## 指令语气
23
23
 
@@ -166,7 +166,7 @@
166
166
  ### 关键技法
167
167
  - 恐惧要升级(不能一直同一个强度)
168
168
  - 限制信息来源(断电、断信号、独自一人)
169
- - 用生理反应代替直接描写恐惧
169
+ - 恐惧可落在危险线索、选择和行动受阻上,也可直写;生理反应有实际作用时再用
170
170
  - 安全感的短暂回归让下一波恐怖更猛
171
171
 
172
172
  ---
@@ -0,0 +1,27 @@
1
+ # 文风与参考冲突裁决
2
+
3
+ 写正文、改写、去 AI 味和审稿都先做这一步;inline 与 agent 用同一份裁决。无需另建画像或要求作者填写配置。
4
+
5
+ ## 按维度取值,不把整份文件互相覆盖
6
+
7
+ 表达选择按以下顺序取第一个明确、适用的要求:**当前请求 > 本书文风/设定 > 本书 active 作者记忆 > 题材、流程、全局 active 记忆 > 主对标文风 > 题材包与通用 references 默认值**。未声明的维度才向下补齐;本书例外不撤销全局习惯,临时要求不写回长期记忆。
8
+
9
+ 句长、视角、标点、对话落法、情绪直写、修辞、叙述者评论和收尾方式都是表达维度。reference 中的“必须”“禁用”“最高优先级”、示例和检测阈值不使默认写法升级为作者不可覆盖的规则。主对标的低置信观察不压过作者的明确选择。
10
+
11
+ 事实与表达分开裁决:文风不能改变细纲事件、已知事实、信息揭露边界、用户字数范围、改写范围、文件结构或追踪协议;有限全知允许换视角,不等于可提前揭底。转限知时可暂不叙述该人物无从得知的信息,事实本身不变;不得补出“早已知道”“后来发现”或新观察经历来保全原文信息。审稿照常评价因果、可读性与情绪效果,不能仅因使用了作者选定的写法就判错,也不能因为作者喜欢就忽略真实缺陷。
12
+
13
+ ## 加载与传递
14
+
15
+ 1. 从本次正文路径确定书目录(长篇为 `正文/` 的父目录,短篇为 `正文.md` 所在目录)。读该书 `设定/文风.md`;短篇同时读 `设定.md` 的文风约定。无文件就继续,不创建占位文件、不猜其他书。文风无最低字数限制,一句可执行的偏好也有效;空白、纯标题、待补充不算。
16
+ 2. `_文风摘要.md` 只能辅助定位,不能独立替代全文。当前会话已读全文时无需反复读;摘要与全文不一致用全文,不让旧摘要压过作者的新修改。
17
+ 3. 作者记忆 query 显式传当前书名、已知题材和流程以及需要的 kind,避免只取到 global。只用 active;同一维度窄范围覆盖宽范围,不拼成同时满足的清单。无法判定的同范围冲突才问作者,已能按优先级解决的不询问。
18
+ 4. 在现有 prompt 填 `style_resolution`:本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界;只列与任务有关的冲突,无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer,并传文风全文路径。同一批次复用,当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤,不能靠上一次会话的记忆。
19
+
20
+ ## 检测器如何服从裁决
21
+
22
+ 检测器不理解作者意图。保留现有默认检查;明确采用且有功能的命中,复用**书目录**下的 `.deslop-whitelist`:UTF-8,一行一个原文字面片段,空行和以 `#` 开头的整行注释忽略,不支持正则或通配符。不向父目录找,避免跨书继承。
23
+
24
+ - 本书文风明确允许某种停顿标点时,可登记 `——` 或 `……`;具体修辞登记完整的获准原句,不能登记“不是”“没有”等泛词来关闭整类检查。
25
+ - 每项用上一行 `# 来源:…;用途:…` 说明当前请求或文风依据。只为执行作者已明确的选择登记,不因脚本报警自动放行。当前请求禁止某写法时移除相冲突的豁免;一次性保留只登记该句,不推断长期习惯。
26
+ - 深扫、标点整理和写后/下一章检查读取同一白名单。豁免只影响对应字面片段的风格检查;同一行其他问题照报,事实、字数、占位、工程词、截断和文件结构检查不豁免。
27
+ - 所选 Gate 仍执行:检查该写法是否重复、冗余、破坏节奏或越过信息边界;有这些具体问题才改。裁决与发现可简短写在正常交付报告中,不写进小说正文。
@@ -11,6 +11,7 @@
11
11
  - 长篇题材声线走 genre-prose-cards.md,短篇结构走 short-genre-formulas.md;本文件的「贯穿道具系统」提供可执行设计模板
12
12
  - 本文件第 8 节「场景写法(三维度揉进)」是 Phase 3 的写作方法,format-and-structure.md 的「小节结构」是结构规范
13
13
  - 本文件「贯穿道具系统」只规定物件的跨场景编排和意义翻转;初始情感含义由当前 long/short profile 的情绪方法负责
14
+ - 本文件第 10 节「在场者的账」只管**谁能上镜、他的动机要不要露出来、分量由谁标价**;具体的对话怎么写(长度、权力反转、句式)仍见 dialogue-mastery.md,本文件不重复
14
15
 
15
16
  ---
16
17
 
@@ -20,6 +21,8 @@
20
21
 
21
22
  情绪没有固定译法。上下文已经让读者感到,就不另补反应;情绪推动了剧情,就优先写角色的选择、台词、策略、关系变化、物件变化或实际后果;一句直写最准确时可以直写("他听烦了")。身体状态只是候选之一,只有它带来新信息、影响动作,或确实属于这个角色和这个场景时才写。
22
23
 
24
+ **同一规则适用于设定、能力与威胁。** 一样东西"危险""碰不得"不由叙述者断言,由一次有代价的试探演示:伸手、被弹回、自己估出还差多远;多看两眼、开始恍惚、退后一步绕开。旁白不先给答案(保留读者的发现权)。
25
+
23
26
  ### 落地顺序
24
27
 
25
28
  写到情绪节点时按下面顺序判断,不做“情绪词逐个替换”:
@@ -108,6 +111,9 @@
108
111
  | 伤害递增 | 数字逐次增大 | 800 → 1000 → 8 万 → 120 万 |
109
112
  | 反差暴击 | 极端膨胀后骤降到极小值 | 「我姐为了供我读书,欠了八万块。我姐夫转给我一块钱。」 |
110
113
  | 时间重量 | 用年限承载情感 | 「二十年了,她第一次叫我妈」 |
114
+ | **二次锚定** | 数字不许停在数字上,折回角色能用掉的东西 | 「卖了一千二百块」→「够她妹妹一学期的住宿」 |
115
+
116
+ **新价值一律换算成读者已知的旧价值。** 换算的对象要选读者**已经付过代价认识**的东西:上一章刚花掉的钱、上一章刚见过的一个人花了多久、主角现在缺的那一样。**换算发生在同一段里**,不隔章补。
111
117
 
112
118
  ### 数字叙事模板
113
119
 
@@ -242,6 +248,10 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
242
248
  - 为显得自然而加流程细节;删掉无损就删
243
249
  - 为凑字数重复解释情绪,或给每段补一个无功能身体反应
244
250
 
251
+ **一处显式例外:人物余韵。** 上面「删掉无损就删」不针对给人物加层的段落——一次说岔了的关心、一个被误会的反应、一个空镜。它的"无损"只对情节成立:判断方法不是问它推进了什么,是问**删掉之后谁少了一层**。
252
+
253
+ **这是豁免,不是配额。** 材料里长出这样一处就别砍;没长出来就没有,**不要为了凑"每章一处"补一段**。
254
+
245
255
  ---
246
256
 
247
257
  ## 8. 场景写法(三维度揉进)
@@ -251,10 +261,13 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
251
261
  细纲各字段是本章"要发生什么"的规格,**不是正文的形状**。照着细纲的形状逐格填,正文就成了一条一条交代的电报体、一拍一句平推的生硬解说——这是"照抄大纲形状",和照抄范例形状同属 AI 味来源。
252
262
 
253
263
  - 情节点序列是"要发生什么"的清单,不是句子模板:不要一个情节点写成一句或一段、按序平推;把每个点演成角色此刻可感知的选择、动作、对话、物件、结果,必要时才用身体反应——**演出来,不是交代出来**。
264
+ - **状态变化要给出台阶,不只给前后。** 一样东西烧起来、一张脸沉下去、一个人的态度转过来——要让读者看见中间态:先怎样、跟着怎样、最后成了什么。只给起点和终点的是概述,不是场景。台阶是**序列**不是堆料:同一状态换十种说法说十遍,仍然只是一个台阶。
254
265
  - 同一约束如果在「核心事件 / 内容概括 / 情节安排 / 情节点」里重复出现,生成前只合并成**一个语义点**;重复字段不是强调,更不是四次复述额度。正文不得沿用提纲里反复出现的同一措辞逐项交代。
255
266
  - 五段式(起因/发展/转折/高潮/结尾)是给细纲作者的功能拆解,不是正文的五个自然段;正文不必逐段顺叙,也不必一段对一格。
256
267
  - "谁做了什么"的概括句、"A→B→C"箭头链、"收束到什么状态"是规划口径,不要原样搬进叙述。
257
- - 情节点之间可以合并、穿插、重排,让相邻的点织进同一个连续场景;密点展开成慢镜头,疏点带过(见「疏密分配」)。
268
+ - **同一时空内(时间连续、地点相同)的情节点默认合并、穿插、重排**——不局限于相邻的点,合理范围内块内任何点都可以彼此打断——织进同一段连续的戏;把它们排成一前一后的串行**才是需要理由的那一侧**——只有因果依赖(B 必须在 A 之后才成立)或刻意的节拍分隔才串行。跨时空的点本来就串行,不在此列。密点展开成慢镜头,疏点带过(见「疏密分配」)。
269
+ - **判据(逐对自问,不限相邻)**:把乙点的一句插进甲点中间,剧情坏不坏?**不坏,就说明这两个点可以互相打断**;因果被打乱、该压的信息提前泄露、正在攒的节拍被冲散,就不插。
270
+ - 例:一场饭局里「主角当众被驳了一次」「邻座起哄」「同伴趁空要回垫付的钱」「同伴顺口说出一个关键消息」四个点,全落在同一顿饭的那段时间里——该让它们互相打断(要钱插在两次举筷之间、消息垫在被驳之后),而不是吃完了再让人开口;「消息」也不必非等在「要钱」后面,被驳那阵就可以先露半句头,散场再说全。
258
271
  - 章尾落在最后一个具体的动作、画面、台词或悬念上;细纲「结尾设定/收束状态」是规划口径,不要在正文里写成"就这样……""他终于明白……"式的状态总结句(结尾去升华见 anti-ai-writing.md)。
259
272
 
260
273
  ### 视角姿态:深度限知(贴地沉浸)
@@ -263,7 +276,7 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
263
276
 
264
277
  - **镜头不拉远、不俯瞰、不切他人内心**:别写"整个大厅陷入死寂"这种摄像机视角,写"她听见自己的心跳,旁边的呼吸声一下子全没了"。
265
278
  - **读者与角色同步获知**:角色不知道的不写;不提前剧透,不补全背景。悬念来自"她也不知道",禁止提前剧透句如"她不知道的是"。
266
- - **念头是动作的一部分**:心理用"闪念 + 身体"呈现——半句的、被打断的、带情绪偏见的主观判断,不写完整理性的内心独白。
279
+ - **念头是动作的一部分**:用半句的、被打断的、带情绪偏见的主观判断,不写完整理性的内心独白;不强配身体动作,情绪落地按第 1 节。
267
280
  - **主观偏差代替客观叙述**:场景被角色情绪染色。她恨谁,谁就被写得可憎;她慌,光线就晃。不写中立的、谁看都一样的描述。但只能是她此刻带偏见的瞬间感觉,不能写成"像在宣判一件早已定好的事"这类客观盖棺断言(那是作者下场定性,见 anti-ai-writing.md 模式 8)。
268
281
 
269
282
  深度限知是"自然去 AI"的根:把镜头钉死在角色身体里,作者就没有位置跳出来解释、总结、安排了(配合 anti-ai-writing.md 模式 8)。
@@ -314,8 +327,27 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
314
327
 
315
328
  ### 自检方法
316
329
 
330
+ **(一)三维遮盖法(逐段)**
331
+
317
332
  对详写的关键场景用“三维遮盖法”:分别遮住发生、感知、反应,判断现有内容是否各自提供了不同信息。某维缺失不等于要补;只有读者因此看不懂现场、因果或角色下一步时,才把缺失信息织回同一镜头。若遮住一处身体/语气细节后什么也没损失,删掉它。逐章再做第 1 节“反套话四问”,指出原句处理,不用“已遵守”代替检查。
318
333
 
334
+ **(二)质检八问(按本次检查范围选用)**
335
+
336
+ 以下供质检侧定位已有问题,不要求写手另交八项验收说明。只报告实际删改与保留理由;没有相应问题时跳过。
337
+
338
+ ⚠ **八问是删除测试,不是补写清单。** 只许指出正文里**已有**的那一处;没有就答"无"并说明本章为什么不需要,**不许为了让某一问有答案回头补内容**。答"无"不扣分。
339
+
340
+ | # | 自问 | 不合格的样子 | 见 |
341
+ |---|---|---|---|
342
+ | 1 | 本章最大的那次状态变化,读者看见了几个中间态? | 只给了"起点"和"终点";或同一状态换十种说法说十遍 | 本节「从细纲到正文」 |
343
+ | 2 | 有没有一组同类并列项被平均分配了笔墨? | 三样物件、四拨人马各给同样的分辨率 | 本节「疏密分配」 |
344
+ | 3 | 本章的设定/能力/威胁,是被说出来的,还是被谁付了代价试出来的? | 旁白直接给出结论,读者没有自己发现的机会 | 第 1 节 |
345
+ | 4 | "厉害/难得/要命"这些判断,是谁给出的?他有什么立场? | 叙述者自己下的判断;结论由旁白先说出来、在场的人只负责吃惊;或标价人就在场却没标价 | 第 10 节「标价人」 |
346
+ | 5 | 每个给了镜头的人,此刻在为自己争取什么? | 遮住名字认不出是谁说的;所有人同向配合主角;用手部/喉部微动作代替立场;或把他的算计写成一段旁白独白 | 第 10 节「镜头准入」 |
347
+ | 6 | 该说出口的话,是写出来了还是被概括了? | "他吼了一声""他说了句什么""三言两语解释了缘由";本该来回几轮的交锋压成一次说完 | 第 3 节 |
348
+ | 7 | 本章最重的那一句,是不是最短的那一段? | 最重的一拍写成了全章最长的段落 | 本节「画面分段」 |
349
+ | 8 | 判为"密"的段落里,有没有量词加概括? | "一连七八下""半晌""众人纷纷"出现在密处 | 本节「疏密分配」 |
350
+
319
351
  ### 画面分段(防止一段到底)
320
352
 
321
353
  三维度揉进不是把一个子事件塞进一个长段。揉进解决"同一瞬间被拆成发生/感知/反应三段"的问题;断段解决"手机阅读时一段过密"的问题。
@@ -337,6 +369,7 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
337
369
  - 长度只是诊断,不是强制阈值:读起来拥挤、包含多个动作/信息/视线切换时才拆;完整戏剧单元未结束时不要为凑短而硬拆。
338
370
  - 常规正文保持短段、稍长段、对话、动作段交替;高压冲突、打脸、反转段可以更碎更短。
339
371
  - 不要连续多段同长度,也不要把一个完整推理链切成机械碎片。
372
+ - **最重的一句要最短。** 全章最重的那一拍——底牌亮出、一句定生死的许诺、身份被说破——用最短的一段承接,能单句成段就单句成段。**长度表达绵延,不表达重量**;要"慢"用停顿,不用字数。
340
373
 
341
374
  输出前必须做一次自然节奏重排:
342
375
 
@@ -371,6 +404,10 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
371
404
 
372
405
  原则:一章里详写的 beat 集中在情绪节点,过场坚决压缩。读者记住的是密处的画面,疏处只是把他们快速送到下一个爽点。密度有起伏,节奏才有呼吸。
373
406
 
407
+ **同类并列项要递减,不要平均。** 三样物件、四拨人马、五次出手——第一个写足,第二个减半,后面的一句带过或只给一个区别点。**递减不是省略**:被压缩的那几个仍要各有一个不重复的记号,否则是漏写。
408
+
409
+ **判为"密"的地方禁止量词加概括。** "一连七八下""斗了半晌""众人纷纷点头""交手数十回合"(把过程折叠成一个数字,是疏处的手法)。密处只有一种写法:挑出其中**具体的几下**,逐拍写。
410
+
374
411
  ### 子事件连接
375
412
 
376
413
  子事件之间按真实关系连接:因果推进、对话接招、新信息、空间移动或角色下一步都可以;不规定必须插入身体动作,也不规定连接句长度。
@@ -419,3 +456,33 @@ IF 主事件是一连串动作 → 加「递进」:动作引发的连锁反应
419
456
  1. 读本场景目标情绪和角色声线,给每个关键对话 beat 标一类语气(压迫/试探/爆发/迟疑/被打断)。
420
457
  2. 精修时扫一遍句尾:如果一整段只剩句号,检查是否把质问、迟疑、爆点压平;如果满屏 `?`/`!`,删到只保留有功能的位置。
421
458
  3. 正文(含对话)里的 `……`、`——`、`—`、`--` 都改成句号、逗号、短句、换行或动作断句。知乎盐言 `「」` 只是引号风格,不影响问号、感叹号的合法使用。
459
+
460
+ ---
461
+
462
+ ## 10. 在场者的账(镜头准入与标价)
463
+
464
+ 治的是"所有人一起转向、齐声承认"的场面(人都在场,却没有一个在为自己做事)。
465
+
466
+ ### 镜头准入:他在为自己争取什么
467
+
468
+ 写一个人之前先答一句:**他此刻在保什么、在算什么?** 答不上来就不给镜头;给了镜头,这件事必须在他的台词或动作里露出来,哪怕只露半句。
469
+
470
+ 同一件事,在场各人读出的东西应当不同:掌握资源的一方重算利害决定不必得罪,输的一方忙着把责任推给别人,拉不下脸的那个改去攻击对方另一处短板,当事人的亲近者只顾趁热把话钉死。
471
+
472
+ - 判断方法:**遮住名字,能不能认出这句反应是谁的?** 认不出,说明他们说的是同一句话的几种说法。
473
+ - 反应要**分层**:全体折服最没张力,留一两个不服、只把评价角度换到别处,可信得多。
474
+ - 群像场景最吃紧;独角戏里退化为"主角图的是什么",同样成立。
475
+
476
+ ### 说话权分级:惜墨表示地位
477
+
478
+ 在场的人不是平权的。**一场戏只给三到四个人台词**,其余降级为一个动作或一个目光——地位越高的人给的动作越少、越静,用惜墨表示分量;同等级同立场的合并成一句,连名字都不必给。**点名的时机 = 承担功能的时机**,提前点名是提前许诺。
479
+
480
+ 反面信号:五六个人各做一个等重量的小动作——镜头被平摊,谁也没立住。
481
+
482
+ ### 标价人:谁说这件事重要
483
+
484
+ "厉害/难得/要命"由**有立场的人**当场标价,不由叙述者断言。四种方式:**内行估价**(懂行的人给一句业内口径评语)、**最强者的姿态**(最有分量的人必须做出动作才顶得住)、**基准线被打破**(熟悉此地的人说"往常不该是这样")、**稀缺度**(交代平常要什么代价才换得到)。
485
+
486
+ **标价发生在事情起效之前**,不能等结果出来再补。反面:该标价的人就在场,却只写他"笑了笑,凑到旁边说了句什么"——位置留了,内容没给。
487
+
488
+ **尺子要先于被度量的事出场,至少两把**(同场另一个做到几寸、当年最好的那个用了多久)。事后补一轮尺子也可以(同一个爽点吃第二遍)。
@@ -0,0 +1,38 @@
1
+ # 仅检查写作环境
2
+
3
+ 用于 `story-setup check` 或「检查写作环境」「为什么 agent 不可用」等诊断请求。默认只读,完成报告后结束;不复制文件、修改配置、创建部署标记,也不运行部署、迁移或提交命令。用户已要求修复时,先列出发现,再按 `story-setup/SKILL.md` 的原有部署流程处理。
4
+
5
+ ## 1. 确定检查对象
6
+
7
+ 优先使用用户指定的项目根;未指定时从当前目录向上找最近的 `.story-deployed`。找不到则报告「未找到部署标记,无法确认部署状态」,检查现有文件和运行环境,不据此自动初始化。不要扫描无关项目。
8
+
9
+ 读取 `.story-deployed` 的目标端、版本和 reference 路径。多个目标端分别检查;字段缺失、内容不可解析、目标端未知时记录具体问题,不猜一个端写回。部署版本与正在执行的 `story-setup/SKILL.md` 比较;本地包可能落后于项目,不把降级重铺当作修复。
10
+
11
+ ## 2. 复用部署验证
12
+
13
+ 以 `story-setup/SKILL.md` 的 Phase 2「部署清单」和 Phase 3 对应目标端的验证项为准,逐项读取目标文件并执行只读校验。不要维护另一份 skill 名称、数量、agent 路径或 hooks 事件清单。
14
+
15
+ - 区分安装的 skill 包和项目部署副本:Claude Code、Codex、OpenCode 的项目路径主要保存 agent、hooks 和参考资料,不要求在那里出现整套 `SKILL.md`。其他端按各自部署清单检查;skills-only 端没有原生 agents/hooks 是预期行为。
16
+ - 参考资料按源目录的相对文件列表逐一核对,包含子目录;只看目录非空或文件数量相同不足以证明完整。源包不可用或源与目标是同一份时,说明无法独立验证完整性,不把它判为通过。
17
+ - 检查 hooks 的配置注册与脚本依赖,不仅检查文件存在;采用 Phase 3 中的语法、解析和注册校验,不主动运行可能写入项目的 hook。
18
+ - 文件存在只能说明部署文件就绪。当前会话是否加载了 custom agents、hooks 是否已信任,结合宿主实际暴露的能力和可见状态判断;无法确认时记为「未验证」,不要仅因文件存在就宣称可调用,也不要为体检启动写作任务。
19
+
20
+ ## 3. 运行环境与追踪
21
+
22
+ 实际执行 `node --version`;Python 按跨平台约定依次探测 `python3`、`python`、`py`,运行版本检查,确认是 Python 3 后使用该解释器。命令存在但不能执行不算通过。缺失时说明受影响的具体脚本;不自动安装依赖,不调用模型或联网鉴权。
23
+
24
+ 若本次检查涉及长篇项目,按用户指定书目、`.active-book` 或已有 `追踪/` 确定书根;支持当前目录就是书根和 `长篇/{书名}/` 的布局。没有长篇项目则跳过追踪检查,不因此告警。
25
+
26
+ 使用已安装 `story-long-write` skill 的现有校验器:
27
+
28
+ ```bash
29
+ "$PYBIN" -B "{story-long-write skill目录}/scripts/tracking_commit.py" check --project "{书根}"
30
+ ```
31
+
32
+ `PYBIN` 是前面已成功探测的 Python 3。这个 `check` 校验追踪状态及派生视图;不要用「JSON 能解析」代替它。缺解释器、校验器或其依赖时报告未能完成检查,不另写简化校验器,也不调用 `init` / `commit` 修复。追踪问题沿用 `UPGRADING.md` 的迁移说明和现有追踪事务流程。
33
+
34
+ ## 4. 报告与后续
35
+
36
+ 按「发现的问题」「未验证项」汇总,每项给出目标端或书目、文件路径/命令结果、具体影响和下一步;正常结果合并概述,skills-only 的预期限制不渲染成安装失败。结论限定为本次实际检查的范围,不承诺所有写作能力都已验证。
37
+
38
+ 需要补部署文件时建议重跑 `story-setup`;源包本身缺失或比项目旧时先更新源包,再部署;当前会话未加载能力时提示新开会话或完成该 CLI 的信任步骤。仅检查请求到此结束,不为了消除告警自行执行修复。
@@ -169,7 +169,7 @@
169
169
  | 开头100字内冲突 | 第一句就是信息炸弹 | "在一个阳光明媚的早晨..." |
170
170
  | 对白服从场景功能 | 改变信息、策略、权力、关系或行动 | 为抬高占比补问答、复述或无效狠话 |
171
171
  | 段落服从戏剧单元 | 一件事、一个镜头或一条推理链完成再断段 | 按句数强拆,形成提纲体或电报体 |
172
- | 情绪词后接具体动作 | 直写情绪成语,后面接场景里的具体动作或物件(番茄/七猫/黑岩常态),只算后面接不上具体东西的情绪总结句为AI腔 | 《为给白月光出气,男友群发我私密照》我紧紧抿着嘴唇,直到尝到血腥味 |
172
+ | 情绪直写与场景支撑 | 观察情绪词由哪些事件、关系、动作或物件支撑,不因没有后接反应就判为AI腔 | 《为给白月光出气,男友群发我私密照》我紧紧抿着嘴唇,直到尝到血腥味 |
173
173
  | 场景产生真实变化 | 改变风险、信息、关系、资源、决定、行动或读者理解之一 | 为凑多功能添加旁人反应、回忆或独立障碍 |
174
174
  | 结尾用动作/对话 | 不升华、不总结、不感慨 | "从此以后她明白了..." |
175
175
  | 主角有辨识度 | 记录冷静由取证、选择、延迟回应还是资源调度体现,标志动作是否本篇独有 | 把端水杯、整理西装等通用动作当成必备项 |
@@ -58,7 +58,7 @@
58
58
  - [ ] 没有空洞的抒情段落
59
59
  - [ ] 没有连续多段同一情绪
60
60
  - [ ] 对话符合人物身份(不同人说话方式不同)
61
- - [ ] 情绪通过动作落地(不是直接说"他很难过")
61
+ - [ ] 情绪词有落点(融进动作句、当对话提示语、结句后直接换事或接场内物件),不是接更多情绪
62
62
 
63
63
  ### 连载连续性
64
64
  - [ ] 没有遗忘之前的承诺/伏笔
@@ -118,7 +118,7 @@
118
118
  |-----------|----------|----------|
119
119
  | 空泛总结 | 「他终于明白了」「一切尽在不言中」 | 删掉,用行动代替 |
120
120
  | 套路修辞 | 「命运仿佛在和他开玩笑」 | 删掉或换成具体描述 |
121
- | 情绪标签 | 「他感到一阵悲伤」 | 改为行为表现 |
121
+ | 空转情绪句 | 「他感到一阵悲伤」,无落点 | 删,或写他此刻做不成的事;直写本身不算缺陷 |
122
122
  | 心理描写空转 | 内心独白无新信息、重复同一情绪或复述读者已知 | 只压缩空转部分;带新信息、决断或情绪转折的独白不按句数压缩 |
123
123
 
124
124
  ### 维度 5:逻辑连贯