@oh-story/dsh 0.1.0
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/LICENSE +21 -0
- package/README.md +38 -0
- package/cordis.patch.yml +3 -0
- package/lib/client.js +1201 -0
- package/lib/client.js.map +7 -0
- package/lib/drama/LICENSE.upstream +21 -0
- package/lib/drama/manifest.json +1012 -0
- package/lib/drama/skills/short-drama/SKILL.md +153 -0
- package/lib/drama/skills/short-drama/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama/assets/creator-decision.example.jsonl +4 -0
- package/lib/drama/skills/short-drama/assets/production-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +36 -0
- package/lib/drama/skills/short-drama/assets/reference-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/references/audience-reveal.md +74 -0
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +94 -0
- package/lib/drama/skills/short-drama/references/creator-workflow.md +82 -0
- package/lib/drama/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +73 -0
- package/lib/drama/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +74 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +79 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +75 -0
- package/lib/drama/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +85 -0
- package/lib/drama/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +72 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +80 -0
- package/lib/drama/skills/short-drama/references/lifecycle-commands.md +130 -0
- package/lib/drama/skills/short-drama/references/look-development.md +52 -0
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +58 -0
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +126 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +142 -0
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +27 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +1963 -0
- package/lib/drama/skills/short-drama/scripts/selftest.py +287 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +187 -0
- package/lib/drama/skills/short-drama-assets/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-assets/assets/character-look.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/continuity.example.jsonl +4 -0
- package/lib/drama/skills/short-drama-assets/assets/decisions.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/location-view.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/occurrences.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/prop-state.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/characters.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/looks.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +89 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +164 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +123 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +146 -0
- package/lib/drama/skills/short-drama-assets/references/location-and-view.md +84 -0
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +111 -0
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +107 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +136 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +171 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +267 -0
- package/lib/drama/skills/short-drama-assets/scripts/selftest.py +89 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +157 -0
- package/lib/drama/skills/short-drama-develop/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +120 -0
- package/lib/drama/skills/short-drama-develop/assets/episode-map.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/story-engine.md +181 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +219 -0
- package/lib/drama/skills/short-drama-develop/references/creative-reference-intake.md +57 -0
- package/lib/drama/skills/short-drama-develop/references/director-brief-craft.md +113 -0
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +509 -0
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +240 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +112 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +109 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/201/214/345/234/272/345/226/234/345/211/247.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +92 -0
- package/lib/drama/skills/short-drama-develop/references/mechanism-loop.md +282 -0
- package/lib/drama/skills/short-drama-develop/references/multi-episode-intake.md +128 -0
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +211 -0
- package/lib/drama/skills/short-drama-develop/references/reveal-reversal-payoff.md +99 -0
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +293 -0
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +88 -0
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +359 -0
- package/lib/drama/skills/short-drama-develop/scripts/episode_intake.py +699 -0
- package/lib/drama/skills/short-drama-develop/scripts/selftest.py +47 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +181 -0
- package/lib/drama/skills/short-drama-image-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +187 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +37 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +128 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +31 -0
- package/lib/drama/skills/short-drama-image-prompts/examples/minimal-image-prompt-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +154 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +231 -0
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +122 -0
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +152 -0
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +96 -0
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +38 -0
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +177 -0
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +140 -0
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +92 -0
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +89 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +443 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +93 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-novel-analyze/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +116 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +124 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +155 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +141 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +67 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/novel_index.py +651 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/selftest.py +51 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +103 -0
- package/lib/drama/skills/short-drama-produce/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +140 -0
- package/lib/drama/skills/short-drama-produce/references/providers/gpt-image-2.md +24 -0
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-music.md +25 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +40 -0
- package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +60 -0
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +1635 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +964 -0
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +134 -0
- package/lib/drama/skills/short-drama-review/SKILL.md +178 -0
- package/lib/drama/skills/short-drama-review/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-review/assets/finding-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/assets/supersession-decision.example.json +42 -0
- package/lib/drama/skills/short-drama-review/assets/verdict-template.json +32 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-findings.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-verdict.json +34 -0
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +114 -0
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +270 -0
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +85 -0
- package/lib/drama/skills/short-drama-review/references/review-method.md +82 -0
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +115 -0
- package/lib/drama/skills/short-drama-review/references/rubric-source-analysis.md +108 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +164 -0
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +166 -0
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +87 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +325 -0
- package/lib/drama/skills/short-drama-review/scripts/selftest.py +87 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-audition.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-template.json +49 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +32 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/revision-lineage.fragment.json +12 -0
- package/lib/drama/skills/short-drama-storyboard/assets/scene-visual-plan.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +241 -0
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +169 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +70 -0
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +157 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +192 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +29 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/selftest.py +191 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +824 -0
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-video-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/coverage-scope.fragment.json +21 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +101 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +212 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-terminal.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +31 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/performance.fragment.json +38 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +46 -0
- package/lib/drama/skills/short-drama-video-prompts/examples/minimal-music-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +240 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +255 -0
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +93 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +304 -0
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +191 -0
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +312 -0
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +168 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +329 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +450 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +327 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/selftest.py +82 -0
- package/lib/drama/skills/short-drama-write/SKILL.md +284 -0
- package/lib/drama/skills/short-drama-write/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-write/assets/beats.jsonl +2 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card-standalone.json +120 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card.json +55 -0
- package/lib/drama/skills/short-drama-write/assets/screenplay.md +36 -0
- package/lib/drama/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +89 -0
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +519 -0
- package/lib/drama/skills/short-drama-write/references/production-format-dialect.md +273 -0
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +51 -0
- package/lib/drama/skills/short-drama-write/references/scene-sound-dramaturgy.md +43 -0
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +260 -0
- package/lib/drama/skills/short-drama-write/references/script-craft.md +558 -0
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +94 -0
- package/lib/drama/skills/short-drama-write/references/substitutable-realization.md +107 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +309 -0
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +1091 -0
- package/lib/drama/skills/short-drama-write/scripts/selftest.py +229 -0
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +416 -0
- package/lib/index.js +756 -0
- package/lib/index.js.map +7 -0
- package/lib/oh-story/LICENSE.upstream +21 -0
- package/lib/oh-story/manifest.json +1351 -0
- package/lib/oh-story/roles/chapter-extractor.md +314 -0
- package/lib/oh-story/roles/character-designer.md +169 -0
- package/lib/oh-story/roles/consistency-checker.md +190 -0
- package/lib/oh-story/roles/narrative-writer.md +294 -0
- package/lib/oh-story/roles/story-architect.md +195 -0
- package/lib/oh-story/roles/story-explorer.md +364 -0
- package/lib/oh-story/roles/story-researcher.md +304 -0
- package/lib/oh-story/skills/browser-cdp/SKILL.md +175 -0
- package/lib/oh-story/skills/story/SKILL.md +116 -0
- package/lib/oh-story/skills/story/VERSION +1 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +327 -0
- package/lib/oh-story/skills/story-cover/references/cover-styles.md +210 -0
- package/lib/oh-story/skills/story-deslop/SKILL.md +445 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-import/SKILL.md +634 -0
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +82 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +134 -0
- package/lib/oh-story/skills/story-import/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +442 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +175 -0
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +329 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +270 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +530 -0
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +559 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +80 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +149 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +133 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +342 -0
- package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +197 -0
- package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +114 -0
- package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +105 -0
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +207 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +78 -0
- package/lib/oh-story/skills/story-long-write/SKILL.md +327 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +302 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-long-write/references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +502 -0
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +209 -0
- package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +188 -0
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-long-write/references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-long-write/references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-long-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +326 -0
- package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +354 -0
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +711 -0
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +622 -0
- package/lib/oh-story/skills/story-long-write/references/quality-checklist.md +184 -0
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +109 -0
- package/lib/oh-story/skills/story-long-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +347 -0
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +140 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +284 -0
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-review/SKILL.md +483 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-review/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-review/references/quality-checklist.md +250 -0
- package/lib/oh-story/skills/story-review/references/quality-rubric.md +55 -0
- package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +18 -0
- package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +19 -0
- package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +20 -0
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +495 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +247 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +278 -0
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-basics.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-design-methods.md +438 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-relations.md +395 -0
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +79 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +490 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +425 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-readers.md +245 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-techniques.md +475 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +685 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +561 -0
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +242 -0
- package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +54 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +212 -0
- package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +433 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +156 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +178 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +166 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +151 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +153 -0
- 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 +210 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +488 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-write/references/quality-checklist.md +222 -0
- package/lib/oh-story/skills/story-short-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +185 -0
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +133 -0
- package/lib/oh-story/skills/story-short-write/references/short-format.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +35 -0
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +158 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +153 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +410 -0
- package/lib/types/client/file-activity.d.ts +30 -0
- package/lib/types/client/file-activity.d.ts.map +1 -0
- package/lib/types/client/file-tree.d.ts +20 -0
- package/lib/types/client/file-tree.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +12 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/jsonl-preview.d.ts +15 -0
- package/lib/types/client/jsonl-preview.d.ts.map +1 -0
- package/lib/types/client/markdown-preview.d.ts +38 -0
- package/lib/types/client/markdown-preview.d.ts.map +1 -0
- package/lib/types/index.d.ts +25 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/native-hooks.d.ts +16 -0
- package/lib/types/native-hooks.d.ts.map +1 -0
- package/lib/types/role-provider.d.ts +6 -0
- package/lib/types/role-provider.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts +10 -0
- package/lib/types/role-tool.d.ts.map +1 -0
- package/lib/types/skill-provider.d.ts +15 -0
- package/lib/types/skill-provider.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +13 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -0
- package/lib/types/workspace-route.d.ts +10 -0
- package/lib/types/workspace-route.d.ts.map +1 -0
- package/lib/types/workspace-security.d.ts +9 -0
- package/lib/types/workspace-security.d.ts.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# 文风生成 SOP
|
|
2
|
+
|
|
3
|
+
> **何时加载**:story-long-analyze Stage 6 执行时。`拆文报告.md` 是阻断级前置依赖;`章节/*_摘要.md`、`章节/第1-3章_深度拆解.md` 与 `原文/原文.txt`(或 `.md`)是质量输入,缺失时严格按下方「失败模式与降级」逐项处理。
|
|
4
|
+
>
|
|
5
|
+
> **输出**:`拆文库/{书名}/文风.md`(模板见 [style-profile-protocol.md](style-profile-protocol.md))。
|
|
6
|
+
|
|
7
|
+
## 6 步流程
|
|
8
|
+
|
|
9
|
+
### Step 1: 读拆文报告核心字段
|
|
10
|
+
|
|
11
|
+
读 `拆文库/{书名}/拆文报告.md`,提取:
|
|
12
|
+
|
|
13
|
+
- **「写法技巧」段** → 用于填文风「可借鉴技巧」的「写法技巧 Top 5」
|
|
14
|
+
- **「可借鉴套路」段** → 用于填文风「可借鉴技巧」的「可借鉴套路 Top 3」
|
|
15
|
+
- **「全书情绪节奏总览 / 伏笔与冲突网络」段** → 用于填文风「分层模仿建议」的进阶层与适配层,只抽象节奏和手法,不搬运具体桥段
|
|
16
|
+
- **基本信息**(书名、题材、总章数)→ 填写文风标题与「生成记录」
|
|
17
|
+
- 「生成记录」只写作者能看懂的信息:参考了哪些资料、抽样看了哪几章、生成时间、文风是否可用;不要写文件时间戳或内部降级标记这类实现术语。
|
|
18
|
+
|
|
19
|
+
### Step 2: 读黄金三章深度拆解
|
|
20
|
+
|
|
21
|
+
读 `章节/第1章_深度拆解.md`、`第2章_深度拆解.md`、`第3章_深度拆解.md`,提取:
|
|
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(未受连载漂移影响)
|
|
105
|
+
|
|
106
|
+
锚点切片:
|
|
107
|
+
|
|
108
|
+
- 用 Step 4 从 `_progress.md` 读取的章节起止行
|
|
109
|
+
- 该章原文从中选 1 段 300-500 字(优先选对话+动作交织的段落,纯独白/纯设定段不选)
|
|
110
|
+
- 用 `Read offset limit` 切出,保留原标点和段落断行
|
|
111
|
+
- **锚点必须逐字连续切片,禁止改写/缩写/跳段/拼接**:narrative-writer 拿锚点当 few-shot 直接学,标注的行号要能回查原文。落盘前逐段抽 1-2 句 `grep -F` 回 `原文/原文.txt`,grep 不到即说明被改写或拼接——重切为忠实连续片段。确需跳过中间过渡段时,分别标各自真实行号(如「行264-267 + 行269-270」)并在引用块内用「(……中略……)」显式断开,不得用一个连续行号区间假装连续
|
|
112
|
+
|
|
113
|
+
### Step 6: 落盘
|
|
114
|
+
|
|
115
|
+
按 [style-profile-protocol.md](style-profile-protocol.md) 模板填写 `拆文库/{书名}/文风.md`:
|
|
116
|
+
|
|
117
|
+
- **文风文件必须留在拆文库**(`拆文库/{书名}/文风.md`),**永不由 analyze 直接写入** `对标/` 或写作项目目录——拆文库是数据源;只有该书被明确选为另一项目的外部对标时,才由 story-import 或 story-long-write 首次引用同步到 `对标/{书名}/`
|
|
118
|
+
- 每段标 `confidence: high/med/low`(内部给写作 agent 判断强弱,普通用户可忽略):
|
|
119
|
+
- `high`:数据直接来自拆文产物(如「写法技巧」直接引用拆文报告)
|
|
120
|
+
- `med`:从样本归纳且样本充足(如基调序列从 ≥10 章摘要统计)
|
|
121
|
+
- `low`:样本不足或采样失败(如锚点缺失、Bash 不可用导致 Step 4 句长统计跳过)
|
|
122
|
+
- 「分层模仿建议」必须分基础层 / 进阶层 / 适配层;基础层只写词汇、句式、描写和对话习惯,进阶层写节奏、伏笔、视角和场景衔接,适配层写哪些可用、哪些容易让本项目错位;明确不复制专名、标志性台词、独特桥段和事件顺序
|
|
123
|
+
- 字数预算:硬上限 ~4000 字。**描述段 ≤ 1800 字 + 锚点 4-6 段 × 300-500 字**
|
|
124
|
+
- 如果 Step 4 失败(章节分隔符识别不出)→ 「生成记录」写 `文风可用:否:无法识别章节分隔符`;原文锚点段全填占位符 "原文缺失,需手动补充",confidence 全 low
|
|
125
|
+
|
|
126
|
+
## 失败模式与降级
|
|
127
|
+
|
|
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 |
|
|
134
|
+
|
|
135
|
+
## 与 chapter-extractor 的关系
|
|
136
|
+
|
|
137
|
+
**不修改 chapter-extractor**。文风直接从既有字段(基调/主题标签/可借鉴要素)整理生成即可。
|
|
138
|
+
|
|
139
|
+
句长 / 标点密度由 Step 4 的跨平台 Python 1-liner 在 Stage 6 主线程直接算出,不依赖 chapter-extractor。
|
|
140
|
+
|
|
141
|
+
## 与写作端的关系
|
|
142
|
+
|
|
143
|
+
- analyze Stage 6 写 `拆文库/{书名}/文风.md`
|
|
144
|
+
- story-import 显式绑定外部对标或 story-long-write 首次引用 `拆文库/{书名}/` 时,同步到项目 `{项目}/对标/{书名}/` 并**包含**文风(与拆文报告同等待遇);不得把正在导入的本书自身作为该外部对标
|
|
145
|
+
- 写作端(story-long-write)的日更循环读 `{项目}/对标/{书名}/文风.md`(按对标书路径查找规则,回退 `拆文库/{书名}/`)
|
|
146
|
+
|
|
147
|
+
## 单独重建文风
|
|
148
|
+
|
|
149
|
+
当前拆文产物仅缺 `文风.md` 时,可直接按本 SOP 跑 6 步(仅 Stage 6),无需重跑 Stage 0-5;前提是 `_progress.md` 满足当前章节边界契约。触发:用户直接说 "为对标书 X 生成文风" 或 "重生 文风"。
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# 文风协议
|
|
2
|
+
|
|
3
|
+
> **何时加载**:story-long-analyze Stage 6 执行前。下游写作 skill 直接读 `文风.md`,不加载本协议。
|
|
4
|
+
|
|
5
|
+
## 产物定义
|
|
6
|
+
|
|
7
|
+
`拆文库/{书名}/文风.md` 是整书级写作技法视图,聚合:
|
|
8
|
+
|
|
9
|
+
- 句长 / 标点 / 段落节奏(从原文采样统计)
|
|
10
|
+
- 对话潜台词模式 + 角色语气区分
|
|
11
|
+
- 章内 + 跨章情绪交替周期(看每章基调如何变化)
|
|
12
|
+
- `拆文报告.md` 已有的「写法技巧」「可借鉴套路」
|
|
13
|
+
- 分层模仿建议(基础层 / 进阶层 / 适配层,强调学手法不搬桥段)
|
|
14
|
+
- 4-6 段 300-500 字原文锚点片段(范例片段用)
|
|
15
|
+
|
|
16
|
+
## 文件路径
|
|
17
|
+
|
|
18
|
+
- **写**:`拆文库/{书名}/文风.md`(analyze 独占)
|
|
19
|
+
- **读**:该书被显式选为另一项目的外部对标时,由 story-import 或 story-long-write 首次引用同步到 `{项目}/对标/{书名}/文风.md`;story-long-write 读项目对标视图(回退拆文库)。story-import 正在重建的本书不走这条同步。
|
|
20
|
+
|
|
21
|
+
## 字数预算
|
|
22
|
+
|
|
23
|
+
- **硬上限 ~4000 字**
|
|
24
|
+
- 描述部分(整体语感 + 对话技法 + 情绪交替模式 + 可借鉴技巧 + 分层模仿建议)≤ 1800 字
|
|
25
|
+
- 原文锚点片段 4-6 段 × 300-500 字 ≈ 1600-2400 字
|
|
26
|
+
- 不可模仿 + 生成记录 ≤ 100 字
|
|
27
|
+
|
|
28
|
+
## 模板
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
# {书名} 文风
|
|
32
|
+
|
|
33
|
+
## 生成记录
|
|
34
|
+
- 参考资料:拆文报告.md、黄金三章深度拆解、章节摘要
|
|
35
|
+
- 抽样章节:第 {K1}/{K10}/{K20} 章(每章约 1000 字)
|
|
36
|
+
- 生成时间:{date}
|
|
37
|
+
- 适用对标书路径:拆文库/{书名}/
|
|
38
|
+
- 文风可用:是 # 若原文缺失或锚点不足,写“否:原因”
|
|
39
|
+
|
|
40
|
+
## 整体语感
|
|
41
|
+
- 句长分布:{由 `style-profile-generator.md` Step 4 的跨平台 Python 1-liner 在 3 章拼接样本上确定性测量——短句(<15字)占比 X%、中句(15-30)Y%、长句(>30)Z%、平均句长 N 字、标点密度 M%。一句概括语感。`confidence: high`(数据由脚本算出,不是抽样估计)。}
|
|
42
|
+
- confidence: high | med | low
|
|
43
|
+
- 标点习惯:{破折号/省略号/句号/感叹号/分号 的高频用法。附 2-3 个原文短片段示例。}
|
|
44
|
+
- confidence: high | med | low
|
|
45
|
+
- 段落节奏:{平均段长、单段单动作 vs 多动作堆叠、断行习惯。}
|
|
46
|
+
- confidence: high | med | low
|
|
47
|
+
|
|
48
|
+
## 对话技法
|
|
49
|
+
- 潜台词模式:{2-3 种典型潜台词手法(问非所答 / 语气反差 / 信息隐瞒等),每种附 1 段原文示例。}
|
|
50
|
+
- confidence: high | med | low
|
|
51
|
+
- 对话标签习惯:{说话动词多样性、动作替代说话标签的频率、对话与动作的穿插比例。}
|
|
52
|
+
- 角色语气区分:{主角和 1-2 个核心配角的口头禅/句式差异,引用原文样本句。}
|
|
53
|
+
|
|
54
|
+
## 情绪交替模式
|
|
55
|
+
- 章内基调切换:{统计章节内情节点基调序列——典型章节是否在 紧张↔轻松 或 热血↔温馨 之间切换、切换频率(每章 N 次)。}
|
|
56
|
+
- confidence: high | med | low
|
|
57
|
+
- 跨章基调周期:{前 20 章「章基调」序列,识别“虐 3 章爽 1 章”之类周期。}
|
|
58
|
+
- 喜剧↔重击的转场手法:{对标书在 轻松→悲伤 锐角转场时用了什么手法,举 1-2 个原文锚点。}
|
|
59
|
+
|
|
60
|
+
## 可借鉴技巧(从 拆文报告.md 直接引用)
|
|
61
|
+
- 写法技巧 Top 5:
|
|
62
|
+
1. {技巧名}:{一句话用法说明}
|
|
63
|
+
2. ...
|
|
64
|
+
- 可借鉴套路 Top 3:
|
|
65
|
+
1. {套路名}:{适用场景}
|
|
66
|
+
2. ...
|
|
67
|
+
|
|
68
|
+
## 分层模仿建议
|
|
69
|
+
- 基础层(必学):{词汇偏好、句式节奏、对话标签、描写重心中最容易迁移的 3-5 条;只学表达习惯,不复制原句}
|
|
70
|
+
- 进阶层(结构):{节奏推进、伏笔埋回、视角切换、场景衔接中最值得复用的 3-5 条;替换人物/场景/道具后再使用}
|
|
71
|
+
- 适配层(本书化):{哪些技法适合当前项目,哪些会导致人设/题材错位;明确不要搬运专名、标志性台词、独特桥段和事件顺序}
|
|
72
|
+
|
|
73
|
+
## 原文锚点片段
|
|
74
|
+
|
|
75
|
+
> 每片段 300-500 字,**用于 narrative-writer 写作时的范例片段**。从 `原文/原文.txt` 按章节分隔符切片。模仿手法、不抄字句。
|
|
76
|
+
|
|
77
|
+
### 片段 A — 基调:紧张
|
|
78
|
+
**出处**:第 {K} 章 第 {段号} 段(行 {L1}-{L2})
|
|
79
|
+
**示范点**:{句长节奏(该处长短如何分布) / 标点位置 / 一笔两用 等}
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
{300-500 字原文}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 片段 B — 基调:悲伤/压抑
|
|
86
|
+
**出处**:第 {K} 章 第 {段号} 段(行 {L1}-{L2})
|
|
87
|
+
**示范点**:{对话潜台词手法}
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
{300-500 字原文}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 片段 C — 基调:轻松/搞笑
|
|
94
|
+
**出处**:第 {K} 章 第 {段号} 段(行 {L1}-{L2})
|
|
95
|
+
**示范点**:{句子节奏 / 角色语气区分}
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
{300-500 字原文}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 片段 D — 基调:热血/爽点
|
|
102
|
+
**出处**:第 {K} 章 第 {段号} 段(行 {L1}-{L2})
|
|
103
|
+
**示范点**:{爽点铺放比 / 动作描写句长}
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
{300-500 字原文}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> 优先覆盖项目可能用到、且对标书中样本充足的基调:紧张、悲伤/压抑、轻松/温馨、热血。按拆文里实际分布挑 4-6 段;缺哪个基调就写“本书该基调样本不足,跳过”,不要编造。
|
|
110
|
+
|
|
111
|
+
## 不可模仿
|
|
112
|
+
- {对标书的明显缺陷或不适合当前项目的技法。可选段落,可空。}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## confidence 字段语义
|
|
116
|
+
|
|
117
|
+
| 值 | 触发条件 | 下游处理 |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| `high` | 数据直接可读(如基调序列从摘要 grep 得出) | narrative-writer 优先采纳,覆盖默认 Gate |
|
|
120
|
+
| `med` | 从样本归纳且样本充足(如看章节基调走向、对话潜台词整理) | narrative-writer 参考,与默认 Gate 协商 |
|
|
121
|
+
| `low` | 样本不足/原文缺失 | narrative-writer 让位回默认 Gate(不强制采纳) |
|
|
122
|
+
|
|
123
|
+
## 可用性语义
|
|
124
|
+
|
|
125
|
+
- `文风可用:是` → 文风可用于写作,narrative-writer 按 confidence 分级使用。
|
|
126
|
+
- `文风可用:否:{原因}` → 文风质量不足(例如原文缺失、锚点全是占位符)。story-explorer 读取时返回 `gaps.profile_degenerate: true`,narrative-writer 跳过文风,按默认 Gates 写作,避免被误导。
|
|
127
|
+
|
|
128
|
+
## 覆盖与不可模仿原则
|
|
129
|
+
|
|
130
|
+
- **覆盖**:文风优先级排在 Gate D(节奏调整)、Gate B(句式去套路)、标点默认习惯之上——这些 Gate 是去 AI 味的**默认值**,文风有更具体的指令时文风赢。
|
|
131
|
+
- **不可覆盖(硬约束)**:banned-words / Gate F 章末禁升华 / 禁止万能/堆叠比喻 / 禁止章末预告 / 字数下限——这些硬约束永远赢,即使文风示范了相反的用法。
|
|
132
|
+
|
|
133
|
+
精确决议表见 `.claude/agents/narrative-writer.md` 的“被调用协议”段。
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: story-long-scan
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」。"
|
|
5
|
+
metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claudecode"}}
|
|
6
|
+
---
|
|
7
|
+
# story-long-scan:长篇网文扫榜
|
|
8
|
+
|
|
9
|
+
你是网络小说市场分析师。你的任务是基于榜单样本识别长篇网文市场格局,并输出可执行的题材候选、风险阈值和验证动作。
|
|
10
|
+
|
|
11
|
+
**核心信念:单本排名只提供线索;跨样本重复模式才算信号。** 排行榜只能证明样本存在;必须通过多榜单、多作品和近期数据判断需求强度。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 核心哲学
|
|
16
|
+
|
|
17
|
+
### 原则 1:扫榜看模式,别只看排名
|
|
18
|
+
|
|
19
|
+
排名会波动,模式必须用重复样本验证。扫榜要提取:反复出现的题材、设定、套路、书名词和开篇卖点。单本上榜只能记为个例;同类样本达到可比数量后,才能标记为趋势候选。
|
|
20
|
+
|
|
21
|
+
### 原则 2:流量型平台和付费型平台看的东西不同
|
|
22
|
+
|
|
23
|
+
番茄看的是流量和完读率,起点看的是订阅和追读,晋江看的是收藏和积分。不同平台的成功标准不同,扫榜方法也不同。
|
|
24
|
+
|
|
25
|
+
### 原则 3:扫榜的目的是找到你能写的爆款题材
|
|
26
|
+
|
|
27
|
+
不按热度直接给结论。每个方向都要做项目可行性判断:素材储备、题材边界、篇幅承载、目标平台样本是否足够。
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 扫榜流程
|
|
32
|
+
|
|
33
|
+
### Phase 1:确认平台和方向
|
|
34
|
+
|
|
35
|
+
问用户:**「你想看哪个平台?(起点/番茄/晋江/其他)有没有关注的题材方向?」**
|
|
36
|
+
|
|
37
|
+
关键判断:
|
|
38
|
+
- 用户已有方向 → 针对该方向做深度扫榜
|
|
39
|
+
- 用户没有方向 → 做全榜概览 + 找趋势
|
|
40
|
+
- 用户想跨平台比较 → 做平台对比分析
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Phase 2:确定数据来源
|
|
45
|
+
|
|
46
|
+
**扫榜需要真实数据支撑。** 根据当前环境选择数据来源:
|
|
47
|
+
|
|
48
|
+
| 优先级 | 模式 | 说明 | 何时用 |
|
|
49
|
+
|--------|------|------|--------|
|
|
50
|
+
| 1 | **脚本采集** | 直接抓取平台页面/SSR 数据,产出结构化文件 | 优先;起点默认不需要 Chrome |
|
|
51
|
+
| 2 | **用户提供** | 用户粘贴榜单截图/文字/链接 | 用户已有数据时 |
|
|
52
|
+
| 3 | **内置知识** | 基于知识库趋势数据做分析 | 无法联网、用户无数据时 |
|
|
53
|
+
|
|
54
|
+
#### 脚本采集模式
|
|
55
|
+
|
|
56
|
+
优先运行对应平台脚本直接采集结构化数据。起点使用移动端 SSR pageContext,默认不需要 Chrome/CDP;番茄等需要浏览器态的平台再使用 `/browser-cdp` 启动 Chrome。
|
|
57
|
+
|
|
58
|
+
**采集流程**:
|
|
59
|
+
1. 选择平台脚本;起点直接运行 `scripts/qidian-rank-scraper.js`,番茄/七猫/晋江等按需启动 browser-cdp
|
|
60
|
+
2. 等待列表元素或 SSR 数据加载,逐条提取字段(排名、书名、作者、题材、字数、推荐/在读数等),判断翻页(起点通常单页50-100条,番茄按题材逐页cap≈20)
|
|
61
|
+
3. 需要补充数据时(标签、简介、最新更新),进入详情页提取
|
|
62
|
+
4. 按规范格式写入 Markdown 文件
|
|
63
|
+
5. 多榜单/多题材时,逐组采集并保存
|
|
64
|
+
|
|
65
|
+
**输出规范**:详见 [references/scan-output-format.md](references/scan-output-format.md),包含各平台字段定义、输出模板。
|
|
66
|
+
|
|
67
|
+
**起点采集目标**(优先运行 `node scripts/qidian-rank-scraper.js --type {榜单} --outdir {输出目录}`;默认 `--mode auto` 会先用 `https://m.qidian.com` 移动端 SSR,PC/CDP 只作回退):
|
|
68
|
+
|
|
69
|
+
| 榜单 | URL | 核心字段 |
|
|
70
|
+
|------|-----|----------|
|
|
71
|
+
| 新人签约新书榜 | qidian.com/rank/newsign/ | 作者·题材·签约·免费/VIP·字数·总推荐·标签·简介 |
|
|
72
|
+
| 签约作者新书榜 | qidian.com/rank/signnewbook/ | 已签约作者新书,新风向信号 |
|
|
73
|
+
| 公众作者新书榜 | qidian.com/rank/pubnewbook/ | 公众作者新书,发现潜力作者 |
|
|
74
|
+
| 新人作者新书榜 | qidian.com/rank/newauthor/ | 新人作品,新人赛道风向 |
|
|
75
|
+
| 三江推荐 | qidian.com/sanjiang/ | 编辑推荐,按周分组(注意:非 /rank/ 路径) |
|
|
76
|
+
| 月票榜 | qidian.com/rank/yuepiao/ | 付费认可度最高指标 |
|
|
77
|
+
| 畅销榜 | qidian.com/rank/hotsales/ | 真金白银投票 |
|
|
78
|
+
| 阅读指数榜 | qidian.com/rank/readindex/ | 阅读量综合指标 |
|
|
79
|
+
| 收藏榜 | qidian.com/rank/collect/ | 读者关注热度 |
|
|
80
|
+
| 原创推荐榜 | qidian.com/rank/recom/ | |
|
|
81
|
+
|
|
82
|
+
**番茄采集目标**:
|
|
83
|
+
|
|
84
|
+
| 榜单 | URL格式 | 核心字段 |
|
|
85
|
+
|------|---------|----------|
|
|
86
|
+
| 男频阅读榜 | fanqienovel.com/rank/1_2_{cat_id} | 按题材逐页采集,在读数为核心指标 |
|
|
87
|
+
| 女频阅读榜 | fanqienovel.com/rank/0_2_{cat_id} | 按题材逐页采集 |
|
|
88
|
+
| 男频新书榜 | fanqienovel.com/rank/1_1_{cat_id} | 新风向信号 |
|
|
89
|
+
| 女频新书榜 | fanqienovel.com/rank/0_1_{cat_id} | 新风向信号 |
|
|
90
|
+
|
|
91
|
+
URL 参数:`/rank/{channel}_{type}_{cat_id}`,channel 0=女频/1=男频,type 1=新书榜/2=阅读榜。番茄列表页有字体反爬,须用 `scripts/fanqie-rank-scraper.js` 从详情页多策略解码书名/作者/题材/评分/标签/简介,配合 browser-cdp 使用:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
node scripts/fanqie-rank-scraper.js --channel 1 --type 2 --outdir {输出目录} # 男频阅读榜
|
|
95
|
+
node scripts/fanqie-rank-scraper.js --channel all --top 15 --outdir {输出目录} # 男女频,每题材前 15 本
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
> **番茄采集后必查文件头 `数据质量`**,异常排查步骤见 [references/scan-output-format.md](references/scan-output-format.md)。
|
|
99
|
+
|
|
100
|
+
**七猫采集目标**:
|
|
101
|
+
|
|
102
|
+
| 榜单 | URL | 核心字段 |
|
|
103
|
+
|------|-----|----------|
|
|
104
|
+
| 排行榜总入口 | qimao.com/paihang | 大热榜/新书榜/完结榜,热度为核心指标 |
|
|
105
|
+
|
|
106
|
+
榜单类型:大热榜(日榜/月榜)、新书榜、完结榜、收藏榜、更新榜,支持男生榜/女生榜切换。
|
|
107
|
+
|
|
108
|
+
大热榜用 `--period day|month|all` 显式选择日榜、月榜或两者(默认 `day`);周期会进入文件头与文件名。非大热榜不区分周期,`--period` 不会重复采集。
|
|
109
|
+
|
|
110
|
+
**晋江采集目标**(`scripts/jjwxc-rank-scraper.js`,默认列表 + 详情两步走):
|
|
111
|
+
|
|
112
|
+
| 榜单 | URL | 核心字段 |
|
|
113
|
+
|------|-----|----------|
|
|
114
|
+
| 收入金榜 | jjwxc.net/topten.php?orderstr=12&t=0 | 收藏数、营养液、积分、字数、状态(详情页 `onebook.php` 补采) |
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --outdir {输出目录} # 列表+详情(默认每频道前10,详情上限100)
|
|
118
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --top 15 --detail-limit 60 # 调整每频道本数/详情总量
|
|
119
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只采列表(快,无核心指标)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
> **晋江硬性要求**:必须有详情页核心指标(收藏数/营养液/积分/字数),脚本默认已补采;采集要点见 [references/scan-output-format.md](references/scan-output-format.md)。
|
|
123
|
+
|
|
124
|
+
**文件命名**:`{平台}{榜单名称}_{YYYYMMDD}.md`,例:`起点新人签约新书榜_20260425.md`
|
|
125
|
+
|
|
126
|
+
#### 采集质量检查(「确定数据来源」完成后必须执行)
|
|
127
|
+
|
|
128
|
+
每完成一个榜单的采集,立即执行以下检查。发现问题当场修复,不留给后续分析。详细规则见 [references/scan-output-format.md](references/scan-output-format.md)「数据清洗与字段约束」。
|
|
129
|
+
|
|
130
|
+
**1. 数据完整性**
|
|
131
|
+
|
|
132
|
+
| 检查项 | 标准 | 处理 |
|
|
133
|
+
|--------|------|------|
|
|
134
|
+
| 条目数量 | >= 15 条有效数据(小平台 >= 10) | 不足则在文件头注明 `[数据稀疏] 实际采集 N 条` |
|
|
135
|
+
| 必填字段 | 排名、书名、作者(缺任一项视为无效) | 无效条目移除,条目数重新计算 |
|
|
136
|
+
| 字段一致性 | 同一榜单内所有条目字段集必须一致 | 不一致条目标记 `[字段缺失: {字段名}]` |
|
|
137
|
+
|
|
138
|
+
**2. 数据清洗**
|
|
139
|
+
|
|
140
|
+
| 污染类型 | 处理 |
|
|
141
|
+
|----------|------|
|
|
142
|
+
| 平台模板文本(番茄「提供XXX完整版在线免费阅读」、七猫「上一页」等) | 删除模板文本,保留正文 |
|
|
143
|
+
| 解析串行(同一条目出现两个不同作品的数据) | 标记 `[解析异常]`,删除并重新采集 |
|
|
144
|
+
| 空字段(空白、`--`、`未知`) | 标记 `[待补]`,优先通过详情页补采 |
|
|
145
|
+
|
|
146
|
+
**3. 简介截断**
|
|
147
|
+
|
|
148
|
+
- 清洗后超过 100 字的简介,在最近的句号/问号/感叹号处截断,加 `...`
|
|
149
|
+
- 平台模板文本不计入 100 字限制(先删除模板,再截断)
|
|
150
|
+
|
|
151
|
+
**4. 文件头质量状态**
|
|
152
|
+
|
|
153
|
+
每个采集文件头部必须包含:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
- 数据质量:[OK / 存在问题]
|
|
157
|
+
- 有效条目:{N} / {总数}
|
|
158
|
+
- 问题摘要:{无 / 具体问题描述}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### 其他数据来源
|
|
162
|
+
|
|
163
|
+
**用户提供操作指引:**
|
|
164
|
+
- 用户提供已有的扫描结果文件路径 → 直接加载进入「数据分析」
|
|
165
|
+
- 用户提供链接 → 用 WebFetch 抓取
|
|
166
|
+
- 用户粘贴/截图 → 手动解析进入分析
|
|
167
|
+
|
|
168
|
+
**内置知识操作指引:**
|
|
169
|
+
- 加载 `references/genre-trends.md`
|
|
170
|
+
- 明确标注:「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### Phase 3:数据分析
|
|
175
|
+
|
|
176
|
+
根据用户选择的平台,结合已获取的数据做以下分析:
|
|
177
|
+
|
|
178
|
+
#### 起点中文网分析维度
|
|
179
|
+
|
|
180
|
+
| 维度 | 看什么 |
|
|
181
|
+
|---|---|
|
|
182
|
+
| 月票榜/推荐票榜 | 付费用户认可度高、持续追读强 |
|
|
183
|
+
| 畅销榜 | 真金白银投票,最硬核的指标 |
|
|
184
|
+
| 签约作者新书榜 | 已签约作者的新作风向 |
|
|
185
|
+
| 公众作者新书榜 | 公众作者的新作,发现潜力股 |
|
|
186
|
+
| 新人作者新书榜 | 新作者作品与新题材信号 |
|
|
187
|
+
| 三江推荐 | 编辑精选推荐,按周分组,发现平台力推作品 |
|
|
188
|
+
| 分类榜单 | 各垂直题材的竞争格局 |
|
|
189
|
+
| 追读率 | 核心指标,决定推荐位分配 |
|
|
190
|
+
|
|
191
|
+
#### 番茄小说分析维度
|
|
192
|
+
|
|
193
|
+
| 维度 | 看什么 |
|
|
194
|
+
|---|---|
|
|
195
|
+
| 阅读榜 | 流量与读者规模,在读数为核心指标 |
|
|
196
|
+
| 新书榜 | 新题材、新风向的早期信号 |
|
|
197
|
+
| 题材分布 | 各品类在读数集中度 |
|
|
198
|
+
| 在读数趋势 | 同题材不同作品的流量差距 |
|
|
199
|
+
| 标签热词 | 简介开头【】内的标签组合,揭示题材细分卖点(如「种田+慢热+西幻」) |
|
|
200
|
+
|
|
201
|
+
#### 七猫小说分析维度
|
|
202
|
+
|
|
203
|
+
| 维度 | 看什么 |
|
|
204
|
+
|---|---|
|
|
205
|
+
| 大热榜 | 热度排名,反映流量集中度 |
|
|
206
|
+
| 新书榜 | 新流量风口 |
|
|
207
|
+
| 完结榜 | 长尾价值作品 |
|
|
208
|
+
| 热度指标 | 七猫核心指标,反映读者活跃度 |
|
|
209
|
+
|
|
210
|
+
#### 晋江文学城分析维度
|
|
211
|
+
|
|
212
|
+
> **采集硬性要求**:若用了 `--list-only` 或文件头标 `[仅列表-无核心指标]`,则该数据不足以支撑以下分析维度,视为不合格。
|
|
213
|
+
|
|
214
|
+
| 维度 | 看什么 |
|
|
215
|
+
|---|---|
|
|
216
|
+
| 金榜 | 综合热度最高 |
|
|
217
|
+
| 季度榜 | 中期趋势 |
|
|
218
|
+
| 红字/黑字 | 积分与负面评价 |
|
|
219
|
+
| 收藏/营养液 | 女频市场的核心指标 |
|
|
220
|
+
|
|
221
|
+
#### 通用分析维度
|
|
222
|
+
|
|
223
|
+
对每个平台的榜单数据,提取:
|
|
224
|
+
|
|
225
|
+
1. **题材分布**:当前榜上哪些题材最多
|
|
226
|
+
2. **新题材信号**:最近新出现的题材类型
|
|
227
|
+
3. **经典题材变化**:老牌题材的走势(上升/稳定/下降)
|
|
228
|
+
4. **字数与更新**:上榜作品的字数区间和更新频率
|
|
229
|
+
5. **书名模式**:上榜作品的命名规律
|
|
230
|
+
6. **开头卖点**:简介/标签中反复出现的关键词
|
|
231
|
+
7. **新元素对比**:与上期/同类榜单对比,标注新出现的人物设定、开篇切入点、桥段套路
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
### Phase 4:输出扫榜报告
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
# 长篇网文扫榜报告:{平台名称}
|
|
239
|
+
|
|
240
|
+
## 市场概况
|
|
241
|
+
- 扫榜时间:{日期}
|
|
242
|
+
- 核心发现:{一句话总结}
|
|
243
|
+
|
|
244
|
+
## 题材热度排行
|
|
245
|
+
| 排名 | 题材 | 榜上数量 | 趋势 | 代表作 |
|
|
246
|
+
|------|------|----------|------|--------|
|
|
247
|
+
| 1 | {题材} | {N本} | ↑/→/↓ | {书名} |
|
|
248
|
+
|
|
249
|
+
## 新题材信号
|
|
250
|
+
- {新出现或正在上升的题材,附依据}
|
|
251
|
+
|
|
252
|
+
## 经典题材动态
|
|
253
|
+
- {老牌题材的现状,附依据}
|
|
254
|
+
|
|
255
|
+
## 新元素提取
|
|
256
|
+
### 新人物设定模式
|
|
257
|
+
- {新模式描述 + 代表作}
|
|
258
|
+
|
|
259
|
+
### 新开篇切入点
|
|
260
|
+
- {新切入点描述 + 代表作}
|
|
261
|
+
|
|
262
|
+
### 新桥段/套路
|
|
263
|
+
- {新桥段描述 + 代表作}
|
|
264
|
+
|
|
265
|
+
## 关键数据洞察
|
|
266
|
+
- 字数区间:上榜作品集中在 {X}-{Y} 万字
|
|
267
|
+
- 更新频率:日均 {X} 字为主流
|
|
268
|
+
- 书名特征:{命名模式总结}
|
|
269
|
+
- 标签热词:{高频标签词}
|
|
270
|
+
|
|
271
|
+
## 值得关注的方向
|
|
272
|
+
1. {方向 + 为什么值得关注 + 可行性评估}
|
|
273
|
+
2. {方向 + 为什么值得关注 + 可行性评估}
|
|
274
|
+
3. {方向 + 为什么值得关注 + 可行性评估}
|
|
275
|
+
|
|
276
|
+
## 一句话
|
|
277
|
+
{犀利的总结}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
### Phase 5:选题决策
|
|
283
|
+
|
|
284
|
+
把扫榜结果变成能直接用的选题建议,产出 `选题决策.md`。完整方法(选题四步 + 可行性判断 + 输出模板)见 [references/topic-decision.md](references/topic-decision.md)。
|
|
285
|
+
|
|
286
|
+
**如信息不足,向用户补齐项目条件:**「目标平台、已有素材、擅长题材/写作约束、计划篇幅是什么?」
|
|
287
|
+
|
|
288
|
+
按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题(能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作),写入**本次扫榜输出目录** `{outdir}/选题决策.md`
|
|
289
|
+
|
|
290
|
+
**硬规则:**
|
|
291
|
+
- 可行性上限:背靠榜单标了 `[数据稀疏]` 或同方向样本 <15(小平台<10)⇒ 不许给"高",强制降到"中" + 写明先验证;内置知识模式一律给"中"。
|
|
292
|
+
- 不输出项目素材无法支撑的题材;不只看热度,必须给可行性和失败风险;不忽略平台调性差异(起点男频和晋江女频审美完全不同)。
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 平台特性速查
|
|
297
|
+
|
|
298
|
+
| 平台 | 调性 | 核心指标 | 主力读者 | 适合类型 |
|
|
299
|
+
|------|------|----------|----------|----------|
|
|
300
|
+
| 起点中文网 | 男频为主,硬核爽文 | 追读率、月票 | 18-35 男性 | 玄幻、都市、科幻、游戏 |
|
|
301
|
+
| 番茄小说 | 下沉市场,免费阅读 | 在读数、阅读榜排名 | 大众读者 | 脑洞、快节奏、强爽感 |
|
|
302
|
+
| 晋江文学城 | 女频为主,精品路线 | 收藏、营养液、积分 | 16-30 女性 | 言情、纯爱、衍生 |
|
|
303
|
+
| 七猫小说 | 下沉市场,免费阅读 | 热度、大热榜排名 | 大众读者 | 快节奏爽文 |
|
|
304
|
+
| 刺猬猫 | 二次元、轻小说 | 追读 | 15-25 ACG | 同人、二次元、轻小说 |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 流程衔接
|
|
309
|
+
|
|
310
|
+
**流水线:** 长篇
|
|
311
|
+
**位置:** 扫榜(第 1/3 步)
|
|
312
|
+
|
|
313
|
+
| 时机 | 跳转到 | 命令 |
|
|
314
|
+
|---|---|---|
|
|
315
|
+
| 找到方向 | story-long-analyze | `/story-long-analyze` |
|
|
316
|
+
| 直接开写 | story-long-write | `/story-long-write` |
|
|
317
|
+
| 更适合短篇 | story-short-scan | `/story-short-scan` |
|
|
318
|
+
|
|
319
|
+
## 参考资料
|
|
320
|
+
|
|
321
|
+
按需加载以下文件:
|
|
322
|
+
|
|
323
|
+
| 文件 | 何时加载 |
|
|
324
|
+
|------|----------|
|
|
325
|
+
| [references/topic-decision.md](references/topic-decision.md) | 「选题决策」:选题四步 + 可行性判断 + 选题决策.md 模板 |
|
|
326
|
+
| [references/reader-profiling.md](references/reader-profiling.md) | 需要分析目标读者画像时 |
|
|
327
|
+
| [references/genre-trends.md](references/genre-trends.md) | 查看题材趋势候选、切入约束和样本校验规则时 |
|
|
328
|
+
| [references/publishing-guide.md](references/publishing-guide.md) | 平台适配+推荐机制校验+数据指标+简介设计 |
|
|
329
|
+
| [references/scan-output-format.md](references/scan-output-format.md) | 脚本/CDP 采集字段定义+输出模板 |
|
|
330
|
+
| [scripts/cdp-utils.js](scripts/cdp-utils.js) | CDP 公共工具函数(ab/sleep/evalJSON/safeStr/scrollLoad/getArg),各采集脚本共用 |
|
|
331
|
+
| [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) | 番茄榜单采集,分批请求防超时,带连通性自检+标题解析率质量标注,配合 browser-cdp 使用 |
|
|
332
|
+
| [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) | 起点榜单采集(畅销/月票/新书等),默认移动端 SSR 提取,PC/CDP 回退 |
|
|
333
|
+
| [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) | 七猫榜单采集(大热/新书/完结等),tab 切换(失败重试)+滚动加载,按 bookId 取书名回填作品页链接,带连通性自检+链接/热度命中率标注 |
|
|
334
|
+
| [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) | 晋江榜单采集(收入金榜/月榜等),按频道分组 |
|
|
335
|
+
| [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) | 刺猬猫榜单采集(点击/收藏/月票等),单页 9 榜提取,按 bookId 归一书名回填作品页链接,带连通性自检+空结果重试+链接命中率标注 |
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## 语言
|
|
340
|
+
|
|
341
|
+
- 跟随用户的语言回复,用户用什么语言就用什么语言回复
|
|
342
|
+
- 中文回复遵循《中文文案排版指北》
|