@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
|
@@ -6,34 +6,43 @@
|
|
|
6
6
|
|
|
7
7
|
加载优先级从高到低:
|
|
8
8
|
|
|
9
|
-
1.
|
|
9
|
+
1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议;句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁;
|
|
10
10
|
2. 用户在当前请求中的明确要求;
|
|
11
11
|
3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定;
|
|
12
12
|
4. 作者记忆中的本书偏好;
|
|
13
13
|
5. 作者记忆中的题材、流程和全局偏好;
|
|
14
14
|
6. 对标素材、通用方法和默认值。
|
|
15
15
|
|
|
16
|
+
按表达维度取最窄适用要求:低优先级只补缺项,不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序;审稿不因作者有意采用的表达本身扣分,真实可读性与因果问题仍照常评价。
|
|
17
|
+
|
|
16
18
|
作者记忆不能把本书事实写进 `.story/作者记忆/`,不能覆盖当前请求,不能降低审稿 rubric,也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。
|
|
17
19
|
|
|
18
20
|
## 文件与所有权
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
作者记忆分两级存放,记忆随书走:
|
|
21
23
|
|
|
22
24
|
```text
|
|
23
|
-
{工作区}/.story/作者记忆/
|
|
25
|
+
{工作区}/.story/作者记忆/ # 项目级 store:global / genre / workflow 条目,编号 AP
|
|
24
26
|
├── _author-memory-state.json # 唯一结构化权威
|
|
25
27
|
├── 作者画像.md # 仅 active,供作者查看与管理
|
|
26
28
|
├── 待确认.md # pending / conflict,不参与约束
|
|
27
29
|
└── 变更记录.md # 最近 100 次、最新在前的事务记录
|
|
30
|
+
{书}/.story/作者记忆/ # 书级 store:只存这本书的 book 条目,编号 BP,同样四个文件
|
|
28
31
|
```
|
|
29
32
|
|
|
30
33
|
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。作者记忆不存在时,普通写作、审稿和去味任务直接继续,不自动初始化空目录;首次 `record` 会随事务创建。
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
**定位规则**:`--workspace` 必须显式传给脚本,指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层;已有记忆时,是项目级 state(不带 `book` 字段)所在的最近祖先。书目录自己的 `.story/作者记忆/` 是书级 store,`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`;不要把用户主目录当默认工作区。`--book-root` 是当前书的项目目录(`.active-book` 指向、或含 `设定/`、`正文/` 的那一层,如 `{工作区}/长篇/{书名}/`);书名默认取书级 state 记录的名字,首次建立时取目录名,`--book` 可覆盖。
|
|
36
|
+
|
|
37
|
+
**单书布局**:书根就是工作区(`--book-root` 与 `--workspace` 同一目录)时,书级 store 改住 `{工作区}/.story/作者记忆/书级/`,与项目级各自一份 state;首次建立的书名优先取项目级存量本书条目里唯一的书名,再取目录名。旧版曾把书级 state 写在项目级位置,此后项目级读写都报 `state.book`;带 `--book-root {工作区}` 运行任一命令(含 `query`)会先把它原样移进 `书级/`,不改内容。这个目录其实是某个工作区里的一本书时(上一层叫 `长篇/` 或 `短篇/`,或某个祖先有 `.active-book` 或项目级 state),工具直接报错、不动任何文件,按报错改传 `--workspace`。
|
|
38
|
+
|
|
39
|
+
**路由规则**:ID 前缀就是 store——`decide` / `forget` 看 `item_id`(`AP` 进项目级,`BP` 进书级),`remember` / `replace` 看 `scope.level`(`book` 进书级,其余进项目级)。书级操作必须传 `--book-root`,没传直接报错,不会退而写进项目级。一份 `commit` 事务只能写一个 store;`replace` 与 `conflicts_with` 不能跨 store——本书例外按优先级覆盖全局规则,不算冲突,直接 `remember` 为 book 条目即可;要把全局规则改成本书规则,拆成 `forget` + `remember` 两个事件。
|
|
40
|
+
|
|
41
|
+
**存量迁移,不做双读**:升级前写进项目级 store 的 book 条目不再参与查询与预算估算,也不再接受新的 book 写入;它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来:断言、证据、确认次数、重要度原样保留,换成 `BP` 编号,原 `AP` 条目标 `superseded` 并注明去向;与全局条目的冲突关系在迁移后不再成立,这类候选退回 `pending`。书级每个源条目一笔事务,重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书:」条目时,把迁移列为默认提案项。
|
|
33
42
|
|
|
34
43
|
## 什么时候读取
|
|
35
44
|
|
|
36
|
-
长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active
|
|
45
|
+
长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active 条目:结果是项目级 store 与 `--book-root` 所指书级 store 的合并;不传 `--book-root` 就拿不到任何本书条目。查询输出固定不超过 2048 字节。`--kind` 必传——不传直接报错,不再默认返回全部类型;按任务直接选择 kind:
|
|
37
46
|
|
|
38
47
|
| 任务 | query kinds | 注入位置 |
|
|
39
48
|
|---|---|---|
|
|
@@ -48,10 +57,19 @@
|
|
|
48
57
|
|
|
49
58
|
## 可靠性与负荷边界
|
|
50
59
|
|
|
51
|
-
- 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx
|
|
60
|
+
- 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx`;没有回执就不得声称“已经记住”。怎么告诉作者见「回执怎么告诉作者」。
|
|
52
61
|
- 普通创作只做一次本地 `query`,没有 state 时返回空结果且不创建文件;有记忆时也只返回相关 active 条目,硬上限 2048 字节。完整画像、证据、候选和 journal 不进入正文 prompt。
|
|
62
|
+
- **写入不因注入预算失败**:`record` / `commit` 照常成功、给回执;工具按上表四类任务组合估算最坏查询情形(全局条目+各 scope 维度最重的单一切片,切片按大小写无关归并、轻重按写作时真正读到的字段算,与真实查询同一把尺),装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。收到提醒就用白话转告作者并建议「整理作者记忆」。写入落盘后另一级 store 读不出来(书目录不存在、`--book` 与书级记录不符等)也照常给回执,`warnings` 注明本次提醒没算上它——已有回执就是已记住,不要换 `event_id` 重试。写书级条目时「本书+全局」按实际条目精确计算;写项目级条目时只看得到项目级 store,顺手传 `--book-root` 就把当前这本书也算进提醒。查询按 **重要度 → 本书例外 → 最近更新** 排序装填(同一范围的条目必在同一 store,「最近」按该 store 的修订号比,不跨 store 比较),先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里,写入时按偏好的实际分量填,不要一律 `high`。
|
|
63
|
+
- 注入预算之外还有一道硬上限:`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到(远在注入预算之后),碰到就走「整理作者记忆」;`forget` 这类减量操作在满编时照常可用。
|
|
53
64
|
- 查询项是低优先级倾向,不是逐条打卡清单。自然吸收即可,不复述画像、不刻意提高词面命中率,也不得为命中偏好牺牲正文连贯、节奏、字数或本书既定笔调。
|
|
54
|
-
- 不安装会记录全部用户消息的 prompt hook
|
|
65
|
+
- 不安装会记录全部用户消息的 prompt hook,也不在作者没开口时观察他:不从反复修改、成稿或操作轨迹推断偏好写入。只记作者明确表达的偏好;自然语言是否属于长期习惯仍需 agent 判断,拿不准就只执行不记录。需要确定写入时,用户可明确说“记住:……”,并以回执验收。
|
|
66
|
+
|
|
67
|
+
## 回执怎么告诉作者
|
|
68
|
+
|
|
69
|
+
回复就两行纯文本,不加代码块或引用格式:第一行用一句人话说记住了什么、管哪本书或哪类场合,如「记住了:《{书名}》的对话一律用「」,以后写这本书都照这个来;想改随时说。」;第二行是机器回执作凭证,如「技术备注:Author Memory Receipt: r1 · BP001」。
|
|
70
|
+
|
|
71
|
+
- 确认、替换、忘掉同理:「好,这条生效了:……」「换成了:……,原来的「……」不再用」「忘掉了:……」。只进待确认时说「这条先记在待确认里,你说"确认"才生效」;有冲突时用原话说明跟哪条旧习惯冲突。
|
|
72
|
+
- `warnings` / `omitted_ids` 不原样贴:说「你的习惯攒得有点多,写正文时这几条可能顾不上:「……」」,并建议说「整理作者记忆」。不提字节、prompt、kind、scope;编号只能跟着原话出现。
|
|
55
73
|
|
|
56
74
|
## 捕获判定
|
|
57
75
|
|
|
@@ -59,13 +77,19 @@
|
|
|
59
77
|
|---|---|
|
|
60
78
|
| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`,`source=explicit_user` |
|
|
61
79
|
| 用户明确接受助手提出的长期做法 | `active`,`source=accepted_suggestion` |
|
|
62
|
-
|
|
|
63
|
-
|
|
|
80
|
+
| 作者原话像长期偏好但范围或稳定性含糊 | `pending`,取当前最窄合理范围;待确认只来自作者自己的话 |
|
|
81
|
+
| 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断;作者没开口的偏好不进记忆 |
|
|
64
82
|
| “这一章别……”“这次给我……”等一次性要求 | 只执行,不记录 |
|
|
65
83
|
| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪,不写作者记忆 |
|
|
66
84
|
| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |
|
|
67
85
|
|
|
68
|
-
保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion`
|
|
86
|
+
保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion` 只做不改变语义的紧凑归纳,**新建条目限一句话(≤120 字节,约 40 个字)**;需要解释的背景写进 `reason`(不进 prompt 载荷),不另开字段。
|
|
87
|
+
|
|
88
|
+
**一条偏好就是一条记录,例外和限定不许拆出去单列。** 「以后少用破折号,对话里也别用,除非表示打断」是一条带例外的偏好,必须整条写成一个 `assertion`(「破折号少用、对话里也不用,只在表示打断时保留」)。超编时条目是逐条被丢的,把「除非表示打断」拆成独立一条,就可能只丢掉例外、把作者明说过的限定变成送进正文的绝对禁令。只有原话确实塞了**几条互不依赖**的偏好(如「多用短句」+「章末留钩子」)才拆成几条。整句写不进 120 字节时压缩措辞,不要切掉限定词。
|
|
89
|
+
|
|
90
|
+
升级前写下的长断言不受新上限约束:原样重申它会**强化**原条目(确认次数 +1),不会因超长被拒;只有真正新建条目才校验 120 字节。
|
|
91
|
+
|
|
92
|
+
范围规则:
|
|
69
93
|
|
|
70
94
|
- “本书 / 这个角色 / 这次连载” → `book`;
|
|
71
95
|
- “都市文 / 这类题材” → `genre`;
|
|
@@ -73,33 +97,41 @@
|
|
|
73
97
|
- “以后 / 一贯 / 我习惯”且无更窄限定 → `global`;
|
|
74
98
|
- 范围含糊但可能稳定 → 取当前最窄合理范围并置 `pending`。
|
|
75
99
|
|
|
76
|
-
类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high
|
|
100
|
+
类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`;工具会拒绝推断类来源,存量 state 里的旧来源条目照常可读、可确认、可退役。
|
|
77
101
|
|
|
78
102
|
## 冲突、撤回与强化
|
|
79
103
|
|
|
80
104
|
- 同一类型、范围、归纳文本再次出现时,脚本强化原条目,累加证据和确认次数,不重复建条目。
|
|
81
|
-
-
|
|
82
|
-
-
|
|
105
|
+
- 新偏好与同一 store 里的 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。本书例外与全局规则不算冲突。
|
|
106
|
+
- 同一范围的规则改版用 `replace`,启用新条目并将旧条目标成 `superseded`。本书例外用 `remember` 新建 book 条目(传 `--book-root`),保留 global 习惯;只有作者明确撤销或改变旧规则范围时才跨范围替换,跨 store 时拆成 `forget` + `remember`。
|
|
83
107
|
- pending 可以用 `decide=activate|reject`;冲突候选不能绕过旧规则直接 activate。
|
|
84
108
|
- 作者说“忘掉 / 这不再是我的习惯”时用 `forget`,保留历史证据但不再加载。
|
|
85
109
|
- active 条目的语义不可原地偷改;语义变化必须 replace,历史才可审计。
|
|
86
110
|
|
|
111
|
+
## 整理作者记忆
|
|
112
|
+
|
|
113
|
+
作者说「整理作者记忆」,或回执 `warnings`/查询 `omitted_ids` 提示超编时:读项目级与当前书的 `作者画像.md`(每条都标了范围、重要度、把握和确认次数,重要度就是超编时的去留依据),提出合并同义条(`replace` 多合一)、退役过时条(`forget`)、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案;项目级画像里还有「本书:」条目时,「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认(编号只放括号里),确认后按 store 各汇成一份 `commit` 事务提交(一份事务只写一个 store)。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条,不要靠删限定词把两条凑成一条。整理只由作者发起或确认,不自动执行。
|
|
114
|
+
|
|
87
115
|
## 运行工具
|
|
88
116
|
|
|
89
117
|
先依次尝试 `python3`、`python`、`py -3` 找到 Python 3,再从当前 skill 根运行本地副本:
|
|
90
118
|
|
|
91
119
|
```text
|
|
92
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init
|
|
93
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record
|
|
94
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query
|
|
95
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit
|
|
96
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py
|
|
120
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区} [--book-root {书目录}]
|
|
121
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json
|
|
122
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind {类型}(必传,可重复) [--genre {题材}] [--workflow {流程}]
|
|
123
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json
|
|
124
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}
|
|
125
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区} [--book-root {书目录}]
|
|
97
126
|
```
|
|
98
127
|
|
|
99
|
-
- `
|
|
100
|
-
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
128
|
+
所有子命令都可加 `--book {书名}` 覆盖书名;正在写某本书时一律带上 `--book-root`,书级操作没有它会直接报错。事件与事务 JSON 写在 `{工作区}/.story/work/` 下(不写系统 `/tmp`),成功后删掉;`book` 条目的 `scope.value` 填书名(书级 store 已记着书名就用它,首次取书目录名)。
|
|
129
|
+
|
|
130
|
+
- `record`:常用单事件入口,按路由规则落到项目级或书级 store,自动读取该 store 的当前修订、首次自动初始化;`event_id` 相同且内容相同会幂等返回原回执,内容不同会失败。原样重申已有条目的 `assertion` 会强化该条(不受 120 字节新建上限约束)。返回里的 `store` / `book` 说明写到了哪一级,`warnings` 是预算提醒,按「回执怎么告诉作者」用白话转告。
|
|
131
|
+
- `query`:只读相关 active 条目,项目级与书级合并返回;`--kind` 必传、可重复,两级 state 都不存在时返回空结果且零写入。输出按 重要度 → 本书例外 → 最近更新 排序装填;装不下的条目跳过而不中断(一条长的不挡后面的短条),漏下的 ID 按同一优先级报进 `omitted_ids`(最多列 20 条,`omitted` 是真实总数)。**`omitted_ids` 非空=记忆超编**——转告作者并建议「整理作者记忆」,它不是「没有更多了」,也不得改读完整画像规避预算。
|
|
132
|
+
- `commit`:高级批量入口;一份事务只写一个 store,先在内存完成 schema、引用、容量和所有视图校验,最后原子替换 state。事务文件在成功前必须保留;过期修订会在任何写入前失败。
|
|
133
|
+
- `migrate`:把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store,幂等,中途失败直接重跑;返回 `migrated`(源→新编号),没有存量时为空。
|
|
134
|
+
- `check`:从 state 重建并逐字核验所有派生视图;传 `--book-root` 时两级一起核验。
|
|
103
135
|
|
|
104
136
|
## 事务格式
|
|
105
137
|
|
|
@@ -128,7 +160,7 @@
|
|
|
128
160
|
}
|
|
129
161
|
```
|
|
130
162
|
|
|
131
|
-
把文件交给 `record
|
|
163
|
+
把文件交给 `record`(book 范围的事件同时传 `--book-root`)。待确认项的 `status` 用 `pending`;冲突候选用 `conflict` 并填写同一 store 里的 active ID。确认或拒绝候选时,把下列对象作为新事件的 `operation`(`BP` 编号的事件传 `--book-root`):
|
|
132
164
|
|
|
133
165
|
```json
|
|
134
166
|
{"action":"decide","item_id":"AP002","decision":"activate","quote":"对,这就是我的长期习惯。","reason":"作者明确确认"}
|
|
@@ -139,17 +171,17 @@
|
|
|
139
171
|
```json
|
|
140
172
|
{
|
|
141
173
|
"action": "replace",
|
|
142
|
-
"old_ids": ["AP001"
|
|
174
|
+
"old_ids": ["AP001"],
|
|
143
175
|
"preference": {
|
|
144
176
|
"kind": "prose_style",
|
|
145
|
-
"scope": {"level": "
|
|
146
|
-
"assertion": "
|
|
147
|
-
"quote": "
|
|
177
|
+
"scope": {"level": "global", "value": null},
|
|
178
|
+
"assertion": "以后对话允许更长的试探,但避免解释设定",
|
|
179
|
+
"quote": "把以前对话都要短的习惯替换掉:以后可以让对话慢一点,多试探,但还是别拿台词讲设定。",
|
|
148
180
|
"source_ref": "conversation:2026-08-25",
|
|
149
181
|
"source": "explicit_user",
|
|
150
182
|
"confidence": "high",
|
|
151
183
|
"importance": "high",
|
|
152
|
-
"reason": "
|
|
184
|
+
"reason": "作者明确替换原有全局规则,不是新增本书例外"
|
|
153
185
|
}
|
|
154
186
|
}
|
|
155
187
|
```
|
|
@@ -160,4 +192,4 @@
|
|
|
160
192
|
{"action":"forget","item_id":"AP003","quote":"忘掉这个偏好。","reason":"作者明确撤回"}
|
|
161
193
|
```
|
|
162
194
|
|
|
163
|
-
需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations
|
|
195
|
+
需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`。操作按数组顺序应用,任一步失败则整份事务零写入。成功后删除临时输入文件;显式记忆请求按「回执怎么告诉作者」转告。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 短篇对标发现与召回
|
|
2
|
+
|
|
3
|
+
#### 对标上下文加载
|
|
4
|
+
|
|
5
|
+
> **拆文库/对标关系**:`拆文库/` = analyze skill 的原始产出(数据源),位于项目根目录。`对标/` = 当前短篇的引用视图,位于 `{短篇标题}/对标/`。短篇写作优先读取 `{短篇标题}/对标/{书名}/`,不存在则读取项目根 `拆文库/{书名}/`。
|
|
6
|
+
|
|
7
|
+
推荐目录结构:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
项目根/
|
|
11
|
+
├── 拆文库/
|
|
12
|
+
│ └── {书名}/
|
|
13
|
+
│ ├── 拆文报告.md
|
|
14
|
+
│ ├── 情节节点.md
|
|
15
|
+
│ └── 写作手法.md
|
|
16
|
+
└── {短篇标题}/
|
|
17
|
+
├── 设定.md
|
|
18
|
+
├── 小节大纲.md
|
|
19
|
+
├── 正文.md
|
|
20
|
+
└── 对标/
|
|
21
|
+
└── {书名}/
|
|
22
|
+
├── 拆文报告.md
|
|
23
|
+
├── 情节节点.md
|
|
24
|
+
└── 写作手法.md
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**对标发现(先于下方反应式加载)**:项目根 `拆文库/` 有拆过的短篇时,先按题材主动推荐一本对标,不要被动等用户开口。
|
|
28
|
+
|
|
29
|
+
1. `ls 拆文库/` 列书目;先从当前项目目录名和 `设定.md`「基本信息」识别本篇标题,排除同名或来源指向当前 `正文.md` 的 `拆文库/{当前书}/`。story-import 生成的本书拆文分析属于续写基线,不是对标候选。排除后为空 → 跳过(无对标按题材包写,见 Phase 1 情绪→题材包表)。
|
|
30
|
+
2. 逐本读 `拆文库/{书}/_meta.json` 的 `genre_detected`,与本篇题材比对,标 同题材 / 弱相关。
|
|
31
|
+
3. 有候选 → 用 AskUserQuestion 推荐(列候选书 +「不用,按题材包写」)。选定后记入本篇 `设定.md`「对标摘要」区作主对标,并按上方「拆文库/对标关系」规则把 `拆文库/{书}/` 同步到 `{短篇标题}/对标/{书}/`。
|
|
32
|
+
|
|
33
|
+
如果工作目录下存在 `对标/` 或项目根存在 `拆文库/`,或用户提到参考小说:
|
|
34
|
+
|
|
35
|
+
1. 先按上方「对标发现」第 1 条的同一口径识别本篇,另排除历史误建的 `对标/{当前书}/`;排除后没有外部对标时按题材包写,不进入下面几步。
|
|
36
|
+
2. 按上述顺序查找 `拆文报告.md`、`情节节点.md`、`写作手法.md`、`_meta.json`
|
|
37
|
+
3. **读 `_meta.json.genre_detected`,按下表加载对应题材风格包**(analyze 识别的题材 → write 的 genre-styles 包),正文腔调/招式随之切换:
|
|
38
|
+
|
|
39
|
+
| analyze 的 `genre_detected` | 加载 `genre-styles/` 包 |
|
|
40
|
+
|---|---|
|
|
41
|
+
| 追妻(现代 / 古代 / 民国) | `追妻火葬场.md`(按「时代变体」节切换身份词与招式) |
|
|
42
|
+
| 小三 / 死人文学 | `追妻火葬场.md`(「流派分支」节) |
|
|
43
|
+
| 世情 / 打脸爽文 / 家庭伦理 | `世情打脸.md` |
|
|
44
|
+
| 重生复仇 | `复仇打脸.md` |
|
|
45
|
+
| 豪门 / 总裁(豪门联姻虐恋) | `总裁豪门.md` |
|
|
46
|
+
| 宫斗宅斗 / 宫斗 / 宅斗 / 古言重生 | `宅斗宫斗.md` |
|
|
47
|
+
| 民俗 / 怪谈 / 灵异 | `民俗怪谈.md` |
|
|
48
|
+
| 悬疑 / 推理 / 惊悚 | `悬疑.md` |
|
|
49
|
+
| 甜宠 / 先虐后甜 / 先婚后爱 | `甜宠.md` |
|
|
50
|
+
| 双男主 | `双男主.md` |
|
|
51
|
+
| 沙雕 / 脑洞 / 弹幕 / 系统 | `沙雕脑洞.md` |
|
|
52
|
+
| 仙侠 / 通用 | 无专属包 → `short-craft.md` 底座 + `genre-writing-formulas.md` 兜底 |
|
|
53
|
+
|
|
54
|
+
4. 读取核心发现:结构段落、情绪曲线、反转位置、铺垫方式、句式节奏、可借鉴技法。**把拆文报告里的具体招式对到题材包招式库**:拆文给「这一篇怎么做的」,题材包给「这一类通用怎么做」,两者合用——拆文是当前对标书的实证,题材包是该题材的通法
|
|
55
|
+
5. 写入本篇 `设定.md` 的“对标摘要”区,写作时每个场景从中召回 1-2 个相关技法
|
|
56
|
+
6. 如只找到原文、未找到拆文报告,提示用户先运行 `/story-short-analyze`;如用户要求继续,也可只按原文做弱参考
|
|
57
|
+
|
|
58
|
+
> **拆文产出格式**:analyze 落盘的完整文件树、`_meta.json` schema、Stage→文件映射,以及「story-short-write 怎么读这些产出」的下游消费规范,见 [references/output-contract.md](output-contract.md)。
|
|
59
|
+
|
|
60
|
+
> **多对标书时**:参 `references/cross-book-recall.md`,副对标 anchor 入「对标摘要」区
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
| 所有角色说话方式一样 | 模糊 |
|
|
48
48
|
| 对话说服人物 | 现实中没人被几句话说服,用突发状况代替 |
|
|
49
49
|
| 情绪写完方向变了 | 需回退到情绪拆分 |
|
|
50
|
+
| 捧哏工具人、鹦鹉复读对方原话 | 配角只剩接话功能 |
|
|
51
|
+
| 高位者长篇自证、说话不分场合 | 身份和处境塌了 |
|
|
52
|
+
| 情绪水肿咆哮、生死场景嘴碎 | 越吵越不紧张 |
|
|
53
|
+
| 悬念正攒着就被台词说破 | 期待提前泄掉 |
|
|
50
54
|
|
|
51
55
|
---
|
|
52
56
|
|
|
@@ -133,13 +137,15 @@
|
|
|
133
137
|
|
|
134
138
|
角色情绪是连续的、循序渐进的。从生气到高兴:生气 → 不那么生气 → 不生气 → 高兴,每次转变需对应事件触发。不能跳步。
|
|
135
139
|
|
|
136
|
-
###
|
|
140
|
+
### 情绪与行动的因果检查
|
|
137
141
|
|
|
138
142
|
1. 遇到事件(失衡状态)
|
|
139
|
-
2.
|
|
140
|
-
3.
|
|
143
|
+
2. 情绪反应(可以直写,也可以体现在语言、选择或有功能的动作中)
|
|
144
|
+
3. 内心思考(只写影响理解的判断;鲁莽可以直接体现在行动里)
|
|
141
145
|
4. 采取行动(基于前三步结果回应)
|
|
142
146
|
|
|
147
|
+
用于检查转变是否成立,不要求逐步写满;上下文已清楚的反应或思考无需补写。
|
|
148
|
+
|
|
143
149
|
### 对话不平淡三思路
|
|
144
150
|
|
|
145
151
|
- 对话本身带来/强化某个核心驱动力(期待、爽感、悬念)
|
|
@@ -154,7 +160,7 @@
|
|
|
154
160
|
- 大量信息通过对话展示会显得啰嗦,部分信息转化为情节、心理描写、旁白、环境、动作
|
|
155
161
|
- 用角色的语气和立场包裹信息,不是机械陈述设定
|
|
156
162
|
- 设定用到哪个稍微带出来就行,不需完完全全讲明白前因后果
|
|
157
|
-
- **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G
|
|
163
|
+
- **角色不当"科普嘴"**:设定/原理/前因后果不能靠任何角色(尤其信息型/AI 配角)整段讲解——Gate G 同样适用于角色台词。按角色当下的目的和对话阻力取舍信息,用到哪带哪点,不固定拼接身体反应。
|
|
158
164
|
|
|
159
165
|
### 信息拉扯示例(以"主角新书起飞了"为例)
|
|
160
166
|
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
- 心寒时刻用「轻」写:疼是小的、钝的,杀伤力在于看清。《苹果皮断心亦死》苹果砸在胳膊上,不怎么疼,就是有点蒙。我看着那脏兮兮的苹果,又看看自己还在渗血的手指,忽然就觉得没什么意思。
|
|
54
54
|
- 荒唐感代替嚎啕:被气笑、想笑、觉得陌生。《儿子为博流量》我看着眼前这个儿子,忽然觉得陌生。
|
|
55
55
|
- 身份句定格:一句话给自己在这个家的位置盖章,独立成段。《苹果皮断心亦死》原来当姐姐是我的原罪。/《苹果皮断心亦死》你们爱的不是我,是哪个随叫随到的血包和不用密码的银行卡。
|
|
56
|
-
-
|
|
56
|
+
- 直给情绪词仍可用(心彻底凉透、心沉到谷底),但频率低于追妻;需要展开时偏向冷静盘算,不逐句配反应。
|
|
57
57
|
- 憋屈的物理感:《妻子极端节俭》我端着手里仅剩的半碗水,怔愣在原地。
|
|
58
58
|
|
|
59
59
|
---
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
- **「听说体」报应清单收尾**:保留,是本题材标配的因果闭环,不是烂尾。
|
|
146
146
|
- **主角冷幽默自嘲**(「我差点气笑了」「真是屈才了」):保留,是心寒的本题材表达式。
|
|
147
147
|
|
|
148
|
-
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
148
|
+
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。另外两条本题材易犯:恶人恶得没有生活逻辑(上来就喊打喊杀,没有糖衣);清算靠主角开骂而不是靠证据和规则落地。
|
|
149
149
|
|
|
150
150
|
> 标点:本题材范例为示意保留了原貌(含个别 `……`);落到正文按 `short-craft.md` 第 8 节执行,不出 `……` / `——`,停顿、哽咽、被打断一律用短句 / 句号 / 动作 beat / 换行实现。
|
|
151
151
|
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
- **卑微 / 偏执 / 追悔的滚烫台词**:舔狗、病娇、火葬场的告白,保留,别当「用力过猛」删。
|
|
143
143
|
- **契约 / 宿命的前瞻剧透**:有意识地向前吊「三年后 / 后来他后悔了 / 未来他会毁掉我」,保留。
|
|
144
144
|
|
|
145
|
-
仍要避免的真 AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
145
|
+
仍要避免的真 AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。语料里也偶有「映入眼帘」这类混入,别照抄。
|
|
146
146
|
|
|
147
147
|
> 标点:本题材范例为示意保留了原貌;落到正文按 `short-craft.md` 第 8 节执行(不出 `……` / `——`,停顿用短句 / 动作 / 换行)。
|
|
148
148
|
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
比追妻更生猛:作践有物理极刑档(碾压手 / 人彘 / 人体盛 / 判死刑),所以宣泄要够痛,反杀要够冷。**两段声线,靠亮底牌 / 重生那一拍翻转。**
|
|
49
49
|
|
|
50
|
-
-
|
|
50
|
+
- 受作践段可以直接写浓烈情绪:心沉到谷底、万念俱灰;让羞辱与处境支撑,不固定叠身体反应。
|
|
51
51
|
- 心死转冷的快意预告:把读者按在「我知道你不知道」的信息差上吊着。
|
|
52
52
|
- 极刑反衬:写极痛时用一句冷到反常的句子收(「幸好我已经死了,感受不到痛了」),痛感与冷意对撞。
|
|
53
53
|
|
|
@@ -144,13 +144,13 @@
|
|
|
144
144
|
这些在别的语境是 AI 味,在本题材是卖点,**别误删**:
|
|
145
145
|
|
|
146
146
|
- **快意剧透 / 亮底牌前瞻预告**(「过了今天,你们就再也笑不出来了」「我真的很期待他们脸上的表情」):保留,这是本题材的爽感引擎,只删「泄了悬念又不吊读」的随手上帝腔。
|
|
147
|
-
-
|
|
147
|
+
- **直写情绪成语**(心沉到谷底 / 万念俱灰):有上下文支撑就保留,不强配体感、动作或物件,也不替换成纯动作。
|
|
148
148
|
- **次数 / 金额 / 年限的逐项枚举**(第七次、第三十七次、第九十九次下降):保留,这是递进式累积爽点,不是凑字排比。
|
|
149
149
|
- **弹幕 / 外部审判声**(穿书 / 系统篇):保留,是该题材的外部爽感声轨,不是赘语。
|
|
150
150
|
- **极刑 / 社死场面的直写**(碾压、断肢、人体盛):服务情绪烈度,不做文学化淡化;这是该题材读者的核心期待。**注意:写极端虐心招式仅为剧情张力,不细化任何可被照做的伤害手法步骤。**
|
|
151
151
|
- **当众审判金句 / 自食恶果章尾**:保留;只删空洞哲理升华。
|
|
152
152
|
|
|
153
|
-
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
153
|
+
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。
|
|
154
154
|
|
|
155
155
|
> 标点:本题材范例为示意保留了原貌(含个别 `……` / `...`);落到正文按 `short-craft.md` 第 8 节执行,不出 `……` / `——`,停顿、哽咽、未尽、被打断一律用短句 / 句号 / 逗号 / 动作 beat / 换行实现。本包不教用 `……`。
|
|
156
156
|
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
爽虐双轨:撞破前直白宣泄 + 撞破后冷静审判(钝刀转冷刀)。纯虐重生支线(手刃薄情郎 / 死遁)可到 9。
|
|
50
50
|
|
|
51
51
|
- 直接命名情绪并加重:心如死灰、心如刀割、伤心欲绝、泪如雨下、心沉到谷底——通篇高频直给。
|
|
52
|
-
-
|
|
52
|
+
- 情绪可以直写;需要展开时用礼制、关系、选择或物件的变化承载,不逐句补动作。
|
|
53
53
|
- 心死后转冷反衬:审判时无波澜,连最毒的话都激不起情绪。
|
|
54
54
|
|
|
55
55
|
真实范例:
|
|
@@ -148,13 +148,13 @@
|
|
|
148
148
|
这些在别的语境是 AI 味,在本题材是卖点,**别误删**:
|
|
149
149
|
|
|
150
150
|
- **文白夹杂措辞**(嫁与 / 六载 / 明媒正娶 / 割袍断义 / 各自珍重 / 不循尊卑 / 以儆效尤):古言宫斗的招牌声线,保留。别因为「像文言」就改白话,也别因为「像翻译腔」就删;年代线对应保留年代口语(家属房 / 的确良 / 万元户)。
|
|
151
|
-
- **直写情绪成语**(心如死灰 / 心如刀割 /
|
|
151
|
+
- **直写情绪成语**(心如死灰 / 心如刀割 / 泪如雨下):有上下文支撑就保留,不强配动作或物件,也不替换成纯动作。
|
|
152
152
|
- **时间锚定 + 全弧剧透导语 / 火葬场前瞻预告**:保留这类有意识的向前剧透;只删「泄了悬念又不吊读」的随手上帝腔。
|
|
153
153
|
- **信物撕毁的物理动作 + 主观定性**(亲手绣的,也该亲手了结):保留,撕毁 + 心理落点是本题材的爽点本体。
|
|
154
154
|
- **审判金句 / 心死式章尾**:保留;只删空洞哲理升华。
|
|
155
155
|
- **沙雕脑洞子型的轻喜剧 / 网络化俏皮腔**:仅在该子型内放宽,可用反差 / 吐槽腔;主流宫斗 / 重生线仍走朴素中文,不掺现代网络梗。
|
|
156
156
|
|
|
157
|
-
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
157
|
+
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。文白夹杂不等于堆砌生僻文言,仍以朴素为底。
|
|
158
158
|
|
|
159
159
|
> 标点:本题材范例为示意保留了原貌(含 `……` / `......`);落到正文按 `short-craft.md` 第 8 节执行(不出 `……` / `——`,停顿用短句 / 动作 / 换行)。本包不教用 `……`。
|
|
160
160
|
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|
本题材心死开关有明确两段,烈度全程不降,只换形态。
|
|
55
55
|
|
|
56
|
-
- **前段(发疯 /
|
|
56
|
+
- **前段(发疯 / 宣泄)**:直白命名情绪并加重,眼泪不争气、心如死灰;可以当众开撕、网上对线、砸东西。反应按人物与场景选择,不固定叠加身体细节。
|
|
57
57
|
- **后段(冷处理 / 审判)**:撞破真相后切冷,不闹、应一声好、看戏。情绪不消,转成「冷烈」——反讽、吐槽、记账。心死后转冷反衬最杀:「这些话已经激不起我任何波澜」。
|
|
58
58
|
- 外挂带来的清醒,让后段冷得有理有据,不显突兀。
|
|
59
59
|
|
|
@@ -161,11 +161,11 @@
|
|
|
161
161
|
- **物证侦探式内心推理段**:放大照片、查品牌有没有赠送活动这类「自证不是多想」的独白,是慢推引擎,别当啰嗦删;删了刀就钝了。
|
|
162
162
|
- **弹幕 / 系统 / 心声吐槽**:网感、口语、可以贱(「长嘴不如不长」「六个核弹」),别雅化、别统一成书面语。
|
|
163
163
|
- **普信渣男的车轱辘话与重复**(「我只爱你,宁宁是爱我我不娶她」反复说):是刻意的,体现 PUA 钝刀和主角的无力感,别当重复冗余砍。
|
|
164
|
-
- **直写情绪成语**(心如死灰 /
|
|
164
|
+
- **直写情绪成语**(心如死灰 / 浑身冰冷):有上下文支撑就保留,不强配动作或物件,也不替换成纯动作。
|
|
165
165
|
- **火葬场前瞻预告 / 结果倒序简介**:保留这类有意识的向前剧透;只删「泄了悬念又不吊读」的随手上帝腔。
|
|
166
166
|
- **审判金句 / 心死式章尾**:保留;只删空洞哲理升华。
|
|
167
167
|
|
|
168
|
-
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
168
|
+
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。
|
|
169
169
|
|
|
170
170
|
> 标点:本题材范例为示意保留了原貌(含 `……`);落到正文按 `short-craft.md` 第 8 节执行(不出 `……` / `——`,停顿、未尽、被打断一律用短句 / 句号 / 逗号 / 动作 beat / 换行实现)。本包不教用 `……`。
|
|
171
171
|
|
package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## 叙述腔调
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
第一人称**冷静报告体**为主:叙述者用记流水账的平静口吻,陈述极不正常的事(分尸、循环、亲人被抹除),恐怖靠「语气与内容的反差」压出来;异常暴露时可短暂写恐惧,随即回到判断与应对,不强配体感。与追妻 / 复仇的宣泄腔相反:全程克制,不哭诉、不控诉、不连环反问。
|
|
11
11
|
|
|
12
12
|
- 《杀夫那夜,多了一具尸体》我熟练地取出厨房里的整套刀具,小心翼翼地开始了分尸工作。
|
|
13
13
|
- 《怪物的守则》保险起见,就当这一切都是真的好了,我必须认真地对待!
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
|
|
51
51
|
## 情绪烈度与模式(烈度 6)
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
恐惧短促直写,情绪成语全篇最多一两处;主角越冷静越可怕。爆发只给一瞬,马上压回冷静分析。
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
-
|
|
55
|
+
- 恐惧多为一句直写(我不敢动 / 我怕了);体感(头皮发麻 / 汗毛竖立 / 浑身血液冻住)全篇两三处,短促一拍,独立成段。
|
|
56
|
+
- 恐惧与理智交替:一拍之后立刻回到「我必须弄清楚」的分析态。
|
|
57
57
|
- 崩溃全篇只许一次,放在「全世界都否定我」的至暗点;哭完必须捡起一条新线索。
|
|
58
58
|
|
|
59
59
|
真实范例:
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
|
|
148
148
|
反向要求(与追妻等情感题材相反):
|
|
149
149
|
|
|
150
|
-
-
|
|
150
|
+
- 情绪成语(心如死灰 / 泪如雨下)本题材用得少,但不是禁用词。
|
|
151
151
|
- 成段宣泄独白和连环反问压到最低,用理智分析型独白替代。
|
|
152
152
|
|
|
153
153
|
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)。
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## 叙述腔调
|
|
9
9
|
|
|
10
|
-
第一人称在场亲历者,常带行当身份(接阴人 / 扎纸匠 / 冥婚媒婆 / 捞尸人 /
|
|
10
|
+
第一人称在场亲历者,常带行当身份(接阴人 / 扎纸匠 / 冥婚媒婆 / 捞尸人 / 法医),开口先自报行当和铁规矩。口吻冷静克制、白描见鬼:恐惧落在异常线索、禁忌和进退选择上,必要时可以直写或用有作用的身体反应,不喊不哭诉,与追妻系的成段宣泄正好相反。乡土口语加行话打底:十里八乡、邪性、晦气、脏东西、讲究、忌讳、吉时、脏了手。
|
|
11
11
|
|
|
12
12
|
两种主导腔调,按主角站位选一:
|
|
13
13
|
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
|
|
51
51
|
## 情绪烈度与模式(烈度 7)
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
恐惧型烈度:意象狠、叙述稳。避免长段心理自剖,恐惧可以通过感知、判断或选择呈现。
|
|
54
54
|
|
|
55
|
-
-
|
|
55
|
+
- 恐惧以直写为主;体感(后颈发凉 / 如坠冰窟)全篇两三处,一句到位不叠形容。
|
|
56
56
|
- 恐怖靠熟悉物变样,不靠血浆:《黄仙噬骨》那件蓝布棉袄挂在仓房里,「每逢雪夜就窸窸窣窣地响,像有东西在里头…试衣裳。」
|
|
57
57
|
- 悚然的最高级是轻描淡写:《一梳梳到头》妻子吊死在梁上,他只皱皱眉:「晦气,埋了吧。」
|
|
58
58
|
- 惨烈描写只给破戒者遭报的时刻(肚子胀成水缸、人只剩一张皮),此处放开写,其余时候收着。
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
|
|
144
144
|
本题材额外要避免的:
|
|
145
145
|
|
|
146
|
-
-
|
|
146
|
+
- 主角成段心理独白和情绪自剖(简短判断或直写恐惧可以)。
|
|
147
147
|
- 自造玄学体系。民俗名词用现成的:头七、往生咒、糯米、黄符、生辰八字、讨封、点睛。
|
|
148
148
|
- 意象无限堆叠的梦核升级(一节一个新怪物、符咒套符咒),规矩线会被冲散。
|
|
149
149
|
- 结尾说教升华与「科普腔」解读。仍要避免的通用 AI 味:映入眼帘、心中暗道、沉声道、一丝寒意涌上心头。
|
package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## 叙述腔调
|
|
9
9
|
|
|
10
|
-
第一人称「我」(多为女主)主导,轻快、自嘲、口语。主引擎是**内心吐槽小剧场**:表面言行与心理活动的反差制造喜感,嘴上「关你什么事」,心里「这人今天是怎么了?吃错药了?」。允许沙雕自称(本小姐 / 本公主 /
|
|
10
|
+
第一人称「我」(多为女主)主导,轻快、自嘲、口语。主引擎是**内心吐槽小剧场**:表面言行与心理活动的反差制造喜感,嘴上「关你什么事」,心里「这人今天是怎么了?吃错药了?」。允许沙雕自称(本小姐 / 本公主 / 本喵)。心动瞬间可以切慢镜头,放大关系变化或有信息的细节。
|
|
11
11
|
|
|
12
12
|
先虐后甜 / 救赎支线的前段换压抑克制腔:留白、不解释(《贪心》「没有。」我,撒了谎。他,没有回头。)。糖是熬出来的奖赏,一进糖区就切回轻快。
|
|
13
13
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
## 情绪烈度与模式(烈度 6)
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
日常轻快,心动瞬间拉高再速降。峰值可落在关系试探、意外回应或有信息的身体细节上。以下体感是语料用法,不是固定配方:
|
|
49
49
|
|
|
50
50
|
- 心跳系:《心上樱》我心跳轻轻乱了一拍,没好意思再接话。/《误拨给死对头后》我愣在原地,心跳瞬间漏了一拍。
|
|
51
51
|
- 温度系:《心上樱》耳朵瞬间烫得要命,我几乎是从床上跳了下来。/《公主嫁到》我呆呆地站在原地,耳朵突然火一般热。
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
| 强制同框 | 赐婚 / 提亲 / 陪护,把两人锁进一个空间 | 《公主嫁到》「景天,从今日起,你就是平遥的驸马,给朕好好管教她!」我两眼一黑 |
|
|
94
94
|
| 撩拨反杀 | 女主长期撩不动,男主某天突然接招反压 | 《一遇沦陷》「不是想摸腹肌吗?或者还有其他地方?」「你自己来,还是我教你?」 |
|
|
95
95
|
| 吃醋修罗场 | 情敌 / 前任出现,男主发疯或秒变委屈 | 《财神爷》【呵呵,拿了我的钱,还想去泡仔,天下能有这么好的事?】 |
|
|
96
|
-
| 心动打卡 |
|
|
96
|
+
| 心动打卡 | 身体微反应记录心动进度,不连续两节用同一处 | 《心上樱》我心跳轻轻乱了一拍,没好意思再接话 |
|
|
97
97
|
| 危机见真心 | 挡箭 / 发烧 / 受伤,行动戳破嘴硬 | 《人间渡》霍翀翻过身来,把我整个人压在了他身下,宽背挡住了从背后射来的箭 |
|
|
98
98
|
| 认知错位萌 | 非人 / 天真视角误读人类常识,糖从误读里长 | 《人间渡》「给你切瘤子啊。」/《皇帝饲主的日常》「这只猫怎么这么重?」 |
|
|
99
99
|
| 马甲揭穿名场面 | 面具 / 身份当众掉落,糖与爽同发 | 《财神爷》面具应声而落……「秦晓晓??」老板颤抖着声音,表情一丝丝裂开,「你就是森森???」 |
|
|
@@ -136,10 +136,10 @@ HE 是硬约束:不开放式、不 BE、不留第三者复活的口子。
|
|
|
136
136
|
|
|
137
137
|
- **内心吐槽小剧场 / 自问自答**(「吃错药了?」「几个意思?」):保留,这是喜感与代入的主引擎。
|
|
138
138
|
- **网络语与流行梗**(已读乱回、I 人、磕 CP、PTSD):现代篇保留,是口语质感的一部分;古代篇禁用,换成「本小姐」式的俏皮自称。
|
|
139
|
-
- **心动微反应重复打卡**(耳朵红 /
|
|
139
|
+
- **心动微反应重复打卡**(耳朵红 / 心跳漏拍):保留复现,这是读者的打卡点;密度低于情绪直写,不连续两节用同一处。
|
|
140
140
|
- **男主金句式短台词**:保留「一句收网」,哪怕显得戏剧化;别为自然感把它稀释成长段解释。
|
|
141
141
|
|
|
142
|
-
仍要避免的真·AI 味:映入眼帘、嘴角微扬、眼底闪过一丝、宠溺地笑、心中暗道、论文体连词(不难看出 /
|
|
142
|
+
仍要避免的真·AI 味:映入眼帘、嘴角微扬、眼底闪过一丝、宠溺地笑、心中暗道、论文体连词(不难看出 / 由此可见),以及空转的心动总结句(一股甜蜜涌上心头)。
|
|
143
143
|
|
|
144
144
|
> 标点:本题材范例为示意保留了原貌;落到正文按 `short-craft.md` 第 8 节执行(不出 `……` / `——`,停顿用短句 / 动作 / 换行)。
|
|
145
145
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
前半直白宣泄 + 撞破真相后冷静审判(钝刀转冷刀)。
|
|
46
46
|
|
|
47
47
|
- 直接命名情绪并加重:心如死灰、心彻底凉透、伤心欲绝、泪如雨下、如遭雷劈,通篇高频直给。
|
|
48
|
-
-
|
|
48
|
+
- 情绪可以直白浓烈;已有背叛与处境支撑时直接写,不固定叠加身体反应。
|
|
49
49
|
- 内脏 / 心脏拟痛:「巨大的悲痛在一点点啃食我的心脏,痛到不能呼吸」。
|
|
50
50
|
- 心死后转冷反衬:「这些话出自最亲密的人之口,却已经激不起我任何波澜」。
|
|
51
51
|
|
|
@@ -127,12 +127,12 @@
|
|
|
127
127
|
|
|
128
128
|
这些在别的语境是 AI 味,在本题材是卖点,**别误删**:
|
|
129
129
|
|
|
130
|
-
- **直写情绪成语**(心如死灰 /
|
|
130
|
+
- **直写情绪成语**(心如死灰 / 泪如雨下):有上下文支撑就保留,不强配动作或物件,也不替换成纯动作。
|
|
131
131
|
- **第一人称成段宣泄独白 + 连环反问**:保留,这是代入与共鸣的主引擎。
|
|
132
132
|
- **火葬场前瞻预告 / 结果倒序简介**:保留这类有意识的向前剧透;只删「泄了悬念又不吊读」的随手上帝腔。
|
|
133
133
|
- **审判金句 / 心死式章尾**:保留;只删空洞哲理升华。
|
|
134
134
|
|
|
135
|
-
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 /
|
|
135
|
+
仍要避免的真·AI 味:映入眼帘、心中暗道、沉声道、嘴角微扬、目光如炬、论文体连词(不难看出 / 由此可见)、空泛无落点的情绪总结句(一丝悲伤涌上心头)。
|
|
136
136
|
|
|
137
137
|
> 标点:本题材范例为示意保留了原貌;落到正文按 `short-craft.md` 第 8 节执行(不出 `……` / `——`,停顿用短句 / 动作 / 换行)。
|
|
138
138
|
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
| 开头100字内冲突 | 第一句就是信息炸弹 | "在一个阳光明媚的早晨..." |
|
|
184
184
|
| 对白服从场景功能 | 改变信息、策略、权力、关系或行动 | 为抬高占比补问答、复述或无效狠话 |
|
|
185
185
|
| 段落服从戏剧单元 | 一件事、一个镜头或一条推理链完成再断段 | 按句数强拆,形成提纲体或电报体 |
|
|
186
|
-
|
|
|
186
|
+
| 情绪直写与场景支撑 | 按 short-craft 第2节看上下文,不要求情绪词后接动作;身体细节有功能时保留 | 《为给白月光出气,男友群发我私密照》我紧紧抿着嘴唇,直到尝到血腥味 |
|
|
187
187
|
| 场景产生真实变化 | 改变风险、信息、关系、资源、决定、行动或读者理解之一 | 为凑多功能添加旁人反应、回忆或独立障碍 |
|
|
188
188
|
| 结尾用动作/对话 | 不升华、不总结、不感慨 | "从此以后她明白了..." |
|
|
189
189
|
| 主角有辨识度 | 冷静落在取证、选择、延迟回应或资源调度上;用本篇独有的动作,不套通用标志 | 端水杯、整理西装、转笔等通用动作当必备项,或全篇无辨识度 |
|