@oh-story/dsh 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -12
- package/lib/client.js +2970 -537
- package/lib/client.js.map +4 -4
- package/lib/drama/manifest.json +218 -178
- package/lib/drama/skills/short-drama/SKILL.md +110 -117
- package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +26 -77
- package/lib/drama/skills/short-drama/references/creator-documents.md +204 -0
- package/lib/drama/skills/short-drama/references/creator-workflow.md +73 -63
- package/lib/drama/skills/short-drama/references/knowhow-index.md +5 -0
- package/lib/drama/skills/short-drama/references/look-development.md +2 -3
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
- package/lib/drama/skills/short-drama/references/reference-roles.md +32 -135
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +16 -19
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
- package/lib/drama/skills/short-drama-assets/SKILL.md +59 -170
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +6 -12
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +21 -2
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +12 -105
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +45 -155
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +12 -13
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +8 -65
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
- package/lib/drama/skills/short-drama-produce/SKILL.md +67 -15
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
- package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
- package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +27 -19
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +116 -238
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
- package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +12 -7
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +27 -62
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +21 -23
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +16 -71
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +123 -230
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +24 -6
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +35 -27
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +13 -10
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +17 -73
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +74 -268
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
- package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
- package/lib/index.js +971 -46
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/LICENSE +21 -0
- package/lib/novel-to-game/README.md +180 -0
- package/lib/novel-to-game/README_ZH.md +178 -0
- package/lib/novel-to-game/VERSION +1 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
- package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
- package/lib/novel-to-game/manifest.json +508 -0
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
- package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
- package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
- package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
- package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
- package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
- package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
- package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
- package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
- package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
- package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
- package/lib/oh-story/manifest.json +419 -309
- package/lib/oh-story/roles/character-designer.md +4 -4
- package/lib/oh-story/roles/consistency-checker.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +41 -42
- package/lib/oh-story/roles/story-architect.md +19 -23
- package/lib/oh-story/roles/story-explorer.md +8 -5
- package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
- package/lib/oh-story/skills/story/SKILL.md +16 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-import/SKILL.md +21 -8
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
- package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
- package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/story-long-write/references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-long-write/references/{reversal-toolkit.md → long-reversal.md} +18 -32
- package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +5 -4
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +17 -11
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-review/SKILL.md +26 -17
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +85 -41
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
- package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/story-setup/references/agent-references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
- package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-setup/references/agent-references/long-reversal.md} +18 -32
- package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
- package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
- package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → short-reversal.md} +29 -23
- package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
- package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
- package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
- package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
- package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
- package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
- package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
- package/lib/types/client/drama-production-view.d.ts +34 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -0
- package/lib/types/client/drama-production.d.ts +92 -0
- package/lib/types/client/drama-production.d.ts.map +1 -0
- package/lib/types/client/file-activity.d.ts +9 -2
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-intents.d.ts +9 -0
- package/lib/types/client/production-intents.d.ts.map +1 -0
- package/lib/types/client/production-prompts.d.ts +9 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -0
- package/lib/types/client/production-runtime.d.ts +58 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -0
- package/lib/types/client/video-studio.d.ts +41 -0
- package/lib/types/client/video-studio.d.ts.map +1 -0
- package/lib/types/client/workbench-ui.d.ts +5 -0
- package/lib/types/client/workbench-ui.d.ts.map +1 -0
- package/lib/types/game-verification.d.ts +16 -0
- package/lib/types/game-verification.d.ts.map +1 -0
- package/lib/types/index.d.ts +5 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/production-intent.d.ts +21 -0
- package/lib/types/production-intent.d.ts.map +1 -0
- package/lib/types/production-tool.d.ts +5 -0
- package/lib/types/production-tool.d.ts.map +1 -0
- package/lib/types/reference-tool.d.ts +6 -0
- package/lib/types/reference-tool.d.ts.map +1 -0
- package/lib/types/role-provider.d.ts.map +1 -1
- package/lib/types/role-tool.d.ts +3 -1
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts +7 -0
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts +42 -0
- package/lib/types/video-project.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +6 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts +20 -0
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +282 -0
- package/lib/video-recap/LICENSE +21 -0
- package/lib/video-recap/README.en.md +257 -0
- package/lib/video-recap/README.md +255 -0
- package/lib/video-recap/manifest.json +684 -0
- package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
- package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
- package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
- package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
- package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
- package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
- package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
- package/lib/video-recap/skills/video-script/SKILL.md +248 -0
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
- package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
- package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
- package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
- package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
- package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
- package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
- package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
- package/package.json +57 -41
- package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
- /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
- /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
#
|
|
2
|
+
# 源文质量评估清单
|
|
3
3
|
|
|
4
4
|
> **定位**:story-short-analyze(短篇拆书)的质量自检清单,评估**拆解对象(源文)**的成文质量时逐项核对。
|
|
5
5
|
> 拆书管道本身的质量检查见 output-templates.md「质量检查必填字段」;所有数值阈值的唯一权威定义见 material-decomposition.md「质量标准」与「节奏分析」,本清单不自定义数值。
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
>
|
|
9
9
|
> 1. **拆书管道质量检查**(执行过程中)→ [output-templates.md「质量检查必填字段」](output-templates.md)。每条带 `[BLOCK]` / `[WARN]` 标注;`[BLOCK]` 缺失 → 「BLOCK 项扫描」阻断。
|
|
10
10
|
> 2. **评估对象(源文)质量**(拆什么样的料)→ 本文件。回答"这篇源文写得好不好"。
|
|
11
|
-
> 3. **拆文报告本身质量**(写什么样的报告)→ [
|
|
11
|
+
> 3. **拆文报告本身质量**(写什么样的报告)→ [analysis-report-style.md](analysis-report-style.md)。报告自身由「拆文报告表达自检」守门;源文中的套话和 AI 腔仍是分析对象,不作输入过滤。
|
|
12
12
|
|
|
13
13
|
## 目录
|
|
14
14
|
|
|
15
15
|
- [一、通用检查](#一通用检查)
|
|
16
|
-
- [
|
|
16
|
+
- [二、通用五维评估](#二通用五维评估)
|
|
17
17
|
- [三、短篇专项](#三短篇专项)
|
|
18
18
|
|
|
19
19
|
## 一、通用检查
|
|
@@ -76,27 +76,7 @@
|
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
79
|
-
##
|
|
80
|
-
|
|
81
|
-
### 黄金三章检查
|
|
82
|
-
- [ ] 第一章前 500 字有钩子?
|
|
83
|
-
- [ ] 主角第一章就出场?
|
|
84
|
-
- [ ] 第一章有事件(不是纯铺垫)
|
|
85
|
-
- [ ] 第二章有升级(矛盾加深)
|
|
86
|
-
- [ ] 第三章有追读理由(给出继续看的动力)
|
|
87
|
-
- [ ] 前三章有至少 2 个爽点?
|
|
88
|
-
- [ ] 世界观没有大段说明文?
|
|
89
|
-
- [ ] 每章结尾有悬念?
|
|
90
|
-
|
|
91
|
-
### 节奏检查
|
|
92
|
-
- [ ] 最近 5 章是否有明确进展?
|
|
93
|
-
- [ ] 爽点间隔是否超过 5000 字?
|
|
94
|
-
- [ ] 有没有连续 2 章以上没有冲突?
|
|
95
|
-
|
|
96
|
-
### 人物检查
|
|
97
|
-
- [ ] 主角行为符合人设?
|
|
98
|
-
- [ ] 配角是否有存在感?
|
|
99
|
-
- [ ] 反派逼格是否匹配当前阶段?
|
|
79
|
+
## 二、通用五维评估
|
|
100
80
|
|
|
101
81
|
### 五维评分标准
|
|
102
82
|
|
|
@@ -176,46 +156,45 @@
|
|
|
176
156
|
禁忌分布:爽1 → 爽2 → 爽3 → 爽4(无铺垫,爽感疲劳)
|
|
177
157
|
```
|
|
178
158
|
|
|
179
|
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
159
|
+
分析规则:
|
|
160
|
+
- 标出场景或小节实际改变了风险、信息、关系、资源、决定、行动还是读者理解,以及上一个选择的后果在哪里落地
|
|
161
|
+
- 区分直接冲突与任务、证据、等待、手艺、空间、关系等压力来源,不拿固定字数间隔判优劣
|
|
162
|
+
- 记录最大爽点由哪些前因、选择和证据汇合而成,以及之后留了多少后果篇幅;不按固定百分比判定
|
|
163
|
+
- 记录结尾采用情绪落点、局部兑现、明确余波或其他收束方式及其效果
|
|
184
164
|
|
|
185
165
|
### 对话密度检查
|
|
186
166
|
|
|
187
|
-
|
|
167
|
+
| 分析项 | 记录内容 | 避免误判 |
|
|
168
|
+
|--------|----------|----------|
|
|
169
|
+
| 对白功能 | 是否改变信息、策略、权力、关系或下一步行动 | 不用全文占比代替逐场景功能判断 |
|
|
170
|
+
| 无对白场景 | 由任务、物件、证据、空间、等待或手艺中的哪一项推动 | 不把无对白直接判成“太干” |
|
|
171
|
+
| 对话节奏 | 话轮长短如何表现人物权力和现场压力 | 区分有效短促与碎片化微型问答 |
|
|
172
|
+
| 对白占比/条数 | 作为该文本及同题材、同平台样本的描述数据 | 不设跨题材通过阈值 |
|
|
188
173
|
|
|
189
|
-
|
|
190
|
-
|------|----------|--------|
|
|
191
|
-
| 对话占全文比 | 见 material-decomposition.md「节奏分析」 | <30%(太干)或>75%(太水) |
|
|
192
|
-
| 每章对话条数 | 12-18条/千字 | <8条(缺交互)或>25条(碎片化) |
|
|
193
|
-
| 伤人性对话占比 | 35-45%(虐文)/ 20-30%(爽文) | 虐文<20%(不够痛)/ 爽文>40%(太压抑) |
|
|
174
|
+
### 主角筹码与情绪分析(打脸/复仇文专用)
|
|
194
175
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
|
198
|
-
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
| 主角台词是否短于反派? | 平均短30-50%——越短越有力 |
|
|
203
|
-
| 是否有"审判式对话"? | 至少2处(主角提问→对方自爆) |
|
|
176
|
+
| 分析项 | 记录内容 |
|
|
177
|
+
|--------|----------|
|
|
178
|
+
| 主角的冷静如何可见? | 记录取证、选择、延迟回应或资源调度;不把端水杯、整理西装、转笔当通用标准 |
|
|
179
|
+
| 情绪失控产生什么后果? | 记录累积压力、位置及其对行动、关系或代价的改变,不按次数和百分比判定 |
|
|
180
|
+
| 主角与反派的反差来自哪里? | 记录筹码、判断、行动后果或信息差,不预设反派必须歇斯底里 |
|
|
181
|
+
| 台词长短如何体现权力? | 结合打断、沉默、回避和现场筹码分析,不设固定比例 |
|
|
182
|
+
| 审判式对话是否有效? | 记录提问是否迫使对方选择、暴露矛盾或改变关系,不按处数判定 |
|
|
204
183
|
|
|
205
184
|
### 证据链完整性检查(复仇/打脸文专用)
|
|
206
185
|
|
|
207
186
|
| 检查项 | 标准 |
|
|
208
187
|
|--------|------|
|
|
209
|
-
|
|
|
188
|
+
| 证据如何释放? | 记录每次释放如何改变行动或读者模型;完整证据链集中落地也可成立 |
|
|
210
189
|
| 每个证据是否有铺垫? | 前文必须埋过线索 |
|
|
211
|
-
|
|
|
190
|
+
| 反派反应是否有因果? | 记录其筹码、误判和损失,识别是否机械重复“先得意再被打脸” |
|
|
212
191
|
| 最终证据是否最致命? | 最后一个证据要改变全局认知 |
|
|
213
|
-
|
|
|
192
|
+
| 是否使用"定时炸弹"证据? | 分析提前布局是否符合主角能力、时间线和取证条件,不要求必有 |
|
|
214
193
|
|
|
215
194
|
### 毒点/代入感/震惊/开头/结尾/情绪/期待感速查
|
|
216
195
|
|
|
217
|
-
>
|
|
218
|
-
>
|
|
196
|
+
> **本表评估的是源文**(拆解对象写得好不好),毒点判断必须引用源文证据,不替源文改写。
|
|
197
|
+
> **不要把本表用来评估拆文报告本身**:报告自身走「拆文报告表达自检」+ [analysis-report-style.md](analysis-report-style.md)。
|
|
219
198
|
> **拆文管道完成度** 走 [output-templates.md「质量检查必填字段」](output-templates.md) 的 `[BLOCK]` / `[WARN]` 清单。
|
|
220
199
|
|
|
221
200
|
| 检查项 | 标准 |
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
| 句式节奏 | 长短是否交错:叙述以逗号长句为主、短句只落情绪节点,无通篇短句的电报体 |
|
|
29
29
|
| 口语程度 | 有无书面腔/翻译腔残留 |
|
|
30
30
|
| 情绪节奏 | 有无明确情绪曲线(盐言最看重情绪拉扯) |
|
|
31
|
-
| 反转位置 |
|
|
32
|
-
|
|
|
31
|
+
| 反转位置 | 是否在前因和证据足以支撑时发生,并为人物选择与后果留下篇幅;位置百分比只作记录 |
|
|
32
|
+
| 章尾承接 | 记录未完成动作、新信息、局部兑现、关系变化、余韵或明确下一步如何承接;不要求每章同一种钩子 |
|
|
33
33
|
|
|
34
34
|
## 盐言类型与情绪模式
|
|
35
35
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: story-short-scan
|
|
3
3
|
version: 1.0.0
|
|
4
4
|
description: "短篇网文扫榜。分析知乎盐言、七猫、黑岩、点众等平台热门短篇数据,捕捉风口题材。触发方式:/story-short-scan、/短篇扫榜、「短篇什么火」「知乎故事排行」。"
|
|
5
|
-
metadata: {"openclaw":{"source":"https://github.com/
|
|
5
|
+
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
|
|
6
6
|
---
|
|
7
7
|
# story-short-scan:短篇网文扫榜
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: story-short-write
|
|
3
3
|
version: 1.0.0
|
|
4
4
|
description: "短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。"
|
|
5
|
-
metadata: {"openclaw":{"source":"https://github.com/
|
|
5
|
+
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
|
|
6
6
|
---
|
|
7
7
|
# story-short-write:短篇网文写作
|
|
8
8
|
|
|
@@ -10,16 +10,28 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
10
10
|
|
|
11
11
|
**执行规则:短篇以情绪为目标,所有内容为情绪服务。**
|
|
12
12
|
|
|
13
|
+
## 阶段 Reference Gate(强制,先读后写)
|
|
14
|
+
|
|
15
|
+
任何创建或修改故事文件的动作之前,先判断当前 Phase,并完成该阶段的 reference gate。**只读本 SKILL.md 不算完成门禁。**
|
|
16
|
+
|
|
17
|
+
Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完整读取(分块直到 EOF;`rg` 检索或局部摘读不算读完):
|
|
18
|
+
|
|
19
|
+
1. `references/writing-workflow.md`、`references/submission-craft.md`、`references/short-craft.md`、`references/short-reversal.md`
|
|
20
|
+
2. 核心 10 题材再读取一个精确的 `references/genre-styles/{题材}.md`;冷门题材改读 `references/genre-writing-formulas.md`
|
|
21
|
+
3. 有反派或真相揭露设计时再读 `references/villain-and-reveal.md`;不适用时在设计校验区写明原因
|
|
22
|
+
|
|
23
|
+
任一必需路径不存在、不可读或题材尚未解析到唯一 reference 时,立即停止,报告准确路径/待定项,**不得创建或修改故事产物**。不要把“已读 references”的回执写进故事文件;要把选出的题材招式、反转计算等应用证据写进正常设计字段。Phase 3/4 的按需加载仍分别服从下文“写前准备”和精修检查,不得用早先读过代替当前任务完整回读。
|
|
24
|
+
|
|
13
25
|
---
|
|
14
26
|
|
|
15
|
-
> Agent
|
|
27
|
+
> Agent 只查当前端 canonical 目录(Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`),不借其他端文件误判。Claude/OpenCode 用 `subagent_type`,Codex 用 `agent_type`,Antigravity 用 `invoke_subagent` + `TypeName`;能力/文件缺失、unknown agent 或 ZCode 3.3.4 时报告 `Fallback: project custom agents unavailable -> solo` 并 solo/direct。
|
|
16
28
|
>
|
|
17
|
-
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version:
|
|
29
|
+
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 29` 不一致时(标记缺失、字段缺失/非整数、小于或大于 29)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 29)` 并提示重新运行 `/story-setup` 后新开会话;大于 29 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
|
|
18
30
|
|
|
19
31
|
## 执行规则
|
|
20
32
|
|
|
21
33
|
1. **先定情绪,再定故事**。动笔前必须确定目标情绪(意难平/反转震撼/爽感释放/治愈温暖/细思极恐/共鸣感动),所有内容为这个情绪服务。
|
|
22
|
-
2.
|
|
34
|
+
2. **一个核心支点撑一篇**。反转型围绕一次主揭示蓄力;无反转型围绕报应兑现或甜度递进积累期待。不多线、不铺世界观。
|
|
23
35
|
3. **每句话必须有用**。不推动剧情、不铺垫反转、不推高情绪的句子 → 删。
|
|
24
36
|
4. **开头 3 句定生死,结尾定传播**。开头必须包含钩子,结尾必须有余韵。
|
|
25
37
|
5. **默认第一人称**。短篇网文(盐言/七猫短篇等)绝大多数用第一人称,代入感最强。除非题材明确需要第三人称(如多视角悬疑),否则一律用「我」。
|
|
@@ -39,6 +51,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
39
51
|
- **从验证过的模式出发**:有对标书就先拆解,没有就从 `genre-styles/{题材}.md`(核心 10 题材)或 `genre-writing-formulas.md`(冷门题材)找对应的短篇剧情模式
|
|
40
52
|
- **定方向就换风格**:题材方向一旦确定(如追妻火葬场),立刻加载 `references/genre-styles/{题材}.md`——正文的腔调、开篇、钩子、情绪烈度、对话金句、招式、收尾全部切到该题材。核心 10 题材(追妻火葬场 / 世情打脸 / 复仇打脸 / 总裁豪门 / 宅斗宫斗 / 民俗怪谈 / 悬疑 / 甜宠 / 双男主 / 沙雕脑洞)有专属风格包,其中追妻含 现代/古代/民国 时代变体与 小三文学/死人文学 流派分支;冷门题材用 `genre-writing-formulas.md` 的结构骨架兜底,腔调仍按 `short-craft.md` 通用底座
|
|
41
53
|
- **只加载必需信息**:写每节前明确目标情绪和要用的技法,答不出就先回读参考
|
|
54
|
+
- **复用作者习惯**:若作者记忆 state 已存在,正文前用 `scripts/author_memory_commit.py query --kind prose_style --kind story_design` 获取相关 active 条目(总输出 ≤2KB),传给实际正文/改写 agent 作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;硬门禁、当前请求和本篇设定优先。明确长期声明在收尾用 `record` 写入并回传回执,细则见 [references/author-memory.md](references/author-memory.md)。
|
|
42
55
|
|
|
43
56
|
---
|
|
44
57
|
|
|
@@ -138,16 +151,16 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
138
151
|
### 基本信息
|
|
139
152
|
- 标题(暂定):{}
|
|
140
153
|
- 目标字数:{} 字(短篇通常 8000-20000 字)
|
|
141
|
-
- 目标平台:{}
|
|
154
|
+
- 目标平台:{知乎盐选 / 小程序 / 番茄短篇}(三选一)
|
|
142
155
|
- 情绪目标:{读者读完的感受}
|
|
143
156
|
|
|
144
157
|
### 一句话梗概
|
|
145
158
|
{主角 + 困境 + 反转 + 情绪落点}
|
|
146
159
|
|
|
147
|
-
###
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
160
|
+
### 核心支点
|
|
161
|
+
- 类型:{身份/视角/动机/时间线/信息/认知反转,或无反转}
|
|
162
|
+
- 核心兑现:{一句话描述主揭示;无反转时写报应或关系兑现}
|
|
163
|
+
- 铺垫/期待:{关键铺垫点;无反转时写读者等待兑现的因果或关系节拍}
|
|
151
164
|
|
|
152
165
|
### 情绪设计
|
|
153
166
|
- 开头情绪:{}(强度 {1-10})
|
|
@@ -171,10 +184,33 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
171
184
|
1. 定平台基调 + 加载题材风格包 → 先读 `references/submission-craft.md` 定投稿平台(知乎/小程序/番茄),正文视角、矛盾烈度、章末落点随之切换;再读 `references/genre-styles/{题材}.md`(核心 10 题材)+ 通用底座 `references/short-craft.md`,从招式库选 2-3 个核心招式(如追妻的白月光触发链 / 信物翻转 / 火葬场预告),写入 设定.md「题材招式」区,全程照此招式与腔调写
|
|
172
185
|
2. 设计反派(如有)→ 加载 `villain-and-reveal.md`
|
|
173
186
|
3. 确定揭露方式 → 同上
|
|
174
|
-
4. 编写 小节大纲.md(格式见 writing-workflow.md
|
|
187
|
+
4. 编写 小节大纲.md(格式见 writing-workflow.md):短篇只做轻量蓝图,每节包含结构段/五段功能、人物/关系或其他状态变化、因果/逻辑链、结尾承接/钩子,不套长篇完整章节蓝图。**标出付费点卡在哪一节末**(见 `submission-craft.md`「付费点」:用未完成动作、身份/证据变化或两难选择形成真实断点);用反推法先想透付费点那一节,再倒排前后。每节可选一个任务卡点,但必须服务情绪升级、证据推进、关系撕裂、反转铺垫或反击动作;没有就不强补
|
|
175
188
|
5. 反转信息差验证(公式见 writing-workflow.md)
|
|
176
189
|
6. 伏笔回查清单(标准见 writing-workflow.md)
|
|
177
190
|
|
|
191
|
+
`设定.md` 必须包含以下机器可验收字段(内容本身也是后续写作依据,不是读文件回执):
|
|
192
|
+
|
|
193
|
+
```markdown
|
|
194
|
+
## Phase 2 设计校验
|
|
195
|
+
- 题材参考:`references/genre-styles/{题材}.md`(冷门题材写 `references/genre-writing-formulas.md`)
|
|
196
|
+
- 核心招式:{招式一};{招式二}[;{招式三}]
|
|
197
|
+
- 反派设计:不适用({原因})
|
|
198
|
+
- 反转类型:{身份/视角/动机/时间线/信息/认知/无反转}
|
|
199
|
+
- 反转位置:第 {X} 节 ÷ 共 {Y} 节 = {Z}%
|
|
200
|
+
- 付费点:第 {N} 节末
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
有反派时用 `villain-and-reveal.md` 的身份、动机、作恶方式、致命弱点、报应五字段替换“不适用”。`short-reversal.md` 判断确属无反转题材时,写 `反转类型:无反转` 和 `反转位置:不适用({报应兑现/甜度递进等原因})`,不要硬编节号。`小节大纲.md` 必须使用 `writing-workflow.md` 规定的固定 12 列 Markdown 表格,并在对应节末明确标出“付费点”。
|
|
204
|
+
|
|
205
|
+
#### Phase 2 完成门禁
|
|
206
|
+
|
|
207
|
+
两份文件生成后、向用户声明构思完成或进入 Phase 3 前,运行 `node scripts/check-phase2-contract.js --json {短篇目录}`:
|
|
208
|
+
|
|
209
|
+
- exit 0:Phase 2 机械契约通过,才可进入下一阶段;这不替代故事质量判断
|
|
210
|
+
- exit 1:只把 `repair_scope` 中的检查 ID、证据、期望、reference 路径和修复范围交给本轮 writer;只改失败字段,再运行同一命令
|
|
211
|
+
- 最多做 2 轮定向 repair;仍失败则停止并报告剩余检查 ID,不得声称 Phase 2 已完成
|
|
212
|
+
- exit 2、脚本缺失或不可执行:报告 verifier 不可用,不得用泛化“自检”替代后继续
|
|
213
|
+
|
|
178
214
|
#### Agent 调用:character-designer
|
|
179
215
|
|
|
180
216
|
设计任务完成后,如果项目已部署 character-designer agent(查找顺序见顶部),可 spawn `Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}")` 辅助角色设定和语言风格档案。如 agent 不可用,由主线程直接执行。
|
|
@@ -189,6 +225,8 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
189
225
|
|
|
190
226
|
> 术语说明:Phase 3 按「段」划分叙事结构(开头段/铺垫段/升级段/反转段/结尾段),每段包含若干「小节」(数字编号的 beat)。「场景」指写作时的具体画面。
|
|
191
227
|
|
|
228
|
+
**交付参数先锁定**:用户明确的字数范围优先,逐字取其最小值/最大值与节数;只给单一目标时用目标的 95%-105%;都未给时用 8000-20000 字和大纲节数。后文的默认字数不得覆盖用户范围。
|
|
229
|
+
|
|
192
230
|
**写前准备**(每个场景写前执行 2 步,是核心方法的落地:确认情绪目标 → 召回技法模块):
|
|
193
231
|
- **步骤 1:记忆+召回**:① 本场景目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 具体用在哪个段落?答不出 → 先回读参考再动笔。如有 `对标/` 或 `拆文库/` 结构化产出,按“对标上下文加载”规则检索与当前场景最相关的结构/情绪/反转/写作手法模块作为参考,并写入“拆文召回摘要”
|
|
194
232
|
- **多对标书时**:参 `references/cross-book-recall.md`,副对标/参考对标按阶段预算进入"副对标召回摘要";正文只传摘要,不传副书文风或原文
|
|
@@ -213,38 +251,23 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
213
251
|
- 每批写完后更新“已写小节摘要”(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句)。
|
|
214
252
|
- 下一批先读该摘要和 `正文.md` 尾部 300-500 字再续写。
|
|
215
253
|
- 只有用户明确要求子代理、主会话上下文不足,或需要隔离试写时,才检查 narrative-writer agent(查找顺序见顶部)。
|
|
216
|
-
- 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)
|
|
254
|
+
- 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,只传项目目录、输出文件、情绪目标、题材风格包、小节大纲、角色、主/副对标召回摘要、作者偏好 query 中的文风/故事设计项、格式硬约束和写作硬约束。
|
|
217
255
|
- 不把本 skill 整段规则塞进 prompt;细节以已加载的 `short-format.md`、题材包和 `short-craft.md` 为准。
|
|
218
256
|
- 无论谁写,写入 `正文.md` 前都按同一格式规范重排,保证主会话与子代理输出一致。
|
|
219
257
|
|
|
220
|
-
⚠️
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
**字数统计必须跨平台可执行:优先使用 Python 字符统计**:`for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done; "$PYBIN" -c "from pathlib import Path; print(len(Path('文件路径').read_text(encoding='utf-8')))"`。**不要直接调 `python3`**,Windows 上 `python3` 会落到 Microsoft Store 占位程序、以 exit 49 静默失败;上面的探测会按 `python3→python→py` 选出真正可用的解释器。Windows / DeepSeek / Claude Code 组合下不要让模型自行估算字数;`wc -m` 仅作为 macOS/Linux 备选,禁止使用 `wc -c`(字节数)。如果当前 agent/工具环境没有 Bash/Python 权限,必须明确声明“未完成机器字数验证”,并按行数速算作为临时估计,不得声称已通过字数硬验证。
|
|
224
|
-
**⚠️ 字数不足 = 章节未完成。禁止在字数未达标时结束章节。必须继续展开场景直到达标。**
|
|
258
|
+
⚠️ **硬约束只作用于整篇交付范围,不设统一逐节最低字数或行数**。
|
|
259
|
+
写完每批后按 `short-format.md`「字数统计」检查整篇累计值与各节分布。某节明显短于相邻节时,先核对批准情节点、可见动作和后果是否已经完整;完整就保留,缺失才补回原计划内容。不得为拉齐节长新增冲突、对话、回忆、配角反应或独立事件。整篇以锁定的用户交付范围为准;未给范围时才使用 8000-20000 字默认值。
|
|
260
|
+
**⚠️ 未进入锁定范围 = 正文未完成。禁止越界后结束;不足只扩已有情节点,超出只压重复解释,不借 repair 新增或删除关键剧情。**
|
|
225
261
|
|
|
226
262
|
**节数守恒**:正文节数必须等于小节大纲规划节数。不得合并多节为一节。如果写作中发现某节不需要独立存在,应回到大纲阶段调整,而非在写作时偷减。
|
|
227
263
|
|
|
228
|
-
|
|
229
|
-
1.
|
|
230
|
-
2.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
- 加一轮对话(参考 short-craft.md 第6节 / dialogue-mastery.md 对话权力模式)
|
|
234
|
-
- 加回忆闪回(1-2 句关联记忆)
|
|
235
|
-
- 加环境物件(通过动作带出,不独立成句)
|
|
236
|
-
- **禁止凑字**:每个添加必须推动情绪/铺垫/代入感,不得灌水。禁止用"加感知层""加反应层"的方式在已有动作上叠加描写
|
|
237
|
-
|
|
238
|
-
**节长验证(分批写作,每批写完后执行)**:
|
|
239
|
-
分批写作:每次输出 2-3 节,写完后统一检查本批所有节的字数。
|
|
240
|
-
如果任何一节 < 800 字(高信息密度题材 < 500 字)→ 补充更多子事件/对话来补足后再写下一批。
|
|
241
|
-
禁止跳过未达标的小节。
|
|
264
|
+
**小节完整性流程**:
|
|
265
|
+
1. **写作时**:每节围绕一个主问题推进;让风险、信息、关系、资源、决定、行动或读者理解至少发生一项可见变化。相关情节点可以由同一动作链或对话同时兑现,不为拆成多个“子事件”重复铺陈。
|
|
266
|
+
2. **写完后**:对照 `小节大纲.md` 检查批准内容是否落地、因果与下一步是否读得懂、感知/反应是否提供新信息、伏笔/物件是否按计划出现。
|
|
267
|
+
3. **发现缺口时**:只补回原计划中漏掉的动作、证据、选择或后果;若本节已经完成职责,即使很短也不加任务卡点、对话、回忆或环境来凑长度。
|
|
268
|
+
4. **发现冗余时**:删除不改变风险、信息、关系、资源、决定、行动或可信度的阻碍、复述与旁人反应;不把“有冲突”本身当成保留理由。
|
|
242
269
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
每个小节按「三维度揉进」写作(详见 short-craft.md 第 10 节):每个子事件将发生、感知、反应三个维度揉进同一段连续正文,子事件合计 ≥150 字。维度揉进不等于按维度分段——禁止"先写发生再补感知再补反应"的堆叠写法;也不等于一段到底,按新动作/新物件/新信息/新对话断段。长度只是诊断,先判断是否完整戏剧单元;混入多个动作/信息才拆,完整推理、氛围或情绪链可以保留稍长段。
|
|
246
|
-
|
|
247
|
-
**写完后对照 小节大纲.md 检查**:每个子事件三个维度都揉进了?本节情绪到位?伏笔/物件已植入?新增任务卡点是否卡出了情绪、证据或关系变化(删掉无损则压缩)?节长 <800 字 → 补充更多子事件/对话后再写下一节。
|
|
270
|
+
每个小节按「场景信息揉进」写作(详见 short-craft.md 第 10 节):发生是主干,感知和反应只在提供新信息时加入;用到的维度揉进同一镜头。揉进不等于按维度分段——禁止"先写发生再补感知再补反应"的堆叠写法,也不要求三项齐全;同样不等于一段到底,按新动作、新物件、新信息或新对话断段。完整推理、氛围、手艺、等待或情绪链可以连续展开,不按固定字数切断。
|
|
248
271
|
|
|
249
272
|
按以下结构分段写:
|
|
250
273
|
|
|
@@ -281,7 +304,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
281
304
|
|
|
282
305
|
- 用物件/数字/习惯建立羁绊(详见 emotional-methods.md「羁绊铺设」)
|
|
283
306
|
- 埋入至少 3 个反转线索,分散在不同小节
|
|
284
|
-
-
|
|
307
|
+
- 在会改变读者预期、行动方向或关系判断的位置埋钩;连续多个小节只有提问没有局部兑现时再调整,不按固定节数填格(类型从 hooks-paragraph.md 选择)
|
|
285
308
|
- 小节用数字分割,每小节推进一个情节点
|
|
286
309
|
- 情绪强度逐节递增,不允许连续 2 节无情绪变化
|
|
287
310
|
- **贯穿道具第 1 次出现必须在此段完成**
|
|
@@ -291,10 +314,10 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
291
314
|
|
|
292
315
|
- 冲突必须比上一段升级(强度/范围/代价至少一个维度上升)
|
|
293
316
|
- 插入倒计时钩子或代价钩子制造紧迫感
|
|
294
|
-
-
|
|
317
|
+
- 随风险和选择升级提高牵引强度;用新证据、代价、误判修正或局部反击推动,不按固定节数另塞钩子(按题材见 genre-writing-formulas.md)
|
|
295
318
|
- 埋入误导信息,让读者猜错反转方向
|
|
296
319
|
- **数字/金额递增作为叙事工具**(具体数字替代模糊描述,见各 genre-styles 招式库「数字承重」)
|
|
297
|
-
-
|
|
320
|
+
- **场景引擎有变化**:行动、对话、证据、任务、等待、空间压力与关系选择按因果需要切换;不为动静交替补无功能小动作
|
|
298
321
|
|
|
299
322
|
#### 第四段:反转(占全文 10-15%)
|
|
300
323
|
|
|
@@ -325,18 +348,14 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
325
348
|
|
|
326
349
|
### Phase 3 完成门槛(进入 Phase 4 前必须通过)
|
|
327
350
|
|
|
328
|
-
- [ ]
|
|
329
|
-
- [ ]
|
|
351
|
+
- [ ] 总字数进入锁定的用户范围;未指定时进入 8000-20000 默认范围
|
|
352
|
+
- [ ] 每节完成其批准情节点或状态变化;没有为拉齐长度补冲突、对话、回忆或旁人反应
|
|
330
353
|
- [ ] 节数 = 小节大纲规划节数(不得合并/省略)
|
|
331
354
|
- [ ] 身体部位同一词全文 ≤ 5 次
|
|
332
355
|
- [ ] 「像/好像/仿佛/如同」不成片堆叠;超过 10 处需逐处复核功能,不机械全删
|
|
333
356
|
- [ ] `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md` 无 blocking 命中;其余提示先通读,确属问题再改
|
|
334
357
|
- [ ] `node scripts/check-degeneration.js --check 正文.md` 无 blocking 退化命中(复读/截断/工程词泄漏)
|
|
335
358
|
|
|
336
|
-
**中文文本统计注意事项**:
|
|
337
|
-
- `wc -c` 统计的是字节数,禁止用于字数统计,也禁止模型估算字数
|
|
338
|
-
- 行数统计使用 `wc -l` 是安全的
|
|
339
|
-
|
|
340
359
|
**不通过 → 回退补足,不得进入精修。**
|
|
341
360
|
|
|
342
361
|
---
|
|
@@ -344,12 +363,14 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
344
363
|
### Phase 4:精修打磨
|
|
345
364
|
|
|
346
365
|
加载 `references/writing-workflow.md` 中的精修清单完成检查。
|
|
347
|
-
重点:开头钩子、情绪曲线、反转铺垫、每句话价值、格式规范、AI
|
|
366
|
+
重点:开头钩子、情绪曲线、反转铺垫、每句话价值、格式规范、AI 腔。文件模式依次运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md`、`node scripts/check-outline-copy.js --outline 小节大纲.md 正文.md`、`node scripts/normalize-punctuation.js 正文.md`、`node scripts/check-degeneration.js --check 正文.md`。blocking 或确属细纲照搬先改正文再复扫;其他提示仅作读感复核,功能性写法可保留。
|
|
367
|
+
|
|
368
|
+
上述修改全部落盘后,运行 `node scripts/check-delivery-contract.js --json --min-chars {MIN} --max-chars {MAX} --sections {N} {短篇目录}`。exit 0 才可交付;exit 1 只按 `repair_scope` 最小修复并重跑受影响的质量检查与本命令,最多 2 轮;仍失败则报告检查 ID 并停止。exit 2、脚本缺失或不可执行时不得声称交付契约通过。本 verifier 只验用户字数、节数与排版形状,不替代正文质量判断。
|
|
348
369
|
|
|
349
370
|
#### Agent 调用:narrative-writer(去AI味)+ consistency-checker
|
|
350
371
|
|
|
351
372
|
精修阶段,如果项目已部署对应 agent,可 spawn:
|
|
352
|
-
- `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查范围:{正文文件}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n必须检查:先否定再肯定的翻转句式,发现后直接改成后项或动作细节;检查像/好像/仿佛/如同等比喻是否成片堆叠,确属堆叠时只留最有功能的少数比喻,其余回到具体画面;检查是否连续使用头皮发紧/眼皮一跳/心口一沉/胃里翻涌等精致戏剧反应,能写普通动作/普通感觉就写普通动作/普通感觉;已有手机/聊天记录/公告/账单/病历/证据截图等信息,保留为角色看到或处理的场内载体,不改成叙述者解释;任务卡点只在角色本来有要办的事且能加重情绪/证据/关系/反转时使用,不为自然感补流程")` — 执行去AI味(7 Gate)和格式合规检查
|
|
373
|
+
- `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查范围:{正文文件}\n作者偏好:{query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n必须检查:先否定再肯定的翻转句式,发现后直接改成后项或动作细节;检查像/好像/仿佛/如同等比喻是否成片堆叠,确属堆叠时只留最有功能的少数比喻,其余回到具体画面;检查是否连续使用头皮发紧/眼皮一跳/心口一沉/胃里翻涌等精致戏剧反应,能写普通动作/普通感觉就写普通动作/普通感觉;已有手机/聊天记录/公告/账单/病历/证据截图等信息,保留为角色看到或处理的场内载体,不改成叙述者解释;任务卡点只在角色本来有要办的事且能加重情绪/证据/关系/反转时使用,不为自然感补流程")` — 执行去AI味(7 Gate)和格式合规检查
|
|
353
374
|
- `Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{正文文件}\n检查类型:事实冲突+伏笔断线+角色属性不一致")` — 执行一致性检查
|
|
354
375
|
|
|
355
376
|
如 agent 不可用,由主线程直接执行。
|
|
@@ -372,7 +393,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
372
393
|
|---|---|---|
|
|
373
394
|
| 有参考小说想对标 | story-short-analyze | `/story-short-analyze` → 输出存入 `拆文库/{书名}/` |
|
|
374
395
|
| 写完,去 AI 味 | story-deslop | `/story-deslop` |
|
|
375
|
-
| 想自检 | 本 skill 质量自检 | 用 Phase 4 自检流程 + `references/quality
|
|
396
|
+
| 想自检 | 本 skill 质量自检 | 用 Phase 4 自检流程 + `references/short-prose-quality.md` 逐项核对 |
|
|
376
397
|
| 需要市场方向 | story-short-scan | `/story-short-scan` |
|
|
377
398
|
| 设定太大,适合长篇 | story-long-write | `/story-long-write` |
|
|
378
399
|
|
|
@@ -394,15 +415,17 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
394
415
|
| [references/genre-writing-techniques.md](references/genre-writing-techniques.md) | 跨题材通用技法(震惊场景/三翻四震/感情线四阶段/喜剧flag) |
|
|
395
416
|
| [references/emotional-methods.md](references/emotional-methods.md) | 设计情感时 |
|
|
396
417
|
| [references/hooks-chapter.md](references/hooks-chapter.md) | 章节钩子设计 |
|
|
397
|
-
| [references/
|
|
418
|
+
| [references/short-suspense.md](references/short-suspense.md) | 短篇悬念设计 |
|
|
398
419
|
| [references/hooks-paragraph.md](references/hooks-paragraph.md) | 段落钩子技巧 |
|
|
399
420
|
| [references/villain-and-reveal.md](references/villain-and-reveal.md) | Phase 2 设计反派时 |
|
|
400
|
-
| [references/reversal
|
|
401
|
-
| [references/quality
|
|
421
|
+
| [references/short-reversal.md](references/short-reversal.md) | 设计短篇反转时 |
|
|
422
|
+
| [references/short-prose-quality.md](references/short-prose-quality.md) | 精修检查时 |
|
|
402
423
|
| [references/banned-words.md](references/banned-words.md) | 禁用词表 |
|
|
403
424
|
| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | Phase 4 文件模式确定性标点收尾 |
|
|
404
|
-
| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | Phase 3 完成门槛与 Phase 4 复扫;报告高危 AI
|
|
425
|
+
| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | Phase 3 完成门槛与 Phase 4 复扫;报告高危 AI 句式、破折号、碎句号、长段落、微动作复读、套式反应细节、抽象总结、套词/比喻密度、解释链、系统公告腔、提纲感短段、低连接密度 |
|
|
405
426
|
| [scripts/check-degeneration.js](scripts/check-degeneration.js) | Phase 3 完成门槛与 Phase 4 复扫;报告模型退化(复读/截断/工程词泄漏),blocking 需重新生成 |
|
|
427
|
+
| [scripts/check-phase2-contract.js](scripts/check-phase2-contract.js) | Phase 2 产物确定性验收;返回具名失败与最小 repair_scope |
|
|
428
|
+
| [scripts/check-delivery-contract.js](scripts/check-delivery-contract.js) | 最终交付确定性验收;按用户参数检查非空白字符、节数与小节格式 |
|
|
406
429
|
| [references/dialogue-mastery.md](references/dialogue-mastery.md) | 写对话时 |
|
|
407
430
|
| [references/output-contract.md](references/output-contract.md) | Phase 2 对标上下文加载时(理解 analyze 产出格式与消费规范) |
|
|
408
431
|
|
|
@@ -414,16 +437,16 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
414
437
|
|------|-----------------|----------------------|
|
|
415
438
|
| 情绪外化(怎么写情绪) | **`references/short-craft.md` 第2节**(情绪直接写+后接具体反应、三段对照、改写四步——替代旧机械替换表) | 各 `genre-styles/` 包的「情绪烈度与模式」 |
|
|
416
439
|
| 情绪设计(情感结构) | **`references/emotional-methods.md`**(情感三板斧 + 拉扯节奏 + 失败模式) | `references/genre-writing-techniques.md`(情绪操控核心法则 / 情绪三层次) |
|
|
417
|
-
| 反转 | **`references/reversal
|
|
418
|
-
| 反派揭露 | **`references/villain-and-reveal.md`**(反派模板 / 揭露机制 / 报应设计) | `references/reversal
|
|
440
|
+
| 反转 | **`references/short-reversal.md`**(反转类型 / 铺垫 / 揭示位置 / 有效性自检) | `references/villain-and-reveal.md`(真相揭露机制 / 反转有效性自检) |
|
|
441
|
+
| 反派揭露 | **`references/villain-and-reveal.md`**(反派模板 / 揭露机制 / 报应设计) | `references/short-reversal.md` |
|
|
419
442
|
| 人物 | **各 `genre-styles/{题材}.md` 的「对话风格」「招式库」**(受害者-复仇者主角声线、白月光软刀、施害者道德绑架人设,corpus-grounded) | `references/villain-and-reveal.md`(反派/揭露)· `references/genre-writing-techniques.md`(三层标签反差 / 人设从缺点开始)· `references/dialogue-mastery.md`(声线差异) |
|
|
420
|
-
| 钩子 | **`references/hooks-chapter.md`**(章节/开篇钩子类型) | `references/hooks-paragraph.md`(段落钩子)· `references/
|
|
443
|
+
| 钩子 | **`references/hooks-chapter.md`**(章节/开篇钩子类型) | `references/hooks-paragraph.md`(段落钩子)· `references/short-suspense.md`(悬念设计) |
|
|
421
444
|
| 女频写作 | **对应 `genre-styles/{题材}.md`**(追妻火葬场 / 总裁豪门 / 宅斗宫斗 / 甜宠 / 世情打脸的题材声线、虐爽比例、招式) | `references/genre-writing-techniques.md`(女频读者心理与写作技法 / 感情线四阶段推进法)· `references/emotional-methods.md`(情绪拉扯) |
|
|
422
445
|
| 题材风格 | **`references/genre-styles/{题材}.md`**(核心 10 题材的腔调/开篇/钩子/情绪烈度/招式/收尾,corpus-grounded) | `references/genre-writing-formulas.md`(冷门题材结构骨架)· `references/genre-writing-techniques.md`(核心梗 / 卖点 / 通用技法) |
|
|
423
446
|
| 开头 | **各 `genre-styles/{题材}.md` 的「开篇范式」**(关系锚 + 全弧剧透导语 + 火葬场预告,真实开篇范例)+ `short-craft.md` 第12节(开头事件密度) | `references/hooks-chapter.md`(开篇钩子类型)· `references/hooks-paragraph.md`(段钩密度) |
|
|
424
447
|
| 格式与节奏 | **`references/short-format.md`**(短篇正文格式,两平台模板) | `references/short-craft.md`(情绪直接写+后接具体反应/三维度揉进/疏密)· `references/writing-workflow.md`(设计/精修工作流) |
|
|
425
448
|
| 对话 | **`references/dialogue-mastery.md`**(对话技法主文件:差异化/潜台词/对话节奏) | `references/short-craft.md`(三类台词与对话权力博弈)· 各 `genre-styles/` 包的真实金句库 |
|
|
426
|
-
| 去AI味 | **`references/short-deslop.md`**(短篇专属:只杀真·AI腔,不杀情绪烈度/审判句/火葬场预告) | `references/banned-words.md`(禁用词扫描)· `scripts/check-ai-patterns.js`(AI句式复扫)· `references/quality
|
|
449
|
+
| 去AI味 | **`references/short-deslop.md`**(短篇专属:只杀真·AI腔,不杀情绪烈度/审判句/火葬场预告) | `references/banned-words.md`(禁用词扫描)· `scripts/check-ai-patterns.js`(AI句式复扫)· `references/short-prose-quality.md`(成稿检查) |
|
|
427
450
|
|
|
428
451
|
---
|
|
429
452
|
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# 作者记忆协议
|
|
2
|
+
|
|
3
|
+
作者记忆用于保存跨会话复用的创作偏好,不保存小说世界里的事实。它借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道,但把决定权留给作者。
|
|
4
|
+
|
|
5
|
+
## 边界与优先级
|
|
6
|
+
|
|
7
|
+
加载优先级从高到低:
|
|
8
|
+
|
|
9
|
+
1. 安全、平台、字数、文件协议等硬性门禁;
|
|
10
|
+
2. 用户在当前请求中的明确要求;
|
|
11
|
+
3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定;
|
|
12
|
+
4. 作者记忆中的本书偏好;
|
|
13
|
+
5. 作者记忆中的题材、流程和全局偏好;
|
|
14
|
+
6. 对标素材、通用方法和默认值。
|
|
15
|
+
|
|
16
|
+
作者记忆不能把本书事实写进 `.story/作者记忆/`,不能覆盖当前请求,不能降低审稿 rubric,也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。
|
|
17
|
+
|
|
18
|
+
## 文件与所有权
|
|
19
|
+
|
|
20
|
+
工作区级目录:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
{工作区}/.story/作者记忆/
|
|
24
|
+
├── _author-memory-state.json # 唯一结构化权威
|
|
25
|
+
├── 作者画像.md # 仅 active,供作者查看与管理
|
|
26
|
+
├── 待确认.md # pending / conflict,不参与约束
|
|
27
|
+
└── 变更记录.md # 最近 100 次、最新在前的事务记录
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。作者记忆不存在时,普通写作、审稿和去味任务直接继续,不自动初始化空目录;首次 `record` 会随事务创建。
|
|
31
|
+
|
|
32
|
+
工作区必须显式传给脚本。优先使用已经包含 `.story/作者记忆/` 的最近祖先;首次初始化时使用承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的创作工作区根。不要把用户主目录当默认工作区。
|
|
33
|
+
|
|
34
|
+
## 什么时候读取
|
|
35
|
+
|
|
36
|
+
长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active 条目。查询输出固定不超过 2048 字节。不要先查询全部再让 agent 自行筛选,按任务直接选择 kind:
|
|
37
|
+
|
|
38
|
+
| 任务 | query kinds | 注入位置 |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |
|
|
41
|
+
| 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |
|
|
42
|
+
| 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话,不传正文 agent |
|
|
43
|
+
| 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话,不降低 rubric |
|
|
44
|
+
|
|
45
|
+
审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明;问题严重度和 PASS/FAIL 仍由 rubric 决定。
|
|
46
|
+
|
|
47
|
+
待确认项不进入 prompt 约束,也不应为了确认它们中断当前任务。只有用户主动查看作者画像、候选积累到适合回顾的节点,或新偏好与 active 条目冲突时,才集中呈现。
|
|
48
|
+
|
|
49
|
+
## 可靠性与负荷边界
|
|
50
|
+
|
|
51
|
+
- 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx`;没有回执就不得声称“已经记住”。
|
|
52
|
+
- 普通创作只做一次本地 `query`,没有 state 时返回空结果且不创建文件;有记忆时也只返回相关 active 条目,硬上限 2048 字节。完整画像、证据、候选和 journal 不进入正文 prompt。
|
|
53
|
+
- 查询项是低优先级倾向,不是逐条打卡清单。自然吸收即可,不复述画像、不刻意提高词面命中率,也不得为命中偏好牺牲正文连贯、节奏、字数或本书既定笔调。
|
|
54
|
+
- 不安装会记录全部用户消息的 prompt hook。自然语言是否属于长期习惯仍需 agent 判断;这样不能承诺隐式偏好 100% 捕获,但避免把一次性要求、私人对话和小说事实静默写入长期记忆。需要确定写入时,用户可明确说“记住:……”,并以回执验收。
|
|
55
|
+
|
|
56
|
+
## 捕获判定
|
|
57
|
+
|
|
58
|
+
| 输入证据 | 处理 |
|
|
59
|
+
|---|---|
|
|
60
|
+
| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`,`source=explicit_user` |
|
|
61
|
+
| 用户明确接受助手提出的长期做法 | `active`,`source=accepted_suggestion` |
|
|
62
|
+
| 同类修改反复出现,但用户没说这是长期规则 | `pending`,`source=repeated_correction` |
|
|
63
|
+
| 从成稿或操作轨迹推断出的模式 | `pending`,`source=inferred_pattern` |
|
|
64
|
+
| “这一章别……”“这次给我……”等一次性要求 | 只执行,不记录 |
|
|
65
|
+
| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪,不写作者记忆 |
|
|
66
|
+
| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |
|
|
67
|
+
|
|
68
|
+
保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion` 只做不改变语义的紧凑归纳。范围规则:
|
|
69
|
+
|
|
70
|
+
- “本书 / 这个角色 / 这次连载” → `book`;
|
|
71
|
+
- “都市文 / 这类题材” → `genre`;
|
|
72
|
+
- 交稿、检查、确认节奏等操作习惯 → `workflow`;
|
|
73
|
+
- “以后 / 一贯 / 我习惯”且无更窄限定 → `global`;
|
|
74
|
+
- 范围含糊但可能稳定 → 取当前最窄合理范围并置 `pending`。
|
|
75
|
+
|
|
76
|
+
类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`。
|
|
77
|
+
|
|
78
|
+
## 冲突、撤回与强化
|
|
79
|
+
|
|
80
|
+
- 同一类型、范围、归纳文本再次出现时,脚本强化原条目,累加证据和确认次数,不重复建条目。
|
|
81
|
+
- 新偏好与 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。
|
|
82
|
+
- 作者选定新规则时用 `replace`,一次性启用新条目并把旧条目标成 `superseded`。
|
|
83
|
+
- pending 可以用 `decide=activate|reject`;冲突候选不能绕过旧规则直接 activate。
|
|
84
|
+
- 作者说“忘掉 / 这不再是我的习惯”时用 `forget`,保留历史证据但不再加载。
|
|
85
|
+
- active 条目的语义不可原地偷改;语义变化必须 replace,历史才可审计。
|
|
86
|
+
|
|
87
|
+
## 运行工具
|
|
88
|
+
|
|
89
|
+
先依次尝试 `python3`、`python`、`py -3` 找到 Python 3,再从当前 skill 根运行本地副本:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区}
|
|
93
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} --input {单事件.json}
|
|
94
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query --workspace {工作区} [--kind prose_style] [--book {书名}] [--genre {题材}] [--workflow {流程}]
|
|
95
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} --input {事务.json}
|
|
96
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
- `record`:常用单事件入口,自动读取当前修订、首次自动初始化;`event_id` 相同且内容相同会幂等返回原回执,内容不同会失败。
|
|
100
|
+
- `query`:只读相关 active 条目;`--kind` 可重复,不存在 state 时返回空结果且零写入。返回的 `omitted > 0` 时收窄 kind / book / genre / workflow 后重查,不得改读完整画像规避预算。
|
|
101
|
+
- `commit`:高级批量入口;先在内存完成 schema、引用、容量和所有视图校验,最后原子替换 state。事务文件在成功前必须保留;过期修订会在任何写入前失败。
|
|
102
|
+
- `check`:从 state 重建并逐字核验所有派生视图。
|
|
103
|
+
|
|
104
|
+
## 事务格式
|
|
105
|
+
|
|
106
|
+
常用单事件新增或强化:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"schema_version": 1,
|
|
111
|
+
"event_id": "conversation-2026-08-25-message-42",
|
|
112
|
+
"operation": {
|
|
113
|
+
"action": "remember",
|
|
114
|
+
"preference": {
|
|
115
|
+
"kind": "prose_style",
|
|
116
|
+
"scope": {"level": "global", "value": null},
|
|
117
|
+
"assertion": "对话尽量短,用动作承接情绪,不用大段解释",
|
|
118
|
+
"quote": "以后对话都短一点,情绪放动作里,别让角色长篇解释。",
|
|
119
|
+
"source_ref": "conversation:2026-08-25",
|
|
120
|
+
"source": "explicit_user",
|
|
121
|
+
"confidence": "high",
|
|
122
|
+
"importance": "high",
|
|
123
|
+
"status": "active",
|
|
124
|
+
"reason": "用户以“以后”明确声明长期偏好",
|
|
125
|
+
"conflicts_with": []
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
把文件交给 `record`。待确认项的 `status` 用 `pending`;冲突候选用 `conflict` 并填写 active ID。确认或拒绝候选时,把下列对象作为新事件的 `operation`:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{"action":"decide","item_id":"AP002","decision":"activate","quote":"对,这就是我的长期习惯。","reason":"作者明确确认"}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
用新规则替代一个或多个旧条目时,`replace.preference` 与上例字段相同,但不传 `status`、`conflicts_with`,新条目直接 active;下列对象同样作为 `operation`:
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"action": "replace",
|
|
142
|
+
"old_ids": ["AP001", "AP002"],
|
|
143
|
+
"preference": {
|
|
144
|
+
"kind": "prose_style",
|
|
145
|
+
"scope": {"level": "book", "value": "雾港来信"},
|
|
146
|
+
"assertion": "本书对话允许更长的试探,但避免解释设定",
|
|
147
|
+
"quote": "这本书可以让对话慢一点,多试探,但还是别拿台词讲设定。",
|
|
148
|
+
"source_ref": "conversation:2026-08-25",
|
|
149
|
+
"source": "explicit_user",
|
|
150
|
+
"confidence": "high",
|
|
151
|
+
"importance": "high",
|
|
152
|
+
"reason": "作者明确用本书新规则替代旧候选"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
撤回条目的 `operation`:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{"action":"forget","item_id":"AP003","quote":"忘掉这个偏好。","reason":"作者明确撤回"}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`。操作按数组顺序应用,任一步失败则整份事务零写入。成功后删除临时输入文件;显式记忆请求还要把工具返回的回执原样告诉用户。
|