@oh-story/dsh 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/README.md +7 -7
  2. package/lib/client.js +7 -3
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +212 -142
  5. package/lib/drama/skills/short-drama/SKILL.md +14 -2
  6. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
  8. package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
  9. package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
  10. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  11. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  12. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  13. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  14. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  15. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  16. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  17. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  18. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  19. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  20. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
  21. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  22. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  23. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  25. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  26. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  27. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  28. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  29. package/lib/drama/skills/short-drama-edit/SKILL.md +43 -20
  30. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  31. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  32. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  33. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  46. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +4 -2
  47. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +3 -1
  48. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +6 -2
  49. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +12 -6
  50. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +13 -8
  51. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1153 -121
  53. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +49 -9
  54. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  55. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  56. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  57. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  58. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  59. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  60. package/lib/drama/skills/short-drama-review/SKILL.md +2 -2
  61. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  62. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  63. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  64. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -0
  65. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  66. package/lib/drama/skills/short-drama-storyboard/SKILL.md +13 -5
  67. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  68. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +82 -14
  70. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +4 -2
  71. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +5 -3
  72. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +12 -0
  73. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  74. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  75. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +40 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +20 -14
  77. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +1 -1
  78. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +8 -7
  79. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  80. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  81. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  82. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  83. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  84. package/lib/drama/skills/short-drama-write/SKILL.md +8 -3
  85. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  86. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  87. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  88. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  89. package/lib/index.js +71 -21
  90. package/lib/index.js.map +3 -3
  91. package/lib/oh-story/manifest.json +545 -310
  92. package/lib/oh-story/roles/chapter-extractor.md +11 -11
  93. package/lib/oh-story/roles/character-designer.md +1 -2
  94. package/lib/oh-story/roles/consistency-checker.md +11 -9
  95. package/lib/oh-story/roles/narrative-writer.md +24 -25
  96. package/lib/oh-story/roles/story-architect.md +9 -61
  97. package/lib/oh-story/roles/story-explorer.md +20 -125
  98. package/lib/oh-story/roles/story-researcher.md +0 -1
  99. package/lib/oh-story/skills/story/SKILL.md +6 -6
  100. package/lib/oh-story/skills/story/VERSION +1 -1
  101. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  102. package/lib/oh-story/skills/story/references/author-memory.md +40 -118
  103. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +3 -3
  104. package/lib/oh-story/skills/story-deslop/SKILL.md +24 -25
  105. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  106. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +1 -1
  107. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  108. package/lib/oh-story/skills/story-deslop/references/author-memory.md +40 -118
  109. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  110. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +21 -4
  111. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  112. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +3 -3
  113. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  114. package/lib/oh-story/skills/story-import/SKILL.md +63 -579
  115. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  116. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  117. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  118. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  119. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  120. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  121. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  122. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  123. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +95 -91
  124. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  125. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  126. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +11 -9
  127. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  128. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +101 -14
  129. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +278 -23
  130. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +179 -23
  131. package/lib/oh-story/skills/story-long-analyze/SKILL.md +28 -50
  132. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +12 -5
  133. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +1 -1
  134. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  135. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  136. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +21 -55
  137. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  139. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  141. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  142. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +17 -0
  143. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +1 -1
  144. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  145. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +47 -8
  146. package/lib/oh-story/skills/story-long-scan/SKILL.md +41 -193
  147. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  148. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  149. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  150. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  151. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  152. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  153. package/lib/oh-story/skills/story-long-write/SKILL.md +32 -73
  154. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  155. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +1 -1
  156. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +18 -201
  157. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  158. package/lib/oh-story/skills/story-long-write/references/author-memory.md +40 -118
  159. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  160. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +6 -10
  161. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  162. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  163. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  164. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  165. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  166. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +3 -2
  167. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  168. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  169. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  170. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  171. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  172. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  173. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  174. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  175. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  176. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  177. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -6
  178. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
  179. package/lib/oh-story/skills/story-long-write/references/reference-index.md +4 -4
  180. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  181. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  182. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  183. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  184. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  185. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +11 -9
  186. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +33 -44
  187. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +18 -51
  188. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  189. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +53 -67
  190. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -251
  191. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  192. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +5 -3
  193. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +18 -56
  194. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +3 -3
  195. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  196. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +96 -16
  197. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  198. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +101 -14
  199. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  200. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +2 -1
  201. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +250 -50
  202. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +278 -23
  203. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +179 -23
  204. package/lib/oh-story/skills/story-review/SKILL.md +19 -273
  205. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  206. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +1 -1
  207. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  208. package/lib/oh-story/skills/story-review/references/author-memory.md +40 -118
  209. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  210. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  211. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  212. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -1
  213. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  214. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  215. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  216. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  217. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +11 -9
  218. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +3 -3
  219. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  220. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +278 -23
  221. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +179 -23
  222. package/lib/oh-story/skills/story-setup/SKILL.md +69 -458
  223. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  224. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +1 -1
  225. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  226. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  227. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  228. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +21 -4
  229. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  230. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  234. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  236. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  237. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  238. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  239. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  240. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  241. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  242. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  243. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  244. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  245. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  246. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +18 -56
  247. package/lib/oh-story/skills/story-setup/references/diagnostics.md +3 -3
  248. package/lib/oh-story/skills/story-short-analyze/SKILL.md +37 -110
  249. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  250. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  251. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  252. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  253. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  254. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  255. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/{material-decomposition.md → stage4-6-reversal-summary.md} +303 -374
  257. package/lib/oh-story/skills/story-short-scan/SKILL.md +30 -64
  258. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  259. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  260. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  261. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  262. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -34
  263. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  264. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  265. package/lib/oh-story/skills/story-short-write/references/author-memory.md +40 -118
  266. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  267. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  268. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  270. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  271. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -49
  272. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  273. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  274. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  276. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  277. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  278. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  279. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  280. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +19 -12
  281. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +22 -32
  282. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +84 -17
  283. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  284. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +3 -3
  285. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  286. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  287. package/lib/types/client/video-studio.d.ts.map +1 -1
  288. package/lib/types/native-hooks.d.ts +2 -2
  289. package/lib/types/native-hooks.d.ts.map +1 -1
  290. package/lib/types/role-tool.d.ts.map +1 -1
  291. package/lib/types/skill-provider.d.ts.map +1 -1
  292. package/lib/types/video-project.d.ts.map +1 -1
  293. package/lib/types/workspace-route.d.ts.map +1 -1
  294. package/lib/video-recap/CHANGELOG.md +60 -1
  295. package/lib/video-recap/README.en.md +348 -137
  296. package/lib/video-recap/README.md +340 -136
  297. package/lib/video-recap/manifest.json +406 -251
  298. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  299. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  300. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  301. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  302. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  303. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  304. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  305. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  306. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  307. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  308. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  309. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  310. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  311. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  312. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  313. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  314. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  315. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  316. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  317. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  318. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  319. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  320. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  321. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  322. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  323. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  324. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  325. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  326. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  327. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  328. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  329. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  330. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  331. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  332. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  333. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  334. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  335. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  336. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  337. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  338. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  339. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  340. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  341. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  342. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  343. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  344. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  345. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  346. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  347. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  348. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  349. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  350. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  351. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  352. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  353. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  354. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  355. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  356. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  357. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  358. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  359. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  360. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  361. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  362. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  363. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  364. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  365. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  366. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  367. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  368. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  369. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  370. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  371. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  372. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  373. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  374. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  375. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  376. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  377. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  378. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  379. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  380. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  381. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  382. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  383. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  384. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  385. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  386. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  387. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  388. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  389. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  390. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  391. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  392. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  393. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  394. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  395. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  396. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  397. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  398. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  399. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  400. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  401. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  402. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  403. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  404. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  405. package/lib/video-recap/skills/video-understanding/scripts/{agent_brief.py → briefing/builder.py} +38 -35
  406. package/lib/video-recap/skills/{video-script/scripts/brief_context.py → video-understanding/scripts/briefing/context.py} +4 -35
  407. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  408. package/lib/video-recap/skills/video-understanding/scripts/{brief_timeline.py → briefing/timeline.py} +5 -6
  409. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  410. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  411. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  412. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  413. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  414. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  415. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  416. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  417. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  418. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  419. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  420. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  421. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  422. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  423. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  424. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  425. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  426. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  427. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  428. package/package.json +1 -1
  429. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -538
  430. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -603
  431. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  432. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  433. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  435. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  436. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  437. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +0 -399
  438. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +0 -327
  439. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  440. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +0 -348
  441. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  442. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  443. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  444. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -1,8 +1,8 @@
1
1
  # 短篇写作通用底座
2
2
 
3
3
  > 短篇网文正文写作的公共父类。服务番茄 / 七猫 / 黑岩 / 盐选通俗短篇(1-2 万字),不是传统文学。
4
- > 题材风格包(`genre-styles/`)在此基础上做覆盖加味;本文件管所有题材共通的原生写法。
5
- > **总原则:情绪宁烈不温。短篇是情绪产品,靠直白共鸣留人,不靠克制留白。**
4
+ > 本文件是默认写法;题材包(`genre-styles/`)的腔调、开篇与情绪烈度覆盖这里(如悬疑冷静克制)。
5
+ > **默认总原则:情绪宁烈不温。短篇是情绪产品,靠直白共鸣留人,不靠克制留白。**
6
6
 
7
7
  ---
8
8
 
@@ -57,11 +57,12 @@
57
57
 
58
58
  ## 4. 小节结构:超短章节制,一节一炸点
59
59
 
60
- 按平台两套节奏:
60
+ 按平台三套节奏(定平台基调时一并定小节标记与引号,写进 设定.md「平台基调」):
61
61
 
62
62
  | 平台 | 小节标记 | 段落 | 篇幅倾向 |
63
63
  |------|----------|------|----------|
64
64
  | 黑岩 | `###` + 数字(`###1.`) | 段落短、多换行留白 | 小节偏短,长度服从炸点或行动链是否完整 |
65
+ | 知乎盐选 | `1.`(纯数字,对话用「」) | 短段与叙述交织 | 按认知翻转分节,不设单节硬线 |
65
66
  | 番茄 / 七猫 | `###第N章` 或 `###1.` | 短段为底色,允许多句回溯叙述段交织对话 | 可承载较完整场景,古言因礼制、空间与关系动作通常更展开;均不设单节硬线 |
66
67
 
67
68
  - 每个小节围绕一个主问题推进:背叛升级、态度反转、读者新获知信息、行动或后果至少发生一项真实变化;相关变化可由同一动作链同时完成,不强配狠话。
@@ -73,7 +74,7 @@
73
74
 
74
75
  ## 5. 钩子:极高密度,阶梯式背叛
75
76
 
76
- - 导语 50-300 字塞 3-5 个事件 / 反转;正文让爆料、态度、行动或后果持续变化。连续多个单元不变再查停滞,不为逐节达标塞障碍。
77
+ - 导语约 150-220 字(口径见 submission-craft.md)塞 3-5 个事件 / 反转;正文让爆料、态度、行动或后果持续变化。连续多个单元不变再查停滞,不为逐节达标塞障碍。
77
78
  - **阶梯式升级**:道德踩踏 → 经济 → 生命,越揭越大。一页里敢叠多重雷(绝症骗局 + 当众拥吻 + 孩子药引…),别单点反复抒情。
78
79
  - **爽点持续前推**:连续若干叙事单元应能看到反打、行动、亮牌或后果,不要长期停在同一情绪闭环;章尾可用反杀预告、局部兑现、关系变化或明确的下一步制造追读缺口,不要求每章同一种炸点。
79
80
  - **当众围观放大羞辱**:把背叛 / 打脸放在有外人见证的场合(宴席、股东会、群聊截图、请安),用众人的起哄 / 鄙夷 / 沉默放大屈辱与出气感;独角戏起不来「丢脸感」。
@@ -121,50 +122,13 @@
121
122
  | 视角 | 深度限知、不剧透 | 第一人称在场、主动剧透火葬场 |
122
123
  | 情绪 | 不设固定译法,按场景落到选择/台词/后果,必要时直写 | 情绪可直给;不强接身体反应 |
123
124
  | 章尾 | 禁总结 / 升华 / 预告 | 审判金句 / 火葬场预告是卖点 |
124
- | 结构 | 贯穿道具三次 / 数字阶梯 | 偷听 / 底牌 / 回旋镖 / 次数累积 |
125
+ | 结构 | 贯穿道具三次 / 数字阶梯 | 偷听 / 底牌 / 回旋镖 / 次数累积;贯穿道具可选,用就三次出现 |
125
126
  | 内心 | 独白 ≤ 2 段 | 成段宣泄独白 + 连环反问是主引擎 |
126
127
  | 排比 | 砍到一条 | 抒情堆苦难有功能则留 |
127
128
 
128
129
  ---
129
130
 
130
- ## 10. 场景写法:三维度揉进
131
-
132
- 发生、感知、反应是可选信息维度,不是逐段配额。关键子事件只把确有新信息的维度**织进同一段连续正文,不按维度分段**;上下文已清楚时可以留空:
133
-
134
- | 维度 | 内容 | 要点 |
135
- |------|------|------|
136
- | 发生 | 事情出现了 | 1-2 句,含一个具体细节 |
137
- | 感知 | 主角注意到什么 | 只取会改变理解、判断或气氛的声音、物件、空间或身体感受,不按感官凑数 |
138
- | 反应 | 角色接下来怎么办 | 选择、台词、策略、任务动作、明确感受或有后果的身体变化;不默认补手/眼/呼吸微动作 |
139
-
140
- 任务卡点也按需取三维:发生 = 事情办不下去;感知 = 主角看到、摸到或听到卡住的具体证据;反应 = 当场判断、选择或下一步反击。不要把流程单独写成说明段,也不要在场景末尾补动作尾巴解释意义。
141
-
142
- 反模式(绝对禁止):把三维度拆成三段依次写完,同一件事掰开写三遍。
143
-
144
- - 正确(揉进式,《闻笙有两意》原文):我以为陆池是真心跟我道歉,但摸到那碗凉掉的排骨汤时,我的心更冰冷了。上面还浮着凝固的油,根本喝不了。(摸汤、凝固的油、心冰冷揉在一段里)
145
- - 错误(把上面这段拆成三段堆叠):我摸到那碗排骨汤。/ 汤是凉的,浮着凝固的油。/ 我的心更冰冷了。(同一件事掰成三句,读者看三遍)
146
-
147
- **画面分段**:揉进不等于一段到底。按新动作 / 新物件 / 新信息 / 新对话 / 视线转移断段,不按维度断段。一段承载一个镜头拍点或一条连续推理 / 氛围 / 情绪链。
148
-
149
- ---
150
-
151
- ## 11. 疏密分配 + 动静起伏
152
-
153
- **疏密**:不要每个 beat 一样长一样细(平均用力是 AI 腔的根)。
154
-
155
- | beat 类型 | 笔墨 |
156
- |---|---|
157
- | 爽点 / 打脸 / 反转 / 情绪高潮 | 密(详写,感知动作对话铺满,慢镜头逐拍) |
158
- | 过场 / 赶路 / 信息交代 / 时间跳转 | 疏(1-2 句带过,不展开三维度) |
159
- | 铺垫 / 日常 / 关系升温 | 中(挑一两个有代入感的细节写实,其余略) |
160
-
161
- **动静有起伏**:整篇要有推进与停顿,但不要求动作冲击后固定接一段安静感知。停顿可以是信息悬置、对话空白、等待或环境压力,不用微动作填格。避免长时间全动造成疲劳,也避免长时间全静造成拖沓。
162
-
163
- **主语节奏**:段首 / 场景切换 / 多人同场用主角名建立主语;同一动作链内用代词 / 省略流动;关键转折再点名。避免连续多句都以同一主角名开头。
164
-
165
- ---
166
-
167
- ## 12. 开头事件密度
131
+ ## 10. 开头事件密度
168
132
 
169
133
  前 100 字 ≥ 3 个事件。删掉所有背景介绍(「她是 XX 的女孩」「在古代 XX 年间」),第 1 句就是事件 / 对话 / 信息炸弹,不是描述。
170
134
 
@@ -108,7 +108,7 @@
108
108
 
109
109
  ```bash
110
110
  for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done
111
- "$PYBIN" -c "from pathlib import Path; print(len(Path('正文.md').read_text(encoding='utf-8')))"
111
+ "$PYBIN" -c "from pathlib import Path; print(len(''.join(Path('正文.md').read_text(encoding='utf-8').split())))"
112
112
  ```
113
113
 
114
114
  各节分布(按小节标记切开,逐节报非空白字符数):
@@ -178,12 +178,12 @@ for name, body in out:
178
178
 
179
179
  | 平台 | 章节标记 | 对话格式 | 段落底色 | 特殊要求 |
180
180
  |------|----------|----------|----------|----------|
181
- | 知乎盐言 | `1.`(纯数字) | `「」` | 短段 + 叙述交织 | 导语需单独标注 |
181
+ | 知乎盐言 | `1.`(纯数字) | `「」` | 短段 + 叙述交织 | 导语即正文开头几段,不另标 |
182
182
  | 番茄 | `###第N章` | `""` | 短段为底色,允许叙述交织对话 | 首段需有吸引力 |
183
183
  | 红果 | `###1.` | `""` | 短段为底色 | 无 |
184
184
  | 黑岩 | `###1.` | `""` | 一句一段,多换行留白 | 节尾按职责承接,不另造悬钩 |
185
185
 
186
- 用户未指定平台时,默认短篇通用格式:`###1.` + `""` + 番茄系短段底色。
186
+ `设定.md`「平台基调」已记小节标记与引号时以它为准;都没定用短篇通用格式:`###1.` + `""` + 番茄系短段底色。
187
187
 
188
188
  ---
189
189
 
@@ -71,6 +71,7 @@
71
71
  ### 五维评分标准
72
72
 
73
73
  每个维度 0-100 分,根据评分结果选择精修策略。
74
+ 严重度:critical、high=必须修;medium=建议看;low=仅提示。
74
75
 
75
76
  ### 维度 1:核心一致度
76
77
  检查:关键冲突、关键行动、人物动机是否前后一致。
@@ -98,7 +99,7 @@
98
99
  | 问题 | 严重度 | 修复 |
99
100
  |------|--------|------|
100
101
  | 机械按字数切段或主语过密 | medium | 按戏剧单元重排段落,段首点名、段中代词/省略、关键转折再点名 |
101
- | 章节字数偏离目标 | **high** | 写作/大纲修复时先回到细纲补足计划内情节点,再展开;去AI味已有正文时不得新增剧情 |
102
+ | 整篇字数不在锁定范围 | **high** | 先核对批准情节点是否写完整,缺了才补回原计划内容,不为凑字新增冲突、对话或独立事件;超字删不推动剧情的内容;去AI味已有正文时不得新增剧情 |
102
103
  | 格式混乱(对话/描写不统一)| low | 统一格式 |
103
104
 
104
105
  ### 维度 4:可读性
@@ -279,7 +279,7 @@
279
279
  - [ ] 反转让读者想翻回开头重看
280
280
 
281
281
  ### 公平性
282
- - [ ] 读者有可能在反转前猜到(不是必须,但有可能)
282
+ - [ ] 细心读者回看能推出真相,但正读时猜不到
283
283
  - [ ] 没有对读者撒谎——只是没说出全部真相
284
284
  - [ ] 揭示方式自然,不靠角色大段独白解释
285
285
 
@@ -12,10 +12,10 @@
12
12
 
13
13
  ## 加载与传递
14
14
 
15
- 1. 从本次正文路径确定书目录(长篇为 `正文/` 的父目录,短篇为 `正文.md` 所在目录)。读该书 `设定/文风.md`;短篇同时读 `设定.md` 的文风约定。无文件就继续,不创建占位文件、不猜其他书。文风无最低字数限制,一句可执行的偏好也有效;空白、纯标题、待补充不算。
16
- 2. `_文风摘要.md` 只能辅助定位,不能独立替代全文。当前会话已读全文时无需反复读;摘要与全文不一致用全文,不让旧摘要压过作者的新修改。
17
- 3. 作者记忆 query 显式传当前书名、已知题材和流程以及需要的 kind,避免只取到 global。只用 active;同一维度窄范围覆盖宽范围,不拼成同时满足的清单。无法判定的同范围冲突才问作者,已能按优先级解决的不询问。
18
- 4. 在现有 prompt 填 `style_resolution`:本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界;只列与任务有关的冲突,无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer,并传文风全文路径。同一批次复用,当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤,不能靠上一次会话的记忆。
15
+ 1. 从本次正文路径确定书目录(长篇为 `正文/` 的父目录,短篇为 `正文.md` 所在目录)。读该书 `设定/文风.md`;短篇同时读 `设定.md` 的文风约定。无文件就继续,不建占位文件、不猜其他书。文风无最低字数限制,一句可执行的偏好也有效;空白、纯标题、待补充不算。
16
+ 2. `_文风摘要.md` 只辅助定位,不替代全文。当前会话已读全文时无需反复读;摘要与全文不一致用全文,不让旧摘要压过作者的新修改。
17
+ 3. 有作者记忆时 query,显式传当前书名、已知题材和流程以及需要的 kind,避免只取到 global;没有就跳过。只用 active;同一维度窄范围覆盖宽范围,不拼成同时满足的清单。无法判定的同范围冲突才问作者,已能按优先级解决的不询问。
18
+ 4. 在现有 prompt 填 `style_resolution`:本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界;只列与任务有关的冲突,无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer,并传文风全文路径。同批复用,当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤,不靠上次会话的记忆。
19
19
 
20
20
  ## 检测器如何服从裁决
21
21
 
@@ -13,7 +13,7 @@
13
13
  | 番茄短篇 | 流畅第一/第三人称,目标清晰、金手指直白 | 顺滑无毒点,反派挑衅一两节内转成主角升级/发财的垫脚石 | 开新地图 / 拿到新底牌 / 新人物带资源登场 | 圆满畅快,事业感情双收,坏人受罚 |
14
14
 
15
15
  - 小程序收稿量最大,打脸爽文是主力盘;同一个脑洞可以分别按知乎/小程序/番茄各跑一版,挑最顺的投。
16
- - 基调只调"声音和落点",不覆盖题材招式和本篇情绪目标。基调是投放渠道的声音,与 `short-format.md` 的排版模板是两个轴——小程序基调的稿,排版仍按 short-format 选一套 app 模板。
16
+ - 基调只调"声音和落点",不覆盖题材招式和本篇目标情绪。基调是投放渠道的声音,与 `short-format.md` 的排版模板是两个轴——小程序基调的稿,排版仍按 short-format 选一套 app 模板。
17
17
  - **调基调不松去 AI 底线**:强情绪靠具体动作和对白落地,别把话硬拆成三字碎句成片排列;前情背景靠场景带出,别整段插叙成"来龙去脉"说明书;对仗句式("上辈子…这辈子…")别高频复用。去 AI 味仍按本套件既有规则。
18
18
 
19
19
  ## 二、导语(投稿门面,单独打磨)
@@ -14,10 +14,10 @@
14
14
 
15
15
  ### 人设模板
16
16
 
17
- 填写以下模板,写入设定.md:
17
+ 填写以下模板,写进 设定.md「Phase 2 设计校验」块,替换“反派设计:不适用”那一行(一字段一行):
18
18
 
19
19
  ```
20
- 反派:
20
+ 反派设计:
21
21
  - 身份:{与主角的关系}
22
22
  - 动机:{自洽的作恶逻辑:贪婪/嫉妒/控制欲/报复/自保}
23
23
  - 作恶方式:{具体手段:言语打压/经济控制/社交孤立/人身伤害/法律构陷}
@@ -146,13 +146,8 @@
146
146
 
147
147
  ## 4. 反转有效性自检(Phase 2 使用)
148
148
 
149
- 写完 outline 后,用这个自检确认反转真的能反转读者:
150
-
151
- | 检查项 | 通过标准 | 不通过 = 需要 |
152
- |--------|---------|-------------|
153
- | 读者知道真相的时机 | >60% 合理;50-60% 灰区需审视反转力度;<50% 不算反转(三档口径详见 writing-workflow.md「反转信息差验证」) | 调整线索释放节奏,延后真相揭露 |
154
- | 是否有误导假线索 | ≥ 1 条读者会信的假线索 | 加入红鲱鱼或选择性叙述误导 |
155
- | 真相线索隐蔽度 | 回看能找到但正读时会忽略 | 线索藏在日常细节中,不用强调语气 |
156
- | 角色知道 vs 读者知道 | 反转前读者和角色至少有一方不知道真相 | 制造信息差:读者不知道 / 角色不知道 / 双方都不知道 |
149
+ 写完 outline 后按 writing-workflow.md「反转信息差验证」逐项过:揭示时机按功能定(误判先参与至少一次重要决定),百分比只记录、不当阈值。本文件只补两条:
150
+ - 反转前读者和角色至少有一方不知道真相;没有就制造信息差(读者不知道 / 角色不知道 / 双方都不知道)。
151
+ - 假线索用红鲱鱼或选择性叙述;真相线索藏在日常细节里,回看能找到、正读会忽略,不用强调语气。
157
152
 
158
153
  **失败模式**:「延迟揭露」不算反转。读者在第 2 节就知道真相,后面 10 节只等角色追上来 = 延迟揭露,读者会无聊。真正的反转发生在揭示那一刻,让读者和角色一起震惊。
@@ -2,7 +2,7 @@
2
2
 
3
3
  #### Agent 调用:story-architect
4
4
 
5
- 构思阶段,如果项目已部署 story-architect agent(查找顺序见 [SKILL.md](../SKILL.md)),可 spawn `Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{情绪目标+题材方向}")` 辅助框架设计。如 agent 不可用,由主线程直接执行。
5
+ 已部署 story-architect 时可 spawn `Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{目标情绪+题材方向}")` 辅助框架设计;不可用由主会话直接执行。
6
6
 
7
7
  帮用户确定短篇的核心框架:
8
8
 
@@ -13,7 +13,8 @@
13
13
  - 标题(暂定):{}
14
14
  - 目标字数:{} 字(短篇通常 8000-20000 字)
15
15
  - 目标平台:{知乎盐选 / 小程序 / 番茄短篇}(三选一)
16
- - 情绪目标:{读者读完的感受}
16
+ - 平台基调:{按 submission-craft.md 平台表记下视角、矛盾烈度、章末钩子、结局质感;小节标记与引号按 short-craft.md 第 4 节}
17
+ - 目标情绪:{读者读完的感受}
17
18
 
18
19
  ### 一句话梗概
19
20
  {主角 + 困境 + 反转 + 情绪落点}
@@ -31,9 +32,15 @@
31
32
  - 反转高潮不要骤降:反转前 1 节开始升温,反转节达到峰值,反转后 1 节维持峰值不骤降
32
33
 
33
34
  ### 人设速写
34
- - 主角:{一句话人设}
35
- - 关键角色:{一句话人设}
35
+ - {角色}:{一句话人设};声线:{};口头禅:{};禁忌:{}(每人一行)
36
36
  - 关系:{他们之间的关系}
37
+
38
+ ### 题材招式
39
+ - {招式名}:{本篇怎么用、落在哪几节}(2-3 条,与校验区核心招式一致)
40
+ - 冷门题材另记:{所用公式、情绪节拍、必选场景、规则要点}
41
+
42
+ ### 作者已定
43
+ - {作者在对话里定下的人称、偏好、红线,一条一行;否掉的方案也记一行,写明为什么不要}
37
44
  ```
38
45
 
39
46
  框架确定后,完成设计任务,然后在工作目录下创建文件。
@@ -42,10 +49,10 @@
42
49
 
43
50
  详细步骤和模板见 `references/writing-workflow.md`。构思时从目标情绪反推剧情,不是从灵感正向构建。按顺序完成:
44
51
 
45
- 1. 定平台基调 + 加载题材风格包 → 先读 `references/submission-craft.md` 定投稿平台(知乎/小程序/番茄),正文视角、矛盾烈度、章末落点随之切换;再读 `references/genre-styles/{题材}.md`(核心 10 题材)+ 通用底座 `references/short-craft.md`,从招式库选 2-3 个核心招式(如追妻的白月光触发链 / 信物翻转 / 火葬场预告),写入 设定.md「题材招式」区,全程照此招式与腔调写
52
+ 1. 定平台基调 + 加载题材风格包 → 先读 `references/submission-craft.md` 定投稿平台(知乎/小程序/番茄),正文视角、矛盾烈度、章末落点随之切换;再读 `references/genre-styles/{题材}.md`(核心 10 题材)+ 通用底座 `references/short-craft.md`,从招式库选 2-3 个核心招式(如追妻的白月光触发链 / 信物翻转 / 火葬场预告),写入 设定.md「题材招式」区,全程照此招式与腔调写;冷门题材把所用公式要点按模板一并写进该区,写正文与精修不再重读公式全文
46
53
  2. 设计反派(如有)→ 加载 `villain-and-reveal.md`
47
54
  3. 确定揭露方式 → 同上
48
- 4. 编写 小节大纲.md(格式见 writing-workflow.md):短篇只做轻量蓝图,每节包含结构段/五段功能、人物/关系或其他状态变化、因果/逻辑链、结尾承接/钩子,不套长篇完整章节蓝图。**标出付费点卡在哪一节末**(见 `submission-craft.md`「付费点」:用未完成动作、身份/证据变化或两难选择形成真实断点);用反推法先想透付费点那一节,再倒排前后。每节可选一个任务卡点,但必须服务情绪升级、证据推进、关系撕裂、反转铺垫或反击动作;没有就不强补
55
+ 4. 编写 小节大纲.md(12 列表格见 writing-workflow.md,只做轻量蓝图)。**标出付费点卡在哪一节末**(见 `submission-craft.md`「付费点」:用未完成动作、身份/证据变化或两难选择形成真实断点);用反推法先想透付费点那一节,再倒排前后。每节可选一个任务卡点,但必须服务情绪升级、证据推进、关系撕裂、反转铺垫或反击动作;没有就不强补
49
56
  5. 反转信息差验证(公式见 writing-workflow.md)
50
57
  6. 伏笔回查清单(标准见 writing-workflow.md)
51
58
 
@@ -61,7 +68,11 @@
61
68
  - 付费点:第 {N} 节末
62
69
  ```
63
70
 
64
- 有反派时用 `villain-and-reveal.md` 的身份、动机、作恶方式、致命弱点、报应五字段替换“不适用”。`short-reversal.md` 判断确属无反转题材时,写 `反转类型:无反转` 和 `反转位置:不适用({报应兑现/甜度递进等原因})`,不要硬编节号。`小节大纲.md` 必须使用 `writing-workflow.md` 规定的固定 12 列 Markdown 表格,并在对应节末明确标出“付费点”。
71
+ 有反派时按 `villain-and-reveal.md` 人设模板,在本块内把“不适用”换成身份、动机、作恶方式、致命弱点、报应五行(一字段一行)。`short-reversal.md` 判断确属无反转题材时,写 `反转类型:无反转` 和 `反转位置:不适用({报应兑现/甜度递进等原因})`,不要硬编节号。付费点写进 `小节大纲.md` 对应节的“结尾承接/钩子”单元格。
72
+
73
+ #### Agent 调用:character-designer
74
+
75
+ 设计任务完成后、跑完成门禁前,已部署 character-designer 时可 spawn `Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}")` 辅助角色设定和语言风格档案;不可用由主会话直接执行。结果压成每人一行(声线、口头禅、禁忌)写进 设定.md「人设速写」,写正文只读这里。
65
76
 
66
77
  #### Phase 2 完成门禁
67
78
 
@@ -71,8 +82,4 @@
71
82
  - exit 1:只把 `repair_scope` 中的检查 ID、证据、期望、reference 路径和修复范围交给本轮 writer;只改失败字段,再运行同一命令
72
83
  - 最多做 2 轮定向 repair;仍失败则停止,用中文告诉作者设计还缺什么,不得声称 Phase 2 已完成
73
84
  - exit 2、脚本缺失或不可执行:告诉作者自动检查没跑成,不得用泛化“自检”替代后继续
74
- - 向作者汇报构思只讲故事(梗概、反转、付费点在第几节)和待拍板的问题(附推荐默认),不提脚本、检查 ID、字段或表格列数
75
-
76
- #### Agent 调用:character-designer
77
-
78
- 设计任务完成后,如果项目已部署 character-designer agent(查找顺序见 [SKILL.md](../SKILL.md)),可 spawn `Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}")` 辅助角色设定和语言风格档案。如 agent 不可用,由主线程直接执行。
85
+ - 向作者汇报构思只讲故事(梗概、反转、付费点在第几节)和待拍板的问题(附推荐默认),不提脚本、检查 ID、字段或表格列数;作者拍板的改动先写回两份文件并重跑本门禁,汇报末尾按 SKILL.md「写前必读」建议新开对话写正文
@@ -2,42 +2,36 @@
2
2
 
3
3
  本文件中的 `scripts/` 与 `references/` 路径均相对本 skill 根目录。
4
4
 
5
- **项目文件结构**:文件结构见 Phase 2;设定.md/小节大纲.md 为 Phase 2 产出,正文.md 为 Phase 3 产出。
5
+ **格式规范(最高优先级)**:正文只存 `正文.md`,主会话与写手同一套格式:段间只允许一个换行符、不留空行,小节标记与引号全篇统一,按 `设定.md`「平台基调」,没写才查 `short-format.md` 平台覆盖表;子代理输出不一致时按此重排。
6
+
7
+ **构思收口先验**:写前先跑 `node {skill 根}/scripts/check-phase2-contract.js --json {短篇目录}`;不是 exit 0 就告诉作者构思还没收口、请回到构思补完,不自己重读构思方法论补写。
8
+
9
+ **本时刻只靠落盘文件接上构思**:`设定.md`(核心框架、作者已定、平台基调、题材招式、反转铺垫、贯穿道具、反派与揭露方式、对标摘要)与 `小节大纲.md` 为 Phase 2 产出,`正文.md` 为本阶段产出。反转、反派、揭露、付费点与平台基调以两份设计文件为准,不重读构思方法论(workflow-design、writing-workflow、short-reversal、submission-craft、villain-and-reveal、冷门题材公式全文);作者在对话里改过、设计文件还没写的,先写回 `设定.md` 再动笔。
6
10
 
7
11
  **导入项目续写基线**:`设定.md` 存在「本书续写基线」时先读取,作为已写内容的内部连续性与既有写法约束;它不是对标摘要,不参与主/副对标排序,也不复制到 `对标/`。
8
12
 
9
13
  > 术语说明:Phase 3 按「段」划分叙事结构(开头段/铺垫段/升级段/反转段/结尾段),每段包含若干「小节」(数字编号的 beat)。「场景」指写作时的具体画面。
10
14
 
15
+ **写前加载**:`short-format.md`(正文格式)、`short-craft.md`(通用底座)、[scene-craft.md](scene-craft.md)(场景写法)、`设定.md` 题材参考里的那一个 `genre-styles/{题材}.md`(冷门题材不读公式,按「题材招式」区记下的要点写,腔调按 `short-craft.md`);写羁绊铺设或余韵收尾时按需读 `emotional-methods.md` 对应一斧。`short-deslop.md` 到 Phase 4 去味时再读,写作中的 AI 腔由完成门槛的检测器兜底。
16
+
11
17
  **交付参数先锁定**:用户明确的字数范围优先,逐字取其最小值/最大值与节数;只给单一目标时用目标的 95%-105%;都未给时用 8000-20000 字和大纲节数。后文的默认字数不得覆盖用户范围。
12
18
 
13
19
  **写前参数验收(锁定后、写 `正文.md` 前必跑)**:`node {skill 根}/scripts/check-delivery-contract.js --json --check-contract --min-chars {MIN} --max-chars {MAX} --sections {N} [--min-section-chars {用户逐节下限}] {短篇目录}`。exit 0 只说明参数能同时满足,不算交付;exit 2 即冲突,停在写前,用中文告诉用户字数范围与节数哪里对不上,请其选择调整项,不代改用户约束。
14
20
 
15
- **写前准备**(每个场景写前执行 2 步,是核心方法的落地:确认情绪目标 → 召回技法模块):
16
- - **步骤 1:记忆+召回**:① 本场景目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 具体用在哪个段落?答不出 → 先回读参考再动笔。如有 `对标/` 或 `拆文库/` 结构化产出,按 [references/benchmark-recall.md](benchmark-recall.md) 的对标上下文加载规则检索与当前场景最相关的结构/情绪/反转/写作手法模块作为参考,并写入“拆文召回摘要”
17
- - **多对标书时**:参 `references/cross-book-recall.md`,副对标/参考对标按阶段预算进入"副对标召回摘要";正文只传摘要,不传副书文风或原文
21
+ **写前准备**(每个场景写前执行 2 步,是核心方法的落地:确认目标情绪 → 召回技法模块):
22
+ - **步骤 1:记忆+召回**:① 本场景目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 具体用在哪个段落?答不出 → 先回读本时刻已加载的参考再动笔。有对标时从 `设定.md`「对标摘要」召回 1-2 个与本场景相关的技法,要细看再查主对标 `对标/{书}/写作手法.md`(没有就用 `拆文库/{书}/`)的对应条目,写入“拆文召回摘要”
23
+ - **多对标书时**:副对标只用「对标摘要」里构思时已登记的条目(正文阶段不新增召回),作为“副对标召回摘要”;正文只传摘要,不传副书文风或原文
18
24
  - **步骤 2:指令确认**:用一句话概括本场景写作意图(情绪+技法+适配段落),并确认本场景是否有任务卡点、它卡出哪种情绪变化或新证据;没有就不强补。确认后开始写作
19
25
 
20
- **写作指令:按三维度揉进逐场景写作,不照搬大纲腔。**
26
+ **写作指令**:写法按 `short-craft.md`(情绪直写与上下文支撑第 2 节、在场叙述第 3 节)与 `scene-craft.md`(三维度揉进与画面分段、疏密与主语节奏),段落与标点按 `short-format.md`,不照搬大纲腔。情绪烈度按 `设定.md` 与题材包的腔调,没写时默认宁烈不温(冲突前置、爽点具体、台词带刺);任务卡点必须直接加重羞辱、误会、背叛、证据、反击或心死节点,删掉无损就压缩。
21
27
 
22
- - 每个场景让读者和主角一起经历;发生、感知、反应揉在同一段连续正文里,不按维度分三段。
23
- - 段落按戏剧单元/画面自然断开:新动作、新线索、新对话、视线切换另起;完整推理、氛围或情绪链可稍长。
24
- - 高潮/打脸/反转压短,沉淀/推理/收束可长一点;爽点 beat 写密,过场 beat 写疏,避免通篇同长度。
25
- - 主语节奏:段首或主语重置时可点名;同一动作链内优先代词/省略;关键转折再点名。
26
- - 标点跟语气走:质问用问号,爆发处少量感叹;犹豫、未尽、打断用动作停顿、短句或换行处理,正文不使用 `……` / `——` / `—` / `--`。
27
- - 短篇默认第一人称在场:受虐段可直白宣泄,反击段可冷静审判;只删中立无情绪的作者讲解,不删带主角偏色的审判/预告。
28
- - 情绪可以直写,按 `references/short-craft.md` 第 2 节检查上下文支撑,不逐句补动作或物件。
29
- - 任务卡点也可以承接情绪,但必须直接加重羞辱、误会、背叛、证据、反击或心死节点;删掉后情绪/证据/关系无损就压缩。
30
- - 情绪宁烈不温,冲突前置、爽点具体、台词带刺;心死/余韵等以克制为爽感的桥段按题材包收敛。
31
-
32
- #### Agent 调用:narrative-writer
28
+ #### 分批写与子代理
33
29
 
34
30
  正文写作阶段默认由主会话按 2-3 节/批分批写正文;主会话输出是短篇正文的标准形态,不要求单次 agent spawn 完成 8000+ 字全文。
35
31
 
36
- - 每批写完后更新“已写小节摘要”(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句)。
32
+ - 每批写完后更新短篇目录下 `.story/work/已写小节摘要.md`(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句),换对话靠它接上,交付后可删。
37
33
  - 下一批先读该摘要和 `正文.md` 尾部 300-500 字再续写。
38
- - 只有用户明确要求子代理、主会话上下文不足,或需要隔离试写时,才检查 narrative-writer agent(查找顺序见顶部)。
39
- - 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,只传项目目录、输出文件、情绪目标、题材风格包、小节大纲、角色、主/副对标召回摘要、本书文风全文路径与 style_resolution、作者偏好 query 中的文风/故事设计项、格式硬约束和写作硬约束,并传入检查分工:本批只做内容覆盖与格式自检,完整语义去味由 Phase 4 负责,最终文件扫描由主会话负责。
40
- - 不把本 skill 整段规则塞进 prompt;细节以已加载的 `short-format.md`、题材包和 `short-craft.md` 为准。
34
+ - 只有用户明确要求子代理、主会话上下文不足,或需要隔离试写时,才检查 narrative-writer agent(查找顺序见顶部),可用时按 [agent-calls.md](agent-calls.md)「写正文」派出。
41
35
  - 无论谁写,写入 `正文.md` 前都按同一格式规范重排,保证主会话与子代理输出一致。
42
36
 
43
37
  ⚠️ **硬约束只作用于整篇交付范围,不设统一逐节最低字数或行数**。
@@ -46,17 +40,13 @@
46
40
 
47
41
  **节数守恒**:正文节数必须等于小节大纲规划节数。不得合并多节为一节。如果写作中发现某节不需要独立存在,应回到大纲阶段调整,而非在写作时偷减。
48
42
 
49
- 每个小节按「场景信息揉进」写作(详见 short-craft.md 第 10 节):发生是主干,感知和反应只在提供新信息时加入;用到的维度揉进同一镜头。揉进不等于按维度分段——禁止"先写发生再补感知再补反应"的堆叠写法,也不要求三项齐全;同样不等于一段到底,按新动作、新物件、新信息或新对话断段。完整推理、氛围、手艺、等待或情绪链可以连续展开,不按固定字数切断。
50
-
51
- 按以下结构分段写:
43
+ 按以下结构分段写(占比仅参考,以小节大纲为准):
52
44
 
53
45
  #### 第一段:开头(前 300-500 字)
54
46
 
55
- **目标**:3 句话内抓住读者。**必须包含一个开篇钩子**(从 hooks-chapter.md 选择类型)。
56
-
57
- **先写导语**:正文开头前先按 `references/submission-craft.md`「导语」写一条 150-220 字导语——四维骨架(起因+核心冲突+人设底色+情绪反转)配黄金三角(具体物件+信息差+留白钩子),一句一段(黑岩/盐言导语形态;番茄导语按 short-format.md 短段叙织)——完整句各自独立成段,不是拆成三字碎句。它就是正文开头的头几段,写好顺势往下接、不重写,所以首句同样守下面的开头零环境和前 100 字事件密度≥3(首句是事件/动作/信息炸弹,不是背景或弧线概括),剧透钩子放导语后半。
47
+ **目标**:3 句话内抓住读者。**必须包含一个开篇钩子**(从下表或题材包「开篇范式」选类型)。
58
48
 
59
- **技法指令**:前 100 字事件密度 ≥ 3,不做背景铺垫,直接上事件链。
49
+ **先写导语**:正文开头先写一条 150-220 字导语(投稿门面,编辑第一眼看它)——四维骨架(起因+核心冲突+人设底色+情绪反转)配黄金三角(具体物件+信息差+留白钩子),一句一段(黑岩/盐言导语形态;番茄导语按 short-format.md 短段叙织)——完整句各自独立成段,不是拆成三字碎句。它就是正文开头的头几段,写好顺势往下接、不重写,所以首句同样守下面的开头零环境和前 100 字事件密度≥3(首句是事件/动作/信息炸弹,不是背景或弧线概括),剧透钩子放导语后半;不平铺背景或抒情,底牌不全亮(留给正文兑现),不只写惨不写后手。
60
50
 
61
51
  **开头零环境规则**(默认适用;悬疑、惊悚、灾难、强氛围题材可例外):
62
52
  - 前 3 句禁止出现无事件承载的环境描写(灯光、天气、气味、温度、装修)
@@ -83,17 +73,17 @@
83
73
 
84
74
  - 用物件/数字/习惯建立羁绊(详见 emotional-methods.md「羁绊铺设」)
85
75
  - 埋入至少 3 个反转线索,分散在不同小节
86
- - 在会改变读者预期、行动方向或关系判断的位置埋钩;连续多个小节只有提问没有局部兑现时再调整,不按固定节数填格(类型从 hooks-paragraph.md 选择)
76
+ - 在会改变读者预期、行动方向或关系判断的位置埋钩;连续多个小节只有提问没有局部兑现时再调整,不按固定节数填格(按小节大纲「结尾承接/钩子」列落地)
87
77
  - 小节用数字分割,每小节推进一个情节点
88
78
  - 情绪强度逐节递增,不允许连续 2 节无情绪变化
89
- - **贯穿道具第 1 次出现必须在此段完成**
90
- - **反派作恶按阶梯递增**(小恶→中恶,见 villain-and-reveal.md)
79
+ - **贯穿道具(设定.md 有才写)第 1 次出现必须在此段完成**
80
+ - **反派作恶按阶梯递增**(小恶→中恶,按 `设定.md` 反派设计)
91
81
 
92
82
  #### 第三段:升级(占全文 20-30%)
93
83
 
94
84
  - 冲突必须比上一段升级(强度/范围/代价至少一个维度上升)
95
85
  - 插入倒计时钩子或代价钩子制造紧迫感
96
- - 随风险和选择升级提高牵引强度;用新证据、代价、误判修正或局部反击推动,不按固定节数另塞钩子(按题材见 genre-writing-formulas.md)
86
+ - 随风险和选择升级提高牵引强度;用新证据、代价、误判修正或局部反击推动,不按固定节数另塞钩子(按题材包)
97
87
  - 埋入误导信息,让读者猜错反转方向
98
88
  - **数字/金额递增作为叙事工具**(具体数字替代模糊描述,见各 genre-styles 招式库「数字承重」)
99
89
  - **场景引擎有变化**:行动、对话、证据、任务、等待、空间压力与关系选择按因果需要切换;不为动静交替补无功能小动作
@@ -103,7 +93,7 @@
103
93
  - 反转在一节内完成揭示,不拖延
104
94
  - 揭示后确保前面铺垫的线索可被回溯(读者能找到「原来如此」的伏笔)
105
95
  - 反转节的情绪冲击强度必须 > 前面所有节的最高值
106
- - **用证物/证人/偷听/剥洋葱揭露真相**(4 种方式见 villain-and-reveal.md)
96
+ - **按 `设定.md` 选定的揭露方式揭露真相**(证物/证人/偷听/剥洋葱)
107
97
  - **贯穿道具第 2 次出现必须在此段完成**(意义被颠覆)
108
98
 
109
99
  #### 第五段:结尾(占全文 5-10%)
@@ -1,32 +1,99 @@
1
1
  # Phase 4:短篇精修打磨
2
2
 
3
- 本文件中的 `scripts/` 与 `references/` 路径均相对本 skill 根目录。
3
+ 本文件中的 `scripts/` 与 `references/` 路径均相对本 skill 根目录。精修必读本文件与 `short-format.md`(格式快速检查、字数口径);新对话里精修也先读它。
4
4
 
5
- Phase 3 写手负责内容覆盖与格式自检,不提前执行完整语义去味;该分工须随写作 prompt 传入。Phase 4 的 Gate 检查由一个执行者完成(下方 narrative-writer 或主会话),保留原检查清单与所选 Gate 的改写顺序;一致性检查职责不变。最终扫描及 delivery 验收由主会话对最终落盘文件执行,修改后只复核改动和重跑受影响检查,不另开整轮去味。
5
+ Phase 3 写手只做内容覆盖与格式自检(该分工随写作 prompt 传入)。Phase 4 去味由一个执行者(下方 narrative-writer 或主会话)按 `references/short-deslop.md` 自检清单完成;一致性检查职责不变。S1/S2 与 blocking 必须修,S3 与 advisory 建议看,S4 仅提示。最终扫描与交付验收由主会话对落盘文件执行,修改后只复核改动、重跑受影响检查,不另开整轮去味。
6
6
 
7
- 加载 `references/writing-workflow.md` 中的精修清单完成检查。
8
- 重点:开头钩子、情绪曲线、反转铺垫、每句话价值、格式规范、AI 腔。文件模式依次运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md`、`node scripts/check-outline-copy.js --outline 小节大纲.md 正文.md`、`node scripts/normalize-punctuation.js 正文.md`、`node scripts/check-degeneration.js --check 正文.md`。blocking 或确属细纲照搬先改正文再复扫;其他提示仅作读感复核,功能性写法可保留。
7
+ 按文末「精修清单」完成检查。文件模式依次运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md`、`node scripts/check-outline-copy.js --outline 小节大纲.md 正文.md`、`node scripts/normalize-punctuation.js 正文.md`、`node scripts/check-degeneration.js --check 正文.md`,blocking 先改正文再复扫。照搬检测报出的誓词、关键原话等功能性台词保留,登记进 `小节大纲.md` 末尾「复沓锚句」再复检,其余现场重写。
9
8
 
10
- 上述修改全部落盘后,运行 `node scripts/check-delivery-contract.js --json --min-chars {MIN} --max-chars {MAX} --sections {N} {短篇目录}`。exit 0 才可交付;exit 1 只按 `repair_scope` 最小修复并重跑受影响的质量检查与本命令,最多 2 轮;仍失败则停止,按下方交付说明告诉作者哪项没达标、差多少。exit 2、脚本缺失或不可执行时不得声称交付契约通过。本 verifier 只验用户字数、节数与排版形状,不替代正文质量判断。
9
+ 全部落盘后运行 `node scripts/check-delivery-contract.js --json --min-chars {MIN} --max-chars {MAX} --sections {N} {短篇目录}`。exit 0 才可交付;exit 1 只按 `repair_scope` 最小修复并重跑受影响的质量检查与本命令,最多 2 轮;仍失败则停止,按下方交付说明告诉作者哪项没达标、差多少。exit 2、脚本缺失或不可执行时不得声称交付契约通过。它只验字数、节数与排版。
11
10
 
12
11
  #### Agent 调用:narrative-writer(去AI味)+ consistency-checker
13
12
 
14
- 精修阶段,如果项目已部署对应 agent,可 spawn:
15
- - `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查分工:你负责本次语义去味及原定自检;最终文件扫描由主会话执行,不在子代理内重复\n检查范围:{正文文件}\nstyle_resolution:{与写作一致的本次文风裁决,含全文路径}\n作者偏好:{query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n必须检查:检查是否连续使用头皮发紧/眼皮一跳/心口一沉/胃里翻涌等精致戏剧反应,能写普通动作/普通感觉就写普通动作/普通感觉;已有手机/聊天记录/公告/账单/病历/证据截图等信息,保留为角色看到或处理的场内载体,不改成叙述者解释;任务卡点只在角色本来有要办的事且能加重情绪/证据/关系/反转时使用,不为自然感补流程")` — 执行去AI味(7 Gate)和格式合规检查
16
- - `Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{正文文件}\n检查类型:事实冲突+伏笔断线+角色属性不一致")` — 执行一致性检查
13
+ 已部署对应 agent 时可派出:narrative-writer 去味的 prompt 见 [agent-calls.md](agent-calls.md)「精修去味」;一致性检查派 `Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{正文文件}\n检查类型:事实冲突+伏笔断线+角色属性不一致")`。agent 不可用时主会话直接执行。
17
14
 
18
- 如 agent 不可用,由主线程直接执行。
19
-
20
- **正文洁净规则**:
21
- - 自检(字数统计、禁用词扫描、格式检查)是过程动作,结果直接在对话里说明,不落盘成文件
22
- - **绝对不能**把自检记录附加到正文文件末尾
23
- - 正文中不得出现任何 `<!-- 自检 -->` 或类似的检查标记注释
24
-
25
- 不通过 → 回退补足。
15
+ **正文洁净规则**:自检(字数、禁用词、格式)结果只在对话里说明,不落盘成文件,**绝对不能**附到正文末尾,正文不得出现 `<!-- 自检 -->` 等检查标记。
26
16
 
27
17
  **交付说明(给作者看)**:只用大白话,按三块写:
28
18
  1. 写了什么:标题、一句话核心钩子或反转、总字数、几节。
29
19
  2. 要作者拍板的事:每件写成一句问题并附推荐默认(如「结尾要不要再留个小反转?默认不留」);没有就省略。
30
20
  3. 下一步可选:精修某段、去 AI 味、换平台改写等。
31
21
 
32
- 自查结果只写一句(如「自查过字数、分节和常见 AI 腔,都过了」;没过就说哪项差多少)。不写脚本名、检查 ID、字段名、参数或大纲表格格式。
22
+ 自查结果只写一句(如「自查过字数、分节和常见 AI 腔,都过了」;没过就说哪项差多少)。不写脚本名、检查 ID、字段名、参数或大纲表格格式;助手降级、版本提示等执行细节只放最后一行「技术备注:」。
23
+
24
+ ## 精修清单与常见问题
25
+
26
+ ### 精修检查清单
27
+
28
+ ```
29
+ ## 精修清单
30
+
31
+ ### 开头
32
+ - [ ] 前 3 句话能抓住人?
33
+ - [ ] 没有无意义的背景介绍?
34
+ - [ ] 包含一个开篇钩子?
35
+
36
+ ### 情绪
37
+ - [ ] 情绪曲线是否有明确走向?
38
+ - [ ] 反转前的情绪铺垫够不够?
39
+ - [ ] 反转后的冲击够不够?
40
+
41
+ ### 反转
42
+ - [ ] 反转是否出乎意料?
43
+ - [ ] 反转是否合情合理(回看有铺垫)?
44
+ - [ ] 反转时机是否合适?
45
+
46
+ ### 节奏
47
+ - [ ] 有没有拖沓的部分?
48
+ - [ ] 每句话是否都有存在价值?
49
+ - [ ] 字数是否在目标范围内?
50
+
51
+ ### 格式
52
+ - [ ] 按 short-format.md 文末「写完每段快速检查」逐项过;另查有无连续超长大段
53
+
54
+ ### 钩子
55
+ - [ ] 钩子是否出现在读者预期、行动方向或关系判断发生变化的位置;有没有连续提问却不局部兑现?
56
+ - [ ] 章末是否有未完成动作、新信息、局部兑现、关系变化、余韵或明确下一步之一?
57
+
58
+ ### AI 腔
59
+ - [ ] 无禁止比喻:「命运的齿轮」「如潮水般」「仿佛春风」「心猛地一沉」「眼眶泛红」
60
+ - [ ] 重复的身体/情绪描写按功能取舍:无新增信息就删,不换部位或同义动作凑数
61
+ - [ ] 「像/好像/仿佛/如同」不成片堆叠;超过 10 处或检测器报比喻密度时逐处复核功能,有功能的留,不设硬上限、不机械全删
62
+ - [ ] 完整 AI 腔黑名单见 short-deslop.md
63
+
64
+ ### 技法
65
+ - [ ] 情绪落地:按 `short-craft.md` 第 2 节检查上下文支撑,保留准确直写,清理空泛与重复说明
66
+ - [ ] 信物(若用):意义翻转是否完整?(查设定.md追踪表,改了出现位置同步改表)
67
+ - [ ] 场景引擎:每节是否通过行动、证据、任务、对话、物件、等待或关系选择改变了至少一项状态?
68
+ - [ ] 开头密度:前 100 字事件 ≥ 3?
69
+
70
+ ### 结尾
71
+ - [ ] 结尾是否有余韵?
72
+ - [ ] 读者会不会想转发?
73
+ ```
74
+
75
+ ### 标点确定性收尾
76
+
77
+ 精修后对 `正文.md` 先运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md`。blocking 先改正文并复扫;advisory 只作读感提示,确属问题才改,功能性写法标 `[需复核]`。
78
+ 再运行 `node scripts/normalize-punctuation.js 正文.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。
79
+
80
+ ### 删减原则
81
+
82
+ 按 SKILL.md 执行规则 3 删掉不推动剧情、不铺垫反转、不推高情绪的对话、描写与心理活动;读者能猜到的缩短,重复表达的情绪合并。
83
+
84
+ ---
85
+
86
+ ## 常见问题与解决方案
87
+
88
+ | 问题 | 原因 | 解决方案 |
89
+ |------|------|----------|
90
+ | 开头不抓人 | 在做背景铺垫 | 直接从冲突开始 |
91
+ | 中间拖沓 | 信息密度太低 | 删减或合并场景 |
92
+ | 反转没力度 | 铺垫不够或太明显 | 增加误导线索 |
93
+ | 结尾无力 | 反转后还在补交代 | 篇幅按小节大纲;反转后只写兑现与余韵 |
94
+ | 全篇平淡 | 情绪曲线太平 | 加大情绪落差 |
95
+ | 感觉像流水账 | 缺乏情绪描写 | 加入人物内心感受 |
96
+
97
+ ### 冷门题材公式核对
98
+
99
+ 设定.md 的题材参考写的是 `genre-writing-formulas.md` 时,对照「题材招式」区记下的公式核对(不重读公式全文):情绪节拍不跳不乱,必选场景都出现,规则都落实,没混用不相关公式。牵引与开头按上方清单。