@oh-story/dsh 0.1.4 → 0.1.5
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.
- package/README.md +56 -12
- package/lib/client.js +2692 -268
- package/lib/client.js.map +4 -4
- package/lib/drama/manifest.json +136 -101
- package/lib/drama/skills/short-drama/SKILL.md +61 -1
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +7 -4
- package/lib/drama/skills/short-drama/references/creator-documents.md +133 -8
- package/lib/drama/skills/short-drama/references/creator-workflow.md +38 -2
- package/lib/drama/skills/short-drama/references/knowhow-index.md +3 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +10 -7
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +3 -0
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
- package/lib/drama/skills/short-drama-assets/SKILL.md +13 -3
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +2 -1
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +19 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +6 -2
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +4 -3
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +3 -1
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
- package/lib/drama/skills/short-drama-produce/SKILL.md +46 -10
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +12 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +76 -7
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +6 -2
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +5 -2
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +16 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +8 -3
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +81 -13
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +21 -1
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -6
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +11 -7
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +5 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +3 -2
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
- package/lib/index.js +865 -33
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/LICENSE +21 -0
- package/lib/novel-to-game/README.md +180 -0
- package/lib/novel-to-game/README_ZH.md +178 -0
- package/lib/novel-to-game/VERSION +1 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
- package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
- package/lib/novel-to-game/manifest.json +508 -0
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
- package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
- package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
- package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
- package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
- package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
- package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
- package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
- package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
- package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
- package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
- package/lib/oh-story/manifest.json +415 -305
- package/lib/oh-story/roles/consistency-checker.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +32 -33
- package/lib/oh-story/roles/story-architect.md +16 -26
- package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
- package/lib/oh-story/skills/story/SKILL.md +16 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-import/SKILL.md +19 -10
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
- package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
- package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-core-mechanics.md → story-long-write/references/long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-long-write/references/long-reversal.md} +18 -32
- package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +14 -14
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-review/SKILL.md +26 -17
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +74 -33
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
- package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/{story-long-write/references/genre-core-mechanics.md → story-setup/references/agent-references/long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → long-reversal.md} +18 -32
- package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
- package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
- package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
- package/lib/oh-story/skills/{story-long-write/references/reversal-toolkit.md → story-setup/references/agent-references/short-reversal.md} +29 -23
- package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
- package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
- package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
- package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
- package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
- package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
- 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
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
- 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
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
- package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
- package/lib/types/client/drama-production-view.d.ts +34 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -0
- package/lib/types/client/drama-production.d.ts +92 -0
- package/lib/types/client/drama-production.d.ts.map +1 -0
- package/lib/types/client/file-activity.d.ts +4 -2
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-intents.d.ts +9 -0
- package/lib/types/client/production-intents.d.ts.map +1 -0
- package/lib/types/client/production-prompts.d.ts +9 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -0
- package/lib/types/client/production-runtime.d.ts +58 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -0
- package/lib/types/client/video-studio.d.ts +41 -0
- package/lib/types/client/video-studio.d.ts.map +1 -0
- package/lib/types/client/workbench-ui.d.ts +5 -0
- package/lib/types/client/workbench-ui.d.ts.map +1 -0
- package/lib/types/game-verification.d.ts +16 -0
- package/lib/types/game-verification.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/production-intent.d.ts +21 -0
- package/lib/types/production-intent.d.ts.map +1 -0
- package/lib/types/production-tool.d.ts +5 -0
- package/lib/types/production-tool.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts +7 -0
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts +42 -0
- package/lib/types/video-project.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +6 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts +20 -0
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +282 -0
- package/lib/video-recap/LICENSE +21 -0
- package/lib/video-recap/README.en.md +257 -0
- package/lib/video-recap/README.md +255 -0
- package/lib/video-recap/manifest.json +684 -0
- package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
- package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
- package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
- package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
- package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
- package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
- package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
- package/lib/video-recap/skills/video-script/SKILL.md +248 -0
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
- package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
- package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
- package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
- package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
- package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
- package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
- package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
- package/package.json +55 -40
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
- /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
- /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 长篇题材框架速查
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **用途**:长篇选题和大纲设计时对照使用。节点占比用于检查整卷/全书功能分配,不是每章硬配额;短篇结构转交 `story-short-write`。
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
|
|
32
32
|
| 还需要什么 | 加载 |
|
|
33
33
|
|-----------|------|
|
|
34
|
-
| 核心梗设计与循环机制 | `genre-
|
|
34
|
+
| 核心梗设计与循环机制 | `long-genre-mechanics.md` |
|
|
35
35
|
| 读者心理与期待管理 | `genre-readers.md` |
|
|
36
|
-
|
|
|
36
|
+
| 对应长篇题材卡 | `genre-prose-cards.md` 索引及 `genre-prose-cards/` 对应题材卡 |
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
@@ -62,18 +62,6 @@
|
|
|
62
62
|
| 7.反复拉扯 | 多次求复合被拒 | 20% | 爽(打脸) |
|
|
63
63
|
| 8.结局 | 开放/回头/悲剧 | 15% | 释放 |
|
|
64
64
|
|
|
65
|
-
### 短篇(压缩三幕)
|
|
66
|
-
|
|
67
|
-
**核心**:先虐后爽,后悔的男人+不回头的女人
|
|
68
|
-
|
|
69
|
-
| 幕 | 占比 | 内容要点 |
|
|
70
|
-
|----|------|----------|
|
|
71
|
-
| 建压 | 40% | 冷暴力/出轨(具体事件)→最后忍让→平静离开 |
|
|
72
|
-
| 爆点 | 35% | 丈夫后悔→妻子新生活→追妻被拒→信息差释放 |
|
|
73
|
-
| 落定 | 25% | 火葬场→妻子最终选择→一句话定调 |
|
|
74
|
-
|
|
75
|
-
**技法**:前期虐越狠后期越爽;妻子至少被拒绝两次;丈夫视角悔恨比妻子视角坚强更有冲击;钩子=信息差+打脸
|
|
76
|
-
|
|
77
65
|
---
|
|
78
66
|
|
|
79
67
|
## 重生复仇
|
|
@@ -101,16 +89,6 @@
|
|
|
101
89
|
| 7.反派下场 | 逐一报应 | 10% | 爽(宣泄) |
|
|
102
90
|
| 8.新生活 | 选择新方向 | 10% | 治愈/释然 |
|
|
103
91
|
|
|
104
|
-
### 短篇(压缩三幕)
|
|
105
|
-
|
|
106
|
-
| 幕 | 占比 | 内容要点 |
|
|
107
|
-
|----|------|----------|
|
|
108
|
-
| 建压 | 35% | 重生节点→前世闪回→第一个不同选择→信息差建优势 |
|
|
109
|
-
| 爆点 | 40% | 逐步拆解仇人→两个打脸名场面→仇人反击落空→前世未知真相 |
|
|
110
|
-
| 落定 | 25% | 终极复仇→弥补遗憾→新生开始 |
|
|
111
|
-
|
|
112
|
-
**技法**:不能太顺利要有变数;打脸分层递进;前世闪回有选择不倒完;钩子=信息差+暗牌+打脸
|
|
113
|
-
|
|
114
92
|
---
|
|
115
93
|
|
|
116
94
|
## 小三/婚恋
|
|
@@ -133,16 +111,6 @@
|
|
|
133
111
|
| 7.报应 | 10% | 爽(宣泄) |
|
|
134
112
|
| 8.新生活 | 10% | 治愈 |
|
|
135
113
|
|
|
136
|
-
### 短篇(压缩三幕)
|
|
137
|
-
|
|
138
|
-
| 幕 | 占比 | 要点 |
|
|
139
|
-
|----|------|------|
|
|
140
|
-
| 建压 | 40% | 暗示裂痕→蛛丝马迹→确认→冷静(不是崩溃) |
|
|
141
|
-
| 爆点 | 35% | 暗中布局→表面周旋(戏剧张力)→摊牌 |
|
|
142
|
-
| 落定 | 25% | 法律/揭露/经济独立→渣男下场→新生 |
|
|
143
|
-
|
|
144
|
-
**技法**:发现过程要有悬念;妻子要有策略不是傻白甜;钩子=信息差+暗牌+倒计时
|
|
145
|
-
|
|
146
114
|
---
|
|
147
115
|
|
|
148
116
|
## 世情
|
|
@@ -165,16 +133,6 @@
|
|
|
165
133
|
| 7.报应 | 15% | 爽(宣泄) |
|
|
166
134
|
| 8.善有善报 | 10% | 治愈 |
|
|
167
135
|
|
|
168
|
-
### 短篇(压缩三幕)
|
|
169
|
-
|
|
170
|
-
| 幕 | 占比 | 要点 |
|
|
171
|
-
|----|------|------|
|
|
172
|
-
| 建压 | 40% | 困境→暴露事件→周围人态度→忍还是争 |
|
|
173
|
-
| 爆点 | 35% | 冲突升级→背叛/落井下石→反击→反转 |
|
|
174
|
-
| 落定 | 25% | 解决→人心揭示→成长→留白 |
|
|
175
|
-
|
|
176
|
-
**技法**:靠细节不靠大事件;人物不能非黑即白;钩子=代价+弱者+反转
|
|
177
|
-
|
|
178
136
|
---
|
|
179
137
|
|
|
180
138
|
## 仙侠/玄幻
|
|
@@ -199,16 +157,6 @@
|
|
|
199
157
|
|
|
200
158
|
**关键维度**:力量体系清晰不崩 | 金手指独特有限制随成长 | 战斗有策略非纯数值 | 地图逐层展开 | 升级节奏均匀
|
|
201
159
|
|
|
202
|
-
### 短篇(压缩三幕)
|
|
203
|
-
|
|
204
|
-
| 幕 | 占比 | 要点 |
|
|
205
|
-
|----|------|------|
|
|
206
|
-
| 建压 | 35% | 世界规则+主角位置→困境→核心设定→人物出场 |
|
|
207
|
-
| 爆点 | 40% | 修炼转折→正面交锋→大阴谋→关键反转 |
|
|
208
|
-
| 落定 | 25% | 终极对决(有策略有代价)→矛盾解决→仙侠留白 |
|
|
209
|
-
|
|
210
|
-
**技法**:世界观压缩到最少用事件带出;等级/功法3-5个概念足矣;冲突落在"情"非"力";钩子=暗牌+反转+代价
|
|
211
|
-
|
|
212
160
|
---
|
|
213
161
|
|
|
214
162
|
## 死人文学
|
|
@@ -231,16 +179,6 @@
|
|
|
231
179
|
| 7.因果终结 | 10% | 释放 |
|
|
232
180
|
| 8.余韵结局 | 10% | 意难平 |
|
|
233
181
|
|
|
234
|
-
### 短篇(压缩三幕)
|
|
235
|
-
|
|
236
|
-
| 幕 | 占比 | 要点 |
|
|
237
|
-
|----|------|------|
|
|
238
|
-
| 建压 | 35% | 死亡事实→死者视角→最放不下的事→生者状态 |
|
|
239
|
-
| 爆点 | 40% | 回忆现实交叉→真相→反转→最扎心时刻 |
|
|
240
|
-
| 落定 | 25% | 放手或执念→生者继续或崩塌→安静画面→一句话/意象 |
|
|
241
|
-
|
|
242
|
-
**技法**:核心是"来不及";死者第一人称最有冲击;情绪克制越克制越扎心;钩子=代价+信息差+弱者
|
|
243
|
-
|
|
244
182
|
---
|
|
245
183
|
|
|
246
184
|
## 都市高武
|
|
@@ -263,14 +201,6 @@
|
|
|
263
201
|
|
|
264
202
|
**关键**:金钱驱动反复挂钩 | 换地图用过渡人物连接 | 10万字前数据偏弱是常态 | 前三章=底层处境→金手指→第一次展示
|
|
265
203
|
|
|
266
|
-
### 短篇(压缩三幕)
|
|
267
|
-
|
|
268
|
-
| 幕 | 占比 | 要点 |
|
|
269
|
-
|----|------|------|
|
|
270
|
-
| 建压 | 35% | 经济困境→被压制→金手指触发 |
|
|
271
|
-
| 爆点 | 40% | 实力提升→碾压→更强对手出现但不惧 |
|
|
272
|
-
| 落定 | 25% | 解决对手→阶段性胜利→暗示更大世界 |
|
|
273
|
-
|
|
274
204
|
---
|
|
275
205
|
|
|
276
206
|
## 霸总/甜宠
|
|
@@ -292,14 +222,6 @@
|
|
|
292
222
|
|
|
293
223
|
**关键**:甜的密度决定粘性 | 宠要"别人做不到的方式" | 阻力不能太强(虐就跑偏)不能太弱(没张力) | 女主要独立闪光点
|
|
294
224
|
|
|
295
|
-
### 短篇(压缩三幕)
|
|
296
|
-
|
|
297
|
-
| 幕 | 占比 | 要点 |
|
|
298
|
-
|----|------|------|
|
|
299
|
-
| 建压 | 30% | 女主困境→相遇→男主展露兴趣 |
|
|
300
|
-
| 爆点 | 40% | 宠溺(闺蜜震惊标配)→超出预期→危机轻松化解 |
|
|
301
|
-
| 落定 | 30% | 感情确认→极致甜场景→暗示幸福 |
|
|
302
|
-
|
|
303
225
|
---
|
|
304
226
|
|
|
305
227
|
## 同人流派
|
|
@@ -388,14 +310,6 @@
|
|
|
388
310
|
|
|
389
311
|
**关键**:大部分读者是"云爱好者"爽感优先于还原度 | 现代认知信息差=最大金手指 | 架空可降低门槛 | 盘点+历史共鸣感强
|
|
390
312
|
|
|
391
|
-
### 短篇(压缩三幕)
|
|
392
|
-
|
|
393
|
-
| 幕 | 占比 | 要点 |
|
|
394
|
-
|----|------|------|
|
|
395
|
-
| 建压 | 30% | 穿越到关键时刻→面临危机 |
|
|
396
|
-
| 爆点 | 45% | 利用现代知识/信息差解决→打脸质疑者 |
|
|
397
|
-
| 落定 | 25% | 历史轨迹改变→获得新地位 |
|
|
398
|
-
|
|
399
313
|
---
|
|
400
314
|
|
|
401
315
|
## 文娱/娱乐圈
|
|
@@ -449,14 +363,14 @@
|
|
|
449
363
|
|
|
450
364
|
---
|
|
451
365
|
|
|
452
|
-
##
|
|
366
|
+
## 长篇设计提醒
|
|
453
367
|
|
|
454
368
|
| 检查项 | 说明 |
|
|
455
369
|
|--------|------|
|
|
456
370
|
| 题材识别 | 属于哪个框架?有无跨框架混搭? |
|
|
457
|
-
| 节奏比例 |
|
|
458
|
-
| 反转位置 |
|
|
459
|
-
| 钩子密度 |
|
|
371
|
+
| 节奏比例 | 节点功能是否在对应卷/全书阶段出现,偏移是否有题材或人物因果支持? |
|
|
372
|
+
| 反转位置 | 是否在阶段旧认知已经支撑过行动、且揭示后仍有后果空间时出现? |
|
|
373
|
+
| 钩子密度 | 高压、推进、低压章节是否形成张弛,期待链有没有断? |
|
|
460
374
|
| 字数效率 | 有无废段落?哪些可删? |
|
|
461
375
|
| 情绪落点 | 读完最后一句是什么感觉? |
|
|
462
376
|
|
|
@@ -464,15 +378,15 @@
|
|
|
464
378
|
|
|
465
379
|
## 质量检查清单
|
|
466
380
|
|
|
467
|
-
|
|
381
|
+
每次使用本手册完成长篇定位或大纲后,逐项核对:
|
|
468
382
|
|
|
469
383
|
| # | 检查项 | 通过标准 |
|
|
470
384
|
|---|--------|----------|
|
|
471
385
|
| 1 | **题材定位正确** | 已通过路由表确认框架,无模棱两可 |
|
|
472
|
-
| 2 |
|
|
386
|
+
| 2 | **结构功能完整** | 8节点/5阶段承担的功能齐全;实际比例服从题材、卷功能与人物因果,不按固定 ±5% 判死 |
|
|
473
387
|
| 3 | **情绪节拍完整** | 压抑→爆发→释放的完整情绪弧线存在,无断层 |
|
|
474
388
|
| 4 | **人物弧线明确** | 主角有清晰的起点和终点变化;反派有独立动机不是工具人 |
|
|
475
|
-
| 5 |
|
|
389
|
+
| 5 | **期待链不断** | 章节强弱符合定位;回收旧期待前已经建立下一层期待,不按固定字数配钩子 |
|
|
476
390
|
| 6 | **金手指自洽** | 金手指规则明确,使用有限制,后期不崩 |
|
|
477
391
|
| 7 | **信息差利用到位** | 有读者知道但角色不知道、或角色知道但对手不知道的信息差设计 |
|
|
478
392
|
| 8 | **技法匹配题材** | 已对照对应题材的"技法"条目,无遗漏 |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 长篇反转设计
|
|
2
2
|
> 操作手册:反转类型、嵌套反转、误导技巧、打脸节奏。按决策路由选用,按设置/揭示步骤执行,用自检清单验收。
|
|
3
3
|
> 反转类型枚举与拆文 `_meta.json.reversal_type` 字段一致:视角/身份/动机/时间线/信息/认知/无反转。
|
|
4
4
|
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
**写法要点**:
|
|
176
176
|
1. 不为"显得有设计感"硬加反转
|
|
177
177
|
2. 报应型:每个报应要让读者等过、铺过,兑现时才解气
|
|
178
|
-
3.
|
|
178
|
+
3. 甜宠型:在关系阶段节点给甜点/反差点,不为每章硬塞反转
|
|
179
179
|
|
|
180
180
|
> 拆文时遇到此类,`reversal_type` 填「无反转」,`setup_clues`(反转铺垫)一项跳过阈值(见 analyze output-contract 的「structure_counts 数值校验」)。
|
|
181
181
|
|
|
@@ -183,19 +183,19 @@
|
|
|
183
183
|
|
|
184
184
|
## 嵌套反转
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
长篇可在单元、卷和全书三层安排反转,但每层只能有一个主认知变化;下位反转服务上位谜团,不能不断推翻世界规则。
|
|
187
187
|
|
|
188
188
|
### 双层嵌套
|
|
189
189
|
|
|
190
190
|
```
|
|
191
191
|
读者以为:A(铺垫阶段)
|
|
192
|
-
第一层反转:其实是 B
|
|
193
|
-
第二层反转:B
|
|
192
|
+
第一层反转:其实是 B!(阶段假答案)
|
|
193
|
+
第二层反转:B 解释了局部,但 C 才是更高层机制!(卷末认知升级)
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
**执行要求**:
|
|
197
197
|
- 第一层反转必须足够有说服力,让读者接受B就是真相
|
|
198
|
-
-
|
|
198
|
+
- 第一层后给至少一个行动后果或关系变化,不在同一场景立刻翻回去
|
|
199
199
|
- 第二层要能同时解释A和B,比第一层更震撼
|
|
200
200
|
|
|
201
201
|
示例:
|
|
@@ -208,36 +208,22 @@
|
|
|
208
208
|
|
|
209
209
|
### 三层嵌套(慎用)
|
|
210
210
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
**执行要求**:
|
|
214
|
-
- 间隔递减:第一层50-60%,第二层75-80%,第三层90-95%
|
|
215
|
-
- 第三层必须最短最狠——一句话就够
|
|
216
|
-
- 最后一层必须回答前面所有疑问
|
|
217
|
-
- 每层都要有情感冲击,不只是信息冲击
|
|
218
|
-
- 题材限制:只适合高智商悬疑、精心设计的复仇
|
|
211
|
+
只在“单元假答案 → 卷级机制 → 全书真相”确有不同叙事职责时使用。每层必须改变角色下一步行动,并留下可回溯证据;若只是连续换答案,砍到两层。
|
|
219
212
|
|
|
220
213
|
---
|
|
221
214
|
|
|
222
215
|
## 反转时机
|
|
223
216
|
|
|
224
|
-
###
|
|
225
|
-
|
|
226
|
-
| 反转类型 | 最佳位置 | 原因 |
|
|
227
|
-
|----------|----------|------|
|
|
228
|
-
| 身份反转 | 65-75% | 留够时间展示身份变化后的新冲突 |
|
|
229
|
-
| 视角反转 | 70-80% | 需要足够篇幅建立错误认知 |
|
|
230
|
-
| 动机反转 | 75-85% | 动机要在角色做出关键选择前揭示 |
|
|
231
|
-
| 时间线反转 | 80-90% | 时间线需要最长铺垫 |
|
|
232
|
-
| 信息反转 | 70-80% | 揭示后需要展示连锁反应 |
|
|
233
|
-
| 认知反转 | 75-90% | 感情色彩要全程积累够才翻得动 |
|
|
217
|
+
### 揭示位置按叙事层级决定
|
|
234
218
|
|
|
235
|
-
|
|
219
|
+
| 层级 | 合适时机 | 揭示后必须发生什么 |
|
|
220
|
+
|------|----------|--------------------|
|
|
221
|
+
| 场景/单章 | 当前行动获得可验证结果时 | 角色立刻调整选择或关系 |
|
|
222
|
+
| 单元 | 阶段目标看似完成、旧解释无法覆盖新证据时 | 开启下一阶段目标并支付代价 |
|
|
223
|
+
| 卷级 | 本卷承诺已兑现、读者能回看证据链时 | 改写对主线机制的理解,保留全书真相 |
|
|
224
|
+
| 全书 | 核心矛盾具备结算条件时 | 完成因果、情绪与收益归属结算 |
|
|
236
225
|
|
|
237
|
-
|
|
238
|
-
- 禁止在95%之后揭示——揭示后没有展开空间
|
|
239
|
-
- 最优区间:70-85%
|
|
240
|
-
- 双反转:第一个在55-65%,第二个在80-90%
|
|
226
|
+
不要把全书百分比当铁律。反转太早或太晚的判断标准是:旧认知是否已经支撑过真实行动、揭示后是否还有足够篇幅展示后果。
|
|
241
227
|
|
|
242
228
|
---
|
|
243
229
|
|
|
@@ -282,7 +268,7 @@
|
|
|
282
268
|
- [ ] 揭示方式自然,不靠角色大段独白解释
|
|
283
269
|
|
|
284
270
|
### 节奏
|
|
285
|
-
- [ ]
|
|
271
|
+
- [ ] 揭示场景没有被解释独白淹没;复杂机制可以分行动、证据和后果多拍展示
|
|
286
272
|
- [ ] 揭示后有足够篇幅展示反转影响
|
|
287
273
|
- [ ] 反转后结尾在反转产生的情绪上收束
|
|
288
274
|
|
|
@@ -310,7 +296,7 @@
|
|
|
310
296
|
### 超额收获反转
|
|
311
297
|
|
|
312
298
|
反转后收获超出预期,产生二次惊喜:
|
|
313
|
-
-
|
|
299
|
+
- 长篇:主角解决阶段问题,同时获得通向更高层矛盾的资源、身份或证据
|
|
314
300
|
- 网游文模式:Boss爆三样——立刻能用的 / 送人拉关系的 / 暂时用不到但一看很厉害的
|
|
315
301
|
|
|
316
302
|
### 情绪拉扯反转标准流程
|
|
@@ -338,7 +324,7 @@
|
|
|
338
324
|
|
|
339
325
|
### 打脸节奏铁律
|
|
340
326
|
|
|
341
|
-
-
|
|
327
|
+
- 压抑长度服从单元功能;连续失败必须带来信息、能力、关系或策略积累,不能只换场景重复受挫
|
|
342
328
|
- 压的同时必须给读者信心暗示(主角自信到自大:"我们还是联赛前四!")
|
|
343
329
|
- 比起主角被欺负,读者更厌恶主角自暴自弃
|
|
344
330
|
- 高潮部分要拉长,最大化利用(球迷反应、解说员、赛后跟进)
|
package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 长篇悬念编排
|
|
2
2
|
|
|
3
3
|
悬念构建、强度分级、多线周期、分层钩子、期待接力、震惊分层的完整操作指南。
|
|
4
4
|
|
|
@@ -86,11 +86,11 @@
|
|
|
86
86
|
|
|
87
87
|
### 三段钩子设计(单章内)
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
按章节功能安排,而不是把每章机械切成固定百分比:
|
|
90
90
|
|
|
91
|
-
1.
|
|
92
|
-
2.
|
|
93
|
-
3.
|
|
91
|
+
1. **种**:在本章第一个有效场景中提出异常、目标或未完成动作。
|
|
92
|
+
2. **养**:用行动受阻、新证据或关系变化加压;过渡章可以只推进一拍。
|
|
93
|
+
3. **收**:本章兑现一项状态变化,并把尚未解决的问题交给下一章。
|
|
94
94
|
|
|
95
95
|
延迟引爆 = 比引爆更强的钩子,用于拉到下一章。
|
|
96
96
|
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
|
|
103
103
|
- 确保读者脑中有三个好奇的东西:两长一短
|
|
104
104
|
- 长期待收回后变短期爆发,同时新的长期待已铺好
|
|
105
|
-
-
|
|
105
|
+
- 长篇中:短期、中期、远期悬念不能在同一章全部引爆;每次回收至少保留或新建一条更长的期待线。
|
|
106
106
|
|
|
107
107
|
### 持续拉期待操作框架
|
|
108
108
|
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
|
|
302
302
|
题材分级(上面占比是均衡 / 长书基线,按题材分档):番茄短平快 / 男频事业线,高压可到 30% 以上、呼吸章压到 5% 上下都正常,别拿基线去「补呼吸、砍高压」反而掉追读;女频 / 世情 / 追妻,人设关系容量大、关系 / 低压章可更多,但仍走情绪折线、不必每章三折。低压 / 关系章定位是看点(主角身边人的日常本身是订阅点),不是填充。
|
|
303
303
|
|
|
304
|
-
|
|
304
|
+
与字数目标的衔接:章节定位决定节拍功能与展开取舍,但不把每个情节点换算成固定字数,也不靠增点凑目标。写后由程序按双层长度带验收:明显欠长先判断已批准义务是否未实现,容量不足或不明确就协商自然长度、补纲或目标,绝不自动补写;明显超长可做一次不新增语义、逐项保留批准情节点与章尾钩子的净删型压缩,复检仍带外就停止,不进入循环删改。
|
|
305
305
|
|
|
306
306
|
---
|
|
307
307
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
正文写作采用「通用正文要求 + 题材正文提示卡 + 本书文风」三件套,不再为每个题材复制一整套正文 prompt。
|
|
32
32
|
|
|
33
|
-
- **通用正文要求**由 `story-long-write` Phase 4
|
|
33
|
+
- **通用正文要求**由 `story-long-write` Phase 4 负责:严格消费细纲,按情节点义务写,缓慢推进,不提前写后续剧情,完成确定性字数/钩子/禁用词/退化校验。
|
|
34
34
|
- **题材正文提示卡**只管题材层的稳定核心:世界观或生活逻辑、读者期待、核心爽点/情绪、节奏密度、场景颗粒、禁止漂移。项目优先从 `genre-prose-cards.md` 索引匹配,再读取 `genre-prose-cards/{题材}.md` 单卡,本文件只作通用流派补充。
|
|
35
35
|
- **本书文风**来自 `设定/文风.md` 或对标 `文风.md`:只管句长、标点、潜台词、锚点片段和笔调,不覆盖题材核心与章节意图。
|
|
36
36
|
- 三者冲突时:章节细纲与连续性 > 题材正文提示卡 > 本书文风 > 通用技巧建议。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
| 层级 | 文件 | 语义 |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| 唯一权威 | `_tracking-state.json` | schema
|
|
9
|
+
| 唯一权威 | `_tracking-state.json` | schema、最后提交章、导入截止章、状态修订号、上下文结构、角色/伏笔/时间线,以及已提交章节的简短字数记录 |
|
|
10
10
|
| 章节记录 | `逐章记录/第NNN章.md` | 本章对未来连续性有用的紧凑变化;目标 ≤1536 字节,硬上限 3072 字节;导入范围内修订写成覆盖记录 |
|
|
11
11
|
| 派生视图 | `上下文.md`、`角色状态/{角色名}.md`、`伏笔.md`、`时间线/作者真相.md`、`时间线/读者已知.md` | 完全从 `_tracking-state.json` 生成;禁止手改,不作为程序输入 |
|
|
12
12
|
|
|
@@ -15,21 +15,27 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
|
|
|
15
15
|
|
|
16
16
|
## 运行工具
|
|
17
17
|
|
|
18
|
-
先按运行环境探测 Python 3 解释器(依次尝试 `python3`、`python`、`py -3
|
|
18
|
+
先按运行环境探测 Python 3 解释器(依次尝试 `python3`、`python`、`py -3`)。追踪事务脚本使用当前 skill 根目录;字数与章节闭环统一使用 `story-long-write` skill 根目录:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
21
|
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {初始化事务.json}
|
|
22
|
-
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py commit --project {书项目根} --input {逐章事务.json}
|
|
23
22
|
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py check --project {书项目根}
|
|
23
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py wordcount checkpoint --file {前半段临时文件} --target {目标} --chapter {N}
|
|
24
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter check --project {书项目根} --chapter {N}
|
|
25
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {逐章事务.json}
|
|
26
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {逐章事务.json}
|
|
24
27
|
```
|
|
25
28
|
|
|
26
29
|
- `init`:只在 `_tracking-state.json` 不存在时执行,绝不覆盖已初始化项目。
|
|
27
|
-
- `
|
|
30
|
+
- `wordcount checkpoint`:纯测量;返回当前实际字数、用户带与剩余用户区间,不写正文、不写 tracking、不做语义判断。每章最多调用一次。
|
|
31
|
+
- `chapter check`:重新读取当前正文与细纲目标,返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作,不保存 approval。`under` 不提供自动补写;`over` 额外返回一次净删型 `compress-once` 及进入内带/用户带所需的机器删除区间。
|
|
32
|
+
- `chapter commit`:再次读取当前文件、重新计数并重跑 blocking quality;只接受用户带内章节,把简短字数记录与逐章事务一起原子提交。
|
|
33
|
+
- `chapter accept-current-length`:只接受带外但 quality pass 的章节;接受动作发生时重新读取、重新计数并立即原子提交,不保存可陈旧的历史决议。
|
|
28
34
|
- `check`:严格验证 state schema、逐章记录连续性/规范名/体积、固定 7 栏、角色快照硬上限、派生文件集合,以及所有派生视图与 state 的逐字一致性。
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
每本书由 `追踪/.tracking-commit.lock` 串行写事务,`expected_state_revision` 再拒绝基于旧状态构造的 stale transaction。两个不同事务并发时至多一个修订成功。字数记录也在锁内对当前正文和目标重新验证,正文或目标变化会让预先构造的记录直接失败。
|
|
31
37
|
|
|
32
|
-
事务 JSON
|
|
38
|
+
事务 JSON 是临时输入,不是项目产物:成功前必须保留;提交成功且紧随其后的 `check` 通过后立即删除,不能把 `init_transaction.json`、`chapter_*_transaction.json` 等输入长期留在书项目根目录。若文件写入失败,`_tracking-state.json` 尚未推进;修正环境后直接重跑**同一份** `commit`。append 重跑只接受内容完全相同的既有逐章记录,不维护 `dirty/pending/repair` 状态机。
|
|
33
39
|
|
|
34
40
|
校验失败与写入失败处理方式不同:校验失败(字段非法、退役结构、容量超限)要按报错改事务本身,重跑同一份结果不变。派生视图被手改或外部改动导致 `check` 报 `derived view differs from _tracking-state.json` 时,重新提交**该章**的 `mode=revision` 事务让工具整份重建,`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON;不手改派生文件,也不删 `_tracking-state.json` 重来。手写出的逐章记录会让同章 `append` 永久报 `chapter delta N already exists with different content`——删掉那个手写文件后重跑原事务即可。
|
|
35
41
|
|
|
@@ -65,6 +71,8 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
|
|
|
65
71
|
|
|
66
72
|
导入初始化时直接传入当前核心角色快照、伏笔当前行、时间线事件和固定 7 栏状态输入。阶段/卷级回看按需查询正文,不作为每章强一致追踪产物。
|
|
67
73
|
|
|
74
|
+
调用方的逐章 JSON 不写 `wordcount`;正式入口 `chapter commit` 或 `chapter accept-current-length` 在提交当下生成并注入。最终 state 只为已提交章节保留 `metric / target / actual / status / resolution / body_sha256`,不保存 MEASURE/RESOLVE 事件、ID 链、policy fingerprint 或独立 chapter state。
|
|
75
|
+
|
|
68
76
|
## 逐章事务
|
|
69
77
|
|
|
70
78
|
```json
|
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
项目文件结构、产物映射表、缺失文件处理、对标分析权威优先级在 `SKILL.md` Phase 4 开头,本文件不重复(SKILL.md 恒在上下文里)。
|
|
6
6
|
|
|
7
|
+
本文件提到的 agent 都只检查当前端 canonical 目录;Antigravity 使用 `.agents/agents/agent-name/agent.md`(`agent-name` 为目标 agent 名)和 `invoke_subagent` + 同名 `TypeName`,其余端使用各自 Agent 工具。
|
|
8
|
+
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
## 单章写作流程
|
|
10
12
|
|
|
11
13
|
当用户准备写某一章时:
|
|
12
14
|
|
|
13
|
-
1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,并从对应 `大纲/卷纲_第X卷.md` 读取当前剧情单元(单元ID/位置、卷契约、本卷主推线/战果、终局底牌边界、风险等级)。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]
|
|
14
|
-
2. **读取上下文**(按需选择;缺失时遵循各项及SKILL.md Phase 4
|
|
15
|
+
1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,并从对应 `大纲/卷纲_第X卷.md` 读取当前剧情单元(单元ID/位置、卷契约、本卷主推线/战果、终局底牌边界、风险等级)。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。补建后按 `artifact-protocols.md` 跑 `check-outline-contract.js` 结构验收,失败只补点名字段再复验。
|
|
16
|
+
2. **读取上下文**(按需选择;缺失时遵循各项及SKILL.md Phase 4 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:对应 agent 已部署时 spawn story-explorer 一次获取上下文。Prompt:`项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={check 的值},state_revision={check 的值}`):
|
|
15
17
|
- (1) `正文/第{N-1}章_*.md` — 上一章正文
|
|
16
18
|
- (2) `大纲/细纲_第{N}章.md` — 本章细纲(含钩子设计)
|
|
17
19
|
- (2a) `大纲/卷纲_第X卷.md` — 当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)
|
|
@@ -38,7 +40,7 @@
|
|
|
38
40
|
- (f) **结构化模块召回**:从对标的结构化子目录(角色/剧情/设定)中按本章情节检索相关模块;若与 `剧情/情绪模块.md` / `剧情/节奏.md` 冲突,权威文件优先,记录 `conflict`
|
|
39
41
|
- (g) 输出"主对标召回摘要 + 副对标召回摘要 + selected_emotion_module + rhythm_reference + genre_prose_card + 文风召回指令 + 原文锚点片段引用",作为 narrative-writer 的输入。**多对标书时**参 `references/cross-book-recall.md`:主对标提供文风、原文锚点与 selected_emotion_module / rhythm_reference;副对标/参考对标按阶段预算提供结构化摘要,不限制登记书目,不读取副书 `文风.md` / 原文,超过预算时裁条目不裁书目记录。
|
|
40
42
|
- **快捷路径**:项目已部署 story-explorer agent 时,可一次性召回文风/模块材料。
|
|
41
|
-
-
|
|
43
|
+
- 按本文件顶部规则确认 story-explorer 已部署。
|
|
42
44
|
- 查询类型:`benchmark_style_load`;传入项目目录、章节号、目标基调/字数和爽点类型。
|
|
43
45
|
- 需要返回:`style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、来源路径、匹配章节、锚点片段、`gaps`。
|
|
44
46
|
- `gaps.missing_primary_contract` 为 true 时先按 `repair_action` 修复,不进入正文生成。
|
|
@@ -52,12 +54,15 @@
|
|
|
52
54
|
- 检查任务卡点:本章如果有“办事被卡住”,它必须卡出信息、关系、代价、选择或伏笔变化;没有就不强补。
|
|
53
55
|
- 契约风险检查:按 `references/reader-contract-and-progression.md` 判定 契约安全 / 需补强 / 契约破坏;若高光/收益被配角、机构或偶然性拿走且没有可见交换,先修纲再写。
|
|
54
56
|
- 例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」
|
|
55
|
-
4.
|
|
57
|
+
4. **资料研究**(按需):遇到需查证的外部事实且 story-researcher 已部署时,spawn 搜索并输出到 `参考资料/`;不可用则主线程直接执行。研究完成后再继续写作。
|
|
56
58
|
5. **标题预检**:写正文前从细纲读取章名;如与既有章节同名或明显重复,先按本章核心事件改名,并同步细纲标题与正文文件名。
|
|
57
|
-
|
|
59
|
+
6. **写作与唯一 checkpoint**:将批准情节点按叙事顺序分成连续两组,同一 session 先写前组临时 segment,再且只运行一次 `{PYTHON} {skill 根}/scripts/storyctl.py wordcount checkpoint --file {前组临时文件} --target {字数目标} --chapter {N}`。把 `actual`、`remaining_user_range` 和后组原始情节点交回 writer,并明确:
|
|
60
|
+
- 只完成剩余情节点,不得为字数新增独立事件、人物决定、关系变化、揭示或支线。
|
|
61
|
+
- 剩余情节点完成即停,即使仍欠长也不加剧情。
|
|
62
|
+
两段完成后一次组装最终正文;不做逐点配额、字数 retry、完整重写或落盘后扩写。
|
|
58
63
|
- **正文元信息隔离**:`章节:第{N}章`、`上一章:正文/第{N-1}章_*.md`、`匹配第K章`、`细纲文件` 等只用于定位材料。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词。需要承接前文时,改成角色能感知的事件锚点或相对时间,例如“比第一章那三秒开火更疼”必须写成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
|
|
59
64
|
7. **正文执行**:
|
|
60
|
-
-
|
|
65
|
+
- 按本文件顶部规则确认 narrative-writer 已部署。
|
|
61
66
|
- 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,prompt 只传本章必需材料:
|
|
62
67
|
- 项目目录、章节、细纲文件、上一章、输出路径。
|
|
63
68
|
- 写前准备输出:本节速记、情绪目标、涉及角色、参考技法。
|
|
@@ -65,22 +70,23 @@
|
|
|
65
70
|
- `selected_emotion_module`、`rhythm_reference` 及来源路径。
|
|
66
71
|
- `genre_prose_card`(题材正文提示卡摘要,只含本章相关条目)。
|
|
67
72
|
- 文风路径、文风召回指令、原文锚点片段。
|
|
73
|
+
- `author_preferences`:作者记忆 `query` 结果中匹配本章的 `prose_style` / `story_design` 项;无则不传,禁止把完整画像或待确认项塞进 prompt;作为低优先级倾向自然吸收,不逐条展示或最大化命中,不牺牲连贯、节奏和字数。
|
|
68
74
|
- 阶段位置、本章结构公式、本章可释放信息、本章禁止提前释放信息。
|
|
69
|
-
-
|
|
70
|
-
-
|
|
75
|
+
- 字数目标、`visible_chars_v1` 口径、格式硬约束;前组后由机器给出一次剩余用户区间,不让 writer 心算或填写逐情节点配额。
|
|
76
|
+
- 细纲优先边界(内容层):只展开本章细纲,不自造新剧情;每条情节点都要独立落地,不许漏、不许两条并一句。不得仅为追字数自动补纲、扩写或重写;实际长度统一留到步骤 8 测量。
|
|
71
77
|
- 正文形状(形状层):落地位置、顺序、拆成几处由子代理编排,可打散重排、把相邻几条缝进同一个连续动作;不要一条一段平推,不把细纲措辞原样搬进叙述。
|
|
72
78
|
- 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
|
|
73
|
-
- agent
|
|
74
|
-
8.
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
9.
|
|
79
|
+
- agent 在同一 session 内按上述流程写两个临时 segment;主会话确认二者只消费批准情节点后,组装并写入 `正文/第XXX章_章名.md` 一次。如 agent 未部署,由主线程执行同一流程。
|
|
80
|
+
8. **非对称收口**:运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N}`;文件变更重跑,不存决议。
|
|
81
|
+
- 带内 + pass → `chapter commit`;fail / `invalid` → 停止。
|
|
82
|
+
- `under` + pass → 展示 `accept-current-length / revise-outline-or-target / discard`,不补/重试;接受命令会重读、重数、原子提交。
|
|
83
|
+
- `over` + pass → 删除区间随 `compress-once` 交 narrative-writer;一次净删,零新语义/契约改动。会话核对情节点与钩子后复检;带内提交,否则上述三动作。
|
|
84
|
+
9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→只修复细纲已批准内容):① 爽点前是否有可指认的危机/期待段落?② 装逼/打脸/揭露章,在场配角是否有差异化反应?质量修复后重跑步骤 8,但不得借质量修复补新剧情追字数。
|
|
79
85
|
10. **元信息扫描**:检查标题行以外的正文,命中 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 时必须改写为场景内表达;只有角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时例外。
|
|
80
86
|
11. **禁用词扫描**:先过**最毒句式速查**(实测最易漏,命中即改):①「不是A,(而)是B」全家族——含「没有X,没有Y(,只是Z)」排比否定、「是B,不是A」反序、「他没X,也没有Y。他只是Z」先抑后扬,;②声线反差「声音不大/不高…却…」;③「,带着……」万能状语;④预告/总结收尾「没人知道…」「(这)才刚刚开始/开头」「正朝着…压过去」「即将拉开序幕」「这一刻…」;⑤叙述里短词加引号强调(他是被请来"把关"的)。再复核 detector 的 `formulaic-parallelism` advisory:跨段「不是A。/也不是B。/只是C。」、`至于X不X,怎么X`、同动词 `不V A,不V B` 即使写在台词里也不能跳过,确属人物当场的功能性表达才保留。然后对照 `references/banned-words.md` 全表:一级词(高频AI腔)命中即替换;二级词(低频/语境相关)高频出现时替换,偶发可参考 `references/anti-ai-writing.md` 定性裁定
|
|
81
|
-
12.
|
|
87
|
+
12. **更新追踪**:最终 `chapter check` 后取最新 `state_revision`,按 workflow-daily 构造不含 `wordcount` 的逐章 JSON。长度在用户带内执行 `storyctl.py chapter commit`;用户接受当前自然长度则执行 `storyctl.py chapter accept-current-length`。两条命令都在提交前重新读取正文和目标、重新计数、重跑 blocking quality,并把简短字数记录与追踪事务一起原子提交。写入失败保留原事务重跑;校验失败重构事务。派生视图损坏按 tracking 文档用 revision 修复,禁止手改。本章首次引入复用角色/势力时,仍按 workflow-setup Phase 3 补建静态档案。
|
|
82
88
|
13. **中途快照**(长篇写作安全网):每连续写完 3 章,在继续前执行以下快照操作:
|
|
83
|
-
- 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288
|
|
89
|
+
- 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288 字节;通过后删除本章逐章事务 JSON 与临时 segment,失败时保留事务 JSON 供原样重跑
|
|
84
90
|
- 用 `ls -la 正文/` 确认最近 3 个章节文件已成功写入磁盘且大小正常(>100 bytes)
|
|
85
91
|
- 如果发现文件缺失或大小异常,立即重新写入
|
|
86
92
|
- 快照完成后可继续写作
|
|
@@ -98,27 +104,27 @@
|
|
|
98
104
|
| 任务卡点 | 角色办事被卡住,必须卡出信息/关系/代价/选择/伏笔变化;删掉无损就压缩或删除 |
|
|
99
105
|
| 爽点释放 | 铺垫要充分、释放要干脆,读者等得越久释放越要爽 |
|
|
100
106
|
| 爽点密度 | 高压/推进章每 3000-5000 字一个「爽」的情绪节点;低压/关系/修炼/信息整理章不强求,但每章仍要有往下看的理由(见 references/outline-structure-theory.md「章节定位与张弛」) |
|
|
101
|
-
|
|
|
107
|
+
| 长篇结构约束 | 参考 genre-prose-cards.md 与当前题材卡的长线约束 |
|
|
102
108
|
| 章尾 | 每章结尾都要有让读者想翻下一页的东西 |
|
|
103
109
|
| 情绪验证 | 写完每章回头检查:读者到这里应该感受到什么?感受到了吗?没感受到 → 按章节定位补:高压/推进章补冲突或钩子,低压/关系章补关系或情绪质感,别一律加爽点 |
|
|
104
110
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
长篇每章只按本章细纲的 `字数目标` 与步骤 8 的统一 90% 放行下限验收。节奏类型只决定情节点疏密和展开方式,不再叠加另一套静态最低字数。
|
|
111
|
+
## 字数测量权威
|
|
108
112
|
|
|
109
|
-
|
|
113
|
+
字数权威默认是细纲 `字数目标` + `visible_chars_v1`:内带 ±12%,用户带 ±15%;**本轮用户明确给出上下限时,原样范围优先于自动比例带**。无节奏下限,缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由用户接受、改目标/细纲或放弃。下一章只看 tracking 提交。
|
|
110
114
|
|
|
111
115
|
---
|
|
112
116
|
|
|
113
117
|
## 质量检查
|
|
114
118
|
|
|
115
|
-
检查三个维度:(1) **情绪交付**——每章是否交付了细纲中规划的目标情绪?(2) **契约风险**——按 `references/reader-contract-and-progression.md` 检查因果权 + 结算权、关键节点四问、期待所有权、期待债、终局储备(透支两问)与换书债;章级推进按权威文件的七类状态分档(快节奏保留可见事件/爽点下限),强弱相对本书题材与对标判断,标记 契约安全 / 需补强 / 契约破坏;契约破坏 先修正文或修后续纲。(3) **技术质量**——一致性、格式、禁用词。参考 [references/quality
|
|
119
|
+
检查三个维度:(1) **情绪交付**——每章是否交付了细纲中规划的目标情绪?(2) **契约风险**——按 `references/reader-contract-and-progression.md` 检查因果权 + 结算权、关键节点四问、期待所有权、期待债、终局储备(透支两问)与换书债;章级推进按权威文件的七类状态分档(快节奏保留可见事件/爽点下限),强弱相对本书题材与对标判断,标记 契约安全 / 需补强 / 契约破坏;契约破坏 先修正文或修后续纲。(3) **技术质量**——一致性、格式、禁用词。参考 [references/long-chapter-quality.md](long-chapter-quality.md) 中的通用检查和长篇专项清单。
|
|
120
|
+
|
|
121
|
+
**新增独立剧情 blocking**:新饭局、承诺、选择、关系变化、支线或后续义务均阻断;闲话、微连接允许。命中不自动修、不重试、不提交,并提示偏纲。
|
|
116
122
|
|
|
117
123
|
**正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
|
|
118
124
|
|
|
119
125
|
**写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
|
|
120
126
|
|
|
121
|
-
**确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook
|
|
127
|
+
**确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook 不阻断台词就略过;`stock-reaction-tic` 必须按 `writing-craft.md`「反套话四问」逐处做删除测试,交付摘要写明候选数、删除数及每个保留项的叙事功能,不能只写“已检查”。
|
|
122
128
|
随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。narrative-writer agent 不运行这些脚本。
|
|
123
129
|
|
|
124
130
|
**退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
|
|
@@ -126,15 +132,14 @@ advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界
|
|
|
126
132
|
|
|
127
133
|
### Agent 调用:consistency-checker
|
|
128
134
|
|
|
129
|
-
|
|
135
|
+
质量检查阶段,consistency-checker 已部署时,仅按当前运行时的 canonical agent 目录检查并 spawn,获取 S1-S4 报告。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致`。不可用则主线程参照 long-chapter-quality.md 直接检查。
|
|
130
136
|
|
|
131
137
|
### Agent 调用:narrative-writer(去AI味审查)
|
|
132
138
|
|
|
133
|
-
|
|
139
|
+
质量检查阶段,narrative-writer 已部署时可 spawn 文字质量与去AI味检查。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查范围:{本次写作的章节}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过`。不可用则主线程按 `references/anti-ai-writing.md` 与 `references/banned-words.md` 执行。
|
|
134
140
|
|
|
135
141
|
检查后若正文修订改变了连续性事实,必须构造 `mode=revision` 的同章追踪事务并执行 `scripts/tracking_commit.py commit`:
|
|
136
142
|
- 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;
|
|
137
143
|
- 时间线变化写入 `timeline_events`,由 `_tracking-state.json` 统一派生 `作者真相.md` 与 `读者已知.md`,不得把作者秘密泄露到读者视图;
|
|
138
144
|
- 核心角色状态变化同时提交该角色截至当前章的完整快照;
|
|
139
|
-
- 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state
|
|
140
|
-
|
|
145
|
+
- 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state 与全部派生视图一致,删除该临时事务 JSON 后再继续写作。
|