@oh-story/dsh 0.1.16 → 0.1.18

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 (271) hide show
  1. package/README.md +13 -13
  2. package/lib/client.js +173 -111
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/package.json +4 -0
  5. package/lib/index.js +58 -28
  6. package/lib/index.js.map +2 -2
  7. package/lib/novel-to-game/README.md +3 -3
  8. package/lib/novel-to-game/README_ZH.md +4 -4
  9. package/lib/novel-to-game/VERSION +1 -1
  10. package/lib/novel-to-game/manifest.json +25 -20
  11. package/lib/novel-to-game/package.json +4 -0
  12. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +4 -0
  13. package/lib/novel-to-game/skills/game-build/SKILL.md +7 -1
  14. package/lib/novel-to-game/skills/game-build/references/baked-sprite-workflow.md +19 -0
  15. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +4 -1
  16. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +6 -3
  17. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +1 -0
  18. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +13 -2
  19. package/lib/oh-story/manifest.json +417 -592
  20. package/lib/oh-story/package.json +4 -0
  21. package/lib/oh-story/roles/chapter-extractor.md +4 -3
  22. package/lib/oh-story/roles/character-designer.md +20 -85
  23. package/lib/oh-story/roles/consistency-checker.md +5 -5
  24. package/lib/oh-story/roles/narrative-writer.md +9 -9
  25. package/lib/oh-story/roles/story-architect.md +19 -26
  26. package/lib/oh-story/roles/story-explorer.md +4 -5
  27. package/lib/oh-story/roles/story-researcher.md +6 -7
  28. package/lib/oh-story/skills/browser-cdp/SKILL.md +26 -15
  29. package/lib/oh-story/skills/story/SKILL.md +94 -54
  30. package/lib/oh-story/skills/story/VERSION +1 -1
  31. package/lib/oh-story/skills/story-cover/SKILL.md +41 -220
  32. package/lib/oh-story/skills/story-cover/references/api-fallback.md +128 -0
  33. package/lib/oh-story/skills/story-cover/references/cover-styles.md +61 -95
  34. package/lib/oh-story/skills/story-deslop/SKILL.md +32 -27
  35. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +4 -4
  36. package/lib/oh-story/skills/story-deslop/references/banned-words.md +7 -9
  37. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +12 -12
  38. package/lib/oh-story/skills/story-deslop/references/expression.md +10 -3
  39. package/lib/oh-story/skills/story-deslop/references/story-logic.md +1 -1
  40. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +1 -1
  41. package/lib/oh-story/skills/story-import/SKILL.md +12 -11
  42. package/lib/oh-story/skills/story-import/references/benchmark-sync.md +50 -0
  43. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +3 -4
  44. package/lib/oh-story/skills/story-import/references/deep-analysis.md +2 -3
  45. package/lib/oh-story/skills/story-import/references/import-report.md +5 -4
  46. package/lib/oh-story/skills/story-import/references/import-special-cases.md +6 -16
  47. package/lib/oh-story/skills/story-import/references/import-tracking.md +2 -2
  48. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -43
  49. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +8 -8
  50. package/lib/oh-story/skills/story-import/references/outline-reverse.md +2 -2
  51. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +113 -125
  52. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +77 -88
  53. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +36 -59
  54. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +5 -1
  55. package/lib/oh-story/skills/story-import/scripts/outline_view.py +286 -0
  56. package/lib/oh-story/skills/story-long-analyze/SKILL.md +38 -75
  57. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +21 -23
  58. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +8 -17
  59. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +18 -5
  60. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +8 -14
  61. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +26 -27
  62. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +74 -162
  63. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +124 -309
  64. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +49 -166
  65. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +12 -15
  66. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +110 -34
  67. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +12 -2
  68. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +3 -1
  69. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +5 -1
  70. package/lib/oh-story/skills/story-long-scan/SKILL.md +49 -72
  71. package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +47 -167
  72. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +23 -8
  73. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +24 -22
  74. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +25 -13
  75. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +41 -27
  76. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +24 -16
  77. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +31 -33
  78. package/lib/oh-story/skills/story-long-write/SKILL.md +5 -5
  79. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +1 -1
  80. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +51 -24
  81. package/lib/oh-story/skills/story-long-write/references/banned-words.md +7 -9
  82. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +3 -3
  83. package/lib/oh-story/skills/story-long-write/references/character-basics.md +57 -95
  84. package/lib/oh-story/skills/story-long-write/references/character-relations.md +119 -269
  85. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +2 -2
  86. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +8 -8
  87. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +7 -7
  88. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +38 -298
  89. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +12 -53
  90. package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +39 -85
  91. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +97 -163
  92. package/lib/oh-story/skills/story-long-write/references/long-chapter-hooks.md +39 -119
  93. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +39 -91
  94. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +81 -310
  95. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +115 -326
  96. package/lib/oh-story/skills/story-long-write/references/long-reversal.md +1 -1
  97. package/lib/oh-story/skills/story-long-write/references/long-suspense.md +8 -8
  98. package/lib/oh-story/skills/story-long-write/references/opening-design.md +38 -334
  99. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +128 -281
  100. package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +58 -499
  101. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -14
  102. package/lib/oh-story/skills/story-long-write/references/reference-index.md +29 -82
  103. package/lib/oh-story/skills/story-long-write/references/revision-diagnosis.md +31 -0
  104. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +2 -2
  105. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +12 -19
  106. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +3 -171
  107. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +1 -1
  108. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +8 -6
  109. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +2 -2
  110. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +47 -47
  111. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +7 -7
  112. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +4 -9
  113. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +72 -98
  114. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +59 -115
  115. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +38 -18
  116. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +23 -11
  117. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +5 -1
  118. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +1 -1
  119. package/lib/oh-story/skills/story-review/SKILL.md +26 -24
  120. package/lib/oh-story/skills/story-review/references/agent-prompts.md +13 -9
  121. package/lib/oh-story/skills/story-review/references/banned-words.md +7 -9
  122. package/lib/oh-story/skills/story-review/references/expression.md +10 -3
  123. package/lib/oh-story/skills/story-review/references/quality-rubric.md +7 -7
  124. package/lib/oh-story/skills/story-review/references/review-tracking.md +2 -1
  125. package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +8 -9
  126. package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +9 -11
  127. package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +9 -8
  128. package/lib/oh-story/skills/story-review/references/solo.md +6 -5
  129. package/lib/oh-story/skills/story-review/references/story-logic.md +1 -1
  130. package/lib/oh-story/skills/story-review/references/style-resolution.md +1 -1
  131. package/lib/oh-story/skills/story-setup/SKILL.md +24 -31
  132. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +12 -13
  133. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +7 -9
  134. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +1 -1
  135. package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +57 -95
  136. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +119 -269
  137. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +12 -12
  138. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +8 -8
  139. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +7 -7
  140. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +38 -298
  141. package/lib/oh-story/skills/story-setup/references/agent-references/expression.md +10 -3
  142. package/lib/oh-story/skills/story-setup/references/agent-references/female-audience-writing.md +141 -0
  143. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +96 -161
  144. package/lib/oh-story/skills/story-setup/references/agent-references/long-chapter-hooks.md +39 -119
  145. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +13 -54
  146. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +81 -310
  147. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +115 -326
  148. package/lib/oh-story/skills/story-setup/references/agent-references/long-reversal.md +1 -1
  149. package/lib/oh-story/skills/story-setup/references/agent-references/long-suspense.md +8 -8
  150. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +38 -334
  151. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +128 -281
  152. package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +58 -499
  153. package/lib/oh-story/skills/story-setup/references/agent-references/short-chapter-hooks.md +63 -171
  154. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +11 -63
  155. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +40 -50
  156. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +14 -39
  157. package/lib/oh-story/skills/story-setup/references/agent-references/story-logic.md +1 -1
  158. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +12 -19
  159. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +3 -171
  160. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +1 -1
  161. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +59 -115
  162. package/lib/oh-story/skills/story-short-analyze/SKILL.md +41 -90
  163. package/lib/oh-story/skills/story-short-analyze/references/analysis-characters.md +66 -0
  164. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +21 -20
  165. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +4 -3
  166. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +4 -4
  167. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +5 -5
  168. package/lib/oh-story/skills/story-short-analyze/references/analysis-submission.md +52 -0
  169. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +23 -73
  170. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +25 -26
  171. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +20 -38
  172. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +9 -158
  173. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +39 -26
  174. package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +42 -71
  175. package/lib/oh-story/skills/story-short-scan/SKILL.md +52 -62
  176. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +16 -12
  177. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +10 -4
  178. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +15 -6
  179. package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +34 -72
  180. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +33 -13
  181. package/lib/oh-story/skills/story-short-write/SKILL.md +5 -5
  182. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +3 -3
  183. package/lib/oh-story/skills/story-short-write/references/banned-words.md +7 -9
  184. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +17 -22
  185. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +22 -37
  186. package/lib/oh-story/skills/story-short-write/references/deslop-gates.md +12 -12
  187. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +8 -8
  188. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +11 -63
  189. package/lib/oh-story/skills/story-short-write/references/expression.md +10 -3
  190. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
  191. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +6 -6
  192. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +8 -8
  193. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +4 -4
  194. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +9 -9
  195. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +10 -10
  196. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
  197. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +6 -6
  198. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +6 -6
  199. 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 +12 -12
  200. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +40 -50
  201. package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +63 -171
  202. package/lib/oh-story/skills/story-short-write/references/reference-index.md +13 -14
  203. package/lib/oh-story/skills/story-short-write/references/short-craft.md +10 -29
  204. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +2 -2
  205. package/lib/oh-story/skills/story-short-write/references/short-format.md +12 -32
  206. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +14 -39
  207. package/lib/oh-story/skills/story-short-write/references/story-logic.md +1 -1
  208. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +1 -1
  209. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +29 -19
  210. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +14 -19
  211. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +67 -26
  212. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +10 -11
  213. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +50 -69
  214. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +21 -16
  215. package/lib/types/client/file-activity.d.ts +10 -0
  216. package/lib/types/client/file-activity.d.ts.map +1 -1
  217. package/lib/types/client/game-preview-state.d.ts +34 -0
  218. package/lib/types/client/game-preview-state.d.ts.map +1 -0
  219. package/lib/types/client/index.d.ts.map +1 -1
  220. package/lib/types/client/video-studio.d.ts +24 -0
  221. package/lib/types/client/video-studio.d.ts.map +1 -1
  222. package/lib/types/host-python.d.ts +10 -3
  223. package/lib/types/host-python.d.ts.map +1 -1
  224. package/lib/types/native-hooks.d.ts.map +1 -1
  225. package/lib/types/skill-provider.d.ts.map +1 -1
  226. package/lib/types/workspace-route.d.ts +6 -0
  227. package/lib/types/workspace-route.d.ts.map +1 -1
  228. package/lib/video-recap/package.json +4 -0
  229. package/package.json +23 -23
  230. package/lib/oh-story/skills/story-import/references/format-and-structure.md +0 -168
  231. package/lib/oh-story/skills/story-import/references/state-tracking.md +0 -45
  232. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +0 -146
  233. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +0 -270
  234. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +0 -84
  235. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +0 -133
  236. package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +0 -101
  237. package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +0 -92
  238. package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +0 -428
  239. package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +0 -503
  240. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +0 -34
  241. package/lib/oh-story/skills/story-long-write/references/expression.md +0 -76
  242. package/lib/oh-story/skills/story-long-write/references/narrative-focus.md +0 -63
  243. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +0 -457
  244. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +0 -389
  245. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +0 -272
  246. package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +0 -354
  247. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +0 -710
  248. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +0 -624
  249. package/lib/oh-story/skills/story-long-write/references/story-logic.md +0 -65
  250. package/lib/oh-story/skills/story-long-write/references/style-craft.md +0 -306
  251. package/lib/oh-story/skills/story-review/references/character-relations.md +0 -433
  252. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +0 -285
  253. package/lib/oh-story/skills/story-review/references/plot-core-methods.md +0 -522
  254. package/lib/oh-story/skills/story-review/references/review-quality.md +0 -243
  255. package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +0 -428
  256. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +0 -457
  257. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +0 -389
  258. package/lib/oh-story/skills/story-setup/references/agent-references/short-paragraph-hooks.md +0 -145
  259. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-basics.md +0 -433
  260. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-design.md +0 -426
  261. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +0 -384
  262. package/lib/oh-story/skills/story-short-analyze/references/analysis-paragraph-hooks.md +0 -144
  263. package/lib/oh-story/skills/story-short-analyze/references/analysis-reader-profile.md +0 -238
  264. package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +0 -464
  265. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +0 -79
  266. package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +0 -89
  267. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +0 -54
  268. package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +0 -145
  269. package/lib/oh-story/skills/story-short-write/references/output-contract.md +0 -116
  270. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +0 -207
  271. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +0 -50
@@ -0,0 +1,4 @@
1
+ {
2
+ "private": true,
3
+ "description": "Bundled upstream Skills; no module type so scripts resolve as in an upstream install."
4
+ }
package/lib/index.js CHANGED
@@ -133,7 +133,7 @@ var DSH_SKILL_BRIDGE = [
133
133
  "Use only DSH-visible tools. DSH sandbox and permission policy remain authoritative.",
134
134
  // Upstream deploys these 「与作者协作」 rules only in its CLAUDE.md/AGENTS.md
135
135
  // templates, which DSH does not install.
136
- "Working with the author: reply and report in the author's writing terms (book, chapter, outline, settings), never in script, field, or state names; attach a raw error only when something failed. A template block marked <!-- author-report --> is only a format reference: output its text directly, without that marker and without a code fence.",
136
+ "Working with the author: reply in the language the author writes in, and keep progress updates in that language while you wait for oh_story_role or any other background helper to return; reply and report in the author's writing terms (book, chapter, outline, settings), never in script, field, or state names; attach a raw error only when something failed. A template block marked <!-- author-report --> is only a format reference: output its text directly, without that marker and without a code fence.",
137
137
  "Manage a writing habit or preference only through story-long-write or story-short-write and that writing Skill's references/author-memory.md and scripts/author_memory_commit.py; never keep it in a host or DSH memory. The story entry only routes memory requests. story-deslop and story-review consume only preferences already supplied by their caller and never query or record author memory themselves. Simply follow a one-off request without recording it.",
138
138
  "Never edit the bundled Skill files (SKILL.md, references/, scripts/). When a Skill script fails, stop and show the author the command you ran and its error instead of patching or working around it.",
139
139
  "</oh-story-dsh-integration>"
@@ -152,7 +152,7 @@ var DSH_SKILL_OVERRIDES = {
152
152
  "story-long-analyze": `Use oh_story_role for chapter extraction or specialist analysis. Never inspect platform agent directories or require a deployed external Agent definition. ${DSH_ANALYSIS_BATCHES}`,
153
153
  "story-long-write": `All named Roles are provided through oh_story_role. Do not check platform agent files. Keep the upstream writing, Tracking, lint, outline, revision, and quality workflows. Create and assemble \u6B63\u6587/ chapter files only with the write and edit tools, never through shell redirection, cp, mv, tee, or a script, so that DSH's outline guard, its Tracking reminder, and the \u5C0F\u8BF4 view observe the write; upstream's own in-place chapter fixes such as storyctl.py chapter check --fix-punctuation stay as upstream describes. ${DSH_AUTHOR_MEMORY_WORKSPACE}`,
154
154
  "story-review": "All named reviewer Roles are provided through oh_story_role. Do not check platform agent files; full/lean review may use the bundled Roles directly. When a review falls back to solo in DSH, the reason is that oh_story_role or DSH's spawn runtime is unavailable in this Session (Fallback agent tool unavailable -> solo) or a Role run failed (Fallback spawn failed -> solo); say that in one plain sentence. Never tell the author that the reviewers are not installed, missing, or outdated, and never tell them to run /story-setup.",
155
- "story-import": `All named Roles are provided through oh_story_role. Do not require story-setup to deploy them, never inspect platform agent directories or .story-deployed, and never offer the author Step 4's choice to install a writing environment with /story-setup: in DSH record \u5199\u4F5C\u73AF\u5883 in .story/work/\u5BFC\u5165\u8BB0\u5F55.md as installed, with the analysis helper and story-architect both available. Phase 2 runs the story-long-analyze pipeline the DSH way below; an import counts as automatic continuation, so it uses the limited-parallel tier without asking. ${DSH_ANALYSIS_BATCHES} Run the scripts this Skill needs (build_outline_brief.py, tracking_commit.py init and check with Python 3; check-outline-contract.js with Node) the same way. Keep upstream's order: Phase 3-L Step 2 copies the manuscript into \u6B63\u6587/, Step 10 reverse-builds the \u7EC6\u7EB2 in batches, and Phase 4 initialises Tracking. DSH's prose guard mirrors the outline gate of upstream proseBlockReason for books with \u5927\u7EB2/ or \u8FFD\u8E2A/, so open an import window before Step 2 copies any chapter: create .story/work/\u5BFC\u5165\u4E2D.md in the book directory (the workspace root in DSH's usual single-book layout) with one line naming the book being imported, and delete it right after Phase 4's tracking_commit.py init and check both succeed. The window only holds while \u8FFD\u8E2A/_tracking-state.json is absent. \u5BFC\u5165\u4E2D.md is DSH's own marker; keep upstream's \u5BFC\u5165\u8BB0\u5F55.md exactly as the Skill describes.`,
155
+ "story-import": `All named Roles are provided through oh_story_role. Do not require story-setup to deploy them, never inspect platform agent directories or .story-deployed, and never offer the author Step 4's choice to install a writing environment with /story-setup: in DSH record \u5199\u4F5C\u73AF\u5883 in .story/work/\u5BFC\u5165\u8BB0\u5F55.md as installed, with the analysis helper and story-architect both available. Phase 2 runs the story-long-analyze pipeline the DSH way below; an import counts as automatic continuation, so it uses the limited-parallel tier without asking. ${DSH_ANALYSIS_BATCHES} Run the scripts this Skill needs (build_outline_brief.py, outline_view.py --check --strict, tracking_commit.py init and check with Python 3; check-outline-contract.js with Node) the same way. Keep upstream's order: in the long-form structure migration (references/structure-mapping-long.md) Step 2 copies the manuscript into \u6B63\u6587/, Step 10 reverse-builds the \u7EC6\u7EB2 in batches, and Phase 4 initialises Tracking. After the import, tell the author to continue a long book with /story-long-write \u5199\u7B2CN\u7AE0 (N is the next chapter after the imported ones) and a short story with /story-short-write by asking it to \u8865\u5B8C\u6784\u601D. DSH's prose guard mirrors the outline gate of upstream proseBlockReason for books with \u5927\u7EB2/ or \u8FFD\u8E2A/, so open an import window before Step 2 copies any chapter: create .story/work/\u5BFC\u5165\u4E2D.md in the book directory (the workspace root in DSH's usual single-book layout) with one line naming the book being imported, and delete it right after Phase 4's tracking_commit.py init and check both succeed. The window only holds while \u8FFD\u8E2A/_tracking-state.json is absent. \u5BFC\u5165\u4E2D.md is DSH's own marker; keep upstream's \u5BFC\u5165\u8BB0\u5F55.md exactly as the Skill describes.`,
156
156
  "story-deslop": "Use the bundled narrative-writer Role through oh_story_role when specialist review is useful. Never inspect platform agent directories.",
157
157
  "story-short-analyze": "Use oh_story_role for specialist analysis. Never inspect platform agent directories or require external Agent deployment.",
158
158
  "story-short-write": `All named Roles are provided through oh_story_role. Do not inspect platform agent files; preserve the upstream short-fiction workflow and quality gates. ${DSH_AUTHOR_MEMORY_WORKSPACE}`,
@@ -194,7 +194,10 @@ var DSH_GAME_BRIDGE = [
194
194
  "The \u6E38\u620F tab is the playable Game Studio. Never start a second Agent runtime, dashboard, session transport, or model configuration.",
195
195
  "Keep the complete upstream seven-Skill pipeline and write adaptation artifacts under game-adaptations/<project>/ exactly as the upstream contracts specify.",
196
196
  "For a web target, keep the authoritative playable entry at build/app/index.html so Game Studio can preview it. Do not silently replace a requested non-web runtime with a web build.",
197
+ "The first time build/app/index.html becomes playable, tell the user in one sentence that they can already play it in the \u6E38\u620F tab and what work remains, then continue; keep the Todo list in step with the pipeline stage.",
197
198
  "Use only DSH-visible tools and approvals. qa/verification.json remains the sole machine QA truth and must cover launch, render, input, coreLoop, outcome, and restart with real execution evidence.",
199
+ // NovelToGame 0.6.0 pipeline-contract.md: with no target player available, the whitebox playtest uses a fresh agent that has not read the design or source.
200
+ "When the whitebox playtest calls for a fresh agent that has not read the design documents or source, run it as a DSH subagent visible in this preset, giving it only the playable entry and normal player input; in director mode, ask the user in this Session first whether a real target player can try it.",
198
201
  "The bundled Jin Ping Mei project is a read-only example, not a template to copy mechanically and not proof that another adaptation passed QA.",
199
202
  "</novel-to-game-dsh-integration>"
200
203
  ].join("\n");
@@ -222,21 +225,31 @@ var DSH_NATIVE_SKILLS = {
222
225
  - \u957F\u7BC7\u89C4\u5212\u4E0E\u5199\u4F5C\uFF08\u8BA8\u8BBA\u957F\u7BC7\u7ED3\u6784\u3001\u89C4\u5212\u5267\u60C5\u3001\u5F00\u4E66\u3001\u5199\u5927\u7EB2\u3001\u8865\u7EC6\u7EB2\u3001\u5199\u6B63\u6587\u3001\u65E5\u66F4\uFF09\uFF1A
223
226
  story-long-write\u3002\u53EA\u8981\u7ED3\u6784\u3001\u5927\u7EB2\u3001\u5377\u7EB2\u6216\u7EC6\u7EB2\u65F6\u53EA\u4EA4\u4ED8\u6240\u8BF7\u6C42\u7684\u89C4\u5212\uFF0C\u4E0D\u5199\u6B63\u6587\uFF1B
224
227
  \u7528\u6237\u660E\u786E\u8981\u6C42\u5199\u6B63\u6587\u624D\u8FDB\u5165\u6B63\u6587\u6D41\u7A0B
225
- - \u957F\u7BC7\u9009\u9898/\u626B\u699C\uFF1Astory-long-scan\uFF1B\u957F\u7BC7\u62C6\u6587\uFF1Astory-long-analyze
228
+ - \u957F\u7BC7\u9009\u9898/\u626B\u699C\uFF1Astory-long-scan\uFF1B\u957F\u7BC7\u62C6\u6587\uFF1Astory-long-analyze\u3002\u53EA\u8BF4\u300C\u9009\u9898\u300D\u300C\u770B\u770B\u5199\u4EC0\u4E48\u300D
229
+ \u53C8\u6CA1\u8BF4\u7BC7\u5E45\u65F6\uFF0C\u5148\u95EE\u4E00\u53E5\u957F\u7BC7\u8FD8\u662F\u77ED\u7BC7
226
230
  - \u7075\u611F\u5E93\u3001\u63D0\u70BC\u7075\u611F\u3001\u8DE8\u4E66\u7075\u611F\u805A\u5408\u3001\u66F4\u65B0\u7075\u611F\u5E93\uFF1Astory-long-analyze \u7684\u53EF\u9009\u7075\u611F\u5E93\u7BA1\u9053
227
231
  \uFF08\u5355\u4E66\u62C6\u6587\u4E0D\u81EA\u52A8\u5165\u5E93\uFF09
228
232
  - \u77ED\u7BC7\u9009\u9898/\u62C6\u6587/\u5199\u4F5C\uFF1Astory-short-scan\u3001story-short-analyze\u3001story-short-write
229
- - \u5BFC\u5165\u5DF2\u6709\u4F5C\u54C1\uFF1Astory-import
233
+ - \u5BFC\u5165\u5DF2\u6709\u4F5C\u54C1\uFF1Astory-import\u3002\u5BFC\u5B8C\u957F\u7BC7\u8BF4 /story-long-write \u5199\u7B2CN\u7AE0\uFF08N \u662F\u5BFC\u5165\u540E\u7684\u4E0B\u4E00\u7AE0\uFF09
234
+ \u7EED\u5199\uFF1B\u5BFC\u5B8C\u77ED\u7BC7\u7528 /story-short-write \u8865\u5B8C\u6784\u601D
230
235
  - \u5BA1\u7A3F\u4E0E\u53BB AI \u5473\uFF1Astory-review\u3001story-deslop
231
236
  - \u5C01\u9762\uFF1Astory-cover
232
237
  - \u67E5\u672C\u4E66\u7684\u89D2\u8272\u3001\u4F0F\u7B14\u3001\u8FDB\u5EA6\u6216\u8BBE\u5B9A\uFF1A\u7528 oh_story_role \u8C03\u7528 story-explorer\uFF1B\u67E5\u5916\u90E8\u8D44\u6599\uFF1A
233
- story-researcher\u3002\u56DE\u7B54\u8BB2\u6545\u4E8B\u91CC\u7684\u4E8B\uFF0C\u7F16\u53F7\u53EA\u8DDF\u7740\u6545\u4E8B\u63CF\u8FF0\u51FA\u73B0
238
+ story-researcher\u3002\u52A9\u624B\u8FD4\u56DE\u7684\u82F1\u6587\u5B57\u6BB5\u548C\u7F3A\u53E3\u8BF4\u660E\u7531\u4F60\u7FFB\u6210\u767D\u8BDD\u518D\u8BF4\uFF1B\u56DE\u7B54\u8BB2\u6545\u4E8B\u91CC\u7684\u4E8B\uFF0C
239
+ \u7F16\u53F7\u53EA\u8DDF\u7740\u6545\u4E8B\u63CF\u8FF0\u51FA\u73B0
234
240
  - \u7BA1\u7406\u4F5C\u8005\u4E60\u60EF\uFF08\u8BB0\u4F4F/\u67E5\u770B/\u786E\u8BA4/\u66FF\u6362/\u5FD8\u6389\u5199\u4F5C\u504F\u597D\uFF09\uFF1A\u6309\u4F5C\u8005\u6307\u5B9A\u7684\u957F\u7BC7/\u77ED\u7BC7\u7C7B\u578B\uFF0C
235
- \u52A0\u8F7D story-long-write \u6216 story-short-write\uFF0C\u7531\u5BF9\u5E94\u5199\u4F5C skill \u7BA1\u7406\uFF1B\u672A\u6307\u5B9A\u65F6\u6309\u5F53\u524D
236
- \u4E66\u7C7B\u578B\u9009\u62E9\uFF1A\u6B63\u6587/ \u4E3A\u957F\u7BC7\uFF0C\u6B63\u6587.md \u4E0E\u5C0F\u8282\u5927\u7EB2.md \u6216\u8BBE\u5B9A.md \u4E3A\u77ED\u7BC7\u3002\u65E0\u5F53\u524D\u4E66\u7684
241
+ \u52A0\u8F7D story-long-write \u6216 story-short-write\uFF0C\u7531\u5BF9\u5E94\u5199\u4F5C skill \u7BA1\u7406\uFF1B\u672A\u6307\u5B9A\u65F6\u6309\u4E0B\u65B9
242
+ \u300C\u5F53\u524D\u4E66\u300D\u7684\u7BC7\u5E45\u9009\u62E9\u3002\u65E0\u5F53\u524D\u4E66\u7684
237
243
  \u901A\u7528\u4E60\u60EF\u9ED8\u8BA4\u4EA4 story-long-write\uFF1B\u53EA\u9650\u5B9A\u672C\u4E66\u5374\u65E0\u6CD5\u5B9A\u4F4D\u65F6\u95EE\u54EA\u672C\u4E66\uFF0C\u4E0D\u8981\u6C42\u5148\u5EFA\u4E66\u3002
238
244
  \u8DEF\u7531\u5C42\u4E0D\u8BFB\u5199\u4F5C\u8005\u8BB0\u5FC6\u6587\u4EF6\u3002\u4EC5\u7BA1\u7406\u4E60\u60EF\u65F6\u5B8C\u6210\u5373\u505C\uFF0C\u4E0D\u5EFA\u4E66\u3001\u4E0D\u5199\u6B63\u6587\u3002
239
245
 
246
+ \u5F53\u524D\u4E66\uFF1A\u9879\u76EE\u6839\u6709 .active-book \u4E14\u6307\u5411\u9879\u76EE\u5185\u5B58\u5728\u7684\u76EE\u5F55\u5C31\u662F\u5B83\uFF08DSH \u5E38\u89C1\u7684\u5355\u4E66\u5E03\u5C40\u91CC\uFF0C
247
+ \u5DE5\u4F5C\u533A\u6839\u672C\u8EAB\u5C31\u662F\u4E66\u76EE\u5F55\uFF09\uFF1B\u5426\u5219\u4ECE\u5DE5\u4F5C\u533A\u6839\u5F80\u4E0B\u6700\u591A 4 \u5C42\u627E\uFF0C\u8DF3\u8FC7\u4EE5 . \u5F00\u5934\u7684\u76EE\u5F55\u3001
248
+ node_modules\u3001\u62C6\u6587\u5E93/\u3001\u5BF9\u6807/\uFF0C\u542B \u8FFD\u8E2A/\u3001\u6B63\u6587/ \u5B50\u76EE\u5F55\u6216 \u6B63\u6587.md \u6587\u4EF6\u3001\u542B
249
+ \u8BBE\u5B9A/\u9898\u6750\u5B9A\u4F4D.md\u3001\u6216\u540C\u65F6\u6709 \u8BBE\u5B9A.md \u4E0E \u5C0F\u8282\u5927\u7EB2.md \u7684\u76EE\u5F55\u90FD\u7B97\u4E66\u3002\u627E\u5230\u591A\u672C\u53C8\u6CA1\u6709
250
+ .active-book \u65F6\u95EE\u4F5C\u8005\u662F\u54EA\u672C\uFF0C\u9009\u5B9A\u540E\u628A\u76F8\u5BF9\u8DEF\u5F84\u5199\u8FDB\u9879\u76EE\u6839 .active-book\u3002\u7BC7\u5E45\uFF1A\u6709 \u6B63\u6587/
251
+ \u6216 \u8BBE\u5B9A/ \u5B50\u76EE\u5F55\u7684\u662F\u957F\u7BC7\uFF0C\u6709 \u6B63\u6587.md \u6216 \u8BBE\u5B9A.md \u6587\u4EF6\u7684\u662F\u77ED\u7BC7\u3002\u5BA1\u7A3F\u548C\u5C01\u9762\u6309\u540C\u4E00\u89C4\u5219\u627E\u4E66\u3002
252
+
240
253
  \u53EA\u8BF4 /story\u3001\u770B\u4E0D\u51FA\u610F\u56FE\u65F6\uFF0C\u4E0D\u8D34\u8DEF\u7531\u8868\uFF0C\u7ED9\u56DB\u4E2A\u767D\u8BDD\u9009\u9879\uFF1A\u300C\u5F00\u4E00\u672C\u957F\u7BC7\u6216\u63A5\u7740\u5199\u300D\u2192
241
254
  story-long-write\uFF1B\u300C\u5199\u4E00\u7BC7\u77ED\u7BC7\u300D\u2192 story-short-write\uFF1B\u300C\u628A\u4E00\u7AE0\u6539\u5F97\u4E0D\u90A3\u4E48 AI\u300D\u2192
242
255
  story-deslop\uFF1B\u300C\u66F4\u591A\uFF08\u62C6\u4E66\u3001\u626B\u699C\u3001\u5BFC\u5165\u65E7\u7A3F\u3001\u5BA1\u7A3F\u3001\u5C01\u9762\uFF09\u300D\u2192 \u518D\u5217\u8FDB\u9636\u9879\u3002\u610F\u56FE\u660E\u786E\u65F6
@@ -248,7 +261,8 @@ Agent \u8FC7\u7A0B\u901A\u8FC7\u53F3\u4FA7\u52A8\u6001\u680F\u6216\u5B98\u65B9 C
248
261
  \u53EA\u521D\u59CB\u5316\u6216\u6821\u9A8C\u5F53\u524D DSH workspace \u4E2D\u7684\u5C0F\u8BF4\u6570\u636E\uFF0C\u4E0D\u90E8\u7F72\u4EFB\u4F55 Agent \u5E73\u53F0\u6587\u4EF6\u3002
249
262
 
250
263
  1. \u68C0\u67E5\u73B0\u6709\u6B63\u6587\u3001\u8BBE\u5B9A\u3001\u5927\u7EB2\u548C\u8FFD\u8E2A\u6587\u4EF6\uFF0C\u5DF2\u6709\u5185\u5BB9\u7EDD\u4E0D\u8986\u76D6\u3002
251
- 2. \u6839\u636E\u7528\u6237\u58F0\u660E\u4E0E\u73B0\u6709\u7ED3\u6784\u5224\u65AD\u957F\u7BC7/\u77ED\u7BC7\uFF1B\u65E0\u6CD5\u53EF\u9760\u5224\u65AD\u65F6\u8BF7\u6C42\u786E\u8BA4\u3002
264
+ 2. \u6839\u636E\u7528\u6237\u58F0\u660E\u4E0E\u73B0\u6709\u7ED3\u6784\u5224\u65AD\u957F\u7BC7/\u77ED\u7BC7\uFF1A\u6709 \u6B63\u6587/ \u6216 \u8BBE\u5B9A/ \u5B50\u76EE\u5F55\u7684\u662F\u957F\u7BC7\uFF0C\u6709 \u6B63\u6587.md
265
+ \u6216 \u8BBE\u5B9A.md \u6587\u4EF6\u7684\u662F\u77ED\u7BC7\uFF1B\u65E0\u6CD5\u53EF\u9760\u5224\u65AD\u65F6\u8BF7\u6C42\u786E\u8BA4\u3002
252
266
  3. \u957F\u7BC7\u6309\u9700\u5EFA\u7ACB \u6B63\u6587/\u3001\u8BBE\u5B9A/\u3001\u5927\u7EB2/\u3002\u521D\u59CB\u5316\u3001\u5F00\u4E66\u3001\u5927\u7EB2\u548C\u7EC6\u7EB2\u9636\u6BB5\u90FD\u4E0D\u5EFA \u8FFD\u8E2A/\uFF0C
253
267
  \u4E5F\u4E0D\u5199 \u8FFD\u8E2A/_tracking-state.json\uFF1A\u8FFD\u8E2A\u5728\u7B2C\u4E00\u7AE0\u6B63\u6587\u52A8\u7B14\u524D\uFF0C\u7531 story-long-write
254
268
  \u5355\u7AE0\u6D41\u7A0B\u7528\u5B83\u7684 scripts/tracking_commit.py init \u521D\u59CB\u5316\uFF08\u4E8B\u52A1 JSON \u653E\u4E66\u76EE\u5F55
@@ -283,20 +297,25 @@ Agent \u8FC7\u7A0B\u901A\u8FC7\u53F3\u4FA7\u52A8\u6001\u680F\u6216\u5B98\u65B9 C
283
297
  \u57FA\u4E8E\u53EF\u6838\u9A8C\u6837\u672C\u8BC6\u522B\u957F\u7BC7\u7F51\u6587\u8D8B\u52BF\uFF0C\u4E0D\u8FD0\u884C\u6253\u5305\u811A\u672C\u3001\u4E0D\u63D0\u53D6\u767B\u5F55\u51ED\u636E\uFF0C\u4E5F\u4E0D\u7ED5\u8FC7\u9A8C\u8BC1\u7801\u3001
284
298
  \u8BBF\u95EE\u63A7\u5236\u6216\u7AD9\u70B9\u9650\u5236\u3002
285
299
 
286
- 1. \u660E\u786E\u5E73\u53F0\u3001\u9891\u9053\u548C\u9898\u6750\u65B9\u5411\uFF1B\u53EA\u6709\u7B54\u6848\u4F1A\u6539\u53D8\u91C7\u6837\u8303\u56F4\u65F6\u624D\u95EE\u4E00\u4E2A\u95EE\u9898\u3002
300
+ 1. \u6CBF\u7528\u4F5C\u8005\u5DF2\u7ED9\u7684\u6761\u4EF6\uFF1B\u7F3A\u7684\u4E00\u6B21\u95EE\u9F50\u5E76\u7ED9\u9009\u9879\uFF1A\u5E73\u53F0\uFF08\u8D77\u70B9/\u756A\u8304/\u664B\u6C5F/\u4E03\u732B/\u523A\u732C\u732B/
301
+ \u591A\u4E2A\u5E73\u53F0\u5BF9\u6BD4\uFF09\u3001\u9891\u9053\uFF08\u53EA\u6709\u756A\u8304\u3001\u4E03\u732B\u5206\u7537\u9891/\u5973\u9891/\u90FD\u770B\uFF09\u3001\u770B\u65B0\u4E66\u91CC\u5728\u5192\u5934\u7684\u8FD8\u662F\u6210\u719F
302
+ \u5927\u76D8\u3001\u6709\u6CA1\u6709\u5173\u6CE8\u7684\u9898\u6750\u65B9\u5411\uFF08\u6CA1\u6709\u5C31\u505A\u5168\u699C\u6982\u89C8\uFF09\u3002
287
303
  2. \u6570\u636E\u6765\u6E90\u4F9D\u6B21\u4E3A\uFF1A\u7528\u6237\u63D0\u4F9B\u7684\u6570\u636E\u6216\u94FE\u63A5\u3001\u5F53\u524D DSH Preset \u53EF\u89C1\u7684\u7F51\u9875\u5DE5\u5177\u3001
288
304
  references/genre-trends.md \u4E2D\u7684\u5386\u53F2\u8D8B\u52BF\u3002\u65E0\u6CD5\u83B7\u53D6\u5B9E\u65F6\u6570\u636E\u65F6\u5FC5\u987B\u660E\u786E\u6807\u4E3A\u5386\u53F2\u5047\u8BBE\u3002
289
305
  3. \u6BCF\u4E2A\u6837\u672C\u8BB0\u5F55\u6765\u6E90 URL\u3001\u91C7\u96C6\u65E5\u671F\u3001\u699C\u5355\u53E3\u5F84\u3001\u6709\u6548\u6761\u76EE\u6570\u3001\u7F3A\u5931\u5B57\u6BB5\u548C\u5F02\u5E38\u9879\uFF1B
290
306
  \u4E0D\u628A\u641C\u7D22\u6458\u8981\u3001\u63A8\u65AD\u6216\u8FC7\u671F\u7F13\u5B58\u5199\u6210\u9875\u9762\u4E8B\u5B9E\u3002
291
307
  4. \u6309\u9898\u6750\u5206\u5E03\u3001\u65B0\u9898\u6750\u4FE1\u53F7\u3001\u7ECF\u5178\u9898\u6750\u53D8\u5316\u3001\u7BC7\u5E45\u4E0E\u66F4\u65B0\u3001\u4E66\u540D\u6A21\u5F0F\u3001\u5F00\u5934\u5356\u70B9\u548C
292
- \u5DEE\u5F02\u5316\u5143\u7D20\u5206\u6790\u3002\u9700\u8981\u51B3\u7B56\u95E8\u7981\u65F6\u4F7F\u7528 references/topic-decision.md\u3002
308
+ \u5DEE\u5F02\u5316\u5143\u7D20\u5206\u6790\u3002\u9898\u6750\u70ED\u5EA6\u6309\u70ED\u5EA6\u4E2D\u4F4D\u4ECE\u9AD8\u5230\u4F4E\u6392\uFF0C\u4E0E\u5168\u5E73\u53F0\u6BD4\u8F83\u7528\u767D\u8BDD\uFF08\u5982\u300C\u6BD4\u5168\u5E73\u53F0
309
+ \u56DB\u5206\u4E4B\u4E09\u7684\u4E66\u90FD\u70ED\u300D\uFF09\uFF1B\u5934\u90E8\u8001\u4E66\u53EA\u4EE3\u8868\u5B58\u91CF\u8BFB\u8005\uFF1B\u6CA1\u6709\u53EF\u6BD4\u7684\u4E0A\u671F\u6837\u672C\u65F6\u8D8B\u52BF\u5199\u300C\u672A\u6BD4\u8F83\u300D\u3002\u9700\u8981\u51B3\u7B56\u95E8\u7981\u65F6\u4F7F\u7528 references/topic-decision.md\u3002
293
310
  5. \u8F93\u51FA\u5E02\u573A\u6982\u51B5\u3001\u9898\u6750\u70ED\u5EA6\u3001\u8BC1\u636E\u4E0E\u53EF\u4FE1\u5EA6\u3001\u98CE\u9669\u3001\u4E09\u9879\u53EF\u6267\u884C\u65B9\u5411\u548C\u4E0B\u6B21\u590D\u626B\u65F6\u95F4\u3002
294
311
  6. \u62A5\u544A\u5199\u7ED9\u4F5C\u8005\uFF1A\u8BB2\u5E02\u573A\u7ED3\u8BBA\u548C\u80FD\u5199\u7684\u65B9\u5411\uFF1B\u811A\u672C\u540D\u3001\u547D\u4EE4\u548C\u91C7\u96C6\u72B6\u6001\u7801\u4E0D\u8FDB\u62A5\u544A\u3002
295
312
  \u67D0\u4E2A\u699C\u6CA1\u91C7\u5230\uFF0C\u5C31\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u300CXX \u699C\u8FD9\u6B21\u6CA1\u62FF\u5230\uFF08\u539F\u56E0\uFF09\uFF0C\u7ED3\u8BBA\u4E0D\u542B\u5B83\u300D\u3002
296
313
  7. \u6BCF\u6B21\u626B\u699C\u65B0\u5EFA \u626B\u699C/{YYYYMMDD}/\uFF08\u540C\u65E5\u518D\u626B\u52A0 -2\uFF09\uFF0C\u6837\u672C\u8BB0\u5F55\u5B58\u5728\u8FD9\u91CC\uFF1B\u62A5\u544A\u540C\u65F6\u6309
297
314
  references/topic-decision.md \u7684\u6A21\u677F\u5199\u8FDB\u8BE5\u76EE\u5F55\u7684 \u9009\u9898\u51B3\u7B56.md\uFF08\u5E26\u300C\u626B\u699C\u65E5\u671F\u300D\uFF09\uFF0C
298
315
  \u4F5C\u4E3A\u300C\u626B\u699C\u7ED3\u8BBA\u300D\u4E00\u8282\uFF0C\u4F5C\u8005\u8981\u9009\u9898\u65F6\u518D\u5199\u300C\u63A8\u8350\u9009\u9898\u300D\u4E00\u8282\u3002story-long-write \u5F00\u4E66\u65F6
299
- \u4ECE\u8FD9\u4EFD\u6587\u4EF6\u63A5\u4E0A\uFF0C\u6240\u4EE5\u7ED3\u8BBA\u8981\u843D\u76D8\uFF0C\u4E0D\u53EA\u7559\u5728\u5BF9\u8BDD\u91CC\u3002
316
+ \u4ECE\u8FD9\u4EFD\u6587\u4EF6\u63A5\u4E0A\uFF0C\u6240\u4EE5\u7ED3\u8BBA\u8981\u843D\u76D8\uFF0C\u4E0D\u53EA\u7559\u5728\u5BF9\u8BDD\u91CC\u3002\u300C\u63A8\u8350\u9009\u9898\u300D\u6BCF\u4E2A\u9009\u9898\u6309\u6A21\u677F\u5217
317
+ 1-2 \u672C\u5EFA\u8BAE\u62C6\u7684\u5BF9\u6807\u4E66\uFF08\u4F18\u5148\u65B0\u4E66\u699C\u3001\u4E66\u5E93\u65B0\u4E66\u4E2D\u5B57\u6570\u4E0D\u591A\u7684\u540C\u65B9\u5411\u4E66\uFF0C\u5934\u90E8\u8001\u4E66\u53EA\u4F5C
318
+ \u53C2\u7167\uFF09\uFF0C\u5E76\u544A\u8BC9\u4F5C\u8005\u53EF\u7528 story-long-analyze \u62C6\u5B83\u4EEC\u6765\u9A8C\u8BC1\u300C\u80FD\u7206\u7684\u539F\u56E0\u300D\u3002
300
319
 
301
320
  \u5F53\u524D Preset \u6CA1\u6709\u7F51\u9875\u80FD\u529B\u4E14\u7528\u6237\u4E5F\u672A\u63D0\u4F9B\u6837\u672C\u65F6\uFF0C\u4F7F\u7528\u5185\u7F6E\u53C2\u8003\u5B8C\u6210\u65B9\u6CD5\u8BBA\u5206\u6790\uFF0C
302
321
  \u5E76\u5217\u51FA\u4ECD\u9700\u6838\u9A8C\u7684\u699C\u5355\uFF1B\u4E0D\u8981\u542F\u52A8 CDP\u3001\u72EC\u7ACB\u6D4F\u89C8\u5668\u6216\u5E76\u884C\u8FD0\u884C\u65F6\u3002`,
@@ -305,19 +324,25 @@ Agent \u8FC7\u7A0B\u901A\u8FC7\u53F3\u4FA7\u52A8\u6001\u680F\u6216\u5B98\u65B9 C
305
324
  \u57FA\u4E8E\u53EF\u6838\u9A8C\u6837\u672C\u8BC6\u522B\u77ED\u7BC7\u5E02\u573A\u7684\u60C5\u7EEA\u3001\u9898\u6750\u4E0E\u4F20\u64AD\u4FE1\u53F7\uFF0C\u4E0D\u8FD0\u884C\u6253\u5305\u811A\u672C\u3001\u4E0D\u8BFB\u53D6 Cookie
306
325
  \u6216 token\uFF0C\u4E5F\u4E0D\u7ED5\u8FC7\u9A8C\u8BC1\u7801\u3001\u767B\u5F55\u6216\u8BBF\u95EE\u63A7\u5236\u3002
307
326
 
308
- 1. \u660E\u786E\u5E73\u53F0\u4E0E\u65B9\u5411\uFF1B\u53EA\u6709\u7B54\u6848\u4F1A\u6539\u53D8\u91C7\u6837\u8303\u56F4\u65F6\u624D\u95EE\u4E00\u4E2A\u95EE\u9898\u3002
327
+ 1. \u6CBF\u7528\u4F5C\u8005\u5DF2\u7ED9\u7684\u5E73\u53F0\u6216\u65B9\u5411\uFF0C\u7F3A\u9879\u4E00\u6B21\u95EE\u9F50\uFF1A\u60F3\u770B\u54EA\u4E2A\u5E73\u53F0\u3001\u7537\u9891\u8FD8\u662F\u5973\u9891\u3001\u54EA\u7C7B\u77ED\u7BC7\uFF1B
328
+ \u77E5\u4E4E\u76D0\u8A00\u3001\u756A\u8304\u548C\u4E03\u732B\u77ED\u7BC7\u8BF7\u4F5C\u8005\u53D1\u699C\u5355\u622A\u56FE\u3001\u6587\u5B57\u6216\u94FE\u63A5\uFF1B\u624B\u91CC\u6709\u7F16\u8F91\u7684\u5F81\u7A3F\u8981\u6C42\u4E5F\u4E00\u8D77
329
+ \u53D1\u6765\u3002\u5F81\u7A3F\u8981\u6C42\u539F\u6587\u5B58\u8FDB\u672C\u6B21\u626B\u699C\u76EE\u5F55\u7684 \u5F81\u7A3F\u8981\u6C42.md\uFF0C\u9898\u6750\u3001\u5B57\u6570\u3001\u622A\u6B62\u65E5\u671F\u5F53\u786C\u6761\u4EF6\u3002
309
330
  2. \u6570\u636E\u6765\u6E90\u4F9D\u6B21\u4E3A\uFF1A\u7528\u6237\u63D0\u4F9B\u7684\u6570\u636E\u6216\u94FE\u63A5\u3001\u5F53\u524D DSH Preset \u53EF\u89C1\u7684\u7F51\u9875\u5DE5\u5177\u3001
310
331
  references/real-market-data.md \u4E2D\u7684\u5386\u53F2\u8D44\u6599\u3002\u65E0\u6CD5\u8054\u7F51\u65F6\u5FC5\u987B\u628A\u7ED3\u8BBA\u6807\u4E3A\u5019\u9009\u5047\u8BBE\u3002
311
332
  3. \u8BB0\u5F55\u6765\u6E90 URL\u3001\u91C7\u96C6\u65E5\u671F\u3001\u699C\u5355\u53E3\u5F84\u3001\u6709\u6548\u6837\u672C\u6570\u3001\u7F3A\u5931\u5B57\u6BB5\u548C\u5F02\u5E38\u9879\u3002
312
- 4. \u5206\u6790\u60C5\u7EEA\u7C7B\u578B\u3001\u9898\u6750\u70ED\u70B9\u3001\u7BC7\u5E45\u3001\u5F00\u5934\u3001\u7ED3\u5C3E\u3001\u6807\u9898\u3001\u4EBA\u8BBE\u4E0E\u4F20\u64AD\u89E6\u53D1\u70B9\uFF1B
313
- \u7ED9\u6BCF\u4E2A\u8D8B\u52BF\u6807\u6CE8\u8BC1\u636E\u5F3A\u5EA6\u3001\u9971\u548C\u98CE\u9669\u548C\u6709\u6548\u671F\u3002
333
+ 4. \u5206\u6790\u60C5\u7EEA\u7C7B\u578B\uFF08\u610F\u96BE\u5E73/\u53CD\u8F6C\u9707\u64BC/\u723D\u611F\u91CA\u653E/\u6CBB\u6108\u6E29\u6696/\u7EC6\u601D\u6781\u6050/\u5171\u9E23\u611F\u52A8\uFF09\u3001\u9898\u6750\u70ED\u70B9\u3001
334
+ \u7BC7\u5E45\u3001\u5F00\u5934\u3001\u7ED3\u5C3E\u3001\u6807\u9898\u3001\u4EBA\u8BBE\u4E0E\u4F20\u64AD\u89E6\u53D1\u70B9\uFF1B\u7ED9\u6BCF\u4E2A\u8D8B\u52BF\u6807\u6CE8\u8BC1\u636E\u5F3A\u5EA6\u3001\u9971\u548C\u98CE\u9669\u548C\u6709\u6548\u671F\u3002
335
+ \u70B9\u4F17\u3001\u9ED1\u5CA9\u662F\u5728\u67B6\u4E66\u76EE\u800C\u975E\u70ED\u5EA6\u699C\uFF1A\u53EA\u6709\u5B83\u4EEC\u7684\u6570\u636E\u65F6\u5199\u300C\u5728\u67B6\u6570\u91CF\u300D\uFF0C\u4E0D\u8BF4\u54EA\u7BC7\u706B\u3002
336
+ \u53EA\u6709\u4E00\u671F\u6837\u672C\u65F6\u4E0D\u5199\u300C\u53D8\u5316\u300D\u3002
314
337
  5. \u8F93\u51FA\u5E02\u573A\u6982\u51B5\uFF08\u626B\u699C\u65F6\u95F4\u3001\u6838\u5FC3\u53D1\u73B0\u548C\u53EF\u4FE1\u5EA6\uFF1A\u6837\u672C\u591A\u5C11\u7BC7\u3001\u6765\u81EA\u54EA\u51E0\u4E2A\u699C\uFF0C\u5E76\u5EFA\u8BAE
315
338
  \u54EA\u5929\u524D\u540E\u518D\u626B\u4E00\u6B21\uFF09\u3001\u60C5\u7EEA\u70ED\u5EA6\u3001\u9898\u6750\u70ED\u70B9\u3001\u5173\u952E\u6570\u636E\u3001\u98CE\u53E3\u9884\u8B66\u3001\u4E09\u9879\u53EF\u5199\u65B9\u5411\u3002
316
339
  6. \u62A5\u544A\u5199\u7ED9\u4F5C\u8005\uFF1A\u8BB2\u5E02\u573A\u7ED3\u8BBA\u548C\u80FD\u5199\u7684\u65B9\u5411\uFF1B\u811A\u672C\u540D\u3001\u547D\u4EE4\u548C SKIP \u8FD9\u7C7B\u91C7\u96C6\u72B6\u6001\u4E0D\u8FDB\u62A5\u544A\u3002
317
340
  \u67D0\u4E2A\u5E73\u53F0\u6CA1\u91C7\u5230\uFF0C\u5C31\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u300CXX \u8FD9\u6B21\u6CA1\u62FF\u5230\uFF08\u539F\u56E0\uFF09\uFF0C\u7ED3\u8BBA\u4E0D\u542B\u5B83\u300D\u3002
318
341
  7. \u6BCF\u6B21\u626B\u699C\u65B0\u5EFA \u626B\u699C/{YYYYMMDD}/\uFF08\u540C\u65E5\u518D\u626B\u52A0 -2\uFF09\uFF0C\u6837\u672C\u8BB0\u5F55\u5B58\u5728\u8FD9\u91CC\uFF1B\u62A5\u544A\u540C\u65F6\u6309
319
342
  references/topic-match.md \u7684\u6A21\u677F\u5199\u8FDB\u8BE5\u76EE\u5F55\u7684 \u77ED\u7BC7\u626B\u699C\u7ED3\u8BBA.md\uFF0C\u4F5C\u4E3A\u300C\u626B\u699C\u7ED3\u8BBA\u300D
320
- \u4E00\u8282\uFF0C\u7ED3\u5408\u9879\u76EE\u6761\u4EF6\u518D\u5199\u300C\u9009\u9898\u5339\u914D\u300D\u4E00\u8282\u3002story-short-write \u4ECE\u8FD9\u4EFD\u6587\u4EF6\u63A5\u4E0A\u9009\u9898\u3002
343
+ \u4E00\u8282\uFF0C\u7ED3\u5408\u9879\u76EE\u6761\u4EF6\u518D\u5199\u300C\u9009\u9898\u5339\u914D\u300D\u4E00\u8282\uFF0C\u76EE\u6807\u5E73\u53F0\u6309 topic-match.md \u7684\u5E73\u53F0\u5BF9\u7167\u5199\u3002
344
+ \u4F5C\u8005\u4E0D\u7B54\u6295\u7A3F\u5E73\u53F0\u3001\u7D20\u6750\u548C\u5B57\u6570\u65F6\u6309\u6837\u672C\u7ED9\u65B9\u5411\uFF0C\u53EF\u884C\u6027\u6700\u9AD8\u5199\u300C\u4E2D\u300D\u3002
345
+ story-short-write \u4ECE\u8FD9\u4EFD\u6587\u4EF6\u63A5\u4E0A\u9009\u9898\u3002
321
346
  \u4F5C\u8005\u81EA\u5DF1\u7ED9\u699C\u5355\u65F6\uFF0C\u6309 references/manual-rank-input.md \u7684\u683C\u5F0F\u6574\u7406\u3002
322
347
 
323
348
  \u5F53\u524D Preset \u6CA1\u6709\u7F51\u9875\u80FD\u529B\u4E14\u7528\u6237\u4E5F\u672A\u63D0\u4F9B\u6837\u672C\u65F6\uFF0C\u53EA\u505A\u5386\u53F2\u8D44\u6599\u5206\u6790\u5E76\u5217\u51FA\u9A8C\u8BC1\u52A8\u4F5C\uFF1B
@@ -464,6 +489,8 @@ function createVideoRecapSkillProvider(skillRoot = defaultVideoRecapSkillRoot())
464
489
  import { execFile } from "node:child_process";
465
490
  import { promisify } from "node:util";
466
491
  var execFileAsync = promisify(execFile);
492
+ var DRAMA_PYTHON = [3, 9];
493
+ var VIDEO_PYTHON = [3, 10];
467
494
  async function commandOutput(command, args) {
468
495
  try {
469
496
  const { stdout, stderr } = await execFileAsync(command, [...args], { encoding: "utf8", timeout: 5e3, maxBuffer: 4 * 1024 * 1024 });
@@ -472,21 +499,22 @@ async function commandOutput(command, args) {
472
499
  return void 0;
473
500
  }
474
501
  }
475
- function pythonVersion(value) {
502
+ function pythonVersion(value, floor) {
503
+ const minimum = `${String(floor[0])}.${String(floor[1])}`;
476
504
  const match = /Python\s+(\d+)\.(\d+)(?:\.(\d+))?/u.exec(value ?? "");
477
- if (match === null) return { ok: false };
505
+ if (match === null) return { ok: false, minimum };
478
506
  const major = Number(match[1]);
479
507
  const minor = Number(match[2]);
480
- return { ok: major > 3 || major === 3 && minor >= 10, version: match[0].replace(/^Python\s+/u, "") };
508
+ return { ok: major > floor[0] || major === floor[0] && minor >= floor[1], version: match[0].replace(/^Python\s+/u, ""), minimum };
481
509
  }
482
- async function hostPython(probe = commandOutput) {
510
+ async function hostPython(floor, probe = commandOutput) {
483
511
  let fallback;
484
512
  for (const command of ["python3", "python"]) {
485
- const parsed = pythonVersion(await probe(command, ["--version"]));
513
+ const parsed = pythonVersion(await probe(command, ["--version"]), floor);
486
514
  if (parsed.ok) return { command, probe: parsed };
487
515
  if (parsed.version !== void 0) fallback ??= { command, probe: parsed };
488
516
  }
489
- return fallback ?? { command: "python3", probe: { ok: false } };
517
+ return fallback ?? { command: "python3", probe: { ok: false, minimum: pythonVersion(void 0, floor).minimum } };
490
518
  }
491
519
 
492
520
  // src/native-hooks.ts
@@ -1414,7 +1442,8 @@ var STORY_DIRECTORIES = ["\u6B63\u6587", "\u5927\u7EB2", "\u8BBE\u5B9A", "\u8FFD
1414
1442
  var DRAMA_DIRECTORIES = ["\u8F93\u5165", "\u9879\u76EE\u5F00\u53D1", "\u8BBE\u5B9A\u96C6", "\u5267\u96C6", "\u4EA4\u4ED8", "\u521B\u4F5C\u8005\u51B3\u7B56", "\u5BA1\u67E5"];
1415
1443
  var GAME_DIRECTORY = "game-adaptations";
1416
1444
  var CREATIVE_DIRECTORIES = [VIDEO_DIRECTORY, GAME_DIRECTORY, ...STORY_DIRECTORIES, ...DRAMA_DIRECTORIES];
1417
- var ROOT_FILES = /* @__PURE__ */ new Set(["short-drama.json"]);
1445
+ var SHORT_STORY_FILES = ["\u6B63\u6587.md", "\u8BBE\u5B9A.md", "\u5C0F\u8282\u5927\u7EB2.md"];
1446
+ var ROOT_FILES = /* @__PURE__ */ new Set(["short-drama.json", ...SHORT_STORY_FILES]);
1418
1447
  var EDITABLE_EXTENSIONS = /* @__PURE__ */ new Set([".md", ".txt", ".json", ".jsonl"]);
1419
1448
  var GAME_EDITABLE_EXTENSIONS = /* @__PURE__ */ new Set([...EDITABLE_EXTENSIONS, ".html", ".css", ".js", ".mjs", ".cjs", ".ts", ".tsx", ".jsx"]);
1420
1449
  var VIDEO_EDITABLE_EXTENSIONS = /* @__PURE__ */ new Set([...EDITABLE_EXTENSIONS, ".srt", ".ass"]);
@@ -1456,7 +1485,7 @@ async function dramaPreflight() {
1456
1485
  if (dramaPreflightCache !== void 0 && dramaPreflightCache.expires > Date.now()) return dramaPreflightCache.value;
1457
1486
  dramaPreflightInFlight ??= (async () => {
1458
1487
  try {
1459
- const python = await hostPython();
1488
+ const python = await hostPython(DRAMA_PYTHON);
1460
1489
  const adapterConfig = await ensureDramaAdapterConfig(defaultDramaSkillRoot(), { python: python.command });
1461
1490
  const value = { python: python.probe, adapterConfig, adapters: dramaAdapterStatuses() };
1462
1491
  dramaPreflightCache = { expires: Date.now() + 3e4, value };
@@ -1469,7 +1498,7 @@ async function dramaPreflight() {
1469
1498
  }
1470
1499
  async function videoPreflight() {
1471
1500
  if (videoPreflightCache !== void 0 && videoPreflightCache.expires > Date.now()) return videoPreflightCache.value;
1472
- const python = (await hostPython()).probe;
1501
+ const python = (await hostPython(VIDEO_PYTHON)).probe;
1473
1502
  const [ffmpegOutput, ffmpegFilters, ffprobeOutput] = await Promise.all([
1474
1503
  commandOutput("ffmpeg", ["-version"]),
1475
1504
  commandOutput("ffmpeg", ["-hide_banner", "-filters"]),
@@ -1789,9 +1818,10 @@ async function previewDigest(realm, projectRoot) {
1789
1818
  await visit(app, "");
1790
1819
  return { ready, version: createHash2("sha256").update(entries.sort().join("\n")).digest("hex").slice(0, 16) };
1791
1820
  }
1792
- function headingTitle(content, fallback) {
1821
+ function gameProjectTitle(content, fallback) {
1793
1822
  const heading = content?.split(/\r?\n/u).find((line) => /^#\s+/u.test(line));
1794
- return heading?.replace(/^#\s+/u, "").replace(/^PRODUCT_BRIEF\s*[·・:]?\s*/iu, "").trim() || fallback;
1823
+ const title = heading?.replace(/^#\s+/u, "").replace(/^(?:PRODUCT[_ ]BRIEF|产品简报)/iu, "").replace(/^[\s·・::|—–-]+/u, "").trim().replace(/^《([^《》]+)》$/u, "$1").trim();
1824
+ return title || fallback;
1795
1825
  }
1796
1826
  async function workspaceGameProjects(realm, files, sessionId, maxBytes) {
1797
1827
  const roots = [...new Set(files.flatMap((file) => {
@@ -1817,7 +1847,7 @@ async function workspaceGameProjects(realm, files, sessionId, maxBytes) {
1817
1847
  return {
1818
1848
  id: `workspace:${id}`,
1819
1849
  root,
1820
- title: headingTitle(brief, id),
1850
+ title: gameProjectTitle(brief, id),
1821
1851
  source: "workspace",
1822
1852
  previewReady: preview.ready,
1823
1853
  previewUrl: preview.ready ? `/oh-story/game-preview/workspace/${token(sessionId)}/${token(root)}/index.html` : void 0,
@@ -2116,7 +2146,7 @@ async function apply(context, config = {}) {
2116
2146
  registerOhStoryProductionTool(context);
2117
2147
  await registerOhStoryRoleTool(context);
2118
2148
  registerWorkspaceRoute(context, { maxBytes: config.editorMaxBytes ?? 2097152, trustedHosts });
2119
- await ensureDramaAdapterConfig(defaultDramaSkillRoot(), { python: (await hostPython()).command });
2149
+ await ensureDramaAdapterConfig(defaultDramaSkillRoot(), { python: (await hostPython(DRAMA_PYTHON)).command });
2120
2150
  }
2121
2151
  var index_default = { name, inject, Config, apply };
2122
2152
  export {