@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
@@ -18,12 +18,12 @@
18
18
 
19
19
  **层级关系(全书 › 卷 › 剧情单元 › 章 › 情节点;故事线横向贯穿多个剧情单元):**
20
20
  - 大纲.md = 全书鸟瞰(每卷一两句话定位)
21
- - 卷纲_第X卷.md = 单卷规划(剧情单元+情绪+人物+伏笔+反转)
21
+ - 卷纲_第X卷.md = 单卷规划(故事线+剧情单元+情绪+人物+伏笔+反转)
22
22
  - 细纲_第XXX章.md = 单章蓝图(单元ID/位置 + 主角目标/关键选择 + 内容概括 + 多线情节安排 + 人物关系/出场顺序 + 情节细化 + 结尾设定/钩子)
23
23
 
24
24
  **概念对照(统一叫法,减少混淆):**
25
25
  - **剧情单元** = 一段完整剧情(1.5-3 万字/数章,一个矛盾从起到收)。拆书侧就是 `剧情/{剧情单元名}.md`,本书侧就是卷纲里的**剧情单元卡**;理论叫法是「一级结构」。同一粒度,统一叫剧情单元。
26
- - **故事线**(`剧情/故事线.md`)= 贯穿多个剧情单元的线(主线/感情线/成长线/夺宝线…),比剧情单元大一层。
26
+ - **故事线** = 贯穿多个剧情单元的线(主线/感情线/成长线/夺宝线…),比剧情单元大一层。拆书侧是 `剧情/故事线.md`,本书侧是卷纲的**本卷故事线**表(L 编号)。剧情单元纵向切段,故事线横向贯穿,同一卷的两个视角。
27
27
  - 「循环」一词只在**节奏义**保留(爽点循环、升级循环、小/中/大循环等),不再指代规划单元。
28
28
 
29
29
  ---
@@ -196,16 +196,27 @@
196
196
  - 本卷战果:{其余顺带兑现的线,轻触到大涨皆可;一战多得是好设计}
197
197
  - 本卷解锁的终局里程碑:{参 `设定/题材定位.md`「终局底牌与升级台阶」小节,本卷推进或解锁哪一个大里程碑}
198
198
  - 本卷禁碰的终局底牌:{尚未到解锁卷、本卷不得动用的宿敌/真相/身份/金手指上限}
199
+ - 本卷鼓励长出的:{2-4 类本卷排纲时鼓励发明的东西——新故事线类型、对手侧的人、场面里的物、规矩细则、可数刻度序列;只列品类与方向,不预写内容。与上一行配对:上一行说不许动什么,本行说往哪儿长}
199
200
  - 契约风险:{契约安全 / 需补强 / 契约破坏;需补强时写清补强方式}
200
201
 
202
+ ## 本卷故事线(L 编号唯一分配处;主线之外至少 2 条)
203
+
204
+ > 比剧情单元大一层的横向线。剧情单元卡「本单元在跑的线」按 L 编号引用本表。支线必须与主线有对接口(见 outline-conflict.md「支线 = 完成主线的手段」、outline-structure-theory.md「支线设计原则」)。
205
+
206
+ | 编号 | 线 | 类型 | 推进靠什么 | 与主线怎么对接 | 本卷区间 | 主线停摆时能否单独扛一章 |
207
+ |---|---|---|---|---|---|---|
208
+ | L01 | {一句话} | {主线/资源/人脉/地位/身份/关系/信息/配角暗线} | {它自己的推进器:谁在推、图什么、时限是什么} | {汇聚点:在哪一章、以什么形式并回主线} | 第{A}-{B}章 | {能/只能半章/不能} |
209
+
210
+ 末栏是主线薄时的可调存量清单。填「能」的线要有自己的对手、自己的时限、自己的可见收益,不依赖主线事件发生。全卷没有一条填「能」时补线,不靠拉长主线填章。
211
+
201
212
  ## 剧情单元卡(1–3 万字为可调经验值;存于卷纲内;不另建单独文件)
202
213
 
203
- > 剧情单元 = 卷纲里的一级结构单元(见 outline-structure-theory.md「对标节奏迁移」),与下方「对标结构坐标」是同一单元的不同视角,不重复编排。单元长度按本书题材、既有兑现节奏与对标调整,不是硬门槛。规划各关键节点时消费权威文件的“关键节点四问”和期待所有权;无需主角亲自执行每个动作。高潮/兑现后可留短暂低压,以小而可见的收益/奖励承接下一轮压力。引入新地图/机构/能力/敌人/谜团时先检查换书债,不得借新鲜感逃避旧承诺。
214
+ > 剧情单元 = 卷纲里的一级结构单元(见 outline-structure-theory.md「对标节奏迁移」),与下方「对标结构坐标」是同一单元的不同视角,不重复编排。单元长度按本书题材、既有兑现节奏与对标调整,不是硬门槛。规划各关键节点时按 `reader-contract-and-progression.md`「契约四问」检查;无需主角亲自执行每个动作。高潮/兑现后可留短暂低压,以小而可见的收益/奖励承接下一轮压力。引入新地图/机构/能力/敌人/谜团时按第 4 问检查,不得借新鲜感逃避旧承诺。
204
215
 
205
- ### 剧情单元 {L卷号-序号}
206
- - 单元ID:{L卷号-序号}
216
+ ### 剧情单元 L{卷号}-{序号}
217
+ - 单元ID:L{卷号}-{序号}(字母 L 开头,如 L1-03;不能写成 1-03)
207
218
  - 章节范围:{第A-B章}
208
- - 对标剧情参照:{{书名}《剧情标题》(类型/桥段标签;借什么:结构分布/情节点索引/兑现方式);可列 2-3 条,无对标写「无」}
219
+ - 对标剧情参照:{{书名}《剧情标题》(类型/桥段标签;借什么:结构分布/情节点索引/兑现方式);可列 2-3 条,无对标写「无」;**允许填「自创:{一句话理由}」**——单元内容形态不强制映射对标,自创单元照常过排纲自查与批末结构复核}
209
220
  - 单元节拍/章功能分配:{建立期待→尝试→加压/转向→决定性行动→兑现→余波;标对应章范围,可按题材删改;建卡时可按「对标剧情参照」剧情单元提炼的共性节拍填写,见 outline-structure-theory.md「按剧情批出细纲」}
210
221
  - 单元承诺:{本单元向读者建立的情绪命题/期待,以及要偿还的期待债}
211
222
  - 单元情绪引擎:{核心情绪命题→承载对象/情绪缺口→受阻或缺口维持原因→本轮触发→主角不可替代的点火/转化动作→意义变化或可见兑现→题材/契约兑现;承载对象可为人物/关系/目标/规则/场景;不适用环节可写无/即时,但须保持因果闭合;机制按题材选,不强制误解/物件/反转}
@@ -216,11 +227,24 @@
216
227
  - 关键选择与决定性行动:{主角不可替代的判断、选择和行动}
217
228
  - 兑现方式与归属:{核心兑现如何发生,收益归谁、如何可见}
218
229
  - 本单元主推线/战果:{沿用卷契约划分——主推线1条承担高潮,其余线给战果,一战多得允许}
219
- - 终局底牌边界:{本单元不得动用的未解锁宿敌/真相/身份/金手指上限;碰到就按权威文件透支两问改纲}
230
+ - 本单元在跑的线:{按 L 编号列,主线之外至少 1 条;每条写「L0X 从哪一步推到哪一步」,不重述线本身。本单元不动的线不列}
231
+ - 终局底牌边界:{本单元不得动用的未解锁宿敌/真相/身份/金手指上限;碰到就按契约四问第 3 问改纲}
220
232
  - 禁止提前释放:{本单元不能提前解决/揭露/升级的内容}
221
233
  - 下一单元因果钩子:{自然推入下一单元的问题、代价、线索或新目标}
222
234
  - 风险等级:{契约安全 / 需补强 / 契约破坏;需补强时写清补强方式}
223
235
 
236
+ > **段位契约(新建卷纲必须照此写;取段器按此解析)**:每个 `##`/`###`/`####` 标题的**下一行**写一行 `> 作用域:X`,X 取二值之一——
237
+ > `卷级常任`(全卷有效,取段器恒定带出)/`单元级 {单元ID}`(只在该单元的闭包里出现)。
238
+ > 三条纪律:**①全卷常任规则不许写在单元块里**——单元块只写本单元落点+一行指针,规则本文放 `## 全卷常任裁定`(checker 会按「全卷/常任/全程生效」字样报 E4)。
239
+ > **②被推翻的内容不留旧文**——改成 `⊘ 已退役 → 见 {何处}` 起头的行,取段器默认不输出,读到的一定是当前有效值。
240
+ > **③排纲底稿不进卷纲**——供给自查、建纲追加写在 `大纲/排纲底稿_{单元ID}.md`(模板见文末),底稿里凡有写作期约束力的条目(跨章祈使:全程不许/往后任何章/此后不再…),**建纲当场就写进**该单元的单元级段或细纲。老卷纲里的 `批次底稿 {单元ID}|状态:在用|已退役` 段仍可读(排纲时 `--stage outline` 取出,`--check` 的 W1 告警盯其中的跨章祈使),新卷纲不再写。
241
+ > 落盘后跑 `outline_view.py --check --strict {卷纲路径}`,问题数归零;读取方式见 SKILL.md「卷纲不整读(取段器)」。
242
+
243
+ ## 全卷常任裁定
244
+ > 作用域:卷级常任
245
+
246
+ {对本卷每个剧情单元生效的规则本文写在这里,单元卡与排纲纪律只写落点、不复读规则。编号列出,单元侧按「常任 N +本单元落点」引用}
247
+
224
248
  ## 核心矛盾
225
249
  {一句话:本卷要解决什么问题或达到什么目标}
226
250
 
@@ -254,9 +278,31 @@
254
278
  |------|---------|---------|---------|---------|
255
279
  | {类型} | {名} | {如何误导读者} | 第{N}章 | {影响哪些线} |
256
280
 
257
- ## 本卷伏笔
258
- | 伏笔 | 埋设章节 | 预计回收 | 类型{短期/中期/长期} |
259
- |------|---------|---------|---------------------|
281
+ ## 本卷伏笔(F 编号唯一分配处;表按编号排)
282
+ | 编号 | 伏笔 | 埋设章节 | 预计回收 | 类型{短期/中期/长期} |
283
+ |------|------|---------|---------|---------------------|
284
+
285
+ ## 本卷刻度台阶
286
+ {以下刻度台阶、打脸债、压力线轮转三表按本书需要填写;不适用时可省略或写「无」,不为填表新增剧情。}
287
+ {读者在本卷要学会哪几把尺子,以及每一格在第几章被立起、第几章被跨过(尺子先于要度量的那件事出场)。刻度本身存在 `设定/世界观/`,本表只登记它在本卷的**呈现时机**,不重复定义}
288
+
289
+ | 刻度 | 全部档位(可数序列) | 主角本卷起点 | 本卷终点 | 立起于第几章 | 跨格于第几章 |
290
+ |------|--------------------|------------|---------|-----------|-----------|
291
+ | {身份/资质/财力/实力/名次} | {甲→乙→丙→丁,共4格} | {丙} | {乙} | 第{N}章 | 第{N}章 |
292
+
293
+ ## 本卷打脸债
294
+ {有人当众看轻主角、下了绝对化断言、或立了一个会被推翻的规矩(伏笔是情节种子,打脸债是情绪欠条——可不推进情节,但必须还)。跨卷未还的挂在这里不删}
295
+
296
+ | 原话或断言 | 谁说的 | 第几章说的 | 预定兑现 | 兑现形式{对称/超额/由第三方转述} |
297
+ |-----------|-------|----------|---------|------------------------------|
298
+ | {"就凭你也想…"} | {名} | 第{N}章 | 第{N}章 | {对称:他说打断双手,结果自己断了三指} |
299
+
300
+ ## 压力线轮转
301
+ {同时挂着的几条压力线,以及各线在哪些章推进、哪些章静默。**每章只推一到两条**,其余保持静默;静默的线用一句比价维持存在感("那位再横,还能横过某某吗")}
302
+
303
+ | 压力线 | 类型{环境/同侪/结构} | 可否交涉 | 本卷推进章 | 静默章 | 解决方式 |
304
+ |-------|-------------------|---------|----------|-------|---------|
305
+ | {名} | {结构} | {否,靠变强也解决不了} | 第{N}、{M}章 | 其余 | {本卷不解决,只加压} |
260
306
  ```
261
307
 
262
308
  创建参考:`outline-methods.md` (大纲三层结构法) + `outline-rhythm.md` (升级感三步设计法) + `emotional-arc-design.md` (六种弧线速查) + `long-reversal.md` (反转类型与长线层级)
@@ -265,11 +311,11 @@
265
311
 
266
312
  ## 大纲/细纲_第XXX章.md
267
313
 
268
- 细纲是正文写作的章节蓝图,而不是只列事件和钩子的清单。**模板唯一权威副本**见 [Phase 3:大纲搭建](workflow-setup.md#phase-3大纲搭建) 的「细纲(全书每章)」模板(含单元ID/位置、主角目标/关键选择、任务卡点、结构公式、契约风险行,以及不含逐点字数的情节点表格);本文件不再保留模板副本。新建、补建、回填都按权威模板补齐,未知字段写 `[待补充]`,不为补齐字段杜撰副线或人物关系。
314
+ 细纲是正文写作的章节蓝图,而不是只列事件和钩子的清单。**模板唯一权威副本**见 [Phase 3:大纲搭建](workflow-setup.md#phase-3大纲搭建) 「排纲自查与细纲」里的细纲模板(含九个必填字段、四个小节与不含逐点字数的四列情节点表;阶段位置、结构公式等见模板末尾「可选」块);本文件不再保留模板副本。新建、补建、回填都按权威模板补齐,未知字段写 `[待补充]`,不为补齐字段杜撰副线或人物关系。
269
315
 
270
316
  `目标情绪` 与 `主角目标/关键选择` 要写实际内容,不能留 `[待补充]`:隔离实验里只补这两个字段就能复现补齐全部字段的正文收益,补满其余字段与只补这两个不可区分。其余字段未知时仍按上文写 `[待补充]`。
271
317
 
272
- 落盘后运行 `node scripts/check-outline-contract.js --json --project {书目录} --chapter {N}` 做结构验收:它只判字段、四个小节、五段式、四列情节点表和字数目标口径是否在场,不判内容好坏。exit 1 时只按 `repair_scope` 补报告点名的字段并复验,最多两轮;仍失败就报告检查 ID 停下,不改其他章。exit 2、脚本缺失或 node 不可用时如实报告验收未完成,不得声称细纲已合规。本检查只在新建/补建/回填时执行;既有项目的旧细纲不因此阻断写正文。
318
+ 落盘后运行 `node scripts/check-outline-contract.js --json --project {书目录} --chapter {N}` 做结构验收:它只判字段、四个小节、五段式、情节点表结构(默认四列 `# / 情节点 / 功能标签 / 执行边界(禁+放)`;需要时可在功能标签后加「分辨率」列)和字数目标口径是否在场,不判内容好坏。exit 1 时只按 `repair_scope` 补报告点名的字段并复验,最多两轮;仍失败就报告检查 ID 停下,不改其他章。exit 2、脚本缺失或 node 不可用时如实报告验收未完成,不得声称细纲已合规。本检查只在新建/补建/回填时执行;既有项目的旧细纲不因此阻断写正文。
273
319
 
274
320
  ---
275
321
 
@@ -304,3 +350,17 @@
304
350
  ### `追踪/上下文.md`
305
351
 
306
352
  续写状态卡不超过 12288 字节,固定 7 栏:`当前位置 / 长期约束 / 核心角色状态 / 活跃伏笔 / 近三章速记 / 下一章承诺 / 连贯性风险`。它是当前语义检查点之一;不放文风、质量计数、普通待办、索引统计和长期概要。
353
+
354
+ ## 排纲底稿模板(`大纲/排纲底稿_{单元ID}.md`)
355
+
356
+ 排纲期的工作底稿,每个剧情单元一份,只在排纲/补纲时读,写正文不读。
357
+
358
+ ```markdown
359
+ # {单元ID} 排纲底稿
360
+
361
+ ## 供给自查
362
+ {本单元出细纲前产出,见 workflow-setup.md「排纲自查与细纲」步骤 3。六行:对手供给 / 角色供给 / 能力与金手指供给 / 刻度供给 / 场景与底图供给 / 故事线供给。「写了要报」的发明各列一行「发明了什么+落在哪个设定文件」;「先问作者」的提案列候选+影响面待作者裁定;无缺口写「无缺口」。批末 `check-outline-contract.js --supply {卷纲路径} {单元ID}` 验证本小节存在}
363
+
364
+ ## 建纲追加
365
+ {本批建完后回填,见步骤 5。逐章落笔时才发现的缺口,一条一行,不与上面六行混写。格式:`第 N 章排到哪一步发现缺什么 / 级别 / 落在哪个设定文件或提案编号`。一条也没有写「无追加」。下一批供给自查以本小节为固定输入}
366
+ ```
@@ -6,34 +6,43 @@
6
6
 
7
7
  加载优先级从高到低:
8
8
 
9
- 1. 安全、平台、字数、文件协议等硬性门禁;
9
+ 1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议;句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁;
10
10
  2. 用户在当前请求中的明确要求;
11
11
  3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定;
12
12
  4. 作者记忆中的本书偏好;
13
13
  5. 作者记忆中的题材、流程和全局偏好;
14
14
  6. 对标素材、通用方法和默认值。
15
15
 
16
+ 按表达维度取最窄适用要求:低优先级只补缺项,不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序;审稿不因作者有意采用的表达本身扣分,真实可读性与因果问题仍照常评价。
17
+
16
18
  作者记忆不能把本书事实写进 `.story/作者记忆/`,不能覆盖当前请求,不能降低审稿 rubric,也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。
17
19
 
18
20
  ## 文件与所有权
19
21
 
20
- 工作区级目录:
22
+ 作者记忆分两级存放,记忆随书走:
21
23
 
22
24
  ```text
23
- {工作区}/.story/作者记忆/
25
+ {工作区}/.story/作者记忆/ # 项目级 store:global / genre / workflow 条目,编号 AP
24
26
  ├── _author-memory-state.json # 唯一结构化权威
25
27
  ├── 作者画像.md # 仅 active,供作者查看与管理
26
28
  ├── 待确认.md # pending / conflict,不参与约束
27
29
  └── 变更记录.md # 最近 100 次、最新在前的事务记录
30
+ {书}/.story/作者记忆/ # 书级 store:只存这本书的 book 条目,编号 BP,同样四个文件
28
31
  ```
29
32
 
30
33
  三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。作者记忆不存在时,普通写作、审稿和去味任务直接继续,不自动初始化空目录;首次 `record` 会随事务创建。
31
34
 
32
- 工作区必须显式传给脚本。优先使用已经包含 `.story/作者记忆/` 的最近祖先;首次初始化时使用承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的创作工作区根。不要把用户主目录当默认工作区。
35
+ **定位规则**:`--workspace` 必须显式传给脚本,指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层;已有记忆时,是项目级 state(不带 `book` 字段)所在的最近祖先。书目录自己的 `.story/作者记忆/` 是书级 store,`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`;不要把用户主目录当默认工作区。`--book-root` 是当前书的项目目录(`.active-book` 指向、或含 `设定/`、`正文/` 的那一层,如 `{工作区}/长篇/{书名}/`);书名默认取书级 state 记录的名字,首次建立时取目录名,`--book` 可覆盖。
36
+
37
+ **单书布局**:书根就是工作区(`--book-root` 与 `--workspace` 同一目录)时,书级 store 改住 `{工作区}/.story/作者记忆/书级/`,与项目级各自一份 state;首次建立的书名优先取项目级存量本书条目里唯一的书名,再取目录名。旧版曾把书级 state 写在项目级位置,此后项目级读写都报 `state.book`;带 `--book-root {工作区}` 运行任一命令(含 `query`)会先把它原样移进 `书级/`,不改内容。这个目录其实是某个工作区里的一本书时(上一层叫 `长篇/` 或 `短篇/`,或某个祖先有 `.active-book` 或项目级 state),工具直接报错、不动任何文件,按报错改传 `--workspace`。
38
+
39
+ **路由规则**:ID 前缀就是 store——`decide` / `forget` 看 `item_id`(`AP` 进项目级,`BP` 进书级),`remember` / `replace` 看 `scope.level`(`book` 进书级,其余进项目级)。书级操作必须传 `--book-root`,没传直接报错,不会退而写进项目级。一份 `commit` 事务只能写一个 store;`replace` 与 `conflicts_with` 不能跨 store——本书例外按优先级覆盖全局规则,不算冲突,直接 `remember` 为 book 条目即可;要把全局规则改成本书规则,拆成 `forget` + `remember` 两个事件。
40
+
41
+ **存量迁移,不做双读**:升级前写进项目级 store 的 book 条目不再参与查询与预算估算,也不再接受新的 book 写入;它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来:断言、证据、确认次数、重要度原样保留,换成 `BP` 编号,原 `AP` 条目标 `superseded` 并注明去向;与全局条目的冲突关系在迁移后不再成立,这类候选退回 `pending`。书级每个源条目一笔事务,重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书:」条目时,把迁移列为默认提案项。
33
42
 
34
43
  ## 什么时候读取
35
44
 
36
- 长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active 条目。查询输出固定不超过 2048 字节。不要先查询全部再让 agent 自行筛选,按任务直接选择 kind:
45
+ 长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active 条目:结果是项目级 store 与 `--book-root` 所指书级 store 的合并;不传 `--book-root` 就拿不到任何本书条目。查询输出固定不超过 2048 字节。`--kind` 必传——不传直接报错,不再默认返回全部类型;按任务直接选择 kind:
37
46
 
38
47
  | 任务 | query kinds | 注入位置 |
39
48
  |---|---|---|
@@ -48,10 +57,19 @@
48
57
 
49
58
  ## 可靠性与负荷边界
50
59
 
51
- - 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx`;没有回执就不得声称“已经记住”。
60
+ - 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx`;没有回执就不得声称“已经记住”。怎么告诉作者见「回执怎么告诉作者」。
52
61
  - 普通创作只做一次本地 `query`,没有 state 时返回空结果且不创建文件;有记忆时也只返回相关 active 条目,硬上限 2048 字节。完整画像、证据、候选和 journal 不进入正文 prompt。
62
+ - **写入不因注入预算失败**:`record` / `commit` 照常成功、给回执;工具按上表四类任务组合估算最坏查询情形(全局条目+各 scope 维度最重的单一切片,切片按大小写无关归并、轻重按写作时真正读到的字段算,与真实查询同一把尺),装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。收到提醒就用白话转告作者并建议「整理作者记忆」。写入落盘后另一级 store 读不出来(书目录不存在、`--book` 与书级记录不符等)也照常给回执,`warnings` 注明本次提醒没算上它——已有回执就是已记住,不要换 `event_id` 重试。写书级条目时「本书+全局」按实际条目精确计算;写项目级条目时只看得到项目级 store,顺手传 `--book-root` 就把当前这本书也算进提醒。查询按 **重要度 → 本书例外 → 最近更新** 排序装填(同一范围的条目必在同一 store,「最近」按该 store 的修订号比,不跨 store 比较),先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里,写入时按偏好的实际分量填,不要一律 `high`。
63
+ - 注入预算之外还有一道硬上限:`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到(远在注入预算之后),碰到就走「整理作者记忆」;`forget` 这类减量操作在满编时照常可用。
53
64
  - 查询项是低优先级倾向,不是逐条打卡清单。自然吸收即可,不复述画像、不刻意提高词面命中率,也不得为命中偏好牺牲正文连贯、节奏、字数或本书既定笔调。
54
- - 不安装会记录全部用户消息的 prompt hook。自然语言是否属于长期习惯仍需 agent 判断;这样不能承诺隐式偏好 100% 捕获,但避免把一次性要求、私人对话和小说事实静默写入长期记忆。需要确定写入时,用户可明确说“记住:……”,并以回执验收。
65
+ - 不安装会记录全部用户消息的 prompt hook,也不在作者没开口时观察他:不从反复修改、成稿或操作轨迹推断偏好写入。只记作者明确表达的偏好;自然语言是否属于长期习惯仍需 agent 判断,拿不准就只执行不记录。需要确定写入时,用户可明确说“记住:……”,并以回执验收。
66
+
67
+ ## 回执怎么告诉作者
68
+
69
+ 回复就两行纯文本,不加代码块或引用格式:第一行用一句人话说记住了什么、管哪本书或哪类场合,如「记住了:《{书名}》的对话一律用「」,以后写这本书都照这个来;想改随时说。」;第二行是机器回执作凭证,如「技术备注:Author Memory Receipt: r1 · BP001」。
70
+
71
+ - 确认、替换、忘掉同理:「好,这条生效了:……」「换成了:……,原来的「……」不再用」「忘掉了:……」。只进待确认时说「这条先记在待确认里,你说"确认"才生效」;有冲突时用原话说明跟哪条旧习惯冲突。
72
+ - `warnings` / `omitted_ids` 不原样贴:说「你的习惯攒得有点多,写正文时这几条可能顾不上:「……」」,并建议说「整理作者记忆」。不提字节、prompt、kind、scope;编号只能跟着原话出现。
55
73
 
56
74
  ## 捕获判定
57
75
 
@@ -59,13 +77,19 @@
59
77
  |---|---|
60
78
  | “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`,`source=explicit_user` |
61
79
  | 用户明确接受助手提出的长期做法 | `active`,`source=accepted_suggestion` |
62
- | 同类修改反复出现,但用户没说这是长期规则 | `pending`,`source=repeated_correction` |
63
- | 从成稿或操作轨迹推断出的模式 | `pending`,`source=inferred_pattern` |
80
+ | 作者原话像长期偏好但范围或稳定性含糊 | `pending`,取当前最窄合理范围;待确认只来自作者自己的话 |
81
+ | 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断;作者没开口的偏好不进记忆 |
64
82
  | “这一章别……”“这次给我……”等一次性要求 | 只执行,不记录 |
65
83
  | 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪,不写作者记忆 |
66
84
  | 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |
67
85
 
68
- 保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion` 只做不改变语义的紧凑归纳。范围规则:
86
+ 保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion` 只做不改变语义的紧凑归纳,**新建条目限一句话(≤120 字节,约 40 个字)**;需要解释的背景写进 `reason`(不进 prompt 载荷),不另开字段。
87
+
88
+ **一条偏好就是一条记录,例外和限定不许拆出去单列。** 「以后少用破折号,对话里也别用,除非表示打断」是一条带例外的偏好,必须整条写成一个 `assertion`(「破折号少用、对话里也不用,只在表示打断时保留」)。超编时条目是逐条被丢的,把「除非表示打断」拆成独立一条,就可能只丢掉例外、把作者明说过的限定变成送进正文的绝对禁令。只有原话确实塞了**几条互不依赖**的偏好(如「多用短句」+「章末留钩子」)才拆成几条。整句写不进 120 字节时压缩措辞,不要切掉限定词。
89
+
90
+ 升级前写下的长断言不受新上限约束:原样重申它会**强化**原条目(确认次数 +1),不会因超长被拒;只有真正新建条目才校验 120 字节。
91
+
92
+ 范围规则:
69
93
 
70
94
  - “本书 / 这个角色 / 这次连载” → `book`;
71
95
  - “都市文 / 这类题材” → `genre`;
@@ -73,33 +97,41 @@
73
97
  - “以后 / 一贯 / 我习惯”且无更窄限定 → `global`;
74
98
  - 范围含糊但可能稳定 → 取当前最窄合理范围并置 `pending`。
75
99
 
76
- 类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`。
100
+ 类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`;工具会拒绝推断类来源,存量 state 里的旧来源条目照常可读、可确认、可退役。
77
101
 
78
102
  ## 冲突、撤回与强化
79
103
 
80
104
  - 同一类型、范围、归纳文本再次出现时,脚本强化原条目,累加证据和确认次数,不重复建条目。
81
- - 新偏好与 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。
82
- - 作者选定新规则时用 `replace`,一次性启用新条目并把旧条目标成 `superseded`。
105
+ - 新偏好与同一 store 里的 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。本书例外与全局规则不算冲突。
106
+ - 同一范围的规则改版用 `replace`,启用新条目并将旧条目标成 `superseded`。本书例外用 `remember` 新建 book 条目(传 `--book-root`),保留 global 习惯;只有作者明确撤销或改变旧规则范围时才跨范围替换,跨 store 时拆成 `forget` + `remember`。
83
107
  - pending 可以用 `decide=activate|reject`;冲突候选不能绕过旧规则直接 activate。
84
108
  - 作者说“忘掉 / 这不再是我的习惯”时用 `forget`,保留历史证据但不再加载。
85
109
  - active 条目的语义不可原地偷改;语义变化必须 replace,历史才可审计。
86
110
 
111
+ ## 整理作者记忆
112
+
113
+ 作者说「整理作者记忆」,或回执 `warnings`/查询 `omitted_ids` 提示超编时:读项目级与当前书的 `作者画像.md`(每条都标了范围、重要度、把握和确认次数,重要度就是超编时的去留依据),提出合并同义条(`replace` 多合一)、退役过时条(`forget`)、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案;项目级画像里还有「本书:」条目时,「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认(编号只放括号里),确认后按 store 各汇成一份 `commit` 事务提交(一份事务只写一个 store)。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条,不要靠删限定词把两条凑成一条。整理只由作者发起或确认,不自动执行。
114
+
87
115
  ## 运行工具
88
116
 
89
117
  先依次尝试 `python3`、`python`、`py -3` 找到 Python 3,再从当前 skill 根运行本地副本:
90
118
 
91
119
  ```text
92
- {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区}
93
- {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} --input {单事件.json}
94
- {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query --workspace {工作区} [--kind prose_style] [--book {书名}] [--genre {题材}] [--workflow {流程}]
95
- {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} --input {事务.json}
96
- {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区}
120
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区} [--book-root {书目录}]
121
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json
122
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind {类型}(必传,可重复) [--genre {题材}] [--workflow {流程}]
123
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json
124
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}
125
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区} [--book-root {书目录}]
97
126
  ```
98
127
 
99
- - `record`:常用单事件入口,自动读取当前修订、首次自动初始化;`event_id` 相同且内容相同会幂等返回原回执,内容不同会失败。
100
- - `query`:只读相关 active 条目;`--kind` 可重复,不存在 state 时返回空结果且零写入。返回的 `omitted > 0` 时收窄 kind / book / genre / workflow 后重查,不得改读完整画像规避预算。
101
- - `commit`:高级批量入口;先在内存完成 schema、引用、容量和所有视图校验,最后原子替换 state。事务文件在成功前必须保留;过期修订会在任何写入前失败。
102
- - `check`:从 state 重建并逐字核验所有派生视图。
128
+ 所有子命令都可加 `--book {书名}` 覆盖书名;正在写某本书时一律带上 `--book-root`,书级操作没有它会直接报错。事件与事务 JSON 写在 `{工作区}/.story/work/` 下(不写系统 `/tmp`),成功后删掉;`book` 条目的 `scope.value` 填书名(书级 store 已记着书名就用它,首次取书目录名)。
129
+
130
+ - `record`:常用单事件入口,按路由规则落到项目级或书级 store,自动读取该 store 的当前修订、首次自动初始化;`event_id` 相同且内容相同会幂等返回原回执,内容不同会失败。原样重申已有条目的 `assertion` 会强化该条(不受 120 字节新建上限约束)。返回里的 `store` / `book` 说明写到了哪一级,`warnings` 是预算提醒,按「回执怎么告诉作者」用白话转告。
131
+ - `query`:只读相关 active 条目,项目级与书级合并返回;`--kind` 必传、可重复,两级 state 都不存在时返回空结果且零写入。输出按 重要度 → 本书例外 → 最近更新 排序装填;装不下的条目跳过而不中断(一条长的不挡后面的短条),漏下的 ID 按同一优先级报进 `omitted_ids`(最多列 20 条,`omitted` 是真实总数)。**`omitted_ids` 非空=记忆超编**——转告作者并建议「整理作者记忆」,它不是「没有更多了」,也不得改读完整画像规避预算。
132
+ - `commit`:高级批量入口;一份事务只写一个 store,先在内存完成 schema、引用、容量和所有视图校验,最后原子替换 state。事务文件在成功前必须保留;过期修订会在任何写入前失败。
133
+ - `migrate`:把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store,幂等,中途失败直接重跑;返回 `migrated`(源→新编号),没有存量时为空。
134
+ - `check`:从 state 重建并逐字核验所有派生视图;传 `--book-root` 时两级一起核验。
103
135
 
104
136
  ## 事务格式
105
137
 
@@ -128,7 +160,7 @@
128
160
  }
129
161
  ```
130
162
 
131
- 把文件交给 `record`。待确认项的 `status` 用 `pending`;冲突候选用 `conflict` 并填写 active ID。确认或拒绝候选时,把下列对象作为新事件的 `operation`:
163
+ 把文件交给 `record`(book 范围的事件同时传 `--book-root`)。待确认项的 `status` 用 `pending`;冲突候选用 `conflict` 并填写同一 store 里的 active ID。确认或拒绝候选时,把下列对象作为新事件的 `operation`(`BP` 编号的事件传 `--book-root`):
132
164
 
133
165
  ```json
134
166
  {"action":"decide","item_id":"AP002","decision":"activate","quote":"对,这就是我的长期习惯。","reason":"作者明确确认"}
@@ -139,17 +171,17 @@
139
171
  ```json
140
172
  {
141
173
  "action": "replace",
142
- "old_ids": ["AP001", "AP002"],
174
+ "old_ids": ["AP001"],
143
175
  "preference": {
144
176
  "kind": "prose_style",
145
- "scope": {"level": "book", "value": "雾港来信"},
146
- "assertion": "本书对话允许更长的试探,但避免解释设定",
147
- "quote": "这本书可以让对话慢一点,多试探,但还是别拿台词讲设定。",
177
+ "scope": {"level": "global", "value": null},
178
+ "assertion": "以后对话允许更长的试探,但避免解释设定",
179
+ "quote": "把以前对话都要短的习惯替换掉:以后可以让对话慢一点,多试探,但还是别拿台词讲设定。",
148
180
  "source_ref": "conversation:2026-08-25",
149
181
  "source": "explicit_user",
150
182
  "confidence": "high",
151
183
  "importance": "high",
152
- "reason": "作者明确用本书新规则替代旧候选"
184
+ "reason": "作者明确替换原有全局规则,不是新增本书例外"
153
185
  }
154
186
  }
155
187
  ```
@@ -160,4 +192,4 @@
160
192
  {"action":"forget","item_id":"AP003","quote":"忘掉这个偏好。","reason":"作者明确撤回"}
161
193
  ```
162
194
 
163
- 需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`。操作按数组顺序应用,任一步失败则整份事务零写入。成功后删除临时输入文件;显式记忆请求还要把工具返回的回执原样告诉用户。
195
+ 需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`。操作按数组顺序应用,任一步失败则整份事务零写入。成功后删除临时输入文件;显式记忆请求按「回执怎么告诉作者」转告。
@@ -1,8 +1,10 @@
1
1
  # AI味禁用词与句式表
2
2
 
3
+ > 表达默认值服从 [style-resolution.md](style-resolution.md);文件结构与事实约束不豁免。
4
+
3
5
  <!-- 同名副本×6 字节同步,改动后跑 scripts/check-shared-files.sh -->
4
6
 
5
- ## 最毒禁用句式(出现即修,最高优先级)
7
+ ## 默认优先检查的句式(先对照本书文风)
6
8
 
7
9
  写网文最毒的 AI 句式,作者一旦养成就会反复出现。Gate A 第一遍扫描必须命中:
8
10
 
@@ -0,0 +1,20 @@
1
+ # 长篇写前召回
2
+
3
+ 本文承接 workflow-chapter.md 步骤 3;路径优先级及缺失修复见 [project-files.md](project-files.md)。
4
+
5
+ - **模块召回、题材卡与文风召回**:
6
+ - **成熟项目短路径(召回降档)**:`custom_style=true`、题材卡有内容,且细纲目标情绪与单元卡情绪/节拍均有效时,**跳过 (a)(b)(e)(f)**;情绪和节奏取细纲/单元卡,(c)(d) 照常执行,(g) 输出缩减集。组装脚本判定并写入核对报告;条件不足走全量召回。降档不检查对标情绪/节奏主产物,也不触发其 fail-fast;代价是没有匹配章扩写技法与原文锚点。目标情绪敷衍时不得降档。
7
+ - ① 本章目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 用在哪些段落?答不出 → 先回读参考再动笔
8
+ - (a) **情绪模块召回**:按「对标书路径查找」规则读 `{对标书路径}/剧情/情绪模块.md`,选出 1 个与本章目标情绪最贴近的 `selected_emotion_module`(读者需求、触发器、戏剧单元、可替换要素、反抄袭提醒)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
9
+ - (b) **节奏召回**:读 `{对标书路径}/剧情/节奏.md`,选出 1 条 `rhythm_reference`(关键信息 → 扩写技法 → 情绪触动点 → 爆发/冷却)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
10
+ - (c) **题材正文提示卡召回**:优先读 `设定/题材正文提示卡.md`;缺失则先读 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引,按主题材精确匹配后只读取 `references/genre-prose-cards/` 中对应单题材卡(如 都市脑洞 / 豪门总裁 / 年代 / 双男主;低置信卡必须在意图确认标注低置信,并要求同题材对标校准),无命中再读 `references/style-genre-modules.md` 通用流派模块。跨题材时主题材抽 3-5 条、辅题材抽 1-2 条,生成短 `genre_prose_card`(题材边界、核心逻辑、读者期待、核心爽点/情绪、正文落点、前中后期打法、节奏密度、场景颗粒、禁止漂移、本章取舍、卡片置信度)。题材卡只约束正文层题材味,不改细纲剧情、不覆盖 `selected_emotion_module` / `rhythm_reference` / `设定/文风.md`;只在内部校准取舍,正文里不得出现卡名/标签/置信度/条目/合规自评
11
+ - (d) **文风召回**:先直接读 `设定/文风.md`(不经 explorer):有可执行表达要求即置 `custom_style=true`,不设最低字数;空白、纯标题或待补充不算。全文按 `style-resolution.md` 作权威风格基,`设定/_文风摘要.md` 仅作索引,写作与去味都传全文路径及同一 `style_resolution`。有自定义文风时对标只补未声明的维度;否则按「对标书路径查找」规则读 `{对标书路径}/文风.md`(路径优先 `{项目}/对标/{书名}/`,回退 `拆文库/{书名}/`);多本对标书时从 `设定/题材定位.md` 读 `主对标书` 字段。**未进入自定义文风模式且**文风文件不存在 → **fail-fast 报错**:「对标书 X 缺少 文风.md。请用 `/story-long-analyze` 跑 Stage 6 生成文风,再 `/story-import` 同步。」不 inline 生成(自定义文风模式则不 fail-fast;情绪 / 节奏轴 `missing_primary_contract` 仍独立阻塞)
12
+ - (e) **匹配章节挑选**:从 `{对标书路径}/章节/*_摘要.md` grep `基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)`(全角冒号),按本章目标情绪挑章 K——多章同基调时选择规则:先看爽点类型是否接近,再看情节点数量/原文章节估算字数是否接近本章目标字数,最后取章节号最小者;必读 `{对标书路径}/章节/第K章_摘要.md`,若同章存在 `第K章_深度拆解.md` 则加读,否则回退黄金三章深度拆解/文风文件里的可借鉴技巧,不因非黄金三章缺少深度拆解而失败
13
+ - (f) **结构化模块召回**:从对标的结构化子目录(角色/剧情/设定)中按本章情节检索相关模块;若与 `剧情/情绪模块.md` / `剧情/节奏.md` 冲突,权威文件优先,记录 `conflict`
14
+ - (g) 输出"主对标召回摘要 + 副对标召回摘要 + selected_emotion_module + rhythm_reference + genre_prose_card + 文风召回指令 + 原文锚点片段引用",作为 narrative-writer 的输入。**多对标书时**参 `references/cross-book-recall.md`:主对标提供文风、原文锚点及可用的情绪/节奏值;副对标/参考对标按阶段预算提供结构化摘要,不限制登记书目,不读取副书 `文风.md` / 原文,超过预算时裁条目不裁书目记录。
15
+ - **快捷路径**:项目已部署 story-explorer agent 时,可一次性召回文风/模块材料。
16
+ - 按本文件顶部规则确认 story-explorer 已部署。
17
+ - 查询类型:`benchmark_style_load`;传入项目目录、章节号、目标基调/字数和爽点类型。
18
+ - 需要返回:`style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、来源路径、匹配章节、锚点片段、`gaps`。
19
+ - `gaps` 分流:`no_benchmark` → `custom_style` 为真则用 `设定/文风.md` 写、情绪/节奏取本书内部材料,否则标「无对标参考」;`missing_primary_contract` → 按 `repair_action` 修复(重跑拆文或导入)并停止生成,自定义文风不豁免;`benchmark_book_missing` → 停止核对登记名,不换书;`conflict` / `module_rhythm_conflict` → 意图里说明冲突并按情绪模块/节奏的权威执行;profile_missing → custom_style 为真则用本书文风继续,否则停止;`profile_degenerate` → 有本书文风就用,没有回默认;`tone_match_failed` → 只用整书文风。其余字段原样进 writer prompt,`gaps` 原值保留在写前准备记录里。
20
+ - 主会话另行直接读 `设定/文风.md`:含实质内容时作为本书风格基准;但不豁免情绪/节奏缺失。
@@ -60,3 +60,29 @@ description: 多对标跨书召回
60
60
  | `character_archetypes` | 反差人物 | `character-basics.md` / `character-design-methods.md` + 当前题材卡 |
61
61
  | `reusable_structures` | 可复用手法 | `outline-methods.md` / `plot-core-methods.md`,按结构功能选择 |
62
62
  | `reversal_type` | 反转类型(7 枚举) | `long-reversal.md` 对应骨架 |
63
+
64
+ ## 公共灵感标签召回
65
+
66
+ **本节独立于上文「≥2 本才启用」的多对标触发条件:只要工作区存在 `灵感库/` 即可用,单对标或无对标项目亦然。**
67
+
68
+ `灵感库/` 与副对标召回是两条独立通道:灵感库只提供**去专名的跨书机制抽象**(带标签的 active CBA 卡),副对标提供本书级结构化摘要。灵感库不存在时本节整体跳过,只记 `gaps.inspiration_library_missing`,不阻塞。
69
+
70
+ 每次设定、卷纲或细纲任务先生成需求标签(逐章正文写前召回不走本通道,灵感经细纲进入正文)。轴以 `灵感库/灵感索引.csv` 的标签轴契约为准;**值必须取自 `灵感库/标签词表.md` 的受控值**——按下表定位本书语境后,映射到词表中最贴近的值再组查询,不自造、不改写同义词(query 靠精确匹配,自造词等于查不到);词表文件缺失时以 query 返回的 `axis_inventory` 现存值为准:
71
+
72
+ | 轴 | 取值来源 |
73
+ |---|---|
74
+ | 题材 | `设定/题材定位.md` |
75
+ | 读者需求 | 本书读者契约与当前期待债 |
76
+ | 情绪 | 本阶段/本章目标情绪 |
77
+ | 关系动作 | 当前角色关系要发生的动作,可空 |
78
+ | 剧情功能 | 开篇立约、升级兑现、关系翻转、信息揭示、高潮结算等 |
79
+ | 节奏位置 | 黄金三章、前期、中段、卷末、高潮前/后,可空 |
80
+ | 适用阶段 | 设定、卷纲或细纲 |
81
+ | 风险 | 当前要避开的同质化、失衡、铺垫不足、角色降智、兑现拖延等 |
82
+
83
+ 消费规则:
84
+
85
+ 1. 只筛 `layer=跨书灵感聚合` 且 `status=active`,按标签打分取 Top 3(设定/卷纲阶段最多 8)。
86
+ 2. 只读命中的 CBA 全卡——卡自包含机制链、可变参数、成立条件、反例与风险;**不沿来源 ID 回查 EM/NM**,来源仅供审计溯源。
87
+ 3. 输出 `selected_inspiration_aggregates`:CBA ID、命中标签、机制链、可变参数、成立条件、风险、来源数量。它只影响设计选择,不覆盖细纲事实、项目设定或自定义文风;CBA 不作文风样本,也不触发任何原文读取。
88
+ 4. 零命中先看 query 返回的 `unmatched_tags` 与 `axis_inventory`,纠词重查一次;仍零命中才记 `gaps.inspiration_tag_no_match`,不阻塞。同一 CBA 在一本书内最多派生 2 个候选变化。
@@ -47,6 +47,10 @@
47
47
  | 所有角色说话方式一样 | 模糊 |
48
48
  | 对话说服人物 | 现实中没人被几句话说服,用突发状况代替 |
49
49
  | 情绪写完方向变了 | 需回退到情绪拆分 |
50
+ | 捧哏工具人、鹦鹉复读对方原话 | 配角只剩接话功能 |
51
+ | 高位者长篇自证、说话不分场合 | 身份和处境塌了 |
52
+ | 情绪水肿咆哮、生死场景嘴碎 | 越吵越不紧张 |
53
+ | 悬念正攒着就被台词说破 | 期待提前泄掉 |
50
54
 
51
55
  ---
52
56
 
@@ -133,13 +137,15 @@
133
137
 
134
138
  角色情绪是连续的、循序渐进的。从生气到高兴:生气 → 不那么生气 → 不生气 → 高兴,每次转变需对应事件触发。不能跳步。
135
139
 
136
- ### 情绪四步法(缺一不可)
140
+ ### 情绪与行动的因果检查
137
141
 
138
142
  1. 遇到事件(失衡状态)
139
- 2. 情绪反应(外在表现:动作、表情、语言)
140
- 3. 内心思考(即使没思考也要写出"没有思考",表达鲁莽)
143
+ 2. 情绪反应(可以直写,也可以体现在语言、选择或有功能的动作中)
144
+ 3. 内心思考(只写影响理解的判断;鲁莽可以直接体现在行动里)
141
145
  4. 采取行动(基于前三步结果回应)
142
146
 
147
+ 用于检查转变是否成立,不要求逐步写满;上下文已清楚的反应或思考无需补写。
148
+
143
149
  ### 对话不平淡三思路
144
150
 
145
151
  - 对话本身带来/强化某个核心驱动力(期待、爽感、悬念)
@@ -154,7 +160,7 @@
154
160
  - 大量信息通过对话展示会显得啰嗦,部分信息转化为情节、心理描写、旁白、环境、动作
155
161
  - 用角色的语气和立场包裹信息,不是机械陈述设定
156
162
  - 设定用到哪个稍微带出来就行,不需完完全全讲明白前因后果
157
- - **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G 同样适用于角色台词。拆成角色在压力下挤出的半句话 + 身体反应 + 留白,用到哪带哪点
163
+ - **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G 同样适用于角色台词。按角色当下的目的和对话阻力取舍信息,用到哪带哪点,不固定拼接身体反应。
158
164
 
159
165
  ### 信息拉扯示例(以"主角新书起飞了"为例)
160
166
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## 长篇单元情绪引擎(通用正向框架)
8
8
 
9
- 每个剧情单元先设计能制造情绪与兑现的**正向发动机**,再做安全审查:
9
+ 每个剧情单元先设计能制造情绪与兑现的**正向发动机**,再按契约四问检查:
10
10
 
11
11
  > **核心情绪命题 → 承载对象/情绪缺口 → 受阻或缺口维持原因 → 本轮触发 → 主角不可替代的点火/转化动作 → 意义变化或可见兑现 → 题材/契约兑现**
12
12
 
@@ -15,7 +15,7 @@
15
15
  ### 正向发动机与负向护栏的顺序
16
16
 
17
17
  1. **先设计正向发动机**:明确读者会为什么投入,本轮如何让这份投入改变意义并得到可见兑现。
18
- 2. **后用主角代理权/成长负向护栏诊断**:以 `reader-contract-and-progression.md` 的因果权 + 结算权、期待所有权与终局储备排查契约/推进失败。“安全”只代表没踩红线,不代表好看;护栏不能代替情绪发动机。
18
+ 2. **后用主角代理权/成长负向护栏诊断**:按 `reader-contract-and-progression.md`「契约四问」排查契约/推进失败。“安全”只代表没踩红线,不代表好看;护栏不能代替情绪发动机。
19
19
 
20
20
  ### 合理性五问
21
21
 
@@ -48,7 +48,7 @@
48
48
  - [ ] 没有空洞的抒情段落
49
49
  - [ ] 没有连续多段同一情绪
50
50
  - [ ] 对话符合人物身份(不同人说话方式不同)
51
- - [ ] 情绪通过动作落地(不是直接说"他很难过")
51
+ - [ ] 情绪词有落点(融进动作句、当对话提示语、结句后直接换事或接场内物件),不是接更多情绪
52
52
  - [ ] 标题行以外没有章节/写作元信息:不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类词;需要承接前文时改成角色能感知的事件锚点或相对时间;故事内真实阅读/讨论“第X章”或真实读者身份语境除外
53
53
 
54
54
  ### 连载连续性
@@ -133,7 +133,7 @@
133
133
  | 空泛总结 | 「他终于明白了」「一切尽在不言中」 | 删掉,用行动代替 |
134
134
  | 套路修辞 | 「命运仿佛在和他开玩笑」 | 删掉或换成具体描述 |
135
135
  | 比喻堆叠 | 连续多处「像/好像/仿佛/如同」,每个画面都靠比喻解释 | 只留最有叙事功能的少数比喻,其余改成动作、物件、声音或后果 |
136
- | 情绪标签 | 「他感到一阵悲伤」 | 改为行为表现 |
136
+ | 空转情绪句 | 「他感到一阵悲伤」,无落点 | 删,或写他此刻做不成的事;直写本身不算缺陷 |
137
137
  | 心理描写空转 | 内心独白无新信息、重复同一情绪或复述读者已知 | 只压缩空转部分;带新信息、决断或情绪转折的独白不按句数压缩 |
138
138
 
139
139
  ### 维度 5:逻辑连贯
@@ -158,21 +158,12 @@
158
158
  | AI 腔重 | de_ai | 替换禁用词、改写句式 |
159
159
  | 小问题多 | polish | 打磨语言细节 |
160
160
 
161
- ### 读者契约与终局储备双向审查
161
+ ### 读者契约与终局储备
162
162
 
163
- 参 `reader-contract-and-progression.md`。先问“无毒吗”,再问“好看吗”:**无毒不等于好看**,没有 契约破坏 只代表不踩雷,还要确认情绪兑现足够强。
164
-
165
- - [ ] 读者契约:本章/本卷是否兑现开篇承诺,还是把核心卖点交给机构、配角或偶然性?风险标记:契约安全 / 需补强 / 契约破坏。
166
- - [ ] 主角代理权:按因果权 + 结算权审查,而非按出场时长;用“关键节点四问”核对决定、不可替代选择、后果与核心结算。配角可执行局部动作,但不能无声夺走期待所有权。
167
- - [ ] 期待债:承诺是否被偿还、延期并支付利息,还是被解释/流程/设定吞掉?
168
- - [ ] 终局储备:本单元是否动用了本阶段还不该解锁的终局底牌(宿敌/真相/身份/金手指上限)?是否让某条升级线逼近天花板、后面没台阶接?两问皆否即放行——单章一战多得(多线齐涨)是好设计,不算超速。
169
- - [ ] 兑现归属:期待所有权是否按承诺结算;自愿让渡只有在“长期净收益为负 + 控制/因果权下降”同时出现时亮红灯,战略性让步的更大控制/未来收益/权力/信息交换是否可见?
170
- - [ ] 节奏续接:高潮/兑现后是否允许短暂低压和小而可见的收益/奖励,而非机械立即加危机?新元素是否支付换书债、没有逃避旧承诺?
171
- - [ ] 题材特定风险:履约爽文/能力幻想中,主角是否反复以愚蠢或可避免的无能制造灾难并由他人收拾,损害因果权与结算信任?
172
- - [ ] 反向审查:若删除“安全解释”,情绪是否更强?若保留风险情节,是否带来更强期待、代价或爽点?
173
-
174
- - [ ] 综合线:契约、主角代理权、期待债、终局储备是否互相支撑,而不是只做到“无毒”。
163
+ 按 `reader-contract-and-progression.md`「契约四问」审,标 契约安全 / 需补强 / 契约破坏;答不上来的那问再读对应小节。四问都过只代表无毒,再补两问看好不好看:
175
164
 
165
+ - [ ] 删掉某处“安全解释”,情绪会不会更强?保留风险情节是否带来更强期待、代价或爽点?
166
+ - [ ] 高潮或兑现后是否允许短暂低压和小而可见的收益,而非机械立即加危机?
176
167
 
177
168
  ### 单元情绪因果可证伪检查
178
169
 
@@ -1,5 +1,7 @@
1
1
  # 长篇正文格式
2
2
 
3
+ > 表达默认值服从 [style-resolution.md](style-resolution.md);文件结构与事实约束不豁免。
4
+
3
5
  > 只约束长篇章节的段落、对话、标点与工程元信息。短篇 `###1.` 小节、8–15 节全文结构和 500–800 字/节口径不适用。
4
6
 
5
7
  ## 章节与段落
@@ -279,6 +279,8 @@
279
279
 
280
280
  建卡时做一次**剧情批召回**:读剧情单元卡「对标剧情参照」指向的剧情单元(≤3 个文件)的「结构分布」「情节点索引」,回查该书 `剧情/节奏.md` 同章节区间的爽点循环 / 触动点与被引情绪模块卡,提炼 5-8 拍共性节拍写入剧情单元卡「单元节拍/章功能分配」,单元情绪引擎字段对照主对标 `剧情/情绪模块.md` 的可复现模块校准。若主产物存在但被引的单个情绪模块卡未命中,只跳过该卡;`剧情/情绪模块.md` 或 `剧情/节奏.md` 文件缺失仍按上方 fail-fast 规则先修复。换素材与修硬伤纪律同上方迁移步骤 3/4——保留情绪链和功能位,对象、场景、事件全换,对标弱处理就地修正。结论固化进剧情单元卡后,逐章细纲只消费剧情单元卡,不重读剧情单元。
281
281
 
282
+ **「只消费剧情单元卡」管的是不重读对标,不冻结逐章建纲。** 排纲当场发现的缺口(某拍无对手、数值没验过、地点无底图、角色既定规矩挡场之类)按新增物三级处置(直接写/写了要报:先落档再引用/先问作者:挂起提案,见 workflow-setup.md「缺什么按新增物三级处置」),处置完记一行,批末汇进排纲底稿的「**建纲追加**」小节(见 workflow-setup.md「排纲自查与细纲」步骤 5);下一批供给自查以该小节为固定输入(按当场缺口类别加问批前盘点项)。
283
+
282
284
  日更中途发现卷纲缺少「对标剧情参照」等当前协议必需字段时,先补齐卷纲再建细纲;锁定卷纲不得自动回写,必须停在补纲边界。节拍分析过程不写进追踪文件,只有最终影响未来连续性的约束或下一章承诺才进入本章追踪事务。
283
285
 
284
286
  ## 章节定位与张弛(破「每章像短篇」)