@oh-story/dsh 0.1.10 → 0.1.12

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 (444) hide show
  1. package/README.md +11 -11
  2. package/lib/client.js +7 -3
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +212 -142
  5. package/lib/drama/skills/short-drama/SKILL.md +14 -2
  6. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
  8. package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
  9. package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
  10. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  11. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  12. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  13. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  14. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  15. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  16. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  17. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  18. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  19. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  20. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
  21. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  22. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  23. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  25. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  26. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  27. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  28. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  29. package/lib/drama/skills/short-drama-edit/SKILL.md +43 -20
  30. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  31. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  32. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  33. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  46. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +4 -2
  47. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +3 -1
  48. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +6 -2
  49. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +12 -6
  50. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +13 -8
  51. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1153 -121
  53. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +49 -9
  54. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  55. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  56. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  57. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  58. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  59. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  60. package/lib/drama/skills/short-drama-review/SKILL.md +2 -2
  61. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  62. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  63. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  64. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -0
  65. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  66. package/lib/drama/skills/short-drama-storyboard/SKILL.md +13 -5
  67. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  68. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +82 -14
  70. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +4 -2
  71. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +5 -3
  72. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +12 -0
  73. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  74. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  75. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +40 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +20 -14
  77. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +1 -1
  78. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +8 -7
  79. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  80. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  81. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  82. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  83. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  84. package/lib/drama/skills/short-drama-write/SKILL.md +8 -3
  85. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  86. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  87. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  88. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  89. package/lib/index.js +71 -21
  90. package/lib/index.js.map +3 -3
  91. package/lib/oh-story/manifest.json +545 -310
  92. package/lib/oh-story/roles/chapter-extractor.md +11 -11
  93. package/lib/oh-story/roles/character-designer.md +1 -2
  94. package/lib/oh-story/roles/consistency-checker.md +11 -9
  95. package/lib/oh-story/roles/narrative-writer.md +24 -25
  96. package/lib/oh-story/roles/story-architect.md +9 -61
  97. package/lib/oh-story/roles/story-explorer.md +20 -125
  98. package/lib/oh-story/roles/story-researcher.md +0 -1
  99. package/lib/oh-story/skills/story/SKILL.md +6 -6
  100. package/lib/oh-story/skills/story/VERSION +1 -1
  101. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  102. package/lib/oh-story/skills/story/references/author-memory.md +40 -118
  103. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +3 -3
  104. package/lib/oh-story/skills/story-deslop/SKILL.md +24 -25
  105. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  106. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +1 -1
  107. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  108. package/lib/oh-story/skills/story-deslop/references/author-memory.md +40 -118
  109. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  110. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +21 -4
  111. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  112. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +3 -3
  113. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  114. package/lib/oh-story/skills/story-import/SKILL.md +63 -579
  115. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  116. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  117. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  118. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  119. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  120. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  121. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  122. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  123. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +95 -91
  124. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  125. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  126. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +11 -9
  127. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  128. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +101 -14
  129. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +278 -23
  130. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +179 -23
  131. package/lib/oh-story/skills/story-long-analyze/SKILL.md +28 -50
  132. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +12 -5
  133. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +1 -1
  134. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  135. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  136. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +21 -55
  137. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  139. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  141. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  142. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +17 -0
  143. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +1 -1
  144. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  145. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +47 -8
  146. package/lib/oh-story/skills/story-long-scan/SKILL.md +41 -193
  147. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  148. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  149. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  150. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  151. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  152. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  153. package/lib/oh-story/skills/story-long-write/SKILL.md +32 -73
  154. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  155. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +1 -1
  156. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +18 -201
  157. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  158. package/lib/oh-story/skills/story-long-write/references/author-memory.md +40 -118
  159. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  160. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +6 -10
  161. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  162. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  163. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  164. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  165. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  166. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +3 -2
  167. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  168. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  169. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  170. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  171. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  172. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  173. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  174. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  175. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  176. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  177. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -6
  178. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
  179. package/lib/oh-story/skills/story-long-write/references/reference-index.md +4 -4
  180. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  181. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  182. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  183. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  184. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  185. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +11 -9
  186. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +33 -44
  187. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +18 -51
  188. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  189. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +53 -67
  190. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -251
  191. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  192. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +5 -3
  193. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +18 -56
  194. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +3 -3
  195. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  196. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +96 -16
  197. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  198. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +101 -14
  199. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  200. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +2 -1
  201. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +250 -50
  202. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +278 -23
  203. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +179 -23
  204. package/lib/oh-story/skills/story-review/SKILL.md +19 -273
  205. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  206. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +1 -1
  207. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  208. package/lib/oh-story/skills/story-review/references/author-memory.md +40 -118
  209. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  210. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  211. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  212. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -1
  213. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  214. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  215. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  216. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  217. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +11 -9
  218. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +3 -3
  219. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  220. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +278 -23
  221. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +179 -23
  222. package/lib/oh-story/skills/story-setup/SKILL.md +69 -458
  223. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  224. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +1 -1
  225. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  226. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  227. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  228. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +21 -4
  229. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  230. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  234. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  236. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  237. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  238. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  239. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  240. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  241. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  242. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  243. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  244. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  245. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  246. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +18 -56
  247. package/lib/oh-story/skills/story-setup/references/diagnostics.md +3 -3
  248. package/lib/oh-story/skills/story-short-analyze/SKILL.md +37 -110
  249. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  250. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  251. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  252. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  253. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  254. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  255. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/{material-decomposition.md → stage4-6-reversal-summary.md} +303 -374
  257. package/lib/oh-story/skills/story-short-scan/SKILL.md +30 -64
  258. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  259. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  260. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  261. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  262. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -34
  263. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  264. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  265. package/lib/oh-story/skills/story-short-write/references/author-memory.md +40 -118
  266. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  267. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  268. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  270. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  271. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -49
  272. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  273. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  274. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  276. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  277. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  278. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  279. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  280. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +19 -12
  281. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +22 -32
  282. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +84 -17
  283. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  284. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +3 -3
  285. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  286. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  287. package/lib/types/client/video-studio.d.ts.map +1 -1
  288. package/lib/types/native-hooks.d.ts +2 -2
  289. package/lib/types/native-hooks.d.ts.map +1 -1
  290. package/lib/types/role-tool.d.ts.map +1 -1
  291. package/lib/types/skill-provider.d.ts.map +1 -1
  292. package/lib/types/video-project.d.ts.map +1 -1
  293. package/lib/types/workspace-route.d.ts.map +1 -1
  294. package/lib/video-recap/CHANGELOG.md +60 -1
  295. package/lib/video-recap/README.en.md +348 -137
  296. package/lib/video-recap/README.md +340 -136
  297. package/lib/video-recap/manifest.json +406 -251
  298. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  299. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  300. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  301. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  302. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  303. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  304. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  305. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  306. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  307. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  308. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  309. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  310. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  311. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  312. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  313. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  314. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  315. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  316. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  317. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  318. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  319. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  320. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  321. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  322. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  323. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  324. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  325. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  326. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  327. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  328. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  329. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  330. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  331. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  332. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  333. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  334. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  335. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  336. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  337. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  338. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  339. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  340. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  341. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  342. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  343. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  344. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  345. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  346. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  347. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  348. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  349. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  350. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  351. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  352. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  353. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  354. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  355. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  356. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  357. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  358. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  359. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  360. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  361. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  362. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  363. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  364. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  365. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  366. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  367. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  368. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  369. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  370. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  371. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  372. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  373. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  374. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  375. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  376. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  377. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  378. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  379. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  380. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  381. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  382. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  383. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  384. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  385. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  386. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  387. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  388. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  389. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  390. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  391. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  392. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  393. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  394. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  395. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  396. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  397. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  398. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  399. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  400. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  401. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  402. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  403. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  404. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  405. package/lib/video-recap/skills/video-understanding/scripts/{agent_brief.py → briefing/builder.py} +38 -35
  406. package/lib/video-recap/skills/{video-script/scripts/brief_context.py → video-understanding/scripts/briefing/context.py} +4 -35
  407. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  408. package/lib/video-recap/skills/video-understanding/scripts/{brief_timeline.py → briefing/timeline.py} +5 -6
  409. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  410. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  411. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  412. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  413. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  414. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  415. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  416. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  417. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  418. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  419. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  420. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  421. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  422. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  423. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  424. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  425. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  426. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  427. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  428. package/package.json +41 -41
  429. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -538
  430. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -603
  431. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  432. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  433. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  435. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  436. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  437. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +0 -399
  438. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +0 -327
  439. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  440. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +0 -348
  441. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  442. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  443. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  444. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -32,7 +32,7 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
32
32
 
33
33
  ### Phase 1:确认平台和方向
34
34
 
35
- 问用户:**「你想看哪个平台?(知乎盐言/番茄短篇/七猫短篇/其他)有没有想写的类型方向?」**
35
+ 问用户:**「你想看哪个平台?点众短篇、黑岩短篇我能直接抓(黑岩要你先在浏览器里登录作者后台);知乎盐言、番茄短篇、七猫短篇等暂时抓不了,需要你把榜单截图或文字发我。有没有想写的类型方向?」**
36
36
 
37
37
  关键判断:
38
38
  - 用户已有方向 → 针对该方向做深度扫榜
@@ -47,67 +47,28 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
47
47
 
48
48
  | 优先级 | 模式 | 说明 | 何时用 |
49
49
  |--------|------|------|--------|
50
- | 1 | **browser-cdp 采集** | 直接抓取平台页面,产出结构化文件 | 有 Chrome 环境时(优先) |
51
- | 2 | **用户提供** | 用户粘贴榜单截图/文字/链接 | 用户已有数据时 |
52
- | 3 | **内置知识** | 基于知识库中的趋势数据和方法论做分析 | 无法联网、用户无数据时 |
50
+ | 1 | **脚本采集** | 点众、黑岩:直接抓取平台页面,产出结构化文件 | 有 Chrome 环境时(优先) |
51
+ | 2 | **作者提供** | 没有脚本的平台,或作者已有榜单 | 知乎盐言/番茄短篇/七猫短篇等 |
52
+ | 3 | **内置知识** | 基于知识库中的趋势数据和方法论做分析 | 无法联网、作者也没有数据时 |
53
53
 
54
- #### browser-cdp 采集模式
54
+ 1. 只读所选平台那一份:[点众](references/platform-dianzhong.md) / [黑岩](references/platform-heiyan.md) / [没有脚本的平台](references/manual-rank-input.md)。里面有网址、命令、字段、故障排查、平台分析维度,以及作者提供的榜单怎么整理成文件。
55
+ 2. 每次扫榜新建输出目录 `扫榜/{YYYYMMDD}/`(同日再扫加 `-2`)存本次榜单,不往旧目录追加;文件名 `{平台}{类型}_{YYYYMMDD}.md`,某平台失败就跳过。对比读上个日期目录的 `扫榜聚合.md`。
56
+ 3. 聚合:`node scripts/aggregate-rank.js {输出目录} --out {输出目录}/扫榜聚合.md --sparse 10 --scale short`。**主会话只读这份聚合**,要看开头与人设原文再抽样:`node scripts/aggregate-rank.js {输出目录} --sample {题材/标签/书名词} --n 5`。
55
57
 
56
- 使用 `/browser-cdp` 启动 Chrome,直接抓取平台页面的结构化数据。适用于需要登录才能看到的数据(知乎个人中心、番茄书架等)。
57
-
58
- **点众采集目标**:
59
-
60
- | 页面 | URL | 核心字段 |
61
- |------|-----|----------|
62
- | 男频短篇 | ishugui.com/browse | 书名·作者·标签·状态·字数·评分·最新章节 |
63
- | 女频短篇 | ishugui.com/browse/on3 | 书名·作者·标签·状态·字数·评分·最新章节 |
64
-
65
- **黑岩采集目标**:
66
-
67
- | 页面 | URL | 核心字段 |
68
- |------|-----|----------|
69
- | 书库列表 | manage.zhangwenpindu.cn/books/booklist | 书名·作者·字数·分类·类型·价格·创建/更新时间·标签(详情模式) |
70
-
71
- > **黑岩需要登录!** 必须先在 Chrome 中手动登录 `manage.zhangwenpindu.cn`,脚本才能从 Cookie 中提取 Bearer token 调用后端 API。未登录会报错提示。**黑岩采集失败时标记为 SKIP,继续其他平台采集,不中断本轮数据采集。**
72
-
73
- - 黑岩专用:`--pages N`(每页 20 条)、`--detail`(逐本详情,含标签/简介,速度较慢)、`--channel male/female`
74
- - 点众专用:`--channel male/female/all`
75
-
76
- **文件命名**:`{平台}{类型}_{YYYYMMDD}.md`,例:`点众男频短篇_20260501.md`
77
-
78
- **用户提供操作指引:**
79
- - 请用户截图或复制粘贴榜单内容
80
- - 如果用户提供链接,用 WebFetch 抓取页面内容
81
- - 如果用户只提供故事名列表,直接进入分析
82
-
83
- **内置知识操作指引:**
84
- - 加载 `references/real-market-data.md`(跨平台写作差异对照)
85
- - 明确标注:「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的平台页面。
58
+ **内置知识:** 加载 `references/real-market-data.md`(跨平台写作差异对照),明确标注「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的平台页面。
86
59
 
87
60
  ---
88
61
 
89
62
  ### Phase 3:数据分析
90
63
 
91
- #### 知乎盐言故事分析维度
92
-
93
- | 维度 | 看什么 |
94
- |---|---|
95
- | 热门榜单 | 当前最受关注的故事 |
96
- | 高赞故事 | 口碑最好的作品结构 |
97
- | 新作者上榜 | 非头部账号的题材选择与开篇模式 |
98
- | 付费转化率 | 哪些题材读者愿意付费 |
99
- | 标签分布 | 热门标签的变化趋势 |
64
+ 以聚合结果为主,按所选平台参考里的「分析维度」看,再对每个平台提取:
100
65
 
101
- #### 通用分析维度
102
-
103
- 对每个平台提取:
104
-
105
- 1. **情绪类型分布**:当前哪种情绪拉扯最火(虐恋/反转/悬疑/治愈/打脸)
66
+ 1. **情绪类型分布**:当前哪种情绪拉扯最火(虐恋/反转/悬疑/治愈/打脸),从题材表与标签热词归并
106
67
  2. **题材热点**:具体什么设定/场景反复出现
107
- 3. **篇幅分布**:热门短篇集中在多少字
108
- 4. **开头模式**:热门短篇的第一段/第一句怎么写
109
- 5. **结尾类型**:HE(好结局)/BE(坏结局)/开放式 的比例
110
- 6. **标题模式**:热门短篇的命名规律
68
+ 3. **篇幅分布**:字数分布与各题材字数中位
69
+ 4. **开头模式**:对候选方向抽样,看第一段/第一句怎么写
70
+ 5. **结尾类型**:HE(好结局)/BE(坏结局)/开放式 的比例(抽样可见时)
71
+ 6. **标题模式**:书名常见词 + 代表作标题
111
72
  7. **人设模型**:反复出现的主角类型
112
73
 
113
74
  ---
@@ -116,43 +77,45 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
116
77
 
117
78
  报告写给作者:讲市场结论和能写的方向。脚本名、命令和 SKIP 这类采集状态不进报告;某个平台没采到,就说一句「XX 这次没拿到(原因),结论不含它」。
118
79
 
80
+ 报告展示给作者,同时写进输出目录的 `短篇扫榜结论.md`:文件不存在就先按 [references/topic-match.md](references/topic-match.md) 的模板写文件头,再把报告作为「扫榜结论」一节写入(已存在就整节替换)。
81
+
119
82
  <!-- author-report -->
120
83
  ```md
121
- # 短篇网文扫榜报告:{平台名称}
84
+ ## 扫榜结论:{平台名称}
122
85
 
123
- ## 市场概况
86
+ ### 市场概况
124
87
  - 扫榜时间:{日期}
125
88
  - 核心发现:{一句话总结}
126
89
  - 可信度:{样本多少篇、来自哪几个榜};建议 {日期} 前后再扫一次
127
90
 
128
- ## 情绪热度排行
91
+ ### 情绪热度排行
129
92
  | 排名 | 情绪类型 | 榜上数量 | 趋势 | 代表作 |
130
93
  |------|----------|----------|------|--------|
131
94
  | 1 | {类型} | {N篇} | ↑/→/↓ | {标题} |
132
95
 
133
- ## 题材热点
96
+ ### 题材热点
134
97
  | 题材 | 热度 | 竞争程度 | 门槛 | 代表作 |
135
98
  |------|------|----------|------|--------|
136
99
  | {题材} | 高/中/低 | 激烈/一般/蓝海 | 高/中/低 | {标题} |
137
100
 
138
- ## 关键数据洞察
101
+ ### 关键数据洞察
139
102
  - 篇幅区间:热门短篇集中在 {X}-{Y} 字
140
103
  - 开头模式:{高频开头模式}
141
104
  - 结尾偏好:{HE/BE/开放式的比例}
142
105
  - 标题特征:{命名规律}
143
106
  - 人设热词:{高频主角类型}
144
107
 
145
- ## 风口预警
108
+ ### 风口预警
146
109
  - 🔥 正在爆发:{题材} — {依据}
147
110
  - ⚡ 即将起风:{题材} — {依据}
148
111
  - ⚠️ 即将饱和:{题材} — {依据}
149
112
 
150
- ## 值得写的方向
113
+ ### 值得写的方向
151
114
  1. {方向 + 情绪拉扯方式 + 可行性}
152
115
  2. {方向 + 情绪拉扯方式 + 可行性}
153
116
  3. {方向 + 情绪拉扯方式 + 可行性}
154
117
 
155
- ## 一句话
118
+ ### 一句话
156
119
  {犀利总结}
157
120
  ```
158
121
 
@@ -160,7 +123,7 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
160
123
 
161
124
  ### Phase 5:选题匹配
162
125
 
163
- 根据扫榜结果,结合项目条件输出选题匹配:
126
+ 先读 `短篇扫榜结论.md` 的「扫榜结论」和 `扫榜聚合.md`,不靠对话记忆;再结合项目条件输出选题匹配,按 [references/topic-match.md](references/topic-match.md) 写进同一文件的「选题匹配」一节:
164
127
 
165
128
  - 低复杂度候选:反转类、打脸类(结构清晰、验证成本低)
166
129
  - 高复杂度候选:悬疑类、虐恋类(技术壁垒高,需要伏笔、反转和情绪控制证据)
@@ -203,10 +166,13 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
203
166
 
204
167
  | 文件 | 何时加载 |
205
168
  |------|----------|
169
+ | 三份平台参考(链接见 Phase 2 第 1 步) | 「确定数据来源」:只读所选平台那份 |
170
+ | [references/topic-match.md](references/topic-match.md) | Phase 4/5:`短篇扫榜结论.md` 模板、可行性上限与交付 |
171
+ | [scripts/aggregate-rank.js](scripts/aggregate-rank.js) | 把输出目录里的原始榜单聚合成短表(`--out` 落盘,`--sample` 抽原始条目),主会话只读它 |
206
172
  | [references/real-market-data.md](references/real-market-data.md) | **核心参考**:跨平台写作差异对照表、各平台简介公式速查、题材爆款公式速查表、各平台写作特征 |
207
173
  | [scripts/cdp-utils.js](scripts/cdp-utils.js) | CDP 公共工具函数(ab/sleep/evalJSON/safeStr/scrollLoad/getArg),各采集脚本共用 |
208
- | [scripts/dz-browse-scraper.js](scripts/dz-browse-scraper.js) | 点众短篇采集(男频/女频),按 bookId 聚合 anchor 解出书名/评分/简介/作品页(避免把 UI 文字或简介误当书名),带连通性自检+书名解析率质量门,配合 browser-cdp 使用 |
209
- | [scripts/heiyan-booklist-scraper.js](scripts/heiyan-booklist-scraper.js) | 黑岩书库列表采集,后端 API 模式(Bearer token),含字数/标签/价格/时间,支持 --detail 获取标签简介;区分 CDP 未连/未登录/超时/接口错误并带书名命中率质量门 |
174
+ | [scripts/dz-browse-scraper.js](scripts/dz-browse-scraper.js) | 点众短篇采集(男频/女频),用法见点众参考 |
175
+ | [scripts/heiyan-booklist-scraper.js](scripts/heiyan-booklist-scraper.js) | 黑岩书库列表采集(需登录),用法见黑岩参考 |
210
176
 
211
177
  ---
212
178
 
@@ -0,0 +1,36 @@
1
+ # 没有采集脚本的平台:作者提供榜单
2
+
3
+ 知乎盐言、番茄短篇、七猫短篇等平台目前没有采集脚本,需要作者提供榜单。作者选了这些平台才读本文。
4
+
5
+ ## 向作者要什么
6
+
7
+ 「这个平台我没法自动抓,麻烦把榜单截图或复制的文字发给我,最好带上书名、作者、题材/标签、字数、热度(赞同、收藏、在读都行),有简介更好。给个链接也行,我试着打开。」
8
+
9
+ - 链接 → 用 WebFetch 抓取;抓不到就请作者改发截图或文字
10
+ - 只有故事名列表 → 可以直接分析,但报告的可信度写低一档
11
+
12
+ ## 整理成文件再聚合
13
+
14
+ 把作者给的内容整理成下面的格式,存进本次输出目录(文件名 `{平台}{榜单}_{YYYYMMDD}.md`),再和脚本采集的榜单一起聚合:
15
+
16
+ ```markdown
17
+ # 知乎盐言 · 热门榜
18
+
19
+ ### #1 {书名}
20
+ *{作者} · {题材} · {状态} · {字数}字 · {热度数字}收藏*
21
+ **标签:** {标签1}、{标签2}
22
+
23
+ > {简介}
24
+ ```
25
+
26
+ 热度写成「数字 + 口径」(如 `2.3万收藏`、`1.2万热度`),聚合才认得。缺的字段直接省略,不要编。
27
+
28
+ ## 知乎盐言分析维度
29
+
30
+ | 维度 | 看什么 |
31
+ |---|---|
32
+ | 热门榜单 | 当前最受关注的故事 |
33
+ | 高赞故事 | 口碑最好的作品结构 |
34
+ | 新作者上榜 | 非头部账号的题材选择与开篇模式 |
35
+ | 付费转化 | 哪些题材读者愿意付费 |
36
+ | 标签分布 | 热门标签的变化趋势 |
@@ -0,0 +1,24 @@
1
+ # 点众短篇:采集与分析
2
+
3
+ 作者选了点众才读本文。需先用 `/browser-cdp` 启动 Chrome;不需要登录。脚本按 bookId 聚合页面链接解出书名、评分、简介、作品页(避免把 UI 文字或简介误当书名),带连通性自检和书名解析率质量门。
4
+
5
+ ## 页面与命令
6
+
7
+ | 页面 | URL |
8
+ |------|-----|
9
+ | 男频短篇 | ishugui.com/browse |
10
+ | 女频短篇 | ishugui.com/browse/on3 |
11
+
12
+ `node scripts/dz-browse-scraper.js --channel male|female|all --outdir {输出目录}`,文件名 `点众{男频/女频}短篇_{YYYYMMDD}.md`。
13
+
14
+ ## 字段
15
+
16
+ 书名、作者、标签(聚合时当题材)、状态、字数、评分(聚合的热度口径)、最新章节、作品页、简介。文件头 `数据质量` 标 `[书名解析异常]` 时,多为页面结构变动或未加载完:人工打开对应 URL 确认页面正常后重采。
17
+
18
+ ## 分析维度
19
+
20
+ | 维度 | 看什么 |
21
+ |---|---|
22
+ | 标签分布 | 家庭复仇、假千金、弹幕流等题材的集中度 |
23
+ | 评分 | 同题材里口碑拉开差距的作品 |
24
+ | 字数 | 主力篇幅(通常 1-2 万字、5-10 章) |
@@ -0,0 +1,21 @@
1
+ # 黑岩短篇:采集与分析
2
+
3
+ 作者选了黑岩才读本文。**黑岩需要登录**:先用 `/browser-cdp` 启动 Chrome,请作者在 Chrome 里手动登录 `manage.zhangwenpindu.cn`,脚本再从 Cookie 取 Bearer token 调后端接口;未登录会报错提示。采集失败就跳过黑岩继续其他平台,报告里说明结论不含它。
4
+
5
+ ## 页面与命令
6
+
7
+ 书库列表:manage.zhangwenpindu.cn/books/booklist
8
+
9
+ `node scripts/heiyan-booklist-scraper.js --channel male|female|all --pages N --outdir {输出目录}`(每页 20 条;`--detail` 逐本取标签和简介,较慢),文件名 `黑岩书库列表_{频道}_{YYYYMMDD}.md`。脚本区分 CDP 未连、未登录、超时、接口错误,并带书名命中率质量门。
10
+
11
+ ## 字段
12
+
13
+ 书名、作者、分类/类型(聚合时类型当题材)、字数、价格、创建/更新时间、标签与简介(`--detail`)。书库列表没有热度字段,聚合按列表顺序取代表作,热度结论要靠标签和更新时间旁证,可信度写低一档。
14
+
15
+ ## 分析维度
16
+
17
+ | 维度 | 看什么 |
18
+ |---|---|
19
+ | 类型分布 | 虐恋、复仇、身份反转的占比 |
20
+ | 创建/更新时间 | 近期新开的集中在哪些类型 |
21
+ | 标签组合 | 极端情绪的具体包装方式 |
@@ -0,0 +1,38 @@
1
+ # 短篇扫榜结论:落盘与交接
2
+
3
+ 短篇扫榜的结论写进输出目录的 `短篇扫榜结论.md`:Phase 4 写文件头和「扫榜结论」,Phase 5 写「选题匹配」。`/story-short-write` 定目标情绪时会读它,所以作者不必记住上次聊了什么。
4
+
5
+ ## 短篇扫榜结论.md 模板
6
+
7
+ ```
8
+ # 短篇扫榜结论:{平台/方向}
9
+ - 扫榜日期:{YYYYMMDD}
10
+ - 复扫日期:{YYYYMMDD} # 短篇风口有效期短,通常扫榜后 2-4 周;过了这天结论只当参考
11
+ - 数据来源:{榜单文件名 / 作者提供 / 内置知识}
12
+ - 聚合表:扫榜聚合.md # 同目录;内置知识模式写「无」
13
+
14
+ ## 扫榜结论:{平台名称}
15
+ {Phase 4 报告正文}
16
+
17
+ ## 选题匹配
18
+
19
+ ### 方向 1:{一句话方向}
20
+ - 目标情绪:{读者读完的感觉,如意难平/爽感释放/反转震撼}
21
+ - 题材与设定:{题材包 + 核心设定}
22
+ - 开头钩子:{前 3 句建立的冲突、身份差或情绪钩子}
23
+ - 传播引擎:{反转 / 强共鸣 / 强话题 / 强余韵}
24
+ - 复杂度:低/高 — {低:反转、打脸;高:悬疑、虐恋}
25
+ - 可行性:高/中/低 — {同方向样本几篇 + 趋势 + 作者素材能否撑住}
26
+ - 篇幅/平台:{建议字数 + 目标平台}
27
+ - 验证动作:{开写前怎么低成本验证}
28
+
29
+ ### 方向 2 ...
30
+ ```
31
+
32
+ 2-3 个方向为宜,按可行性排序(高的在前)。
33
+
34
+ ## 规则
35
+
36
+ - 可行性上限:聚合表标「少」、样本不到 10 篇或来自作者只给的故事名列表 ⇒ 不许给「高」;内置知识模式一律给「中」。
37
+ - 重跑时整节替换,不追加第二份;「扫榜结论」和「选题匹配」都保留在同一个文件里。
38
+ - 交付时告诉作者路径:「开写时把小说项目建在扫榜时的文件夹里或和它同级,`/story-short-write` 会自动找到;隔得远就把 `短篇扫榜结论.md` 复制到项目根。」
@@ -10,23 +10,26 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
10
10
 
11
11
  **执行规则:短篇以情绪为目标,所有内容为情绪服务。**
12
12
 
13
- ## 阶段 Reference Gate(强制,先读后写)
13
+ ## 写前必读(强制,先读后写)
14
14
 
15
- 任何创建或修改故事文件的动作之前,先判断当前 Phase,并完成该阶段的 reference gate。**只读本 SKILL.md 不算完成门禁。**
15
+ 短篇按作者时刻加载:每个时刻只读自己的文件,后一时刻只靠落盘文件接上前一时刻。创建或修改故事文件前,先判断当前时刻并完整读取它的必读项(分块直到 EOF;`rg` 检索或局部摘读不算读完)。**只读本 SKILL.md 不算完成门禁。**
16
16
 
17
- Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完整读取(分块直到 EOF;`rg` 检索或局部摘读不算读完):
17
+ | 时刻 | 作者确认什么 | 读什么 | 落盘 |
18
+ |---|---|---|---|
19
+ | 定情绪(Phase 1) | 读者读完的感觉、题材方向 | 本文件 | 进构思时写入 `设定.md` |
20
+ | 构思(Phase 2) | 故事核、人物、反转、付费点 | ① `references/workflow-design.md` + `references/writing-workflow.md`、`references/submission-craft.md`、`references/short-craft.md`、`references/short-reversal.md` ② 核心 10 题材读一个精确的 `references/genre-styles/{题材}.md`,冷门题材读 `references/genre-writing-formulas.md` ③ 有反派或真相揭露设计时读 `references/villain-and-reveal.md`,不适用时在设计校验区写明原因 | `设定.md`、`小节大纲.md` |
21
+ | 写正文(Phase 3–4) | 成稿 | Phase 3 写正文前完整读取 `references/workflow-draft.md`,按其「写前加载」读写作手法;Phase 4 精修前完整读取 `references/workflow-revision.md` | `正文.md` |
18
22
 
19
- 1. `references/workflow-design.md` + `references/writing-workflow.md`、`references/submission-craft.md`、`references/short-craft.md`、`references/short-reversal.md`
20
- 2. 核心 10 题材再读取一个精确的 `references/genre-styles/{题材}.md`;冷门题材改读 `references/genre-writing-formulas.md`
21
- 3. 有反派或真相揭露设计时再读 `references/villain-and-reveal.md`;不适用时在设计校验区写明原因
23
+ 构思必读项在第一次写入 `设定.md` / `小节大纲.md` 前读完。任一必需路径不存在、不可读或题材尚未解析到唯一 reference 时,立即停止,报告准确路径/待定项,**不得创建或修改故事产物**。不要把“已读 references”的回执写进故事文件;选出的题材招式、反转计算等应用证据写进正常设计字段。每个时刻按当前任务完整回读,不得用早先读过代替。
22
24
 
23
- 任一必需路径不存在、不可读或题材尚未解析到唯一 reference 时,立即停止,报告准确路径/待定项,**不得创建或修改故事产物**。不要把“已读 references”的回执写进故事文件;要把选出的题材招式、反转计算等应用证据写进正常设计字段。Phase 3 写正文前完整读取 `references/workflow-draft.md`,Phase 4 精修前完整读取 `references/workflow-revision.md`,再按各阶段的写前准备和精修检查加载所需资料,不得用早先读过代替当前任务完整回读。
25
+ **交接只靠落盘**:作者在对话里定下的字数、平台、人称、偏好、红线和否掉的方案,构思交付前写进 `设定.md`;写正文只读两份设计文件与本时刻的写作手法,不重读构思方法论,也不回翻对话。
26
+ **换上下文**:构思读得最多。构思汇报末尾建议作者新开一个对话说「写正文」;作者要在本对话接着写也照做。新对话里两份设计文件已通过构思完成门禁时,直接进入写正文。
24
27
 
25
28
  ---
26
29
 
27
- > Agent 只查当前端 canonical 目录(Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`),不跨端误判。Claude 用 `subagent_type`,OpenCode 用 `subagent` 的 `agent`,Codex 用 `agent_type`,Antigravity 用 `invoke_subagent` + `TypeName`;能力/文件缺失、unknown agent 或 ZCode 3.3.4 时报告 `Fallback: project custom agents unavailable -> solo`。
30
+ > Agent 只查当前端 canonical 目录(Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`),不跨端误判。Claude 用 `subagent_type`,OpenCode 用 `subagent` 的 `agent`,Codex 用 `agent_type`,Antigravity 用 `invoke_subagent` + `TypeName`。主会话自己写正文、去味是常态,不报;作者明确要交给写作助手而能力/文件缺失、unknown agent 或 ZCode 3.3.4 时,由主会话接手并一句白话告诉作者(如「写作助手用不了,由我直接写」),`Fallback: project custom agents unavailable -> solo` 原文只写进汇报最后一行「技术备注:」。
28
31
  >
29
- > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 32` 不一致时(标记缺失、字段缺失/非整数、小于或大于 32)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 32)` 并提示重新运行 `/story-setup` 后新开会话;大于 32 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
32
+ > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时(标记缺失、字段缺失/非整数、小于或大于 34)**照常按文件存在性检查并 spawn**,同时用一句白话提示作者「写作助手是旧版,运行 /story-setup 后新开对话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 34)` 原文写进技术备注行;大于 34 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
30
33
 
31
34
  **文风裁决**:正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风并形成 `style_resolution`;无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
32
35
 
@@ -40,30 +43,24 @@ Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完
40
43
 
41
44
  ---
42
45
 
43
- ## 格式规范(最高优先级)
44
-
45
- 详细规则见 `references/short-format.md`,写作前必须加载。**主会话与 narrative-writer 子代理使用同一套正文格式**:正文只允许保存在 `正文.md`,正文相邻段落之间只允许一个换行符 `\n`(不得出现空行/`\n\n`),对话引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」),短篇小节标记全文统一(默认 `###1.`/`###2.`)。如果子代理输出与主会话格式不一致,按本格式规范重排后再写入文件。
46
-
47
- ---
48
-
49
46
  ## 核心方法
50
47
 
51
48
  除了上面的执行规则,构思和写作时遵循:
52
49
 
53
- - **从验证过的模式出发**:有对标书就先拆解,没有就从 `genre-styles/{题材}.md`(核心 10 题材)或 `genre-writing-formulas.md`(冷门题材)找对应的短篇剧情模式
54
- - **定方向就换风格**:题材方向一旦确定(如追妻火葬场),立刻加载 `references/genre-styles/{题材}.md`——正文的腔调、开篇、钩子、情绪烈度、对话金句、招式、收尾全部切到该题材。核心 10 题材(追妻火葬场 / 世情打脸 / 复仇打脸 / 总裁豪门 / 宅斗宫斗 / 民俗怪谈 / 悬疑 / 甜宠 / 双男主 / 沙雕脑洞)有专属风格包,其中追妻含 现代/古代/民国 时代变体与 小三文学/死人文学 流派分支;冷门题材用 `genre-writing-formulas.md` 的结构骨架兜底,腔调仍按 `short-craft.md` 通用底座
55
- - **只加载必需信息**:写每节前明确目标情绪和要用的技法,答不出就先回读参考
56
- - **复用作者习惯**:若作者记忆已存在,正文前用 `scripts/author_memory_commit.py query --kind prose_style --kind story_design --book-root {项目目录}` 获取 active 条目(≤2KB),传给正文/改写 agent 作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;硬门禁、当前请求和本篇设定优先。长期声明在收尾用 `record` 写入并回传回执,细则见 [references/author-memory.md](references/author-memory.md)。
50
+ - **定方向就换风格**:题材一旦确定,腔调、开篇、钩子、情绪烈度、金句、招式、收尾全部切到该题材包(追妻含时代变体与小三/死人文学分支);冷门题材用公式结构骨架兜底,腔调按 `short-craft.md`
51
+ - **复用作者习惯**:有作者记忆时,正文前用 `scripts/author_memory_commit.py query --workspace {工作区} --book-root {项目目录} --kind prose_style --kind story_design [--genre {题材}] [--workflow 短篇]` 获取 active 条目(≤2KB),传给正文/改写 agent 作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;硬门禁、当前请求和本篇设定优先。长期声明在收尾用 `record` 写入并回传回执,细则见 [references/author-memory.md](references/author-memory.md)。
57
52
 
58
53
  ---
59
54
 
60
55
  ## 写作流程
61
56
 
62
- ### Phase 1:确定情绪目标
57
+ ### Phase 1:确定目标情绪
58
+
59
+ 从项目根及上一级往下 3 层找到 `短篇扫榜结论.md`(多份取最新)时先读其「选题匹配」,排第一的方向带着目标情绪当候选问作者;过了复扫日期就提醒可能过期。
63
60
 
64
61
  问用户:**「你想让读者读完什么感觉?有没有想写的题材方向或灵感?」**
65
62
 
66
- 如果用户有明确想法 → 直接进入 Phase 2。
63
+ 用户已说清读者读完的感觉 → 直接进入 Phase 2;只给了题材或梗、没说情绪 → 从下表带一个推荐情绪问一句,作者点头再进。
67
64
 
68
65
  如果用户只有模糊想法 → 帮用户做情绪选择:
69
66
 
@@ -80,21 +77,19 @@ Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完
80
77
 
81
78
  ### Phase 2:构思核心框架
82
79
 
83
- > 如果用户有参考小说,先用 `/story-short-analyze` 拆解。默认输出存入项目根目录 `拆文库/{书名}/`;如用户指定当前短篇引用目录,则可输出/同步到 `{短篇标题}/对标/{书名}/`。写作时会自动查找并读取这些拆文结果,不需要用户手动复制到 prompt。
84
-
85
80
  #### 对标上下文加载
86
81
 
87
82
  存在本篇 `对标/`、项目根 `拆文库/` 或用户提供参考小说时,先完整读取 [references/benchmark-recall.md](references/benchmark-recall.md),执行对标发现、排除本书续写基线、题材匹配与召回。无外部对标时仍按原题材包执行。
88
83
 
89
84
  #### 构思、设计与验收
90
85
 
91
- 完整步骤见 [references/workflow-design.md](references/workflow-design.md)。按首屏 Reference Gate 读完后执行;两份设计文件通过其中的 Phase 2 完成门禁,才可进入 Phase 3。
86
+ 完整步骤见 [references/workflow-design.md](references/workflow-design.md)。按首屏「写前必读」读完后执行;两份设计文件通过其中的 Phase 2 完成门禁,才可进入 Phase 3。
92
87
 
93
88
  ---
94
89
 
95
90
  ### Phase 3:逐场景写作
96
91
 
97
- 进入正文写作前,完整读取 [references/workflow-draft.md](references/workflow-draft.md),执行交付参数锁定、写前验收、逐场景写作与 Phase 3 完成门槛。只做构思或精修时不加载本阶段细则。
92
+ 进入正文写作前,完整读取 [references/workflow-draft.md](references/workflow-draft.md),执行交付参数锁定、写前验收与逐场景写作;只做构思或精修时不加载。
98
93
 
99
94
  **小节完整性流程**:
100
95
  1. **写作时**:每节围绕一个主问题推进;让风险、信息、关系、资源、决定、行动或读者理解至少发生一项可见变化。相关情节点可以由同一动作链或对话同时兑现,不为拆成多个“子事件”重复铺陈。
@@ -118,7 +113,7 @@ Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完
118
113
 
119
114
  ### Phase 4:精修打磨
120
115
 
121
- 精修或质量自检前,完整读取 [references/workflow-revision.md](references/workflow-revision.md),执行语义去味、一致性检查、最终文件扫描与交付验收;修改后按其中职责分工复核。只做构思时不加载本阶段细则。
116
+ 精修或质量自检前,完整读取 [references/workflow-revision.md](references/workflow-revision.md),按其职责分工去味、查一致性、做最终扫描与交付验收;只做构思时不加载。
122
117
 
123
118
  ---
124
119
 
@@ -127,19 +122,13 @@ Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完
127
122
  **流水线:** 短篇
128
123
  **位置:** 写作(第 3/3 步)
129
124
 
130
- | 时机 | 跳转到 | 命令 |
131
- |---|---|---|
132
- | 有参考小说想对标 | story-short-analyze | `/story-short-analyze` → 输出存入 `拆文库/{书名}/` |
133
- | 写完,去 AI 味 | story-deslop | `/story-deslop` |
134
- | 想自检 | 本 skill 质量自检 | 用 Phase 4 自检流程 + `references/short-prose-quality.md` 逐项核对 |
135
- | 需要市场方向 | story-short-scan | `/story-short-scan` |
136
- | 设定太大,适合长篇 | story-long-write | `/story-long-write` |
125
+ 有参考小说想对标 → `/story-short-analyze`(存入 `拆文库/{书名}/`);写完去 AI 味 → `/story-deslop`;想自检 → Phase 4 流程 + `references/short-prose-quality.md`;要市场方向 → `/story-short-scan`;设定太大适合长篇 → `/story-long-write`。
137
126
 
138
127
  ---
139
128
 
140
129
  ## 参考资料
141
130
 
142
- 阶段必读项按首屏 Reference Gate 执行;其他资料按 [参考索引](references/reference-index.md) 的加载条件选用。
131
+ 阶段必读项按首屏「写前必读」执行;其他资料按 [参考索引](references/reference-index.md) 的加载条件选用。
143
132
 
144
133
  ## 语言
145
134
 
@@ -0,0 +1,13 @@
1
+ # agent-calls.md:短篇派写手的调用方式
2
+
3
+ 只在要 spawn narrative-writer 时读;主会话自己写正文、自己去味时不读。何时派由 workflow-draft.md / workflow-revision.md 决定,这里只放 prompt 与必须附带的内容。Antigravity 用 `invoke_subagent` + 同名 `TypeName`。
4
+
5
+ ## 写正文
6
+
7
+ spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,只传项目目录、输出文件、目标情绪、题材风格包、小节大纲、角色、主/副对标召回摘要、本书文风全文路径与 style_resolution、作者偏好 query 中的文风/故事设计项、格式硬约束和写作硬约束,并传入检查分工:本批只做内容覆盖与格式自检,完整语义去味由 Phase 4 负责,最终文件扫描由主会话负责。
8
+
9
+ 不把本 skill 整段规则塞进 prompt;细节以 `short-format.md`、题材包、`short-craft.md` 与 `scene-craft.md` 为准。收回后按 workflow-draft.md 的格式规范重排再写入 `正文.md`。
10
+
11
+ ## 精修去味
12
+
13
+ spawn `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查分工:你负责本次语义去味及原定自检;最终文件扫描由主会话执行,不在子代理内重复\n检查范围:{正文文件}\nstyle_resolution:{与写作一致的本次文风裁决,含全文路径}\n作者偏好:{query 命中的 prose_style/story_design 项}\n篇幅:短篇\n卖点保留:第一人称审判句、火葬场预告、心死式章尾留,只删中立作者讲解与空洞升华\nAI味等级:{轻度/中度/重度;未分级按轻度}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与本次字数范围下沿约束,跌破改降AI重写)\n必须检查:检查是否连续使用头皮发紧/眼皮一跳/心口一沉/胃里翻涌等精致戏剧反应,能写普通动作/普通感觉就写普通动作/普通感觉;已有手机/聊天记录/公告/账单/病历/证据截图等信息,保留为角色看到或处理的场内载体,不改成叙述者解释;任务卡点只在角色本来有要办的事且能加重情绪/证据/关系/反转时使用,不为自然感补流程")`
@@ -0,0 +1,75 @@
1
+ # 作者记忆维护
2
+
3
+ [author-memory.md](author-memory.md) 的少见时刻补充:记一条、确认、替换、忘掉和优先级仍按那份协议,本文件只在下列情况读——作者说「整理作者记忆」,或回执 `warnings`/查询 `omitted_ids` 提示超编;写入因 `作者画像.md` 写满失败;书根就是工作区,或工具报 `state.book`、单书布局错误;要做存量迁移 `migrate`、多事件原子 `commit`、派生视图 `check`;冲突候选要落定;碰到升级前留下的旧条目。
4
+
5
+ 作者记忆借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道,但把决定权留给作者。
6
+
7
+ ## 文件
8
+
9
+ ```text
10
+ {工作区}/.story/作者记忆/ # 项目级 store:global / genre / workflow 条目,编号 AP
11
+ ├── _author-memory-state.json # 唯一结构化权威
12
+ ├── 作者画像.md # 仅 active,供作者查看与管理
13
+ ├── 待确认.md # pending / conflict,不参与约束
14
+ └── 变更记录.md # 最近 100 次、最新在前的事务记录
15
+ {书}/.story/作者记忆/ # 书级 store:只存这本书的 book 条目,编号 BP,同样四个文件
16
+ ```
17
+
18
+ 三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。
19
+
20
+ ## 任务映射表
21
+
22
+ 各 skill 入口的 `query` 命令按此表选 kind;写入时的预算提醒也按这四类任务组合估算。
23
+
24
+ | 任务 | query kinds | 注入位置 |
25
+ |---|---|---|
26
+ | 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |
27
+ | 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |
28
+ | 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话,不传正文 agent |
29
+ | 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话,不降低 rubric |
30
+
31
+ 审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明;问题严重度和 PASS/FAIL 仍由 rubric 决定。
32
+
33
+ ## 注入预算与容量
34
+
35
+ - **写入不因注入预算失败**:`record` / `commit` 照常成功、给回执;工具按上表四类任务组合估算最坏查询情形(全局条目+各 scope 维度最重的单一切片,切片按大小写无关归并、轻重按写作时真正读到的字段算,与真实查询同一把尺),装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。
36
+ - 写入落盘后另一级 store 读不出来(书目录不存在、`--book` 与书级记录不符等)也照常给回执,`warnings` 注明本次提醒没算上它。写书级条目时「本书+全局」按实际条目精确计算;写项目级条目时只看得到项目级 store,顺手传 `--book-root` 就把当前这本书也算进提醒。
37
+ - 查询按 **重要度 → 本书例外 → 最近更新** 排序装填(同一范围的条目必在同一 store,「最近」按该 store 的修订号比,不跨 store 比较),先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里。装不下的条目跳过而不中断(一条长的不挡后面的短条),漏下的 ID 按同一优先级报进 `omitted_ids`(最多列 20 条,`omitted` 是真实总数)。
38
+ - 注入预算之外还有一道硬上限:`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到(远在注入预算之后),碰到就走「整理作者记忆」;`forget` 这类减量操作在满编时照常可用。
39
+
40
+ ## 整理作者记忆
41
+
42
+ 作者说「整理作者记忆」,或回执 `warnings`/查询 `omitted_ids` 提示超编、写入因画像写满失败时:读项目级与当前书的 `作者画像.md`(每条都标了范围、重要度、把握和确认次数,重要度就是超编时的去留依据),提出合并同义条(`replace` 多合一)、退役过时条(`forget`)、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案;项目级画像里还有「本书:」条目时,「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认(编号只放括号里),确认后按 store 各汇成一份 `commit` 事务提交(一份事务只写一个 store)。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条,不要靠删限定词把两条凑成一条。整理只由作者发起或确认,不自动执行。
43
+
44
+ ## 冲突候选
45
+
46
+ 冲突候选(`conflict`)不能绕过旧规则直接 `decide=activate`。作者选新说法:用 `replace`,`old_ids` 同时列旧 active 条目和这条冲突候选,新条目直接 active、两条旧的标 `superseded`;作者留旧规则:对候选 `decide=reject`。旧条目被 `replace` / `forget` 撤下后,它不再是任何候选的冲突对象,冲突对象清空的候选退回 `pending`。
47
+
48
+ ## 单书布局
49
+
50
+ 书根就是工作区(`--book-root` 与 `--workspace` 同一目录)时,书级 store 改住 `{工作区}/.story/作者记忆/书级/`,与项目级各自一份 state;首次建立的书名优先取项目级存量本书条目里唯一的书名,再取目录名。旧版曾把书级 state 写在项目级位置,此后项目级读写都报 `state.book`;带 `--book-root {工作区}` 运行任一命令(含 `query`)会先把它原样移进 `书级/`,不改内容。这个目录其实是某个工作区里的一本书时(上一层叫 `长篇/` 或 `短篇/`,或某个祖先有 `.active-book` 或项目级 state),工具直接报错、不动任何文件,按报错改传 `--workspace`。
51
+
52
+ ## 存量迁移
53
+
54
+ 不做双读:升级前写进项目级 store 的 book 条目不再参与查询与预算估算,也不再接受新的 book 写入;它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来:断言、证据、确认次数、重要度原样保留,换成 `BP` 编号,原 `AP` 条目标 `superseded` 并注明去向;与全局条目的冲突关系在迁移后不再成立,这类候选退回 `pending`。书级每个源条目一笔事务,重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书:」条目时,把迁移列为默认提案项。
55
+
56
+ ## 旧条目
57
+
58
+ - 升级前写下的长断言不受 120 字节新建上限约束:原样重申它会**强化**原条目(确认次数 +1),不会因超长被拒;只有真正新建条目才校验 120 字节。
59
+ - 存量 state 里推断类旧来源的条目照常可读、可确认、可退役;新写入仍只接受 `explicit_user`、`accepted_suggestion`、`manual`。
60
+
61
+ ## 其他命令
62
+
63
+ 先依次尝试 `python3`、`python`、`py -3` 找到 Python 3,再从当前 skill 根运行本地副本(`record` / `query` 见 author-memory.md):
64
+
65
+ ```text
66
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区} [--book-root {书目录}]
67
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json
68
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}
69
+ {PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区} [--book-root {书目录}]
70
+ ```
71
+
72
+ - `commit`:高级批量入口,只在需要把多个动作绑定成一次原子提交时用(如整理作者记忆)。顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`(每项与单事件的 `operation` 同形)。一份事务只写一个 store;先在内存完成 schema、引用、容量和所有视图校验,操作按数组顺序应用,任一步失败则整份事务零写入,最后原子替换 state。过期修订会在任何写入前失败。事务文件在成功前必须保留,成功后删除;显式记忆请求按 author-memory.md「回执怎么告诉作者」转告。
73
+ - `migrate`:把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store,幂等,中途失败直接重跑;返回 `migrated`(源→新编号),没有存量时为空。
74
+ - `check`:从 state 重建并逐字核验所有派生视图;传 `--book-root` 时两级一起核验。
75
+ - `init`:显式初始化 store;平常不需要,首次 `record` 会随事务创建。