@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,287 @@
1
+ #!/usr/bin/env python3
2
+ """Offline self-test for the standalone project lifecycle."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import json
7
+ import tempfile
8
+ import sys
9
+ from collections.abc import Iterator
10
+ from pathlib import Path
11
+ from typing import Any, NamedTuple
12
+
13
+ from project_tool import initialize_project, project_status, publish_candidate
14
+
15
+ MINIMUM_PYTHON = (3, 9)
16
+ if sys.version_info < MINIMUM_PYTHON:
17
+ raise SystemExit("selftest.py requires Python 3.9 or newer")
18
+
19
+ SKILL_ROOT = Path(__file__).resolve().parent.parent
20
+ EXAMPLE_RECORDS = (
21
+ "assets/creator-decision.example.jsonl",
22
+ "assets/production-observation.example.jsonl",
23
+ "assets/reference-observation.example.jsonl",
24
+ )
25
+
26
+ # ---------------------------------------------------------------------------
27
+ # REFERENCE RESOLVER -- reference implementation.
28
+ #
29
+ # Each skill carries its own copy of this block. The suite has no shared
30
+ # library on purpose: a skill must stay runnable after copying only its own
31
+ # directory, so duplicating these few lines across skills is the correct shape.
32
+ # Copy the block verbatim; do not import it.
33
+ # ---------------------------------------------------------------------------
34
+
35
+ SOURCES_RECORD_TYPE = "sources"
36
+ SOURCES_SCHEMA_VERSION = "1.0.0"
37
+
38
+
39
+ class ResolvedRef(NamedTuple):
40
+ """An upstream reference with its snapshot resolved, whichever form it used."""
41
+
42
+ owner: str
43
+ artifact: str
44
+ record_id: str | None
45
+ field: str | None
46
+ authority: str | None
47
+
48
+
49
+ class RefFinding(NamedTuple):
50
+ """A structural defect in a reference object."""
51
+
52
+ code: str
53
+ location: str
54
+ detail: str
55
+
56
+
57
+ def load_sources(document: Any) -> dict[str, dict[str, Any]]:
58
+ """Return the ``sources`` declaration of a parsed file, or ``{}`` if absent.
59
+
60
+ Accepts a parsed ``.json`` document (a dict) or the parsed record list of a
61
+ ``.jsonl`` file, whose declaration lives on the first record.
62
+ """
63
+ if isinstance(document, list):
64
+ document = document[0] if document else None
65
+ if not isinstance(document, dict):
66
+ return {}
67
+ declared = document.get("sources")
68
+ if not isinstance(declared, dict):
69
+ return {}
70
+ return {key: value for key, value in declared.items() if isinstance(value, dict)}
71
+
72
+
73
+ def resolve_ref(
74
+ ref: Any, sources: dict[str, dict[str, Any]], location: str
75
+ ) -> tuple[ResolvedRef | None, RefFinding | None]:
76
+ """Resolve a reference object written in either the compact or expanded form."""
77
+ if not isinstance(ref, dict):
78
+ return None, RefFinding("REF_IS_NOT_AN_OBJECT", location, f"got {type(ref).__name__}")
79
+ src = ref.get("src")
80
+ if isinstance(src, str):
81
+ entry = sources.get(src)
82
+ if entry is None:
83
+ return None, RefFinding(
84
+ "REF_SRC_IS_NOT_DECLARED", location, f"src {src!r} has no sources entry"
85
+ )
86
+ owner, artifact = entry.get("owner"), entry.get("artifact")
87
+ if not (isinstance(owner, str) and isinstance(artifact, str)):
88
+ return None, RefFinding(
89
+ "SOURCE_ENTRY_IS_INCOMPLETE",
90
+ location,
91
+ f"sources[{src!r}] needs owner/artifact",
92
+ )
93
+ elif all(isinstance(ref.get(key), str) for key in ("owner", "artifact")):
94
+ owner, artifact = ref["owner"], ref["artifact"]
95
+ else:
96
+ return None, RefFinding(
97
+ "REF_HAS_NO_UPSTREAM_BINDING", location, "needs src, or owner+artifact"
98
+ )
99
+ optional = {
100
+ key: ref[key] for key in ("record_id", "field", "authority") if isinstance(ref.get(key), str)
101
+ }
102
+ return (
103
+ ResolvedRef(
104
+ owner,
105
+ artifact,
106
+ optional.get("record_id"),
107
+ optional.get("field"),
108
+ optional.get("authority"),
109
+ ),
110
+ None,
111
+ )
112
+
113
+
114
+ # ---------------------------------------------------------------------------
115
+ # END REFERENCE RESOLVER
116
+ # ---------------------------------------------------------------------------
117
+
118
+ # A reference lives under a slot named by convention. `target_locators` is the
119
+ # creator-decision carrier that predates the suffix rule.
120
+ REF_CARRIER_SUFFIXES = ("_ref", "_refs")
121
+ EXTRA_REF_CARRIERS = ("target_locators",)
122
+
123
+
124
+ def is_ref_carrier(key: str) -> bool:
125
+ return key.endswith(REF_CARRIER_SUFFIXES) or key in EXTRA_REF_CARRIERS
126
+
127
+
128
+ def iter_refs(node: Any, location: str) -> Iterator[tuple[Any, str]]:
129
+ """Yield every reference object carried anywhere inside a record."""
130
+ if isinstance(node, list):
131
+ for index, item in enumerate(node):
132
+ yield from iter_refs(item, f"{location}[{index}]")
133
+ return
134
+ if not isinstance(node, dict):
135
+ return
136
+ for key, value in node.items():
137
+ where = f"{location}/{key}"
138
+ if is_ref_carrier(key) and value is not None:
139
+ if isinstance(value, list):
140
+ for index, ref in enumerate(value):
141
+ yield ref, f"{where}[{index}]"
142
+ else:
143
+ yield value, where
144
+ continue
145
+ yield from iter_refs(value, where)
146
+
147
+
148
+ def read_records(path: Path) -> list[Any]:
149
+ return [
150
+ json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line.strip()
151
+ ]
152
+
153
+
154
+ def check_records(records: list[Any], name: str) -> tuple[int, list[RefFinding]]:
155
+ """Resolve every reference in a .jsonl file through its own declaration."""
156
+ sources = load_sources(records)
157
+ resolved = 0
158
+ findings: list[RefFinding] = []
159
+ for number, record in enumerate(records, 1):
160
+ if isinstance(record, dict) and record.get("record_type") == SOURCES_RECORD_TYPE:
161
+ continue
162
+ for ref, where in iter_refs(record, f"{name}:{number}"):
163
+ found, finding = resolve_ref(ref, sources, where)
164
+ if finding is not None:
165
+ findings.append(finding)
166
+ if found is not None:
167
+ resolved += 1
168
+ return resolved, findings
169
+
170
+
171
+ CHECKS = 0
172
+
173
+
174
+ def require(condition: bool, message: str) -> None:
175
+ global CHECKS
176
+ if not condition:
177
+ raise AssertionError(message)
178
+ CHECKS += 1
179
+
180
+
181
+ def main() -> int:
182
+ for relative in EXAMPLE_RECORDS:
183
+ path = SKILL_ROOT / relative
184
+ records = read_records(path)
185
+ declared = load_sources(records)
186
+ require(bool(declared), f"{relative} declares its upstream snapshots")
187
+ resolved, findings = check_records(records, path.name)
188
+ require(not findings, f"{relative} reference findings: {findings}")
189
+ require(resolved > 0, f"{relative} carries at least one resolvable reference")
190
+
191
+ sources = {"screenplay": {"owner": "short-drama-write", "artifact": "a.md", "hash": "0" * 64}}
192
+ _, undeclared = resolve_ref({"src": "missing", "record_id": "BLK-1"}, sources, "synthetic")
193
+ require(
194
+ undeclared is not None and undeclared.code == "REF_SRC_IS_NOT_DECLARED",
195
+ "a src without a sources entry is a structural finding",
196
+ )
197
+ _, unbound = resolve_ref({"record_id": "BLK-1"}, sources, "synthetic")
198
+ require(
199
+ unbound is not None and unbound.code == "REF_HAS_NO_UPSTREAM_BINDING",
200
+ "a reference binding neither way is a structural finding",
201
+ )
202
+ expanded, finding = resolve_ref(
203
+ {
204
+ "owner": "short-drama-write",
205
+ "artifact": "剧集/EP001/screenplay-index.jsonl",
206
+ "hash": "a" * 64,
207
+ "record_id": "BLK-EP001-SC001-A01",
208
+ },
209
+ {},
210
+ "synthetic",
211
+ )
212
+ require(
213
+ finding is None and expanded is not None and expanded.record_id == "BLK-EP001-SC001-A01",
214
+ "a project written before the declaration still resolves",
215
+ )
216
+
217
+ with tempfile.TemporaryDirectory() as directory:
218
+ root = Path(directory) / "project"
219
+ created = initialize_project(
220
+ root,
221
+ title="Self-test",
222
+ language="zh-CN",
223
+ prompt_language="en",
224
+ aspect_ratio="9:16",
225
+ )
226
+ require(created["project"]["title"] == "Self-test", "project title")
227
+ require(
228
+ project_status(root)["project_id"] == created["project"]["project_id"],
229
+ "project discovery",
230
+ )
231
+
232
+ published = publish_candidate(
233
+ root,
234
+ owner="selftest",
235
+ artifact_id="SELFTEST-001",
236
+ outputs={"剧集/EP001/screenplay.md": "# EP001\n"},
237
+ )
238
+ require(published["state"] == "needs_confirmation", "publication state")
239
+
240
+ header = json.dumps(
241
+ {
242
+ "record_type": SOURCES_RECORD_TYPE,
243
+ "schema_version": SOURCES_SCHEMA_VERSION,
244
+ "sources": {
245
+ "screenplay": {
246
+ "owner": "short-drama-write",
247
+ "artifact": "剧集/EP001/screenplay.md",
248
+ "hash": "a" * 64,
249
+ }
250
+ },
251
+ },
252
+ ensure_ascii=False,
253
+ )
254
+ record = json.dumps(
255
+ {"shot_id": "SHOT-001", "source_ref": {"src": "screenplay", "record_id": "BLK-1"}},
256
+ ensure_ascii=False,
257
+ )
258
+ declared_publication = publish_candidate(
259
+ root,
260
+ owner="selftest",
261
+ artifact_id="SELFTEST-002",
262
+ outputs={"剧集/EP001/storyboard/shots.jsonl": f"{header}\n{record}\n"},
263
+ )
264
+ require(
265
+ declared_publication["state"] == "needs_confirmation",
266
+ "a file declaring its upstream snapshots publishes",
267
+ )
268
+
269
+ try:
270
+ publish_candidate(
271
+ root,
272
+ owner="selftest",
273
+ artifact_id="SELFTEST-UNSAFE",
274
+ outputs={"../escape.md": "unsafe"},
275
+ )
276
+ except ValueError:
277
+ rejected = True
278
+ else:
279
+ rejected = False
280
+ require(rejected, "unsafe publication path was accepted")
281
+
282
+ print(f"{CHECKS} self-tests passed")
283
+ return 0
284
+
285
+
286
+ if __name__ == "__main__":
287
+ raise SystemExit(main())
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: short-drama-assets
3
+ description: "从短剧剧本拆解并统筹角色/造型、场景/视图、道具/状态、可选的角色声音方向和跨场连续性。用户说‘拆角色/场景/道具’、‘做资产表/角色表/场景表/道具表’、‘判断复用还是新变体’、‘更新造型/道具状态’、‘给角色定声音/音色/绑定参考音频/做配音选角表’,或拿现成剧本直接做视觉资产准备时使用;本 skill 不写资产图提示词,不生成图片或视频,也不合成音频、不调用任何语音服务。"
4
+ license: MIT
5
+ ---
6
+
7
+ # 短剧资产拆解
8
+
9
+ 把剧本文字变成**可追溯、可复用、能接续状态**的生产资产。重点不是数出
10
+ 多少人名和名词,而是回答:屏幕上具体需要什么、它与已有资产是不是同一个、
11
+ 此刻是哪种造型/视图/状态,以及变化怎样传到下一场和下一集。
12
+
13
+ ## 开始前
14
+
15
+ 本技能可独立安装和执行。先读取用户明确提供的剧本、既有资产与本任务直接输入;若当前目录
16
+ 是 `short-drama` 项目且项目工具可用,可以读取 `status` 并使用其发布生命周期,但缺少 core
17
+ 或任何其他技能都不是资产拆解的阻断条件。[阶段契约](references/stage-contract.md) 给出
18
+ 本阶段边界、制作形态输入与规则表,无需读取其他技能的文件。
19
+
20
+ ## Quick Start
21
+
22
+ 先复制 `examples/minimal/` 的原生 Character/Look JSONL,再修改为当前资产。发布前运行:
23
+
24
+ ```text
25
+ python3 {技能目录}/scripts/asset_check.py \
26
+ --characters examples/minimal/characters.jsonl \
27
+ --looks examples/minimal/looks.jsonl
28
+ python3 {技能目录}/scripts/selftest.py
29
+ ```
30
+
31
+ 校验器只检查稳定 ID、引用能否解析到本文件首行 `sources` 声明的快照、创作者接受状态与
32
+ Look → Character 绑定;身份是否可信、差异是否有戏剧依据仍由创作者和 reviewer 判断。
33
+ 输入路径不存在于当前目录时,会相对本技能目录解析。
34
+
35
+ ## 边界
36
+
37
+ - 资产事实只来自已接受剧本、已有 设定集、连续性和创作者补充;不擅改剧情。
38
+ - 项目存在时读取 `short-drama.json#/creator_authority/{visual_direction,production_profile}`
39
+ 中状态为 `accepted` 的视觉方向与制作形态;独立运行时使用创作者直接提供的等价约束,未提供
40
+ 就保持 `unset`。形态决定哪些身份锚点在本项目里根本可被表达——以剪影为
41
+ 识别通道的形态与以面部结构为识别通道的形态需要不同的锚点集合;若状态为 `unset`,就向
42
+ 创作者给出选择,不从对话记忆补造。形态可以改变锚点的表达通道与颗粒度,不得反过来改写
43
+ 已接受的身份、地理、持物归属、可读文字政策或故事状态。
44
+ - 只拥有 Character/Look、Location/View、Prop/State、occurrence reconciliation
45
+ 和资产状态 delta。知识/信念/目标/关系/情绪等 story-state 可以在连续性
46
+ ledger 中被追踪,但只是带 write/develop source pointer 的投影,不是 assets
47
+ 的第二份真相。剧本语义归 `short-drama-write`,镜头手位/走位归
48
+ `short-drama-storyboard`,图片提示词归 `short-drama-image-prompts`。
49
+ - 可直接接收现成剧本,不强迫补创意开发、故事引擎或集纲。
50
+ - 只产出文本/JSONL;不调用图片、视频、音频模型或 provider API。
51
+ - 创作者可读的产物在项目内跟随 `short-drama.json#/language`,独立运行时跟随用户使用的
52
+ 语言。本阶段不产生送给生成器的
53
+ 提示词正文,与 `#/format/prompt_language` 无关;角色实际说什么语言来自
54
+ `voice_direction.language`,与两者都无关。
55
+
56
+ 所有权边界见 [阶段契约](references/stage-contract.md);只在需要时加载
57
+ 下列专项参考,不要一次读完所有文件。
58
+
59
+ ## 入口判断
60
+
61
+ 1. **已有已接受的 `screenplay.md` 与 index**:直接拆解。
62
+ 2. **已有资产 设定集,只需补集内出现与状态**:读取旧 ID,先判复用,再提新项。
63
+ 3. **只有非 canonical 的中文剧本**:保留原字节到 `输入/`;调用 write owner
64
+ 产生最小规范化预览、语义 diff 和未映射片段。创作者接受前不发布
65
+ `screenplay.md`,拒绝也不改变原稿。接受后直接回来拆资产,不虚构 development。
66
+ 4. **用户只要局部结果**(如“拆本场道具”):仍执行 occurrence → decision,
67
+ 但只呈现所问范围及它依赖的连续性,不用强迫走完整项目流程。
68
+
69
+ 缺少 index 时,不凭行号冒充稳定来源;先请 write owner 对剧本建立 block ID。
70
+
71
+ ## 每轮的工作单元
72
+
73
+ 一轮处理一个明确的来源场次/块范围。整集请求按来源边界拆成若干轮,每轮:
74
+
75
+ 1. 只读这个范围的直接输入,拆出它的资产事实,跑本地结构检查;
76
+ 2. 落盘这个范围,其余范围保持原样;
77
+ 3. 报告已覆盖范围、剩余范围、未决 occurrence 和下一个值得做的范围;
78
+ 4. 交还控制权,等创作者的下一次请求。
79
+
80
+ 图片提示词、分镜和审查各自是独立的工作单元,由创作者明确请求时开始。
81
+
82
+ ## 工作流
83
+
84
+ ### 1. 先读事实边界
85
+
86
+ 读取本集剧本/index、已有 设定集、上集 outgoing、创作者参考与文本政策,以及已接受的
87
+ 视觉方向与制作形态。标记哪个版本已被接受。不要把旧 prompt、旧分镜或文件名当成资产真相。
88
+
89
+ ### 2. 逐块提 occurrence,暂不创建资产
90
+
91
+ 按 source block 收集出镜或生产必需的角色、地点、道具及其显式状态:造型、伤污、
92
+ 所有者、持物手、位置、损坏、内容物、开闭、可读文字、时段、天气、光态和剧情作用。
93
+ 每条 occurrence 先保持“剧本怎样写”的颗粒度,再与资产表对齐。
94
+
95
+ - 不猜“她”“那个人”“另一把钥匙”指谁;保留原称谓和证据,状态设为 unresolved。
96
+ - 区分出镜、画外声、屏幕/照片呈现、仅被提及;被提及不等于要做视觉资产。
97
+ - 不把每个名词都建档。只保留影响识别、复用、提示词、镜头或连续性的事实。
98
+ - 未来的 decisions 先用 locator 指位;decision 建立后由它单向引用 occurrence 的
99
+ exact snapshot。
100
+
101
+ 方法与反例见 `references/occurrence-extraction.md`,记录形状见
102
+ `assets/occurrences.example.jsonl`。
103
+
104
+ ### 3. 再做身份判断
105
+
106
+ 把 occurrence 与已有 设定集 逐项比对,只给四种提案:
107
+
108
+ - `reuse`:持续身份和本次所需变体均已存在;
109
+ - `new_variant`:同一身份,新增 Look/View/State;
110
+ - `new_asset`:持续身份、空间地理或物体功能/形制确实不同;
111
+ - `unresolved`:证据不足或多个候选都成立,等待创作者选择。
112
+
113
+ 先问“同一个东西什么没变”,再问“这次什么变了、为何变、何时有效”。服装、伤势、
114
+ 湿污、灯光、道具开合通常不是新身份;相机角度和瞬时姿势通常连新变体都不是。
115
+ 不要为了少建记录而合并真正不同的资产。详见
116
+ `references/identity-vs-variant.md` 与 `assets/decisions.example.jsonl`。
117
+
118
+ ### 4. 写最小可识别 设定集
119
+
120
+ 按类别沉淀,身份锚点与临时状态绝不混写:
121
+
122
+ - Character / Look:`references/character-and-look.md`;例见
123
+ `assets/character-look.example.jsonl`
124
+ - 声音方向(可选,项目需要跨集保持声音时):`references/voice-direction.md`;
125
+ 音色载体是参考音频;该文件同时说明 `设定集/voice-casting.md` 怎么渲染。只在处理声音时加载
126
+ - Location / View:`references/location-and-view.md`;例见
127
+ `assets/location-view.example.jsonl`
128
+ - Prop / State:`references/prop-and-state.md`;例见
129
+ `assets/prop-state.example.jsonl`
130
+
131
+ 每个新变体记录 base、变化、原因与有效范围。只写能帮助再次认出、复用、提示词
132
+ 编写或连续性检查的事实;不堆砌“高级、精致、电影感”等泛化修饰。
133
+
134
+ ### 5. 写变化,不复制整本 设定集
135
+
136
+ 为交接所需的资产状态变化记录 before、after、剧本原因、开始/结束边界和受影响 binding。
137
+ 重点检查造型/伤势、持物/所有权、道具状态、地点时段/天气/光态以及跨集 outgoing。
138
+ 若为审查需要把知识或关系状态放进 ledger,只保存指向权威字段的引用(`src` 加
139
+ `record_id`、`field`)及必要投影;修订仍路由到 develop/write owner。
140
+ 镜头内部姿势、视线、左右手和站位由 storyboard 边界拥有;资产记录只引用,不抢写。
141
+
142
+ 详见 `references/continuity-delta.md` 与 `assets/continuity.example.jsonl`。
143
+
144
+ ### 6. 给创作者看“决定”,而非只给清单
145
+
146
+ 提交接受预览,按以下顺序呈现:
147
+
148
+ 1. 建议复用(为什么是同一个);
149
+ 2. 建议新增变体(没变什么、变了什么、原因与有效期);
150
+ 3. 建议新增身份(区分它的持久证据);
151
+ 4. 未决项(原文证据、候选、每个选择的下游影响);
152
+ 5. 连续性变化与需带入下一集的 outgoing。
153
+
154
+ 创作者可逐项接受、改名、合并、拆分或暂缓。**creator acceptance 是独立事实**:
155
+ 抽取完成、结构校验通过、review 通过都不能替代创作者接受。只发布被接受的身份和
156
+ 变体;任何 unresolved 都不得编译到图片提示词或分镜 binding。
157
+ 若用户要求一次查看全链而中间没有接受回合,可生成待确认的候选预览;不得伪造创作者决定,且不得交付。
158
+
159
+ ### 7. 发布与修订
160
+
161
+ 发布至 `设定集/*.jsonl` 及 `剧集/<EP>/assets/{occurrences,decisions,continuity}.jsonl`。
162
+ 项目记录了 `voice_direction` 时,`设定集/voice-casting.md` 由已接受记录重新渲染——
163
+ 它是派生文本,手改不会改变任何身份,下一次渲染就会被覆盖。参考音频本身留在 `输入/`。
164
+ 每个文件在首行 `sources` 里声明一次它引用到的上游快照,引用本身写 `src` 加稳定 ID/field,
165
+ 形状见[阶段契约](references/stage-contract.md#跨产物引用)。资产修改后只列出直接读取该
166
+ ID/variant 的提示词、镜头和 review,由相应 owner 按需刷新;不要重写无关资产或 screenplay。
167
+
168
+ ## 规则分类与阻断
169
+
170
+ - `structural_invariant`:occurrence 必有已声明的来源快照与 block ID;decision 必属四类;
171
+ variant 有 base/cause/validity;binding 必须解析到已接受 ID。可机械阻断。
172
+ - `reviewed_invariant`:不可猜含混指代;不可把临时状态混入身份;delta 的剧情原因
173
+ 必须由证据支持。reviewer 引用证据判定,owner 负责修改。
174
+ - `craft_default`:身份不变时优先复用/变体;只跟踪下游有用事实。创作者可说明覆盖。
175
+ - `taste_option`:群演建为个体还是群组、同址空间拆分颗粒度、蒙太奇式跳变方式,
176
+ 由制作策略选择,不单独阻断。
177
+
178
+ ## 完成条件
179
+
180
+ 完成当前有界范围前使用 `references/asset-review-checklist.md`:来源和引用可解析;每个
181
+ occurrence 有明确 decision;未决项保持未决;身份/变体边界可信;连续性能够从
182
+ incoming 走到 outgoing;创作者已经接受本次变更。本 skill 只修订自己拥有的资产事实;
183
+ 需要 delivery verdict 时另行请求 `short-drama-review`,不得从这里自动启动。
184
+
185
+ 创作者要求实际合成声音时,把已接受的声音身份、参考音频和录音表交给
186
+ `$short-drama-produce`。该技能会先展示精确任务预览并等待创作者明确确认;本技能不调用
187
+ 语音服务,也不把资产接受状态当作生产授权。
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "短剧资产拆解"
3
+ short_description: "从剧本拆解角色场景道具、身份变体、状态变化与跨场连续性"
4
+ default_prompt: "使用 $short-drama-assets 从已接受剧本拆解并核对角色、场景、道具、变体和连续性。"
@@ -0,0 +1,3 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"guhe-audition-02":{"owner":"creator","artifact":"输入/voice-refs/guhe-audition-02.wav"},"reference-observations":{"owner":"creator","artifact":"创作者决策/reference-observations.jsonl"},"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"},"cd-char-001":{"owner":"creator","artifact":"创作者决策/cd-char-001.json"},"characters":{"owner":"short-drama-assets","artifact":"设定集/characters.jsonl"},"cd-look-001":{"owner":"creator","artifact":"创作者决策/cd-look-001.json"}}}
2
+ {"example_only":true,"destination":"设定集/characters.jsonl","schema_version":"1.0.0-draft","record_type":"character","character_id":"CHAR-GUHE","display_name":"顾禾","aliases":["小顾"],"identity_anchors":["窄长脸","左眉尾短缺口","自然卷黑发","肩背略前倾"],"persistent_performance_facts":["说话前常先观察对方手里的物件"],"voice_direction":{"language":"zh-CN","reference":{"slot_id":"VREF-GUHE-01","artifact_ref":{"src":"guhe-audition-02"},"role":"timbre","may_control":["音色质感","年龄与体量印象"],"must_not_control":["这条试音稿里的克制情绪","录音棚的混响与话筒距离","背景底噪"],"admission_status":"creator_described","reference_observation_ref":{"src":"reference-observations","record_id":"OBS-VREF-GUHE-01"},"unresolved_risks":[]},"selection_criteria":[{"kind":"register","text":"中低音区,比同剧其他成年男性低半档","counter_example":"低到需要压喉才发得出,就过头了"},{"kind":"rhythm","text":"句尾常收住而不拖长","counter_example":"每句都硬切断,听起来像念稿"}],"distinction":{"nearest_character_id":"CHAR-LINSHU","distinguishing_trait":"顾禾句尾收住;林舒句尾常带一段下滑的余音"},"pronunciation_notes":[{"term":"顾禾","accepted_reading":"Gù Hé"}],"not_voice_identity":["本场因淋雨造成的短暂气息不稳","某句台词的临时音量"]},"not_identity":["本集橙色雨衣","右肩湿痕","瞬时低头"],"source_refs":[{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A01"}],"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-char-001","record_id":"CD-CHAR-001"}}}
3
+ {"example_only":true,"destination":"设定集/looks.jsonl","schema_version":"1.0.0-draft","record_type":"look","look_id":"LOOK-GUHE-RAIN","character_ref":{"src":"characters","record_id":"CHAR-GUHE"},"base_look_id":"LOOK-GUHE-WORK","differences":{"wardrobe_layers":["工作装外加橙色旧雨衣"],"hair_styling":["低束,兜帽放下"],"makeup":[],"injury":[],"weathering":[]},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A01"},"validity":{"from":"EP003/SC004/BLK-EP003-SC004-A01","until":"EP003/SC006/BLK-EP003-SC006-A03"},"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-look-001","record_id":"CD-LOOK-001"}}}
@@ -0,0 +1,4 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"props":{"owner":"short-drama-assets","artifact":"设定集/props.jsonl"},"prop-states":{"owner":"short-drama-assets","artifact":"设定集/prop-states.jsonl"},"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"},"locations":{"owner":"short-drama-assets","artifact":"设定集/locations.jsonl"}}}
2
+ {"example_only":true,"schema_version":"1.0.0-draft","delta_id":"DELTA-TIN-OPEN","episode_id":"EP003","scene_id":"SC004","subject_ref":{"src":"props","record_id":"PROP-TIN-CASE"},"state_field":"condition.open","before":{"value":"closed","state_ref":{"src":"prop-states","record_id":"PSTATE-TIN-CLOSED-BADGE-IN"}},"after":{"value":"open","proposed_state_id":"PSTATE-TIN-OPEN-EMPTY"},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A03"},"effective_range":{"from":"EP003/SC004/BLK-EP003-SC004-A03","until":"open_ended"},"reconciliation":{"next_linked_start":"EP003/SC005/start","status":"must_match_or_revise"},"creator_acceptance":{"status":"proposed","decision_ref":null},"affected_binding_refs":[{"src":"props","record_id":"PROP-TIN-CASE"}],"affected_binding_locators":[{"owner":"short-drama-storyboard","artifact":"剧集/EP003/storyboard/shots.jsonl","selector":{"asset_or_variant_ids":["PROP-TIN-CASE","PROP-CERAMIC-BADGE-017"]},"status":"future_until_shots_exist"}],"destination":"剧集/EP003/assets/continuity.jsonl"}
3
+ {"example_only":true,"schema_version":"1.0.0-draft","delta_id":"DELTA-BADGE-TRANSFER","episode_id":"EP003","scene_id":"SC004","subject_ref":{"src":"props","record_id":"PROP-CERAMIC-BADGE-017"},"state_field":"custody","before":{"owner":"CHAR-GUHE","holder":"CHAR-GUHE","hand":"right"},"after":{"owner":"CHAR-WEISHU","holder":"CHAR-WEISHU","hand":"right"},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A04"},"effective_range":{"from":"EP003/SC004/BLK-EP003-SC004-A04","until":"open_ended"},"reconciliation":{"next_linked_start":"EP003/SC005/start","status":"must_match_or_revise"},"creator_acceptance":{"status":"proposed","decision_ref":null},"affected_binding_refs":[{"src":"props","record_id":"PROP-CERAMIC-BADGE-017"}],"affected_binding_locators":[{"owner":"short-drama-storyboard","artifact":"剧集/EP003/storyboard/shots.jsonl","selector":{"asset_or_variant_ids":["PROP-CERAMIC-BADGE-017","CHAR-GUHE","CHAR-WEISHU"]},"status":"future_until_shots_exist"}],"destination":"剧集/EP003/assets/continuity.jsonl"}
4
+ {"example_only":true,"schema_version":"1.0.0-draft","delta_id":"DELTA-OFFICE-BLACKOUT","episode_id":"EP003","scene_id":"SC004","subject_ref":{"src":"locations","record_id":"LOC-FERRY-OFFICE"},"state_field":"active_view","before":{"value":"VIEW-FERRY-OFFICE-NORTH-NIGHT"},"after":{"value":"VIEW-FERRY-OFFICE-NORTH-BLACKOUT"},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A04"},"effective_range":{"from":"EP003/SC004/BLK-EP003-SC004-A04","until":"open_ended"},"reconciliation":{"next_linked_start":"EP003/SC005/start","status":"must_match_or_revise"},"creator_acceptance":{"status":"proposed","decision_ref":null},"affected_binding_refs":[{"src":"locations","record_id":"LOC-FERRY-OFFICE"}],"affected_binding_locators":[{"owner":"short-drama-storyboard","artifact":"剧集/EP003/storyboard/shots.jsonl","selector":{"asset_or_variant_ids":["LOC-FERRY-OFFICE","VIEW-FERRY-OFFICE-NORTH-BLACKOUT"]},"status":"future_until_shots_exist"}],"destination":"剧集/EP003/assets/continuity.jsonl"}
@@ -0,0 +1,5 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"occurrences":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/occurrences.jsonl"},"characters":{"owner":"short-drama-assets","artifact":"设定集/characters.jsonl"},"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"},"location-views":{"owner":"short-drama-assets","artifact":"设定集/location-views.jsonl"}}}
2
+ {"example_only":true,"schema_version":"1.0.0-draft","decision_id":"DEC-OCC-001","occurrence_refs":[{"src":"occurrences","record_id":"OCC-EP003-SC004-001","authority":"candidate"}],"decision_kind":"new_variant","asset_kind":"character","proposed_binding":{"identity_id":"CHAR-GUHE","variant_id":"LOOK-GUHE-RAIN"},"base_ref":{"src":"characters","record_id":"CHAR-GUHE"},"persistent_evidence":["剧本沿用顾禾的身份和关系","已有永久识别锚点未改变"],"differences":["在工作装外加橙色旧雨衣","兜帽放下"],"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A01"},"validity":{"from":"EP003/SC004/BLK-EP003-SC004-A01","until":"EP003/SC006/BLK-EP003-SC006-A03"},"rationale":"人物持续身份不变;跨场服装需要精确绑定","creator_acceptance":{"status":"proposed","decision_ref":null},"downstream_impact":["character_image_prompt","affected_storyboard_bindings"],"destination":"剧集/EP003/assets/decisions.jsonl"}
3
+ {"example_only":true,"schema_version":"1.0.0-draft","decision_id":"DEC-OCC-002","occurrence_refs":[{"src":"occurrences","record_id":"OCC-EP003-SC004-002","authority":"candidate"}],"decision_kind":"reuse","asset_kind":"location","proposed_binding":{"identity_id":"LOC-FERRY-OFFICE","variant_id":"VIEW-FERRY-OFFICE-NORTH-NIGHT"},"base_ref":{"src":"location-views","record_id":"VIEW-FERRY-OFFICE-NORTH-NIGHT"},"persistent_evidence":["北门、河窗和柜台的地理与已有 View 一致"],"differences":[],"cause_ref":null,"validity":{"from":"EP003/SC004","until":"EP003/SC004/BLK-EP003-SC004-A04"},"rationale":"同一空间、同一可复用方向与正常夜间光态","creator_acceptance":{"status":"proposed","decision_ref":null},"downstream_impact":["affected_storyboard_bindings"],"destination":"剧集/EP003/assets/decisions.jsonl"}
4
+ {"example_only":true,"schema_version":"1.0.0-draft","decision_id":"DEC-OCC-003","occurrence_refs":[{"src":"occurrences","record_id":"OCC-EP003-SC004-003","authority":"candidate"}],"decision_kind":"new_asset","asset_kind":"prop","proposed_binding":{"identity_id":"PROP-TIN-CASE","variant_id":"PSTATE-TIN-CLOSED-BADGE-IN"},"base_ref":null,"persistent_evidence":["扁长黑铁匣","铰链盖","右前角永久凹陷","用于保存号牌"],"differences":[],"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A02"},"validity":{"from":"EP003/SC004","until":"open_ended"},"rationale":"现有 设定集 无同时匹配形制、唯一凹陷和叙事功能的 Prop","creator_acceptance":{"status":"proposed","decision_ref":null},"downstream_impact":["prop_image_prompt","affected_storyboard_bindings","continuity"],"destination":"剧集/EP003/assets/decisions.jsonl"}
5
+ {"example_only":true,"schema_version":"1.0.0-draft","decision_id":"DEC-OCC-004","occurrence_refs":[{"src":"occurrences","record_id":"OCC-EP003-SC004-004","authority":"candidate"}],"decision_kind":"unresolved","asset_kind":"character","proposed_binding":null,"candidate_bindings":[{"identity_id":"CHAR-GUHE","support":"此前顾禾靠近北门","conflict":"最近动作主语已切换"},{"identity_id":"CHAR-WEISHU","support":"最近一句台词属于魏叔","conflict":"未写他走向北门"}],"persistent_evidence":[],"differences":[],"cause_ref":null,"validity":null,"rationale":"代词没有唯一先行项;不得以距离或最近姓名猜测","creator_question":"从北门离开的‘她’具体是谁?若为新人物,请补可识别称谓。","creator_acceptance":{"status":"pending_choice","decision_ref":null},"downstream_impact":["blocks_character_binding","blocks_dependent_storyboard"],"destination":"剧集/EP003/assets/decisions.jsonl"}
@@ -0,0 +1,3 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"},"cd-loc-001":{"owner":"creator","artifact":"创作者决策/cd-loc-001.json"},"locations":{"owner":"short-drama-assets","artifact":"设定集/locations.jsonl"},"cd-view-001":{"owner":"creator","artifact":"创作者决策/cd-view-001.json"}}}
2
+ {"example_only":true,"destination":"设定集/locations.jsonl","schema_version":"1.0.0-draft","record_type":"location","location_id":"LOC-FERRY-OFFICE","display_name":"旧渡站值班室","spatial_identity":{"shape":"狭长室内","zones":["柜台内工作区","柜台外等候区"],"entrances":[{"id":"north_door","connects_to":"LOC-FERRY-HALL"}],"fixed_anchors":["东侧河窗","西侧整面旧柜台","柜台后墙配电箱"],"materials":["磨损木柜台","灰白粉刷墙","旧金属窗框"]},"not_identity":["夜间","停电","顾禾站在北门","低机位"],"source_refs":[{"src":"screenplay-index","record_id":"BLK-EP003-SC004-H01"}],"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-loc-001","record_id":"CD-LOC-001"}}}
3
+ {"example_only":true,"destination":"设定集/location-views.jsonl","schema_version":"1.0.0-draft","record_type":"location_view","view_id":"VIEW-FERRY-OFFICE-NORTH-BLACKOUT","location_ref":{"src":"locations","record_id":"LOC-FERRY-OFFICE"},"base_view_id":"VIEW-FERRY-OFFICE-NORTH-NIGHT","orientation":{"from_zone":"柜台内工作区","toward":"北门","visible_fixed_anchors":["北门","东侧河窗","柜台后墙配电箱"]},"state_differences":{"dressing":[],"time":"night","weather":"heavy_rain_outside","light":["顶灯熄灭","河窗冷光保留"]},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A04"},"validity":{"from":"EP003/SC004/BLK-EP003-SC004-A04","until":"open_ended"},"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-view-001","record_id":"CD-VIEW-001"}}}
@@ -0,0 +1,5 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"}}}
2
+ {"example_only":true,"schema_version":"1.0.0-draft","occurrence_id":"OCC-EP003-SC004-001","episode_id":"EP003","scene_id":"SC004","asset_kind":"character","surface_form":"顾禾","presence":"on_screen","source_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A01"},"source_blocks":["BLK-EP003-SC004-A01"],"extracted_projection":{"role":"derived_projection","visible_facts":["外穿橙色旧雨衣","兜帽放下"],"explicit_state":{"look_hint":"rain_shell","wetness":"dry_at_entry"}},"story_function":["enters_location","carries_case"],"production_disposition":"visual_asset_required","proposed_binding":{"character_id":"CHAR-GUHE","look_id":"LOOK-GUHE-RAIN"},"reconciliation":{"role":"derived_annotation","decision_locator":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/decisions.jsonl","selector":{"occurrence_id":"OCC-EP003-SC004-001"},"status":"future_until_decision_exists"},"status":"proposed"},"continuity_delta_ref":null,"destination":"剧集/EP003/assets/occurrences.jsonl"}
3
+ {"example_only":true,"schema_version":"1.0.0-draft","occurrence_id":"OCC-EP003-SC004-002","episode_id":"EP003","scene_id":"SC004","asset_kind":"location","surface_form":"旧渡站值班室","presence":"on_screen","source_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-H01"},"source_blocks":["BLK-EP003-SC004-H01","BLK-EP003-SC004-A01"],"extracted_projection":{"role":"derived_projection","visible_facts":["北门通向候船厅","东侧河窗","夜间顶灯亮"],"explicit_state":{"time":"night","light":"ceiling_light_on"}},"story_function":["action_space","later_blackout_setup"],"production_disposition":"visual_asset_required","proposed_binding":{"location_id":"LOC-FERRY-OFFICE","view_id":"VIEW-FERRY-OFFICE-NORTH-NIGHT"},"reconciliation":{"role":"derived_annotation","decision_locator":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/decisions.jsonl","selector":{"occurrence_id":"OCC-EP003-SC004-002"},"status":"future_until_decision_exists"},"status":"proposed"},"continuity_delta_ref":null,"destination":"剧集/EP003/assets/occurrences.jsonl"}
4
+ {"example_only":true,"schema_version":"1.0.0-draft","occurrence_id":"OCC-EP003-SC004-003","episode_id":"EP003","scene_id":"SC004","asset_kind":"prop","surface_form":"铁皮匣","presence":"on_screen","source_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A02"},"source_blocks":["BLK-EP003-SC004-A02"],"extracted_projection":{"role":"derived_projection","visible_facts":["顾禾将匣放上柜台","匣起初闭合"],"explicit_state":{"condition":"closed","holder":"CHAR-GUHE","location":"counter"}},"story_function":["contains_reveal_object","supports_readable_text_reveal"],"production_disposition":"hero_prop_required","proposed_binding":{"prop_id":"PROP-TIN-CASE","state_id":"PSTATE-TIN-CLOSED-BADGE-IN"},"reconciliation":{"role":"derived_annotation","decision_locator":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/decisions.jsonl","selector":{"occurrence_id":"OCC-EP003-SC004-003"},"status":"future_until_decision_exists"},"status":"proposed"},"destination":"剧集/EP003/assets/occurrences.jsonl","continuity_delta_locator":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/continuity.jsonl","selector":{"source_occurrence_id":"OCC-EP003-SC004-003"},"status":"future_until_delta_exists"}}
5
+ {"example_only":true,"schema_version":"1.0.0-draft","occurrence_id":"OCC-EP003-SC004-004","episode_id":"EP003","scene_id":"SC004","asset_kind":"character","surface_form":"她","presence":"on_screen","source_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A05"},"source_blocks":["BLK-EP003-SC004-A05"],"extracted_projection":{"role":"derived_projection","visible_facts":["从北门离开"],"explicit_state":{}},"story_function":["exits_with_unknown_identity"],"production_disposition":"identity_resolution_required","proposed_binding":null,"candidate_bindings":["CHAR-GUHE","CHAR-WEISHU"],"ambiguity":"block 内无唯一先行项,两个已出场角色均可能","reconciliation":{"role":"derived_annotation","decision_locator":{"owner":"short-drama-assets","artifact":"剧集/EP003/assets/decisions.jsonl","selector":{"occurrence_id":"OCC-EP003-SC004-004"},"status":"future_until_decision_exists"},"status":"unresolved"},"continuity_delta_ref":null,"destination":"剧集/EP003/assets/occurrences.jsonl"}
@@ -0,0 +1,3 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/EP003/screenplay-index.jsonl"},"cd-prop-001":{"owner":"creator","artifact":"创作者决策/cd-prop-001.json"},"props":{"owner":"short-drama-assets","artifact":"设定集/props.jsonl"},"cd-pstate-001":{"owner":"creator","artifact":"创作者决策/cd-pstate-001.json"}}}
2
+ {"example_only":true,"destination":"设定集/props.jsonl","schema_version":"1.0.0-draft","record_type":"prop","prop_id":"PROP-TIN-CASE","display_name":"黑铁皮匣","identity_anchors":{"scale":"手掌至小臂长度的扁长匣","form":"铰链盖,长方体,右前角凹陷","materials":["黑色旧铁皮"],"function":"保存渡站号牌","permanent_marks":["右前角永久凹陷"]},"text_policy":{"mode":"exact_readable","text":"潮位 7","placement":"匣盖内侧","source_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A03"}},"source_refs":[{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A02"}],"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-prop-001","record_id":"CD-PROP-001"}}}
3
+ {"example_only":true,"destination":"设定集/prop-states.jsonl","schema_version":"1.0.0-draft","record_type":"prop_state","state_id":"PSTATE-TIN-CLOSED-BADGE-IN","prop_ref":{"src":"props","record_id":"PROP-TIN-CASE"},"condition":{"open":"closed","damage":"right_front_dent_only","powered":"not_applicable"},"custody":{"owner":"CHAR-GUHE","holder":"CHAR-GUHE","hand":null,"location":"under_ferry_office_counter"},"contents":["PROP-CERAMIC-BADGE-017"],"text_visibility":"hidden_while_closed","validity":{"from":"EP003/SC004/start","until":"EP003/SC004/BLK-EP003-SC004-A03"},"cause_ref":{"src":"screenplay-index","record_id":"BLK-EP003-SC004-A02"},"creator_acceptance":{"status":"accepted","decision_ref":{"src":"cd-pstate-001","record_id":"CD-PSTATE-001"}}}
@@ -0,0 +1,2 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"input-script":{"owner":"creator","artifact":"input-script.md"},"decisions":{"owner":"creator","artifact":"decisions.json"}}}
2
+ {"schema_version":"1.0.0-draft","record_type":"character","character_id":"CHAR-LIN","display_name":"林岚","aliases":[],"identity_anchors":["齐下颌黑发","左眉尾浅疤","站立时重心偏右"],"persistent_performance_facts":["回答前先看向出口"],"not_identity":["本场湿外套"],"source_refs":[{"src":"input-script","record_id":"SC001-A01"}],"creator_acceptance":{"status":"accepted","decision_ref":{"src":"decisions","record_id":"CD-CHAR-LIN"}}}
@@ -0,0 +1,2 @@
1
+ {"record_type":"sources","schema_version":"1.0.0","sources":{"characters":{"owner":"short-drama-assets","artifact":"characters.jsonl"},"input-script":{"owner":"creator","artifact":"input-script.md"},"decisions":{"owner":"creator","artifact":"decisions.json"}}}
2
+ {"schema_version":"1.0.0-draft","record_type":"look","look_id":"LOOK-LIN-RAIN","character_ref":{"src":"characters","record_id":"CHAR-LIN"},"base_look_id":"LOOK-LIN-BASE","differences":{"wardrobe_layers":["深蓝旧雨衣"],"weathering":["肩部雨水加深"]},"cause_ref":{"src":"input-script","record_id":"SC001-A01"},"validity":{"from":"SC001/A01","until":"SC002/end"},"creator_acceptance":{"status":"accepted","decision_ref":{"src":"decisions","record_id":"CD-LOOK-LIN-RAIN"}}}