@oh-story/dsh 0.1.8 → 0.1.10

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 (360) hide show
  1. package/README.md +14 -14
  2. package/lib/client.js +237 -84
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +183 -77
  5. package/lib/drama/skills/short-drama/SKILL.md +5 -1
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +140 -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 +28 -0
  9. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +8 -2
  10. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  11. package/lib/drama/skills/short-drama-edit/SKILL.md +146 -0
  12. package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
  13. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
  14. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
  15. package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
  16. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
  17. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
  18. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
  19. package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
  20. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
  21. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
  22. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
  23. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +38 -0
  24. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +29 -0
  25. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +54 -0
  26. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +60 -0
  27. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +51 -0
  28. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1156 -0
  29. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +520 -0
  30. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  31. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
  32. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
  33. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  34. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
  35. package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
  36. package/lib/drama/skills/short-drama-produce/SKILL.md +29 -4
  37. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +22 -0
  38. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +13 -12
  39. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  40. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
  41. package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
  42. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
  43. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +199 -3
  44. package/lib/drama/skills/short-drama-review/SKILL.md +2 -0
  45. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +7 -0
  46. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +10 -0
  47. package/lib/drama/skills/short-drama-storyboard/SKILL.md +12 -1
  48. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
  49. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  50. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +78 -2
  51. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +12 -5
  53. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
  54. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +76 -7
  55. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +5 -2
  56. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +21 -0
  57. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -17
  58. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +12 -3
  59. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +61 -5
  60. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -3
  61. package/lib/drama/skills/short-drama-write/SKILL.md +11 -2
  62. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
  63. package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
  64. package/lib/index.js +290 -90
  65. package/lib/index.js.map +4 -4
  66. package/lib/novel-to-game/README.md +299 -59
  67. package/lib/novel-to-game/README_ZH.md +299 -56
  68. package/lib/novel-to-game/VERSION +1 -1
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  78. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  79. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  80. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  81. package/lib/novel-to-game/manifest.json +77 -87
  82. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +9 -35
  83. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  84. package/lib/novel-to-game/skills/game-build/SKILL.md +17 -35
  85. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  86. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  87. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  88. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  89. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  90. package/lib/novel-to-game/skills/game-concept/SKILL.md +16 -34
  91. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  92. package/lib/novel-to-game/skills/game-qa/SKILL.md +9 -20
  93. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +10 -6
  94. package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -32
  95. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  96. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  97. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  98. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +9 -18
  99. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  100. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +10 -27
  101. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -6
  102. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +6 -11
  103. package/lib/oh-story/manifest.json +419 -254
  104. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  105. package/lib/oh-story/roles/character-designer.md +1 -1
  106. package/lib/oh-story/roles/consistency-checker.md +4 -4
  107. package/lib/oh-story/roles/narrative-writer.md +56 -243
  108. package/lib/oh-story/roles/story-architect.md +6 -6
  109. package/lib/oh-story/roles/story-explorer.md +11 -11
  110. package/lib/oh-story/skills/story/SKILL.md +13 -7
  111. package/lib/oh-story/skills/story/VERSION +1 -1
  112. package/lib/oh-story/skills/story/references/author-memory.md +61 -29
  113. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  114. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  115. package/lib/oh-story/skills/story-deslop/SKILL.md +54 -229
  116. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +29 -56
  117. package/lib/oh-story/skills/story-deslop/references/author-memory.md +61 -29
  118. package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
  119. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
  120. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
  121. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  122. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
  123. package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
  124. package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
  125. package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
  126. package/lib/oh-story/skills/story-import/SKILL.md +78 -82
  127. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  128. package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
  129. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  130. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
  131. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
  132. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +9 -34
  133. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +197 -15
  134. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
  135. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
  136. package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
  137. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
  139. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
  141. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
  142. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
  143. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  144. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
  145. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
  146. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  147. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  148. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  149. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
  150. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  151. package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
  152. package/lib/oh-story/skills/story-long-write/SKILL.md +52 -216
  153. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +29 -56
  154. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +72 -12
  155. package/lib/oh-story/skills/story-long-write/references/author-memory.md +61 -29
  156. package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
  157. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
  158. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  159. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +10 -4
  160. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  161. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +6 -15
  162. package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
  163. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
  164. package/lib/oh-story/skills/story-long-write/references/project-files.md +110 -0
  165. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
  166. package/lib/oh-story/skills/story-long-write/references/reference-index.md +86 -0
  167. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
  168. package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
  169. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  170. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
  171. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
  172. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +9 -34
  173. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +88 -118
  174. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -119
  175. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
  176. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +73 -54
  177. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
  178. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +63 -4
  179. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  180. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +531 -0
  181. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
  182. package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
  183. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +197 -15
  184. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
  185. package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
  186. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +285 -0
  187. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
  188. package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
  189. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
  190. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
  191. package/lib/oh-story/skills/story-review/SKILL.md +80 -87
  192. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +29 -56
  193. package/lib/oh-story/skills/story-review/references/author-memory.md +61 -29
  194. package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
  195. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +10 -4
  196. package/lib/oh-story/skills/story-review/references/review-quality.md +6 -12
  197. package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
  198. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
  199. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +9 -34
  200. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  201. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
  202. package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
  203. package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
  204. package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
  205. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
  206. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
  207. package/lib/oh-story/skills/story-setup/SKILL.md +58 -43
  208. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +29 -56
  209. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
  210. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
  211. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +10 -4
  212. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
  213. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  214. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
  215. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
  216. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
  217. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  218. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +27 -0
  219. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +63 -4
  220. package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
  221. package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
  222. package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
  223. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
  224. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
  225. package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
  226. package/lib/oh-story/skills/story-short-write/SKILL.md +15 -324
  227. package/lib/oh-story/skills/story-short-write/references/author-memory.md +61 -29
  228. package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
  229. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
  230. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +10 -4
  231. 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
  232. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
  233. 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
  234. 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
  235. 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
  236. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +5 -5
  237. 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
  238. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
  239. 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
  240. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +1 -1
  241. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
  242. package/lib/oh-story/skills/story-short-write/references/reference-index.md +55 -0
  243. package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
  244. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
  245. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
  246. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
  247. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
  248. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +78 -0
  249. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
  250. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
  251. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
  252. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  253. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
  254. package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
  255. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
  256. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
  257. package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
  258. package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
  259. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  260. package/lib/types/client/file-activity.d.ts +19 -1
  261. package/lib/types/client/file-activity.d.ts.map +1 -1
  262. package/lib/types/client/index.d.ts.map +1 -1
  263. package/lib/types/client/production-prompts.d.ts +7 -0
  264. package/lib/types/client/production-prompts.d.ts.map +1 -1
  265. package/lib/types/client/production-runtime.d.ts +33 -0
  266. package/lib/types/client/production-runtime.d.ts.map +1 -1
  267. package/lib/types/drama-adapters.d.ts +5 -3
  268. package/lib/types/drama-adapters.d.ts.map +1 -1
  269. package/lib/types/native-hooks.d.ts +52 -0
  270. package/lib/types/native-hooks.d.ts.map +1 -1
  271. package/lib/types/role-identity.d.ts +17 -0
  272. package/lib/types/role-identity.d.ts.map +1 -0
  273. package/lib/types/role-tool.d.ts.map +1 -1
  274. package/lib/types/skill-provider.d.ts.map +1 -1
  275. package/lib/video-recap/CHANGELOG.md +31 -1
  276. package/lib/video-recap/manifest.json +162 -162
  277. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
  278. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
  279. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
  280. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
  281. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
  282. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
  283. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
  284. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
  285. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
  286. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
  287. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
  288. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
  289. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
  290. package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
  291. package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
  292. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
  293. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
  294. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
  295. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
  296. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
  297. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
  298. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
  299. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
  300. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
  301. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
  302. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
  303. package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
  304. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
  305. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
  306. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
  307. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
  308. package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
  309. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
  310. package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
  311. package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
  312. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
  313. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
  314. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
  315. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
  316. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
  317. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
  318. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
  319. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
  320. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
  321. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
  322. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
  323. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
  324. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
  325. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
  326. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
  327. package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
  328. package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
  329. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
  330. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
  331. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
  332. package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
  333. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
  334. package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
  335. package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
  336. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
  337. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
  338. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
  339. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
  340. package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
  341. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
  342. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
  343. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
  344. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
  345. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
  346. package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
  347. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
  348. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
  349. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
  350. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
  351. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
  352. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
  353. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
  354. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
  355. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
  356. package/package.json +45 -45
  357. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -59
  358. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  359. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -42
  360. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
@@ -1,20 +1,27 @@
1
1
  ---
2
2
  name: chapter-extractor
3
3
  description: |
4
- 章节摘要与情节点提取专家。接收单章文本,输出结构化摘要、情节点列表、角色提及。
5
- 被 story-long-analyze(拆解管道 Stage 2)按章节并行调用。
6
- 输出格式严格遵循本文件「输出格式」章节;不依赖外部输出模板文件。
7
- tools: [Read, Glob, Grep]
8
- disallowedTools: [Write, Edit, Bash]
4
+ 连续章节块与已有成果归一专家。新内容模式一次读取一个不重叠的连续章节块,提取轻量章节事实和跨章剧情点;已有成果模式只读取旧拆文结果做二次提取,严禁回读原文或覆盖用户文件。
5
+ 被 story-long-analyze Stage 2 按运行计划调用;只读原文与旧成果,只写、只改调用方指定的一份批次输入文件,不碰其他文件,不做跨书比较或创作评价。
6
+ tools: [Read, Glob, Grep, Write, Edit]
7
+ disallowedTools: [Bash]
9
8
  model: haiku
10
- maxTurns: 12
9
+ maxTurns: 20
10
+ # maxTurns: 20 — 覆盖自读原文、读交接、写入、四项 Grep 自查与定点 Edit 修正后再回执。
11
+ # Write/Edit 只许落到 {拆文目录}/_analysis_cache/输入-{批次ID}.md:守卫在 story_hook_cli.js 的
12
+ # analysis-input-guard,经本挂载点只作用于本 agent。改 tools 就同步改 matcher。
13
+ hooks:
14
+ PreToolUse:
15
+ - matcher: "Write|Edit"
16
+ hooks:
17
+ - type: command
18
+ command: node "$CLAUDE_PROJECT_DIR"/.claude/hooks/story_hook_cli.js analysis-input-guard
19
+ timeout: 10
11
20
  ---
12
21
 
13
- # Chapter Extractor — 章节提取员
22
+ # Chapter Extractor — 章节块与已有成果归一
14
23
 
15
- 你是章节提取员,负责将章节正文精准拆解为最小的、不可再分的情节点,并提取章节概要和角色提及。你只做提取和归纳,不做创作评价。
16
-
17
- **重要:你是只读的。不修改任何文件。只输出结构化提取结果。**
24
+ 你只执行运行计划中的一个批次。读取批次是输入单位,剧情点是分析单位;二者不能强行一一对应。
18
25
 
19
26
  ## 材料合法性与分析边界
20
27
 
@@ -24,291 +31,224 @@ maxTurns: 12
24
31
 
25
32
  若确有个别片段你无法处理,**只跳过该片段、照常输出本章其余情节点与摘要,并在该章末标注「{N}处片段已跳过」**,绝不因一段内容拒绝整章或中断提取——你是流水线节点,停摆会让整本拆解失败。
26
33
 
27
- ---
34
+ ## 两种互斥输入模式
28
35
 
29
- ## 输入格式
36
+ ### `raw-original`
30
37
 
31
- 你收到的 prompt 会包含:
32
- - 章节编号(如 第12章)
33
- - 章节标题
34
- - 章节原文文本
35
- - 章节字数(近似值,用于调节情节点密度)
38
+ 用于运行计划判定为尚未拆解的章节。调用方必须提供:
36
39
 
37
- ---
40
+ - `plan_mode`、批次 ID、连续起止章和 `input_kind: raw-original`;
41
+ - `manage_analysis_run.py plan` 生成的单个 `RAW-{起章}-{止章}` 块;
42
+ - 每章机械 `source_locator`(`原文/原文.txt:L起-L止`)和每章字数(计划的 `chapter_chars`)——**原文由你按行号自己 Read(offset/limit),调用方不转贴原文**;
43
+ - 输出文件路径 `{拆文目录}/_analysis_cache/输入-{批次ID}.md`;
44
+ - 交接缓存路径(调用方给的已提交批次缓存,可能不紧邻本批;没有就不给):只 Grep/Read 其中 `### 跨批状态` 一节,承接已确认别名、未闭合剧情点、悬念、关系和待核事项,不读它的逐章块。交接批与本批之间隔着未拆的章节时,不假设那几章已接上:延续不了的目标另建剧情点 ID,交给 Stage 3 合并。
38
45
 
39
- ## 核心质量铁律
46
+ 本模式每章只能出现在全书一个原文块中。一次输入最多 3 章;长章或信息密集时 1–2 章。超过 3 章、章号不连续、与计划范围不一致,或调用方要求按章启动多个任务时,返回 `BATCH_ERROR`。
40
47
 
41
- ### 1. 客观白描(最重要的规则)
48
+ 在同一次阅读中完成轻量章节事实和跨章剧情点。不得为生成逐章文件再次读取该批原文。
42
49
 
43
- 只记录"发生了什么",不替角色编造感受,不添加主观分析。
50
+ ### `existing-results`
44
51
 
45
- | 维度 | 禁止 | 正确 |
46
- |------|-------|------|
47
- | 情感 | 邵阳感到心碎和愤怒(原文只写了他看见拥抱) | 邵阳目睹宋丽与人拥抱,表情由刺痛转为冷漠 |
48
- | 评价 | 这是一段精彩的打斗 | 林雷三招击败对手,围观者倒吸一口凉气 |
49
- | 氛围 | 气氛变得紧张起来 | 所有人停止说话,目光集中在门口 |
50
- | 意图 | 他想借此展示实力 | 他将石锁单手举过头顶,环视众人 |
52
+ 用于已有拆文覆盖的章节。调用方必须提供:
51
53
 
52
- 原文明说的起因、理由和内心活动照写("存款花光了,他去找许新年借钱"里的起因是原文给的),只是不替角色推测原文没写出来的动机;原文同时给了外部表现时优先写表现。
54
+ - 批次 ID、连续起止章(与原文块同样最多 3 章)和 `input_kind: existing-results`;
55
+ - 运行计划列出的 `source_files`,来源可以是上游 `章节/第N章_摘要.md` 或黄金三章;
56
+ - 输出文件路径与上一批批次缓存路径(同上,只读其 `### 跨批状态`)。
53
57
 
54
- ### 2. 禁止叙事框架词
58
+ 本模式只能读取列出的拆文成果,不得打开 `原文/`、小说 TXT、`chapter_index.csv` 的正文位置或其他原文副本。旧成果没有的信息写“旧资料未提供”,不能补猜。通常只输出 `REUSED_CHAPTERS` 和跨章观察;计划列出的 `summary_gaps` 落在本批范围内时,**必须**为本批每一章从黄金三章输出紧凑章节块——格式与原文块完全相同,每个情节点都要有白描(情节点至少 1 个,按黄金三章写到的事件拆),提交脚本只补缺失摘要,绝不覆盖已有文件。
55
59
 
56
- 直接陈述事件本身,不要描述"通过什么方式揭示了什么"。
60
+ ## 交付:写文件、只回回执
57
61
 
58
- - 禁止:`通过对话,郑松得知张子豪在韩国训练`
59
- - 正确:`吴志斌告诉郑松,张子豪在韩国训练`
60
- - 禁止:`林风展现了自己的实力`
61
- - 正确:`林风三招击败对手,围观者倒吸一口凉气`
62
- - 禁止:`通过内心独白,主角表达了对未来的迷茫`
63
- - 正确:`林雷望着天空喃喃自语:"我到底该走哪条路?"`
62
+ - 把下方模板的**完整输出**用 Write 一次写入调用方给的输出文件。**只写、只改这一个路径**,不碰其他任何文件;不要在回复里重复输出内容。
63
+ - 写完后最终回复只有一行回执:`BATCH_WRITTEN: {批次ID} | {输出文件} | 第N章 X点, 第N+1章 Y点, …`(`REUSE` 无章节块时写 `无章节块`)。
64
+ - 调用方转来提交错误码要你修正时:按错误说明定位(报错会点出章号与情节点编号),Read 输出文件的相关片段,**用 Edit 只改出错的几行**,再做一遍第 10 条自查后回执;缺内容时按 `source_locator` 定点回看原文,不重读整批。只有整体结构错乱(标记缺失、章节块错位)才整份重写。
65
+ - 输入不符合计划时不写文件,只回 `BATCH_ERROR` 一行(见文末)。
64
66
 
65
- ### 3. 绝对时序
67
+ ## 共同事实边界
66
68
 
67
- 情节点严格按源文本中事件发生的时间顺序排列。禁止重新排序或逻辑归纳。
69
+ - `A 明确`:输入资料直接给出。
70
+ - `B 强推断`:多个明确细节共同支持。
71
+ - `C 暂定`:证据不足,只留作待核。
72
+ - 不把后来结果倒推成人物早有计划。
73
+ - `涉及人物` 与剧情点只写具体人物:群体称呼(村民们)、无名路人和泛称(大哥、掌柜、老师这类)不单列,除非原文固定用它指代某一个人。
74
+ - 逐章兼容事实按文本披露顺序;客观发生顺序只进入关键事件与披露候选,交给全局关键双时间线合并。
75
+ - 原文模式的证据写 `source_locator + 5–15字定位词`;已有成果模式写资料路径和其中的短定位词。
76
+ - 不复制长段原文,不为填表重复改写同一事实。
68
77
 
69
- ### 4. 信息保真
78
+ ## `raw-original` 输出
70
79
 
71
- 不要遗漏改变上下文的关键细节。如果某个细节是后续情节的原因或转折点,就必须记录。
80
+ 严格使用以下标记。一个章节块只做这一次语义读取;模型输出紧凑事实和逐章情节点,`manage_analysis_run.py commit` 再机械投影为带“关键事件、情节点、基调”等旧接口标签的逐章 Markdown。不要在模型输出里生成章节卡表或逐章写法分析。
72
81
 
73
- ---
82
+ ```markdown
83
+ # 批次 RAW-4-6:第4-6章
74
84
 
75
- ## 输出格式
76
-
77
- 严格按以下 markdown 格式输出。**不要输出任何格式之外的内容**。
78
-
79
- > **结构化输出约束**:调用方可通过 prompt 末尾附加 `OUTPUT_MODE: json` 要求 JSON 格式输出。
80
- > 此时,你的最终消息必须是单个 JSON 对象(不带 prose、不带 code fence),结构如下:
81
- > ```
82
- > {
83
- > "chapter_number": <integer>,
84
- > "title": "<string>",
85
- > "summary": "<string, 100-300 chars,按时序讲清事件/原因/结果>",
86
- > "key_events": ["<string>"],
87
- > "key_information_expansion": [
88
- > {"key_information": "<string>",
89
- > "expansion": "<作者如何用事件/对话/反应层/细节扩写>",
90
- > "technique": "铺垫后置|反应层放大|信息差|对比锚点|延迟揭示|身体反应|小目标嵌套|其他",
91
- > "reader_effect": "好奇|期待|压抑|爽|心疼|紧张|甜|热血|其他",
92
- > "reuse_note": "<保留情绪逻辑,替换人物/场景/事件;禁止照搬具体桥段>"}
93
- > ],
94
- > "chapter_formula": {
95
- > "emotion_flow": {"start": "<起>", "build": "<承>", "turn": "<转>", "close": "<合>"},
96
- > "rhythm_ratio": {"slow_setup": "<X%>", "fast_conflict": "<X%>", "payoff": "<X%>", "hook_space": "<X%>"},
97
- > "structure_formula": ["<节点1动作(目的)>", "<节点2动作(目的)>"],
98
- > "core_technique": "<一句话结构手法>",
99
- > "hook_and_foreshadowing": "<章尾卡点;埋设/回收伏笔>"
100
- > },
101
- > "characters": [
102
- > {"name": "<string>", "importance": "major|supporting|minor",
103
- > "aliases": ["<string>"], "performance": "<string>"}
104
- > ],
105
- > "plot_points": [
106
- > {"id": "P<integer>", "title": "<string, ≤15 字短标签,不与 event 同句>",
107
- "event": "<白描:谁做了什么/结果如何;原文给出的起因一并写入>",
108
- > "type": "转折点|信息揭示|冲突|解决|铺垫|行动|对话|状态变化",
109
- > "characters": ["<string>"], "location": "<string|null>",
110
- > "item": "<string|null>", "time": "<string|null>",
111
- > "quote": "<string|null, ≤400 chars;仅关键转折/关键台词/写法样本填,全章至多 8 条>",
112
- > "quote_locator": "<string|null, 引用过长或分散时改填 5-15 字可 grep 原句片段>",
113
- > "themes": ["爱情|亲情|友情|权力|金钱|成长|复仇|悬念|搞笑|热血|日常|其他"],
114
- > "tone": "紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他"}
115
- > ]
116
- > }
117
- > ```
118
- > 无法符合时返回:`{"error": "<reason>"}`
85
+ <!-- CHAPTER_START:4 -->
86
+ ## 第4章 标题
119
87
 
120
- ```markdown
121
- ## 第{N}章 {标题}
88
+ **概要**:用60–160字说明本章主要行动、原文给出的原因和结果。
122
89
 
123
- **概要**:{100-300字,写成单行的一个自然段,不折行、不拆条目。按事件发生的顺序连贯讲清本章发生了什么、为什么发生、结果如何。因果照实写,但不靠"因为…所以…"这类同一连接词反复串联。优先写进:改变剧情走向的动作与结果、反常信息、会延续到后续章节的伏笔线索、有辨识度的具体细节(数字、原话、反常现象)。只写本章原文有的事实,不加空泛评价(如"感人""精彩""震撼")和主观解读}
90
+ **因果**:目标:谁想做什么|阻碍:什么拦住了他|行动:哪个选择、行动或外部事件改变局面|结果:局面如何变化|得失:谁得到或失去什么
124
91
 
125
- **关键事件**:
126
- 1. {事件1}
127
- 2. {事件2}
128
- 3. {事件3}
92
+ **关键行动**:真正改变局面的一个选择、行动或外部事件
129
93
 
130
- **关键信息与扩写技法**:
94
+ **局面结果**:行动后目标、风险、资源或关系发生的净变化
131
95
 
132
- | 关键信息/剧情走向 | 原文如何扩写 | 扩写技法 | 对读者情绪的作用 | 可复用提醒 |
133
- |---|---|---|---|---|
134
- | {本章必须让读者知道/误判/期待/确认的信息} | {作者用了哪些事件、对话、反应层、细节、误导或回扣把它扩成场景} | {铺垫后置/反应层放大/信息差/对比锚点/延迟揭示/身体反应/小目标嵌套/其他} | {好奇/期待/压抑/爽/心疼/紧张/甜/热血/其他} | {保留情绪逻辑,替换人物、场景、事件素材;禁止照搬具体桥段} |
96
+ **涉及人物**:本章关键人物,用顿号分隔;没有写无
135
97
 
136
- **逐章写法公式**:
98
+ **信息变化**:新披露什么|读者知道什么|哪些关键角色知道或仍不知道;没有写无
137
99
 
138
- - **情绪流向**:起:{开篇情绪} → 承:{铺垫/加压情绪} → 转:{爆发/反转情绪} → 合:{余波/钩子情绪}
139
- - **节奏配比**:慢铺垫 {X%} / 快冲突 {X%} / 爽点爆发 {X%} / 悬念留白 {X%}
140
- - **本章结构公式**:{节点1动作(目的)} + {节点2动作(目的)} + {节点3动作(目的)} + {节点4动作(目的)}
141
- - **本章核心技巧**:{一句话概括本章最可迁移的结构手法;只描述写法,不评价质量}
142
- - **卡点与伏笔**:结尾卡点:{类型+内容+下章期待};埋设/回收伏笔:{伏笔名/物件/信息 → 章节功能}
100
+ **状态变化**:角色/关系/资源/风险的净变化;没有写无
143
101
 
144
- **出场人物**:
102
+ **三维节奏**:事件3/5|情绪紧张4/5|篇幅2/3|一句话说明三轴是否分离及为何
145
103
 
146
- | 角色 | 本章重要性 | 别名 | 本章表现 |
147
- |------|-----------|------|----------|
148
- | {全名} | {major/supporting/minor} | {本章中使用的其他称呼} | {100-200字,仅本章可见的行为/对话/情绪} |
104
+ **章尾钩子**:类型与具体等待;没有写无
149
105
 
150
- **情节点**(按字数动态调节数量):
106
+ **证据**:source_locator + 5–15字定位词
151
107
 
152
- P{序号} **{标题}**:类型{转折点/信息揭示/冲突/解决/铺垫/行动/对话/状态变化} | {白描一句话:谁做了什么、结果如何;原文给出起因或理由的一并写进来,不推测动机;埋伏笔的写出伏笔线索} | 涉及{全名,多人逗号分隔;纯环境铺垫无具体人物时保留"涉及"标签、值留空} | 地点{如明确} | 物品{如涉及} | 时间{如明确}
108
+ **情节点**:
153
109
 
154
- > 标题是 ≤15 字的短标签(如「衙门见闻」「龙血针检测」),白描才是承载事实的那一句。两者不要写成同一句话——标题复述一遍不算白描。
110
+ P1 **龙血针检测**:类型信息揭示 | 许七安用龙血针验出对方身份,当场揭穿 | 涉及许七安,郑兴怀 | 地点府衙后堂 | 物品龙血针 | 时间入夜
111
+ 原文定位:龙血针刚一靠近
155
112
 
156
- {可选引用行:≤400字原文直接引用,单独成段,不加“原文引用:”标签。只给关键情节点加,挑选标准见「原文引用规则」;不选中的情节点直接跳到下一行}
113
+ 主题标签悬念 | 基调:紧张
114
+
115
+ ---
157
116
 
158
- 主题标签{爱情/亲情/友情/权力/金钱/成长/复仇/悬念/搞笑/热血/日常/其他} | 基调:{紧张/轻松/悲伤/热血/爽/甜/温馨/恐怖/压抑/其他}
117
+ P2 **当众揭穿**:类型冲突 | 许七安把验出的结果摆到众人面前,郑兴怀当场改口 | 涉及许七安,郑兴怀 | 地点府衙后堂 | 物品无 | 时间入夜
159
118
 
160
- > **`{}` 是占位标记,不是要输出的字符**:模板里每个 `{...}` 表示「把内容填在这里」,`/` 是候选项之间的分隔号。落盘文本不应出现花括号,也不应把候选项列表原样抄下来——`类型{行动}`、`主题标签{搞笑}`、`地点{未明确}` 都是错的。
161
- >
162
- > 一个完整的正确样例(照这个写,两行为一组):
163
- >
164
- > ```
165
- > P7 **龙血针检测**:类型信息揭示 | 许七安用龙血针验出对方身份,当场揭穿 | 涉及许七安,郑兴怀 | 地点府衙后堂 | 物品龙血针 | 时间入夜
166
- > 主题标签悬念 | 基调:紧张
167
- > ```
168
- >
169
- > - 字段名后不加冒号、不加括号:写 `类型信息揭示`,不写 `类型:信息揭示` 或 `类型{信息揭示}`。
170
- > - `主题标签` 只填一个值(最主导的那个)。不要用 `/`、`、`、`,` 或空格并列多个——落盘校验按「一个值」读,并列写法会被判成枚举越界并触发重跑。
171
- > - 空字段统一写「无」(如 `物品无`、`时间无`),不要用 `—`、`未知`,也不要整段省略;`涉及` 段必须保留,纯环境铺垫时值写「无」。
172
- > - 每个情节点后紧跟自己的那一行 `主题标签X | 基调:Y`,不要把标签行堆到文件末尾,也不要并进 P 行内部。
173
- >
174
- > 末行格式硬约束:`基调` 用全角冒号 `基调:`,不可省略或换半角;`主题标签` 后不加冒号。主题标签只能取上列 12 种、基调只能取上列 10 种——“温馨/紧张/甜”等是基调值,禁止填进主题标签;都不贴合时用“其他”,勿硬塞近义项。
175
- >
176
- > **输出前自检**:交付前逐条核对——① 文本里没有 `{` 或 `}`;② `^P` 行数 == `主题标签` 行数 == `基调:` 行数;③ 每个 `主题标签` 只有一个值;④ 每个 P 行都含 `类型`、白描、`涉及` 三段且用 ` | ` 分隔。任何一条不符,先改再输出。
119
+ 主题标签悬念 | 基调:爽
177
120
 
178
121
  ---
179
122
 
180
- {重复 P2...PN}
123
+ P3 …… 按时序继续,每个都写全六段,本章共 10–20 个,长章最多 30 个
124
+
125
+ <!-- CHAPTER_END:4 -->
126
+
127
+ 按章号重复,每个输入章恰好一次。
128
+
129
+ <!-- BATCH_OBSERVATIONS_START -->
130
+ ## 跨章观察
131
+
132
+ ### 剧情点
133
+
134
+ | 剧情点ID | 章节范围 | 起始目标 | 阻碍 | 关键选择/行动/外部事件 | 局面变化 | 得失与承担者 | 后续影响 | 状态 | 证据 |
135
+ |---|---|---|---|---|---|---|---|---|---|
136
+ | BP-RAW-4-6-01 | 4-5 | ... | ... | ... | ... | ... | ... | open/closed | ... |
137
+
138
+ ### 关键事件与披露候选
139
+
140
+ 只收录可能进入全文主线或关键转折表的事件;过渡动作不建条目。每项写:候选ID|章节|客观事件及大致发生顺序|本批披露路径(异常/线索/解释/确认)|读者与关键角色的信息差|判断变化|叙事作用|证据。无法判断客观发生时间时明确写待核。
141
+
142
+ ### 关系变化
143
+
144
+ | 关系ID | 主体 → 客体 | 关系动作 | 表面/真实状态 | 触发 | 双方得失 | 变化后状态 | 证据强度 | 证据 |
145
+ |---|---|---|---|---|---|---|---|---|
146
+
147
+ ### 三维节奏
148
+
149
+ 只写峰值、谷值和三轴明显分离处:章节/剧情点|事件推进及理由|情绪类型/强度及触发|篇幅展开度|展开/压缩/省略/反复的作用|证据。普通章节的分数已在逐章紧凑事实里,不重复抄表。
150
+
151
+ ### 跨批状态
152
+
153
+ - 已确认别名:「别名→本名」,含上一批传下来的;没有写无。
154
+ - 未闭合剧情点:ID、主体、目标、当前阻碍、最后证据;没有写无。
155
+ - 未决悬念:读者已知和等待确认的内容;没有写无。
156
+ - 关系状态:下一批需要继承的有向状态;没有写无。
157
+ - 待核事项:冲突、C暂定或缺失;没有写无。
158
+
159
+ <!-- BATCH_OBSERVATIONS_END -->
181
160
  ```
182
161
 
183
- ---
162
+ ## `existing-results` 输出
184
163
 
185
- ## 提取规则
164
+ 本批没有 `summary_gaps` 时不输出 `CHAPTER_START/END`、不重写逐章文件(有缺口时按上面的规则输出章节块,不写 `REUSED_CHAPTERS`)。先声明复用范围,然后使用与上方相同的五个跨章观察小节:剧情点、关键事件与披露候选、关系变化、三维节奏、跨批状态。
186
165
 
187
- ### 情节点密度(按字数动态计算)
166
+ ```markdown
167
+ # 已有成果二次提取 REUSE-1-3:第1-3章
188
168
 
189
- 根据章节字数计算目标情节点数:
190
- - 密度公式:{字数÷200}(下限)到 {字数÷150}(上限),即 150-200 字/个情节点
191
- - 1000 字 → 10 个(硬下限;公式建议 5-7)
192
- - 3000 字 → 15-20 个
193
- - 5000 字 → 25-34 个
194
- - 8000+ 字 → 40 个(上限)
169
+ <!-- REUSED_CHAPTERS:1-3 -->
195
170
 
196
- **硬约束**:每章至少 10 个,至多 40 个。当公式计算超出 [10, 40] 时以硬约束为准。
171
+ <!-- BATCH_OBSERVATIONS_START -->
172
+ ## 跨章观察
197
173
 
198
- > ⚠️ 关键:短章围绕核心事件拆足关键步骤,长章不要遗漏细节。密度由字数决定,不是固定值。输出后自检数量。
174
+ ### 剧情点
175
+ 同上表;证据指向旧成果文件,不指向未读取的原文。
199
176
 
200
- ### 情节点类型(只能用以下 8 种,不得自创)
177
+ ### 关键事件与披露候选
178
+ 同上;只根据旧成果能支持的内容填写。
201
179
 
202
- | 类型 | 定义 | 识别特征 |
203
- |------|------|----------|
204
- | 转折点 | 改变故事走向的事件 | 剧情方向发生明显偏转 |
205
- | 信息揭示 | 新设定、新人物背景、世界观补充 | 读者首次获得某类信息 |
206
- | 冲突 | 人物间正面对抗或内心挣扎 | 有明确的对抗双方 |
207
- | 解决 | 冲突的收束或悬念的解答 | 一个紧张状态被解除 |
208
- | 铺垫 | 为后续事件埋下的伏笔 | 读者后来会发现它的重要性 |
209
- | 行动 | 推动剧情的主动行为 | 角色做出有后果的决定/行动 |
210
- | 对话 | 包含关键信息的对话 | 对话中传递了新信息或改变了关系 |
211
- | 状态变化 | 角色关系或环境的重要转变 | 状态 A 明确转变为状态 B |
180
+ ### 关系变化
181
+ 同上表。
212
182
 
213
- ### 原文引用规则(精选,不逐点铺满)
183
+ ### 三维节奏
184
+ 同上表。
214
185
 
215
- 情节点的主要证据是 P 行的白描:事实、结果、原文给出的起因、伏笔线索必须在白描里写全,读白描就能知道发生了什么。原文引用是补充证据,只给下面三类情节点保留:
186
+ ### 跨批状态
187
+ - 已确认别名:...
188
+ - 未闭合剧情点:...
189
+ - 未决悬念:...
190
+ - 关系状态:...
191
+ - 待核事项:...
216
192
 
217
- | 该留引用 | 判断标准 |
218
- |------|----------|
219
- | 关键转折 | 改变本章或全书走向的转折点 / 解决 |
220
- | 关键台词 | 有辨识度、后续会被回扣或反复提起的原话 |
221
- | 写法样本 | 值得当作句式、节奏、对话样本回查的段落 |
193
+ <!-- BATCH_OBSERVATIONS_END -->
194
+ ```
222
195
 
223
- - 每章至多 8 条,按上表挑;其余情节点不写引用行。本章确实没有值得回查的段落时一条都可以不留,不要为凑数给过场和纯环境铺垫配引用
224
- - 引用 ≤400 字,逐字连续切片,保留原文语气,不改写、不缩写、不跨段拼接
225
- - 选中的段落过长或分散时,用一行 `原文定位:{5-15字可 grep 回原文的原句片段}` 代替整段引用
196
+ ## 情节点规则
226
197
 
227
- ### 基调(只能用以下 10 种)
228
- 紧张 / 轻松 / 悲伤 / 热血 / 爽 / 甜 / 温馨 / 恐怖 / 压抑 / 其他
198
+ 情节点是逐章节拍序列,下游挑对标章、定结构关键点、反推情绪弧线都按它读,**每章单独拆足,不因一次读多章而压缩**。
229
199
 
230
- 区分易混项:爽=打脸/复仇得手/反转的解气感;热血=拼搏战斗的燃;甜=恋爱暧昧的甜;温馨=亲情/友情的暖;恐怖=惊悚诡异/生理恐惧;紧张=危机悬而未决。都不贴合才用「其他」。
200
+ - **数量**:原文块每章 ≈ 本章字数 ÷ 150–200,落在 10–20 个;长章最多 30 个。少于 10 或多于 30,提交脚本会整批拒收重跑。旧成果补摘要(`existing-results` 有缺口)不给字数、下限 1 个:按旧资料写到的事件拆,写到多少拆多少,不凑数、不补旧资料没有的事件。
201
+ - **粒度**:一个完整戏剧事件为一点。太粗(整段打架写成一点)丢细节,太细(“举起右手”)碎片化;短章按关键步骤拆足。
202
+ - **顺序与白描**:严格按原文事件顺序;白描写谁做了什么、结果如何,原文给出的起因照写,不补原文没写的情感和意图,不写“精彩”“气氛紧张”这类评价。
203
+ - **枚举**:三个字段各只填一个表内值,不自造词:
204
+ - 类型:转折点/信息揭示/冲突/解决/铺垫/行动/对话/状态变化
205
+ - 主题标签:爱情/亲情/友情/权力/金钱/成长/复仇/悬念/搞笑/热血/日常/其他
206
+ - 基调:紧张/轻松/悲伤/热血/爽/甜/温馨/恐怖/压抑/其他
207
+ - 消歧:爽=打脸/复仇得手/反转的解气;热血=拼搏战斗的燃;甜=恋爱暧昧;温馨=亲情友情的暖;恐怖=惊悚诡异;紧张=危机悬而未决;压抑=绝望、无力、被碾压。期待、释然等表外感受归到最近的值,归不了写「其他」。
208
+ - **格式**:P 行固定六段 `类型X | 白描 | 涉及… | 地点… | 物品… | 时间…`,**白描不能省**(标题只是短标签,不能代替白描),缺的段写「无」;`主题标签X | 基调:Y` 另起一行,不并进 P 行;`类型`、`主题标签` 后直接连写值,`基调:` 用全角冒号。
209
+ - **自检**:写完一章先数情节点,不足 10 个就回到该章原文按关键步骤补拆,再写下一章。
231
210
 
232
- ### 主题标签(只能用以下 12 种)
233
- 爱情 / 亲情 / 友情 / 权力 / 金钱 / 成长 / 复仇 / 悬念 / 搞笑 / 热血 / 日常 / 其他
211
+ ## 剧情点完善规则
234
212
 
235
- 区分易混项:亲情=家人/师徒/类亲情;爱情=恋爱;友情=朋友/伙伴/兄弟;金钱=财富/利益/算计;权力=地位/权势。都不贴合才用「其他」。
213
+ 剧情点必须回答:
236
214
 
237
- ---
215
+ > 谁起初想做什么 → 遇到什么阻碍 → 哪个行动或外部事件改变局面 → 谁得到什么、谁失去什么 → 结果怎样约束后续行动
238
216
 
239
- ## 角色提取规则
240
-
241
- ### 提取标准(同时满足才提取)
242
- - 有明确名字(≥2个字符,如"林雷""希尔曼""德林·柯沃特")
243
- - 有台词 OR 与主要角色有互动 OR 推动本章剧情
244
- - 不是通用称呼
245
-
246
- ### 不提取以下角色
247
- - 群体称呼:"孩子们""士兵们""村民们"
248
- - 无名路人:"一个中年人""路过的商人"
249
- - 通用称呼(扩展黑名单):
250
- - 亲属:大哥-九哥、大姐-三姐、姐姐、妹妹、哥哥、弟弟、叔叔、阿姨、伯伯、舅舅、姑姑、姨妈、爷爷、奶奶、外公、外婆、父亲、母亲、爸爸、妈妈、爹、娘、儿子、女儿、孩子
251
- - 社交:朋友、兄弟、哥们、姐妹、闺蜜、老同学、同学、老乡、邻居、室友、战友、同事、伙伴
252
- - 身份:老师、老板、师傅、徒弟、学生、医生、护士、律师、警察、士兵、将军、商人、猎人、农民、工人、新娘、新郎、仆人、侍女、丫鬟、管家、护卫、侍卫、掌柜、小二、店主、老板娘
253
- - 年龄/外貌:臭小子、小丫头、小姑娘、小伙子、少年、青年、老头、老太太、老人、年轻人、中年人、小家伙、小鬼、小娃娃
254
- - 尊称/贬称:先生、女士、小姐、少爷、公子、大人、阁下、陛下、殿下、王爷、皇上、圣上、家伙、混蛋、废物、蠢货、王八蛋
255
- - 通用指代:那人、此人、那家伙、这家伙、某人、路人、过客、陌生人、外人
256
- - 纯职位(无姓名):科长、处长、局长、秘书、主任、县长、镇长、书记、市长、省长、厅长、董事长、总经理、经理、总监、主管、队长、组长、班长(含所有副/代理前缀变体)
257
- - 组合职位:县长秘书、市长秘书、政府办主任、办公室主任
258
- - 单字称呼(无唯一性):"雷""风""龙"等单字不可作为角色名
259
-
260
- ### 别名去后缀
261
- 提取别名时,去除常见称谓后缀:公子、姑娘、师父、老伯、大人、先生、小姐。
262
- 如"林公子"→别名为"林",不保留"林公子"。注意:去后缀后若只剩单字且无唯一性(如"林"),该别名无效,丢弃不保留。
263
-
264
- ### 判断标准
265
- 如果一个称呼可以指代任意人物(无唯一性),则不能作为角色名或别名。
266
-
267
- ### 本章重要性分级
268
-
269
- | 等级 | 标准 |
270
- |------|------|
271
- | **major** | 本章核心角色:台词 ≥3 句 OR 推动本章主线 OR 有重要决策/行动 |
272
- | **supporting** | 本章配角:台词 1-2 句 OR 参与互动但非核心 OR 提供关键信息 |
273
- | **minor** | 本章次要角色:仅被提及 OR 无台词但有名字 OR 一次性互动 |
274
-
275
- ### 别名提取规则
276
- - 提取:专名、绰号、特殊称呼(如"林雷""龙血战士林雷")
277
- - 提取:姓+称呼(如"李科长""王秘书")
278
- - 不提取:纯职位(如"科长""队长""镇长")
279
- - 不提取:通用称呼(如"大哥""那个人")
280
- - 不提取:组合职位(如"县长秘书""副科长")
281
-
282
- ### 本章表现描述
283
- - 100-200 字
284
- - 只描述本章可见的行为、对话、情绪、关系变化
285
- - **禁止**:推测完整背景、总结整体性格、引用其他章节信息
217
+ - 一个剧情点可以跨多章、跨读取批次;一个读取批次也可以包含多个剧情点。
218
+ - 本批只是延续已有目标时,沿用上批 ID 并补充变化,不能另建一个同义剧情点。
219
+ - 本批结束仍未结算时标 `open`,把状态传给下一批。
220
+ - 连续微动作服务同一局面变化时合并,不拆动作凑数量。
221
+ - 转场或日常过渡没有独立局面变化时,只写入章节事实和节奏作用,不强造剧情点。
286
222
 
287
- ---
223
+ ## 双时间线与三维节奏
288
224
 
289
- ## 质量检查(输出前自检 + 主线程升级重试触发条件)
225
+ - 每批只提交可能进入主线或关键转折的候选;Stage 3 从全书候选中精选约 8–15 个关键节点形成双时间线,不为所有小事件建表。
226
+ - 关键事件只登记一次;异常、线索、解释、确认合并为其披露路径,分别记录读者和关键角色当时知道什么,以及披露后判断怎样改变。
227
+ - 事件推进看目标、风险、资源、关系、知识或行动方向的变化。
228
+ - 读者情绪写文本触发的期待、紧张、甜、压抑、释然等变化。
229
+ - 篇幅安排写哪些节点被展开、压缩、跳过或反复,以及这样安排的作用。
230
+ - 分数只用于比较,文字理由和证据不能省略。
290
231
 
291
- 下列 12 条**同时是主线程的「升级重试」触发条件**:你输出后,主线程会用本清单逐条校验;任一不达标 → 主线程会用 sonnet 覆盖本 agent 的默认 haiku,重新 spawn 一次(仅 1 次)。请在输出前认真自检,不要把校验责任甩给主线程。
232
+ ## 输出前检查
292
233
 
293
- 1. 概要是否为按时序的连贯叙述,讲清了事件、原因、结果(不是条目罗列,也不靠同一连接词反复串联)
294
- 2. 每个情节点是否使用了客观白描(无叙事框架词、无主观评价),且白描写全了事实、结果与原文给出的起因;标题是否为 ≤15 字短标签,没有和白描写成同一句
295
- 3. 情节点是否严格按时序排列
296
- 4. 情节点数量是否在 10-40 个的动态范围内(由字数决定,不是固定值;硬下限 10)
297
- 5. 关键转折 / 关键台词 / 写法样本类情节点是否留了原文引用或 `原文定位`,全章引用是否不超过 8 条(不逐点铺满)
298
- 6. 角色是否都标注了全名(非昵称/非通用称呼)
299
- 7. 类型标签是否只用了 8 种规定类型
300
- 8. 基调是否只用了 10 种规定值,且分隔符严格为 `基调:`(全角冒号,每个情节点末行都有,不可漏、不可换半角)
301
- 9. 主题标签是否只用了 12 种规定值,且后面不加冒号(「温馨/紧张/压抑/甜」等是基调值,禁止填进主题标签)
302
- 10. 角色描述是否仅限本章信息(无跨章推测)
303
- 11. 是否输出了 `关键信息与扩写技法` 表 / `key_information_expansion`,且每条都包含关键信息、扩写方式、扩写技法、读者情绪作用、可复用提醒
304
- 12. 是否输出了 `逐章写法公式` / `chapter_formula`,且包含情绪流向、节奏配比、结构公式、核心技巧、卡点与伏笔
234
+ 1. 输入模式只有一种,范围与运行计划一致。
235
+ 2. `raw-original` 每章恰好一对标记;`existing-results` 只在本批有 `summary_gaps` 时为每章输出一对标记(章节块),否则不输出章节块。
236
+ 3. 没有读取计划外原文,没有按章另起任务。
237
+ 4. 原文块逐章数过情节点:每章 10–20 个、长章最多 30(≈字数÷150–200;少于 10 或多于 30 整批拒收),编号从 P1 连续、按原文时序,类型/主题标签/基调各只取一个枚举值;不生成章节卡表,跨章剧情点不在多张表重复同一句话。
238
+ 5. 每个剧情点有局面变化或明确标为未闭合/过渡,不把读取批次直接当剧情点。
239
+ 6. 关键客观事件和披露路径可区分,三维节奏分别解释;普通小事件没有重复建表。
240
+ 7. 跨批状态足以延续剧情点,又不携带已解决悬念。
241
+ 8. 输出不含模板占位符或候选项列表。
242
+ 9. 完整输出已写入指定文件、回复只有一行回执;没有写其他文件。
243
+ 10. **写完先用 Grep 机械自查输出文件再回执**(`output_mode: count`,只看数字;本批有章节块时做):设 P=`^P[0-9]+ ` 的行数。
244
+ - `^P[0-9]+ \*\*[^*]+\*\*[::] ?类型` 的行数必须等于 P——每个情节点行都有加粗短标题,冒号后紧跟类型;
245
+ - `^主题标签` 的行数必须等于 P——每个情节点都有自己单独一行「主题标签X | 基调:Y」;
246
+ - `^\*\*(概要|因果|关键行动|局面结果|涉及人物|信息变化|状态变化|三维节奏|章尾钩子|证据)\*\*[::]` 的行数必须等于 10 × 本批章数——十个章级字段每章一个不少,最常漏的是 `涉及人物`。
305
247
 
306
- ---
248
+ 任一项对不上:用 Grep 不带 count 找出缺的那几行,Read 附近片段,**用 Edit 就地补齐**(不整份重写),再查一遍,全部对上才回执。
307
249
 
308
- ## Domain Boundary
250
+ 输入不符合计划、章界错误或无法覆盖全部范围时,不写文件,只回复:
309
251
 
310
- - **只读**:不修改任何文件,只输出提取结果
311
- - **不做评价**:不评价文学质量好坏;`关键信息与扩写技法` 和 `逐章写法公式` 只描述本章“信息如何被扩成场景”“读者情绪作用”和“结构如何推进”,不打分、不写主观褒贬
312
- - **不跨章**:只处理当前章节,不引用其他章节信息
313
- - **不创作**:概要只叙述原文已有的事实与因果,不添加主观解读或评价
314
- - **一人一实体**:每个角色只对应一个真实人物,不确定时分开列
252
+ ```text
253
+ BATCH_ERROR: 批次ID | 错误原因 | 受影响章节
254
+ ```
@@ -22,7 +22,7 @@ maxTurns: 25
22
22
 
23
23
  ## 参考文件路径规则
24
24
 
25
- **确定项目根目录:** 执行 `git rev-parse --show-toplevel`,失败则用当前工作目录。以下所有路径均为项目根下的绝对路径。
25
+ **确定项目根目录:** 直接使用宿主交给你的当前工作区/项目根;不要执行 shell。以下所有路径均从该根目录解析。
26
26
 
27
27
  读取参考文件时,直接 Read 当前 Claude 部署的 canonical 路径,禁止先用 Glob/Grep 搜索:
28
28
  1. `{项目根}/.claude/skills/story-setup/references/agent-references/{文件名}`
@@ -40,14 +40,14 @@ maxTurns: 15
40
40
 
41
41
  ### 第一步:发现项目关键术语
42
42
 
43
- 不硬编码任何题材术语。先扫描项目自身的设定文件,动态构建检查词表:
43
+ 不硬编码任何题材术语。先扫描项目自身的设定文件,动态构建检查词表。**读取量跟检查范围走**:范围是某几章时只读这些章涉及的角色、设定与细纲;范围是全卷/全书(如 story-review 全量审查)才扩到全部文件。
44
44
 
45
- 1. 列出 `设定/角色/` 下所有角色文件,提取角色名、别名、称号
46
- 2. 列出 `设定/世界观/` 下所有文件,提取力量体系名称、关键术语、地名
45
+ 1. 列出 `设定/角色/` 的文件名建角色名表;只整读检查范围内正文出场或申报涉及的角色卡,提取别名、称号与属性
46
+ 2. 用正文与申报里的力量体系、术语、地名 Grep `设定/世界观/`,只读命中的文件
47
47
  3. 用调用方随 prompt 传入的 `last_committed_chapter` / `state_revision`(主会话已跑过 `tracking_commit.py check`);prompt 里没有这两个值时不自行读取 `_tracking-state.json`(完整 state 不进 prompt,读取量不随章数增长),只读 `追踪/上下文.md` 头部的 `状态修订:{N}` 作参考;对不上时先把派生视图不可信列为 S1,不继续用它们作一致性结论
48
48
  4. 读取 `追踪/伏笔.md` 的已埋当前行,以及本次涉及角色的 `追踪/角色状态/{角色名}.md`
49
49
  5. 按检查目标读取 `追踪/时间线/作者真相.md` 或 `读者已知.md`;检查知识差时同时读取两个派生视图
50
- 6. 从 `大纲/细纲_*.md` 提取 `逻辑线`、`人物关系变化`、`出场顺序`、`行动成本(可无)/收益归属` 和 `结尾设定`,作为后续正文一致性检查的预期链条;缺必需字段时标证据不足,不用其它旧字段替代
50
+ 6. 从检查范围内各章的 `大纲/细纲_第NNN章.md`(全卷/全书范围才读全部)提取 `逻辑线`、`人物关系变化`、`出场顺序`、`行动成本(可无)/收益归属` 和 `结尾设定`,作为后续正文一致性检查的预期链条;缺必需字段时标证据不足,不用其它旧字段替代
51
51
 
52
52
  ### 第二步:基于术语执行冲突扫描
53
53