@oh-story/dsh 0.1.8 → 0.1.10
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 +14 -14
- package/lib/client.js +237 -84
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +183 -77
- package/lib/drama/skills/short-drama/SKILL.md +5 -1
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +140 -9
- package/lib/drama/skills/short-drama/scripts/project_tool.py +11 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +28 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +8 -2
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-edit/SKILL.md +146 -0
- package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +38 -0
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +29 -0
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +54 -0
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +60 -0
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +51 -0
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1156 -0
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +520 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
- package/lib/drama/skills/short-drama-produce/SKILL.md +29 -4
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +22 -0
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +13 -12
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
- package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +199 -3
- package/lib/drama/skills/short-drama-review/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +7 -0
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +10 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +12 -1
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +78 -2
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +12 -5
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +76 -7
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +5 -2
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +21 -0
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -17
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +12 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +61 -5
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -3
- package/lib/drama/skills/short-drama-write/SKILL.md +11 -2
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
- package/lib/index.js +290 -90
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/README.md +299 -59
- package/lib/novel-to-game/README_ZH.md +299 -56
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
- package/lib/novel-to-game/manifest.json +77 -87
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +9 -35
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
- package/lib/novel-to-game/skills/game-build/SKILL.md +17 -35
- package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
- package/lib/novel-to-game/skills/game-concept/SKILL.md +16 -34
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +9 -20
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +10 -6
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -32
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +9 -18
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +10 -27
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -6
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +6 -11
- package/lib/oh-story/manifest.json +419 -254
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/character-designer.md +1 -1
- package/lib/oh-story/roles/consistency-checker.md +4 -4
- package/lib/oh-story/roles/narrative-writer.md +56 -243
- package/lib/oh-story/roles/story-architect.md +6 -6
- package/lib/oh-story/roles/story-explorer.md +11 -11
- package/lib/oh-story/skills/story/SKILL.md +13 -7
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +61 -29
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +54 -229
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +29 -56
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +61 -29
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-import/SKILL.md +78 -82
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
- package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +9 -34
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +197 -15
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
- package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +52 -216
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +29 -56
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +72 -12
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +61 -29
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +10 -4
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +6 -15
- package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
- package/lib/oh-story/skills/story-long-write/references/project-files.md +110 -0
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +86 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +9 -34
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +88 -118
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -119
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +73 -54
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +63 -4
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +531 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +197 -15
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
- package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +285 -0
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
- package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-review/SKILL.md +80 -87
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +29 -56
- package/lib/oh-story/skills/story-review/references/author-memory.md +61 -29
- package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +10 -4
- package/lib/oh-story/skills/story-review/references/review-quality.md +6 -12
- package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +9 -34
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +58 -43
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +29 -56
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +10 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
- 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/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +63 -4
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
- package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
- package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +15 -324
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +61 -29
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +10 -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 +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
- 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 +3 -3
- 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 +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
- 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 +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +55 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
- package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +78 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
- package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +19 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +33 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts +5 -3
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts +52 -0
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-identity.d.ts +17 -0
- package/lib/types/role-identity.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +31 -1
- package/lib/video-recap/manifest.json +162 -162
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
- package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
- package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
- package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
- package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
- package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
- package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -59
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -42
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 短篇参考资料索引
|
|
2
|
+
|
|
3
|
+
## 参考资料
|
|
4
|
+
|
|
5
|
+
按当前阶段 Reference Gate 和写前准备加载必需文件,其余按需:
|
|
6
|
+
|
|
7
|
+
| 文件 | 何时加载 |
|
|
8
|
+
|------|----------|
|
|
9
|
+
| [references/short-format.md](short-format.md) | 写作前必读(短篇正文格式,两平台模板) |
|
|
10
|
+
| [references/submission-craft.md](submission-craft.md) | 投稿前必读(平台基调 知乎/小程序/番茄 · 导语门面 · 付费点断点) |
|
|
11
|
+
| [references/short-craft.md](short-craft.md) | 写作全程参考(短篇通用底座:情绪直写与场景支撑、在场叙述、超短章节制) |
|
|
12
|
+
| [references/genre-styles/](genre-styles/) | **定方向后必读**:按题材加载对应风格包(追妻火葬场 / 世情打脸 / 复仇打脸 / 总裁豪门 / 宅斗宫斗 / 民俗怪谈 / 悬疑 / 甜宠 / 双男主 / 沙雕脑洞),正文风格随之切换 |
|
|
13
|
+
| [references/short-deslop.md](short-deslop.md) | 去AI味时必读(短篇专属,只杀真·AI腔,不杀情绪烈度) |
|
|
14
|
+
| [references/workflow-design.md](workflow-design.md) | Phase 2 构思、设计字段、Agent 调用与完成门禁;Phase 3/4 不预加载 |
|
|
15
|
+
| [references/workflow-draft.md](workflow-draft.md) | Phase 3 写正文前必读:参数与逐场景写作;完成门槛见入口 |
|
|
16
|
+
| [references/workflow-revision.md](workflow-revision.md) | Phase 4 精修/自检前必读:检查分工、去味调用、扫描与交付验收 |
|
|
17
|
+
| [references/writing-workflow.md](writing-workflow.md) | Phase 2 设计任务 + Phase 4 精修 |
|
|
18
|
+
| [references/genre-writing-formulas.md](genre-writing-formulas.md) | 冷门题材结构骨架补充(核心 10 题材直接用 genre-styles/) |
|
|
19
|
+
| [references/genre-writing-techniques.md](genre-writing-techniques.md) | 跨题材通用技法(震惊场景/三翻四震/感情线四阶段/喜剧flag) |
|
|
20
|
+
| [references/emotional-methods.md](emotional-methods.md) | 设计情感时 |
|
|
21
|
+
| [references/hooks-chapter.md](hooks-chapter.md) | 章节钩子设计 |
|
|
22
|
+
| [references/short-suspense.md](short-suspense.md) | 短篇悬念设计 |
|
|
23
|
+
| [references/hooks-paragraph.md](hooks-paragraph.md) | 段落钩子技巧 |
|
|
24
|
+
| [references/villain-and-reveal.md](villain-and-reveal.md) | Phase 2 设计反派时 |
|
|
25
|
+
| [references/short-reversal.md](short-reversal.md) | 设计短篇反转时 |
|
|
26
|
+
| [references/short-prose-quality.md](short-prose-quality.md) | 精修检查时 |
|
|
27
|
+
| [references/banned-words.md](banned-words.md) | 禁用词表 |
|
|
28
|
+
| [scripts/normalize-punctuation.js](../scripts/normalize-punctuation.js) | Phase 4 文件模式确定性标点收尾 |
|
|
29
|
+
| [scripts/check-ai-patterns.js](../scripts/check-ai-patterns.js) | Phase 3 完成门槛与 Phase 4 复扫;报告高危 AI 句式、破折号、碎句号、长段落、微动作复读、套式反应细节、抽象总结、套词/比喻密度、解释链、系统公告腔、提纲感短段、低连接密度 |
|
|
30
|
+
| [scripts/check-degeneration.js](../scripts/check-degeneration.js) | Phase 3 完成门槛与 Phase 4 复扫;报告模型退化(复读/截断/工程词泄漏),blocking 需重新生成 |
|
|
31
|
+
| [scripts/check-phase2-contract.js](../scripts/check-phase2-contract.js) | Phase 2 产物确定性验收;返回具名失败与最小 repair_scope |
|
|
32
|
+
| [scripts/check-delivery-contract.js](../scripts/check-delivery-contract.js) | 最终交付确定性验收;按用户参数检查非空白字符、节数与小节格式 |
|
|
33
|
+
| [references/dialogue-mastery.md](dialogue-mastery.md) | 写对话时 |
|
|
34
|
+
| [references/output-contract.md](output-contract.md) | Phase 2 对标上下文加载时(理解 analyze 产出格式与消费规范) |
|
|
35
|
+
|
|
36
|
+
### 按主题快速定位(横切主题)
|
|
37
|
+
|
|
38
|
+
有些主题散在多个文件里。下表给每个主题一个**权威文件**(先读它,通常够用),配套文件只在需要那个角度时再加载。括号是该文件里对应的小节。
|
|
39
|
+
|
|
40
|
+
| 主题 | 权威文件(先读) | 配套文件(按角度补充) |
|
|
41
|
+
|------|-----------------|----------------------|
|
|
42
|
+
| 情绪落地(怎么写情绪) | **`references/short-craft.md` 第2节**(情绪直写、场景支撑与重复说明取舍) | 各 `genre-styles/` 包的「情绪烈度与模式」 |
|
|
43
|
+
| 情绪设计(情感结构) | **`references/emotional-methods.md`**(情感三板斧 + 拉扯节奏 + 失败模式) | `references/genre-writing-techniques.md`(情绪操控核心法则 / 情绪三层次) |
|
|
44
|
+
| 反转 | **`references/short-reversal.md`**(反转类型 / 铺垫 / 揭示位置 / 有效性自检) | `references/villain-and-reveal.md`(真相揭露机制 / 反转有效性自检) |
|
|
45
|
+
| 反派揭露 | **`references/villain-and-reveal.md`**(反派模板 / 揭露机制 / 报应设计) | `references/short-reversal.md` |
|
|
46
|
+
| 人物 | **各 `genre-styles/{题材}.md` 的「对话风格」「招式库」**(受害者-复仇者主角声线、白月光软刀、施害者道德绑架人设,corpus-grounded) | `references/villain-and-reveal.md`(反派/揭露)· `references/genre-writing-techniques.md`(三层标签反差 / 人设从缺点开始)· `references/dialogue-mastery.md`(声线差异) |
|
|
47
|
+
| 钩子 | **`references/hooks-chapter.md`**(章节/开篇钩子类型) | `references/hooks-paragraph.md`(段落钩子)· `references/short-suspense.md`(悬念设计) |
|
|
48
|
+
| 女频写作 | **对应 `genre-styles/{题材}.md`**(追妻火葬场 / 总裁豪门 / 宅斗宫斗 / 甜宠 / 世情打脸的题材声线、虐爽比例、招式) | `references/genre-writing-techniques.md`(女频读者心理与写作技法 / 感情线四阶段推进法)· `references/emotional-methods.md`(情绪拉扯) |
|
|
49
|
+
| 题材风格 | **`references/genre-styles/{题材}.md`**(核心 10 题材的腔调/开篇/钩子/情绪烈度/招式/收尾,corpus-grounded) | `references/genre-writing-formulas.md`(冷门题材结构骨架)· `references/genre-writing-techniques.md`(核心梗 / 卖点 / 通用技法) |
|
|
50
|
+
| 开头 | **各 `genre-styles/{题材}.md` 的「开篇范式」**(关系锚 + 全弧剧透导语 + 火葬场预告,真实开篇范例)+ `short-craft.md` 第12节(开头事件密度) | `references/hooks-chapter.md`(开篇钩子类型)· `references/hooks-paragraph.md`(段钩密度) |
|
|
51
|
+
| 格式与节奏 | **`references/short-format.md`**(短篇正文格式,两平台模板) | `references/short-craft.md`(情绪落地/三维度揉进/疏密)· `references/writing-workflow.md`(设计/精修工作流) |
|
|
52
|
+
| 对话 | **`references/dialogue-mastery.md`**(对话技法主文件:差异化/潜台词/对话节奏) | `references/short-craft.md`(三类台词与对话权力博弈)· 各 `genre-styles/` 包的真实金句库 |
|
|
53
|
+
| 去AI味 | **`references/short-deslop.md`**(短篇专属:只杀真·AI腔,不杀情绪烈度/审判句/火葬场预告) | `references/banned-words.md`(禁用词扫描)· `scripts/check-ai-patterns.js`(AI句式复扫)· `references/short-prose-quality.md`(成稿检查) |
|
|
54
|
+
|
|
55
|
+
---
|
|
@@ -20,29 +20,27 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
-
## 2.
|
|
23
|
+
## 2. 情绪落地:直接写情绪词,四个落点任选
|
|
24
24
|
|
|
25
25
|
短篇最核心的写法,也是和长篇审美冲突最大的一条。
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
真实番茄里,情绪词(心如死灰、心如刀绞、几欲作呕、眼泪不争气)就是直接写出来的,密度接近长篇两倍——这是卖点,不是 AI 味。情绪词落在下面任一处都成立,不必每处都配动作或物件:
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
| 落点 | 原文 |
|
|
30
|
+
|------|------|
|
|
31
|
+
| 融进动作句作状语 | 《把我送给富婆33次后,女友后悔了》听着她冷漠的声音,我绝望地闭上了双眼。 |
|
|
32
|
+
| 当对话提示语 | 《无用婚姻》我无奈道:「那我只好起诉你了,理由就是你长期未履行婚姻义务。」 |
|
|
33
|
+
| 情绪句到此结束,下一句直接换事 | 《年年负却花期》三千六百多个日日夜夜,三分之二的时间我都在崩溃。 |
|
|
34
|
+
| 后接此刻手里、眼前的具体东西 | 《闻笙有两意》摸到那碗凉掉的排骨汤时,我的心更冰冷了。上面还浮着凝固的油,根本喝不了。 |
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
- 《为给白月光出气,男友群发我私密照》我紧紧抿着嘴唇,直到尝到血腥味,才勉强找回一丝清明。
|
|
33
|
-
- 《被凌辱后,我把他们送上法庭》我在一旁看得心如刀绞,几欲作呕。
|
|
34
|
-
- 《闻笙有两意》摸到那碗凉掉的排骨汤时,我的心更冰冷了。上面还浮着凝固的油,根本喝不了。
|
|
35
|
-
- 《和闺蜜死遁后,文武状元悔疯了》怒火和心痛在胸腔翻涌。我鼻头一酸,将玉佩摔得支离破碎。
|
|
36
|
-
- 《为讨真千金欢心》我紧紧攥着衣角,颤抖着问。
|
|
36
|
+
通用生理反应(攥衣角、咬唇、鼻头一酸、指甲掐掌心)全篇不超过三五处,不当情绪词的固定尾巴;只有带来后果时才留——伤势、动作失败、人物习惯。
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
情绪后面接的不一定只是物件,也可以是任务卡点:主角要办一件眼下必须办成的事,却在这一步被卡住。短篇里的任务卡点必须短、狠、贴情绪:卡住救命钱、卡住证据、卡住离场、卡住求救、卡住反击。目的不是写流程,也不是为了显得自然,而是让读者立刻感到“更难堪 / 更绝望 / 更该反击”。
|
|
38
|
+
情绪也可以由任务卡点承载:主角要办一件眼下必须办成的事,却在这一步被卡住。短篇里的任务卡点必须短、狠、贴情绪:卡住救命钱、卡住证据、卡住离场、卡住求救、卡住反击。目的不是写流程,也不是为了显得自然,而是让读者立刻感到“更难堪 / 更绝望 / 更该反击”。
|
|
41
39
|
|
|
42
40
|
**要删的两种:**
|
|
43
41
|
|
|
44
|
-
1.
|
|
45
|
-
2.
|
|
42
|
+
1. 脱离上下文、没有新增信息的空泛情绪总结句(「一丝悲伤涌上心头」「仿佛整个世界失去了颜色」)。
|
|
43
|
+
2. 同一个情绪反复写、写完再补一句解释它多疼。情绪已成立就往下走,不为直写补反应。
|
|
46
44
|
|
|
47
45
|
---
|
|
48
46
|
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
## 根本立场:短篇是情绪产品
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
短篇靠直白共鸣留人,不靠克制留白。情绪处理按 `short-craft.md` 第 2 节:**删空泛与重复说明,留有上下文支撑的直写和有功能的反应。**
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
短篇要保留的三类写法(不能套用其他题材的偏好误删):
|
|
13
13
|
|
|
14
|
-
|
|
|
14
|
+
| 容易被误删的写法 | 短篇留 | 短篇只删 |
|
|
15
15
|
|---|---|---|
|
|
16
|
-
| 直接写情绪词(心如死灰 / 眼泪不争气) | 留:这是招牌句 |
|
|
16
|
+
| 直接写情绪词(心如死灰 / 眼泪不争气) | 留:这是招牌句 | 删:脱离上下文或重复说明的空泛总结,不按有无后接反应判定 |
|
|
17
17
|
| 第一人称审判句 / 剧透 / 火葬场预告 | 留:在场叙述是爽感来源 | 删:和角色情绪无关、纯交代的作者讲解 |
|
|
18
18
|
| 审判金句 / 心死式章尾 | 留:读者会截图传播 | 删:空洞哲理升华(人生就是这样 / 她终于明白了) |
|
|
19
19
|
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 一、情绪怎么写:保留直写,删空泛与重复
|
|
25
25
|
|
|
26
26
|
短篇不禁直接写情绪词(心如死灰、心如刀绞、几欲作呕、眼泪不争气都行,真实番茄用得很密)。**正面怎么写、真实原文范例,见 `short-craft.md` 第 2 节。** 这里只管删什么。
|
|
27
27
|
|
|
28
28
|
删两种:
|
|
29
29
|
|
|
30
|
-
1.
|
|
31
|
-
2.
|
|
30
|
+
1. 脱离上下文或重复解释的空泛情绪总结句:「一丝悲伤涌上心头」「仿佛整个世界失去了颜色」。不能只因情绪后没有动作就删。
|
|
31
|
+
2. 只标注情绪、不增加信息的通用生理反应。删后不影响人物、行动或后果就删,不换部位、不补物件凑数;有功能的身体细节保留。
|
|
32
32
|
|
|
33
33
|
一个情绪写一次就往下走,不要写完再补一句解释它多疼。
|
|
34
34
|
|
|
@@ -103,9 +103,9 @@
|
|
|
103
103
|
| 书面连词泛滥 | 于是乎 / 与此同时 / 诚然 / 从而 / 因而 | 口语化或删 |
|
|
104
104
|
| 弱化副词扎堆 | 微微 / 淡淡 / 缓缓 / 轻轻(每千字超过 3 个) | 删到 3 个以内 |
|
|
105
105
|
| 万能比喻 | 像潮水般 / 如闪电般 / 仿佛春风 | 删,或换生活化比喻 |
|
|
106
|
-
| 空泛情绪总结 | 一丝 X 涌上心头 / 感到深深的 X / 一股 X 笼罩全身 |
|
|
106
|
+
| 空泛情绪总结 | 一丝 X 涌上心头 / 感到深深的 X / 一股 X 笼罩全身 | 按第一节看语境与功能,删空泛或重复说明,不补反应凑数 |
|
|
107
107
|
|
|
108
|
-
>
|
|
108
|
+
> 情绪词本身(心如死灰)不在黑名单里。按 `short-craft.md` 第 2 节看上下文与功能,不以是否后接反应决定删留。
|
|
109
109
|
|
|
110
110
|
---
|
|
111
111
|
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
|
|
118
118
|
## 短篇去 AI 自检清单(写完每节逐项扫)
|
|
119
119
|
|
|
120
|
-
- [ ]
|
|
120
|
+
- [ ] **情绪有上下文支撑**,无重复解释或无功能反应;不要求每个情绪词后再接动作
|
|
121
121
|
- [ ] **没有空泛情绪总结句**(一丝 X 涌上心头 / 感到深深的 X / 仿佛世界失去颜色)
|
|
122
122
|
- [ ] **一个情绪只写一次**,没有写完再补一句解释它多疼
|
|
123
123
|
- [ ] **在场叙述保留**:第一人称审判句 / 剧透 / 火葬场预告在,没误删
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# 短篇正文格式
|
|
2
2
|
|
|
3
|
+
> 表达与文件结构分开:标点、对话落法等默认建议服从 [style-resolution.md](style-resolution.md);文件名、标题/小节结构与字数验收仍按本协议。
|
|
4
|
+
|
|
3
5
|
> 写正文前必读。只管交付排版:章节标记、段落形态、对话、标点、元信息禁令。
|
|
4
|
-
>
|
|
6
|
+
> 写法(情绪落地、钩子密度、反转、收尾)见 `short-craft.md` 与题材包,不在此重复。
|
|
5
7
|
> 这是当前仓库默认交付格式;用户或目标平台另有明确要求时,以用户 / 平台要求覆盖。
|
|
6
8
|
|
|
7
9
|
---
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
- [ ] 没有空洞的抒情段落
|
|
50
50
|
- [ ] 没有连续多段同一情绪
|
|
51
51
|
- [ ] 对话符合人物身份(不同人说话方式不同)
|
|
52
|
-
- [ ]
|
|
52
|
+
- [ ] 情绪词有落点(融进动作句、当对话提示语、结句后直接换事或接场内物件),不是接更多情绪
|
|
53
53
|
|
|
54
54
|
### 连载连续性
|
|
55
55
|
- [ ] 没有遗忘之前的承诺/伏笔
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
| 空泛总结 | 「他终于明白了」「一切尽在不言中」 | 删掉,用行动代替 |
|
|
110
110
|
| 套路修辞 | 「命运仿佛在和他开玩笑」 | 删掉或换成具体描述 |
|
|
111
111
|
| 比喻堆叠 | 连续多处「像/好像/仿佛/如同」,每个画面都靠比喻解释 | 只留最有叙事功能的少数比喻,其余改成动作、物件、声音或后果 |
|
|
112
|
-
|
|
|
112
|
+
| 空转情绪句 | 「他感到一阵悲伤」,无落点 | 删,或写他此刻做不成的事;直写本身不算缺陷 |
|
|
113
113
|
| 心理描写空转 | 内心独白无新信息、重复同一情绪或复述读者已知 | 只压缩空转部分;带新信息、决断或情绪转折的独白不按句数压缩 |
|
|
114
114
|
|
|
115
115
|
### 维度 5:逻辑连贯
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 文风与参考冲突裁决
|
|
2
|
+
|
|
3
|
+
写正文、改写、去 AI 味和审稿都先做这一步;inline 与 agent 用同一份裁决。无需另建画像或要求作者填写配置。
|
|
4
|
+
|
|
5
|
+
## 按维度取值,不把整份文件互相覆盖
|
|
6
|
+
|
|
7
|
+
表达选择按以下顺序取第一个明确、适用的要求:**当前请求 > 本书文风/设定 > 本书 active 作者记忆 > 题材、流程、全局 active 记忆 > 主对标文风 > 题材包与通用 references 默认值**。未声明的维度才向下补齐;本书例外不撤销全局习惯,临时要求不写回长期记忆。
|
|
8
|
+
|
|
9
|
+
句长、视角、标点、对话落法、情绪直写、修辞、叙述者评论和收尾方式都是表达维度。reference 中的“必须”“禁用”“最高优先级”、示例和检测阈值不使默认写法升级为作者不可覆盖的规则。主对标的低置信观察不压过作者的明确选择。
|
|
10
|
+
|
|
11
|
+
事实与表达分开裁决:文风不能改变细纲事件、已知事实、信息揭露边界、用户字数范围、改写范围、文件结构或追踪协议;有限全知允许换视角,不等于可提前揭底。转限知时可暂不叙述该人物无从得知的信息,事实本身不变;不得补出“早已知道”“后来发现”或新观察经历来保全原文信息。审稿照常评价因果、可读性与情绪效果,不能仅因使用了作者选定的写法就判错,也不能因为作者喜欢就忽略真实缺陷。
|
|
12
|
+
|
|
13
|
+
## 加载与传递
|
|
14
|
+
|
|
15
|
+
1. 从本次正文路径确定书目录(长篇为 `正文/` 的父目录,短篇为 `正文.md` 所在目录)。读该书 `设定/文风.md`;短篇同时读 `设定.md` 的文风约定。无文件就继续,不创建占位文件、不猜其他书。文风无最低字数限制,一句可执行的偏好也有效;空白、纯标题、待补充不算。
|
|
16
|
+
2. `_文风摘要.md` 只能辅助定位,不能独立替代全文。当前会话已读全文时无需反复读;摘要与全文不一致用全文,不让旧摘要压过作者的新修改。
|
|
17
|
+
3. 作者记忆 query 显式传当前书名、已知题材和流程以及需要的 kind,避免只取到 global。只用 active;同一维度窄范围覆盖宽范围,不拼成同时满足的清单。无法判定的同范围冲突才问作者,已能按优先级解决的不询问。
|
|
18
|
+
4. 在现有 prompt 填 `style_resolution`:本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界;只列与任务有关的冲突,无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer,并传文风全文路径。同一批次复用,当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤,不能靠上一次会话的记忆。
|
|
19
|
+
|
|
20
|
+
## 检测器如何服从裁决
|
|
21
|
+
|
|
22
|
+
检测器不理解作者意图。保留现有默认检查;明确采用且有功能的命中,复用**书目录**下的 `.deslop-whitelist`:UTF-8,一行一个原文字面片段,空行和以 `#` 开头的整行注释忽略,不支持正则或通配符。不向父目录找,避免跨书继承。
|
|
23
|
+
|
|
24
|
+
- 本书文风明确允许某种停顿标点时,可登记 `——` 或 `……`;具体修辞登记完整的获准原句,不能登记“不是”“没有”等泛词来关闭整类检查。
|
|
25
|
+
- 每项用上一行 `# 来源:…;用途:…` 说明当前请求或文风依据。只为执行作者已明确的选择登记,不因脚本报警自动放行。当前请求禁止某写法时移除相冲突的豁免;一次性保留只登记该句,不推断长期习惯。
|
|
26
|
+
- 深扫、标点整理和写后/下一章检查读取同一白名单。豁免只影响对应字面片段的风格检查;同一行其他问题照报,事实、字数、占位、工程词、截断和文件结构检查不豁免。
|
|
27
|
+
- 所选 Gate 仍执行:检查该写法是否重复、冗余、破坏节奏或越过信息边界;有这些具体问题才改。裁决与发现可简短写在正常交付报告中,不写进小说正文。
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Phase 2:短篇构思与设计
|
|
2
|
+
|
|
3
|
+
#### Agent 调用:story-architect
|
|
4
|
+
|
|
5
|
+
构思阶段,如果项目已部署 story-architect agent(查找顺序见 [SKILL.md](../SKILL.md)),可 spawn `Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{情绪目标+题材方向}")` 辅助框架设计。如 agent 不可用,由主线程直接执行。
|
|
6
|
+
|
|
7
|
+
帮用户确定短篇的核心框架:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
## 短篇核心框架
|
|
11
|
+
|
|
12
|
+
### 基本信息
|
|
13
|
+
- 标题(暂定):{}
|
|
14
|
+
- 目标字数:{} 字(短篇通常 8000-20000 字)
|
|
15
|
+
- 目标平台:{知乎盐选 / 小程序 / 番茄短篇}(三选一)
|
|
16
|
+
- 情绪目标:{读者读完的感受}
|
|
17
|
+
|
|
18
|
+
### 一句话梗概
|
|
19
|
+
{主角 + 困境 + 反转 + 情绪落点}
|
|
20
|
+
|
|
21
|
+
### 核心支点
|
|
22
|
+
- 类型:{身份/视角/动机/时间线/信息/认知反转,或无反转}
|
|
23
|
+
- 核心兑现:{一句话描述主揭示;无反转时写报应或关系兑现}
|
|
24
|
+
- 铺垫/期待:{关键铺垫点;无反转时写读者等待兑现的因果或关系节拍}
|
|
25
|
+
|
|
26
|
+
### 情绪设计
|
|
27
|
+
- 开头情绪:{}(强度 {1-10})
|
|
28
|
+
- 中段情绪:{}(强度 {1-10})
|
|
29
|
+
- 反转情绪:{}(强度 {1-10},峰值维持 ≥2 节)
|
|
30
|
+
- 结尾情绪:{}(强度 {1-10})
|
|
31
|
+
- 反转高潮不要骤降:反转前 1 节开始升温,反转节达到峰值,反转后 1 节维持峰值不骤降
|
|
32
|
+
|
|
33
|
+
### 人设速写
|
|
34
|
+
- 主角:{一句话人设}
|
|
35
|
+
- 关键角色:{一句话人设}
|
|
36
|
+
- 关系:{他们之间的关系}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
框架确定后,完成设计任务,然后在工作目录下创建文件。
|
|
40
|
+
|
|
41
|
+
#### 设计任务(框架确定后执行)
|
|
42
|
+
|
|
43
|
+
详细步骤和模板见 `references/writing-workflow.md`。构思时从目标情绪反推剧情,不是从灵感正向构建。按顺序完成:
|
|
44
|
+
|
|
45
|
+
1. 定平台基调 + 加载题材风格包 → 先读 `references/submission-craft.md` 定投稿平台(知乎/小程序/番茄),正文视角、矛盾烈度、章末落点随之切换;再读 `references/genre-styles/{题材}.md`(核心 10 题材)+ 通用底座 `references/short-craft.md`,从招式库选 2-3 个核心招式(如追妻的白月光触发链 / 信物翻转 / 火葬场预告),写入 设定.md「题材招式」区,全程照此招式与腔调写
|
|
46
|
+
2. 设计反派(如有)→ 加载 `villain-and-reveal.md`
|
|
47
|
+
3. 确定揭露方式 → 同上
|
|
48
|
+
4. 编写 小节大纲.md(格式见 writing-workflow.md):短篇只做轻量蓝图,每节包含结构段/五段功能、人物/关系或其他状态变化、因果/逻辑链、结尾承接/钩子,不套长篇完整章节蓝图。**标出付费点卡在哪一节末**(见 `submission-craft.md`「付费点」:用未完成动作、身份/证据变化或两难选择形成真实断点);用反推法先想透付费点那一节,再倒排前后。每节可选一个任务卡点,但必须服务情绪升级、证据推进、关系撕裂、反转铺垫或反击动作;没有就不强补
|
|
49
|
+
5. 反转信息差验证(公式见 writing-workflow.md)
|
|
50
|
+
6. 伏笔回查清单(标准见 writing-workflow.md)
|
|
51
|
+
|
|
52
|
+
`设定.md` 必须包含以下机器可验收字段(内容本身也是后续写作依据,不是读文件回执):
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
## Phase 2 设计校验
|
|
56
|
+
- 题材参考:`references/genre-styles/{题材}.md`(冷门题材写 `references/genre-writing-formulas.md`)
|
|
57
|
+
- 核心招式:{招式一};{招式二}[;{招式三}]
|
|
58
|
+
- 反派设计:不适用({原因})
|
|
59
|
+
- 反转类型:{身份/视角/动机/时间线/信息/认知/无反转}
|
|
60
|
+
- 反转位置:第 {X} 节 ÷ 共 {Y} 节 = {Z}%
|
|
61
|
+
- 付费点:第 {N} 节末
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
有反派时用 `villain-and-reveal.md` 的身份、动机、作恶方式、致命弱点、报应五字段替换“不适用”。`short-reversal.md` 判断确属无反转题材时,写 `反转类型:无反转` 和 `反转位置:不适用({报应兑现/甜度递进等原因})`,不要硬编节号。`小节大纲.md` 必须使用 `writing-workflow.md` 规定的固定 12 列 Markdown 表格,并在对应节末明确标出“付费点”。
|
|
65
|
+
|
|
66
|
+
#### Phase 2 完成门禁
|
|
67
|
+
|
|
68
|
+
两份文件生成后、向用户声明构思完成或进入 Phase 3 前,运行 `node scripts/check-phase2-contract.js --json {短篇目录}`:
|
|
69
|
+
|
|
70
|
+
- exit 0:Phase 2 机械契约通过,才可进入下一阶段;这不替代故事质量判断
|
|
71
|
+
- exit 1:只把 `repair_scope` 中的检查 ID、证据、期望、reference 路径和修复范围交给本轮 writer;只改失败字段,再运行同一命令
|
|
72
|
+
- 最多做 2 轮定向 repair;仍失败则停止,用中文告诉作者设计还缺什么,不得声称 Phase 2 已完成
|
|
73
|
+
- exit 2、脚本缺失或不可执行:告诉作者自动检查没跑成,不得用泛化“自检”替代后继续
|
|
74
|
+
- 向作者汇报构思只讲故事(梗概、反转、付费点在第几节)和待拍板的问题(附推荐默认),不提脚本、检查 ID、字段或表格列数
|
|
75
|
+
|
|
76
|
+
#### Agent 调用:character-designer
|
|
77
|
+
|
|
78
|
+
设计任务完成后,如果项目已部署 character-designer agent(查找顺序见 [SKILL.md](../SKILL.md)),可 spawn `Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}")` 辅助角色设定和语言风格档案。如 agent 不可用,由主线程直接执行。
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Phase 3:短篇逐场景写作
|
|
2
|
+
|
|
3
|
+
本文件中的 `scripts/` 与 `references/` 路径均相对本 skill 根目录。
|
|
4
|
+
|
|
5
|
+
**项目文件结构**:文件结构见 Phase 2;设定.md/小节大纲.md 为 Phase 2 产出,正文.md 为 Phase 3 产出。
|
|
6
|
+
|
|
7
|
+
**导入项目续写基线**:`设定.md` 存在「本书续写基线」时先读取,作为已写内容的内部连续性与既有写法约束;它不是对标摘要,不参与主/副对标排序,也不复制到 `对标/`。
|
|
8
|
+
|
|
9
|
+
> 术语说明:Phase 3 按「段」划分叙事结构(开头段/铺垫段/升级段/反转段/结尾段),每段包含若干「小节」(数字编号的 beat)。「场景」指写作时的具体画面。
|
|
10
|
+
|
|
11
|
+
**交付参数先锁定**:用户明确的字数范围优先,逐字取其最小值/最大值与节数;只给单一目标时用目标的 95%-105%;都未给时用 8000-20000 字和大纲节数。后文的默认字数不得覆盖用户范围。
|
|
12
|
+
|
|
13
|
+
**写前参数验收(锁定后、写 `正文.md` 前必跑)**:`node {skill 根}/scripts/check-delivery-contract.js --json --check-contract --min-chars {MIN} --max-chars {MAX} --sections {N} [--min-section-chars {用户逐节下限}] {短篇目录}`。exit 0 只说明参数能同时满足,不算交付;exit 2 即冲突,停在写前,用中文告诉用户字数范围与节数哪里对不上,请其选择调整项,不代改用户约束。
|
|
14
|
+
|
|
15
|
+
**写前准备**(每个场景写前执行 2 步,是核心方法的落地:确认情绪目标 → 召回技法模块):
|
|
16
|
+
- **步骤 1:记忆+召回**:① 本场景目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 具体用在哪个段落?答不出 → 先回读参考再动笔。如有 `对标/` 或 `拆文库/` 结构化产出,按 [references/benchmark-recall.md](benchmark-recall.md) 的对标上下文加载规则检索与当前场景最相关的结构/情绪/反转/写作手法模块作为参考,并写入“拆文召回摘要”
|
|
17
|
+
- **多对标书时**:参 `references/cross-book-recall.md`,副对标/参考对标按阶段预算进入"副对标召回摘要";正文只传摘要,不传副书文风或原文
|
|
18
|
+
- **步骤 2:指令确认**:用一句话概括本场景写作意图(情绪+技法+适配段落),并确认本场景是否有任务卡点、它卡出哪种情绪变化或新证据;没有就不强补。确认后开始写作
|
|
19
|
+
|
|
20
|
+
**写作指令:按三维度揉进逐场景写作,不照搬大纲腔。**
|
|
21
|
+
|
|
22
|
+
- 每个场景让读者和主角一起经历;发生、感知、反应揉在同一段连续正文里,不按维度分三段。
|
|
23
|
+
- 段落按戏剧单元/画面自然断开:新动作、新线索、新对话、视线切换另起;完整推理、氛围或情绪链可稍长。
|
|
24
|
+
- 高潮/打脸/反转压短,沉淀/推理/收束可长一点;爽点 beat 写密,过场 beat 写疏,避免通篇同长度。
|
|
25
|
+
- 主语节奏:段首或主语重置时可点名;同一动作链内优先代词/省略;关键转折再点名。
|
|
26
|
+
- 标点跟语气走:质问用问号,爆发处少量感叹;犹豫、未尽、打断用动作停顿、短句或换行处理,正文不使用 `……` / `——` / `—` / `--`。
|
|
27
|
+
- 短篇默认第一人称在场:受虐段可直白宣泄,反击段可冷静审判;只删中立无情绪的作者讲解,不删带主角偏色的审判/预告。
|
|
28
|
+
- 情绪可以直写,按 `references/short-craft.md` 第 2 节检查上下文支撑,不逐句补动作或物件。
|
|
29
|
+
- 任务卡点也可以承接情绪,但必须直接加重羞辱、误会、背叛、证据、反击或心死节点;删掉后情绪/证据/关系无损就压缩。
|
|
30
|
+
- 情绪宁烈不温,冲突前置、爽点具体、台词带刺;心死/余韵等以克制为爽感的桥段按题材包收敛。
|
|
31
|
+
|
|
32
|
+
#### Agent 调用:narrative-writer
|
|
33
|
+
|
|
34
|
+
正文写作阶段默认由主会话按 2-3 节/批分批写正文;主会话输出是短篇正文的标准形态,不要求单次 agent spawn 完成 8000+ 字全文。
|
|
35
|
+
|
|
36
|
+
- 每批写完后更新“已写小节摘要”(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句)。
|
|
37
|
+
- 下一批先读该摘要和 `正文.md` 尾部 300-500 字再续写。
|
|
38
|
+
- 只有用户明确要求子代理、主会话上下文不足,或需要隔离试写时,才检查 narrative-writer agent(查找顺序见顶部)。
|
|
39
|
+
- 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,只传项目目录、输出文件、情绪目标、题材风格包、小节大纲、角色、主/副对标召回摘要、本书文风全文路径与 style_resolution、作者偏好 query 中的文风/故事设计项、格式硬约束和写作硬约束,并传入检查分工:本批只做内容覆盖与格式自检,完整语义去味由 Phase 4 负责,最终文件扫描由主会话负责。
|
|
40
|
+
- 不把本 skill 整段规则塞进 prompt;细节以已加载的 `short-format.md`、题材包和 `short-craft.md` 为准。
|
|
41
|
+
- 无论谁写,写入 `正文.md` 前都按同一格式规范重排,保证主会话与子代理输出一致。
|
|
42
|
+
|
|
43
|
+
⚠️ **硬约束只作用于整篇交付范围,不设统一逐节最低字数或行数**。
|
|
44
|
+
写完每批后去掉 `--check-contract` 重跑上面命令,取其非空白字符数作整篇累计值(未写完 exit 1 属正常),各节分布按 `short-format.md`「字数统计」;不自写 Python 计数。某节明显短于相邻节时,先核对批准情节点、可见动作和后果是否已经完整;完整就保留,缺失才补回原计划内容。不得为拉齐节长新增冲突、对话、回忆、配角反应或独立事件。整篇以锁定的用户交付范围为准;未给范围时才使用 8000-20000 字默认值。
|
|
45
|
+
**⚠️ 未进入锁定范围 = 正文未完成。禁止越界后结束;不足只扩已有情节点,超出只压重复解释,不借 repair 新增或删除关键剧情。**
|
|
46
|
+
|
|
47
|
+
**节数守恒**:正文节数必须等于小节大纲规划节数。不得合并多节为一节。如果写作中发现某节不需要独立存在,应回到大纲阶段调整,而非在写作时偷减。
|
|
48
|
+
|
|
49
|
+
每个小节按「场景信息揉进」写作(详见 short-craft.md 第 10 节):发生是主干,感知和反应只在提供新信息时加入;用到的维度揉进同一镜头。揉进不等于按维度分段——禁止"先写发生再补感知再补反应"的堆叠写法,也不要求三项齐全;同样不等于一段到底,按新动作、新物件、新信息或新对话断段。完整推理、氛围、手艺、等待或情绪链可以连续展开,不按固定字数切断。
|
|
50
|
+
|
|
51
|
+
按以下结构分段写:
|
|
52
|
+
|
|
53
|
+
#### 第一段:开头(前 300-500 字)
|
|
54
|
+
|
|
55
|
+
**目标**:3 句话内抓住读者。**必须包含一个开篇钩子**(从 hooks-chapter.md 选择类型)。
|
|
56
|
+
|
|
57
|
+
**先写导语**:正文开头前先按 `references/submission-craft.md`「导语」写一条 150-220 字导语——四维骨架(起因+核心冲突+人设底色+情绪反转)配黄金三角(具体物件+信息差+留白钩子),一句一段(黑岩/盐言导语形态;番茄导语按 short-format.md 短段叙织)——完整句各自独立成段,不是拆成三字碎句。它就是正文开头的头几段,写好顺势往下接、不重写,所以首句同样守下面的开头零环境和前 100 字事件密度≥3(首句是事件/动作/信息炸弹,不是背景或弧线概括),剧透钩子放导语后半。
|
|
58
|
+
|
|
59
|
+
**技法指令**:前 100 字事件密度 ≥ 3,不做背景铺垫,直接上事件链。
|
|
60
|
+
|
|
61
|
+
**开头零环境规则**(默认适用;悬疑、惊悚、灾难、强氛围题材可例外):
|
|
62
|
+
- 前 3 句禁止出现无事件承载的环境描写(灯光、天气、气味、温度、装修)
|
|
63
|
+
- 前 3 句必须是:事件 / 对话 / 动作 / 信息炸弹,四种之一
|
|
64
|
+
- 任务卡点可以作为动作/事件钩子,但必须立刻带出赌注或矛盾,不能先写流程再解释意义
|
|
65
|
+
- 环境细节只能揉进角色的动作和感知中自然带出,不能独立成句;例外题材中,环境也必须携带威胁、异常或信息差
|
|
66
|
+
- 检查方法:标出前 3 句的主语,如果主语是环境物件(灯光/走廊/房间/天气),重写
|
|
67
|
+
|
|
68
|
+
开头技巧:
|
|
69
|
+
|
|
70
|
+
| 技巧 | 说明 | 示例 |
|
|
71
|
+
|------|------|------|
|
|
72
|
+
| 冲突前置 | 第一句就是矛盾 | 「离婚协议放在桌上,他已经签了。」 |
|
|
73
|
+
| 信息差钩 | 给读者一个角色不知道的信息 | 「她不知道,对面那个男人已经在计划第三次了。」 |
|
|
74
|
+
| 反常行为 | 用一个不合常理的行为引起好奇 | 「她把订婚戒指冲进了马桶。」 |
|
|
75
|
+
| 重生反常 | 重生后做前世绝不会做的事 | 「沈栀心念成灰,支着一口气找到了媒婆:郭家的那个天阉,我来嫁。」 |
|
|
76
|
+
| 超自然身份 | 开篇揭示非人类身份 | 「我是世上仅存的红衣厉鬼。我不知自己是怎么死的。」 |
|
|
77
|
+
| 灵魂旁观 | 以灵魂视角描述死亡现场 | 「我的尸体躺在透明棺材里,三个哥哥在外面笑着说:她演得真像。」 |
|
|
78
|
+
| 悬念句 | 抛出一个需要解释的事实 | 「我死后的第三天,老公发了一条朋友圈。」 |
|
|
79
|
+
| 替嫁被弃 | 被迫接受不公正的命运 | 「三个月后,我代替皇后的嫡亲公主坐上了去漠北和亲的轿撵。」 |
|
|
80
|
+
| 代入式提问 | 直接让读者产生共鸣 | 「你有没有在深夜接到过一个不该接的电话?」 |
|
|
81
|
+
|
|
82
|
+
#### 第二段:铺垫(占全文 30-40%)
|
|
83
|
+
|
|
84
|
+
- 用物件/数字/习惯建立羁绊(详见 emotional-methods.md「羁绊铺设」)
|
|
85
|
+
- 埋入至少 3 个反转线索,分散在不同小节
|
|
86
|
+
- 在会改变读者预期、行动方向或关系判断的位置埋钩;连续多个小节只有提问没有局部兑现时再调整,不按固定节数填格(类型从 hooks-paragraph.md 选择)
|
|
87
|
+
- 小节用数字分割,每小节推进一个情节点
|
|
88
|
+
- 情绪强度逐节递增,不允许连续 2 节无情绪变化
|
|
89
|
+
- **贯穿道具第 1 次出现必须在此段完成**
|
|
90
|
+
- **反派作恶按阶梯递增**(小恶→中恶,见 villain-and-reveal.md)
|
|
91
|
+
|
|
92
|
+
#### 第三段:升级(占全文 20-30%)
|
|
93
|
+
|
|
94
|
+
- 冲突必须比上一段升级(强度/范围/代价至少一个维度上升)
|
|
95
|
+
- 插入倒计时钩子或代价钩子制造紧迫感
|
|
96
|
+
- 随风险和选择升级提高牵引强度;用新证据、代价、误判修正或局部反击推动,不按固定节数另塞钩子(按题材见 genre-writing-formulas.md)
|
|
97
|
+
- 埋入误导信息,让读者猜错反转方向
|
|
98
|
+
- **数字/金额递增作为叙事工具**(具体数字替代模糊描述,见各 genre-styles 招式库「数字承重」)
|
|
99
|
+
- **场景引擎有变化**:行动、对话、证据、任务、等待、空间压力与关系选择按因果需要切换;不为动静交替补无功能小动作
|
|
100
|
+
|
|
101
|
+
#### 第四段:反转(占全文 10-15%)
|
|
102
|
+
|
|
103
|
+
- 反转在一节内完成揭示,不拖延
|
|
104
|
+
- 揭示后确保前面铺垫的线索可被回溯(读者能找到「原来如此」的伏笔)
|
|
105
|
+
- 反转节的情绪冲击强度必须 > 前面所有节的最高值
|
|
106
|
+
- **用证物/证人/偷听/剥洋葱揭露真相**(4 种方式见 villain-and-reveal.md)
|
|
107
|
+
- **贯穿道具第 2 次出现必须在此段完成**(意义被颠覆)
|
|
108
|
+
|
|
109
|
+
#### 第五段:结尾(占全文 5-10%)
|
|
110
|
+
|
|
111
|
+
- 章末必须有钩子(悬念或余韵)
|
|
112
|
+
- 用安静细节收尾(一个物件、一个动作、一句短话),不写大段抒情
|
|
113
|
+
- 结尾方式见下表,参考 emotional-methods.md「余韵钝痛」
|
|
114
|
+
- **贯穿道具第 3 次出现(回扣暴击)**
|
|
115
|
+
|
|
116
|
+
结尾类型:
|
|
117
|
+
|
|
118
|
+
| 类型 | 效果 | 适合情绪 |
|
|
119
|
+
|------|------|----------|
|
|
120
|
+
| 余韵式 | 不说完,让读者自己想 | 意难平 |
|
|
121
|
+
| 呼应式 | 首尾呼应,形成闭环 | 治愈、成长 |
|
|
122
|
+
| 开放式 | 留下悬念 | 细思极恐 |
|
|
123
|
+
| 反转再反转 | 结尾再来一个小反转 | 震惊 |
|
|
124
|
+
| 金句式 | 一句话点题 | 共鸣 |
|
|
125
|
+
|
|
126
|
+
写作中及进入精修前,执行 [SKILL.md](../SKILL.md) Phase 3 的「小节完整性流程」与「完成门槛」。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Phase 4:短篇精修打磨
|
|
2
|
+
|
|
3
|
+
本文件中的 `scripts/` 与 `references/` 路径均相对本 skill 根目录。
|
|
4
|
+
|
|
5
|
+
Phase 3 写手负责内容覆盖与格式自检,不提前执行完整语义去味;该分工须随写作 prompt 传入。Phase 4 的 Gate 检查由一个执行者完成(下方 narrative-writer 或主会话),保留原检查清单与所选 Gate 的改写顺序;一致性检查职责不变。最终扫描及 delivery 验收由主会话对最终落盘文件执行,修改后只复核改动和重跑受影响检查,不另开整轮去味。
|
|
6
|
+
|
|
7
|
+
加载 `references/writing-workflow.md` 中的精修清单完成检查。
|
|
8
|
+
重点:开头钩子、情绪曲线、反转铺垫、每句话价值、格式规范、AI 腔。文件模式依次运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md`、`node scripts/check-outline-copy.js --outline 小节大纲.md 正文.md`、`node scripts/normalize-punctuation.js 正文.md`、`node scripts/check-degeneration.js --check 正文.md`。blocking 或确属细纲照搬先改正文再复扫;其他提示仅作读感复核,功能性写法可保留。
|
|
9
|
+
|
|
10
|
+
上述修改全部落盘后,运行 `node scripts/check-delivery-contract.js --json --min-chars {MIN} --max-chars {MAX} --sections {N} {短篇目录}`。exit 0 才可交付;exit 1 只按 `repair_scope` 最小修复并重跑受影响的质量检查与本命令,最多 2 轮;仍失败则停止,按下方交付说明告诉作者哪项没达标、差多少。exit 2、脚本缺失或不可执行时不得声称交付契约通过。本 verifier 只验用户字数、节数与排版形状,不替代正文质量判断。
|
|
11
|
+
|
|
12
|
+
#### Agent 调用:narrative-writer(去AI味)+ consistency-checker
|
|
13
|
+
|
|
14
|
+
精修阶段,如果项目已部署对应 agent,可 spawn:
|
|
15
|
+
- `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查分工:你负责本次语义去味及原定自检;最终文件扫描由主会话执行,不在子代理内重复\n检查范围:{正文文件}\nstyle_resolution:{与写作一致的本次文风裁决,含全文路径}\n作者偏好:{query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n必须检查:检查是否连续使用头皮发紧/眼皮一跳/心口一沉/胃里翻涌等精致戏剧反应,能写普通动作/普通感觉就写普通动作/普通感觉;已有手机/聊天记录/公告/账单/病历/证据截图等信息,保留为角色看到或处理的场内载体,不改成叙述者解释;任务卡点只在角色本来有要办的事且能加重情绪/证据/关系/反转时使用,不为自然感补流程")` — 执行去AI味(7 Gate)和格式合规检查
|
|
16
|
+
- `Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{正文文件}\n检查类型:事实冲突+伏笔断线+角色属性不一致")` — 执行一致性检查
|
|
17
|
+
|
|
18
|
+
如 agent 不可用,由主线程直接执行。
|
|
19
|
+
|
|
20
|
+
**正文洁净规则**:
|
|
21
|
+
- 自检(字数统计、禁用词扫描、格式检查)是过程动作,结果直接在对话里说明,不落盘成文件
|
|
22
|
+
- **绝对不能**把自检记录附加到正文文件末尾
|
|
23
|
+
- 正文中不得出现任何 `<!-- 自检 -->` 或类似的检查标记注释
|
|
24
|
+
|
|
25
|
+
不通过 → 回退补足。
|
|
26
|
+
|
|
27
|
+
**交付说明(给作者看)**:只用大白话,按三块写:
|
|
28
|
+
1. 写了什么:标题、一句话核心钩子或反转、总字数、几节。
|
|
29
|
+
2. 要作者拍板的事:每件写成一句问题并附推荐默认(如「结尾要不要再留个小反转?默认不留」);没有就省略。
|
|
30
|
+
3. 下一步可选:精修某段、去 AI 味、换平台改写等。
|
|
31
|
+
|
|
32
|
+
自查结果只写一句(如「自查过字数、分节和常见 AI 腔,都过了」;没过就说哪项差多少)。不写脚本名、检查 ID、字段名、参数或大纲表格格式。
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
|
|
58
58
|
`设定.md` 写入 `## Phase 2 设计校验`,至少包含:一个真实的题材 reference 路径、2-3 个核心招式、反派五字段或带原因的不适用声明、反转类型、`反转位置:第 X 节 ÷ 共 Y 节 = Z%`、`付费点:第 N 节末`。`short-reversal.md` 判为无反转时,位置改写为带原因的“不适用”。付费点同时写入 `小节大纲.md` 对应节的“结尾承接/钩子”单元格。
|
|
59
59
|
|
|
60
|
-
生成两份文件后按
|
|
60
|
+
生成两份文件后按 `workflow-design.md` 的 Phase 2 完成门禁运行 `node scripts/check-phase2-contract.js --json {短篇目录}`。失败时只按 JSON 的 `repair_scope` 做最小修改并复验,不做无目标整稿重写。
|
|
61
61
|
|
|
62
|
-
###
|
|
62
|
+
### 写作前加载
|
|
63
63
|
|
|
64
64
|
- 必读:`short-format.md`(正文格式)+ `short-craft.md`(通用底座)
|
|
65
65
|
- 必读:`short-deslop.md`(写作时自检 AI 腔)
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
|
|
69
69
|
### 工作目录结构
|
|
70
70
|
|
|
71
|
-
工作目录结构见 [Phase 2:构思核心框架](../SKILL.md#phase-2构思核心框架)。设定.md 内容构成:核心框架 + 人设 + 反转铺垫 + 贯穿道具(含三次出现追踪表)+ 反派设计 + 对标摘要。小节大纲.md 每节 1 行,格式以 [设计任务(框架确定后执行)](
|
|
71
|
+
工作目录结构见 [Phase 2:构思核心框架](../SKILL.md#phase-2构思核心框架)。设定.md 内容构成:核心框架 + 人设 + 反转铺垫 + 贯穿道具(含三次出现追踪表)+ 反派设计 + 对标摘要。小节大纲.md 每节 1 行,格式以 [设计任务(框架确定后执行)](workflow-design.md#设计任务框架确定后执行) 第 4 步为准。
|
|
72
72
|
|
|
73
73
|
### 操作原则
|
|
74
74
|
|
|
@@ -120,12 +120,12 @@
|
|
|
120
120
|
|
|
121
121
|
### AI 腔
|
|
122
122
|
- [ ] 无禁止比喻:「命运的齿轮」「如潮水般」「仿佛春风」「心猛地一沉」「眼眶泛红」
|
|
123
|
-
- [ ]
|
|
123
|
+
- [ ] 重复的身体/情绪描写按功能取舍:无新增信息就删,不换部位或同义动作凑数
|
|
124
124
|
- [ ] 「像」使用频率:全文不超 10 处(含「像是」「不像」)
|
|
125
125
|
- [ ] 完整 AI 腔黑名单见 short-deslop.md
|
|
126
126
|
|
|
127
127
|
### 技法
|
|
128
|
-
- [ ]
|
|
128
|
+
- [ ] 情绪落地:按 `short-craft.md` 第 2 节检查上下文支撑,保留准确直写,清理空泛与重复说明
|
|
129
129
|
- [ ] 信物(若用):意义翻转是否完整?(查设定.md追踪表)
|
|
130
130
|
- [ ] 场景引擎:每节是否通过行动、证据、任务、对话、物件、等待或关系选择改变了至少一项状态?
|
|
131
131
|
- [ ] 开头密度:前 100 字事件 ≥ 3?
|