@oh-story/dsh 0.1.4 → 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 +56 -12
- package/lib/client.js +2692 -268
- package/lib/client.js.map +4 -4
- package/lib/drama/manifest.json +136 -101
- package/lib/drama/skills/short-drama/SKILL.md +61 -1
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +7 -4
- package/lib/drama/skills/short-drama/references/creator-documents.md +133 -8
- package/lib/drama/skills/short-drama/references/creator-workflow.md +38 -2
- package/lib/drama/skills/short-drama/references/knowhow-index.md +3 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +10 -7
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +3 -0
- 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 +13 -3
- 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 +2 -1
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +19 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +6 -2
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +4 -3
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +3 -1
- 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 +46 -10
- 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/references/rubric-visual-motion.md +12 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +76 -7
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +6 -2
- 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 +5 -2
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +16 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +8 -3
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +81 -13
- 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/delivery-profile.md +21 -1
- 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 +24 -6
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +11 -7
- 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 +5 -2
- 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 +3 -2
- 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 +865 -33
- 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 +415 -305
- package/lib/oh-story/roles/consistency-checker.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +32 -33
- package/lib/oh-story/roles/story-architect.md +16 -26
- 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 +19 -10
- 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-setup/references/agent-references/genre-core-mechanics.md → story-long-write/references/long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-long-write/references/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 +4 -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 +14 -14
- 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 +74 -33
- 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-long-write/references/genre-core-mechanics.md → story-setup/references/agent-references/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-setup/references/agent-references/{reversal-toolkit.md → 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-long-write/references/reversal-toolkit.md → story-setup/references/agent-references/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 +4 -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 +3 -1
- 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/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 +55 -40
- 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,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: story-setup
|
|
3
|
-
version: 1.2.
|
|
4
|
-
description: "网文写作工具集基础设施部署。为 Claude Code / OpenCode / Codex / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」。"
|
|
5
|
-
metadata: {"openclaw":{"source":"https://github.com/
|
|
3
|
+
version: 1.2.10
|
|
4
|
+
description: "网文写作工具集基础设施部署。为 Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」。"
|
|
5
|
+
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
|
|
6
6
|
---
|
|
7
7
|
# story-setup:网文写作工具集基础设施部署
|
|
8
8
|
|
|
@@ -14,14 +14,14 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
14
14
|
|
|
15
15
|
## Phase 1:检测项目状态
|
|
16
16
|
|
|
17
|
-
**先自检参考目录**:以正在执行的本 `SKILL.md` 所在目录为准,列出与它同级的 `references/` 下的子目录,核对下面
|
|
17
|
+
**先自检参考目录**:以正在执行的本 `SKILL.md` 所在目录为准,列出与它同级的 `references/` 下的子目录,核对下面 9 个名字是否都在**且都非空**——`agent-references`、`templates`、`opencode`、`codex`、`antigravity`、`zcode`、`openclaw`、`reasonix`、`generic`;同级 `scripts/merge-claude-settings.py`、`scripts/merge-codex-hooks.py`、`scripts/merge-antigravity-hooks.py`、`scripts/generate-antigravity-agents.mjs`、`scripts/deploy-antigravity-skills.py` 与 `scripts/copy-path-safety.py` 也必须存在(Claude/Codex/Antigravity hooks 合并、Antigravity Skills 物化与 agent 生成、递归复制安全检查依赖它们)。有缺即 skill 包没装全,**立即停止,不写任何部署文件**,报告里区分「缺目录」「目录为空」和「缺脚本」,并给修复指令:「story-setup 参考资料包不完整,缺 {路径}。按你的安装方式重装 oh-story-claudecode(命令行装的重跑 `npx skills add zenstory-ai/oh-story-claudecode -y -g`,marketplace / Plugin Management 装的在面板里重装),再执行 /story-setup。」
|
|
18
18
|
|
|
19
|
-
> 判据是「有没有 `SKILL.md`」:只看正在执行的 `SKILL.md` 同级的 `references/`。项目内 `.claude/skills/story-setup/`、`.codex/skills/story-setup/` 和 OpenCode 的 `skills/story-setup/` 只有 `references/agent-references/`、不含 `SKILL.md`,不会是执行目录,也不要拿它们核对。ZCode / OpenClaw / Reasonix / generic 的项目副本是整份 skill 拷贝、自带 `SKILL.md`,
|
|
19
|
+
> 判据是「有没有 `SKILL.md`」:只看正在执行的 `SKILL.md` 同级的 `references/`。项目内 `.claude/skills/story-setup/`、`.codex/skills/story-setup/` 和 OpenCode 的 `skills/story-setup/` 只有 `references/agent-references/`、不含 `SKILL.md`,不会是执行目录,也不要拿它们核对。Antigravity / ZCode / OpenClaw / Reasonix / generic 的项目副本是整份 skill 拷贝、自带 `SKILL.md`,9 个子目录本就齐全,照常核对即可。
|
|
20
20
|
|
|
21
21
|
1. 检查当前目录是否已部署过(存在 `.story-deployed`)
|
|
22
|
-
- `agents_version` 缺失、非整数或小于 `
|
|
23
|
-
- `agents_version:
|
|
24
|
-
- `agents_version` 大于 `
|
|
22
|
+
- `agents_version` 缺失、非整数或小于 `29` → 标记为待更新,继续执行当前部署
|
|
23
|
+
- `agents_version: 29` → 使用 AskUserQuestion 确认是否重新部署;提示里写明重新部署只用**当前本地 skill 包**刷新项目文件,要拿 skill 本身的新版本得先更新 oh-story-claudecode(`npx skills add` 或 marketplace),再回来重跑
|
|
24
|
+
- `agents_version` 大于 `29` → 当前 story-setup 比项目部署旧;停止以避免降级覆盖,提示先更新 oh-story-claudecode,不写任何部署文件
|
|
25
25
|
- 同时读 `target_cli` 字段。**已部署项目以 sentinel 里的值为准**:非空时(逗号分隔的多端组合原样保留)跳过下面第 5-12 步的环境探测与选择,直接按这些端重新部署。只有字段缺失或为空,才回落到探测。用户明确要求增删目标端时,用 AskUserQuestion 在现有值基础上改,改完的值写回 sentinel。
|
|
26
26
|
2. 检查是否有书名目录(包含 `追踪/` 子目录的目录,或用户自定义结构)
|
|
27
27
|
- 有 → 识别为长篇项目,显示当前项目信息
|
|
@@ -38,31 +38,35 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
38
38
|
6. 检查 `.codex/`、`.codex/config.toml`、`.codex/agents/`、`.codex/hooks.json`、`AGENTS.md` 中的 Codex 段
|
|
39
39
|
- 存在 → 识别为 Codex 项目,`target_cli = codex`
|
|
40
40
|
- 不存在 → 跳过
|
|
41
|
-
7. 检查 `.
|
|
41
|
+
7. 检查 `.agents/hooks.json`、`.agents/agents/`,或 `.agents/rules/oh-story.md` 中的 Antigravity 标记
|
|
42
|
+
- 存在 → 识别为 Google Antigravity 项目,`target_cli = antigravity`
|
|
43
|
+
- 不存在 → 跳过
|
|
44
|
+
8. 检查 `.zcode/`、`.zcode/config.json`、`zcode.json`、`.zcode/skills/`、`.zcode/commands/`、`AGENTS.md` 中的 ZCode 段
|
|
42
45
|
- 存在 → 识别为 ZCode 项目,`target_cli = zcode`
|
|
43
46
|
- 不存在 → 跳过
|
|
44
|
-
|
|
47
|
+
9. 检查 `openclaw.json`、`.openclaw/`,或 `AGENTS.md` 中的 OpenClaw 段(标题行含 `网文写作工具集(OpenClaw)`)
|
|
45
48
|
- 存在 → 识别为 OpenClaw 项目,`target_cli = openclaw`
|
|
46
49
|
- 不存在 → 跳过
|
|
47
|
-
|
|
50
|
+
10. 检查 `.reasonix/`、`reasonix-plugin.json`、`REASONIX.md`,或 `AGENTS.md` 中的 Reasonix 段(标题行含 `网文写作工具集(Reasonix)`)
|
|
48
51
|
- 存在 → 识别为 Reasonix 项目,`target_cli = reasonix`
|
|
49
52
|
- 不存在 → 跳过
|
|
50
|
-
|
|
53
|
+
11. 检查 `AGENTS.md` 中的通用段(标题行含 `网文写作工具集(通用 Agent / Web AI)`)
|
|
51
54
|
- 存在 → 识别为通用 Web AI 项目,`target_cli = generic`
|
|
52
55
|
- 不存在 → 跳过
|
|
53
56
|
|
|
54
|
-
> 第
|
|
57
|
+
> 第 9-11 步只认各端**互斥**的标记。`skills/*/SKILL.md` 的 `metadata.openclaw` 不作 OpenClaw 信号:13 个 skill 全都带这个字段,而 OpenClaw / Reasonix / generic 三条 skills-only 路径部署出的 `skills/` 长得一样,用它判定会把后两者一律误认成 OpenClaw。`.agents/skills/` 由 Antigravity、Codex 与 Reasonix 共用,也不单独作准;Antigravity 必须由 hooks/agents/rule 专属标记识别。后三端真正的分辨点是各自 `AGENTS.md` 模板的标题行。
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
12. 如 `.claude/` 或 `CLAUDE.md`、OpenCode、Codex、Antigravity、ZCode、OpenClaw、Reasonix、generic 标记同时存在 → 使用 AskUserQuestion 让用户选择目标环境(选项:Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix / 通用 Web AI 或其他 Agent / 任意组合)
|
|
60
|
+
13. 如八类标记都不存在(全新项目)→ 使用 AskUserQuestion 让用户选择目标环境
|
|
58
61
|
- 用户选择 opencode → `target_cli = opencode`,部署时创建 `opencode.json` 和 `.opencode/`
|
|
59
62
|
- 用户选择 claude-code → 按现有逻辑处理
|
|
60
63
|
- 用户选择 codex → `target_cli = codex`,部署时创建 `.codex/`
|
|
64
|
+
- 用户选择 antigravity → `target_cli = antigravity`,部署时创建 `.agents/skills`、`.agents/agents`、`.agents/rules`、`.agents/hooks` 并合并 `.agents/hooks.json`
|
|
61
65
|
- 用户选择 zcode → `target_cli = zcode`,部署时创建 `.zcode/`、合并根 `AGENTS.md`,不创建项目 custom agents
|
|
62
66
|
- 用户选择 openclaw → `target_cli = openclaw`,部署时复制 OpenClaw 兼容 skills 到项目 `skills/`
|
|
63
67
|
- 用户选择 reasonix → `target_cli = reasonix`,部署时复制 skills 到项目 `skills/`、写入 Reasonix 版 `AGENTS.md`,不创建项目 custom agents/hooks
|
|
64
68
|
- 用户选择通用 Web AI / 其他 Agent → `target_cli = generic`,部署通用 `AGENTS.md` 与项目本地 `skills/`;不写平台专属 hooks/agents
|
|
65
|
-
- 用户选择多端 → `target_cli = claude-code,opencode,codex,zcode,openclaw,reasonix,generic` 的子集(仅包含用户选择的端)
|
|
69
|
+
- 用户选择多端 → `target_cli = claude-code,opencode,codex,antigravity,zcode,openclaw,reasonix,generic` 的子集(仅包含用户选择的端)
|
|
66
70
|
|
|
67
71
|
## Phase 2:部署基础设施
|
|
68
72
|
|
|
@@ -101,6 +105,12 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
101
105
|
| `skills/story-setup/references/codex/hooks/{story_codex_hook.py,run-story-hook.sh,run-story-hook.cmd}` | `.codex/hooks/` 同名文件 | story-setup managed | replace | Python/shell/cmd launcher 文件齐全 | target_cli 含 codex |
|
|
102
106
|
| `skills/story-setup/scripts/merge-codex-hooks.py` | 部署时执行,不复制到项目 | story-setup helper | execute | 替换已知管理注册、保留用户 hooks 与未知顶层字段,结果幂等 | target_cli 含 codex |
|
|
103
107
|
| `skills/story-setup/references/agent-references/` | `.codex/skills/story-setup/references/agent-references/` | story-setup managed | replace | every reference resolves | target_cli 含 codex |
|
|
108
|
+
| current package skill root + `scripts/deploy-antigravity-skills.py` | `.agents/skills/{browser-cdp,story*}/` | story-setup managed for 13 known skill names | atomically replace known dirs; preserve unknown skills; never write through symlink | 13 real skill directories with valid `SKILL.md` exist | target_cli 含 antigravity |
|
|
109
|
+
| `skills/story-setup/scripts/generate-antigravity-agents.mjs` + Claude agent sources | `.agents/agents/agent-name/agent.md`(`agent-name` 为实际名称) | story-setup managed for 7 known agent definitions | generate then atomically replace known definitions; preserve unknown user agents | 7 Markdown agents parse; exact Antigravity tool names; `mainAgent: false`, `subagent: true` | target_cli 含 antigravity |
|
|
110
|
+
| `skills/story-setup/references/antigravity/rules/oh-story.md` | `.agents/rules/oh-story.md` | story-setup managed | replace | `trigger: always_on`; under 12,000 characters | target_cli 含 antigravity |
|
|
111
|
+
| `skills/story-setup/references/antigravity/hooks/hooks.json` | `.agents/hooks.json` | user+managed | replace only top-level `oh-story` group | valid Antigravity named-group schema; user groups preserved; idempotent | target_cli 含 antigravity |
|
|
112
|
+
| `skills/story-setup/references/antigravity/hooks/{story_antigravity_hook.js,story_hook_core.js}` | `.agents/hooks/` same names | story-setup managed | replace | Node syntax valid; core byte-identical to shared source; hook contract tests pass | target_cli 含 antigravity |
|
|
113
|
+
| `skills/story-setup/scripts/merge-antigravity-hooks.py` | deployment helper only | story-setup helper | execute | atomically replaces only `oh-story`, preserves user groups, idempotent | target_cli 含 antigravity |
|
|
104
114
|
| `skills/story-setup/references/zcode/AGENTS.md.tmpl` | `AGENTS.md` | user+managed | marker/section merge | contains ZCode `$story-*` routing and solo fallback | target_cli 含 zcode |
|
|
105
115
|
| repository `skills/{browser-cdp,story*}/` | `.zcode/skills/{browser-cdp,story*}/` | story-setup managed for known skill names | replace known skill dirs only | 13 `SKILL.md` files exist and satisfy ZCode frontmatter limits | target_cli 含 zcode |
|
|
106
116
|
| `skills/story-setup/references/zcode/commands/` | `.zcode/commands/` | story-setup managed for known command names | replace known command files only | 13 commands have valid names/frontmatter | target_cli 含 zcode |
|
|
@@ -151,10 +161,10 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
151
161
|
|
|
152
162
|
#### Agent 兼容性处理
|
|
153
163
|
|
|
154
|
-
- Agent
|
|
164
|
+
- Agent 正文以 Claude Code Markdown 为真源;OpenCode 的 `.opencode/agents/*.md` 与 Codex 的 `.codex/agents/*.toml` 由 `references/opencode/agents/`、`references/codex/agents/` 下的预生成产物直接复制。Antigravity 的 `.agents/agents/agent-name/agent.md`(`agent-name` 为实际名称)则在部署时调用随 story-setup 下发的 `scripts/generate-antigravity-agents.mjs`,把 Claude 工具名、模型档、reference 根和调用术语确定性转换为 Antigravity 2.0 契约;不得把 Claude frontmatter 原样复制过去。
|
|
155
165
|
- **ZCode 3.3.4 不部署项目 agents**:其自定义子智能体只支持用户级 `~/.zcode/agents/`,plugin manifest 中的 `agents` 当前不执行。不要创建 `.zcode/agents/` 或修改用户 home;相关 Skill 必须直接 solo/direct 并报告 fallback。
|
|
156
166
|
- **OpenClaw Phase 1 不部署 agents**:OpenClaw 只部署 skills,agent 协作相关 skill 必须按既有 fallback 规则降级 solo/direct,不要把 Claude/OpenCode agent frontmatter 直接复制成 OpenClaw agent。
|
|
157
|
-
- 部署到项目后,agent 内引用的参考资料必须走 `story-setup/references/agent-references/*.md` 这一本 skill 内复制路径;不要跨 skill 引用其他 skill 的 references。各 adapter 只使用当前规范前缀:Claude Code 为 `.claude/skills/`,OpenCode / OpenClaw / Reasonix / generic 为 `skills/`,Codex 为 `.codex/skills/`,ZCode 为 `.zcode/skills/`;不在运行时遍历历史备选路径。
|
|
167
|
+
- 部署到项目后,agent 内引用的参考资料必须走 `story-setup/references/agent-references/*.md` 这一本 skill 内复制路径;不要跨 skill 引用其他 skill 的 references。各 adapter 只使用当前规范前缀:Claude Code 为 `.claude/skills/`,Antigravity 为 `.agents/skills/`,OpenCode / OpenClaw / Reasonix / generic 为 `skills/`,Codex 为 `.codex/skills/`,ZCode 为 `.zcode/skills/`;不在运行时遍历历史备选路径。
|
|
158
168
|
|
|
159
169
|
#### 部署 Agent References
|
|
160
170
|
|
|
@@ -170,6 +180,14 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
|
|
|
170
180
|
- **部署后必须 trust + 新开 Codex 会话**(报告文案与 fallback 规则见「验证 Codex 部署」);若运行时返回 `unknown agent_type`,调用方必须降级 solo/direct 并报告 fallback。
|
|
171
181
|
- 将 `skills/story-setup/references/agent-references/` 同步复制到 `.codex/skills/story-setup/references/agent-references/`,作为 Codex agent 的项目内参考资料主路径
|
|
172
182
|
|
|
183
|
+
#### 部署 Antigravity Agents(target_cli 含 antigravity 时)
|
|
184
|
+
|
|
185
|
+
- 先确认 `node` 在 PATH;Antigravity agent 生成与项目 hooks 都依赖 Node。缺失时停止 Antigravity 这一目标的部署,不留下半成品,并提示安装 Node 后重跑。
|
|
186
|
+
- 执行 `node "{story-setup skill目录}/scripts/generate-antigravity-agents.mjs" --source "{story-setup skill目录}/references/templates/agents" --dest "{项目}/.agents/agents"`。生成器先渲染全部 7 个 agent,再原子替换这 7 个已知 `.agents/agents/agent-name/agent.md` 定义(`agent-name` 为实际名称),并清理旧版同名扁平 `.md`;保留其他用户 agent,任一源 frontmatter 异常时不得留下半更新目录,也不得沿 managed agent symlink 写出项目外。
|
|
187
|
+
- 校验 7 个 `.md`:`name` 与文件名一致;`mainAgent: false`、`subagent: true`;模型只使用 `flash` / `pro`;工具只来自 Antigravity 官方名称 `view_file`、`find_by_name`、`grep_search`、`write_to_file`、`replace_file_content`、`multi_replace_file_content`、`run_command`;不得残留 Claude 的 `Read/Glob/Grep/Write/Edit/Bash` 工具名或 `.claude/skills/` reference 前缀。
|
|
188
|
+
- 只读 agent(`chapter-extractor`、`consistency-checker`、`story-explorer`)不得包含写文件或命令工具;其他 agent 按 Claude 真源的能力边界映射。
|
|
189
|
+
- Antigravity 通过 `invoke_subagent` 的 `TypeName` 调用这些 agent。部署后新开 Antigravity conversation,再用 `story-review` 验证 full/lean;运行时无法解析某个 custom agent 时按 skill 的 solo/direct fallback 执行。
|
|
190
|
+
|
|
173
191
|
#### 配置 OpenCode Agent 模型
|
|
174
192
|
|
|
175
193
|
> 仅当 `target_cli` 含 `opencode` 时执行。OpenCode 子代理不指定模型时继承主模型,导致低成本 Agent 也消耗主模型额度。此步骤自动检测用户模型并写入 `model:` 字段。
|
|
@@ -286,6 +304,21 @@ Codex 项目 hooks 部署到 `.codex/hooks.json`;运行脚本部署到 `.codex
|
|
|
286
304
|
4. 保留用户已有的非 story-setup hooks、matcher 块与未知顶层字段。重复执行必须幂等;禁止再按原始 `command` 字符串追加去重,否则 v17 直调命令会与 v18 launcher 双重注册。
|
|
287
305
|
5. 写入后解析 JSON 验证:旧直调 `story_codex_hook.py` 命令数为 0,当前模板 6 个注册各存在且仅存在一次,用户 hook 与未知顶层字段仍在。然后提示用户:项目 `.codex/` 层需要被 Codex trust,非 managed command hooks 还需要在 `/hooks` 中 review/trust 后才会运行;Windows 下走 `commandWindows`,launcher 从当前目录向上定位项目 `.codex/hooks/`,与 POSIX 路径的嵌套目录行为一致。
|
|
288
306
|
|
|
307
|
+
### Antigravity 部署算法(target_cli 含 antigravity 时)
|
|
308
|
+
|
|
309
|
+
Antigravity 2.0 使用项目 `.agents/` customization 根。部署 Skills、Always-On Rule、7 个 custom subagents 与 workspace Hooks;不修改用户 home 下的 `~/.gemini/`。
|
|
310
|
+
|
|
311
|
+
1. 找到当前 skill 包的 13 个已知 skill 目录(`browser-cdp` 与 `story*`),调用 `deploy-antigravity-skills.py --source "{当前 skill 包根}" --dest "{项目}/.agents/skills"` 原子物化。helper 只替换 13 个已知名称、保留用户其他 skills,并在源目标同一 realpath 时 no-op。目标必须是**真实目录**,不要新建顶层 `.agents/skills → ../skills` symlink:Antigravity 2.0 项目部署以真实目录作为受支持路径。
|
|
312
|
+
- 若已有 `.agents/skills` 是 symlink,helper 必须先停止且不沿链接写入。用 AskUserQuestion 说明:迁移会把链接当前可见的所有 skills 复制到新的项目内真实目录、只更新 13 个 oh-story 名称、保留链接目标原样,但会把 symlink 本身替换成目录;这可能形成较大的 git diff。只有用户明确同意后才加 `--migrate-symlink` 重跑,拒绝则停止 Antigravity 部署并报告未获得完整支持。这个确认不得被“多端部署”或已有 Codex symlink 跳过。
|
|
313
|
+
2. 按上方「部署 Antigravity Agents」运行生成器,原子更新 `.agents/agents/` 中 7 个已知 `.agents/agents/agent-name/agent.md` 定义(`agent-name` 为实际名称)并保留其他用户 agent;不从用户 home 搬运 agent。
|
|
314
|
+
3. 复制 `references/antigravity/rules/oh-story.md` 到 `.agents/rules/oh-story.md`,验证 `trigger: always_on` 且文件小于 Antigravity 12,000 字符上限。该 rule 承担 skill 路由、写作硬约束与 compact 后恢复;Antigravity IDE 不以根 `AGENTS.md` 作为 workspace rule,所以不要用 AGENTS 模板代替。
|
|
315
|
+
4. 复制 `references/antigravity/hooks/story_antigravity_hook.js` 与同目录 `story_hook_core.js` 到 `.agents/hooks/`,验证 `node --check`。hook 命令以 `.agents/`(`hooks.json` 所在目录)为工作目录,必须使用 `hooks/story_antigravity_hook.js`,不得写成 `.agents/hooks/...`。共享 core 必须与 Claude/OpenCode/ZCode 源字节一致。
|
|
316
|
+
5. 合并 `references/antigravity/hooks/hooks.json` 到 `.agents/hooks.json`:按跨平台规则探测 Python 3,调用 `merge-antigravity-hooks.py {项目}/.agents/hooks.json {skill目录}/references/antigravity/hooks/hooks.json`。helper 只替换顶层 `oh-story` named group,保留其他用户 hook groups;写后复跑并比较字节确认幂等。禁止把 Claude/Codex 的外层 `{ "hooks": ... }` schema 写入 Antigravity。
|
|
317
|
+
6. 校验事件边界:只注册 `PreToolUse`、`PostToolUse`、`PreInvocation`、`Stop`。PreToolUse 必须为每次调用输出 `decision`;PostToolUse 必须只输出 `{}`,正文 findings 经 session `artifactDirectoryPath` 暂存并由下一次 PreInvocation 注入;若模型准备直接结束,Stop 最多强制继续一次,避免无限循环。Antigravity 外部 hooks 没有 SessionStart/PreCompact/PostCompact,首次上下文由 `invocationNum=0` 的 PreInvocation 注入,compact 后由 Always-On Rule 强制读取 `追踪/上下文.md`。
|
|
318
|
+
7. `.story-deployed` 的 `target_cli` 写 `antigravity` 或多端组合,`references_dir` 写 `.agents/skills/story-setup/references/agent-references`。安装报告提示新开 conversation 使 Skills/Rules/Agents/Hooks 重新扫描;同时明确 Node 是 hook 运行时依赖。
|
|
319
|
+
|
|
320
|
+
Antigravity IDE 与交互式 `agy` 共用这套 workspace `.agents/` 产物,但仍需分别实机 smoke test。不要依赖 `npx skills add -g` 当前把全局 skill 写到哪个 `~/.gemini/*` 目录;`story-setup` 的支持承诺只覆盖上述项目内真实目录部署。
|
|
321
|
+
|
|
289
322
|
### ZCode 部署算法(target_cli 含 zcode 时)
|
|
290
323
|
|
|
291
324
|
ZCode 首版部署 Skills、Commands、AGENTS.md 和支持事件内的 Hooks;不部署 `.zcode/agents` 或 `.zcode/rules`。
|
|
@@ -339,15 +372,15 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
339
372
|
- 写入以下字段(YAML `key: value` 格式,hook 用 `references/templates/hooks/lib/sentinel.sh` 读取):
|
|
340
373
|
```
|
|
341
374
|
deployed_at: <date -u +"%Y-%m-%dT%H:%M:%SZ">
|
|
342
|
-
agents_version:
|
|
343
|
-
setup_skill_version: 1.2.
|
|
344
|
-
target_cli: claude-code(或 opencode、codex、zcode、openclaw、reasonix、generic,或其任意组合)
|
|
375
|
+
agents_version: 29
|
|
376
|
+
setup_skill_version: 1.2.10
|
|
377
|
+
target_cli: claude-code(或 opencode、codex、antigravity、zcode、openclaw、reasonix、generic,或其任意组合)
|
|
345
378
|
resolver_strategy: project-local-skill-reference
|
|
346
|
-
references_dir: .claude/skills/story-setup/references/agent-references(Codex 写 .codex/skills/...;ZCode 写 .zcode/skills/...;OpenClaw / Reasonix / generic 写 skills/...;多端用逗号分隔)
|
|
379
|
+
references_dir: .claude/skills/story-setup/references/agent-references(Codex 写 .codex/skills/...;Antigravity 写 .agents/skills/...;ZCode 写 .zcode/skills/...;OpenClaw / Reasonix / generic 写 skills/...;多端用逗号分隔)
|
|
347
380
|
```
|
|
348
381
|
- 此文件供 session-start.sh 和写作 skill 检测部署状态,避免重复提示
|
|
349
382
|
- target_cli 含 claude-code 时,同时创建一次性标记文件 `.claude/.agents-pending-restart`(空文件即可)。session-start.sh 在下一个会话启动时据此确认 agents 已随新会话注册,并自动删除该标记——用来向用户确认「重启已生效」。ZCode 不创建该标记,因为它不部署项目 agents。
|
|
350
|
-
- 如果 `.story-deployed` 已存在但 `agents_version` 缺失、非整数或小于 `
|
|
383
|
+
- 如果 `.story-deployed` 已存在但 `agents_version` 缺失、非整数或小于 `29`,按本次流程更新 hooks/agents/rules/reference bundle(具体变更见 `UPGRADING.md`);大于 `29` 时已在 Phase 1 停止,不得降级覆盖
|
|
351
384
|
|
|
352
385
|
## Phase 3:验证安装
|
|
353
386
|
|
|
@@ -363,7 +396,7 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
363
396
|
- 检查 `.claude/skills/story-setup/references/agent-references/` 下 reference 文件完整
|
|
364
397
|
- 检查所有 `story-setup/references/agent-references/<file>.md` 都能解析到 deployed bundle
|
|
365
398
|
5. 验证部署标记:
|
|
366
|
-
- 检查 `.story-deployed` 是否存在且包含时间戳、`agents_version:
|
|
399
|
+
- 检查 `.story-deployed` 是否存在且包含时间戳、`agents_version: 29`、`setup_skill_version: 1.2.10`、`target_cli`、`resolver_strategy`、`references_dir`
|
|
367
400
|
6. 输出安装报告:
|
|
368
401
|
- 列出所有已部署的文件
|
|
369
402
|
- 列出需要注意的事项(如已有配置已合并)
|
|
@@ -409,7 +442,14 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
409
442
|
- 检查 `.codex/hooks/story_codex_hook.py`、`run-story-hook.sh`、`run-story-hook.cmd` 存在,Python 语法有效,POSIX/Windows launcher 能从嵌套 cwd 定位项目根
|
|
410
443
|
- 检查 `.codex/skills/story-setup/references/agent-references/` 下 reference 文件完整且数量与源目录一致
|
|
411
444
|
- 安装报告必须提示:Codex 需要 trust 项目 `.codex/` 配置层,并在 `/hooks` review/trust 非 managed hooks;部署后新开 Codex 会话让 custom agents 生效;若当前运行时仍返回 `unknown agent_type`,按各 skill 的 fallback 规则降级 solo/direct
|
|
412
|
-
9. 验证
|
|
445
|
+
9. 验证 Antigravity 部署(仅当 target_cli 含 antigravity 时):
|
|
446
|
+
- 检查 `.agents/skills/` 下 13 个 story skills 为真实目录且 `SKILL.md` 可读;`.agents/skills/story-setup/references/agent-references/` 完整
|
|
447
|
+
- 检查 `.agents/agents/` 下 7 个 Markdown agent 可解析,名称、模型档、官方工具白名单、只读边界与 `.agents/skills/` reference 前缀正确
|
|
448
|
+
- 检查 `.agents/rules/oh-story.md` 为 `trigger: always_on` 且未超过 12,000 字符
|
|
449
|
+
- 检查 `.agents/hooks.json` 有效、顶层 `oh-story` group 恰有 PreToolUse/PostToolUse/PreInvocation/Stop,用户 hook groups 保留;检查 `.agents/hooks/story_antigravity_hook.js` 与 `story_hook_core.js` 语法有效
|
|
450
|
+
- 用 fixture 验证:PreToolUse 缺纲/追踪时 deny、普通写入 allow、commit advisory;PostToolUse stdout 恒为 `{}` 且把正文 findings 写进 session artifact;下一次 PreInvocation 注入 findings;Stop 对未处理 findings 最多 continue 一次;干净正文清除 pending state
|
|
451
|
+
- 安装报告必须提示:新开 Antigravity conversation 刷新 customization;Hooks 依赖 PATH 中的 `node`;外部 hook API 没有 PreCompact/PostCompact,compact 恢复由 Always-On Rule 读取 `追踪/上下文.md`;IDE 与交互式 `agy` 仍建议分别实机 smoke test;`agy 1.1.22 -p` 每次 headless 启动都可能在静默鉴权前扫描 workspace,鉴权后不重载 custom agents/hooks,因此当前不在支持面内,可能报 `subagent not found` 或回退写入 `~/.gemini/antigravity-cli/scratch/`;命令行写作从项目目录进入交互式 `agy`,确认 `/skills`、`/agents`、`/hooks` 已发现 oh-story 后再发任务,测试后检查 scratch 无意外小说产物
|
|
452
|
+
10. 验证 ZCode 部署(仅当 target_cli 含 zcode 时):
|
|
413
453
|
- 检查根 `AGENTS.md` 含 ZCode `$story-*` 路由、大纲守卫和 solo/direct fallback
|
|
414
454
|
- 检查 `.zcode/skills/` 下 13 个 Skills 与 `.zcode/commands/` 下 13 个 Commands,验证 frontmatter 和命名
|
|
415
455
|
- 检查 `.zcode/hooks/story_zcode_hook.js`、`.zcode/hooks/story_hook_core.js` 存在且 `node --check` 通过
|
|
@@ -417,17 +457,17 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
417
457
|
- 检查 `.zcode/skills/story-setup/references/agent-references/` 完整且所有 reference 路径可解析
|
|
418
458
|
- 用 fixture 调用 SessionStart、PreToolUse deny/allow、PostToolUse,确认无发现时 stdout 为空、有输出时符合 ZCode 严格 JSON
|
|
419
459
|
- 安装报告必须提示:ZCode 3.3.4 不执行项目/plugin custom agents,full/lean 多 Agent 请求会稳定降级 solo/direct;Hook 依赖 PATH 中的 `node`;部署后新开 ZCode session 刷新 Skills/Commands/AGENTS.md
|
|
420
|
-
|
|
460
|
+
11. 验证 OpenClaw 部署(仅当 target_cli 含 openclaw 时):
|
|
421
461
|
- 检查 `AGENTS.md` 含 OpenClaw story skill routing sections
|
|
422
462
|
- 检查 `skills/` 下 13 个 story skill 目录存在,且每个 `SKILL.md` 包含单行 `name`、单行 `description`、单行 JSON `metadata.openclaw`
|
|
423
463
|
- 检查 `skills/story-setup/references/agent-references/` 下 reference 文件完整且数量与源目录一致
|
|
424
464
|
- 安装报告必须提示:OpenClaw Phase 1 是 skills-only;未部署 OpenClaw agents/hooks,运行时硬拦截不可用,写正文前大纲守卫、commit 提醒、session/compact 自动注入只作为 skill 内软约束;OpenClaw 在 session 启动时 snapshot eligible skills,部署后如命令/skills 未出现,需新开 OpenClaw session 或等待 skills watcher 刷新
|
|
425
|
-
|
|
465
|
+
12. 验证通用 Web AI / 其他 Agent 部署(仅当 target_cli 含 generic 时):
|
|
426
466
|
- 检查 `AGENTS.md` 含通用 story skill routing sections
|
|
427
467
|
- 检查 `skills/` 下 13 个 story skill 目录存在,且每个 `SKILL.md` 可读
|
|
428
468
|
- 检查 `skills/story-setup/references/agent-references/` 下 reference 文件完整且数量与源目录一致
|
|
429
469
|
- 安装报告必须提示:generic 不部署平台专属 hooks/custom agents;大纲守卫、commit 提醒、session/compact 注入等硬拦截与多 agent 协作都按 skill 内软约束或 solo/direct fallback 执行
|
|
430
|
-
|
|
470
|
+
13. 验证 Reasonix 部署(仅当 target_cli 含 reasonix 时):
|
|
431
471
|
- 检查 `AGENTS.md` 含 Reasonix story skill routing sections 与 solo/direct fallback 说明
|
|
432
472
|
- 检查 `skills/` 下 13 个 story skill 目录存在,且每个 `SKILL.md` 可读
|
|
433
473
|
- 检查项目 `.agents/skills` 为指向 `skills/` 的 symlink(POSIX;使 Reasonix 原生扫描发现 skill);Windows 未建 symlink 时改为确认根 `reasonix-plugin.json` 可用于 `reasonix plugin install`
|
|
@@ -469,9 +509,9 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
469
509
|
## 重新部署
|
|
470
510
|
|
|
471
511
|
- `.story-deployed` 不存在 → 全新安装,Phase 2 全部执行
|
|
472
|
-
- `.story-deployed` 存在且 `agents_version:
|
|
473
|
-
- `.story-deployed` 存在但 `agents_version` 缺失、非整数或小于 `
|
|
474
|
-
- `.story-deployed` 存在且 `agents_version` 大于 `
|
|
512
|
+
- `.story-deployed` 存在且 `agents_version: 29` → 提示已部署,AskUserQuestion 确认是否重新部署;提示里写明重新部署只用当前本地 skill 包刷新项目文件,skill 本身的更新走 `npx skills add` 或 marketplace
|
|
513
|
+
- `.story-deployed` 存在但 `agents_version` 缺失、非整数或小于 `29` → 提示需要更新,重新执行 Phase 2 覆盖 agents/hooks/rules/reference bundle,CLAUDE.md / AGENTS.md / settings.local.json / .codex/hooks.json / `.agents/hooks.json` / .zcode/config.json 走合并策略
|
|
514
|
+
- `.story-deployed` 存在且 `agents_version` 大于 `29` → 当前 skill 版本过旧,停止并提示先更新 oh-story-claudecode;不覆盖项目中的更新部署
|
|
475
515
|
|
|
476
516
|
---
|
|
477
517
|
|
|
@@ -479,7 +519,8 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
479
519
|
|
|
480
520
|
| 文件 | 用途 |
|
|
481
521
|
|------|------|
|
|
482
|
-
| references/templates/hooks/ | 8 个 hook 脚本模板 + `story_hook_core.js
|
|
522
|
+
| references/templates/hooks/ | 8 个 hook 脚本模板 + `story_hook_core.js`(正文网/大纲守卫/连续性/commit 侦测的共享实现,与 OpenCode/ZCode 同一份)+ `story_hook_cli.js`(bash hook 调核的 node 桥)+ `lib/common.sh`/`lib/sentinel.sh`(正文兜底 `check-prose-after-write.sh` 限 PostToolUse Write/Edit;`cat>`/`tee` 等 Bash 写正文由 Codex Stop 回合末 git 扫描兜,Claude/OpenCode 的 Bash 仅 pre-guard) |
|
|
523
|
+
| references/antigravity/ | Antigravity 2.0 Always-On Rule、named-group hooks 模板与 I/O adapter;正文写后 findings 经 session artifact 桥接到 PreInvocation/Stop |
|
|
483
524
|
| references/zcode/ | ZCode AGENTS、13 Commands、workspace config patch 与严格 JSON Hook runner |
|
|
484
525
|
|
|
485
526
|
---
|
|
@@ -495,4 +536,4 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
|
|
|
495
536
|
| 导入已有小说做拆解 | story-import | `/story-import` |
|
|
496
537
|
| 需要浏览器登录态(扫榜/拆文取原文) | browser-cdp | `/browser-cdp`;generic 需平台允许本地脚本/浏览器控制 |
|
|
497
538
|
|
|
498
|
-
各端调用语法:Claude `/名`、Codex/ZCode `$名`、OpenClaw `/skill 名`、Reasonix / generic 直接点名 skill。
|
|
539
|
+
各端调用语法:Claude `/名`、Codex/ZCode `$名`、Antigravity 通过 `/skills` 浏览或直接点名、OpenClaw `/skill 名`、Reasonix / generic 直接点名 skill。
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Agent 通用质量核心
|
|
2
|
+
|
|
3
|
+
> 只放长篇与短篇都成立的判断。审查时必须再按 `agent-reference-profiles.md` 加载当前 profile 的质量覆盖文件;本文件不提供篇幅、密度或揭示位置阈值。
|
|
4
|
+
|
|
5
|
+
## 叙事单元推进
|
|
6
|
+
|
|
7
|
+
- [ ] 本单元改变目标、风险、信息、关系、资源、身份或情绪立场中的至少一项。
|
|
8
|
+
- [ ] 删除本单元会造成可指出的因果、人物或期待损失;答不出才判为可能填充。
|
|
9
|
+
- [ ] 开头承接当前目标或提出有效异常,不用无功能天气、风景或日常垫场。
|
|
10
|
+
- [ ] 结尾落在决定、发现、后果、关系变化或未完成动作上,不用作者总结代替变化。
|
|
11
|
+
- [ ] 推进强弱服从当前 profile、题材和已建立的兑现节奏,不套跨体裁固定字数。
|
|
12
|
+
|
|
13
|
+
## 信息与场景
|
|
14
|
+
|
|
15
|
+
- [ ] 每个场景有目标、阻碍和结束后的状态变化。
|
|
16
|
+
- [ ] 设定跟着行动、冲突或证据出现,没有连续说明文。
|
|
17
|
+
- [ ] 人物在选择、行动或承受后果,不是连续几段重复感觉同一情绪。
|
|
18
|
+
- [ ] 新概念数量与当前场景的理解负荷匹配;必要概念给可验证的使用边界。
|
|
19
|
+
|
|
20
|
+
## 语言与格式
|
|
21
|
+
|
|
22
|
+
- [ ] 对话符合身份、关系与当下权力位置,不同角色能区分。
|
|
23
|
+
- [ ] 抽象情绪有选择、台词、物件或实际后果支撑;直写更准确时可以直写。
|
|
24
|
+
- [ ] 没有空泛总结、连续套路修辞或为显得精致而堆叠身体反应。
|
|
25
|
+
- [ ] 标题行以外不混入“本章、细纲、伏笔、读者”等写作工程元信息;故事内真实语境除外。
|
|
26
|
+
|
|
27
|
+
## 五维评分
|
|
28
|
+
|
|
29
|
+
每个维度 0–100 分。分数必须附证据和失败影响,不凭整体印象打分。
|
|
30
|
+
|
|
31
|
+
### 核心一致度
|
|
32
|
+
|
|
33
|
+
检查关键冲突、行动、人物动机和收益归属是否前后一致。
|
|
34
|
+
|
|
35
|
+
| 问题 | 严重度 | 修复 |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| 人物动机无触发突然改变 | critical | 补触发或调整行动 |
|
|
38
|
+
| 核心冲突前后不一致 | high | 回溯统一冲突设定 |
|
|
39
|
+
| 关键行动与已立人设矛盾 | high | 调整行动或补足可见原因 |
|
|
40
|
+
| 次要矛盾被遗忘 | medium | 回收、延期并留痕,或明确弱化 |
|
|
41
|
+
|
|
42
|
+
### 表层重写度
|
|
43
|
+
|
|
44
|
+
检查措辞是否自然、是否复刻输入形状或套用万能表达。正常原句不为追求“重写率”强改。
|
|
45
|
+
|
|
46
|
+
| 问题 | 严重度 | 修复 |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| 照搬提纲或参考原句导致语气不自然 | medium | 保留事实,重组叙事形状 |
|
|
49
|
+
| AI 标志词、同构句或解释尾巴成片出现 | high | 改成具体行动、证据或关系后果 |
|
|
50
|
+
| 辞藻、比喻或身体反应堆叠 | medium | 删除无功能部分,保留角色化细节 |
|
|
51
|
+
|
|
52
|
+
### 格式一致度
|
|
53
|
+
|
|
54
|
+
检查段落是否按戏剧单元自然断开、引号与章节标记是否服从项目约定、目标字数是否使用当前流程的确定性口径。
|
|
55
|
+
|
|
56
|
+
### 可读性
|
|
57
|
+
|
|
58
|
+
检查是否啰嗦、信息顺序混乱、心理描写空转或重要因果被华丽表达遮住。带新信息、决断或情绪转折的独白不按句数压缩。
|
|
59
|
+
|
|
60
|
+
### 逻辑连贯
|
|
61
|
+
|
|
62
|
+
检查设定、时间线、角色知识、证据链和“原因 → 行动 → 结果 → 后果”是否闭合;证据不足时明确标注,不替作者补设定。
|
|
63
|
+
|
|
64
|
+
## 严重度与修复策略
|
|
65
|
+
|
|
66
|
+
| 级别 | 判定 | 动作 |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| blocking / critical | 核心契约、因果或事实无法成立 | 先修再继续下游写作 |
|
|
69
|
+
| high | 会明显损害追读、人物可信度或核心卖点 | 本轮修复 |
|
|
70
|
+
| medium | 局部拖慢、重复或表达不清 | 按收益排序修复 |
|
|
71
|
+
| low / optional | 不影响成立,只是可增强 | 不得包装成硬门槛 |
|
|
72
|
+
|
package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Agent 参考资料 Profile 契约
|
|
2
|
+
|
|
3
|
+
> 本文件是 story-architect 的唯一资料清单。story-architect 自身只描述任务能力,不复制文件清单。每次任务选择 `long` 或 `short` 后,只能加载 `Common + 当前 profile`;表外文件即使存在也不读取。其他 agent 按各自模板的参考表读取,只用本文件的 long / short 选择规则和质量覆盖表。
|
|
4
|
+
|
|
5
|
+
## 选择规则
|
|
6
|
+
|
|
7
|
+
1. 参数明确写“长篇 / 连载 / 章纲 / 日更”时选择 `long`。
|
|
8
|
+
2. 明确写“短篇 / 单篇 / 小节大纲 / 盐言 / 小程序短故事”时选择 `short`。
|
|
9
|
+
3. 参数未写明时,用项目产物判定:`大纲/细纲_第XXX章.md`、`追踪/` 属于 long;`小节大纲.md`、单文件 `正文.md` 属于 short。
|
|
10
|
+
4. 新建项目尚无产物时按调用方判定:story-long-write 的题材定位、核心设定、大纲任务为 `long`;story-short-write 的构思任务为 `short`。
|
|
11
|
+
5. 仍无法判定时返回 `Reference Profile: unresolved`,不得同时加载两套资料兜底。
|
|
12
|
+
6. 输出开头标记 `Reference Profile: long|short`;审查任务按被审查作品选择。
|
|
13
|
+
|
|
14
|
+
## Common
|
|
15
|
+
|
|
16
|
+
| 文件 | 读取条件 |
|
|
17
|
+
|---|---|
|
|
18
|
+
| [agent-quality.md](agent-quality.md) | 审查、评分或交付前检查;只提供跨体裁质量核心,必须同时加载当前 profile 的质量覆盖 |
|
|
19
|
+
| [genre-readers.md](genre-readers.md) | 判断目标读者、平台与期待 |
|
|
20
|
+
| [emotional-arc-design.md](emotional-arc-design.md) | 设计或审查情绪弧线、期待管理与兑现 |
|
|
21
|
+
| [plot-core-methods.md](plot-core-methods.md) | 卡文、剧情循环失效、五步高潮、过渡或日纲缺推进;short 只取与总篇幅兼容的方法 |
|
|
22
|
+
|
|
23
|
+
## Long profile
|
|
24
|
+
|
|
25
|
+
| 文件 | 读取条件 |
|
|
26
|
+
|---|---|
|
|
27
|
+
| [long-genre-catalog.md](long-genre-catalog.md) | 长篇题材定位或框架速查 |
|
|
28
|
+
| [long-genre-mechanics.md](long-genre-mechanics.md) | 提炼长篇核心梗、循环机制、事业线或金手指 |
|
|
29
|
+
| [genre-prose-cards.md](genre-prose-cards.md) | 确定长篇题材声线与长线约束 |
|
|
30
|
+
| [outline-methods.md](outline-methods.md) | 建大纲、卷纲或章节蓝图 |
|
|
31
|
+
| [outline-conflict.md](outline-conflict.md) | 主支线、AB 线与冲突结构 |
|
|
32
|
+
| [outline-rhythm.md](outline-rhythm.md) | 连载节奏、升级感与跨章兑现 |
|
|
33
|
+
| [opening-design.md](opening-design.md) | 新书开篇或黄金三章 |
|
|
34
|
+
| [long-emotional-methods.md](long-emotional-methods.md) | 设计跨章剧情单元的情绪发动机与兑现链 |
|
|
35
|
+
| [long-chapter-hooks.md](long-chapter-hooks.md) | 设计章首/章尾与跨章期待,不采用固定百字配额 |
|
|
36
|
+
| [long-suspense.md](long-suspense.md) | 编排短期、中期、远期悬念与回收周期 |
|
|
37
|
+
| [long-reversal.md](long-reversal.md) | 设计单元、卷级或全书反转,不采用全文百分比铁律 |
|
|
38
|
+
| [long-quality.md](long-quality.md) | 黄金三章、连载节奏、读者契约与终局储备审查 |
|
|
39
|
+
|
|
40
|
+
Long profile 禁止读取 `short-*` 文件,不得采用“6 章”“每节 500–800 字”“每两节一钩”“全文 70–85% 必须高潮”等短篇默认口径。
|
|
41
|
+
|
|
42
|
+
## Short profile
|
|
43
|
+
|
|
44
|
+
| 文件 | 读取条件 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| [short-genre-formulas.md](short-genre-formulas.md) | 需要短篇题材结构骨架时 |
|
|
47
|
+
| [short-paragraph-hooks.md](short-paragraph-hooks.md) | 设计段落留存、付费断点与小节内钩子 |
|
|
48
|
+
| [short-chapter-hooks.md](short-chapter-hooks.md) | 设计节首/节尾钩子与高密度接力 |
|
|
49
|
+
| [short-emotional-methods.md](short-emotional-methods.md) | 设计单篇内的羁绊、撕裂、拉扯与余韵 |
|
|
50
|
+
| [short-suspense.md](short-suspense.md) | 编排主悬念、副悬念、节间钩子和全文回收 |
|
|
51
|
+
| [short-reversal.md](short-reversal.md) | 设计短篇线索、误导、揭示位置与两层反转 |
|
|
52
|
+
| [short-quality.md](short-quality.md) | 审查全文密度、付费点、反转证据链和结尾兑现 |
|
|
53
|
+
|
|
54
|
+
Short profile 禁止读取 `long-*`、`outline-*`、`opening-design.md` 或 `genre-prose-cards.md`;不得把卷级、日更或跨十几章指标当硬门槛。
|
|
55
|
+
|
|
@@ -282,6 +282,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
282
282
|
| 升华式收尾 | 结尾对仗拔高、金句点题 -> 用一个动作或一句留白收住,把"意思"压进画面里 |
|
|
283
283
|
| 抽象命运/开端收束 | 「命运终于露出獠牙」「早已布好的棋局」「这一刻终于明白」「属于他的反击才刚刚开始」-> 改成角色当下可见的文件、动作、对话或物理后果;`check-ai-patterns.js` 报 `abstract-summary-tic` 时优先处理 |
|
|
284
284
|
| 套词密度过高 | 仿佛/一丝/一抹/深吸一口气/平静无波/指节泛白等成串复现(`cliche-density-tic`)-> 不是同义词轮换,整段回到角色当下证据:文件、动作、对话、物理后果 |
|
|
285
|
+
| 套式反应细节 | 指尖轻叩、袖口里攥紧、指节泛白、目光移开、“语气平静得像在念……”等反应成片(`stock-reaction-tic`)-> 逐处做删除测试;只标注情绪而不改变选择、关系、物件或动作结果的删掉,不换部位和同义动作;有伤势、动作失败或情节后果的身体细节可留 |
|
|
285
286
|
| 比喻密度过高 | 像/好像/仿佛/如同等比喻标记成片复现(`metaphor-density-tic`)-> 保留最能传递信息或情绪的一两个,其余改回具体动作、物件、声音、后果;不要换成新比喻 |
|
|
286
287
|
| 系统公告公文腔过密 | 方括号规则/面板/公告行里硬规则词成片(`system-notice-formality-tic`)-> 保留为角色看见的屏幕/公告/规则载体;只在载体内部白话化部分硬词,或补角色当场看懂的具体后果,不改成叙述者解释 |
|
|
287
288
|
|
|
@@ -575,7 +576,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
575
576
|
- [ ] **标点不压平**:没有把质问、爆发、犹豫全部压成句号;也没有随机堆砌 `?`/`!`,或用 `……`/`——` 硬造停顿
|
|
576
577
|
- [ ] **Show Don't Tell**:用行为代替形容词,用细节代替总结
|
|
577
578
|
- [ ] **句长达标**:叙述默认是逗号长句(逗号之间 8-12 字、整句 20-30 字,规则 3);短句只作偶尔的孤立重拍,用完回到逗号长句;没有连着的 ≤5 字碎片,没有通篇短句像提纲
|
|
578
|
-
- [ ] **detector advisory 逐条复核**:`micro-action-tic` / `abstract-summary-tic` / `cliche-density-tic` / `metaphor-density-tic` / `reasoning-chain-tic` / `system-notice-formality-tic` / `overcompressed-prose-tic` / `low-connective-density-tic` / `action-list-tic` 命中时按脚本给出的修法处理:先通读判断是不是机械复现,确属再改;功能性写法保留或标 `[需复核]`,不做同义词轮换、不机械注水
|
|
579
|
+
- [ ] **detector advisory 逐条复核**:`micro-action-tic` / `stock-reaction-tic` / `abstract-summary-tic` / `cliche-density-tic` / `metaphor-density-tic` / `reasoning-chain-tic` / `system-notice-formality-tic` / `overcompressed-prose-tic` / `low-connective-density-tic` / `action-list-tic` 命中时按脚本给出的修法处理:先通读判断是不是机械复现,确属再改;功能性写法保留或标 `[需复核]`,不做同义词轮换、不机械注水
|
|
579
580
|
- [ ] **不做硬指标投机**:不为反检测强制每句换行、50-60 字一行、对话 50%-60%、英文点省略号,或把 `地/得` 全改成 `的`
|
|
580
581
|
- [ ] **任务卡点服从原文边界**:抽象总结若改成角色办事被卡住,必须来自原文已有任务/证据/手续/物件缺口;不新增原文没有的事件链
|
|
581
582
|
- [ ] **去AI三遍法执行**:轻度只做Pass1,中度做Pass1+2,重度完整三遍
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
| ★★★★ | 无情绪声线:"声音不大,却带着……" / "语气毫无波澜" / "平静无波" / "声音平直/平平/听不出情绪" | "她声音不大,却带着不容置疑的力量" | 直接写台词内容、声音特征或动作 |
|
|
15
15
|
| ★★★★ | "他/她知道……" | "他知道这一切都来不及了" | 用行为展示认知 |
|
|
16
16
|
| ★★★ | "仿佛/犹如/宛若……一般" | "仿佛能穿透一切一般" | 删掉或白描 |
|
|
17
|
-
| ★★★ | "眼中闪过一丝……" / "嘴角勾起一抹……" | "眼中闪过一丝悲伤" |
|
|
18
|
-
| ★★★ | "心中涌起一股……" / "心头一震" | "心中涌起一股暖流" |
|
|
17
|
+
| ★★★ | "眼中闪过一丝……" / "嘴角勾起一抹……" | "眼中闪过一丝悲伤" | 删掉;写他当场说的话或做出的决定 |
|
|
18
|
+
| ★★★ | "心中涌起一股……" / "心头一震" | "心中涌起一股暖流" | 写它改变了什么:选择、台词、物件或后果 |
|
|
19
19
|
| ★★★ | 抽象命运/开端收束:"命运……棋局/獠牙" / "这一刻终于明白" / "反击才刚刚开始" | "命运终于露出獠牙;属于他的反击才刚刚开始" | 回到角色当下可见的文件、动作、对话或物理后果 |
|
|
20
20
|
| ★★ | 章末预告 "他不知道的是……" | "他不知道的是,更大的风暴即将来临" | 用具体钩子物件/事件收束,避免空泛预告 |
|
|
21
21
|
|
|
@@ -132,8 +132,8 @@
|
|
|
132
132
|
|
|
133
133
|
| 原文类型 | 替换方法 | 示例 |
|
|
134
134
|
|----------|----------|------|
|
|
135
|
-
| 抽象情绪词 |
|
|
136
|
-
| "感到XX" |
|
|
135
|
+
| 抽象情绪词 | 先看上下文是否已成立;再选选择、台词、物件、后果或一句直写 | “紧张”若不影响下一步可直写或删;若导致签名作废,就写作废的结果 |
|
|
136
|
+
| "感到XX" | 删除“感到”后按场景决定是否还要情绪句 | “他感到愤怒”可写“他火了”,也可直接写他撤回报价;不要默认换成攥拳 |
|
|
137
137
|
| 形容词堆砌 | 白描手法 | "美丽动人的笑容" → "她笑了" |
|
|
138
138
|
| 书面表达 | 口语化 | "不容置疑" → "就是" |
|
|
139
139
|
| 解释性描写 | 留白 | "他因为害怕而..." → "他退后一步" |
|
|
@@ -145,3 +145,5 @@
|
|
|
145
145
|
**替换不复用**:右列是方向示例,不是标准答案。同一禁用词在一章内多次命中时,各处给不同的具体化写法;同一个替换写法反复出现(每次都「垂下眼」、每个动作都补「了一下」),替换产物本身就成为新的模板指纹。
|
|
146
146
|
|
|
147
147
|
**套词密度优先处理**:`check-ai-patterns.js` 报 `cliche-density-tic` 时,说明禁用词不是零星误用,而是聚成了模板腔。处理顺序不是同义词替换,而是先删抽象总结,再把情绪/判断落到角色当下可见的动作、物件、对话和具体后果。
|
|
148
|
+
|
|
149
|
+
**套式反应逐处删除测试**:`stock-reaction-tic` 报警时,不代表禁止身体描写。逐处问:删掉后信息、选择、关系、物件或动作结果是否受损?无损就删,不把“指尖轻叩”换成“目光微沉”。伤势、动作失败、人物习惯或情节后果明确时可以保留。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 写作前必读。以下格式是当前仓库约定的默认正文交付格式;用户或目标平台有明确要求时,以用户/平台要求覆盖。
|
|
4
4
|
>
|
|
5
|
-
> **适用范围**:段落格式(戏剧单元/镜头优先,短段为底色,长段用于完整推理、氛围和情绪链)和对话格式适用于所有体裁。小节(beat)
|
|
5
|
+
> **适用范围**:段落格式(戏剧单元/镜头优先,短段为底色,长段用于完整推理、氛围和情绪链)和对话格式适用于所有体裁。小节(beat)结构仅适用于短篇;小节不设统一最低字数。长篇按 `visible_chars_v1` 测量同口径细纲 `字数目标`:内部带 ±12%,用户带 ±15%。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -119,19 +119,19 @@
|
|
|
119
119
|
### 基本规则
|
|
120
120
|
|
|
121
121
|
- 用数字编号(`1` `2` `3`)分割小节,每个小节是一个完整的叙事 beat
|
|
122
|
-
-
|
|
123
|
-
-
|
|
122
|
+
- 小节长度服从其叙事职责,不设统一最低字数;整篇按锁定的交付范围控制,长篇章节按细纲「字数目标」处理
|
|
123
|
+
- 小节数由情节阶段和转场需要决定;不为平均分配字数拆分完整动作链,也不把承担不同职责的小节硬合并
|
|
124
124
|
- 每小节推进一个明确的情节点
|
|
125
125
|
|
|
126
126
|
### 小节内部结构
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
每个小节至少完成第 1 项,其余按本节职责选用:
|
|
129
129
|
|
|
130
|
-
1. **一个主事件** +
|
|
131
|
-
2.
|
|
132
|
-
3.
|
|
133
|
-
4.
|
|
134
|
-
5.
|
|
130
|
+
1. **一个主事件** + **一个或多个真实推进**(风险、信息、关系、资源、决定、行动或读者理解至少改变一项;相关情节点可由同一动作链或对话同时兑现,不为数量新增阻碍、对话或冲突)
|
|
131
|
+
2. **情绪或压力落点**(确有变化时写清读者感受如何变化;任务、推理、手艺或等待链不强配情绪转折)
|
|
132
|
+
3. **读者模型或下一步变化**(新信息、旧信息改义、决定、行动或后果均可,不强配新事实)
|
|
133
|
+
4. **对白按功能使用**(需要时改变信息、策略、权力、关系或下一步行动;独自发现、核验证据、等待、手艺等场景可以无对白)
|
|
134
|
+
5. **推进单元按需揉进信息维度**:发生是主干,感知和反应只在提供新信息时织入同一镜头(参考 writing-craft.md 场景写法)
|
|
135
135
|
|
|
136
136
|
|
|
137
137
|
### 小节之间的衔接
|
|
@@ -166,4 +166,3 @@
|
|
|
166
166
|
6. **正文不使用破折号**:正文(含叙述、对话、心理描写)不使用破折号 `——`/`—` 或双连字符 `--`,改用句号、逗号、换行、动作 beat 或短句断开;不再设置“对话例外”
|
|
167
167
|
7. **禁止通篇句号化或随机标点堆砌**:标点必须跟语气/人物声线/情绪功能匹配;该质问时用问号,该爆发时少量感叹;犹豫、吞咽、未说完用动作或句长变化表达,不用 `……` / `——` 硬造停顿,也不得无功能地乱撒 `?`/`!`
|
|
168
168
|
8. **禁止正文混入章节元信息**:章节号只允许出现在标题/小节标记/文件名/追踪记录中。正文叙述、对话、心理描写里不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词;要改成角色能感知的事件锚点或相对时间,例如把“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
|
|
169
|
-
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
正文写作采用三件套:**通用正文要求 + 单题材正文提示卡 + 本书文风**。
|
|
10
10
|
|
|
11
|
-
-
|
|
11
|
+
- 通用正文要求只维护一份:严格消费细纲,按情节点义务写,缓慢推进,严禁提前写后续剧情,写完做确定性字数、钩子、禁用词、退化校验。
|
|
12
12
|
- 题材卡只管题材层稳定核心:世界观/生活逻辑、读者期待、核心爽点/情绪、常见场面、常见钩子和禁止漂移。
|
|
13
13
|
- 本书文风只管句长、标点、潜台词、锚点片段和笔调;它不覆盖题材卡,也不覆盖 `剧情/情绪模块.md` / `剧情/节奏.md`。
|
|
14
14
|
- 三者冲突时:章节细纲与连续性 > 情绪/节奏权威召回 > 题材卡 > 本书文风 > 通用技巧。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **用途**:读者心理需求、题材生命力规律、跨网站适配、平台差异、书名/简介技法、代入感管理。选题和定位时对照使用。
|
|
4
4
|
> **语气**:指令式——每个规律都要转化为选题、定位、书名、文案或开篇的可执行约束。
|
|
5
|
-
>
|
|
5
|
+
> **配合**:长篇结构与声线见 `long-genre-catalog.md`、`long-genre-mechanics.md` 与 `genre-prose-cards.md`;短篇结构见 `short-genre-formulas.md`。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 长篇章级钩子:章首/章尾选择与跨章期待
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 写长篇章首或章尾时加载。先按章节功能和跨章期待选类型,再决定落点与篇幅。
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
- 前置小无敌:打脸前必须把道具/人物/实力准备好,没有则读者担惊受怕,嘲讽变虐主
|
|
211
211
|
- 铺垫比打脸重要:铺垫到位后主角站着不说话都能装逼
|
|
212
212
|
- 打脸对象层级决定爽感层级:路人甲震惊不叫爽,有分量的人震惊才叫爽
|
|
213
|
-
-
|
|
213
|
+
- 章末钩子只写到期待成立为止;篇幅服从信息复杂度,不设固定百字配额
|
|
214
214
|
|
|
215
215
|
---
|
|
216
216
|
|
|
@@ -218,8 +218,8 @@
|
|
|
218
218
|
|
|
219
219
|
写完章首/章尾后对照:
|
|
220
220
|
|
|
221
|
-
- [ ]
|
|
221
|
+
- [ ] 章首尽早出现可识别的行动、异常或未闭合期待;不按固定百字位置机械卡点
|
|
222
222
|
- [ ] 章尾有让读者想翻下一页的东西
|
|
223
223
|
- [ ] 钩子强度与章节阶段匹配(日常章不必强钩子)
|
|
224
224
|
- [ ] 连续两章不用同一种钩子
|
|
225
|
-
- [ ]
|
|
225
|
+
- [ ] 钩子没有为凑长度重复解释,落点与本章功能、下一章承接一致
|