@oh-story/dsh 0.1.7 → 0.1.9
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 +30 -15
- package/lib/client.js +93 -16
- package/lib/client.js.map +2 -2
- package/lib/drama/manifest.json +165 -69
- package/lib/drama/skills/short-drama/SKILL.md +5 -1
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +126 -9
- package/lib/drama/skills/short-drama/scripts/project_tool.py +11 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +18 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +10 -1
- package/lib/drama/skills/short-drama-edit/SKILL.md +148 -0
- package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +81 -0
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +58 -0
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +96 -0
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +113 -0
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +55 -0
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1041 -0
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +456 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
- package/lib/drama/skills/short-drama-produce/SKILL.md +24 -3
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +28 -0
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +24 -5
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
- package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +57 -2
- package/lib/drama/skills/short-drama-review/SKILL.md +3 -0
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +20 -0
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +36 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +7 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +7 -1
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +101 -6
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +7 -1
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +35 -0
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +3 -1
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +13 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +35 -4
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +13 -2
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
- package/lib/index.js +4 -2
- package/lib/index.js.map +2 -2
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/manifest.json +28 -28
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +6 -27
- package/lib/novel-to-game/skills/game-build/SKILL.md +12 -29
- package/lib/novel-to-game/skills/game-concept/SKILL.md +10 -26
- package/lib/novel-to-game/skills/game-qa/SKILL.md +5 -15
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +1 -1
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -28
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +1 -2
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +6 -9
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +6 -11
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -4
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +1 -3
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +3 -5
- package/lib/oh-story/manifest.json +292 -172
- package/lib/oh-story/roles/character-designer.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +56 -242
- package/lib/oh-story/roles/story-architect.md +1 -1
- package/lib/oh-story/skills/story/SKILL.md +1 -1
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +10 -8
- package/lib/oh-story/skills/story-deslop/SKILL.md +20 -182
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +19 -47
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +10 -8
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-import/SKILL.md +2 -2
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +2 -29
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +176 -12
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +1 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +20 -193
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +19 -47
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +62 -7
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +10 -8
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
- package/lib/oh-story/skills/story-long-write/references/project-files.md +108 -0
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +87 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +2 -29
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +51 -52
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +8 -7
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +36 -15
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +69 -2
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +410 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +176 -12
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
- package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +283 -0
- package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-review/SKILL.md +13 -3
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +19 -47
- package/lib/oh-story/skills/story-review/references/author-memory.md +10 -8
- package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +6 -4
- package/lib/oh-story/skills/story-review/references/review-quality.md +2 -2
- package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +2 -29
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +17 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +19 -47
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +69 -2
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
- package/lib/oh-story/skills/story-short-write/SKILL.md +18 -186
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +10 -8
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +6 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +53 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
- package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +77 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
- package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
- package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +17 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +31 -1
- package/lib/video-recap/manifest.json +162 -162
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
- package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
- package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
- package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
- package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
- package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
- package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
- package/package.json +41 -41
|
@@ -6,6 +6,8 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
6
6
|
---
|
|
7
7
|
# story-deslop:网文去AI味
|
|
8
8
|
|
|
9
|
+
**文风裁决**:正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风并形成 `style_resolution`;无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
|
|
10
|
+
|
|
9
11
|
你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然,降低模板化、书面腔和过度工整感。
|
|
10
12
|
|
|
11
13
|
**核心信念:AI 味的主要问题并非语法错误;更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能,同时增加口语、停顿、跳跃和具体动作。**
|
|
@@ -14,7 +16,7 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
14
16
|
|
|
15
17
|
> Agent 兼容性:只检查当前运行时的 canonical 目录:Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`(`agent-name` 为目标 agent 名),不得因其他端文件存在而误判。Codex 使用同名 `agent_type`;Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时,必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct,因为 ZCode 3.3.4 不执行项目 custom agents;报告 `Fallback: project custom agents unavailable -> solo`。Claude/OpenCode 兼容面保留 `subagent_type`。
|
|
16
18
|
>
|
|
17
|
-
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version:
|
|
19
|
+
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 30` 不一致时(标记缺失、字段缺失/非整数、小于或大于 30)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 30)` 并提示重新运行 `/story-setup` 后新开会话;大于 30 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
|
|
18
20
|
|
|
19
21
|
## 核心哲学
|
|
20
22
|
|
|
@@ -38,9 +40,9 @@ AI味不按语法错误处理,也不需要"修正"。它属于风格问题:
|
|
|
38
40
|
|
|
39
41
|
去AI味只改"怎么说",不改"说什么"。剧情、人设、情节走向一概不动;不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题,那不是去AI味的活。
|
|
40
42
|
|
|
41
|
-
### 原则 4
|
|
43
|
+
### 原则 4:按文风保留有功能的语气与停顿
|
|
42
44
|
|
|
43
|
-
去AI味不是把文字全部磨成句号。质问里的 `?`、爆发峰值的少量 `!`
|
|
45
|
+
去AI味不是把文字全部磨成句号。质问里的 `?`、爆发峰值的少量 `!` 可以保留;犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 `……` / `——`;本书明确选择并登记的功能性停顿保留,也要清理无功能的 `!!!` 和随机标点堆砌。
|
|
44
46
|
|
|
45
47
|
### 边界:去AI味只处理读感与叙事功能
|
|
46
48
|
|
|
@@ -62,7 +64,7 @@ AI味不按语法错误处理,也不需要"修正"。它属于风格问题:
|
|
|
62
64
|
| 段落长度 | 随 beat 长短不一:爽点/转折压短,推理/氛围/情绪链放长 | 通篇同一长度,整齐均匀 |
|
|
63
65
|
| 句内节奏 | 叙述以逗号长句为主(逗号之间 8-12 字、整句 20-30 字,见 anti-ai-writing.md 规则 3) | 要么长句臃肿,要么通篇碎句像提纲 |
|
|
64
66
|
| 对话标签 | 标签低频且不公式化,多用动作/上下文引出;普通"说"可保留 | 几乎每句都有"说道/问道/笑道" |
|
|
65
|
-
| 情绪表达 |
|
|
67
|
+
| 情绪表达 | 直写有上下文支撑,反应带后果 | 空转的情绪总结句,或给每个情绪词配微动作 |
|
|
66
68
|
| 比喻 | 生活化("像哈士奇护食") | 文学化("如寒冰般") |
|
|
67
69
|
| 语气词 | "嘤""嘶""靠""行吧" | 几乎没有 |
|
|
68
70
|
| 省略 | 大量省略,读者自己脑补 | 面面俱到,生怕读者不懂 |
|
|
@@ -100,13 +102,13 @@ AI味不按语法错误处理,也不需要"修正"。它属于风格问题:
|
|
|
100
102
|
| 第X段 | 禁用词 | A | "眼中闪过一丝..." | 典型AI高频词 |
|
|
101
103
|
| 第Y段 | 句式 | B | "...,带着..." | AI惯用句式 |
|
|
102
104
|
| 第Z段 | 句式 | B | 连续3句排比 | 过于工整 |
|
|
103
|
-
| ... | 心理描写 | C | "
|
|
105
|
+
| ... | 心理描写 | C | "一丝悲伤涌上心头" | 空转的情绪总结句 |
|
|
104
106
|
| 第M段 | 节奏 | D | 段段4-6句、长度均匀 | 整段同节奏 |
|
|
105
107
|
| 第N段 | 重复描写 | C/D | 同一动作连续拆写 | 相邻段重复同一瞬间 |
|
|
106
108
|
| 第P段 | 解释腔/上帝感 | G | "她不知道的是…" / "演得真好" / "之所以…是因为" | 叙述者跳出角色当下解释/剧透/定性/升华(模式 8) |
|
|
107
109
|
| 第Q段 | 动作清单 | D/E | "伸手拿起…取过…放下…转身…" | 监控摄像头式步骤表,缺少视角温度/心理缓冲(模式 10) |
|
|
108
110
|
|
|
109
|
-
> 类型 → Gate 速查:禁用词 = A,句式套路 = B
|
|
111
|
+
> 类型 → Gate 速查:禁用词 = A,句式套路 = B,情绪空转 = C,节奏均匀 = D,对话腔调 = E,结尾升华 = F,解释腔/上帝感/安排感 = G,重复描写 = C/D。「诊断与分级」判定"7 Gate 中 4+ 个有问题"时按 Gate 列计数。
|
|
110
112
|
```
|
|
111
113
|
|
|
112
114
|
> 评价只输出 AI味等级(轻度/中度/重度)与问题标记;不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据,这类措辞是无依据的越权担保。
|
|
@@ -126,7 +128,7 @@ node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
|
|
|
126
128
|
|
|
127
129
|
### Phase 2:诊断与分级
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
用户明确指定 Gate 时,直接使用该范围;未指定时,根据「AI味扫描」检测结果判断 AI 味程度,决定处理策略:
|
|
130
132
|
|
|
131
133
|
| AI味程度 | 量化标准(参考值) | 特征 | 处理策略 |
|
|
132
134
|
|----------|---------|------|----------|
|
|
@@ -144,7 +146,7 @@ node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
|
|
|
144
146
|
|------|----------|---------|---------|---------|
|
|
145
147
|
| 禁用词密度 | 命中次数 / 千字 | ≤5 | 6-15 | >15 |
|
|
146
148
|
| 连续排比段数 | 连续相同句式结构的段落数 | ≤2 | 3-4 | ≥5 |
|
|
147
|
-
|
|
|
149
|
+
| 空转情绪句 | 无落点的情绪总结句数 / 总段落数 | ≤10% | 10-25% | >25% |
|
|
148
150
|
| 对话标签密度 | "说道/问道/笑道" 等 / 对话句数 | ≤30% | 30-50% | >50% |
|
|
149
151
|
| 平均段落句数 | 总句数 / 总段落数 | ≤3 | 3-5 | >5 |
|
|
150
152
|
| 重复描写密度 | 同一信息/动作/情绪连续多段拆写的处数 / 千字 | ≤1处/千字 | 2-3处/千字 | ≥4处/千字 |
|
|
@@ -159,7 +161,7 @@ node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
|
|
|
159
161
|
- **Pass 1(去泛化)** 覆盖 Gate A 的禁用词、Gate C 的抽象情绪、Gate D 的工整对仗、Gate E 的同语气对话粗扫、Gate G 的解释腔/上帝视角剧透/软评判
|
|
160
162
|
- **Pass 2(去书面化)** 覆盖 Gate A 中的书面腔词、Gate B 的句式套路深化
|
|
161
163
|
- **Pass 3(回自然感)** 覆盖 Gate D 的长短节奏、Gate E 的对话差异化、Gate F 的结尾去升华、补具体感官细节
|
|
162
|
-
-
|
|
164
|
+
- Gate 范围以用户指定为先,未指定时按上方处理策略表;三遍法仅安排所选 Gate 的执行顺序,不扩大改写范围。
|
|
163
165
|
|
|
164
166
|
---
|
|
165
167
|
|
|
@@ -169,180 +171,13 @@ node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
|
|
|
169
171
|
|
|
170
172
|
「诊断与分级」完成后,按以下顺序选择执行路径:
|
|
171
173
|
|
|
172
|
-
1. **已在 narrative-writer
|
|
173
|
-
2. **未在子代理内且按顶部顺序找到 `narrative-writer` agent**:按当前运行时调用;Antigravity 用 `invoke_subagent(TypeName: "narrative-writer")`,Claude/OpenCode/Codex 用各自字段。prompt 保持:`项目目录:{dir}\n任务描述:去AI味\n检查范围:{待处理的正文文件}\n作者偏好:{query 命中的 prose_style 项}\nAI味等级:{诊断与分级结果}\n处理策略:{
|
|
174
|
+
1. **已在 narrative-writer 子代理内**:按选定 Gate 范围 inline 执行,不再 spawn(嵌套 spawn 会被静默降级)。
|
|
175
|
+
2. **未在子代理内且按顶部顺序找到 `narrative-writer` agent**:按当前运行时调用;Antigravity 用 `invoke_subagent(TypeName: "narrative-writer")`,Claude/OpenCode/Codex 用各自字段。prompt 保持:`项目目录:{dir}\n任务描述:去AI味\nGate 细则:执行前按你的参考表读取 deslop-gates.md 的删除保护与所选 Gate(部署副本与本 skill 同源)\n检查分工:你负责本次语义去味;父流程负责 Phase 4 最终文件扫描,不重复整轮改稿\n检查范围:{待处理的正文文件}\n文风路径:{本书文风全文路径,无则写无}\nstyle_resolution:{本次生效要求及来源、被覆盖的默认条款、事实边界}\n作者偏好:{query 命中的 prose_style 项}\nAI味等级:{诊断与分级结果}\n处理策略:{实际选定的 Gate 范围;优先使用用户指定范围}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删,会丢才进 Gate 润色;看似解释/评价但承担小连贯的句子,压成白话承接、动作或物件锚点,不机械删除;已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点,但不新增原文没有的事件链;删除服从比例上限与字数下限,跌破下限改降AI重写。\n模式处理:按 references/anti-ai-writing.md 的问题模式目录执行;模式 8(解释腔/上帝视角/安排感)归入 Gate G,其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时,按 Gate C/D 合并去重;`。
|
|
174
176
|
3. **agent 不存在或 spawn 失败**:主线程 inline 执行。
|
|
175
177
|
|
|
176
|
-
####
|
|
177
|
-
|
|
178
|
-
每条被标记项先判能否删除,再考虑润色——很多 AI 味句是废话(解释、注水、凑数),润色后照样冗余。
|
|
179
|
-
|
|
180
|
-
1. 删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折?都不丢则直接删,不进 Gate。
|
|
181
|
-
2. 丢任意一项 → 保留信息进对应 Gate 改写(只删"怎么说"的 AI 味,不删"说什么")。
|
|
182
|
-
3. 删除服从既有"过度去AI味保护"与「诊断与分级」比例上限:不整段删、不删剧情功能;若删后跌破字数下限,改为降AI重写,不删完再用新废话凑字。
|
|
183
|
-
4. 删完通读:若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴,就是删过头的电报体(见 anti-ai-writing.md 模式 9)——把非峰值叙述句恢复成自然白话,不是接着删。删的是废话,不是中文的自然冗余;这条只调删减的度,禁用词与套路句式的清理力度不因此降低。
|
|
184
|
-
|
|
185
|
-
以下为各 Gate 的详细规则(删不掉的标记项按此润色;无论 agent 还是主线程执行,均须遵循):
|
|
186
|
-
|
|
187
|
-
#### 门禁 A:禁用词替换
|
|
188
|
-
|
|
189
|
-
加载 [references/banned-words.md](references/banned-words.md),对照禁用词表逐项检查。
|
|
190
|
-
|
|
191
|
-
**白名单机制**:
|
|
192
|
-
|
|
193
|
-
项目根目录下的 `.deslop-whitelist` 文件定义本项目的豁免词汇。
|
|
194
|
-
|
|
195
|
-
文件 schema:
|
|
196
|
-
- UTF-8 编码,一行一个词
|
|
197
|
-
- `#` 开头的行为注释;空行忽略;首尾空白 trim
|
|
198
|
-
- 大小写敏感(中文不区分)
|
|
199
|
-
|
|
200
|
-
匹配规则:扫描时若禁用词命中段对应的子串在 `.deslop-whitelist` 中存在同样的子串,跳过该次告警。匹配方式与 banned-words.md 一致,使用子串扫描。
|
|
201
|
-
|
|
202
|
-
示例 `.deslop-whitelist`:
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
# 项目自定义豁免词(一行一个,# 开头为注释)
|
|
206
|
-
缓缓 # 主角"缓缓"是绰号,不算禁用词
|
|
207
|
-
仿佛山海 # 章名
|
|
208
|
-
深邃的山谷 # 设定地名
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
白名单适用场景:
|
|
212
|
-
- 命中术语(如玄幻小说中的特定术语恰好匹配禁用词)
|
|
213
|
-
- 角色口头禅 / 绰号 / 设定专有名词
|
|
214
|
-
- 世界观专有名词
|
|
215
|
-
- 原文刻意使用的修辞手法
|
|
216
|
-
|
|
217
|
-
如果 `.deslop-whitelist` 不存在,不强制创建;在报告中说明可创建该文件。空白名单文件等同于无白名单。
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
**保护规则优先级**:保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式;Gate G 删的是非故事性的作者解释/旁白(不是情节)。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折;遇到冲突时改为降AI重写或标注 `[需复核]`。
|
|
221
|
-
|
|
222
|
-
替换规则:
|
|
223
|
-
- 禁用词 → 具体动作/细节描写
|
|
224
|
-
- 不能简单换成另一个形容词
|
|
225
|
-
- 要用"展示"替代"告诉"
|
|
226
|
-
|
|
227
|
-
示例:
|
|
228
|
-
- ❌ "眼中闪过一丝不易察觉的悲伤" → ✅ "他垂下眼"
|
|
229
|
-
- ❌ "深吸一口气" → ✅ 直接删;若确有功能,改成角色当下动作(如把话咽回去)
|
|
230
|
-
- ❌ "嘴角勾起一抹冷笑" → ✅ "他冷笑了一声"
|
|
231
|
-
|
|
232
|
-
#### 门禁 B:句式去套路
|
|
233
|
-
|
|
234
|
-
检测并替换以下AI高频句式:
|
|
235
|
-
|
|
236
|
-
| 句式 | 问题 | 替代方案 |
|
|
237
|
-
|------|------|----------|
|
|
238
|
-
| 否定铺垫后接肯定翻转 | **最毒** 中文 AI 句式之一 | 直接写后项,或改成动作/细节呈现 |
|
|
239
|
-
| 跨段「不是A / 也不是B / 只是C」 | 可能是工整铺排,也可能是辩解、悬念排除或情绪递进 | `formulaic-parallelism` advisory;通读语境,仅在重复提纲或拖慢画面时压缩 |
|
|
240
|
-
| 「至于X不X,怎么X」/同动词「不V A,不V B」 | 工整决策栏、否定清单;正常台词也可能出现 | 结合语境复核;若只是复述前文或细纲,压成一次判断或只留一项 |
|
|
241
|
-
| "...,带着..." | 万能状语,AI最爱 | 用独立短句或动作描写 |
|
|
242
|
-
| "声音不大,却带着……" | AI 最爱声音描写 | 直接写声音特征或动作 |
|
|
243
|
-
| 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 优先直接白描;确需比喻时只留少数生活化、角色化比喻 |
|
|
244
|
-
| "他/她知道..." | 直接告诉读者 | 用行为展示认知 |
|
|
245
|
-
| 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通"说"可保留;高频或公式化时用动作/上下文替代 |
|
|
246
|
-
| "仿佛/犹如/宛若/如同" | 文言腔过重 | 口语化表达或白描 |
|
|
247
|
-
| "不容置疑/显而易见" | 书面化判断词 | 用具体事实说话 |
|
|
248
|
-
|
|
249
|
-
**修饰词清扫**:检查物品/人物前面的形容词、定语、副词、指示代词、量词,多余即删。删除后阅读不影响才删;含义流失则改成简洁名词。
|
|
250
|
-
|
|
251
|
-
示例:
|
|
252
|
-
- "白色的药片" → "药片"
|
|
253
|
-
- "飞驰的汽车" → "汽车"
|
|
254
|
-
- "手里那截链子" → "链子"
|
|
255
|
-
- "多年的衣服" → "旧衣服"(保留含义)
|
|
256
|
-
|
|
257
|
-
形容词原则:一次只用一个形容词修饰或不修饰,不连用、不堆砌。
|
|
178
|
+
#### Gate 规则入口
|
|
258
179
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
AI写的心理描写特征:直接陈述情绪。
|
|
262
|
-
|
|
263
|
-
替换策略:
|
|
264
|
-
- "他很紧张" → "他的手在抖"
|
|
265
|
-
- "她很愤怒" → "她一把掀翻了桌子"
|
|
266
|
-
- "他很害怕" → "他扶住门框,半天没迈进去"
|
|
267
|
-
- "她很伤心" → "她背过身,把袖口攥皱了"
|
|
268
|
-
- "他感到一丝失落" → "他愣了一下,把手机放回口袋"
|
|
269
|
-
|
|
270
|
-
**重复描写去重**:当相邻段反复表达同一信息、同一动作或同一情绪时,按 Gate C/D 处理,不另开专项流程。
|
|
271
|
-
|
|
272
|
-
处理方法:
|
|
273
|
-
- 合并同一瞬间的重复描写,保留最能推动情绪或剧情的细节
|
|
274
|
-
- 如果原文把一个动作拆成"动作概述 → 感知细节 → 身体反应",改成同一段连续画面
|
|
275
|
-
- 若合并后节奏过快,恢复原文中有功能的信息,或把既有信息改成更自然的动作/对话表达;不在原动作后追加描写层,也不新增原文没有的情节
|
|
276
|
-
|
|
277
|
-
示例:
|
|
278
|
-
- ❌ "他拿起笔。手在抖。笔尖又停住。"
|
|
279
|
-
- ✅ "他拿起笔,笔尖刚碰到纸就偏了,手腕压了两次都没压稳。"
|
|
280
|
-
|
|
281
|
-
**重复语义四类**(同一意思不重复表达,只留一个最合适且简洁的):
|
|
282
|
-
|
|
283
|
-
| 类别 | 错误例 | 修法 |
|
|
284
|
-
|------|--------|------|
|
|
285
|
-
| 形容词重复 | "兴高采烈地笑着跑过来" | "笑着跑过来" |
|
|
286
|
-
| 近义词重复 | "非常重要的关键问题" | "关键问题" |
|
|
287
|
-
| 含义重复 | "我好饿,肚子咕咕叫" | "我好饿" |
|
|
288
|
-
| 上下文主语/物品重复 | 上文说"把抗抑郁药扔了一地",下文不必再写"地上的抗抑郁药",只写"药片" | 模糊简洁口语化即可 |
|
|
289
|
-
|
|
290
|
-
**多余场景/人物/物品描写**:服务情节人物之外的修饰描写直接删。
|
|
291
|
-
|
|
292
|
-
示例:
|
|
293
|
-
- "游惑手里握着一把短刀,刀锋冷冽" → "游惑手里握着一把短刀"
|
|
294
|
-
- "手铐紧紧扣住两人的手腕,中间连着一截不算长的链条" → "手铐扣住两人的手腕,中间连着链条"
|
|
295
|
-
- "暴雪极地的考场里,风雪没有停下的意思" → "暴雪极地的考场里"
|
|
296
|
-
|
|
297
|
-
#### 门禁 D:节奏调整
|
|
298
|
-
|
|
299
|
-
AI写作的节奏问题:句式过于整齐、段落过于匀称。
|
|
300
|
-
|
|
301
|
-
处理方法:
|
|
302
|
-
- 打断连续排比句(保留1-2个,删掉其余)
|
|
303
|
-
- 只拆臃肿修饰、堆叠比喻、抽象总结的长句;改写后叙述仍以逗号长句为主(见 anti-ai-writing.md 规则 3),不要把正常的逗号长句拆成短句串
|
|
304
|
-
- 偶尔用不完整句(口语感)
|
|
305
|
-
- 段落长短交错(不要每段都3-5行)
|
|
306
|
-
- 不按硬指标排版:番茄高分样本不是 50-60 字一行,也不是逢句号必换行;按动作/信息变化自然断段,读起来不卡即可
|
|
307
|
-
- 标点节奏跟语气走:避免通篇句号化;保留有功能的 `?` / 少量 `!`,把 `……` / `——` 改成动作、短句、换行、逗号或句号,删除随机堆砌或刷屏符号
|
|
308
|
-
|
|
309
|
-
#### 门禁 E:对话去腔调
|
|
310
|
-
|
|
311
|
-
AI写的对话特征:每句话都信息完整、逻辑清晰、表达精准。
|
|
312
|
-
|
|
313
|
-
处理方法:
|
|
314
|
-
- 加入口语化表达("嗯""哦""行吧")
|
|
315
|
-
- 适当打断对话(角色可以答非所问);对话被打断或拖长时用动作、换行或短句处理,不用 `——`
|
|
316
|
-
- 用动作穿插对话("她喝了口水。'然后呢?'")
|
|
317
|
-
- 删掉解释性对话(角色不会把自己的动机说清楚)
|
|
318
|
-
- Gate B 同样检查台词:连续工整否定、`至于X不X,怎么X`、同动词 `不V A,不V B` 不能因脚本的台词豁免而漏审;有明确人物/任务功能才保留
|
|
319
|
-
- 不为凑比例硬扩台词;番茄对话占比随题材波动,台词只在角色此刻真会说、必须说时增加
|
|
320
|
-
- 口误、停顿、粗话和重复要服务人物身份与情绪,不作为“真人感”装饰批量添加
|
|
321
|
-
- 不把所有对话末尾改成句号:质问保留问号,爆发峰值保留少量感叹;吞回去/没说完用动作停顿、短句或换行,不用 `……`
|
|
322
|
-
|
|
323
|
-
#### 门禁 F:结尾去升华
|
|
324
|
-
|
|
325
|
-
AI写作的结尾特征:总想总结、升华、点题。
|
|
326
|
-
|
|
327
|
-
处理方法:
|
|
328
|
-
- 删掉总结性语句
|
|
329
|
-
- 用动作/场景收尾,不要用感慨收尾
|
|
330
|
-
- 如果结尾有"他知道...""这一刻..."→ 基本可以删
|
|
331
|
-
|
|
332
|
-
#### 门禁 G:去解释腔/上帝感/安排感
|
|
333
|
-
|
|
334
|
-
最难察觉、最"像 AI"的一类(对应 anti-ai-writing.md 模式 8)。叙述者跳出角色当下去解释、剧透、总结、定性、升华,读者闻到"作者在场/剧情被安排"。
|
|
335
|
-
|
|
336
|
-
处理方法:
|
|
337
|
-
- 删解释因果:「之所以…是因为」「原来…」「这意味着」→ 删,因果让读者从动作对话里自己拼。
|
|
338
|
-
- 删上帝视角剧透:「她不知道的是」「殊不知」「多年以后」「仿佛预示着」→ 删。
|
|
339
|
-
- 删替读者定性:「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删,证据留给读者判断。
|
|
340
|
-
- 删隐蔽的软评判:评判性副词(「关切得恰到好处」)、剧透点破(「那点笑她看得分明」)、定性比喻(「像在宣判一件早已定好的事」)→ 删,或改成角色此刻带偏见的瞬间感觉。
|
|
341
|
-
- 注意:Gate G 删的是"非故事性的作者旁白",不是删情节。删完若变薄,靠角色动作/对话补,不补叙述者解说。
|
|
342
|
-
|
|
343
|
-
**任务卡点修法边界**:任务卡点不是固定公式,也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时,可以把解释总结压成角色当下要处理的具体卡点;原文没有缺口时,只删解释或改动作/对话,不新造剧情。所有卡点都先做“删掉试试”:删掉后不丢伏笔、钩子、信息、关系变化或必要转折,就压缩或删除。
|
|
344
|
-
|
|
345
|
-
---
|
|
180
|
+
实际执行者在逐项清除前读取 [references/deslop-gates.md](references/deslop-gates.md) 的删除保护与所选 Gate 细则;inline 与 agent 使用同源规则。三遍法仍按前文安排所选 Gate 的执行顺序,不另起一次全篇去味。
|
|
346
181
|
|
|
347
182
|
### Phase 4:确定性收尾(文件模式)
|
|
348
183
|
|
|
@@ -358,11 +193,13 @@ node scripts/normalize-punctuation.js <正文文件...>
|
|
|
358
193
|
- `check-ai-patterns.js` 只报告不改写:severity=blocking 的类别优先改正文并复扫;advisory 先通读判断,确属提纲感、解释腔或模板腔再改,功能性写法标 `[需复核]`。
|
|
359
194
|
- 它只是读感提示;完整类别、例外和修法见 `references/anti-ai-writing.md`。
|
|
360
195
|
- `check-degeneration.js` 报告模型退化(逐字复读/打转、末尾截断、占位符、工程词泄漏 `细纲`/`情节点` 等),每条带 `severity: blocking|advisory`。blocking 是退化信号,去AI味改不掉,应回去重新生成那一段再 deslop;advisory(tier2 章节/歧义词)只提示。
|
|
361
|
-
- `normalize-punctuation.js`
|
|
196
|
+
- `normalize-punctuation.js` 机械兜底:保留书级白名单获准的停顿,清除其余残留的 `……`、漏网破折号 `——`/`—`、双连字符 `--` 和独立行 `---`;默认不改变引号风格,也不把有功能的 `?` / 少量 `!` 改成句号。
|
|
362
197
|
- 知乎盐言短篇可保留 `「」`;只有用户或项目明确要求时,才给标点脚本加 `--quote-mode ascii` 或 `--quote-mode yan`。
|
|
363
198
|
|
|
364
199
|
---
|
|
365
200
|
|
|
201
|
+
**视角改写复核(仅本次要求切换视角时)**:交付前回读原文,逐项核对新增的感知/认知句。原文只说明事件发生,不等于人物已经看见或知道;不得自行补观察时点。没有原文依据的“进门时发现”“后来看到”等句子删去,或只呈现原有、当前场景可见的物件状态;不可得的信息暂不叙述。这个检查先于交付,不能用句式脚本通过代替。
|
|
202
|
+
|
|
366
203
|
### Phase 5:输出润色结果
|
|
367
204
|
|
|
368
205
|
```
|
|
@@ -379,7 +216,7 @@ node scripts/normalize-punctuation.js <正文文件...>
|
|
|
379
216
|
- 禁用词替换:{N} 处
|
|
380
217
|
- 句式调整:{N} 处(含否定翻转句式 {N}、",带着..." {N}、声音描写 {N})
|
|
381
218
|
- 修饰词清扫:{N} 处
|
|
382
|
-
-
|
|
219
|
+
- 情绪落地与重复说明清理:{N} 处
|
|
383
220
|
- 重复描写合并:{N} 处
|
|
384
221
|
- 监控动作清单合并:{N} 处
|
|
385
222
|
- 重复语义去重:{N} 处(形容词重复 {N}、近义词重复 {N}、含义重复 {N}、主语重复 {N})
|
|
@@ -423,6 +260,7 @@ node scripts/normalize-punctuation.js <正文文件...>
|
|
|
423
260
|
| 文件 | 何时加载 |
|
|
424
261
|
|------|----------|
|
|
425
262
|
| [references/banned-words.md](references/banned-words.md) | 检测和替换禁用词时 |
|
|
263
|
+
| [references/deslop-gates.md](references/deslop-gates.md) | 逐项清除前:删除保护与所选 Gate 的细则、示例 |
|
|
426
264
|
| [references/anti-ai-writing.md](references/anti-ai-writing.md) | **去AI味完整指南**:预防+三遍法+范例 |
|
|
427
265
|
| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | 文件模式落盘后做确定性标点收尾;默认保留引号风格 |
|
|
428
266
|
| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | 文件模式「AI味扫描」预检与「确定性收尾」复扫(只看引号外叙述),只报告不改写 |
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 去AI味完整指南
|
|
2
2
|
|
|
3
|
+
> 本文件的句长、视角、标点、修辞与禁用词是默认写法,服从 [style-resolution.md](style-resolution.md) 的逐维裁决。所选 Gate 检查表达效果,不因作者有意选择某写法就机械删除;获准命中按书级 `.deslop-whitelist` 处理。
|
|
4
|
+
|
|
3
5
|
<!-- 同名副本×5 字节同步,改动后跑 scripts/check-shared-files.sh -->
|
|
4
6
|
|
|
5
7
|
> 识别AI写作指纹、系统性去AI三遍法、禁用词约束、改写范例库。用于正文写作后做去AI味自检和改写时查阅。
|
|
@@ -105,18 +107,11 @@
|
|
|
105
107
|
|
|
106
108
|
### 规则 2:动作 + 对话 + 情绪反应
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
动作、对话与情绪反应按场景需要交织,不按固定顺序轮换,不为凑齐三项补反应。
|
|
109
111
|
|
|
110
|
-
|
|
111
|
-
动作 -> 对话 -> 情绪反应 -> 动作 -> 对话 -> ……
|
|
112
|
-
```
|
|
112
|
+
情绪没有固定译法,关键节点也可以准确直写。上下文已让情绪成立,不另补反应;需要补足信息时,优先选择、台词、策略、物件或实际后果。
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
- 不写"他很紧张" -> 写"手心全是汗,筷子差点掉了"
|
|
116
|
-
- 不写"她很愤怒" -> 写"她把杯子摔在地上,碎片弹到脚背上也没弯腰捡"
|
|
117
|
-
- 不写"他很伤心" -> 写"他在车里坐了二十分钟才发动引擎"
|
|
118
|
-
|
|
119
|
-
以上替换针对关键情绪节点;低强度过场情绪可一笔直写("他有点烦"),不必处处外化。
|
|
114
|
+
身体细节只有带来新信息、影响动作或体现人物与场景特点时才保留。只在句尾重复标注情绪的微动作删掉,不换部位或同义动作。去味时沿用原文已有事实,不凭空添加摔杯子、攥袖口等行为。
|
|
120
115
|
|
|
121
116
|
### 规则 3:句子该多长(短句是工具,不是默认)
|
|
122
117
|
|
|
@@ -157,7 +152,7 @@
|
|
|
157
152
|
1. 用行为代替形容词
|
|
158
153
|
2. 用细节代替总结
|
|
159
154
|
3. 用对话代替旁白说明
|
|
160
|
-
4.
|
|
155
|
+
4. 用后果代替情绪总结
|
|
161
156
|
|
|
162
157
|
---
|
|
163
158
|
|
|
@@ -219,8 +214,7 @@
|
|
|
219
214
|
> 完整禁用词表和句式模板见 [banned-words.md](banned-words.md)
|
|
220
215
|
|
|
221
216
|
### 正确替代示例
|
|
222
|
-
- '
|
|
223
|
-
- '她很伤心' -> '她背过身,把袖口攥皱了'
|
|
217
|
+
- '他感到一丝紧张,手心全是汗' -> '他签名时划破了纸'(身体细节只在造成后果时留)
|
|
224
218
|
- '"好的。"他说道' -> '"好的。"他把门卡塞回口袋'
|
|
225
219
|
- '他深吸一口气' -> '他把话咽回去'
|
|
226
220
|
|
|
@@ -276,7 +270,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
276
270
|
| 解释因果 | 「之所以…是因为」「原来…」「这意味着」「正是因为」-> 删。因果只从角色动作、对话、反应里让读者自己拼 |
|
|
277
271
|
| 上帝视角剧透 | 「她不知道的是」「殊不知」「多年以后」「冥冥之中」「仿佛预示着」-> 删。只写角色此刻知道的,悬念让读者自己悬 |
|
|
278
272
|
| 替读者下结论/定性 | 「演得真好」「这出戏她看过一遍」「他就是这样薄情的人」-> 删。把证据(神态、动作、台词)摆出来,定性留给读者 |
|
|
279
|
-
| 替角色总结心理 | 「她明白,这一切都是命」->
|
|
273
|
+
| 替角色总结心理 | 「她明白,这一切都是命」-> 无新增信息就删;确有角色判断时保留带偏见的闪念,不强配身体反应 |
|
|
280
274
|
| 总结/动机/评价链把意义说满 | 「他终于明白」「这是最好的选择」「所有人都会记住这一刻」-> 删掉定性,改成角色当下要处理的具体缺口、未完成动作或局部反馈;不是保留评价再硬塞物件/动作 |
|
|
281
275
|
| 安排感/硬铺垫 | 为后文强行交代背景、整段回忆倒叙 -> 背景按角色此刻真实所需,用闪念、半句话、物件零碎带出,不集中交代 |
|
|
282
276
|
| 升华式收尾 | 结尾对仗拔高、金句点题 -> 用一个动作或一句留白收住,把"意思"压进画面里 |
|
|
@@ -315,7 +309,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
315
309
|
|
|
316
310
|
自检:删完连读一遍,读感像提纲或流水口令,就是删过了——把非峰值句恢复成自然白话,不是接着删。
|
|
317
311
|
|
|
318
|
-
|
|
312
|
+
本模式约束的是删减的度,不降低清理力度:选定 Gate 内的禁用词、套路句式、告知式心理照删照改;回填只回结构虚词和连接,不保留、不恢复任何模板措辞。
|
|
319
313
|
|
|
320
314
|
### 模式 10:二修伪自然(油腻倒装 / 监控动作清单 / 对话指标化)
|
|
321
315
|
|
|
@@ -381,7 +375,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
381
375
|
## 系统性去AI三遍法
|
|
382
376
|
|
|
383
377
|
### Pass 1:去泛化(Strip Generic)
|
|
384
|
-
- 抽象情绪总结句 ->
|
|
378
|
+
- 抽象情绪总结句 -> 按规则 2 判断:删重复说明,保留准确直写,需要时用原文已有信息落地
|
|
385
379
|
- 假深度句 -> 删
|
|
386
380
|
- 意义膨胀 -> 缩小到具体影响
|
|
387
381
|
- 空洞结论 -> 删
|
|
@@ -411,13 +405,9 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
411
405
|
|
|
412
406
|
**原则**:少即是多。每段加 1-2 个具体细节就够了。
|
|
413
407
|
|
|
414
|
-
###
|
|
408
|
+
### 执行范围
|
|
415
409
|
|
|
416
|
-
|
|
417
|
-
|----------|------|
|
|
418
|
-
| 轻度 | 只做 Pass 1 |
|
|
419
|
-
| 中度 | Pass 1 + Pass 2 |
|
|
420
|
-
| 重度 | 完整三遍 + 重点段落重写 |
|
|
410
|
+
调用方指定 Gate 时,只处理选定 Gate;三遍法只安排顺序,不重新分级或扩大范围。未指定范围时,按实际问题选择适用检查。
|
|
421
411
|
|
|
422
412
|
### 自检清单
|
|
423
413
|
- 对话自然度检查:对话是否使用口语化表达,是否避免了书面语/正式腔调
|
|
@@ -456,31 +446,13 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
456
446
|
|
|
457
447
|
## 改写范例库
|
|
458
448
|
|
|
459
|
-
###
|
|
460
|
-
|
|
461
|
-
**紧张**
|
|
462
|
-
- '他感到一阵紧张,心跳不由自主地加快了'
|
|
463
|
-
- 他攥紧了手里的纸杯,水洒出来一些
|
|
449
|
+
### 情绪落地示例
|
|
464
450
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
- '一丝悲伤涌上心头,她的眼中闪过泪光'
|
|
471
|
-
- 她低头搅着咖啡,搅了很久
|
|
472
|
-
|
|
473
|
-
**害怕**
|
|
474
|
-
- '恐惧瞬间笼罩了他,他感到一阵战栗'
|
|
475
|
-
- 他的背贴在墙上,不敢动
|
|
476
|
-
|
|
477
|
-
**失望**
|
|
478
|
-
- '她感到一丝失落,心仿佛被什么东西揪住了'
|
|
479
|
-
- "哦。"她把手机锁了屏
|
|
480
|
-
|
|
481
|
-
**惊讶**
|
|
482
|
-
- '他的瞳孔微微收缩,显然没有想到会听到这样的话'
|
|
483
|
-
- 他张了张嘴,什么都没说出来
|
|
451
|
+
| 原文与语境 | 处理 |
|
|
452
|
+
|---|---|
|
|
453
|
+
| 「他很紧张。再错一题,补考也过不了。」 | 情绪有具体原因,可以直写,不补手抖或出汗 |
|
|
454
|
+
| 「她已经决定不再等他。她攥了攥袖口。」袖口动作无后续作用 | 删除第二句,不换成低头或咬唇 |
|
|
455
|
+
| 「手腕的伤让他握不住笔,签名只写了一半。」 | 保留,身体状态造成动作失败,不能当作情绪套话删除 |
|
|
484
456
|
|
|
485
457
|
### 场景描写范例
|
|
486
458
|
|
|
@@ -571,7 +543,7 @@ AI 喜欢把事情凑成三个以显"完整"。-> 砍到只剩最有力的一条
|
|
|
571
543
|
- [ ] **无书面语连词堆砌**:无"于是乎/与此同时/从而/因而/诚然"泛滥
|
|
572
544
|
- [ ] **章尾无总结升华**:用动作/对话/悬念收束,无感悟/哲理/预告
|
|
573
545
|
- [ ] **无大段心理描写**:心理活动不超过2段,无括号标注内心
|
|
574
|
-
- [ ]
|
|
546
|
+
- [ ] **情绪落地**:按规则 2 保留准确直写与有功能的身体细节,删除重复说明,不给每个情绪词配动作
|
|
575
547
|
- [ ] **对话口语化**:无书面腔,不同角色语气可区分
|
|
576
548
|
- [ ] **标点不压平**:没有把质问、爆发、犹豫全部压成句号;也没有随机堆砌 `?`/`!`,或用 `……`/`——` 硬造停顿
|
|
577
549
|
- [ ] **Show Don't Tell**:用行为代替形容词,用细节代替总结
|
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
加载优先级从高到低:
|
|
8
8
|
|
|
9
|
-
1.
|
|
9
|
+
1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议;句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁;
|
|
10
10
|
2. 用户在当前请求中的明确要求;
|
|
11
11
|
3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定;
|
|
12
12
|
4. 作者记忆中的本书偏好;
|
|
13
13
|
5. 作者记忆中的题材、流程和全局偏好;
|
|
14
14
|
6. 对标素材、通用方法和默认值。
|
|
15
15
|
|
|
16
|
+
按表达维度取最窄适用要求:低优先级只补缺项,不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序;审稿不因作者有意采用的表达本身扣分,真实可读性与因果问题仍照常评价。
|
|
17
|
+
|
|
16
18
|
作者记忆不能把本书事实写进 `.story/作者记忆/`,不能覆盖当前请求,不能降低审稿 rubric,也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。
|
|
17
19
|
|
|
18
20
|
## 文件与所有权
|
|
@@ -27,7 +29,7 @@
|
|
|
27
29
|
└── 变更记录.md # 最近 100 次、最新在前的事务记录
|
|
28
30
|
```
|
|
29
31
|
|
|
30
|
-
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query`
|
|
32
|
+
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。`query` 要显式传 `--book`、已知的 `--genre` / `--workflow`;只传 kind 不会返回本书或题材项。作者记忆不存在时,普通写作、审稿和去味任务直接继续,不自动初始化空目录;首次 `record` 会随事务创建。
|
|
31
33
|
|
|
32
34
|
工作区必须显式传给脚本。优先使用已经包含 `.story/作者记忆/` 的最近祖先;首次初始化时使用承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的创作工作区根。不要把用户主目录当默认工作区。
|
|
33
35
|
|
|
@@ -79,7 +81,7 @@
|
|
|
79
81
|
|
|
80
82
|
- 同一类型、范围、归纳文本再次出现时,脚本强化原条目,累加证据和确认次数,不重复建条目。
|
|
81
83
|
- 新偏好与 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。
|
|
82
|
-
-
|
|
84
|
+
- 同一范围的规则改版用 `replace`,启用新条目并将旧条目标成 `superseded`。本书例外用 `remember` 新建 book 条目,保留 global 习惯;只有作者明确撤销或改变旧规则范围时才跨范围替换。
|
|
83
85
|
- pending 可以用 `decide=activate|reject`;冲突候选不能绕过旧规则直接 activate。
|
|
84
86
|
- 作者说“忘掉 / 这不再是我的习惯”时用 `forget`,保留历史证据但不再加载。
|
|
85
87
|
- active 条目的语义不可原地偷改;语义变化必须 replace,历史才可审计。
|
|
@@ -139,17 +141,17 @@
|
|
|
139
141
|
```json
|
|
140
142
|
{
|
|
141
143
|
"action": "replace",
|
|
142
|
-
"old_ids": ["AP001"
|
|
144
|
+
"old_ids": ["AP001"],
|
|
143
145
|
"preference": {
|
|
144
146
|
"kind": "prose_style",
|
|
145
|
-
"scope": {"level": "
|
|
146
|
-
"assertion": "
|
|
147
|
-
"quote": "
|
|
147
|
+
"scope": {"level": "global", "value": null},
|
|
148
|
+
"assertion": "以后对话允许更长的试探,但避免解释设定",
|
|
149
|
+
"quote": "把以前对话都要短的习惯替换掉:以后可以让对话慢一点,多试探,但还是别拿台词讲设定。",
|
|
148
150
|
"source_ref": "conversation:2026-08-25",
|
|
149
151
|
"source": "explicit_user",
|
|
150
152
|
"confidence": "high",
|
|
151
153
|
"importance": "high",
|
|
152
|
-
"reason": "
|
|
154
|
+
"reason": "作者明确替换原有全局规则,不是新增本书例外"
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
```
|