@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,87 @@
1
+ # 长篇参考资料索引
2
+
3
+ ## 参考资料索引
4
+
5
+ 按场景加载 workflow,以下技法按需补充。
6
+
7
+ ### Phase 1:选题方向
8
+
9
+ | 场景 | 加载文件 |
10
+ |------|---------|
11
+ | 确定题材类型 | `references/long-genre-catalog.md` |
12
+ | 判断市场方向 | `references/genre-readers.md` |
13
+ | 特殊题材考量 | `references/plot-special-topics.md` |
14
+ | 女频长篇(题材/文案/平台/感情线) | `references/female-audience-writing.md` |
15
+
16
+ ### Phase 2:核心设定
17
+
18
+ | 场景 | 加载文件 |
19
+ |------|---------|
20
+ | 设定人物 | `references/character-basics.md` |
21
+ | 设计关系 | `references/character-relations.md` |
22
+ | 题材框架与定位 | `references/long-genre-catalog.md` + `references/long-genre-mechanics.md` |
23
+ | 创建 artifact | `references/artifact-protocols.md` |
24
+ | 读者契约与主角高光 | `references/reader-contract-and-progression.md` |
25
+
26
+ ### Phase 3:大纲搭建
27
+
28
+ | 场景 | 加载文件 |
29
+ |------|---------|
30
+ | 搭建大纲 | `references/outline-methods.md` |
31
+ | 设计矛盾与结构 | `references/outline-conflict.md` |
32
+ | 深度结构设计 | `references/outline-structure-theory.md` |
33
+ | 节奏与升级感 | `references/outline-rhythm.md` |
34
+ | 小纲与卡文 | `references/plot-core-methods.md` |
35
+ | 选择叙事框架 | `references/plot-frameworks.md` |
36
+ | 题材结构 | `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡 |
37
+ | 黄金三章 | `references/opening-design.md` |
38
+ | 情绪弧线 | `references/emotional-arc-design.md` |
39
+ | 契约/终局储备/剧情单元安全审查 | `references/reader-contract-and-progression.md` |
40
+ | 反转设计 | `references/long-reversal.md` |
41
+ | 细纲结构验收 | `scripts/check-outline-contract.js`(新建/补建后跑,只判字段与表结构) |
42
+
43
+ ### Phase 4:正文写作
44
+
45
+ | 场景 | 加载文件 |
46
+ |------|---------|
47
+ | 章节钩子 | `references/long-chapter-hooks.md` |
48
+ | 悬念设计 | `references/long-suspense.md` |
49
+ | 题材正文提示卡 / 题材分类卡 | `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先) + `references/style-genre-modules.md`(通用流派补充) |
50
+ | 打斗/装逼 | `references/style-combat-face.md` |
51
+ | 写作技法 | `references/style-craft.md` |
52
+ | 商业创作核心方法 | `references/commercial-core-methods.md` |
53
+ | 对话 | `references/dialogue-mastery.md` |
54
+ | 人物深化 | `references/character-design-methods.md` |
55
+ | 情绪技法 + 叙事单元 | `references/plot-emotion-system.md` + `references/emotional-methods.md` |
56
+ | 写作技法全程参考 | `references/writing-craft.md` |
57
+ | 格式 | `references/long-format.md`(章节、段落、对话、标点与工程元信息) |
58
+ | 状态追踪协议 | `references/state-tracking.md` |
59
+ | 当前剧情单元与契约校准 | `references/reader-contract-and-progression.md` |
60
+
61
+ ### Phase 5:质量检查
62
+
63
+ | 场景 | 加载文件 |
64
+ |------|---------|
65
+ | 质量检查 | `references/long-chapter-quality.md` + `references/reader-contract-and-progression.md` |
66
+ | 禁用词扫描 | `references/banned-words.md` |
67
+ | AI句式脚本复扫 | `scripts/check-ai-patterns.js` |
68
+ | 去AI味 | `references/anti-ai-writing.md` |
69
+
70
+ ### 按主题快速定位(横切主题)
71
+
72
+ 有些主题横跨多个阶段、散在多个文件里。下表给每个主题一个**权威文件**(先读它,通常够用),配套文件只在需要那个角度时再加载。括号是该文件里对应的小节。
73
+
74
+ | 主题 | 权威文件(先读) | 配套文件(按角度补充) |
75
+ |------|-----------------|----------------------|
76
+ | 爽点(按意图分流) | **`references/plot-emotion-system.md`**(爽点设计体系:本质/六种类型/倒推法——"怎么设计爽点"先读这个) | 翻盘/高潮式爽点→`references/plot-core-methods.md`(假胜→崩解)· 打脸/装逼释放→`references/style-combat-face.md`· 题材声线与长线约束→`references/genre-prose-cards.md`· 爽文循环/多层→`references/outline-methods.md`·`references/outline-conflict.md` |
77
+ | 情绪模块 | **`对标/{书名}/剧情/情绪模块.md`(项目/书级权威)**;无对标或设计新模块时再读 `references/plot-emotion-system.md` | `references/outline-rhythm.md` 只作理论参考;不得覆盖对标书权威模块 |
78
+ | 节奏 | **`对标/{书名}/剧情/节奏.md`(项目/书级权威)**;无对标或设计新节奏时再读 `references/outline-rhythm.md` | `references/plot-core-methods.md` 只作理论参考;不得覆盖对标书权威节奏 |
79
+ | 高潮 | **`references/plot-core-methods.md`**(高潮构建公式:蓄能→假胜→崩解) | `references/outline-rhythm.md`(高潮分类与反推)· `references/outline-methods.md`(八节点故事结构:结构定位) |
80
+ | 金手指 | **`references/plot-special-topics.md`**(金手指拆分理解与战力防崩 + 进阶设计) | `references/outline-conflict.md`(金手指与身份:四点统一) |
81
+ | 感情线 | **`references/character-relations.md`**(好感度体系/四阶段 + 男女频差异) | `references/outline-conflict.md`(感情线设计)· `references/style-combat-face.md`(后宫文女主 / 男频极简爱情线构型)· `references/plot-special-topics.md`(爱情线提纯策略) |
82
+ | 反转 | **`references/long-reversal.md`**(单元/卷级/全书反转、铺垫、有效性自检) | `references/plot-core-methods.md`(假胜:先给希望再击碎) |
83
+ | 人物 | **`references/character-basics.md`**(主角/配角/反派/动机模板速填) | `references/character-design-methods.md`(三层标签反差/九维深化)· `references/character-relations.md`(关系类型/感情线) |
84
+ | 女频写作 | **`references/female-audience-writing.md`**(女频长篇:核心原则/文案/题材/感情线长线/平台) | `references/genre-readers.md`(读者心理/平台差异)· `references/character-relations.md`(感情线总框架) |
85
+ | 去AI味 | **`references/anti-ai-writing.md`**(AI指纹/核心规则/Show Don't Tell) | `references/banned-words.md`(禁用词扫描)· `references/long-chapter-quality.md`(成稿检查) |
86
+
87
+ ---
@@ -17,7 +17,7 @@
17
17
  | 写新媒体/短平快装逼 | 新媒体写作与题材套路 |
18
18
  | 搭建装逼舞台 | 舞台搭建法 |
19
19
  | 打脸写了但不爽 | 检查:爽点释放到位法则 + 前置小无敌准备了吗 + 对手层级够不够 |
20
- | 战斗场景枯燥/流水账 | 检查:战斗描写三板斧 + 情绪调动三阶法 + 缺少感官细节和身体反应 |
20
+ | 战斗场景枯燥/流水账 | 检查:战斗描写三板斧 + 情绪调动三阶法 + 攻防选择、伤势和动作后果是否清楚 |
21
21
 
22
22
  ## 指令语气
23
23
 
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## 指令语气
19
19
 
20
- 本文件以"操作指令"语气书写。所有规则都是**必须遵守**的写作约束。遇到冲突时:镜头式写作法的规则 > 基础技巧 > 认知类参考。
20
+ 本文件是默认技法库,按 [style-resolution.md](style-resolution.md) 服从当前请求、本书文风和 active 作者偏好;镜头法、视角和句长建议不作跨文风验收线。
21
21
 
22
22
  ---
23
23
 
@@ -109,12 +109,12 @@
109
109
 
110
110
  ## 镜头式写作法
111
111
 
112
- 忘掉全知视角,你是跟在主角身后的摄像机。读者只能看到主角看到的东西。
112
+ 采用限知镜头法时,跟随主角感知;本书选有限全知或多视角时按文风执行,不将授权的视角切换判错。
113
113
 
114
114
  ### 核心原则
115
- 1. 只写能看到/听到/闻到/摸到的,不写"他心里想""他感到"
115
+ 1. 只写主角能看到/听到/闻到/摸到的,不切他人内心,不写作者解说
116
116
  2. 每句对话都要推进剧情、塑造人物、或传递信息
117
- 3. 动作代替描述:"他很紧张" -> "他的手在抖"
117
+ 3. 情绪可以直写;要补足信息时优先选择、台词、物件或后果,不默认换成身体动作
118
118
  4. 手机屏幕优先:按动作/信息变化换行,读起来卡时拆段;拆的是段落,叙述句仍以逗号长句为主(句长标准见 anti-ai-writing.md 规则 3)
119
119
 
120
120
  ### 高危清单
@@ -137,8 +137,7 @@
137
137
 
138
138
  | 禁用 | 替代 |
139
139
  |------|------|
140
- | 他感到紧张 | 他的手在抖 |
141
- | 她很伤心 | 她转过身,肩膀微微颤动 |
140
+ | 他感到一阵悲伤(无落点) | 删掉,或写他此刻做不成的那件事 |
142
141
  | 高频公式化对话标签 | 用动作、语气或上下文承接;普通“说”可保留 |
143
142
  | 他深吸一口气 | 他把烟摁灭在烟灰缸里 |
144
143
  | 她眼中闪过一丝惊讶 | 她的手停在了半空 |
@@ -175,17 +174,9 @@
175
174
  ### 核心分类
176
175
  - **画面感**:人+环境(静/动),如高清摄像机忠实记录
177
176
  - **思想**:计划/目标/吐槽/揣测/分析等内心活动
178
- - **情绪**:藏在画面感与思想之中,不直接写出来
177
+ - **情绪**:可直写,也可藏在画面与思想里;落地判断见 `writing-craft.md` 第 1 节
179
178
  - **旁白**:身世背景/设定/人物关系/回忆,尽可能简洁
180
179
 
181
- ### 情绪表达层级(由低到高)
182
- 1. 最低:直接写"xx愤怒/伤心/快乐"——告诉情绪,读者感受不到
183
- 2. 低:用思想"xx暗骂"
184
- 3. 中:用神态"xx脸色铁青"
185
- 4. 高:用动作"xx猛地攥紧拳头,指甲掐进肉里"
186
-
187
- 核心:离底层情绪越远的表达越高级 = 侧面描写。
188
-
189
180
  ### 环境交互(环境描写核心)
190
181
  没有交互的环境描写不值得写。
191
182
  - 物理交互:梨花飘到鼻尖打喷嚏 / 雪山瑟瑟发抖 / 河水洗脸
@@ -237,7 +228,7 @@
237
228
 
238
229
  ---
239
230
 
240
- ## 文笔的本质与层级
231
+ ## 文笔的本质
241
232
 
242
233
  ### 三项输出检查
243
234
  - **选材**:目标读者、题材边界、核心卖点是否清楚。
@@ -246,17 +237,6 @@
246
237
 
247
238
  如果正文问题来自选材或剧情设计,不要只润色句子;回到对应 artifact 修正。
248
239
 
249
- ### 表达情绪的层级(由低到高)
250
-
251
- | 层级 | 写法 |
252
- |------|------|
253
- | 最低 | 直接写"xx愤怒" |
254
- | 低 | 用思想"xx暗骂" |
255
- | 中 | 用神态"脸色铁青" |
256
- | 高 | 用动作"猛地攥紧拳头,指甲掐进肉里" |
257
-
258
- 核心:不写情绪本身,写情绪引发的外在表现。
259
-
260
240
  ---
261
241
 
262
242
  ## 视角选择与叙事
@@ -336,12 +316,12 @@
336
316
  - [ ] **段落控制**:按动作/信息变化断段,读起来不卡
337
317
  - [ ] **高危词扫描**:少用"仿佛/犹如/一丝/不禁/眼中闪过/嘴角勾起"等模板化表达
338
318
  - [ ] **高危句式扫描**:公式化对话标签/"他感到"/"带着一丝XX"等不要过量
339
- - [ ] **情绪展示**:关键情绪节点没有直接写"他愤怒/伤心/紧张",用动作/神态替代;低强度过场情绪允许一笔直写,不必处处外化
319
+ - [ ] **情绪落地**:按 `writing-craft.md` 第 1 节检查,允许准确直写,不为情绪词强配动作或神态
340
320
  - [ ] **对话有效性**:每句对话至少推进剧情/塑造人物/制造张力之一
341
321
  - [ ] **五感调动**:每个场景至少调动2种以上感官
342
322
  - [ ] **环境交互**:环境描写有角色交互,不是空镜头
343
323
  - [ ] **镜头感**:每段有明确拍摄对象,远景/中景/近景/特写交替
344
324
  - [ ] **水分检查**:删掉任意一段后读者是否困惑——不困惑则该段多余
345
- - [ ] **视角一致**:没有全知叙述/上帝视角/心理分析混入
325
+ - [ ] **视角一致**:符合本书选定的叙述姿态,没有未经授权的信息泄露
346
326
  - [ ] **节奏交替**:叙述默认是逗号长句(句长标准见 anti-ai-writing.md 规则 3),短句只作偶尔的孤立重拍、用完回到逗号长句;忌通篇同长度,也忌机械长短交替;快慢场景交替
347
327
  - [ ] **代入感**:主角目标清晰、行为可理解、叙事立场站在主角一侧
@@ -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 仍执行:检查该写法是否重复、冗余、破坏节奏或越过信息边界;有这些具体问题才改。裁决与发现可简短写在正常交付报告中,不写进小说正文。
@@ -0,0 +1,31 @@
1
+ # 追踪初始化事务
2
+
3
+ ## 初始化事务
4
+
5
+ 新书从第 0 章初始化。`story-import` 导入已有小说时把最后完整章写入 `last_chapter=N`;第 1..N 章不伪造日更记录,常规续写从 N+1 章开始。
6
+
7
+ ```json
8
+ {
9
+ "schema_version": 1,
10
+ "book_title": "让你管账号,你高燃混剪炸全网",
11
+ "last_chapter": 0,
12
+ "context": {
13
+ "position": {
14
+ "volume": "第一卷·军宣整顿",
15
+ "volume_start_chapter": 1,
16
+ "story_time": "江晨到火箭军文工团报到前",
17
+ "scene": "火箭军文工团"
18
+ },
19
+ "long_term_constraints": ["军宣爽点要用作品效果和围观反应链兑现,不能只靠系统播报"],
20
+ "active_character_names": [],
21
+ "continuity_risks": [],
22
+ "recent_chapters": [],
23
+ "next_chapter_commitments": ["让江晨报到,并落下五天百万粉的新手任务"]
24
+ },
25
+ "character_snapshots": {},
26
+ "foreshadow": [],
27
+ "timeline_events": []
28
+ }
29
+ ```
30
+
31
+ 导入初始化时直接传入当前核心角色快照、伏笔当前行、时间线事件和固定 7 栏状态输入。阶段/卷级回看按需查询正文,不作为每章强一致追踪产物。
@@ -20,14 +20,13 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
20
20
  ```text
21
21
  {PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {初始化事务.json}
22
22
  {PYTHON} {当前 skill 根}/scripts/tracking_commit.py check --project {书项目根}
23
- {PYTHON} {story-long-write skill 根}/scripts/storyctl.py wordcount checkpoint --file {前半段临时文件} --target {目标} --chapter {N}
24
23
  {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter check --project {书项目根} --chapter {N}
25
24
  {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {逐章事务.json}
26
25
  {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {逐章事务.json}
27
26
  ```
28
27
 
29
28
  - `init`:只在 `_tracking-state.json` 不存在时执行,绝不覆盖已初始化项目。
30
- - `wordcount checkpoint`:纯测量;返回当前实际字数、用户带与剩余用户区间,不写正文、不写 tracking、不做语义判断。每章最多调用一次。
29
+ - `wordcount measure` / `wordcount checkpoint`:纯测量入口;不写正文、不写 tracking、不做语义判断。长篇正文流程一次写完整章,**不在章中调用测量**,长度由 `chapter check` 一次收口;这两个入口供导入、审查等其他场景使用。
31
30
  - `chapter check`:重新读取当前正文与细纲目标,返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作,不保存 approval。`under` 不提供自动补写;`over` 额外返回一次净删型 `compress-once` 及进入内带/用户带所需的机器删除区间。
32
31
  - `chapter commit`:再次读取当前文件、重新计数并重跑 blocking quality;只接受用户带内章节,把简短字数记录与逐章事务一起原子提交。
33
32
  - `chapter accept-current-length`:只接受带外但 quality pass 的章节;接受动作发生时重新读取、重新计数并立即原子提交,不保存可陈旧的历史决议。
@@ -43,33 +42,7 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
43
42
 
44
43
  ## 初始化事务
45
44
 
46
- 新书从第 0 章初始化。`story-import` 导入已有小说时把最后完整章写入 `last_chapter=N`;第 1..N 章不伪造日更记录,常规续写从 N+1 章开始。
47
-
48
- ```json
49
- {
50
- "schema_version": 1,
51
- "book_title": "让你管账号,你高燃混剪炸全网",
52
- "last_chapter": 0,
53
- "context": {
54
- "position": {
55
- "volume": "第一卷·军宣整顿",
56
- "volume_start_chapter": 1,
57
- "story_time": "江晨到火箭军文工团报到前",
58
- "scene": "火箭军文工团"
59
- },
60
- "long_term_constraints": ["军宣爽点要用作品效果和围观反应链兑现,不能只靠系统播报"],
61
- "active_character_names": [],
62
- "continuity_risks": [],
63
- "recent_chapters": [],
64
- "next_chapter_commitments": ["让江晨报到,并落下五天百万粉的新手任务"]
65
- },
66
- "character_snapshots": {},
67
- "foreshadow": [],
68
- "timeline_events": []
69
- }
70
- ```
71
-
72
- 导入初始化时直接传入当前核心角色快照、伏笔当前行、时间线事件和固定 7 栏状态输入。阶段/卷级回看按需查询正文,不作为每章强一致追踪产物。
45
+ 仅新书或导入初始化时,执行 `init` 前必须完整读取 [tracking-initialization.md](tracking-initialization.md),按其中原始 JSON 与导入边界构造事务。已有项目续写直接使用下方逐章事务,不重复读初始化示例。
73
46
 
74
47
  调用方的逐章 JSON 不写 `wordcount`;正式入口 `chapter commit` 或 `chapter accept-current-length` 在提交当下生成并注入。最终 state 只为已提交章节保留 `metric / target / actual / status / resolution / body_sha256`,不保存 MEASURE/RESOLVE 事件、ID 链、policy fingerprint 或独立 chapter state。
75
48
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  本文件是「写一章正文」的完整流程。SKILL.md 路由到 Phase 4 后按本文件执行;日更批量由 `workflow-daily.md` 控制批次与追踪事务,每章正文仍走本文件。
4
4
 
5
- 项目文件结构、产物映射表、缺失文件处理、对标分析权威优先级在 `SKILL.md` Phase 4 开头,本文件不重复(SKILL.md 恒在上下文里)。
5
+ 项目文件结构、产物映射、缺失处理和对标权威顺序见 [project-files.md](project-files.md);首次定位、初始化或缺失时先读取并执行。
6
6
 
7
7
  本文件提到的 agent 都只检查当前端 canonical 目录;Antigravity 使用 `.agents/agents/agent-name/agent.md`(`agent-name` 为目标 agent 名)和 `invoke_subagent` + 同名 `TypeName`,其余端使用各自 Agent 工具。
8
8
 
@@ -12,12 +12,12 @@
12
12
 
13
13
  当用户准备写某一章时:
14
14
 
15
- 1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,并从对应 `大纲/卷纲_第X卷.md` 读取当前剧情单元(单元ID/位置、卷契约、本卷主推线/战果、终局底牌边界、风险等级)。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。补建后按 `artifact-protocols.md` 跑 `check-outline-contract.js` 结构验收,失败只补点名字段再复验。
16
- 2. **读取上下文**(按需选择;缺失时遵循各项及SKILL.md Phase 4 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:对应 agent 已部署时 spawn story-explorer 一次获取上下文。Prompt:`项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={check 的值},state_revision={check 的值}`):
17
- - (1) `正文/第{N-1}章_*.md` — 上一章正文
18
- - (2) `大纲/细纲_第{N}章.md` — 本章细纲(含钩子设计)
19
- - (2a) `大纲/卷纲_第X卷.md` — 当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)
20
- - (3) `tracking_commit.py check` + `追踪/上下文.md` — `check` 无 ERROR 输出即通过,从它的紧凑 JSON 取 `last_committed_chapter` / `state_revision`,不把完整 state 加入 prompt;待回收伏笔取 `## 活跃伏笔`,角色当前状态取 `## 核心角色状态`,下一章硬承诺取 `## 下一章承诺`
15
+ 1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,取本章「单元ID/位置」的单元ID,再按 SKILL.md「卷纲不整读(取段器)」跑 `outline_view.py --unit {单元ID} --stage write {卷纲路径}` 拿当前剧情单元、卷契约、全卷常任裁定、本卷主推线/战果、终局底牌边界与风险等级——**不整读卷纲**;**写正文一律 `--stage write`**,批次底稿(供给自查/建纲追加/批次级复检)是排纲期底稿,不进写作回路。脚本 exit 1 时按它的提示修,不改用整读绕过。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。补建后按 `artifact-protocols.md` 跑 `check-outline-contract.js` 结构验收,失败只补点名字段再复验。
16
+ 2. **读取上下文**(按需选择;缺失时遵循各项及 `project-files.md` 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:对应 agent 已部署、**且降档不成立**时 spawn story-explorer 一次获取上下文。Prompt:`项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={check 的值},state_revision={check 的值}`):
17
+ - (1) `正文/第{N-1}章_*.md` — 上一章正文(**脚本代读结尾**;主会话只在承接存疑时才自己读)
18
+ - (2) `大纲/细纲_第{N}章.md` — 本章细纲(含钩子设计)。**主会话必读全文**(意图确认、必读设定、涉及角色、本节速记都要它)
19
+ - (2a) 卷纲 — **走 `outline_view.py --unit {单元ID} --stage write`,不整读**(见 SKILL.md「卷纲不整读」):当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)、全卷常任裁定
20
+ - (3) `tracking_commit.py check` + `追踪/上下文.md` — `check` 无 ERROR 输出即通过,从它的紧凑 JSON 取 `last_committed_chapter` / `state_revision`,不把完整 state 加入 prompt。**续写状态卡整份不注入 prompt**:脚本只校验 7 栏完整,状态由主会话读全 7 栏后筛进步骤 7 的「本节速记」槽
21
21
  - (4) `设定/角色/{相关角色}.md`、`设定/势力/{相关势力}.md`(如存在)— 本章涉及的角色与势力(按细纲出场筛选)
22
22
  - (5) 对标书路径下 `拆文报告.md`(按对标书路径查找)— 对标参考
23
23
  - (6) `对标/{对标书名}/原文/第{N}章_*.md`(如存在)— 同位置章节参考
@@ -25,29 +25,17 @@
25
25
  - (8) 对标书路径下 `剧情/故事线.md`(按对标书路径查找)— 剧情单元索引,用于确定本章涉及哪些剧情单元
26
26
  - (9) 对标书路径下 `剧情/{相关剧情单元}.md`(按对标书路径查找)— 从索引中选择与本章相关的剧情单元文件
27
27
  - (10) 对标书路径下 `设定/世界观/*.md`(glob,按对标书路径查找)— 从当前拆文产出的主题化设定中获取参考;目录缺失则记录缺口并跳过本项,不读取扁平历史路径
28
- - (11) 对标书路径下 `剧情/情绪模块.md`(按对标书路径查找)— 读者需求 / 情绪引擎、爽文套路框架、可复现模块;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
29
- - (12) 对标书路径下 `剧情/节奏.md`(按对标书路径查找)— 关键信息推进、情绪触动点、爆发节奏;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
30
- - (13) `设定/题材正文提示卡.md`(如存在)— 本书正文层题材卡;缺失时从 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先)+ `references/style-genre-modules.md`(兜底)即时生成 `genre_prose_card`,不阻塞写作
28
+ - (11) 对标书路径下 `剧情/情绪模块.md`(按对标书路径查找)— 仅全量召回时读取;读者需求 / 情绪引擎、爽文套路框架、可复现模块;缺失按 `project-files.md` 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
29
+ - (12) 对标书路径下 `剧情/节奏.md`(按对标书路径查找)— 仅全量召回时读取;关键信息推进、情绪触动点、爆发节奏;缺失按 `project-files.md` 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
30
+ - (13) `设定/题材正文提示卡.md`(如存在)— 本书正文层题材卡。**加工在 3(c),本项只列路径与兜底链**,读一次就直接产出 `genre_prose_card`,不在这里先读一遍再去 3(c) 召回一遍;缺失时从 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先)+ `references/style-genre-modules.md`(兜底)即时生成 `genre_prose_card`,不阻塞写作
31
31
  3. **写前准备**(下面的 3 步是核心方法在单章写作中的落地:筛选状态 → 召回模块 → 确认意图):
32
+ - **第 0 步:先跑组装脚本**(可用时)。`{PYTHON} {skill 根}/scripts/build_writer_prompt.py --project {项目根} --chapter {N} --out {留档文件}`,脚本统一输出 UTF-8。stdout 的 `====` 分隔线以上是 prompt 正文、以下是核对报告。主会话只填 `[主会话填]` 空槽。退出码 2 = 数据问题,先修数据再重跑,不得手拼绕过;脚本跑不起来才按步骤 7 回落。
32
33
  - **状态筛选**:从 `追踪/上下文.md` 的 `## 核心角色状态` 取当前角色,从 `## 活跃伏笔` 取需回收/推进项,从 `## 下一章承诺` 取本章必须履行项,输出本节速记(参考 state-tracking.md)。久别角色按名读取 `追踪/角色状态/{名}.md`;只有追查变化原因时才定点查逐章增量。续写状态卡或 meta 不存在时按 workflow-daily 的当前协议处理,不手写替代文件
33
- - **模块召回、题材卡与文风召回**:
34
- - ① 本章目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 用在哪些段落?答不出 → 先回读参考再动笔
35
- - (a) **情绪模块召回**:按「对标书路径查找」规则读 `{对标书路径}/剧情/情绪模块.md`,选出 1 个与本章目标情绪最贴近的 `selected_emotion_module`(读者需求、触发器、戏剧单元、可替换要素、反抄袭提醒)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
36
- - (b) **节奏召回**:读 `{对标书路径}/剧情/节奏.md`,选出 1 条 `rhythm_reference`(关键信息 → 扩写技法 → 情绪触动点 → 爆发/冷却)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
37
- - (c) **题材正文提示卡召回**:优先读 `设定/题材正文提示卡.md`;缺失则先读 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引,按主题材精确匹配后只读取 `references/genre-prose-cards/` 中对应单题材卡(如 都市脑洞 / 豪门总裁 / 年代 / 双男主;低置信卡必须在意图确认标注低置信,并要求同题材对标校准),无命中再读 `references/style-genre-modules.md` 通用流派模块。跨题材时主题材抽 3-5 条、辅题材抽 1-2 条,生成短 `genre_prose_card`(题材边界、核心逻辑、读者期待、核心爽点/情绪、正文落点、前中后期打法、节奏密度、场景颗粒、禁止漂移、本章取舍、卡片置信度)。题材卡只约束正文层题材味,不改细纲剧情、不覆盖 `selected_emotion_module` / `rhythm_reference` / `设定/文风.md`;只在内部校准取舍,正文里不得出现卡名/标签/置信度/条目/合规自评
38
- - (d) **文风召回**:先直接读 `设定/文风.md`(不经 explorer):含实质内容(去空白 ≥200 字,或含 句长 / 标点 / 对话 / 锚点 / 笔调 小节且小节内有可执行约束:比例 / 例句 / 禁止或偏好描述)则置 `custom_style=true`、进入「自定义文风模式」,它作权威风格基(句长 / 软标点 / 潜台词 / 情绪交替),对标 / 拆文 `文风.md` 降为参考(锚点 + 句长兜底);空 / 仅空白 / 仅标题 / 占位 stub(待办 / 待补充 / ___)视为不存在。否则按「对标书路径查找」规则读 `{对标书路径}/文风.md`(路径优先 `{项目}/对标/{书名}/`,回退 `拆文库/{书名}/`);多本对标书时从 `设定/题材定位.md` 读 `主对标书` 字段。**未进入自定义文风模式且**文风文件不存在 → **fail-fast 报错**:「对标书 X 缺少 文风.md。请用 `/story-long-analyze` 跑 Stage 6 生成文风,再 `/story-import` 同步。」不 inline 生成(自定义文风模式则不 fail-fast;情绪 / 节奏轴 `missing_primary_contract` 仍独立阻塞)
39
- - (e) **匹配章节挑选**:从 `{对标书路径}/章节/*_摘要.md` grep `基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)`(全角冒号),按本章目标情绪挑章 K——多章同基调时选择规则:先看爽点类型是否接近,再看情节点数量/原文章节估算字数是否接近本章目标字数,最后取章节号最小者;必读 `{对标书路径}/章节/第K章_摘要.md`,若同章存在 `第K章_深度拆解.md` 则加读,否则回退黄金三章深度拆解/文风文件里的可借鉴技巧,不因非黄金三章缺少深度拆解而失败
40
- - (f) **结构化模块召回**:从对标的结构化子目录(角色/剧情/设定)中按本章情节检索相关模块;若与 `剧情/情绪模块.md` / `剧情/节奏.md` 冲突,权威文件优先,记录 `conflict`
41
- - (g) 输出"主对标召回摘要 + 副对标召回摘要 + selected_emotion_module + rhythm_reference + genre_prose_card + 文风召回指令 + 原文锚点片段引用",作为 narrative-writer 的输入。**多对标书时**参 `references/cross-book-recall.md`:主对标提供文风、原文锚点与 selected_emotion_module / rhythm_reference;副对标/参考对标按阶段预算提供结构化摘要,不限制登记书目,不读取副书 `文风.md` / 原文,超过预算时裁条目不裁书目记录。
42
- - **快捷路径**:项目已部署 story-explorer agent 时,可一次性召回文风/模块材料。
43
- - 按本文件顶部规则确认 story-explorer 已部署。
44
- - 查询类型:`benchmark_style_load`;传入项目目录、章节号、目标基调/字数和爽点类型。
45
- - 需要返回:`style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、来源路径、匹配章节、锚点片段、`gaps`。
46
- - `gaps.missing_primary_contract` 为 true 时先按 `repair_action` 修复,不进入正文生成。
47
- - 主会话另行直接读 `设定/文风.md`:含实质内容时作为本书风格基准;但不豁免情绪/节奏缺失。
34
+ - **模块召回、题材卡与文风召回**:写前完整读取 [benchmark-recall.md](benchmark-recall.md),执行其中 (a)-(g)、成熟项目降档与 explorer 快捷路径。组装脚本的降档结论、情绪/节奏缺失阻断、本书文风全文及主副对标预算均按该文件执行。
35
+
48
36
  - **指令确认**:综合细纲、本节速记和模块召回结果,用一句话写清本章意图。
49
37
  - 新版细纲必须消费:阶段位置、单元ID/位置、主角目标/关键选择、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾钩子,并对照当前剧情单元的卷契约、本卷主推线/战果、终局底牌边界。
50
- - **细纲优先边界**:正文只能展开本章细纲已有事件、人物、冲突、伏笔和结尾钩子;不得为了凑字或"更精彩"自造新主线、新角色、新反转、提前写后续章剧情,必要的过渡动作只能服务于细纲已列情节点。后续阶段真相、底牌、关系结论和终局矛盾不得因为章尾钩子提前泄露。反过来,细纲是"要发生什么"的契约、不是正文的形状:正文可自由编排叙述顺序、合并/穿插情节点,不必一个情节点一段、也不必按五段式顺写,把每个点演成场景而不是照抄概括语(见 writing-craft.md「从细纲到正文」)。
38
+ - **细纲优先边界**:正文以本章细纲为唯一剧情蓝图;新增物按三档授权(档表见步骤 7)——一档现场材料直接写、二档写并申报、三档(新主线事件、新反转、新金手指规则、提前写后续章剧情、改变细纲已定结果)不写,**不要用「不自造新剧情」一刀切**。后续阶段真相、底牌、关系结论和终局矛盾不得因为章尾钩子提前泄露。反过来,细纲是"要发生什么"的契约、不是正文的形状:正文可自由编排叙述顺序、合并/穿插情节点,不必一个情节点一段、也不必按五段式顺写,把每个点演成场景而不是照抄概括语(见 writing-craft.md「从细纲到正文」)。
51
39
  - **细纲语义去重**:同一要求在核心事件、五段式、情节安排和情节点中重复,只算一个语义点;生成前合并,不把重复次数当强调,不沿用提纲原句逐项复述。比如多处都写“不带摄像机、先听完再决定拍不拍”,正文只通过一个自然动作或一句人物判断兑现,不能拆成「至于拍不拍,怎么拍…」「不带摄像机,不带采访灯」两轮说明。
52
40
  - 爽点出手前要有可指认的危机/期待铺垫;装逼/打脸/揭露章要写在场配角的差异反应。
53
41
  - 高压/生死/悲痛节拍 要收紧对话声线:搞笑担当让位,信息型角色不当科普嘴,对话逐句承接对方情绪。
@@ -55,36 +43,31 @@
55
43
  - 契约风险检查:按 `references/reader-contract-and-progression.md` 判定 契约安全 / 需补强 / 契约破坏;若高光/收益被配角、机构或偶然性拿走且没有可见交换,先修纲再写。
56
44
  - 例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」
57
45
  4. **资料研究**(按需):遇到需查证的外部事实且 story-researcher 已部署时,spawn 搜索并输出到 `参考资料/`;不可用则主线程直接执行。研究完成后再继续写作。
58
- 5. **标题预检**:写正文前从细纲读取章名;如与既有章节同名或明显重复,先按本章核心事件改名,并同步细纲标题与正文文件名。
59
- 6. **写作与唯一 checkpoint**:将批准情节点按叙事顺序分成连续两组,同一 session 先写前组临时 segment,再且只运行一次 `{PYTHON} {skill 根}/scripts/storyctl.py wordcount checkpoint --file {前组临时文件} --target {字数目标} --chapter {N}`。把 `actual`、`remaining_user_range` 和后组原始情节点交回 writer,并明确:
60
- - 只完成剩余情节点,不得为字数新增独立事件、人物决定、关系变化、揭示或支线。
61
- - 剩余情节点完成即停,即使仍欠长也不加剧情。
62
- 两段完成后一次组装最终正文;不做逐点配额、字数 retry、完整重写或落盘后扩写。
46
+ 5. **标题预检**:看脚本核对报告里的重名结论,不重做。报出重名或明显重复时才按本章核心事件改名,并同步细纲标题与正文文件名;脚本不可用时自己比对。
47
+ 6. **写作准备**:全章细纲先交给 writer,供它统筹编排;默认同一 session 按前后两组交付。
48
+ - 依实际叙述顺序,在自然转场或因果停顿处分组,不在一句对话或同一动作中间截断。可交错情节点,但不增删批准内容;分组写清当前要完成的片段,不拆逐点字数配额。
49
+ - writer 先写前组临时 segment;主会话只调用一次 `storyctl.py wordcount checkpoint --file {segment} --target {目标} --chapter {N}`,把 `actual / remaining_user_range` 连同尚未完成的后组交回同一 writer。两组完成后按原文拼接,不回改前组追字数。
50
+ - 用户明确要求一次成文时,执行安排填「全章」,直接落盘;不额外跑 checkpoint。无论哪种方式,批准内容写完即停,不为字数加剧情。
51
+ - 组装后的实际长度由步骤 8 的 `chapter check` 收口;欠长不补、超长只净删一次,仍带外交用户决定。
63
52
  - **正文元信息隔离**:`章节:第{N}章`、`上一章:正文/第{N-1}章_*.md`、`匹配第K章`、`细纲文件` 等只用于定位材料。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词。需要承接前文时,改成角色能感知的事件锚点或相对时间,例如“比第一章那三秒开火更疼”必须写成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
64
53
  7. **正文执行**:
65
54
  - 按本文件顶部规则确认 narrative-writer 已部署。
66
- - 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,prompt 只传本章必需材料:
67
- - 项目目录、章节、细纲文件、上一章、输出路径。
68
- - 写前准备输出:本节速记、情绪目标、涉及角色、参考技法。
69
- - 主对标/拆文路径、主/副对标召回摘要。
70
- - `selected_emotion_module`、`rhythm_reference` 及来源路径。
71
- - `genre_prose_card`(题材正文提示卡摘要,只含本章相关条目)。
72
- - 文风路径、文风召回指令、原文锚点片段。
73
- - `author_preferences`:作者记忆 `query` 结果中匹配本章的 `prose_style` / `story_design` 项;无则不传,禁止把完整画像或待确认项塞进 prompt;作为低优先级倾向自然吸收,不逐条展示或最大化命中,不牺牲连贯、节奏和字数。
74
- - 阶段位置、本章结构公式、本章可释放信息、本章禁止提前释放信息。
75
- - 字数目标、`visible_chars_v1` 口径、格式硬约束;前组后由机器给出一次剩余用户区间,不让 writer 心算或填写逐情节点配额。
76
- - 细纲优先边界(内容层):只展开本章细纲,不自造新剧情;每条情节点都要独立落地,不许漏、不许两条并一句。不得仅为追字数自动补纲、扩写或重写;实际长度统一留到步骤 8 测量。
77
- - 正文形状(形状层):落地位置、顺序、拆成几处由子代理编排,可打散重排、把相邻几条缝进同一个连续动作;不要一条一段平推,不把细纲措辞原样搬进叙述。
55
+ - **组装走脚本,不逐条手拼**:骨架在步骤 3 第 0 步已生成。脚本提供首行、路径、沿用既有格式的标题、文风、上章结尾与可用的情绪/节拍;主会话核对报告后填槽。**细纲全文、卷纲单元卡、续写状态卡都不进 prompt**;agent 已有规则只传指针。可选块缺失留标题并写明原因。
56
+ - **主会话填八槽**(搜 `[主会话填]`):执行安排 / 本章意图 / 参考技法 / 本节速记 / 涉及角色 / `genre_prose_card` / 必读设定 / `author_preferences`。填法见槽内提示。作者偏好仅作低优先级倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数。降档不成立时情绪与节奏槽也是空槽。填完**空槽以外一字不改,整份照抄进 Agent prompt**;`--out` 留档文件供事后比对。
57
+ - **回落分两种**:①脚本**跑不起来**(python 缺失、脚本报错、用户指定不走脚本)→ 主会话按手动组装规格补齐脚本负责的材料,报告里声明 `Fallback: build_writer_prompt -> 手动组装`。②脚本**退出码 2**(细纲缺失、续写状态卡缺栏、上一章找不到)→ 不是回落,是停下修数据,修完重跑脚本。
58
+ - 仅在上述手动回落时加载 [writer-prompt-fallback.md](writer-prompt-fallback.md),按规格组装同样的输入。
78
59
  - 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
79
- - agent 在同一 session 内按上述流程写两个临时 segment;主会话确认二者只消费批准情节点后,组装并写入 `正文/第XXX章_章名.md` 一次。如 agent 未部署,由主线程执行同一流程。
80
- 8. **非对称收口**:运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N}`;文件变更重跑,不存决议。
81
- - 带内 + pass → `chapter commit`;fail / `invalid` → 停止。
60
+ - agent 按执行安排交付,主会话将最终正文写入 `正文/第XXX章_章名.md`;主会话核对它只消费了批准情节点。如 agent 未部署,由主线程执行同一流程。
61
+ 8. **先核时空表,再非对称收口**:
62
+ - **核时空表**(交付确认):细纲每个情节点是否**至少出现一次**——有漏即退回补写(补的是批准内容,不是加戏);横跨多个时空的点须标注,每一处都要有实在内容。若同一场戏被机械切成逐点清单,按形状层判据核对后局部重织;不同场景或因果依赖所需的串行不因表形退回。这些退回属于覆盖/形状修复,不以字数为由发起。
63
+ - 运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N}`;文件变更重跑,不存决议。
64
+ - 带内 + pass → 完成步骤 9-12 的语义核对与新增物裁定后再 `chapter commit`;fail / `invalid` → 停止。
82
65
  - `under` + pass → 展示 `accept-current-length / revise-outline-or-target / discard`,不补/重试;接受命令会重读、重数、原子提交。
83
66
  - `over` + pass → 删除区间随 `compress-once` 交 narrative-writer;一次净删,零新语义/契约改动。会话核对情节点与钩子后复检;带内提交,否则上述三动作。
84
67
  9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→只修复细纲已批准内容):① 爽点前是否有可指认的危机/期待段落?② 装逼/打脸/揭露章,在场配角是否有差异化反应?质量修复后重跑步骤 8,但不得借质量修复补新剧情追字数。
85
68
  10. **元信息扫描**:检查标题行以外的正文,命中 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 时必须改写为场景内表达;只有角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时例外。
86
69
  11. **禁用词扫描**:先过**最毒句式速查**(实测最易漏,命中即改):①「不是A,(而)是B」全家族——含「没有X,没有Y(,只是Z)」排比否定、「是B,不是A」反序、「他没X,也没有Y。他只是Z」先抑后扬,;②声线反差「声音不大/不高…却…」;③「,带着……」万能状语;④预告/总结收尾「没人知道…」「(这)才刚刚开始/开头」「正朝着…压过去」「即将拉开序幕」「这一刻…」;⑤叙述里短词加引号强调(他是被请来"把关"的)。再复核 detector 的 `formulaic-parallelism` advisory:跨段「不是A。/也不是B。/只是C。」、`至于X不X,怎么X`、同动词 `不V A,不V B` 即使写在台词里也不能跳过,确属人物当场的功能性表达才保留。然后对照 `references/banned-words.md` 全表:一级词(高频AI腔)命中即替换;二级词(低频/语境相关)高频出现时替换,偶发可参考 `references/anti-ai-writing.md` 定性裁定
87
- 12. **更新追踪**:最终 `chapter check` 后取最新 `state_revision`,按 workflow-daily 构造不含 `wordcount` 的逐章 JSON。长度在用户带内执行 `storyctl.py chapter commit`;用户接受当前自然长度则执行 `storyctl.py chapter accept-current-length`。两条命令都在提交前重新读取正文和目标、重新计数、重跑 blocking quality,并把简短字数记录与追踪事务一起原子提交。写入失败保留原事务重跑;校验失败重构事务。派生视图损坏按 tracking 文档用 revision 修复,禁止手改。本章首次引入复用角色/势力时,仍按 workflow-setup Phase 3 补建静态档案。
70
+ 12. **更新追踪**:最终 `chapter check` 后取最新 `state_revision`,按 workflow-daily 构造不含 `wordcount` 的逐章 JSON。长度在用户带内执行 `storyctl.py chapter commit`;用户接受当前自然长度则执行 `storyctl.py chapter accept-current-length`。两条命令都在提交前重新读取正文和目标、重新计数、重跑 blocking quality,并把简短字数记录与追踪事务一起原子提交。写入失败保留原事务重跑;校验失败重构事务。派生视图损坏按 tracking 文档用 revision 修复,禁止手改。本章首次引入复用角色/势力时,仍按 workflow-setup Phase 3 补建静态档案。**判为「收编」的申报项在这一次事务里一并登记**(映射见「Agent 调用:consistency-checker」的三档表):漏登记等于没写。有「提请作者确认」项时本章暂停提交、不得继续下一章,裁定后按下表处理;判为「修复」的按修复后的结果登记。
88
71
  13. **中途快照**(长篇写作安全网):每连续写完 3 章,在继续前执行以下快照操作:
89
72
  - 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288 字节;通过后删除本章逐章事务 JSON 与临时 segment,失败时保留事务 JSON 供原样重跑
90
73
  - 用 `ls -la 正文/` 确认最近 3 个章节文件已成功写入磁盘且大小正常(>100 bytes)
@@ -93,6 +76,10 @@
93
76
 
94
77
  > **日更模式**:此步骤自动跳过——workflow-daily Step 2 已按章更新上下文.md。
95
78
 
79
+ ## 检查分工
80
+
81
+ 步骤 7 写手负责编排、内容覆盖和格式自检;步骤 9–11 及本文件质量检查阶段由主会话统筹,语义去味交给一个执行者(已部署的 narrative-writer 审查者或主会话),完成原 Gate、三遍法与抽查项目。确定性收尾由主会话对最终文件运行;其后若修改正文或白名单,只重跑受影响检查和最终 chapter check,不重新安排一轮全篇语义去味。手动组装时也须把此分工传给写手。
82
+
96
83
  ## 写作技巧提醒
97
84
 
98
85
  | 场景 | 技巧 |
@@ -118,25 +105,37 @@
118
105
 
119
106
  检查三个维度:(1) **情绪交付**——每章是否交付了细纲中规划的目标情绪?(2) **契约风险**——按 `references/reader-contract-and-progression.md` 检查因果权 + 结算权、关键节点四问、期待所有权、期待债、终局储备(透支两问)与换书债;章级推进按权威文件的七类状态分档(快节奏保留可见事件/爽点下限),强弱相对本书题材与对标判断,标记 契约安全 / 需补强 / 契约破坏;契约破坏 先修正文或修后续纲。(3) **技术质量**——一致性、格式、禁用词。参考 [references/long-chapter-quality.md](long-chapter-quality.md) 中的通用检查和长篇专项清单。
120
107
 
121
- **新增独立剧情 blocking**:新饭局、承诺、选择、关系变化、支线或后续义务均阻断;闲话、微连接允许。命中不自动修、不重试、不提交,并提示偏纲。
108
+ **新增内容边界**:按 writer 三档执行。现场材料直接使用;既有框架内的新配角、设定或关系细节可写并申报,由下方处置表裁定。新主线事件、反转、金手指规则、伏笔结算、提前写后续剧情或改变细纲结果属于 blocking,停止提交并报告。不得把所有新增关系或具名配角一律判为偏纲。
122
109
 
123
110
  **正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
124
111
 
125
112
  **写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
126
113
 
127
- **确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook 不阻断台词就略过;`stock-reaction-tic` 必须按 `writing-craft.md`「反套话四问」逐处做删除测试,交付摘要写明候选数、删除数及每个保留项的叙事功能,不能只写“已检查”。
128
- 随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。narrative-writer agent 不运行这些脚本。
114
+ **确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook 不阻断台词就略过;`stock-reaction-tic` 的候选交下方 narrative-writer 质检 spawn 逐处做「反套话四问」删除测试并直接改——**写手不写验收短文**(验收由质检 spawn 的删除测试承担),质检报告列出候选数、删改数与保留理由即可。
115
+ 随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。主会话以最终落盘文件复扫验收,不以 agent 自检代替。
129
116
 
130
117
  **退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
131
118
  advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界面用语、弹幕刷屏、重复台词等有功能则保留。
132
119
 
133
120
  ### Agent 调用:consistency-checker
134
121
 
135
- 质量检查阶段,consistency-checker 已部署时,仅按当前运行时的 canonical agent 目录检查并 spawn,获取 S1-S4 报告。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致`。不可用则主线程参照 long-chapter-quality.md 直接检查。
122
+ 质量检查阶段,consistency-checker 已部署时,仅按当前运行时的 canonical agent 目录检查并 spawn,获取 S1-S4 报告。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致\n本章新增申报:{writer 交回的申报表原样粘贴,无则写 0};同时核对正文是否有未申报的跨章事实,尤其新增证词、证据、承诺与关系变化,逐处列出原文和细纲出处。对各新增项跑一遍你现有的实体/设定/时间线/规则边界/跨章因果/代价一致性扫描,冲突按 S1-S4 报出`。不可用则主线程参照 long-chapter-quality.md 直接检查。
123
+
124
+ **新增申报三档处置**(在本节做:正文已定稿、tracking 未提交)。checker 只给事实层证据,**分档判定归主会话**——「能不能收编」「会不会偏离后续」是创作判断,checker 明文不做也判不了。逐条按下表处置:
125
+
126
+ | 档 | 判据 | 出口 |
127
+ |---|---|---|
128
+ | **① 收编** | 无 S1/S2;**不需要在卷纲占编号或占行**——不占「本卷伏笔」的 F 编号、不占「本卷故事线」的 L 编号、不在「本卷反转」或「本卷打脸债」里新增行;且不碰卷纲「本卷主推线/战果」「终局底牌边界」,不与 `## 活跃伏笔` / `## 下一章承诺` 打架 | 进步骤 12 那次逐章事务:角色/势力按 workflow-setup Phase 3 补建静态档案;可复用设定增量补进 `设定/世界观/{主题}.md`;伏笔进 `foreshadow_changes`;关系/状态进 `character_changes` + 角色快照;跨章约束进 `constraints`;下章要接的进 `next_chapter_commitments` |
129
+ | **② 修复** | S1 / S2 | 退回 writer 就地改正文或删掉该新增物。最多修复一次;首次写作尚未提交时按修后事实构造首次事务,已有提交的章才用 `mode=revision` |
130
+ | **③ 提请作者确认** | 需要在卷纲新增 F/L 编号或反转/打脸债条目,碰主推线/终局边界、可能与既有承诺冲突,或需作者创作决策 | 在报告列新增物、正文落点、后续义务与冲突出处。本章保留为待审稿,暂停 tracking 提交及下一章;不将待裁定事实混入已提交状态 |
131
+
132
+ - 拿不准归第三类。作者接受后,按其授权更新卷纲/设定,再将完整正文事实写入本章首次事务;已有提交的旧章用 `mode=revision`。作者不接受则删改该新增内容、复检后提交。不要先提交缺项 delta、等下批补账。
133
+ - 申报与处置记录随本章报告留存;不自动改写锁定细纲。
134
+ - 申报为 `0` 仍做正文与细纲的正常核对;发现漏报的跨章事实,照本表处置。确实无新增则跳过申报处置。
136
135
 
137
136
  ### Agent 调用:narrative-writer(去AI味审查)
138
137
 
139
- 质量检查阶段,narrative-writer 已部署时可 spawn 文字质量与去AI味检查。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查范围:{本次写作的章节}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过`。不可用则主线程按 `references/anti-ai-writing.md` 与 `references/banned-words.md` 执行。
138
+ 质量检查阶段,narrative-writer 已部署时可 spawn 文字质量与去AI味检查。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查分工:你负责本次语义去味及原定自检;最终文件扫描由主会话执行,不在子代理内重复\n检查范围:{本次写作的章节}\n文风路径:{与写作 spawn 同一口径——传 `设定/文风.md` 全文路径,摘要仅作索引}\nstyle_resolution:{与写作一致的本次文风裁决,含全文路径}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过\n反套话删除测试:对 stock-reaction-tic 报出的每处候选按 writing-craft.md「反套话四问」做删除测试——删后不丢信息/选择/关系/物件变化/物理后果的直接删,保留的在报告里写明它新增了什么;报告列候选数/删改数/保留理由\n写法抽查(删除测试口径,只指认已有问题、不回头补内容):对爽点/高潮段与 detector 标记处抽查四项——状态台阶(强弱变化有没有台阶)、同类递减(并列同类项是否递减)、密处禁概括(慢镜头段有没有用概括句糊过去)、最重的一句最短;命中即改并在报告列出,不通读全文逐句追问`。不可用则主线程按 `references/anti-ai-writing.md` 与 `references/banned-words.md` 执行。
140
139
 
141
140
  检查后若正文修订改变了连续性事实,必须构造 `mode=revision` 的同章追踪事务并执行 `scripts/tracking_commit.py commit`:
142
141
  - 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;