@oh-story/dsh 0.1.0

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 (488) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/cordis.patch.yml +3 -0
  4. package/lib/client.js +1201 -0
  5. package/lib/client.js.map +7 -0
  6. package/lib/drama/LICENSE.upstream +21 -0
  7. package/lib/drama/manifest.json +1012 -0
  8. package/lib/drama/skills/short-drama/SKILL.md +153 -0
  9. package/lib/drama/skills/short-drama/agents/openai.yaml +4 -0
  10. package/lib/drama/skills/short-drama/assets/creator-decision.example.jsonl +4 -0
  11. package/lib/drama/skills/short-drama/assets/production-observation.example.jsonl +2 -0
  12. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +36 -0
  13. package/lib/drama/skills/short-drama/assets/reference-observation.example.jsonl +2 -0
  14. package/lib/drama/skills/short-drama/references/audience-reveal.md +74 -0
  15. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +94 -0
  16. package/lib/drama/skills/short-drama/references/creator-workflow.md +82 -0
  17. package/lib/drama/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +73 -0
  18. package/lib/drama/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +74 -0
  19. package/lib/drama/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +79 -0
  20. package/lib/drama/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +75 -0
  21. package/lib/drama/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +85 -0
  22. package/lib/drama/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +72 -0
  23. package/lib/drama/skills/short-drama/references/knowhow-index.md +80 -0
  24. package/lib/drama/skills/short-drama/references/lifecycle-commands.md +130 -0
  25. package/lib/drama/skills/short-drama/references/look-development.md +52 -0
  26. package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +58 -0
  27. package/lib/drama/skills/short-drama/references/production-form-profiles.md +126 -0
  28. package/lib/drama/skills/short-drama/references/reference-roles.md +142 -0
  29. package/lib/drama/skills/short-drama/references/runtime-preflight.md +27 -0
  30. package/lib/drama/skills/short-drama/scripts/project_tool.py +1963 -0
  31. package/lib/drama/skills/short-drama/scripts/selftest.py +287 -0
  32. package/lib/drama/skills/short-drama-assets/SKILL.md +187 -0
  33. package/lib/drama/skills/short-drama-assets/agents/openai.yaml +4 -0
  34. package/lib/drama/skills/short-drama-assets/assets/character-look.example.jsonl +3 -0
  35. package/lib/drama/skills/short-drama-assets/assets/continuity.example.jsonl +4 -0
  36. package/lib/drama/skills/short-drama-assets/assets/decisions.example.jsonl +5 -0
  37. package/lib/drama/skills/short-drama-assets/assets/location-view.example.jsonl +3 -0
  38. package/lib/drama/skills/short-drama-assets/assets/occurrences.example.jsonl +5 -0
  39. package/lib/drama/skills/short-drama-assets/assets/prop-state.example.jsonl +3 -0
  40. package/lib/drama/skills/short-drama-assets/examples/minimal/characters.jsonl +2 -0
  41. package/lib/drama/skills/short-drama-assets/examples/minimal/looks.jsonl +2 -0
  42. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +89 -0
  43. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +164 -0
  44. package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +123 -0
  45. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +146 -0
  46. package/lib/drama/skills/short-drama-assets/references/location-and-view.md +84 -0
  47. package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +111 -0
  48. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +107 -0
  49. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +136 -0
  50. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +171 -0
  51. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +267 -0
  52. package/lib/drama/skills/short-drama-assets/scripts/selftest.py +89 -0
  53. package/lib/drama/skills/short-drama-develop/SKILL.md +157 -0
  54. package/lib/drama/skills/short-drama-develop/agents/openai.yaml +4 -0
  55. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -0
  56. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +120 -0
  57. package/lib/drama/skills/short-drama-develop/assets/episode-map.jsonl +1 -0
  58. package/lib/drama/skills/short-drama-develop/assets/story-engine.md +181 -0
  59. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +219 -0
  60. package/lib/drama/skills/short-drama-develop/references/creative-reference-intake.md +57 -0
  61. package/lib/drama/skills/short-drama-develop/references/director-brief-craft.md +113 -0
  62. package/lib/drama/skills/short-drama-develop/references/episode-design.md +509 -0
  63. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +240 -0
  64. package/lib/drama/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +112 -0
  65. package/lib/drama/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +51 -0
  66. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +51 -0
  67. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +51 -0
  68. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +51 -0
  69. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +51 -0
  70. package/lib/drama/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +51 -0
  71. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +51 -0
  72. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +109 -0
  73. package/lib/drama/skills/short-drama-develop/references/genre-cards//350/201/214/345/234/272/345/226/234/345/211/247.md +51 -0
  74. package/lib/drama/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +51 -0
  75. package/lib/drama/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +51 -0
  76. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +92 -0
  77. package/lib/drama/skills/short-drama-develop/references/mechanism-loop.md +282 -0
  78. package/lib/drama/skills/short-drama-develop/references/multi-episode-intake.md +128 -0
  79. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +211 -0
  80. package/lib/drama/skills/short-drama-develop/references/reveal-reversal-payoff.md +99 -0
  81. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +293 -0
  82. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +88 -0
  83. package/lib/drama/skills/short-drama-develop/references/story-craft.md +359 -0
  84. package/lib/drama/skills/short-drama-develop/scripts/episode_intake.py +699 -0
  85. package/lib/drama/skills/short-drama-develop/scripts/selftest.py +47 -0
  86. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +181 -0
  87. package/lib/drama/skills/short-drama-image-prompts/agents/openai.yaml +4 -0
  88. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +187 -0
  89. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +37 -0
  90. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +128 -0
  91. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +31 -0
  92. package/lib/drama/skills/short-drama-image-prompts/examples/minimal-image-prompt-specs.jsonl +2 -0
  93. package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +154 -0
  94. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +231 -0
  95. package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +122 -0
  96. package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +152 -0
  97. package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +96 -0
  98. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +38 -0
  99. package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +177 -0
  100. package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +140 -0
  101. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +92 -0
  102. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +89 -0
  103. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +443 -0
  104. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +93 -0
  105. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +245 -0
  106. package/lib/drama/skills/short-drama-novel-analyze/agents/openai.yaml +4 -0
  107. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +3 -0
  108. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +116 -0
  109. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +124 -0
  110. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +155 -0
  111. package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +141 -0
  112. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +67 -0
  113. package/lib/drama/skills/short-drama-novel-analyze/scripts/novel_index.py +651 -0
  114. package/lib/drama/skills/short-drama-novel-analyze/scripts/selftest.py +51 -0
  115. package/lib/drama/skills/short-drama-produce/SKILL.md +103 -0
  116. package/lib/drama/skills/short-drama-produce/agents/openai.yaml +4 -0
  117. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +140 -0
  118. package/lib/drama/skills/short-drama-produce/references/providers/gpt-image-2.md +24 -0
  119. package/lib/drama/skills/short-drama-produce/references/providers/minimax-music.md +25 -0
  120. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +40 -0
  121. package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +60 -0
  122. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +1635 -0
  123. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +964 -0
  124. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +134 -0
  125. package/lib/drama/skills/short-drama-review/SKILL.md +178 -0
  126. package/lib/drama/skills/short-drama-review/agents/openai.yaml +4 -0
  127. package/lib/drama/skills/short-drama-review/assets/finding-template.jsonl +2 -0
  128. package/lib/drama/skills/short-drama-review/assets/supersession-decision.example.json +42 -0
  129. package/lib/drama/skills/short-drama-review/assets/verdict-template.json +32 -0
  130. package/lib/drama/skills/short-drama-review/examples/minimal-findings.jsonl +2 -0
  131. package/lib/drama/skills/short-drama-review/examples/minimal-verdict.json +34 -0
  132. package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +114 -0
  133. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +270 -0
  134. package/lib/drama/skills/short-drama-review/references/project-calibration.md +85 -0
  135. package/lib/drama/skills/short-drama-review/references/review-method.md +82 -0
  136. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +115 -0
  137. package/lib/drama/skills/short-drama-review/references/rubric-source-analysis.md +108 -0
  138. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +164 -0
  139. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +166 -0
  140. package/lib/drama/skills/short-drama-review/references/stage-contract.md +87 -0
  141. package/lib/drama/skills/short-drama-review/scripts/review_check.py +325 -0
  142. package/lib/drama/skills/short-drama-review/scripts/selftest.py +87 -0
  143. package/lib/drama/skills/short-drama-storyboard/SKILL.md +264 -0
  144. package/lib/drama/skills/short-drama-storyboard/agents/openai.yaml +4 -0
  145. package/lib/drama/skills/short-drama-storyboard/assets/coverage-audition.example.jsonl +2 -0
  146. package/lib/drama/skills/short-drama-storyboard/assets/coverage-template.json +49 -0
  147. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +32 -0
  148. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-template.jsonl +2 -0
  149. package/lib/drama/skills/short-drama-storyboard/assets/revision-lineage.fragment.json +12 -0
  150. package/lib/drama/skills/short-drama-storyboard/assets/scene-visual-plan.example.jsonl +2 -0
  151. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +2 -0
  152. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +241 -0
  153. package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +39 -0
  154. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +169 -0
  155. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +264 -0
  156. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +70 -0
  157. package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +39 -0
  158. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +157 -0
  159. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +192 -0
  160. package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +29 -0
  161. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +110 -0
  162. package/lib/drama/skills/short-drama-storyboard/scripts/selftest.py +191 -0
  163. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +824 -0
  164. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +245 -0
  165. package/lib/drama/skills/short-drama-video-prompts/agents/openai.yaml +4 -0
  166. package/lib/drama/skills/short-drama-video-prompts/assets/coverage-scope.fragment.json +21 -0
  167. package/lib/drama/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +101 -0
  168. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +212 -0
  169. package/lib/drama/skills/short-drama-video-prompts/assets/motion-terminal.example.jsonl +2 -0
  170. package/lib/drama/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +31 -0
  171. package/lib/drama/skills/short-drama-video-prompts/assets/performance.fragment.json +38 -0
  172. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +46 -0
  173. package/lib/drama/skills/short-drama-video-prompts/examples/minimal-music-specs.jsonl +2 -0
  174. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +240 -0
  175. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +255 -0
  176. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +93 -0
  177. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +304 -0
  178. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +191 -0
  179. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +312 -0
  180. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +168 -0
  181. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +110 -0
  182. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +329 -0
  183. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +450 -0
  184. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +327 -0
  185. package/lib/drama/skills/short-drama-video-prompts/scripts/selftest.py +82 -0
  186. package/lib/drama/skills/short-drama-write/SKILL.md +284 -0
  187. package/lib/drama/skills/short-drama-write/agents/openai.yaml +4 -0
  188. package/lib/drama/skills/short-drama-write/assets/beats.jsonl +2 -0
  189. package/lib/drama/skills/short-drama-write/assets/episode-card-standalone.json +120 -0
  190. package/lib/drama/skills/short-drama-write/assets/episode-card.json +55 -0
  191. package/lib/drama/skills/short-drama-write/assets/screenplay.md +36 -0
  192. package/lib/drama/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +89 -0
  193. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +519 -0
  194. package/lib/drama/skills/short-drama-write/references/production-format-dialect.md +273 -0
  195. package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +51 -0
  196. package/lib/drama/skills/short-drama-write/references/scene-sound-dramaturgy.md +43 -0
  197. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +260 -0
  198. package/lib/drama/skills/short-drama-write/references/script-craft.md +558 -0
  199. package/lib/drama/skills/short-drama-write/references/stage-contract.md +94 -0
  200. package/lib/drama/skills/short-drama-write/references/substitutable-realization.md +107 -0
  201. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +309 -0
  202. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +1091 -0
  203. package/lib/drama/skills/short-drama-write/scripts/selftest.py +229 -0
  204. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +416 -0
  205. package/lib/index.js +756 -0
  206. package/lib/index.js.map +7 -0
  207. package/lib/oh-story/LICENSE.upstream +21 -0
  208. package/lib/oh-story/manifest.json +1351 -0
  209. package/lib/oh-story/roles/chapter-extractor.md +314 -0
  210. package/lib/oh-story/roles/character-designer.md +169 -0
  211. package/lib/oh-story/roles/consistency-checker.md +190 -0
  212. package/lib/oh-story/roles/narrative-writer.md +294 -0
  213. package/lib/oh-story/roles/story-architect.md +195 -0
  214. package/lib/oh-story/roles/story-explorer.md +364 -0
  215. package/lib/oh-story/roles/story-researcher.md +304 -0
  216. package/lib/oh-story/skills/browser-cdp/SKILL.md +175 -0
  217. package/lib/oh-story/skills/story/SKILL.md +116 -0
  218. package/lib/oh-story/skills/story/VERSION +1 -0
  219. package/lib/oh-story/skills/story-cover/SKILL.md +327 -0
  220. package/lib/oh-story/skills/story-cover/references/cover-styles.md +210 -0
  221. package/lib/oh-story/skills/story-deslop/SKILL.md +445 -0
  222. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +582 -0
  223. package/lib/oh-story/skills/story-deslop/references/banned-words.md +147 -0
  224. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +1371 -0
  225. package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +330 -0
  226. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +241 -0
  227. package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +410 -0
  228. package/lib/oh-story/skills/story-import/SKILL.md +634 -0
  229. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +82 -0
  230. package/lib/oh-story/skills/story-import/references/format-and-structure.md +169 -0
  231. package/lib/oh-story/skills/story-import/references/length-routing.md +134 -0
  232. package/lib/oh-story/skills/story-import/references/state-tracking.md +108 -0
  233. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +442 -0
  234. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +175 -0
  235. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +161 -0
  236. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +1139 -0
  237. package/lib/oh-story/skills/story-long-analyze/SKILL.md +329 -0
  238. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +270 -0
  239. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +530 -0
  240. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +559 -0
  241. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +80 -0
  242. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +149 -0
  243. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +133 -0
  244. package/lib/oh-story/skills/story-long-scan/SKILL.md +342 -0
  245. package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +197 -0
  246. package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +114 -0
  247. package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +105 -0
  248. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +207 -0
  249. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +78 -0
  250. package/lib/oh-story/skills/story-long-write/SKILL.md +327 -0
  251. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +582 -0
  252. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +302 -0
  253. package/lib/oh-story/skills/story-long-write/references/banned-words.md +147 -0
  254. package/lib/oh-story/skills/story-long-write/references/character-basics.md +445 -0
  255. package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +428 -0
  256. package/lib/oh-story/skills/story-long-write/references/character-relations.md +385 -0
  257. package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +502 -0
  258. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +62 -0
  259. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +282 -0
  260. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +426 -0
  261. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +209 -0
  262. package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +188 -0
  263. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +169 -0
  264. package/lib/oh-story/skills/story-long-write/references/genre-catalog.md +480 -0
  265. package/lib/oh-story/skills/story-long-write/references/genre-core-mechanics.md +415 -0
  266. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
  267. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
  268. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
  269. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
  270. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
  271. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
  272. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
  273. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
  274. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
  275. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
  276. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
  277. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
  278. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
  279. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
  280. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
  281. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
  282. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
  283. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
  284. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
  285. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
  286. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
  287. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
  288. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
  289. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
  290. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
  291. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
  292. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
  293. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
  294. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
  295. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
  296. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
  297. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
  298. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +91 -0
  299. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +235 -0
  300. package/lib/oh-story/skills/story-long-write/references/genre-writing-formulas.md +444 -0
  301. package/lib/oh-story/skills/story-long-write/references/hooks-chapter.md +225 -0
  302. package/lib/oh-story/skills/story-long-write/references/hooks-paragraph.md +146 -0
  303. package/lib/oh-story/skills/story-long-write/references/hooks-suspense.md +352 -0
  304. package/lib/oh-story/skills/story-long-write/references/opening-design.md +349 -0
  305. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +457 -0
  306. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +287 -0
  307. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +389 -0
  308. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +326 -0
  309. package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +522 -0
  310. package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +354 -0
  311. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +711 -0
  312. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +622 -0
  313. package/lib/oh-story/skills/story-long-write/references/quality-checklist.md +184 -0
  314. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +109 -0
  315. package/lib/oh-story/skills/story-long-write/references/reversal-toolkit.md +349 -0
  316. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +108 -0
  317. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +409 -0
  318. package/lib/oh-story/skills/story-long-write/references/style-craft.md +347 -0
  319. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +510 -0
  320. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +161 -0
  321. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +140 -0
  322. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +171 -0
  323. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +99 -0
  324. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +284 -0
  325. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +421 -0
  326. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +1371 -0
  327. package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +330 -0
  328. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +241 -0
  329. package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +410 -0
  330. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +1139 -0
  331. package/lib/oh-story/skills/story-review/SKILL.md +483 -0
  332. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +582 -0
  333. package/lib/oh-story/skills/story-review/references/banned-words.md +147 -0
  334. package/lib/oh-story/skills/story-review/references/character-relations.md +385 -0
  335. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +282 -0
  336. package/lib/oh-story/skills/story-review/references/plot-core-methods.md +522 -0
  337. package/lib/oh-story/skills/story-review/references/quality-checklist.md +250 -0
  338. package/lib/oh-story/skills/story-review/references/quality-rubric.md +55 -0
  339. package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +18 -0
  340. package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +19 -0
  341. package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +20 -0
  342. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +161 -0
  343. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +1371 -0
  344. package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +330 -0
  345. package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +410 -0
  346. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +1139 -0
  347. package/lib/oh-story/skills/story-setup/SKILL.md +495 -0
  348. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +582 -0
  349. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +147 -0
  350. package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +445 -0
  351. package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +428 -0
  352. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +385 -0
  353. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +282 -0
  354. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +426 -0
  355. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-methods.md +179 -0
  356. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +169 -0
  357. package/lib/oh-story/skills/story-setup/references/agent-references/genre-catalog.md +480 -0
  358. package/lib/oh-story/skills/story-setup/references/agent-references/genre-core-mechanics.md +415 -0
  359. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
  360. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
  361. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
  362. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
  363. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
  364. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
  365. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
  366. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
  367. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
  368. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
  369. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
  370. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
  371. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
  372. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
  373. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
  374. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
  375. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
  376. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
  377. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
  378. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
  379. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
  380. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
  381. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
  382. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
  383. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
  384. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
  385. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
  386. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
  387. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
  388. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
  389. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
  390. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
  391. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +91 -0
  392. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +235 -0
  393. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +444 -0
  394. package/lib/oh-story/skills/story-setup/references/agent-references/hooks-chapter.md +225 -0
  395. package/lib/oh-story/skills/story-setup/references/agent-references/hooks-suspense.md +352 -0
  396. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +349 -0
  397. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +457 -0
  398. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +287 -0
  399. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +389 -0
  400. package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +522 -0
  401. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +247 -0
  402. package/lib/oh-story/skills/story-setup/references/agent-references/reversal-toolkit.md +349 -0
  403. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +409 -0
  404. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +510 -0
  405. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +421 -0
  406. package/lib/oh-story/skills/story-short-analyze/SKILL.md +278 -0
  407. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +582 -0
  408. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +147 -0
  409. package/lib/oh-story/skills/story-short-analyze/references/character-basics.md +453 -0
  410. package/lib/oh-story/skills/story-short-analyze/references/character-design-methods.md +438 -0
  411. package/lib/oh-story/skills/story-short-analyze/references/character-relations.md +395 -0
  412. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +79 -0
  413. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +490 -0
  414. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +425 -0
  415. package/lib/oh-story/skills/story-short-analyze/references/genre-readers.md +245 -0
  416. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +453 -0
  417. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-techniques.md +475 -0
  418. package/lib/oh-story/skills/story-short-analyze/references/hooks-chapter.md +225 -0
  419. package/lib/oh-story/skills/story-short-analyze/references/hooks-paragraph.md +146 -0
  420. package/lib/oh-story/skills/story-short-analyze/references/hooks-suspense.md +352 -0
  421. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +685 -0
  422. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +165 -0
  423. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +561 -0
  424. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +242 -0
  425. package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +90 -0
  426. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +54 -0
  427. package/lib/oh-story/skills/story-short-scan/SKILL.md +212 -0
  428. package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +90 -0
  429. package/lib/oh-story/skills/story-short-write/SKILL.md +433 -0
  430. package/lib/oh-story/skills/story-short-write/references/banned-words.md +147 -0
  431. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +62 -0
  432. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +282 -0
  433. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +179 -0
  434. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +159 -0
  435. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +156 -0
  436. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +163 -0
  437. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +167 -0
  438. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +178 -0
  439. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +166 -0
  440. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +159 -0
  441. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +151 -0
  442. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +153 -0
  443. 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 +210 -0
  444. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +444 -0
  445. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +488 -0
  446. package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +225 -0
  447. package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +146 -0
  448. package/lib/oh-story/skills/story-short-write/references/hooks-suspense.md +352 -0
  449. package/lib/oh-story/skills/story-short-write/references/output-contract.md +165 -0
  450. package/lib/oh-story/skills/story-short-write/references/quality-checklist.md +222 -0
  451. package/lib/oh-story/skills/story-short-write/references/reversal-toolkit.md +349 -0
  452. package/lib/oh-story/skills/story-short-write/references/short-craft.md +185 -0
  453. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +133 -0
  454. package/lib/oh-story/skills/story-short-write/references/short-format.md +167 -0
  455. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +35 -0
  456. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +158 -0
  457. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +153 -0
  458. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +1371 -0
  459. package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +330 -0
  460. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +241 -0
  461. package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +410 -0
  462. package/lib/types/client/file-activity.d.ts +30 -0
  463. package/lib/types/client/file-activity.d.ts.map +1 -0
  464. package/lib/types/client/file-tree.d.ts +20 -0
  465. package/lib/types/client/file-tree.d.ts.map +1 -0
  466. package/lib/types/client/index.d.ts +12 -0
  467. package/lib/types/client/index.d.ts.map +1 -0
  468. package/lib/types/client/jsonl-preview.d.ts +15 -0
  469. package/lib/types/client/jsonl-preview.d.ts.map +1 -0
  470. package/lib/types/client/markdown-preview.d.ts +38 -0
  471. package/lib/types/client/markdown-preview.d.ts.map +1 -0
  472. package/lib/types/index.d.ts +25 -0
  473. package/lib/types/index.d.ts.map +1 -0
  474. package/lib/types/native-hooks.d.ts +16 -0
  475. package/lib/types/native-hooks.d.ts.map +1 -0
  476. package/lib/types/role-provider.d.ts +6 -0
  477. package/lib/types/role-provider.d.ts.map +1 -0
  478. package/lib/types/role-tool.d.ts +10 -0
  479. package/lib/types/role-tool.d.ts.map +1 -0
  480. package/lib/types/skill-provider.d.ts +15 -0
  481. package/lib/types/skill-provider.d.ts.map +1 -0
  482. package/lib/types/workspace-request-trust.d.ts +13 -0
  483. package/lib/types/workspace-request-trust.d.ts.map +1 -0
  484. package/lib/types/workspace-route.d.ts +10 -0
  485. package/lib/types/workspace-route.d.ts.map +1 -0
  486. package/lib/types/workspace-security.d.ts +9 -0
  487. package/lib/types/workspace-security.d.ts.map +1 -0
  488. package/package.json +107 -0
@@ -0,0 +1,192 @@
1
+ # 镜头设计方法
2
+
3
+ ## 规则分级
4
+
5
+ - `structural_invariant`:可以直接检查的结构要求,例如每段原文都有处理结果、引用可以解析;格式错误可以阻断。
6
+ - `reviewed_invariant`:必须守住、但要结合证据判断的内容要求,例如镜头没有改写剧本动作。
7
+ - `craft_default`:通常有效的起步方法;有明确的戏剧理由时可以调整。
8
+ - `taste_option`:创作者或视觉方向已经接受的风格选择,不能仅因不同于示例就判错。
9
+
10
+ ## 目录
11
+
12
+ 1. [先落实原文,再追求画面](#先落实原文再追求画面)
13
+ 2. [镜头目的](#镜头目的)
14
+ 3. [场面调度与地理](#场面调度与地理)
15
+ 4. [景别与摄影机动机](#景别与摄影机动机)
16
+ 5. [时长与切镜](#时长与切镜)
17
+ 6. [常见问题](#常见问题)
18
+ 7. [审查问题](#审查问题)
19
+
20
+ ## 先落实原文,再追求画面
21
+
22
+ `SHT-01` 要求每个与制作有关的剧本段都有明确处理:由镜头落实、有理由地省略,或因
23
+ 新的观众体验而有意重复。
24
+
25
+ 先把剧本段与镜头对应起来,再设计镜头。原文落实表是责任清单,不是“一段一镜”公式。
26
+ 连续表演和空间关系能守住原意时,几段原文可以合在一镜;揭示、反应、证据细节或空间
27
+ 变化很重要时,一段原文也可以由几镜承担。
28
+
29
+ 已接受的原文落实表要保存完整的 `shot_refs`,不能只写裸镜头 ID。文件的 `sources` 为每个
30
+ 上游快照声明一次负责人与准确文件,每条引用再用 `src` 指向这条声明并
31
+ 写上 `record_id`,这样才能知道审查的是哪一版。同一文件内部的关系可以用 `*_ids`;
32
+ 跨文件关系必须用 `*_refs`,以便来源改变后发现过期引用。
33
+
34
+ 重复拍同一段内容,只有在第二次带来新的观众体验时才成立,例如新增反应、矛盾、
35
+ 此前保留的证据或对前镜的新理解;不能因为第一次对应关系被忘了就重复。
36
+
37
+ ### 动作落实表
38
+
39
+ **`SHT-08 · reviewed_invariant`**: 每个有权威来源的动作只有一个主要落实镜头;其他
40
+ 镜头若再次涉及该动作,必须增加反应、细节或对原信息的新理解。
41
+
42
+ 原文落实数量只能证明“某段原文被引用”,不能证明动作没有提前、重复或遗漏。对转手、
43
+ 开门、受伤、揭面、拿出证物等动作,另记:
44
+
45
+ | 来源动作 | 主要落实镜头 | 动作前事实 | 动作后事实 | 其他镜头的作用 |
46
+ |---|---|---|---|---|
47
+ | 右手从衣内取令牌 | SHOT-02 | 令牌在衣内 | 右手持令牌 | SHOT-03 只展示纹样和接收者反应 |
48
+
49
+ - 只有主要落实镜头可以把状态从动作前改成动作后。
50
+ - 前一镜的结束状态不得在没有来源动作时提前变成动作后状态。
51
+ - 后一镜已经从动作后状态开始时,运动规格不得再完整表演一次该动作。
52
+ - 其他镜头要写清自己负责细节、反应还是重新解释,不能成为第二个主要落实镜头。
53
+
54
+ ## 镜头目的
55
+
56
+ `SHT-02` 要求镜头守住来源原意,并说明观众或人物在本镜结束时发生了什么变化。
57
+ 只有漂亮画面、没有戏剧职责的镜头,不能通过内容审查。
58
+
59
+ 按以下顺序设计:
60
+
61
+ 1. 找出来源中的关键动作:行动、台词、发现、拒绝、转手或揭示。
62
+ 2. 说明观众或人物因此发生什么变化。
63
+ 3. 决定本镜主要从谁的体验组织画面。
64
+ 4. 确定开始和结束时必须看见什么。
65
+ 5. 最后才选择景别、摄影机行为和切镜点。
66
+
67
+ 镜头可以负责建立空间、让观众站到某个人物一边、展示证据、暂缓信息、转移权力、
68
+ 表现反应,或让后果无法回避。“中景展示人物说话”不算足够的镜头目的。
69
+
70
+ ### 观众可见性 (`SHT-12`)
71
+
72
+ 构图同时决定观众此刻能知道什么。每个事实单独建立一条 `audience_visibility`:绑定准确
73
+ 的 `source_ref`,选择 `show_now` 或 `withhold_now`,写明可见或可听的载体,并分别写出
74
+ 揭示条件、保护方法和理由。同一镜中的不同事实可以在不同时间放出。
75
+
76
+ 背影、只露腿部的入场、门缝、前景遮挡、延迟对焦,以及**逆光成剪影或压暗到只剩轮廓**,
77
+ 都可以用于保护剧本保留的揭示。用光保护时不改光源身份与方向,只声明人物落在明区还是
78
+ 暗区,并把该选择写进本镜排除项防止后续漂移——否则人物正面入场却要求不给身份时,
79
+ 本环节没有合法写法,执行端会直接给一张清晰正脸。
80
+ 如果它们提前暴露身份或证据,就是失败。反过来,本镜若负责展示证据或听者的关键反应,
81
+ 就不能为了画面好看而遮住其载体。神秘感不是默认加分项;审查者同时核对剧本允许展示
82
+ 什么,以及本镜必须交代什么。
83
+
84
+ ## 场面调度与地理
85
+
86
+ 把场景写成可以行动的空间:
87
+
88
+ - 入口、出口和固定锚点。
89
+ - 前景、中景、后景区域。
90
+ - 谁能看见或接近什么。
91
+ - 人物面向与视线关系。
92
+ - 轴线工作侧和屏幕运动方向。
93
+ - 双手、道具归属和转手路径。
94
+
95
+ 场面调度表现人物策略。靠近可以施压或寻求结盟;转身可以拒绝;占住出口可以控制;
96
+ 碰触证据可以暴露知情。不要只为增加运动而让人物无理由走动。
97
+
98
+ 跨轴本身不是错误;没有动机又让空间难以理解才是问题。跨轴时可以使用中性过渡镜头、
99
+ 人物在同一镜内穿轴、有意制造主观错乱,或重新建立空间。
100
+
101
+ 画面文字必须服从资产负责人确定的文字政策。镜头和关键帧通过 `text_treatment_refs`
102
+ 指向准确政策字段,可以决定文字是否可见、大小、角度和对焦,但不能静默编造文案,
103
+ 也不能改写 `exact_readable`、`graphic_only`、`no_readable_text` 或待定状态。候选预览只能
104
+ 引用候选政策,并且不能直接交付。
105
+
106
+ ## 景别与摄影机动机
107
+
108
+ `SHT-04` 要求景别或摄影机行为因注意、压力、观众立场、揭示或节奏变化而改变,
109
+ 不能为了装饰每一拍而变化。
110
+
111
+ - **远景**:交代地理、人物与环境的力量对比,或让人物被空间吞掉;信息靠轮廓、方位和
112
+ 距离读出,不要指望这一档承担表情。
113
+ - **全景**:建立空间、孤立感、群体权力或同时发生的后果。
114
+ - **中景**:表现互动、手势、双人策略和清楚的调度。
115
+ - **中近景**:对话距离的双人,或仍然保留手部的单人:比中景少一层环境,比近景多留出
116
+ 调度余地;一场停在工作景别时的对切多数落在这一档。
117
+ - **近景**:表现决定、证据、被藏住的反应或无法撤回的认识。
118
+ - **特写**:把一张脸、一只手或一处伤单独提出来,让某个反应、破绽或细微动作成为本镜
119
+ 唯一事实;代价是暂时切掉空间参照,用它就要接受观众此刻读不到周围发生了什么。
120
+ - **大特写**:只留眼睛、嘴、指节或物件上的一处细节;用于观众必须看清、而近景会淹没的
121
+ 单一证据或生理反应。它切掉的信息最多,因此要有明确的“非看不可”理由。
122
+ - **细节镜头**:展示已经建立意义的关键物件或动作。
123
+
124
+ 近景和特写是中文分镜里最常用的两档,不是留给高潮的稀缺资源;同样,大特写也不是被
125
+ 禁止的景别。要防的是**把景别当情绪音量旋钮**:情绪词一升级就换更紧的景别,本镜到底
126
+ 要观众读到什么反而没人回答。判断标准始终是必须被读到的信息存在于哪个尺度——证据在
127
+ 指节上就给大特写,后果在两人距离上就不该切近。
128
+
129
+ 只有注意或关系发生变化时才改变景别和角度。场面声音变大,不等于镜头必须从全景一路
130
+ 推到大特写。反过来,一旦决定切镜,新镜就要在景别、角度或人物关系里至少改变一项;
131
+ 相邻两镜完全同景别、同角度、同关系时,这次切镜没有职责,应当改变收放或并回一镜。
132
+
133
+ 一个时间段内选择一套连贯的摄影机行为:
134
+
135
+ - 固定机位用于观察、紧张、仪式或受困。
136
+ - 摇镜或俯仰用于揭示信息或转移注意。
137
+ - 前移或后移用于改变亲近、压力或人物认识。
138
+ - 跟拍用于人物移动本身带有策略意义的场面。
139
+ - 环绕用于关系或空间在原地被重新评估:绕过去才看得到的另一面、被围住的处境、
140
+ 两人相对位置在不移动的情况下改变意义;没有这层理由时它只是装饰性运动。
141
+ - 升降(摇臂)用于高度本身携带意义:升起交出全局或结局,落下把观众接进人物所在的
142
+ 高度;不为“开场要大气”而升降。
143
+ - 手持用于创作者已经接受的身体不稳或现场感。
144
+
145
+ 没有明确切换时,不要在同一时间段同时要求固定和移动。
146
+
147
+ ## 时长与切镜
148
+
149
+ ### 短镜头的动作量 (`SHT-03`)
150
+
151
+ 作为 `craft_default`,可以先从一个主要动作开始,再保留让观众读懂后果所需的反应。
152
+ 只有连续表演、空间、时长和镜头目的都仍然清楚时才合并更多内容。这是起步方法,
153
+ 不是固定动作数量检查。
154
+
155
+ 时长要给动作、表演、对白和反应留出可读空间。明确的对白长度和计时动作可以作为证据;
156
+ 一般动作量是否过多,应由审查者结合本镜判断,不能用通用的每秒字数阻断。
157
+
158
+ 在变化处切镜:新信息、新目光、新决定、新空间关系、新威胁、新证据或节奏变化。
159
+ 不要只为换角度而重复同一个动作。给反应留下足够时间,让观众读懂后果。
160
+
161
+ ## 视觉方向选择 (`SHT-07`)
162
+
163
+ 焦段语言、节奏、固定机位、手持或形式化调度属于 `taste_option`,读取创作者已接受的
164
+ 视觉方向。审查它是否服务本镜,不强制所有项目使用同一套风格。
165
+
166
+ ## 相连边界 (`CON-01`)
167
+
168
+ 本镜已接受的结束边界必须与下一镜已接受的开始边界一致;若不一致,负责产物必须声明
169
+ 修订或过渡。不得用摄影机描述掩盖边界冲突。
170
+
171
+ ## 常见问题
172
+
173
+ - 镜头表只是改写剧本句子,没有说明观众怎样观看或获得什么变化。
174
+ - 用匿名“人物”代替准确的已接受资产。
175
+ - 一镜跨越地点或时间,却没有蒙太奇或省略依据。
176
+ - 保留了对白,却删掉承担后果的反应。
177
+ - 人物或道具在切镜后无原因换位。
178
+ - 每句情绪台词都变成大特写(问题在“情绪升级=景别收紧”的条件反射,不在大特写本身)。
179
+ - 相邻两镜同景别、同角度、同关系,切了等于没切。
180
+ - 摄影机指令冲突,或运动没有注意变化的理由。
181
+ - 套话式布光替代真实空间锚点。
182
+ - 把外部批量制作单位误当成剪辑镜头本身。
183
+
184
+ ## 审查问题
185
+
186
+ - 本镜落实、省略或重复了哪些剧本段?
187
+ - 本镜结束时改变了什么?
188
+ - 为什么选择这个景别和摄影机行为?
189
+ - 每个人物能否在当前空间中合理站立、看见和移动?
190
+ - 是否绑定了准确的造型、观察视角、道具状态、双手状态和文字政策?
191
+ - 结束边界是否为下一镜提供清楚的开始状态?
192
+ - 删除或合并本镜,会不会丢失故事意义?
@@ -0,0 +1,29 @@
1
+ # 镜头修订与稳定身份
2
+
3
+ 镜头 ID 表示同一个编辑/导演决定的连续身份,不等于列表位置,也不等于外部制作任务编号。
4
+ 修订时先判断镜头的叙事职责是否仍是同一个,再决定保留、创建或 retire。
5
+
6
+ ## 身份规则
7
+
8
+ - **重排**:只改变顺序,镜头目的与边界职责不变时保留原 ID;刷新依赖顺序与相邻边界。
9
+ - **插入**:新增一个独立注意或戏剧职责时创建新 ID;不要给后续所有镜头重新编号。
10
+ - **内容修订**:同一镜头目的下调整构图、blocking 或边界,保留 ID 并重新发布。
11
+ - **拆分**:原镜头被两个或更多独立职责取代时,retire 旧 ID,为每个新镜头创建新 ID;记录
12
+ `revision_lineage`,不把旧 ID 偷给其中一个子镜头。
13
+ - **合并**:多个旧镜头被一个新决定取代时,retire 全部旧 ID,创建新 ID,并记录来源集合。
14
+ - **恢复**:retire 的 ID 不复用于无关镜头;需要恢复同一职责时用 lineage 显式说明。
15
+
16
+ 普通新镜只需要稳定 `shot_id`;没有 predecessor 或 retired IDs 时省略 `revision_lineage`,
17
+ 不保存 `mode: new` 和空数组来重复本段规则。
18
+ 拆分、合并或恢复旧职责时,从
19
+ [`revision-lineage.fragment.json`](../assets/revision-lineage.fragment.json) 插入统一结构;同一 shot 文件
20
+ 内的前身与 retired 关系使用稳定 ID,不伪造指向本文件自身的引用。
21
+
22
+ ## 每次拆分、合并或重排后的对账
23
+
24
+ 重新核对 coverage 的每条 `shot_refs`、场次视觉计划投影、关键帧、motion、容器成员、相邻
25
+ start/end boundary、总时长与审查记录。旧 ID 保留在 lineage / retire 记录中用于解释历史,
26
+ 不能继续被 active coverage 或交付容器引用。
27
+
28
+ 脚本可以检查引用、集合和算术;“是否仍是同一个导演决定”由 agent 根据镜头目的、信息变化、
29
+ 表演所有权和边界职责判断,不能用文本相似度或数组位置硬判。
@@ -0,0 +1,110 @@
1
+ # 分镜阶段契约
2
+
3
+ ## 目录
4
+
5
+ - [独立运行与项目集成](#独立运行与项目集成)
6
+ - [所有权边界](#所有权边界)
7
+ - [制作形态需要什么](#制作形态需要什么)
8
+ - [参考媒体与补拍](#参考媒体与补拍)
9
+ - [本阶段规则](#本阶段规则)
10
+
11
+ 本文件是本技能的自包含契约:预检、所有权、形态输入与规则表都在这里,
12
+ 不需要读取其他技能的文件。
13
+
14
+ ## 独立运行与项目集成
15
+
16
+ 本技能可以单独安装并运行;下面几条说明项目工具存在时怎样集成。
17
+
18
+ 1. **读取直接输入**:只读取用户明确提供或当前任务实际需要的文件,不批量加载整个项目。
19
+ 2. **可选项目集成**:若存在 `short-drama.json` 且 core 项目工具可用,可以运行
20
+ `python3 <core>/scripts/project_tool.py status <project>`,使用返回的目录布局和语言设置;
21
+ core 不可用时,直接基于已提供输入产出本阶段文件。
22
+ 3. **可选发布生命周期**:项目工具可用时,用 `publish` 原子发布并用 `--input <path>`
23
+ 声明直接输入;`accept`、`review` 与 `package` 继续承担确认、复核与交付。
24
+ 4. **保持职责分离**:创作者确认、内容修订和复核是不同动作;reviewer 提修改要求,负责人改文件。
25
+
26
+ ## 所有权边界
27
+
28
+ - **本阶段拥有**:可选 coverage audition 与场次视觉计划、覆盖处置、镜头目的、镜头时长、
29
+ 绑定、起止边界;关键帧的注意焦点、构图、机位/镜头与冻结站位。渲染出的关键帧提示词是缓存。
30
+ - **本阶段继承**:剧本的信息权限与原文要求;资产的身份与变体绑定。
31
+ - **本阶段不越权**:不用风格词改写人物状态,不新建资产身份,不改写剧本事实。镜头边界
32
+ 拥有起止位置、姿态、目光、双手、持物与可见连续性;关键帧只投影这些事实,永不覆盖它们。
33
+
34
+ ## 制作形态需要什么
35
+
36
+ 视觉风格不是贴在提示词前面的标签。创作者已接受的视觉方向与制作形态由项目层决定并传入,
37
+ **本技能不加载形态卡,也不自行选择形态**;本节只说明本阶段需要形态回答什么、以及拿到
38
+ 答案后投影成哪些字段。
39
+
40
+ 形态决定属于 `craft_default`:创作者说明理由即可覆盖。形态不能创造新的
41
+ `structural_invariant`,也不能改写身份、地理、持物归属与可读文字政策。审查者不得单凭
42
+ 形态偏好阻断交付。
43
+
44
+ 不要用“加一句风格前缀”处理形态差异。前缀只改变检索标签;形态改变的是**必须出现和
45
+ 可以省略的字段**,只有后者会被执行,也只有后者能被审查。
46
+
47
+ 本阶段要向形态决定问:**注意力、层次、遮挡、可动层与冻结边界**在本形态下怎么表达。
48
+
49
+ 运动预算的默认值随形态改变:实拍默认全动作,要写的是限制;三维默认可全动作,但摄影机
50
+ 是最贵的一层;限动画与水墨默认保持姿态,要写的是**哪一层例外**;Q 版默认一镜一因果。
51
+ 省掉这一判断的后果可预测:默认保持姿态的形态会被写成全员飘动,默认全动作的形态会被
52
+ 写成一串没有接触点的动作词。
53
+
54
+ 本阶段新增:注意力、层次、遮挡、可动层与冻结边界。
55
+
56
+ ## 参考媒体与补拍
57
+
58
+ - **参考图能决定什么要逐张写明**:每张参考的用途、可以照搬什么、不可以照搬什么。身份参考
59
+ 不自动决定构图;构图、尺度或效果参考不自动带入图中人物、服装、文字、道具与故事状态。
60
+ - **像素主张需要证据**:关于参考图上可见内容(尤其文字、水印、标牌、界面)的断言,必须
61
+ 来自创作者/参考图权利人的可核对说明,或运行环境获授权后形成的输入参考观察记录,并绑定
62
+ 被检查的字节。两者都没有时保持 `unverified`,负面提示词不能代替证据。
63
+ - **观众揭示时机**:某一事实何时可被观众看到,由已接受的可见性决定绑定其来源、载体、
64
+ 权限、触发与保护方式。构图既不能提前泄露该事实,也不能遮掉本环节必须传达的载体。
65
+ - **母版、补拍与替代**:补拍默认只补充、不替代母版。普通母版不增加版本范围字段;只有
66
+ 补拍/替代版才声明 `pickup | alternate`,用同一文件内稳定的记录 ID 说明母版与补充关系,并把每项原文要求对应到当前字段或说明
67
+ 去向。只有下游审查结论才能批准替代,不得回写形成循环引用。
68
+
69
+ ## 本阶段规则
70
+
71
+ ### `SHT`
72
+
73
+ | ID | Class | Knowledge |
74
+ |---|---|---|
75
+ | SHT-01 | structural_invariant | Every production-relevant screenplay block has a coverage disposition. |
76
+ | SHT-02 | reviewed_invariant | Each shot has a dramatic/viewing purpose and preserves its source meaning. |
77
+ | SHT-03 | craft_default | Keep a short shot focused on the smallest action/reaction unit that carries its purpose; combine or split it according to performance, information, and continuity rather than a fixed count. |
78
+ | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. |
79
+ | SHT-05 | structural_invariant | A keyframe projects one accepted shot boundary and exact asset variants. |
80
+ | SHT-06 | reviewed_invariant | A keyframe is one freezeable instant, not an ordered action chain. |
81
+ | SHT-07 | taste_option | Lens vocabulary, tempo, and locked/handheld/formal style follow visual direction. |
82
+ | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. |
83
+ | SHT-09 | reviewed_invariant | Exact Location/View orientation and visible anchors match the camera side used by the shot. |
84
+ | SHT-10 | reviewed_invariant | Rendered keyframe prose contains only facts from the boundary that keyframe declares. A start frame carries no state first created by the shot's motion or end; an end frame carries no state already spent before it. Neither frame borrows the other's facts. |
85
+ | SHT-11 | craft_default | When information changes another person's power, relationship, knowledge, or choice, preserve that reception visibly; shot count, framing, and duration follow the consequence and project profile. |
86
+ | SHT-12 | reviewed_invariant | Each audience-visibility fact binds its exact source, carrier, permission, trigger, and protection method; framing neither reveals that fact early nor hides the carrier this shot must communicate. |
87
+ | SHT-13 | reviewed_invariant | Multi-character blocking projects sourced, directed relationships into compatible positions, gaze, distance, and action lines for the current boundary. |
88
+ | SHT-14 | reviewed_invariant | A contested moving object preserves ownership, trajectory, direction, time/round state, and end location across cuts unless an authorized ellipsis says otherwise. |
89
+ | SHT-15 | reviewed_invariant | When the creator has declared delivery-surface overlay regions with their permanence and source, what a shot must be read for—face and gaze, readable evidence text, the decisive hand action—does not sit only inside those regions, and shots bind the declared version. An undeclared surface leaves the rule inactive: record it as unresolved and do not restage against a guessed region. |
90
+ | SHT-16 | structural_invariant | Coverage carries an episode duration total that is the arithmetic sum of its shots' accepted `duration_seconds`; every shot the coverage lists either contributes a number or is named in `unresolved_durations`, so no shot leaves the total silently. When the project declares a target per episode, the record binds that field and states the signed delta; the delta is reported to the creator and never blocks on its own. |
91
+ | SHT-17 | structural_invariant | A keyframe declares which boundary it freezes and binds that shot's matching boundary field. An end keyframe is a projection of `end_boundary`, never a second end-state authority, and per-shot keyframe count stays open: one start frame by default, an end frame only when the delivery workflow consumes it. Handing over a start/end pair delegates the motion between them to interpolation, so an action the shot exists for cannot rest on that gap alone. |
92
+ | SHT-18 | craft_default | For a scene where directing choice materially changes audience knowledge, alignment, spatial pressure, performance ownership, or the landing, an accepted scene visual plan may bridge project direction and shots; it binds exact screenplay blocks, direction/profile, Location/View and relevant asset states, ordinary scenes skip it, and it never owns screenplay facts or shot boundaries. |
93
+ | SHT-19 | reviewed_invariant | When a coverage audition is used, its approaches genuinely differ by knowledge timing, alignment, performance space, strongest image, landing, losses, or production fit; it uses no fixed option, grid, framing, or shot-count formula, and an independent creator acceptance record names the exact audition record and an existing selected approach before the formal plan or shots. |
94
+ | SHT-20 | reviewed_invariant | Shot revision identity follows directing responsibility rather than array position or text similarity: reorder preserves IDs, insertion creates one, split/merge retires replaced IDs and creates successors, and active coverage plus downstream refs are reconciled before delivery. |
95
+ | SHT-21 | reviewed_invariant | A keyframe's delivery text carries only what will be filmed: record and rule IDs, lifecycle status words, hashes, field paths, reference filenames, craft notes, and run-on negative lists stay in the spec fields. Two keyframes in one episode whose delivery text differs only by their identifiers are a template, not two frames. The suite runs no mechanical check; the reviewer cites the text against this rule. Same obligation as `VID-22` in the video-prompts stage. |
96
+
97
+ ### `CON`
98
+
99
+ | ID | Class | Knowledge |
100
+ |---|---|---|
101
+ | CON-01 | structural_invariant | Linked end and next start states match or have an explicit owner revision. |
102
+ | CON-02 | reviewed_invariant | Knowledge, injury, ownership, weather, light, or physical state does not teleport/regress without story cause. |
103
+ | CON-03 | craft_default | Track downstream-relevant deltas, not the whole 设定集 in every shot. |
104
+ | CON-04 | structural_invariant | A delta records before, after, cause/source, effective range, and affected bindings. |
105
+ | CON-05 | taste_option | Declared montage, ellipsis, dream, or subjective imagery may intentionally break ordinary continuity. |
106
+ | CON-06 | structural_invariant | A delta's affected refs cover all existing consumers; future consumers remain locators until materialized. |
107
+
108
+ 规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
109
+ `reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、
110
+ `taste_option`(创作者选择,不作缺陷)。创作者已接受的事实优先于本表。
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env python3
2
+ """Offline self-test for storyboard bookkeeping checks."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import copy
7
+ import sys
8
+ import tempfile
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+ from storyboard_check import (
13
+ check_boundary_entries,
14
+ check_episode_duration,
15
+ check_keyframe_boundaries,
16
+ check_screenplay_coverage,
17
+ )
18
+
19
+ MINIMUM_PYTHON = (3, 9)
20
+ if sys.version_info < MINIMUM_PYTHON:
21
+ raise SystemExit("selftest.py requires Python 3.9 or newer")
22
+
23
+
24
+ def require(condition: bool, message: str) -> None:
25
+ if not condition:
26
+ raise AssertionError(message)
27
+
28
+
29
+ def codes(findings: list[dict[str, Any]]) -> set[Any]:
30
+ return {item["code"] for item in findings}
31
+
32
+
33
+ SHOT: dict[str, Any] = {
34
+ "shot_id": "SHOT-001",
35
+ "duration_seconds": 5,
36
+ "start_boundary": "closed door",
37
+ "end_boundary": "open door",
38
+ }
39
+ BOUNDED_SHOT: dict[str, Any] = {
40
+ "shot_id": "SHOT-002",
41
+ "duration_seconds": 5,
42
+ "start_boundary": {
43
+ "positions": ["站在柜台东侧(与上一镜相同)"],
44
+ "facing": ["面向门口"],
45
+ },
46
+ "end_boundary": {"positions": ["退到门内一步"], "facing": ["面向柜台"]},
47
+ }
48
+ SHOTS_SOURCE: dict[str, Any] = {
49
+ "owner": "short-drama-storyboard",
50
+ "artifact": "剧集/EP001/storyboard/shots.jsonl",
51
+ "hash": "a" * 64,
52
+ }
53
+ COVERAGE: dict[str, Any] = {
54
+ "sources": {"shots": SHOTS_SOURCE},
55
+ "dispositions": [{"shot_refs": [{"src": "shots", "record_id": "SHOT-001"}]}],
56
+ "episode_duration": {
57
+ "counted_shot_ids": ["SHOT-001"],
58
+ "unresolved_durations": [],
59
+ "shot_seconds_total": 5,
60
+ "delta_seconds": 0,
61
+ "disposition": "within_creator_tolerance",
62
+ },
63
+ }
64
+ KEYFRAME_SOURCES: dict[str, Any] = {"shots": SHOTS_SOURCE}
65
+ KEYFRAME: dict[str, Any] = {
66
+ "keyframe_id": "KF-001-END",
67
+ "boundary_role": "end",
68
+ "boundary_ref": {"src": "shots", "record_id": "SHOT-001", "field": "/end_boundary"},
69
+ }
70
+ # A reference may also carry its whole snapshot inline instead of naming a
71
+ # sources key; the checker resolves both to the same upstream binding.
72
+ EXPANDED_COVERAGE: dict[str, Any] = {
73
+ "dispositions": [
74
+ {"shot_refs": [{**SHOTS_SOURCE, "record_id": "SHOT-001", "authority": "accepted"}]}
75
+ ],
76
+ "episode_duration": COVERAGE["episode_duration"],
77
+ }
78
+ EXPANDED_KEYFRAME: dict[str, Any] = {
79
+ "keyframe_id": "KF-001-END",
80
+ "boundary_role": "end",
81
+ "boundary_ref": {**SHOTS_SOURCE, "record_id": "SHOT-001", "field": "/end_boundary"},
82
+ }
83
+
84
+
85
+ def test_screenplay_coverage_flags_gaps_and_double_claims() -> None:
86
+ """Every screenplay block must be claimed by exactly one shot.
87
+
88
+ Shots bind to the screenplay through the index, so coverage is measured in
89
+ block IDs. Measuring it in prose lines instead reported every line of a
90
+ correctly covered episode as unfilmed.
91
+ """
92
+ with tempfile.TemporaryDirectory() as directory:
93
+ index = Path(directory) / "screenplay-index.jsonl"
94
+ index.write_text(
95
+ '{"record_type":"block","block_id":"BLK-A"}\n'
96
+ '{"record_type":"block","block_id":"BLK-B"}\n'
97
+ '{"record_type":"block","block_id":"BLK-C"}\n',
98
+ encoding="utf-8",
99
+ )
100
+ sources = {
101
+ "screenplay-index": {
102
+ "owner": "short-drama-write",
103
+ "artifact": "剧集/EP001/screenplay-index.jsonl",
104
+ }
105
+ }
106
+ shots = [
107
+ {"shot_id": "SH001", "source_refs": [{"src": "screenplay-index", "record_id": "BLK-A"}]},
108
+ {"shot_id": "SH002", "source_refs": [{"src": "screenplay-index", "record_id": "BLK-B"}]},
109
+ {"shot_id": "SH003", "source_refs": [{"src": "screenplay-index", "record_id": "BLK-B"}]},
110
+ {"shot_id": "SH004", "source_refs": [{"src": "screenplay-index", "record_id": "BLK-Z"}]},
111
+ ]
112
+ found = {f["code"] for f in check_screenplay_coverage(shots, sources, index)}
113
+ require("SHT01_BLOCK_UNCLAIMED" in found, "an unfilmed block must be reported")
114
+ require("SHT01_BLOCK_CLAIMED_TWICE" in found, "a doubly claimed block must be reported")
115
+ require(
116
+ "SHT01_BLOCK_NOT_IN_SCREENPLAY" in found,
117
+ "a shot claiming an absent block must be reported",
118
+ )
119
+
120
+
121
+ def test_screenplay_coverage_is_skipped_when_not_supplied() -> None:
122
+ require(check_screenplay_coverage([], {}, None) == [], "no index means no claim")
123
+
124
+
125
+ def main() -> int:
126
+ require(check_episode_duration(COVERAGE, [SHOT], 5) == [], "valid duration")
127
+ require(
128
+ check_keyframe_boundaries([KEYFRAME], [SHOT], KEYFRAME_SOURCES) == [],
129
+ "valid boundary",
130
+ )
131
+ require(check_episode_duration(EXPANDED_COVERAGE, [SHOT], 5) == [], "expanded duration")
132
+ require(
133
+ check_keyframe_boundaries([EXPANDED_KEYFRAME], [SHOT], {}) == [],
134
+ "expanded boundary",
135
+ )
136
+
137
+ wrong_total = copy.deepcopy(COVERAGE)
138
+ wrong_total["episode_duration"]["shot_seconds_total"] = 4
139
+ require(
140
+ "SHT16_TOTAL_IS_NOT_THE_SUM" in codes(check_episode_duration(wrong_total, [SHOT], 5)),
141
+ "wrong duration total was not detected",
142
+ )
143
+
144
+ wrong_boundary = copy.deepcopy(KEYFRAME)
145
+ wrong_boundary["boundary_ref"]["field"] = "/start_boundary"
146
+ require(
147
+ "SHT17_BOUNDARY_REF_DISAGREES_WITH_ROLE"
148
+ in codes(check_keyframe_boundaries([wrong_boundary], [SHOT], KEYFRAME_SOURCES)),
149
+ "wrong keyframe boundary was not detected",
150
+ )
151
+
152
+ undeclared = copy.deepcopy(COVERAGE)
153
+ undeclared["sources"] = {}
154
+ require(
155
+ "REF_SRC_IS_NOT_DECLARED" in codes(check_episode_duration(undeclared, [SHOT], 5)),
156
+ "a src without a sources entry was not detected",
157
+ )
158
+ require(
159
+ "REF_SRC_IS_NOT_DECLARED"
160
+ in codes(check_keyframe_boundaries([KEYFRAME], [SHOT], {})),
161
+ "a keyframe src without a sources entry was not detected",
162
+ )
163
+
164
+ unbound = copy.deepcopy(COVERAGE)
165
+ unbound["dispositions"][0]["shot_refs"] = [{"record_id": "SHOT-001"}]
166
+ require(
167
+ "REF_HAS_NO_UPSTREAM_BINDING" in codes(check_episode_duration(unbound, [SHOT], 5)),
168
+ "a reference binding no snapshot was not detected",
169
+ )
170
+
171
+ # A boundary entry that only says "same as before" reads as written but tells
172
+ # the next stage nothing; an absolute fact that mentions the previous shot in
173
+ # passing is fine and must not be flagged.
174
+ require(check_boundary_entries([BOUNDED_SHOT]) == [], "absolute boundary entries")
175
+ relative = copy.deepcopy(BOUNDED_SHOT)
176
+ relative["end_boundary"]["positions"] = ["(位置不变)"]
177
+ require(
178
+ "SHT05_BOUNDARY_ENTRY_IS_A_BACK_REFERENCE"
179
+ in codes(check_boundary_entries([relative])),
180
+ "a boundary entry that only points back was not detected",
181
+ )
182
+
183
+ test_screenplay_coverage_flags_gaps_and_double_claims()
184
+ test_screenplay_coverage_is_skipped_when_not_supplied()
185
+
186
+ print("13 self-tests passed")
187
+ return 0
188
+
189
+
190
+ if __name__ == "__main__":
191
+ raise SystemExit(main())