@oh-story/dsh 0.1.9 → 0.1.11
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 +209 -73
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +248 -168
- package/lib/drama/skills/short-drama/SKILL.md +16 -4
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
- package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
- package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
- package/lib/drama/skills/short-drama-edit/SKILL.md +65 -44
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +6 -4
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +26 -67
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +31 -56
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +42 -78
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +44 -92
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +14 -16
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1272 -125
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +113 -9
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
- package/lib/drama/skills/short-drama-review/SKILL.md +4 -5
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
- package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +24 -35
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +23 -11
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +139 -34
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +5 -3
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +15 -12
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +29 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +52 -39
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -21
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +9 -23
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +14 -26
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
- package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
- package/lib/drama/skills/short-drama-write/SKILL.md +10 -7
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
- package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
- package/lib/index.js +346 -98
- 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 +7 -12
- 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 +13 -14
- 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 +13 -15
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
- 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 +4 -10
- 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 +9 -21
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
- package/lib/oh-story/manifest.json +607 -327
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/character-designer.md +1 -2
- package/lib/oh-story/roles/consistency-checker.md +15 -13
- package/lib/oh-story/roles/narrative-writer.md +36 -38
- package/lib/oh-story/roles/story-architect.md +9 -61
- package/lib/oh-story/roles/story-explorer.md +20 -125
- package/lib/oh-story/roles/story-researcher.md +0 -1
- package/lib/oh-story/skills/story/SKILL.md +15 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story/references/author-memory.md +46 -94
- 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 +59 -73
- package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
- 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 +155 -8
- package/lib/oh-story/skills/story-import/SKILL.md +64 -584
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
- package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
- package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
- package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
- package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
- package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
- 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 +98 -92
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +81 -270
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +252 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +3 -3
- package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
- package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +138 -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/stage1-golden-chapters.md +128 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +55 -128
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +6 -6
- package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
- 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 +1145 -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 +45 -194
- package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
- package/lib/oh-story/skills/story-long-write/SKILL.md +49 -81
- package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +24 -202
- package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +7 -11
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +7 -15
- package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
- package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/project-files.md +19 -13
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +13 -5
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +5 -6
- package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
- 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 +4 -4
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +81 -121
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +41 -139
- package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +57 -67
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -253
- package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +19 -65
- 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_architect_brief.py +260 -0
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +226 -25
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +7 -4
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +304 -46
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-review/SKILL.md +31 -302
- package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-review/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-review/references/review-quality.md +6 -11
- package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
- package/lib/oh-story/skills/story-review/references/solo.md +52 -0
- package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +15 -11
- 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 +155 -8
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-setup/SKILL.md +71 -452
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
- package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
- 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 +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +19 -65
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +56 -110
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
- package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
- package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +611 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +35 -65
- package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
- package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +23 -175
- package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -47
- package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
- package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +21 -13
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +116 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
- 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 +155 -8
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
- 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 +16 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/client/video-studio.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 +53 -1
- 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/types/video-project.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +60 -1
- package/lib/video-recap/README.en.md +348 -137
- package/lib/video-recap/README.md +340 -136
- package/lib/video-recap/manifest.json +406 -251
- package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
- package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
- package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
- package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
- package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
- package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
- package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
- package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
- package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
- package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
- package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
- package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
- package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
- package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
- package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
- package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
- package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
- package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
- package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
- package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
- package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
- package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
- package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
- package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
- package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
- package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
- package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
- package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
- package/lib/video-recap/skills/video-script/SKILL.md +16 -13
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
- package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
- package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
- package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
- package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
- package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
- package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
- package/lib/video-recap/skills/{video-script/scripts/agent_brief.py → video-understanding/scripts/briefing/builder.py} +38 -35
- package/lib/video-recap/skills/video-understanding/scripts/{brief_context.py → briefing/context.py} +4 -35
- package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
- package/lib/video-recap/skills/{video-script/scripts/brief_timeline.py → video-understanding/scripts/briefing/timeline.py} +5 -6
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
- package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
- package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
- package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
- package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
- package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
- 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 -38
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -530
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -559
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +0 -678
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
- package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +0 -348
- package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +0 -399
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +0 -327
- /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
- /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
- /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Stage 4:角色、设定与关系
|
|
2
|
+
|
|
3
|
+
Stage 4 时刻读本文件与 [synthesis-inputs.md](synthesis-inputs.md)(取料与事实保真)。
|
|
4
|
+
|
|
5
|
+
## 核心规则
|
|
6
|
+
|
|
7
|
+
从 Stage 2 的 `涉及人物`、状态变化和批次关系观察归一实体,再结合 Stage 3 剧情单元生成角色档案与设定。关系记录动作方向、触发、双方得失、表面/真实状态、阶段变化和证据;“甲保护乙”与“乙依赖甲”分别记录。
|
|
8
|
+
|
|
9
|
+
关系图只从 `角色/角色关系.md` 生成:`"{PYTHON}" "{story-long-analyze skill 根}/scripts/render_relation_chart.py" --root "{拆文目录}" --png`。主产物是 `人物关系图/人物关系图.md`(Mermaid + 文字清单,任何 Markdown 查看器都显示中文);PNG 只在找到能显示图中全部文字的字体时生成(表情等符号不画进图片)。字体不够就不出图,不得自行改画拼音或首字母版,把脚本的 `author_message` 转告作者。
|
|
10
|
+
|
|
11
|
+
至少一份角色档案和一份设定文件落盘后运行 `manage_analysis_run.py mark-stage --stage stage4`;缺任一类文件时不得标完成。
|
|
12
|
+
|
|
13
|
+
## 角色过滤来源
|
|
14
|
+
|
|
15
|
+
Stage 4 从紧凑章块的 `涉及人物`、`状态变化` 和批次 `关系变化` 汇总角色提及,再应用下表过滤;不依赖已删除的独立“出场人物表”。
|
|
16
|
+
|
|
17
|
+
| 分类 | 标准 | 提取深度 |
|
|
18
|
+
|------|------|----------|
|
|
19
|
+
| 不提取 | 出场1次且无台词(通用路人) | 跳过 |
|
|
20
|
+
| 简化提取 | 出场2-3次且单一功能 | 功能标签+首次章节 |
|
|
21
|
+
| 完整提取 | 出场3次以上/有台词且推动剧情/与主角直接互动 | 完整档案 |
|
|
22
|
+
|
|
23
|
+
别名合并:主条目用首次正式名,别名列于 `aliases: []`。
|
|
24
|
+
|
|
25
|
+
## 角色合并
|
|
26
|
+
|
|
27
|
+
**合并**:
|
|
28
|
+
1. 收集所有章节的角色提及数据
|
|
29
|
+
2. 别名匹配(仅 proper_name 和 nickname,置信度 ≥0.85)
|
|
30
|
+
3. descriptor/title 永不触发合并
|
|
31
|
+
4. 确认后保留首次正式名
|
|
32
|
+
|
|
33
|
+
## 角色与设定提取
|
|
34
|
+
|
|
35
|
+
Stage 2 紧凑事实中的 `涉及人物`、`状态变化` 与批次 `关系变化` 在此阶段归一为完整档案。
|
|
36
|
+
|
|
37
|
+
### 角色两阶段模型
|
|
38
|
+
|
|
39
|
+
**阶段 A:轻量提及(Stage 2 输出)**
|
|
40
|
+
- 每章 `涉及人物` 记录关键人物,`状态变化` 记录本章可见净变化;
|
|
41
|
+
- 批次 `关系变化` 补充有方向的动作、触发与得失;
|
|
42
|
+
- 不另建出场人物表,不在单章内完成跨章人物定型。
|
|
43
|
+
|
|
44
|
+
**阶段 B:完整档案(Stage 4 构建)**
|
|
45
|
+
- 合并逐章 `涉及人物`、`状态变化` 和批次关系观察
|
|
46
|
+
- 跨章节别名解析(批次 `跨批状态` 的「已确认别名」是现成线索)
|
|
47
|
+
- 群体称呼、无名路人和泛称(亲属、社交、身份、年龄外貌类称呼,如大哥、掌柜、老师、小伙子)不建档,除非原文固定用它指代某一个人
|
|
48
|
+
- 构建完整角色档案
|
|
49
|
+
|
|
50
|
+
### 一人一实体原则
|
|
51
|
+
|
|
52
|
+
- **绝对禁止**将不同人物的信息合并到同一个实体中
|
|
53
|
+
- 每个角色实体必须对应唯一的一个人物
|
|
54
|
+
- 如果无法确定两个称呼是否指向同一人物,必须分开创建实体
|
|
55
|
+
|
|
56
|
+
### 别名解析规则
|
|
57
|
+
|
|
58
|
+
**别名类型**:
|
|
59
|
+
|
|
60
|
+
| 类型 | 定义 | 可合并 | 示例 |
|
|
61
|
+
|------|------|--------|------|
|
|
62
|
+
| proper_name | 专名/全名/常用名 | 是 | "希尔曼""林雷·巴鲁克" |
|
|
63
|
+
| nickname | 绰号/外号,须有同指证据 | 是(置信度≥0.85) | "龙血战士林雷" |
|
|
64
|
+
| descriptor | 描述性称谓 | 否 | "红发壮汉""随从""队长" |
|
|
65
|
+
| title | 头衔/职务 | 否 | "护卫队长""家主""族长" |
|
|
66
|
+
|
|
67
|
+
**合并约束**:
|
|
68
|
+
- 仅 proper_name 和 nickname(置信度 ≥0.85)可用于合并
|
|
69
|
+
- descriptor 和 title **永不**触发实体合并
|
|
70
|
+
- nickname 须提供同指证据:同位说明、括号别名、上下文指代、明确改名
|
|
71
|
+
|
|
72
|
+
**Archetype 量化判断**:
|
|
73
|
+
|
|
74
|
+
| 类型 | 标准 | 提取深度 |
|
|
75
|
+
|------|------|----------|
|
|
76
|
+
| **主角** | 出现章节 ≥50% 总章节 + 推动主线 + 有完整成长轨迹 | 完整档案+弧线+动机链 |
|
|
77
|
+
| **反派** | 与主角对立 + 推动核心冲突 + 有明确动机 | 完整档案+动机链 |
|
|
78
|
+
| **核心配角** | 出现章节 ≥20% OR 推动重要支线 OR 有独立人格和成长 | 完整档案+关系 |
|
|
79
|
+
| **功能角色** | 出现章节 <20% + 作用有限(提供信息/道具/一次性互动) | 简化档案 |
|
|
80
|
+
|
|
81
|
+
边界模糊优先归入更低等级。**特殊**:前期 minor 后期 supporting → 判为 supporting。重要导师/伙伴即使出现少也可判为 supporting。
|
|
82
|
+
|
|
83
|
+
**角色档案结构**(200-500字):
|
|
84
|
+
1. 身份背景(1-2句)
|
|
85
|
+
2. 核心经历(3-5句,按时序)
|
|
86
|
+
3. 性格特质(1-2句,从行为归纳)
|
|
87
|
+
4. 能力特长(1-2句)
|
|
88
|
+
5. 人际关系(1-2句)
|
|
89
|
+
6. 成长轨迹(如有,1句)
|
|
90
|
+
|
|
91
|
+
### 金手指合并规则
|
|
92
|
+
|
|
93
|
+
- 相互关联、共同作用的元素**合并为一个**(如"戒指+导师灵魂"是一个整体)
|
|
94
|
+
- 同一事物的不同描述角度**不拆分**
|
|
95
|
+
- 只有完全独立、互不依赖的能力来源才拆分为多个
|
|
96
|
+
- 长篇特点:金手指可能复杂多样,需详尽描述演化过程和多重能力
|
|
97
|
+
- 无金手指时注明
|
|
98
|
+
|
|
99
|
+
**金手指类型**:system(系统)/ space(空间)/ rebirth(重生)/ transmigration(穿越)/ special_physique(特殊体质)/ artifact(神器)/ bloodline(血脉)/ other(其他)
|
|
100
|
+
|
|
101
|
+
### 世界观(按主题拆分到多个文件)
|
|
102
|
+
|
|
103
|
+
字段与落盘位置:
|
|
104
|
+
|
|
105
|
+
| 字段 | 说明 | 落盘文件 |
|
|
106
|
+
|------|------|----------|
|
|
107
|
+
| 类型 | 奇幻/现实/平行世界 | 各文件 frontmatter 或开头注明 |
|
|
108
|
+
| 力量体系 | 名称、等级、晋升方式(文本描述) | `设定/世界观/力量体系.md`(>=200字独立,否则并入 背景设定) |
|
|
109
|
+
| 地理 | 分布、主要区域、关键地点(文本描述) | `设定/世界观/地理.md`(同上,>=200字独立) |
|
|
110
|
+
| 势力 | 门派/组织/家族/国家 | **每个势力一个文件** `设定/势力/{势力名}.md`(>=200字独立;不足合并到 `设定/世界观/背景设定.md`) |
|
|
111
|
+
| 核心规则 | 世界运转的基本规则 | `设定/世界观/背景设定.md` |
|
|
112
|
+
| 特殊设定 | 区别于现实的独特设定 | `设定/世界观/背景设定.md`(与核心规则同文件) |
|
|
113
|
+
| 金手指 | 见上方「金手指合并规则」 | `设定/世界观/金手指.md`(统一在 `设定/世界观/` 子目录下,不放扁平 `设定/金手指.md`) |
|
|
114
|
+
|
|
115
|
+
> 模板见下方「输出模板」。下游导入只原样同步当前主题文件,不再现场拆分扁平文件。
|
|
116
|
+
|
|
117
|
+
## 人物关系提取
|
|
118
|
+
|
|
119
|
+
每对关系:
|
|
120
|
+
|
|
121
|
+
| 字段 | 说明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| 主体 → 客体 | 有向关系;反向动作存在时另记一条 |
|
|
124
|
+
| 关系动作/类型 | 保护、依赖、控制、服从、欺骗、竞争等动作及家人/师徒/朋友/敌人/恋人/同事/上下级/商业/其他类型 |
|
|
125
|
+
| 表面/真实状态 | 文本允许区分时分别记录;未证实的真实状态标推断等级 |
|
|
126
|
+
| 触发事件 | 导致关系建立或变化的具体行动/事件 |
|
|
127
|
+
| 双方得失 | 信任、资源、地位、行动空间、风险、债务、暴露或失控 |
|
|
128
|
+
| 变化后状态 | 本阶段结束时的状态及后续约束 |
|
|
129
|
+
| 证据 | A/B/C 强度、章节、情节点或 source locator |
|
|
130
|
+
|
|
131
|
+
### 关系提取策略
|
|
132
|
+
|
|
133
|
+
**数据源**:从已提取的情节点描述中提取关系(不从原文提取),更高效、更聚焦。
|
|
134
|
+
|
|
135
|
+
**批量提取**:复用 Stage 2 每个连续章节批次的关系观察,只记录新关系或关系变化;不为了固定章数单独重读原文。
|
|
136
|
+
|
|
137
|
+
**关系演变追踪**:当同一对角色关系发生变化时,记录演变轨迹:
|
|
138
|
+
```
|
|
139
|
+
第{N}章:{关系状态A} → 第{M}章:{关系状态B}
|
|
140
|
+
触发事件:{具体事件}
|
|
141
|
+
情感转变:{正面→负面/负面→正面/中立→复杂 等}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**最终状态合并**:同一有向关系的多阶段状态保留最新状态作为主记录,历史变化写入演变轨迹。反向关系动作不能因角色对相同而被去重。
|
|
145
|
+
|
|
146
|
+
**隐含关系推断**:当角色间没有直接互动但有间接证据时:
|
|
147
|
+
- 通过第三方的评价/描述推断(置信度标 0.7)
|
|
148
|
+
- 通过共同出现的频率和场合推断(置信度标 0.6)
|
|
149
|
+
- 推断关系标记 `[推断]`,与直接证据关系区分
|
|
150
|
+
|
|
151
|
+
**关系网络密度**:
|
|
152
|
+
- 统计主要角色(主角+核心配角)的关系数量
|
|
153
|
+
- 关系数 < 3 → 关系网偏薄,检查是否有遗漏
|
|
154
|
+
- 关系数 > 10 → 关系网过密,检查是否有误合并
|
|
155
|
+
|
|
156
|
+
## 输出模板
|
|
157
|
+
|
|
158
|
+
> **Stage 4 直接按主题拆分输出多个文件**(与当前导入、长篇写作项目结构对齐)。下游不再现场拆分扁平文件。
|
|
159
|
+
> **事实保真**:等级/数值/距离/属性/势力数等硬事实回原文核对,原文未给的写「原文未明确」、禁编造填空(见 [synthesis-inputs.md](synthesis-inputs.md)「合成阶段事实保真」)。
|
|
160
|
+
|
|
161
|
+
`设定/世界观/力量体系.md`:
|
|
162
|
+
- 文本描述,含等级、晋升条件。长篇注意多层级力量体系
|
|
163
|
+
- 内容 < 200 字且不构成独立体系 → 合并到 `设定/世界观/背景设定.md`,本文件可省略
|
|
164
|
+
|
|
165
|
+
`设定/世界观/地理.md`:
|
|
166
|
+
- 分布、主要区域、关键地点(文本描述)
|
|
167
|
+
- 内容 < 200 字 → 合并到 `背景设定.md`,本文件可省略
|
|
168
|
+
|
|
169
|
+
`设定/世界观/背景设定.md`:
|
|
170
|
+
- 核心规则 + 特殊设定
|
|
171
|
+
- 内容不足独立成文件的「力量体系 / 地理 / 势力」也合并到这里
|
|
172
|
+
- 无特殊世界观时:本文件输出 "本书为现实题材,无特殊世界观设定"
|
|
173
|
+
|
|
174
|
+
`设定/世界观/金手指.md`:
|
|
175
|
+
- 类型{system/space/rebirth/transmigration/special_physique/artifact/bloodline/other} | 名称 | 描述(300-600字,含能力/获取/机制/进化史/多重能力演化)| 核心机制 | 当前能力
|
|
176
|
+
- 合并规则见上方「金手指合并规则」。
|
|
177
|
+
- 无金手指时:输出空文件,注明"本书无明显金手指设定"
|
|
178
|
+
|
|
179
|
+
`设定/势力/{势力名}.md`(每个核心势力一个文件):
|
|
180
|
+
- 名称 / 类型(门派/组织/家族/国家)/ 核心人物 / 立场倾向 / 与其他势力关系 / 关键事件
|
|
181
|
+
- 内容 >= 200 字时独立;不足合并到 `设定/世界观/背景设定.md`(不丢失信息)
|
|
182
|
+
|
|
183
|
+
`角色/{角色名}.md`(每角色):
|
|
184
|
+
- 200-500字档案(身份背景→核心经历→性格特质→能力特长→人际关系→成长轨迹)
|
|
185
|
+
- archetype:protagonist/antagonist/supporting/minor
|
|
186
|
+
- 关键情节(3-5个转折点,按时序排列)
|
|
187
|
+
- 成长弧线(character_arc:如有明显变化则总结,如"从普通少年成长为觉醒血脉的强者")
|
|
188
|
+
- 别名列表(标注类型和置信度)
|
|
189
|
+
|
|
190
|
+
`角色/角色关系.md` 从逐章事实和批次观察聚合,不重新读整本原文:
|
|
191
|
+
|
|
192
|
+
| 关系ID | 主体 → 客体 | 关系动作/类型 | 表面关系 | 真实关系 | 触发事件 | 双方得失 | 变化后状态 | 证据强度 | 证据 |
|
|
193
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
194
|
+
|
|
195
|
+
同一对角色的最新状态和历史演变都保留;“甲保护乙”与“乙依赖甲”分别记录。关系图只由此文件生成,不手画、不另建关系事实,命令见上方「核心规则」。它总是写出 `人物关系图/人物关系图.md`(Mermaid 图 + 文字清单,任何 Markdown 查看器都显示中文,作为主产物);只有装了 matplotlib 且找到能显示图中全部文字的字体(不算 LastResort 这类只画方框的兜底字体)时,才另画 `核心人物关系.png` 与 `关键关系演变.png`,表情等符号不画进图片。字体不够就不出图,绝不改用拼音或首字母,并把脚本返回的说明转告作者。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Stage 5:主报告与完整概要
|
|
2
|
+
|
|
3
|
+
Stage 5 时刻读本文件与 [synthesis-inputs.md](synthesis-inputs.md)。`拆文报告.md` 的模板与写法在 [author-facing.md](author-facing.md)「拆文报告.md」。
|
|
4
|
+
|
|
5
|
+
## 备份与标记
|
|
6
|
+
|
|
7
|
+
生成新的 `拆文报告.md` 前先执行:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/manage_analysis_run.py" mark-stage --root "{拆文目录}" --stage stage5 --prepare
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
若旧报告存在,命令会完整复制到 `_analysis_cache/legacy/拆文报告.md`;已存在的首份备份不覆盖。当前旧报告与首份备份不同时,另存一份带内容 hash 的历史备份。其他旧产物与已有摘要不得覆盖。新报告落盘后再用不带 `--prepare` 的 `mark-stage` 标记完成。
|
|
14
|
+
|
|
15
|
+
## 完整概要
|
|
16
|
+
|
|
17
|
+
整体故事框架识别 + 500-1000字高密度全书概要(涵盖主要剧情线阶段性发展、核心人物作用、关键转折点、因果关系)。
|
|
18
|
+
|
|
19
|
+
> **怎么来**:Stage 5 从已落盘的 `剧情/故事线.md`(含故事框架识别)与各剧情单元文件自行生成概要,写入 `概要.md`,不等前面时刻交来文本。覆盖 Stage 0 的 thin first-pass 段,章节索引和卷段表保留。
|
|
20
|
+
|
|
21
|
+
## 报告写法
|
|
22
|
+
|
|
23
|
+
输出 `拆文报告.md`,模板与写法规则见 [author-facing.md](author-facing.md)「拆文报告.md」。它是 `快速预览.md` 的超集(「基本信息」「黄金三章评分」两节同名同结构),面向作者阅读:不出现脚本名、字段名、状态值、批次编号、质量指标名和证据分级字母;情绪模块卡、事件、披露、节奏节点的编号只在带名称时出现(如「退婚当众打脸」(EM-003)),关系写成「甲 → 乙:由……到……」。
|
|
24
|
+
|
|
25
|
+
报告只综合权威底层结果,不为写总报告重新阅读全文,也不复制所有逐章摘要。每条结论写一句人话,再指向对应文件和章节;机械可追溯信息(`source_locator`、证据强度、`EV/RV/AX/EM` 全量编号)留在 `剧情/节奏.md`、`剧情/情绪模块.md`、剧情单元和 `角色/角色关系.md` 里。
|
|
26
|
+
|
|
27
|
+
### 三层灵感库最小消费契约
|
|
28
|
+
|
|
29
|
+
- 单书案例以 `剧情/*.md` 的剧情单元为准,可迁移机制以 `剧情/情绪模块.md` 的 `EM-*` 为准;主报告是阅读入口,不作为第二份结构化真源。
|
|
30
|
+
- 客观事件、披露节点和三维节奏分别使用 `EV-*`、`RV-*`、`AX-*`;披露必须引用事件;机制卡通过 ID 引用,报告只用「名称(ID)」的带名引用,避免跨层复制全文。
|
|
31
|
+
- 每条可检索结论保留剧情单元/章节、`source_locator` 或定位词及证据强度;`chapter_index.csv` 的逐章 hash 和 `_progress.md` 批次范围 hash 用于判断原文范围是否变化。
|
|
32
|
+
- 下游先运行兼容检查器读取 `classification`、`current_capabilities`、`conflicts` 和覆盖范围。缺项时请求长篇拆文的定点增强;不得把旧资料概括成伪造的当前主产物,也不得为入库重新阅读全文。
|
|
33
|
+
- 是否进入灵感库、跨书归并、差异保留和检索策略由三层灵感库能力决定;单书拆文不自动入库。
|
|
@@ -1,149 +1,76 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 文风档案生成与单独重建
|
|
2
2
|
|
|
3
|
-
> **何时加载**:story-long-analyze Stage 6
|
|
4
|
-
>
|
|
5
|
-
> **输出**:`拆文库/{书名}/文风.md`(模板见 [style-profile-protocol.md](style-profile-protocol.md))。
|
|
3
|
+
> **何时加载**:story-long-analyze Stage 6。Stage 6 可以在完整管道末尾运行,也可以在已有拆文只缺 `文风.md` 时单独运行;单独运行不得触发 Stage 1–5。
|
|
6
4
|
|
|
7
|
-
##
|
|
5
|
+
## 原则
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
1. 文风档案描述作者实际写法,不评价作者水平。
|
|
8
|
+
2. 情绪和节奏意图以 `剧情/情绪模块.md`、`剧情/节奏.md` 为准,文风只管表达层。
|
|
9
|
+
3. 已有完整 `文风.md` 时原样保留;用户明确要求增强时才更新。
|
|
10
|
+
4. Stage 6 不重扫全书。允许使用索引行号定点回读 4–6 段原文,以补齐可验证锚点。
|
|
11
|
+
5. 摘要措辞不能冒充作者原句;缺少原文和有效样本时明确报错。
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
## 来源顺序
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
1. 既有 `文风.md`;
|
|
16
|
+
2. 项目内非空且含连续原文的 `_style-sample.txt`;
|
|
17
|
+
3. `章节/第1-3章_深度拆解.md` 中带定位的短引和写法证据;
|
|
18
|
+
4. `_analysis_cache/批次-*.md`、`章节/*_摘要.md` 与 `拆文报告.md` 的结构层观察;
|
|
19
|
+
5. 仍缺锚点时,读取 `chapter_index.csv`,按旧版“覆盖主要基调”的方式选择 4–6 章,再按 `start_line/end_line` 定点读取原文片段。
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
第 5 项只读取被选章节的局部行段,不允许从头到尾扫描原文。没有索引的旧项目可以仅运行机械索引脚本;这一步不写 `_progress.md`,也不启动其他分析阶段。
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **开篇钩子类型 + 手法**
|
|
24
|
-
- **反应层拆解表**(对话潜台词样本)
|
|
25
|
-
- **爽点铺放比**(情绪交替节奏样本)
|
|
26
|
-
- **可借鉴要素**(与 Step 1 合并去重,喂「写法技巧 Top 5」)
|
|
27
|
-
|
|
28
|
-
### Step 3: 提取章节基调/主题标签序列
|
|
29
|
-
|
|
30
|
-
用 Grep 读所有 `章节/*_摘要.md`:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
grep -hE '基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)' 章节/*_摘要.md
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
**关键格式注意**:`章节/*_摘要.md` 的实际格式是 `主题标签X | 基调:Y` 单独成行、跟在每个情节点后(一章 10-40 行)。`基调` 用**全角冒号**,`主题标签` 后**不带冒号**,两者都**不在行首**。grep 模式不能用 `^基调:` 这种锚定。
|
|
37
|
-
|
|
38
|
-
**章基调聚合规则**(每章一个章基调,写入文风「情绪交替模式」):
|
|
39
|
-
|
|
40
|
-
- 对该章所有情节点的「基调」字段做众数统计
|
|
41
|
-
- 并列时(如 5 紧张 vs 5 热血)取章节内**最早出现**的基调(按 `_摘要.md` 中行号)
|
|
42
|
-
- 输出格式:`第N章: {章基调}`,连成全书序列
|
|
43
|
-
|
|
44
|
-
**章内情节点基调序列**(用于「章内基调切换」分析):
|
|
45
|
-
|
|
46
|
-
- 不做聚合,按 `_摘要.md` 中情节点出现顺序保留
|
|
47
|
-
- 用于统计切换频率:相邻情节点基调不同的次数 / 总情节点数
|
|
48
|
-
|
|
49
|
-
### Step 4: 原文采样
|
|
50
|
-
|
|
51
|
-
`原文/` 下**只有一个全书单文件** `原文.txt`(或 `.md`),**不是按章拆分**。Stage 0 已把校验通过的章节起止行写入 `拆文库/{书名}/_progress.md`,该表是 Stage 1/2/6 共用的唯一切片真值。
|
|
52
|
-
|
|
53
|
-
**Stage 6 只读 `_progress.md` 里的「章节边界」表,不重新搜索章节标题、不另行推断边界,也不自行修正规则。** 如果表缺失、目标章缺边界、边界不连续或指向原文范围之外,立即停止 Stage 6,提示重新执行 Stage 0 重建进度文件;不得用临时切片继续生成文风。
|
|
54
|
-
|
|
55
|
-
**采样切片**:
|
|
56
|
-
|
|
57
|
-
- 从 `_progress.md` 的章节边界表选第 1 章、第 10 章、第 20 章(如总章数 <20,按 1/3、2/3、收尾比例挑)
|
|
58
|
-
- 每章用 `Read offset={该章起始行} limit=50` 切出约 1000 字
|
|
59
|
-
- 把 3 段拼接写入 `拆文库/{书名}/_style-sample.txt`(固定这个文件名,不要换):**第一段用 `>` 覆盖写,后两段才用 `>>` 追加**。全程用 `>>` 会让重跑 Stage 6 时把上一轮的样本累积进来,统计出的句长分布是两轮混合的结果
|
|
60
|
-
|
|
61
|
-
**确定性句长/标点统计**(替代主观「眼测」):
|
|
62
|
-
|
|
63
|
-
Stage 6 由**主线程**执行,Bash 工具可用。把上一步拼好的 `_style-sample.txt` 喂给下面的脚本(heredoc 作 Python 源,样本路径按 argv 传入,避免 stdin heredoc 与 `< file` 双重重定向冲突)。先探测可用解释器再跑——**勿直接用 `python3`**,Windows 上它会触发 Microsoft Store 占位程序、exit 49 失败。
|
|
64
|
-
|
|
65
|
-
样本路径**必须用项目内相对路径**,不要写 `/tmp/...`:下面探测到的解释器可能是 Windows 原生 python(`py` 启动器),它把 `/tmp/x.txt` 解析成 `C:\tmp\x.txt`,和 Git Bash 写入的位置不是同一个文件,脚本会直接 FileNotFoundError。
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
SAMPLE="拆文库/{书名}/_style-sample.txt" # {书名} 换成实际书名,别照抄占位符
|
|
69
|
-
for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done
|
|
70
|
-
"$PYBIN" - "$SAMPLE" <<'PYEOF'
|
|
71
|
-
import re
|
|
72
|
-
import sys
|
|
73
|
-
with open(sys.argv[1], 'r', encoding='utf-8') as f:
|
|
74
|
-
text = f.read()
|
|
75
|
-
sents = [s for s in re.split(r'[。!?]+', text) if s.strip()]
|
|
76
|
-
total = max(len(sents), 1)
|
|
77
|
-
short = sum(1 for s in sents if len(s) < 15)
|
|
78
|
-
mid = sum(1 for s in sents if 15 <= len(s) <= 30)
|
|
79
|
-
lng = sum(1 for s in sents if len(s) > 30)
|
|
80
|
-
chars = max(sum(1 for c in text if not c.isspace()), 1)
|
|
81
|
-
puncts = sum(1 for c in text if c in ',。!?;:、…—""\'\'')
|
|
82
|
-
avg = sum(len(s) for s in sents) // total
|
|
83
|
-
print(f'sentences={total}; short_lt15={100*short//total}%; mid_15to30={100*mid//total}%; long_gt30={100*lng//total}%; avg_len={avg}; punct_density={100*puncts//chars}%')
|
|
84
|
-
PYEOF
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
实测输出形如 `sentences=6; short_lt15=66%; mid_15to30=33%; long_gt30=0%; avg_len=12; punct_density=15%`。
|
|
88
|
-
|
|
89
|
-
把输出的 `short_lt15 / mid_15to30 / long_gt30 / avg_len / punct_density` 数值直接填进 `style-profile-protocol.md` 模板第 40 行的 `{...X% / Y% / Z%}` 占位符——`confidence: high`,因为是确定性测量,不是抽样估计。
|
|
90
|
-
|
|
91
|
-
**Bash 不可用时的降级**(仅子代理上下文等极端情况,主线程不会触发):
|
|
92
|
-
|
|
93
|
-
- 跳过本步骤;句长段写「Bash 工具不可用,跳过确定性统计」
|
|
94
|
-
- `confidence: low`,narrative-writer 让位回默认 Gate D(按句长标准校准)
|
|
95
|
-
|
|
96
|
-
### Step 5: 选原文锚点片段 (4-6 段)
|
|
97
|
-
|
|
98
|
-
从 Step 3 输出的章节基调里挑覆盖度最高、且项目可能需要的 4-6 类基调(优先覆盖:紧张/悲伤或压抑/轻松或温馨/热血)。若某类基调在对标书中少于 3 章,不强行编造;在文风文件中说明跳过。每类基调选 1 章作为锚点章。
|
|
99
|
-
|
|
100
|
-
**同基调多章时的选择规则**:
|
|
101
|
-
|
|
102
|
-
1. **L1 爽点类型最强匹配**:参考该章 `_摘要.md` 的「关键事件」+ 基调序列,挑爽点最突出的章节
|
|
103
|
-
2. **L2 原文章节长度最接近日更目标**:若 Step 4 已切出章节边界,用原文章节切片估算字数;若无法切原文,只用 `_摘要.md` 的情节点数量近似复杂度,不把摘要文件长度当作原文章节字数
|
|
104
|
-
3. **L3 章节号最小**:最早期的章节 = 作者最 canonical 的 voice(未受连载漂移影响)
|
|
23
|
+
## 单独重建文风
|
|
105
24
|
|
|
106
|
-
|
|
25
|
+
当 story-long-write 或用户发现 `文风.md` 缺失时:
|
|
107
26
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
- **锚点必须逐字连续切片,禁止改写/缩写/跳段/拼接**:narrative-writer 拿锚点当 few-shot 直接学,标注的行号要能回查原文。落盘前逐段抽 1-2 句 `grep -F` 回 `原文/原文.txt`,grep 不到即说明被改写或拼接——重切为忠实连续片段。确需跳过中间过渡段时,分别标各自真实行号(如「行264-267 + 行269-270」)并在引用块内用「(……中略……)」显式断开,不得用一个连续行号区间假装连续
|
|
27
|
+
1. 运行检查器,确认其他拆文成果可用且 `stage_repairs` 包含 `stage6_style`;
|
|
28
|
+
2. 若 `_style-sample.txt` 有效,直接用它;
|
|
29
|
+
3. 否则确认 `chapter_index.csv` 与原文存在。缺索引时只运行:
|
|
112
30
|
|
|
113
|
-
|
|
31
|
+
```text
|
|
32
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/build_chapter_index.py" --source "{拆文目录}/原文/原文.txt" --output "{拆文目录}/chapter_index.csv" --locator-path "原文/原文.txt"
|
|
33
|
+
```
|
|
114
34
|
|
|
115
|
-
|
|
35
|
+
4. 从索引中选择 4–6 章,优先覆盖紧张、轻松、冲突、关系回收、高潮与收束等已有资料能确认的不同基调;按行号只取每章一段 300–500 字连续原句,写入或更新 `_style-sample.txt`;
|
|
36
|
+
5. 按 [style-profile-protocol.md](style-profile-protocol.md) 生成 `文风.md`;
|
|
37
|
+
6. 文件成功落盘后运行:
|
|
116
38
|
|
|
117
|
-
|
|
118
|
-
-
|
|
119
|
-
|
|
120
|
-
- `med`:从样本归纳且样本充足(如基调序列从 ≥10 章摘要统计)
|
|
121
|
-
- `low`:样本不足或采样失败(如锚点缺失、Bash 不可用导致 Step 4 句长统计跳过)
|
|
122
|
-
- 「分层模仿建议」必须分基础层 / 进阶层 / 适配层;基础层只写词汇、句式、描写和对话习惯,进阶层写节奏、伏笔、视角和场景衔接,适配层写哪些可用、哪些容易让本项目错位;明确不复制专名、标志性台词、独特桥段和事件顺序
|
|
123
|
-
- 字数预算:硬上限 ~4000 字。**描述段 ≤ 1800 字 + 锚点 4-6 段 × 300-500 字**
|
|
124
|
-
- 如果 Step 4 失败(章节分隔符识别不出)→ 「生成记录」写 `文风可用:否:无法识别章节分隔符`;原文锚点段全填占位符 "原文缺失,需手动补充",confidence 全 low
|
|
39
|
+
```text
|
|
40
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/manage_analysis_run.py" mark-stage --root "{拆文目录}" --stage stage6 --output "文风.md"
|
|
41
|
+
```
|
|
125
42
|
|
|
126
|
-
|
|
43
|
+
索引、原文和有效样本都不存在时停止,返回“无法取得可验证文风锚点”,不得生成锚点全空的可用文风。
|
|
127
44
|
|
|
128
|
-
|
|
129
|
-
|---|---|
|
|
130
|
-
| `原文/原文.txt` 不存在 | 跳过 Step 4-5;文风文件仅含描述段;「生成记录」写 `文风可用:否:原文缺失` |
|
|
131
|
-
| `章节/*_摘要.md` 数量 <3 | 跳过 Step 3 基调序列;情绪交替段标 confidence: low |
|
|
132
|
-
| `章节/第1-3章_深度拆解.md` 缺失 | 跳过 Step 2;对话潜台词段从拆文报告兜底;confidence: low |
|
|
133
|
-
| `拆文报告.md` 不存在 | **停止 Stage 6**,提示用户拆文未完成,先跑完 Stage 5 |
|
|
45
|
+
## 档案内容
|
|
134
46
|
|
|
135
|
-
|
|
47
|
+
- 叙述视角、段落推进、对白比例、动作与心理安排;
|
|
48
|
+
- 句长、标点、口吻和角色语气,只从原文锚点归纳;
|
|
49
|
+
- 情绪转场引用三维节奏和篇幅安排,不把剧情强度当文风;
|
|
50
|
+
- 每项标 `high / med / low` 置信度及来源路径;
|
|
51
|
+
- 原文锚点 4–6 段,每段标章节、行号、基调和示范点。
|
|
136
52
|
|
|
137
|
-
|
|
53
|
+
## 字段速查
|
|
138
54
|
|
|
139
|
-
|
|
55
|
+
完整模板见 [style-profile-protocol.md](style-profile-protocol.md)。
|
|
140
56
|
|
|
141
|
-
|
|
57
|
+
| 段落 | 内容 | 必标可信度 | 上限 |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| 生成记录 | 参考了哪些资料 + 抽样看了哪几章 + 文风是否可用 | 否 | <100 字 |
|
|
60
|
+
| 整体语感 | 句长分布 / 标点习惯 / 段落节奏 | 是(每子项一标) | ~500 字 |
|
|
61
|
+
| 对话技法 | 潜台词模式 / 对话标签 / 角色语气区分 | 是(潜台词必标) | ~400 字 |
|
|
62
|
+
| 情绪交替模式 | 章内基调切换 / 跨章基调周期 / 喜剧↔重击转场 | 是(章内切换必标) | ~400 字 |
|
|
63
|
+
| 可借鉴技巧 | 写法技巧 Top 5 + 可借鉴套路 Top 3(从拆文报告引用;情绪/节奏意图只引用 `剧情/情绪模块.md` / `剧情/节奏.md`,不在文风中重定义) | 否 | ~300 字 |
|
|
64
|
+
| 分层模仿建议 | 基础层 / 进阶层 / 适配层,各写可执行边界 | 否 | ~350 字 |
|
|
65
|
+
| **原文锚点片段** | **4-6 段 × 300-500 字**,按基调分类,标"出处 + 行号 + 示范点" | 否 | ~2400 字 |
|
|
66
|
+
| 不可模仿 | 对标书缺陷或不适合本项目的技法 | 否 | <100 字 |
|
|
142
67
|
|
|
143
|
-
|
|
144
|
-
- story-import 显式绑定外部对标或 story-long-write 首次引用 `拆文库/{书名}/` 时,同步到项目 `{项目}/对标/{书名}/` 并**包含**文风(与拆文报告同等待遇);不得把正在导入的本书自身作为该外部对标
|
|
145
|
-
- 写作端(story-long-write)的日更循环读 `{项目}/对标/{书名}/文风.md`(按对标书路径查找规则,回退 `拆文库/{书名}/`)
|
|
68
|
+
**总上限 ~4000 字**。
|
|
146
69
|
|
|
147
|
-
##
|
|
70
|
+
## 质量检查
|
|
148
71
|
|
|
149
|
-
|
|
72
|
+
- 每条高置信结论都有资料路径或可核原文锚点;
|
|
73
|
+
- 4–6 段锚点覆盖不同基调,且来自索引指定的局部行段;
|
|
74
|
+
- 摘要没有被当成作者原句;
|
|
75
|
+
- `文风.md` 保持现有下游字段,未获增强请求时不覆盖旧文件;
|
|
76
|
+
- Stage 6 失败只报告本阶段缺口,不回头重跑 Stage 1–5。
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
`拆文库/{书名}/文风.md` 是整书级写作技法视图,聚合:
|
|
8
8
|
|
|
9
|
-
- 句长 / 标点 /
|
|
9
|
+
- 句长 / 标点 / 段落节奏(从已有样本或按索引定点读取的可验证原句统计)
|
|
10
10
|
- 对话潜台词模式 + 角色语气区分
|
|
11
11
|
- 章内 + 跨章情绪交替周期(看每章基调如何变化)
|
|
12
12
|
- `拆文报告.md` 已有的「写法技巧」「可借鉴套路」
|
|
13
13
|
- 分层模仿建议(基础层 / 进阶层 / 适配层,强调学手法不搬桥段)
|
|
14
|
-
- 4-6
|
|
14
|
+
- 4-6 段可验证原文锚点片段(范例片段用;优先已有样本,没有时按索引定点读取,都不可用时明确失败)
|
|
15
15
|
|
|
16
16
|
## 文件路径
|
|
17
17
|
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
|
|
33
33
|
## 生成记录
|
|
34
34
|
- 参考资料:拆文报告.md、黄金三章深度拆解、章节摘要
|
|
35
|
-
- 抽样章节:第 {K1}/{
|
|
35
|
+
- 抽样章节:第 {K1}/{K2}/{K3}/{K4}[/{K5}/{K6}] 章(每章取 300-500 字连续行段)
|
|
36
36
|
- 生成时间:{date}
|
|
37
37
|
- 适用对标书路径:拆文库/{书名}/
|
|
38
38
|
- 文风可用:是 # 若原文缺失或锚点不足,写“否:原因”
|
|
39
39
|
|
|
40
40
|
## 整体语感
|
|
41
|
-
- 句长分布:{
|
|
41
|
+
- 句长分布:{在 4-6 段合并样本上确定性测量——短句(<15字)占比 X%、中句(15-30)Y%、长句(>30)Z%、平均句长 N 字、标点密度 M%。一句概括语感。`confidence: high`(数据由机械统计得出,不是模型估计)。}
|
|
42
42
|
- confidence: high | med | low
|
|
43
43
|
- 标点习惯:{破折号/省略号/句号/感叹号/分号 的高频用法。附 2-3 个原文短片段示例。}
|
|
44
44
|
- confidence: high | med | low
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
|
|
73
73
|
## 原文锚点片段
|
|
74
74
|
|
|
75
|
-
> 每片段 300-500 字,**用于 narrative-writer
|
|
75
|
+
> 每片段 300-500 字,**用于 narrative-writer 写作时的范例片段**。优先复用旧文风、黄金三章或批次中已经保存并带定位的连续原句;没有有效样本时,Stage 6 可按 `chapter_index.csv` 定点读取 4-6 段连续原文。不得重扫全书。模仿手法、不抄字句。
|
|
76
76
|
|
|
77
77
|
### 片段 A — 基调:紧张
|
|
78
78
|
**出处**:第 {K} 章 第 {段号} 段(行 {L1}-{L2})
|
|
@@ -128,6 +128,6 @@
|
|
|
128
128
|
## 覆盖与不可模仿原则
|
|
129
129
|
|
|
130
130
|
- **覆盖**:文风优先级排在 Gate D(节奏调整)、Gate B(句式去套路)、标点默认习惯之上——这些 Gate 是去 AI 味的**默认值**,文风有更具体的指令时文风赢。
|
|
131
|
-
-
|
|
131
|
+
- **不可覆盖**:细纲事件、信息揭露边界、用户字数范围、文件结构。禁用词、结尾、比喻等表达默认值按 style-resolution 的优先级裁决,对标文风低置信时让位给默认值。
|
|
132
132
|
|
|
133
133
|
精确决议表见 `.claude/agents/narrative-writer.md` 的“被调用协议”段。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Stage 3–5:取料与事实保真
|
|
2
|
+
|
|
3
|
+
Stage 3、4、5 各自的时刻都读本文件。
|
|
4
|
+
|
|
5
|
+
## 取料
|
|
6
|
+
|
|
7
|
+
不整份 Read 批次缓存(每批约七成是和逐章摘要重复的章节块),改用只读的 `digest` 按需取料,输出是 Markdown:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/manage_analysis_run.py" digest --root "{拆文目录}" --part observations [--chapters 1-60]
|
|
11
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/manage_analysis_run.py" digest --root "{拆文目录}" --part chapters --chapters 1-60 --fields 三维节奏,涉及,状态变化 --points brief
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- `observations`:按章序汇总已提交批次的跨章观察(剧情点、关键事件与披露候选、关系变化、三维峰谷、跨批状态),是 Stage 3–4 的主语料;
|
|
15
|
+
- `chapters`:从逐章摘要抽字段(概要、关键事件、因果、局面结果、涉及、信息变化、状态变化、三维节奏、章尾钩子、证据),`--points brief` 给每点「标题|类型|基调」,`full` 另带白描;
|
|
16
|
+
- 全书放不进一次上下文时按 `--chapters` 分窗口取、分组合并,窗口间只带剧情状态、关键候选与证据引用,不扩写内容;只有关键证据冲突才定点 Read 单章 `章节/第N章_摘要.md`,最多增加一次定点核验;
|
|
17
|
+
- 旧项目没有批次缓存时,直接复用现有剧情、节奏、情绪、关系和逐章资料,不要为了统一格式先把旧摘要重新压缩一遍;证据不足或冲突时标未知或待核;
|
|
18
|
+
- Stage 3–5 不回读原文,也不各自重读同一批原文;Stage 6 可以按索引定点读取 4–6 段文风锚点,但不得重新扫描整本原文。
|
|
19
|
+
|
|
20
|
+
## 阶段标记
|
|
21
|
+
|
|
22
|
+
Stage 1 黄金三章与快速预览落盘后标 `stage1`;计划不再有批次时标 `stage2`。Stage 3–6 各运行一次。文件成功原子落盘后再标记:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
"{PYTHON}" "{story-long-analyze skill 根}/scripts/manage_analysis_run.py" mark-stage \
|
|
26
|
+
--root "{拆文目录}" --stage stage3 --output "剧情/节奏.md"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
阶段完成只看约定产物存在且进度行完成;没有依赖 hash 或 Stage receipt。`mark-stage` 会按阶段检查:Stage 1 的黄金三章与快速预览、Stage 2 的全部摘要、Stage 3 的情绪模块与节奏、Stage 4 的角色与设定、Stage 5 的报告、Stage 6 的文风。Stage 6 的单独重建见 [style-profile-generator.md](style-profile-generator.md),允许按索引定点读取 4–6 段原文,不重扫全书,也不触发其他阶段。
|
|
30
|
+
|
|
31
|
+
## 合成阶段事实保真(阶段 3-5:剧情/设定/角色/报告)
|
|
32
|
+
|
|
33
|
+
阶段 3-5 从章节摘要二次合成,离原文已两跳,最易把「摘要没说的」用合理推断补成「看似坐实的事实」——这是拆文事实错误的最大来源(典型:给「双系魔法师」凭空补第二系、把坐骑等级安到骑手头上、给原文没给的字段编一个数值、把出场区间填成连续跨度含没出场的章)。强模型也照样漂移,因为越远离原文,模型越靠世界知识与"合理性"填空。三条硬约束:
|
|
34
|
+
|
|
35
|
+
1. **硬事实必须可溯源**:力量等级、数值、距离、属性、势力数量、谁对谁说了什么、角色出场章节——先检查批次证据或已有事实的章节和定位;命中不到就改写为“资料未明确”或删除,不为聚合二次读取原文。
|
|
36
|
+
2. **缺失写「原文未明确」,禁编造填空**:原文没给的字段,写「原文未明确/节选未涉及」,绝不用近义项、别处的范例或惯例补一个看似合理的值。
|
|
37
|
+
3. **跨指代不串**:相邻实体的属性不互相挪用——坐骑等级≠骑手等级、A 的台词≠B 的台词、本章统计数字≠相邻章数字。
|
|
38
|
+
|
|
39
|
+
落盘后做一次**事实可溯源自检**:抽查设定、角色和报告里的硬事实,逐条核对到本次允许使用的证据源。`raw-original` 可按 `source_locator` 机械定位原文,`existing-results` 只能核对计划列出的旧成果文件;旧成果没有的细节改写为「旧资料未提供」或删除,不借核证之名回读已覆盖章节原文。此自检独立于 Stage 3 的质量阈值——阈值查归类质量,它查事实真伪。
|