@oh-story/dsh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/cordis.patch.yml +3 -0
- package/lib/client.js +1201 -0
- package/lib/client.js.map +7 -0
- package/lib/drama/LICENSE.upstream +21 -0
- package/lib/drama/manifest.json +1012 -0
- package/lib/drama/skills/short-drama/SKILL.md +153 -0
- package/lib/drama/skills/short-drama/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama/assets/creator-decision.example.jsonl +4 -0
- package/lib/drama/skills/short-drama/assets/production-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +36 -0
- package/lib/drama/skills/short-drama/assets/reference-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/references/audience-reveal.md +74 -0
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +94 -0
- package/lib/drama/skills/short-drama/references/creator-workflow.md +82 -0
- package/lib/drama/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +73 -0
- package/lib/drama/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +74 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +79 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +75 -0
- package/lib/drama/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +85 -0
- package/lib/drama/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +72 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +80 -0
- package/lib/drama/skills/short-drama/references/lifecycle-commands.md +130 -0
- package/lib/drama/skills/short-drama/references/look-development.md +52 -0
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +58 -0
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +126 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +142 -0
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +27 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +1963 -0
- package/lib/drama/skills/short-drama/scripts/selftest.py +287 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +187 -0
- package/lib/drama/skills/short-drama-assets/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-assets/assets/character-look.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/continuity.example.jsonl +4 -0
- package/lib/drama/skills/short-drama-assets/assets/decisions.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/location-view.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/occurrences.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/prop-state.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/characters.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/looks.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +89 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +164 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +123 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +146 -0
- package/lib/drama/skills/short-drama-assets/references/location-and-view.md +84 -0
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +111 -0
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +107 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +136 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +171 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +267 -0
- package/lib/drama/skills/short-drama-assets/scripts/selftest.py +89 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +157 -0
- package/lib/drama/skills/short-drama-develop/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +120 -0
- package/lib/drama/skills/short-drama-develop/assets/episode-map.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/story-engine.md +181 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +219 -0
- package/lib/drama/skills/short-drama-develop/references/creative-reference-intake.md +57 -0
- package/lib/drama/skills/short-drama-develop/references/director-brief-craft.md +113 -0
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +509 -0
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +240 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +112 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +109 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/201/214/345/234/272/345/226/234/345/211/247.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +92 -0
- package/lib/drama/skills/short-drama-develop/references/mechanism-loop.md +282 -0
- package/lib/drama/skills/short-drama-develop/references/multi-episode-intake.md +128 -0
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +211 -0
- package/lib/drama/skills/short-drama-develop/references/reveal-reversal-payoff.md +99 -0
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +293 -0
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +88 -0
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +359 -0
- package/lib/drama/skills/short-drama-develop/scripts/episode_intake.py +699 -0
- package/lib/drama/skills/short-drama-develop/scripts/selftest.py +47 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +181 -0
- package/lib/drama/skills/short-drama-image-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +187 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +37 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +128 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +31 -0
- package/lib/drama/skills/short-drama-image-prompts/examples/minimal-image-prompt-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +154 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +231 -0
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +122 -0
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +152 -0
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +96 -0
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +38 -0
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +177 -0
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +140 -0
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +92 -0
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +89 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +443 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +93 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-novel-analyze/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +116 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +124 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +155 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +141 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +67 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/novel_index.py +651 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/selftest.py +51 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +103 -0
- package/lib/drama/skills/short-drama-produce/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +140 -0
- package/lib/drama/skills/short-drama-produce/references/providers/gpt-image-2.md +24 -0
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-music.md +25 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +40 -0
- package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +60 -0
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +1635 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +964 -0
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +134 -0
- package/lib/drama/skills/short-drama-review/SKILL.md +178 -0
- package/lib/drama/skills/short-drama-review/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-review/assets/finding-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/assets/supersession-decision.example.json +42 -0
- package/lib/drama/skills/short-drama-review/assets/verdict-template.json +32 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-findings.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-verdict.json +34 -0
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +114 -0
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +270 -0
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +85 -0
- package/lib/drama/skills/short-drama-review/references/review-method.md +82 -0
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +115 -0
- package/lib/drama/skills/short-drama-review/references/rubric-source-analysis.md +108 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +164 -0
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +166 -0
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +87 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +325 -0
- package/lib/drama/skills/short-drama-review/scripts/selftest.py +87 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-audition.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-template.json +49 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +32 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/revision-lineage.fragment.json +12 -0
- package/lib/drama/skills/short-drama-storyboard/assets/scene-visual-plan.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +241 -0
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +169 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +70 -0
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +157 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +192 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +29 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/selftest.py +191 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +824 -0
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-video-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/coverage-scope.fragment.json +21 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +101 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +212 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-terminal.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +31 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/performance.fragment.json +38 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +46 -0
- package/lib/drama/skills/short-drama-video-prompts/examples/minimal-music-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +240 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +255 -0
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +93 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +304 -0
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +191 -0
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +312 -0
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +168 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +329 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +450 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +327 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/selftest.py +82 -0
- package/lib/drama/skills/short-drama-write/SKILL.md +284 -0
- package/lib/drama/skills/short-drama-write/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-write/assets/beats.jsonl +2 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card-standalone.json +120 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card.json +55 -0
- package/lib/drama/skills/short-drama-write/assets/screenplay.md +36 -0
- package/lib/drama/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +89 -0
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +519 -0
- package/lib/drama/skills/short-drama-write/references/production-format-dialect.md +273 -0
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +51 -0
- package/lib/drama/skills/short-drama-write/references/scene-sound-dramaturgy.md +43 -0
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +260 -0
- package/lib/drama/skills/short-drama-write/references/script-craft.md +558 -0
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +94 -0
- package/lib/drama/skills/short-drama-write/references/substitutable-realization.md +107 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +309 -0
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +1091 -0
- package/lib/drama/skills/short-drama-write/scripts/selftest.py +229 -0
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +416 -0
- package/lib/index.js +756 -0
- package/lib/index.js.map +7 -0
- package/lib/oh-story/LICENSE.upstream +21 -0
- package/lib/oh-story/manifest.json +1351 -0
- package/lib/oh-story/roles/chapter-extractor.md +314 -0
- package/lib/oh-story/roles/character-designer.md +169 -0
- package/lib/oh-story/roles/consistency-checker.md +190 -0
- package/lib/oh-story/roles/narrative-writer.md +294 -0
- package/lib/oh-story/roles/story-architect.md +195 -0
- package/lib/oh-story/roles/story-explorer.md +364 -0
- package/lib/oh-story/roles/story-researcher.md +304 -0
- package/lib/oh-story/skills/browser-cdp/SKILL.md +175 -0
- package/lib/oh-story/skills/story/SKILL.md +116 -0
- package/lib/oh-story/skills/story/VERSION +1 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +327 -0
- package/lib/oh-story/skills/story-cover/references/cover-styles.md +210 -0
- package/lib/oh-story/skills/story-deslop/SKILL.md +445 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-import/SKILL.md +634 -0
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +82 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +134 -0
- package/lib/oh-story/skills/story-import/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +442 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +175 -0
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +329 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +270 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +530 -0
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +559 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +80 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +149 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +133 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +342 -0
- package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +197 -0
- package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +114 -0
- package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +105 -0
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +207 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +78 -0
- package/lib/oh-story/skills/story-long-write/SKILL.md +327 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +302 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-long-write/references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +502 -0
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +209 -0
- package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +188 -0
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-long-write/references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-long-write/references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-long-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +326 -0
- package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +354 -0
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +711 -0
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +622 -0
- package/lib/oh-story/skills/story-long-write/references/quality-checklist.md +184 -0
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +109 -0
- package/lib/oh-story/skills/story-long-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +347 -0
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +140 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +284 -0
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-review/SKILL.md +483 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-review/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-review/references/quality-checklist.md +250 -0
- package/lib/oh-story/skills/story-review/references/quality-rubric.md +55 -0
- package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +18 -0
- package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +19 -0
- package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +20 -0
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +495 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +247 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +278 -0
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-basics.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-design-methods.md +438 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-relations.md +395 -0
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +79 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +490 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +425 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-readers.md +245 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-techniques.md +475 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +685 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +561 -0
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +242 -0
- package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +54 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +212 -0
- package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +433 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +156 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +178 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +166 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +151 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +153 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +210 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +488 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-write/references/quality-checklist.md +222 -0
- package/lib/oh-story/skills/story-short-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +185 -0
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +133 -0
- package/lib/oh-story/skills/story-short-write/references/short-format.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +35 -0
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +158 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +153 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +410 -0
- package/lib/types/client/file-activity.d.ts +30 -0
- package/lib/types/client/file-activity.d.ts.map +1 -0
- package/lib/types/client/file-tree.d.ts +20 -0
- package/lib/types/client/file-tree.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +12 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/jsonl-preview.d.ts +15 -0
- package/lib/types/client/jsonl-preview.d.ts.map +1 -0
- package/lib/types/client/markdown-preview.d.ts +38 -0
- package/lib/types/client/markdown-preview.d.ts.map +1 -0
- package/lib/types/index.d.ts +25 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/native-hooks.d.ts +16 -0
- package/lib/types/native-hooks.d.ts.map +1 -0
- package/lib/types/role-provider.d.ts +6 -0
- package/lib/types/role-provider.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts +10 -0
- package/lib/types/role-tool.d.ts.map +1 -0
- package/lib/types/skill-provider.d.ts +15 -0
- package/lib/types/skill-provider.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +13 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -0
- package/lib/types/workspace-route.d.ts +10 -0
- package/lib/types/workspace-route.d.ts.map +1 -0
- package/lib/types/workspace-security.d.ts +9 -0
- package/lib/types/workspace-security.d.ts.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/client/index.tsx", "../src/client/file-activity.ts", "../src/client/file-tree.ts", "../src/client/jsonl-preview.tsx", "../src/client/markdown-preview.tsx", "inline-css:/home/runner/work/oh-story-dsh/oh-story-dsh/packages/dsh-plugin/src/client/plugin.css"],
|
|
4
|
+
"sourcesContent": ["import type { AssistantBlock, ClientContext, RunningToolCall } from \"@deepseek-ai/dsh-client-runtime/client\";\nimport type { ConvViewProps } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type { ToolCallViewProps } from \"@deepseek-ai/dsh-client-ui-tool/client\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n activeFileMutation,\n creativeRelativePath,\n previewMutation,\n workbenchModeForPath,\n type WorkbenchMode,\n type FileMutationActivity\n} from \"./file-activity.js\";\nimport { buildFileTree, type FileTreeNode } from \"./file-tree.js\";\nimport { JsonlPreview } from \"./jsonl-preview.js\";\nimport { MarkdownPreview } from \"./markdown-preview.js\";\nimport styles from \"./plugin.css?inline\";\n\nexport const name = \"oh-story\";\nexport const inject = [\"slots\"];\n\ninterface WorkspaceFile { readonly path: string; readonly bytes: number }\ninterface WorkspacePayload {\n readonly cwd: string;\n readonly files: readonly WorkspaceFile[];\n readonly shortDrama: Record<string, unknown> | null;\n readonly mode: \"dsh-session\";\n}\ninterface FilePayload {\n readonly path: string;\n readonly content: string;\n readonly bytes: number;\n readonly version: string;\n}\ninterface FileBuffer {\n readonly content: string;\n readonly saved: string;\n readonly source: \"disk\" | \"human\" | \"agent\";\n readonly version: string;\n}\n\nconst GROUP_ORDER: Readonly<Record<WorkbenchMode, readonly string[]>> = {\n story: [\"\u6B63\u6587\", \"\u5927\u7EB2\", \"\u8BBE\u5B9A\", \"\u8FFD\u8E2A\", \"\u5BF9\u6807\", \"\u53C2\u8003\u8D44\u6599\"],\n drama: [\"\u9879\u76EE\", \"\u8F93\u5165\", \"\u9879\u76EE\u5F00\u53D1\", \"\u8BBE\u5B9A\u96C6\", \"\u5267\u96C6\", \"\u5BA1\u67E5\", \"\u521B\u4F5C\u8005\u51B3\u7B56\", \"\u4EA4\u4ED8\"]\n};\n\nfunction groupForPath(path: string): string {\n return path === \"short-drama.json\" ? \"\u9879\u76EE\" : path.split(\"/\", 1)[0] ?? \"\u5176\u4ED6\";\n}\n\nfunction preferredFile(files: readonly WorkspaceFile[], mode: WorkbenchMode): string | undefined {\n const matching = files.filter((file) => workbenchModeForPath(file.path) === mode);\n const preferences = mode === \"story\"\n ? [/^\u6B63\u6587\\/.*\\.md$/u, /^\u5927\u7EB2\\/.*\\.md$/u, /\\.md$/u]\n : [/^\u5267\u96C6\\/EP0*1\\/screenplay\\.md$/iu, /^\u5267\u96C6\\/.*\\/screenplay\\.md$/iu, /^\u9879\u76EE\u5F00\u53D1\\/creative-brief\\.md$/u, /^\u8F93\u5165\\/.*\\.md$/u, /\\.md$/u, /^short-drama\\.json$/u];\n for (const pattern of preferences) {\n const match = matching.find((file) => pattern.test(file.path));\n if (match !== undefined) return match.path;\n }\n return matching[0]?.path;\n}\n\nconst EMPTY_BLOCKS: readonly AssistantBlock[] = [];\nconst EMPTY_CALLS: readonly RunningToolCall[] = [];\n\nfunction endpoint(path: string, sessionId: string, file?: string): string {\n const url = new URL(`/oh-story/${path}`, globalThis.location.origin);\n url.searchParams.set(\"sessionId\", sessionId);\n if (file !== undefined) url.searchParams.set(\"path\", file);\n return url.toString();\n}\n\nasync function json<T>(response: Response): Promise<T> {\n const value = await response.json() as T & { readonly error?: string };\n if (!response.ok) throw new Error(value.error ?? `HTTP ${String(response.status)}`);\n return value;\n}\n\nfunction FileTreeNodes({\n nodes,\n depth,\n expanded,\n selected,\n activityPath,\n onToggle,\n onSelect\n}: {\n readonly nodes: readonly FileTreeNode[];\n readonly depth: number;\n readonly expanded: Readonly<Record<string, boolean>>;\n readonly selected: string | undefined;\n readonly activityPath: string | undefined;\n readonly onToggle: (path: string, open: boolean) => void;\n readonly onSelect: (path: string) => void;\n}) {\n return <>{nodes.map((node) => {\n if (node.kind === \"file\") return <button\n type=\"button\"\n key={node.path}\n style={{ paddingLeft: `${String(14 + depth * 14)}px` }}\n data-file-path={node.path}\n data-agent-target={node.path === activityPath || undefined}\n aria-current={node.path === selected ? \"page\" : undefined}\n onClick={() => { onSelect(node.path); }}\n >{node.name}</button>;\n const open = expanded[node.path] ?? selected?.startsWith(`${node.path}/`) === true;\n return <details className=\"oh-story-file-folder\" key={node.path} open={open} onToggle={(event) => { onToggle(node.path, event.currentTarget.open); }}>\n <summary style={{ paddingLeft: `${String(7 + depth * 14)}px` }}>{node.name}<span>{node.fileCount}</span></summary>\n <FileTreeNodes\n nodes={node.children}\n depth={depth + 1}\n expanded={expanded}\n selected={selected}\n activityPath={activityPath}\n onToggle={onToggle}\n onSelect={onSelect}\n />\n </details>;\n })}</>;\n}\n\nfunction useWorkspace(sessionId: string): {\n readonly workspace: WorkspacePayload | undefined;\n readonly error: string | undefined;\n readonly reload: () => void;\n} {\n const [version, setVersion] = useState(0);\n const [workspace, setWorkspace] = useState<WorkspacePayload>();\n const [error, setError] = useState<string>();\n const reload = useCallback(() => { setVersion((value) => value + 1); }, []);\n useEffect(() => {\n const controller = new AbortController();\n setError(undefined);\n void fetch(endpoint(\"workspace\", sessionId), { signal: controller.signal })\n .then((response) => json<WorkspacePayload>(response))\n .then(setWorkspace)\n .catch((reason: unknown) => {\n if (!controller.signal.aborted) setError(reason instanceof Error ? reason.message : String(reason));\n });\n return () => { controller.abort(); };\n }, [sessionId, version]);\n return { workspace, error, reload };\n}\n\nfunction CreativeWorkbench({ sessionId, useSession }: Pick<ConvViewProps, \"sessionId\" | \"useSession\">) {\n const { workspace, error, reload } = useWorkspace(sessionId);\n const partialBlocks = useSession((value) => value.partial?.blocks ?? EMPTY_BLOCKS);\n const runningCalls = useSession((value) => value.runningCalls ?? EMPTY_CALLS);\n const activity = useMemo(() => activeFileMutation(partialBlocks, runningCalls), [partialBlocks, runningCalls]);\n const activityPath = creativeRelativePath(activity?.path, workspace?.cwd);\n const activityMode = workbenchModeForPath(activityPath);\n const [workbench, setWorkbench] = useState<WorkbenchMode>(\"story\");\n const initializedWorkbench = useRef(false);\n const [selected, setSelected] = useState<string>();\n const [buffers, setBuffers] = useState<Record<string, FileBuffer>>({});\n const buffersRef = useRef<Record<string, FileBuffer>>({});\n const [refreshVersion, setRefreshVersion] = useState(0);\n const [fileError, setFileError] = useState<string>();\n const [conflict, setConflict] = useState<string>();\n const [saving, setSaving] = useState(false);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const surfaceRef = useRef<HTMLDivElement>(null);\n const navRef = useRef<HTMLElement>(null);\n const lastActivity = useRef<FileMutationActivity>();\n const settleTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const buffer = selected === undefined ? undefined : buffers[selected];\n const dirty = buffer?.source === \"human\" && buffer.content !== buffer.saved;\n const selectedLower = selected?.toLocaleLowerCase();\n const markdown = selectedLower?.endsWith(\".md\") === true;\n const jsonl = selectedLower?.endsWith(\".jsonl\") === true;\n const structured = jsonl || selectedLower?.endsWith(\".json\") === true;\n const previewable = markdown || jsonl;\n const [editorMode, setEditorMode] = useState<\"preview\" | \"source\">(\"preview\");\n\n useEffect(() => { buffersRef.current = buffers; }, [buffers]);\n\n useEffect(() => {\n if (workspace === undefined || initializedWorkbench.current) return;\n const hasStory = workspace.files.some((file) => workbenchModeForPath(file.path) === \"story\");\n if (workspace.shortDrama !== null && !hasStory) setWorkbench(\"drama\");\n initializedWorkbench.current = true;\n }, [workspace]);\n\n useEffect(() => {\n if (activityMode !== undefined) setWorkbench(activityMode);\n }, [activityMode]);\n\n useEffect(() => {\n setEditorMode(previewable ? \"preview\" : \"source\");\n }, [previewable, selected]);\n\n useEffect(() => {\n if (activityPath !== undefined) { setSelected(activityPath); return; }\n if (selected !== undefined && (\n (workspace?.files.some((file) => file.path === selected) ?? false)\n || buffers[selected] !== undefined\n ) && workbenchModeForPath(selected) === workbench) return;\n setSelected(workspace === undefined ? undefined : preferredFile(workspace.files, workbench));\n }, [activityPath, buffers, selected, workbench, workspace]);\n\n useEffect(() => {\n if (selected === undefined) return;\n const exists = workspace?.files.some((file) => file.path === selected) ?? false;\n if (activityPath === selected && !exists) return;\n const controller = new AbortController();\n setFileError(undefined);\n void fetch(endpoint(\"file\", sessionId, selected), { signal: controller.signal })\n .then((response) => json<FilePayload>(response))\n .then((file) => {\n const existing = buffersRef.current[file.path];\n if (existing?.source === \"human\" && existing.content !== existing.saved) {\n setConflict(`${file.path} \u5DF2\u88AB Agent \u66F4\u65B0\uFF1B\u4F60\u7684\u672A\u4FDD\u5B58\u7248\u672C\u4ECD\u4FDD\u7559\u3002`);\n return;\n }\n setBuffers((current) => ({\n ...current,\n [file.path]: { content: file.content, saved: file.content, source: \"disk\", version: file.version }\n }));\n })\n .catch((reason: unknown) => {\n if (!controller.signal.aborted) setFileError(reason instanceof Error ? reason.message : String(reason));\n });\n return () => { controller.abort(); };\n }, [activityPath, refreshVersion, selected, sessionId, workspace?.files]);\n\n useEffect(() => {\n if (activity === undefined || activityPath === undefined) return;\n setSelected(activityPath);\n const existing = buffers[activityPath];\n if (existing?.source === \"human\" && existing.content !== existing.saved) {\n setConflict(`${activityPath} \u6B63\u7531 Agent \u4FEE\u6539\uFF1B\u4F60\u7684\u672A\u4FDD\u5B58\u7248\u672C\u5DF2\u9501\u5B9A\uFF0C\u4E0D\u4F1A\u88AB\u8986\u76D6\u3002`);\n return;\n }\n const next = previewMutation(activity, existing?.saved ?? \"\");\n if (next === undefined) return;\n setConflict(undefined);\n setBuffers((current) => {\n const currentBuffer = current[activityPath];\n if (currentBuffer?.source === \"agent\" && currentBuffer.content === next) return current;\n return {\n ...current,\n [activityPath]: {\n content: next,\n saved: currentBuffer?.saved ?? \"\",\n source: \"agent\",\n version: currentBuffer?.version ?? \"\"\n }\n };\n });\n }, [activity, activityPath, buffers]);\n\n useEffect(() => {\n if (activity !== undefined) {\n if (settleTimer.current !== undefined) clearTimeout(settleTimer.current);\n lastActivity.current = activity;\n return;\n }\n if (lastActivity.current === undefined) return;\n settleTimer.current = setTimeout(() => {\n lastActivity.current = undefined;\n reload();\n setRefreshVersion((value) => value + 1);\n }, 180);\n return () => {\n if (settleTimer.current !== undefined) clearTimeout(settleTimer.current);\n };\n }, [activity, reload]);\n\n useEffect(() => {\n if (selected === undefined) return;\n for (const button of navRef.current?.querySelectorAll<HTMLButtonElement>(\"button[data-file-path]\") ?? []) {\n if (button.dataset.filePath === selected) {\n button.scrollIntoView({ block: \"nearest\" });\n break;\n }\n }\n }, [selected]);\n\n useEffect(() => {\n if (activity !== undefined || workspace === undefined) return;\n const sessionSurface = surfaceRef.current?.parentElement;\n if (sessionSurface === undefined || sessionSurface === null) return;\n const knownPaths = new Set(workspace.files.map((file) => file.path));\n const followOfficialFileLink = (event: MouseEvent): void => {\n const origin = event.target;\n if (!(origin instanceof Element)) return;\n const control = origin.closest<HTMLElement>(\"button, a\");\n if (control === null || control.closest(\".oh-story-split-surface\") !== null) return;\n const candidates = [control.title, control.getAttribute(\"aria-label\"), control.textContent];\n for (const candidate of candidates) {\n const path = creativeRelativePath(candidate?.trim().replace(/^Open\\s+/u, \"\"), workspace.cwd);\n if (path === undefined || !knownPaths.has(path)) continue;\n event.preventDefault();\n event.stopPropagation();\n setConflict(undefined);\n setWorkbench(workbenchModeForPath(path) ?? \"story\");\n setSelected(path);\n break;\n }\n };\n sessionSurface.addEventListener(\"click\", followOfficialFileLink, true);\n return () => { sessionSurface.removeEventListener(\"click\", followOfficialFileLink, true); };\n }, [activity, workspace]);\n\n const save = useCallback(async () => {\n if (selected === undefined || buffer === undefined) return;\n const submitted = buffer;\n setSaving(true);\n setFileError(undefined);\n try {\n const file = await json<FilePayload>(await fetch(endpoint(\"file\", sessionId, selected), {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content: submitted.content, baseVersion: submitted.version })\n }));\n setBuffers((current) => {\n const latest = current[selected];\n if (latest === undefined) return current;\n const unchanged = latest.content === submitted.content;\n return {\n ...current,\n [selected]: {\n content: unchanged ? file.content : latest.content,\n saved: file.content,\n source: unchanged ? \"disk\" : \"human\",\n version: file.version\n }\n };\n });\n setConflict(undefined);\n reload();\n } catch (reason) {\n setFileError(reason instanceof Error ? reason.message : String(reason));\n } finally {\n setSaving(false);\n }\n }, [buffer, reload, selected, sessionId]);\n\n const groups = useMemo(() => {\n const value = new Map<string, WorkspaceFile[]>();\n const all = [...(workspace?.files ?? [])].filter((file) => workbenchModeForPath(file.path) === workbench);\n if (activityPath !== undefined && !all.some((file) => file.path === activityPath)) all.push({ path: activityPath, bytes: 0 });\n all.sort((left, right) => left.path.localeCompare(right.path, \"zh-Hans-CN\"));\n for (const file of all) {\n const directory = groupForPath(file.path);\n const files = value.get(directory) ?? [];\n files.push(file);\n value.set(directory, files);\n }\n const order = GROUP_ORDER[workbench];\n return [...value.entries()].sort(([left], [right]) => {\n const leftIndex = order.indexOf(left);\n const rightIndex = order.indexOf(right);\n return (leftIndex < 0 ? order.length : leftIndex) - (rightIndex < 0 ? order.length : rightIndex)\n || left.localeCompare(right, \"zh-Hans-CN\");\n });\n }, [activityPath, workbench, workspace]);\n\n const selectWorkbench = (next: WorkbenchMode): void => {\n setWorkbench(next);\n setConflict(undefined);\n const target = workspace === undefined ? undefined : preferredFile(workspace.files, next);\n setSelected(target);\n };\n const selectedGroup = selected === undefined ? undefined : groupForPath(selected);\n const toggleGroup = (key: string, open: boolean): void => {\n setExpanded((current) => ({ ...current, [key]: open }));\n };\n\n return <div ref={surfaceRef} className=\"oh-story-split-surface\">\n <style>{styles}</style>\n <aside className=\"oh-story-tree\">\n <div className=\"oh-story-brand\">\n <span>\u2726 Oh Story</span>\n <button type=\"button\" onClick={reload} title=\"\u5237\u65B0\">\u21BB</button>\n </div>\n <div className=\"oh-story-mode-tabs\" role=\"tablist\" aria-label=\"\u521B\u4F5C\u5DE5\u4F5C\u53F0\">\n <button type=\"button\" role=\"tab\" aria-selected={workbench === \"story\"} onClick={() => { selectWorkbench(\"story\"); }}>\u5C0F\u8BF4</button>\n <button type=\"button\" role=\"tab\" aria-selected={workbench === \"drama\"} onClick={() => { selectWorkbench(\"drama\"); }}>\u77ED\u5267</button>\n </div>\n {error !== undefined && <div className=\"oh-story-error\">{error}</div>}\n <nav ref={navRef} aria-label={workbench === \"story\" ? \"\u5C0F\u8BF4\u9879\u76EE\u6587\u4EF6\" : \"\u77ED\u5267\u9879\u76EE\u6587\u4EF6\"}>\n {groups.map(([directory, files]) => {\n const groupOpen = expanded[directory] ?? selectedGroup === directory;\n return <details className=\"oh-story-file-group\" key={directory} open={groupOpen} onToggle={(event) => { toggleGroup(directory, event.currentTarget.open); }}>\n <summary>{directory}<span>{files.length}</span></summary>\n <FileTreeNodes\n nodes={buildFileTree(files, directory)}\n depth={1}\n expanded={expanded}\n selected={selected}\n activityPath={activityPath}\n onToggle={toggleGroup}\n onSelect={setSelected}\n />\n </details>;\n })}\n </nav>\n </aside>\n <main className=\"oh-story-editor\">\n <header>\n <span title={selected}>{selected ?? `\u5728\u5F53\u524D DSH workspace \u4E2D\u9009\u62E9${workbench === \"story\" ? \"\u5C0F\u8BF4\" : \"\u77ED\u5267\"}\u6587\u4EF6`}</span>\n <div className=\"oh-story-editor-actions\">\n {previewable && <div className=\"oh-story-editor-tabs\" role=\"tablist\" aria-label={markdown ? \"Markdown \u67E5\u770B\u65B9\u5F0F\" : \"JSONL \u67E5\u770B\u65B9\u5F0F\"}>\n <button type=\"button\" role=\"tab\" aria-selected={editorMode === \"preview\"} onClick={() => { setEditorMode(\"preview\"); }}>\u9884\u89C8</button>\n <button type=\"button\" role=\"tab\" aria-selected={editorMode === \"source\"} onClick={() => { setEditorMode(\"source\"); }}>\u6E90\u7801</button>\n </div>}\n {(dirty || saving) && <button className=\"oh-story-save\" type=\"button\" disabled={saving} onClick={() => { void save(); }}>\n {saving ? \"\u4FDD\u5B58\u4E2D\u2026\" : \"\u4FDD\u5B58\"}\n </button>}\n </div>\n </header>\n {activityPath === selected && <div className=\"oh-story-stream\" data-stage={activity?.stage}>\u25CF {activity?.stage === \"running\" ? \"Agent \u6B63\u5728\u5E94\u7528\u4FEE\u6539\" : \"Agent \u6B63\u5728\u751F\u6210\u6587\u4EF6\u5185\u5BB9\"}</div>}\n {conflict !== undefined && <div className=\"oh-story-conflict\">{conflict}</div>}\n {fileError !== undefined && <div className=\"oh-story-error\">{fileError}</div>}\n {selected === undefined\n ? <div className=\"oh-story-empty\">{workbench === \"story\"\n ? <>\u5F53\u524D workspace \u8FD8\u6CA1\u6709\u5C0F\u8BF4\u6587\u4EF6\u3002\u53EF\u5728\u53F3\u4FA7 Chat \u4E2D\u8FD0\u884C <code>/story-setup</code>\u3002</>\n : <>\u5F53\u524D workspace \u8FD8\u6CA1\u6709\u77ED\u5267\u9879\u76EE\u3002\u53EF\u5728\u53F3\u4FA7 Chat \u4E2D\u8FD0\u884C <code>/short-drama</code>\u3002</>}</div>\n : buffer === undefined\n ? <div className=\"oh-story-empty\">\u6B63\u5728\u52A0\u8F7D {selected}\u2026</div>\n : previewable && editorMode === \"preview\"\n ? markdown\n ? <MarkdownPreview content={buffer.content} label={selected} />\n : <JsonlPreview content={buffer.content} label={selected} />\n : <textarea\n value={buffer.content}\n data-format={structured ? \"structured\" : \"prose\"}\n onChange={(event) => {\n const content = event.target.value;\n setBuffers((current) => ({\n ...current,\n [selected]: {\n content,\n saved: current[selected]?.saved ?? \"\",\n source: \"human\",\n version: current[selected]?.version ?? \"\"\n }\n }));\n }}\n onKeyDown={(event) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLocaleLowerCase() === \"s\") {\n event.preventDefault();\n void save();\n }\n }}\n spellCheck={!structured}\n aria-label={selected}\n />}\n </main>\n </div>;\n}\n\n/**\n * DSH's stable data-slot anchor is the supported addressable styling seam.\n * Portal the story surface beside the still-mounted official active view;\n * Chat, its child slots, store, composer, Todo, approvals, and scroll logic\n * remain owned by the official conversation plugin.\n */\nfunction CreativeSplitBridge(props: Pick<ConvViewProps, \"sessionId\" | \"useSession\">) {\n const marker = useRef<HTMLSpanElement>(null);\n const [target, setTarget] = useState<HTMLElement>();\n useLayoutEffect(() => {\n const root = marker.current?.closest<HTMLElement>(\"[data-phase]\");\n const anchor = root?.querySelector<HTMLElement>(\"[data-conversation-scroll] > [data-slot='conversation.session']\");\n setTarget(anchor ?? undefined);\n }, [props.sessionId]);\n useLayoutEffect(() => {\n const scroller = target?.parentElement;\n if (scroller === undefined || scroller === null) return;\n const publishHeight = (): void => {\n scroller.style.setProperty(\"--oh-story-scroll-height\", `${String(scroller.clientHeight)}px`);\n };\n publishHeight();\n const observer = new ResizeObserver(publishHeight);\n observer.observe(scroller);\n return () => {\n observer.disconnect();\n scroller.style.removeProperty(\"--oh-story-scroll-height\");\n };\n }, [target]);\n return <>\n <span ref={marker} className=\"oh-story-bridge-marker\" aria-hidden />\n {target === undefined ? null : createPortal(<CreativeWorkbench key={props.sessionId} {...props} />, target)}\n </>;\n}\n\nfunction argsOf(block: ToolCallViewProps[\"block\"]): Record<string, unknown> {\n const raw = (\"kind\" in block ? block.call?.argsRaw : block.argsRaw) ?? \"{}\";\n try {\n const value = JSON.parse(raw) as unknown;\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : {};\n } catch { return {}; }\n}\n\nfunction resultOf(block: ToolCallViewProps[\"block\"]): string | undefined {\n if (!(\"kind\" in block)) return undefined;\n return block.content.map((item) => item.type === \"text\" ? item.text : JSON.stringify(item, null, 2)).join(\"\\n\");\n}\n\nfunction RoleToolView({ block, inspect }: ToolCallViewProps) {\n const args = argsOf(block);\n const role = typeof args.role === \"string\" ? args.role : \"story-role\";\n const output = resultOf(block);\n const state = !(\"kind\" in block) ? \"running\" : block.isError ? \"error\" : \"done\";\n return <details className=\"oh-story-role\" data-state={state}>\n <style>{styles}</style>\n <summary><span>\u2726 Role</span><strong>{role}</strong><em>{state === \"running\" ? \"\u8FD0\u884C\u4E2D\" : state === \"error\" ? \"\u5931\u8D25\" : \"\u5B8C\u6210\"}</em></summary>\n {output !== undefined && <pre>{output}</pre>}\n {inspect !== undefined && <button type=\"button\" onClick={inspect}>\u5728\u8F68\u8FF9\u4E2D\u68C0\u67E5</button>}\n </details>;\n}\n\n/** Register only official DSH surfaces; the split bridge never replaces Chat. */\nexport function apply(context: ClientContext): void {\n context.slots.inject(\"conversation.session.header.actions\", () => context.slots.register({\n name: \"conversation.session.header.actions\",\n id: \"oh-story-workspace\",\n order: -100\n }, CreativeSplitBridge));\n context.slots.inject(\"tool.call.toolview\", () => context.slots.register({\n name: \"tool.call.toolview\",\n key: \"oh_story_role\"\n }, RoleToolView));\n}\n\nexport default { name, inject, apply };\n", "import type { AssistantBlock, RunningToolCall } from \"@deepseek-ai/dsh-client-runtime/client\";\n\nexport type MutationToolName = \"write\" | \"edit\" | \"str_replace_editor\";\n\nexport interface FileMutationActivity {\n readonly callId: string;\n readonly name: MutationToolName;\n readonly argsRaw: string;\n readonly stage: \"streaming\" | \"running\";\n readonly path: string | undefined;\n readonly operation: \"replace-file\" | \"replace-text\" | \"insert-text\" | undefined;\n readonly oldText: string | undefined;\n readonly newText: string | undefined;\n}\n\ninterface JsonStringPrefix {\n readonly value: string;\n readonly complete: boolean;\n}\n\nexport type WorkbenchMode = \"story\" | \"drama\";\n\nconst STORY_DIRECTORIES = new Set([\"\u6B63\u6587\", \"\u5927\u7EB2\", \"\u8BBE\u5B9A\", \"\u8FFD\u8E2A\", \"\u5BF9\u6807\", \"\u53C2\u8003\u8D44\u6599\"]);\nconst DRAMA_DIRECTORIES = new Set([\"\u8F93\u5165\", \"\u9879\u76EE\u5F00\u53D1\", \"\u8BBE\u5B9A\u96C6\", \"\u5267\u96C6\", \"\u4EA4\u4ED8\", \"\u521B\u4F5C\u8005\u51B3\u7B56\", \"\u5BA1\u67E5\"]);\nconst EDITABLE_EXTENSION = /\\.(?:md|txt|json|jsonl)$/iu;\n\nfunction decodeEscape(character: string): string | undefined {\n switch (character) {\n case \"\\\"\": return \"\\\"\";\n case \"\\\\\": return \"\\\\\";\n case \"/\": return \"/\";\n case \"b\": return \"\\b\";\n case \"f\": return \"\\f\";\n case \"n\": return \"\\n\";\n case \"r\": return \"\\r\";\n case \"t\": return \"\\t\";\n default: return undefined;\n }\n}\n\n/** Read a JSON string even while the model is still streaming its closing quote. */\nexport function jsonStringPrefix(raw: string, key: string): JsonStringPrefix | undefined {\n const match = new RegExp(`\"${key.replace(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\")}\"\\\\s*:\\\\s*\"`, \"u\").exec(raw);\n if (match === null) return undefined;\n let value = \"\";\n for (let index = match.index + match[0].length; index < raw.length; index += 1) {\n const character = raw[index] ?? \"\";\n if (character === \"\\\"\") return { value, complete: true };\n if (character !== \"\\\\\") { value += character; continue; }\n const escape = raw[index + 1];\n if (escape === undefined) return { value, complete: false };\n if (escape === \"u\") {\n const hex = raw.slice(index + 2, index + 6);\n if (!/^[\\da-f]{4}$/iu.test(hex)) return { value, complete: false };\n value += String.fromCharCode(Number.parseInt(hex, 16));\n index += 5;\n continue;\n }\n const decoded = decodeEscape(escape);\n if (decoded === undefined) return { value, complete: false };\n value += decoded;\n index += 1;\n }\n return { value, complete: false };\n}\n\nfunction completedString(raw: string, key: string): string | undefined {\n const value = jsonStringPrefix(raw, key);\n return value?.complete === true ? value.value : undefined;\n}\n\nfunction mutation(name: string, callId: string, argsRaw: string, stage: FileMutationActivity[\"stage\"]): FileMutationActivity | undefined {\n if (name === \"write\") {\n return {\n callId, name, argsRaw, stage,\n path: jsonStringPrefix(argsRaw, \"file_path\")?.value,\n operation: \"replace-file\",\n oldText: undefined,\n newText: jsonStringPrefix(argsRaw, \"content\")?.value\n };\n }\n if (name === \"edit\") {\n return {\n callId, name, argsRaw, stage,\n path: jsonStringPrefix(argsRaw, \"file_path\")?.value,\n operation: \"replace-text\",\n oldText: completedString(argsRaw, \"old_string\"),\n newText: jsonStringPrefix(argsRaw, \"new_string\")?.value\n };\n }\n if (name !== \"str_replace_editor\") return undefined;\n const command = completedString(argsRaw, \"command\");\n if (command === \"view\") return undefined;\n const path = jsonStringPrefix(argsRaw, \"path\")?.value;\n if (command === \"create\") {\n return {\n callId, name, argsRaw, stage, path,\n operation: \"replace-file\",\n oldText: undefined,\n newText: jsonStringPrefix(argsRaw, \"file_text\")?.value\n };\n }\n if (command === \"str_replace\") {\n return {\n callId, name, argsRaw, stage, path,\n operation: \"replace-text\",\n oldText: completedString(argsRaw, \"old_str\"),\n newText: jsonStringPrefix(argsRaw, \"new_str\")?.value\n };\n }\n if (command === \"insert\") {\n return {\n callId, name, argsRaw, stage, path,\n operation: \"insert-text\",\n oldText: undefined,\n newText: jsonStringPrefix(argsRaw, \"new_str\")?.value\n };\n }\n // The command field itself may still be streaming. Returning the path lets\n // the tree focus as soon as enough arguments have arrived.\n return { callId, name, argsRaw, stage, path, operation: undefined, oldText: undefined, newText: undefined };\n}\n\n/** Prefer an executing call over the latest streamed tool-call block. */\nexport function activeFileMutation(\n partialBlocks: readonly AssistantBlock[],\n runningCalls: readonly RunningToolCall[]\n): FileMutationActivity | undefined {\n for (let index = runningCalls.length - 1; index >= 0; index -= 1) {\n const call = runningCalls[index];\n if (call === undefined) continue;\n const value = mutation(call.name, call.callId, call.argsRaw, \"running\");\n if (value !== undefined) return value;\n }\n for (let index = partialBlocks.length - 1; index >= 0; index -= 1) {\n const block = partialBlocks[index];\n if (block?.kind !== \"tool-call\") continue;\n const value = mutation(block.name, block.callId, block.argsRaw, \"streaming\");\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\n/** Convert a DSH tool path to the creative-relative path accepted by the narrow route. */\nexport function creativeRelativePath(path: string | undefined, cwd: string | undefined): string | undefined {\n if (path === undefined || path === \"\") return undefined;\n const normalized = path.replaceAll(\"\\\\\", \"/\");\n const root = cwd?.replaceAll(\"\\\\\", \"/\").replace(/\\/$/u, \"\");\n const relative = root !== undefined && normalized.startsWith(`${root}/`)\n ? normalized.slice(root.length + 1)\n : normalized.replace(/^\\.\\//u, \"\").replace(/^\\//u, \"\");\n const [directory] = relative.split(\"/\", 1);\n const creative = directory !== undefined && (STORY_DIRECTORIES.has(directory) || DRAMA_DIRECTORIES.has(directory));\n if ((!creative && relative !== \"short-drama.json\") || !EDITABLE_EXTENSION.test(relative)) return undefined;\n if (relative.split(\"/\").some((part) => part === \"..\" || part === \"\")) return undefined;\n return relative;\n}\n\nexport function workbenchModeForPath(path: string | undefined): WorkbenchMode | undefined {\n if (path === \"short-drama.json\") return \"drama\";\n const directory = path?.split(\"/\", 1)[0];\n if (directory !== undefined && STORY_DIRECTORIES.has(directory)) return \"story\";\n if (directory !== undefined && DRAMA_DIRECTORIES.has(directory)) return \"drama\";\n return undefined;\n}\n\n/** Compatibility alias for consumers that only accept novel files. */\nexport function storyRelativePath(path: string | undefined, cwd: string | undefined): string | undefined {\n const relative = creativeRelativePath(path, cwd);\n return workbenchModeForPath(relative) === \"story\" ? relative : undefined;\n}\n\n/** Project a streamed mutation over the last authoritative disk content. */\nexport function previewMutation(activity: FileMutationActivity, base: string): string | undefined {\n if (activity.operation === \"replace-file\") return activity.newText;\n if (activity.operation === \"replace-text\") {\n if (activity.oldText === undefined || activity.newText === undefined) return undefined;\n const at = base.indexOf(activity.oldText);\n return at < 0 ? undefined : `${base.slice(0, at)}${activity.newText}${base.slice(at + activity.oldText.length)}`;\n }\n if (activity.operation === \"insert-text\") {\n if (activity.newText === undefined) return undefined;\n const rawLine = /\"insert_line\"\\s*:\\s*(\\d+)/u.exec(activity.argsRaw)?.[1];\n if (rawLine === undefined) return undefined;\n const line = Number.parseInt(rawLine, 10);\n const parts = base.split(\"\\n\");\n const at = Math.max(0, Math.min(parts.length, line));\n parts.splice(at, 0, activity.newText);\n return parts.join(\"\\n\");\n }\n return undefined;\n}\n", "export interface FileTreeInput {\n readonly path: string;\n readonly bytes: number;\n}\n\nexport interface FileTreeFile {\n readonly kind: \"file\";\n readonly name: string;\n readonly path: string;\n readonly bytes: number;\n}\n\nexport interface FileTreeDirectory {\n readonly kind: \"directory\";\n readonly name: string;\n readonly path: string;\n readonly fileCount: number;\n readonly children: readonly FileTreeNode[];\n}\n\nexport type FileTreeNode = FileTreeFile | FileTreeDirectory;\n\ninterface MutableDirectory {\n readonly name: string;\n readonly path: string;\n readonly directories: Map<string, MutableDirectory>;\n readonly files: FileTreeFile[];\n}\n\nfunction directory(name: string, path: string): MutableDirectory {\n return { name, path, directories: new Map(), files: [] };\n}\n\nfunction compareNames(left: { readonly name: string }, right: { readonly name: string }): number {\n return left.name.localeCompare(right.name, \"zh-Hans-CN\", { numeric: true });\n}\n\nfunction freezeDirectory(value: MutableDirectory): FileTreeDirectory {\n const directories = [...value.directories.values()].map(freezeDirectory).sort(compareNames);\n const files = [...value.files].sort(compareNames);\n return {\n kind: \"directory\",\n name: value.name,\n path: value.path,\n fileCount: files.length + directories.reduce((sum, child) => sum + child.fileCount, 0),\n children: [...directories, ...files]\n };\n}\n\nexport function buildFileTree(files: readonly FileTreeInput[], group: string): readonly FileTreeNode[] {\n const root = directory(group, group);\n for (const file of files) {\n const relative = file.path.startsWith(`${group}/`) ? file.path.slice(group.length + 1) : file.path;\n const segments = relative.split(\"/\").filter((segment) => segment !== \"\");\n const name = segments.pop();\n if (name === undefined) continue;\n let parent = root;\n for (const segment of segments) {\n const path = `${parent.path}/${segment}`;\n const child = parent.directories.get(segment) ?? directory(segment, path);\n parent.directories.set(segment, child);\n parent = child;\n }\n parent.files.push({ kind: \"file\", name, path: file.path, bytes: file.bytes });\n }\n return freezeDirectory(root).children;\n}\n", "const TITLE_KEYS = [\n \"display_name\", \"title\", \"name\", \"shot_id\", \"scene_id\", \"episode_id\", \"character_id\",\n \"location_id\", \"view_id\", \"prop_id\", \"state_id\", \"decision_id\", \"occurrence_id\", \"record_id\", \"id\"\n] as const;\n\nexport interface JsonlRecord {\n readonly line: number;\n readonly raw: string;\n readonly value?: unknown;\n readonly title: string;\n readonly type?: string;\n readonly status?: string;\n readonly error?: string;\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction stringField(record: Record<string, unknown>, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction metadata(value: unknown, line: number): Pick<JsonlRecord, \"title\" | \"type\" | \"status\"> {\n const record = objectRecord(value);\n if (record === undefined) return { title: typeof value === \"string\" ? value : JSON.stringify(value) ?? `\u7B2C ${String(line)} \u884C` };\n const type = stringField(record, [\"record_type\", \"type\", \"kind\"]);\n const acceptance = objectRecord(record.creator_acceptance);\n const status = stringField(record, [\"status\"]) ?? (acceptance === undefined ? undefined : stringField(acceptance, [\"status\"]));\n return {\n title: stringField(record, TITLE_KEYS) ?? `\u8BB0\u5F55 ${String(line)}`,\n ...(type === undefined ? {} : { type }),\n ...(status === undefined ? {} : { status })\n };\n}\n\nexport function parseJsonl(content: string): JsonlRecord[] {\n const records: JsonlRecord[] = [];\n const lines = content.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n for (const [index, raw] of lines.entries()) {\n if (raw.trim() === \"\") continue;\n try {\n const value = JSON.parse(raw) as unknown;\n records.push({ line: index + 1, raw, value, ...metadata(value, index + 1) });\n } catch (error) {\n records.push({\n line: index + 1,\n raw,\n title: `\u7B2C ${String(index + 1)} \u884C\u683C\u5F0F\u9519\u8BEF`,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n return records;\n}\n\nconst PREVIEW_LIMIT = 200;\n\nexport function JsonlPreview({ content, label }: { readonly content: string; readonly label: string }) {\n const records = parseJsonl(content);\n if (records.length === 0) return <div className=\"oh-story-markdown-empty\">\u8FD9\u4E2A JSONL \u6587\u4EF6\u8FD8\u662F\u7A7A\u7684\u3002</div>;\n const valid = records.filter((record) => record.error === undefined).length;\n const errors = records.length - valid;\n const visible = records.slice(0, PREVIEW_LIMIT);\n return <section className=\"oh-story-jsonl\" aria-label={`${label} \u7ED3\u6784\u5316\u9884\u89C8`}>\n <header className=\"oh-story-jsonl-summary\">\n <strong>{errors === 0 ? `${String(valid)} \u6761\u8BB0\u5F55` : `${String(valid)} \u6761\u6709\u6548\u8BB0\u5F55`}</strong>\n {errors > 0 && <span>{String(errors)} \u6761\u683C\u5F0F\u9519\u8BEF</span>}\n {records.length > PREVIEW_LIMIT && <span>\u4EC5\u663E\u793A\u524D {String(PREVIEW_LIMIT)} \u6761</span>}\n </header>\n <div className=\"oh-story-jsonl-records\">\n {visible.map((record) => record.error === undefined\n ? <details key={record.line} open={records.length <= 2}>\n <summary>\n <span>\u7B2C {String(record.line)} \u884C</span>\n <strong>{record.title}</strong>\n {record.type !== undefined && <code>{record.type}</code>}\n {record.status !== undefined && <em>{record.status}</em>}\n </summary>\n <pre><code>{JSON.stringify(record.value, null, 2)}</code></pre>\n </details>\n : <div className=\"oh-story-jsonl-error\" key={record.line} role=\"alert\">\n <strong>{record.title}</strong>\n <span>{record.error}</span>\n <pre>{record.raw}</pre>\n </div>)}\n </div>\n </section>;\n}\n", "import type { ReactNode } from \"react\";\n\nconst INLINE = /(`[^`\\n]+`|\\*\\*[^*\\n]+\\*\\*|~~[^~\\n]+~~|\\[[^\\]\\n]+\\]\\(https?:\\/\\/[^)\\s]+\\)|\\*[^*\\n]+\\*)/gu;\n\nfunction inline(source: string, key: string): ReactNode[] {\n const nodes: ReactNode[] = [];\n let cursor = 0;\n for (const match of source.matchAll(INLINE)) {\n const token = match[0];\n const index = match.index;\n if (index > cursor) nodes.push(source.slice(cursor, index));\n if (token.startsWith(\"`\")) nodes.push(<code key={`${key}-${String(index)}`}>{token.slice(1, -1)}</code>);\n else if (token.startsWith(\"**\")) nodes.push(<strong key={`${key}-${String(index)}`}>{token.slice(2, -2)}</strong>);\n else if (token.startsWith(\"~~\")) nodes.push(<del key={`${key}-${String(index)}`}>{token.slice(2, -2)}</del>);\n else if (token.startsWith(\"*\")) nodes.push(<em key={`${key}-${String(index)}`}>{token.slice(1, -1)}</em>);\n else {\n const link = /^\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)\\)$/u.exec(token);\n nodes.push(link === null ? token : <a key={`${key}-${String(index)}`} href={link[2]} target=\"_blank\" rel=\"noreferrer\">{link[1]}</a>);\n }\n cursor = index + token.length;\n }\n if (cursor < source.length) nodes.push(source.slice(cursor));\n return nodes;\n}\n\ntype Alignment = \"left\" | \"center\" | \"right\" | undefined;\ninterface ListItem { readonly text: string; readonly checked?: boolean }\n\nexport type MarkdownBlock =\n | { readonly kind: \"code\"; readonly lines: readonly string[]; readonly language?: string }\n | { readonly kind: \"heading\"; readonly text: string; readonly level: number }\n | { readonly kind: \"quote\"; readonly lines: readonly string[] }\n | { readonly kind: \"ul\" | \"ol\"; readonly items: readonly ListItem[]; readonly start?: number }\n | { readonly kind: \"table\"; readonly headers: readonly string[]; readonly rows: readonly (readonly string[])[]; readonly alignments: readonly Alignment[] }\n | { readonly kind: \"rule\" }\n | { readonly kind: \"paragraph\"; readonly lines: readonly string[] };\n\nfunction splitTableRow(line: string): string[] {\n let source = line.trim();\n if (source.startsWith(\"|\")) source = source.slice(1);\n if (source.endsWith(\"|\")) source = source.slice(0, -1);\n const cells: string[] = [];\n let cell = \"\";\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index] ?? \"\";\n if (character === \"\\\\\" && source[index + 1] === \"|\") {\n cell += \"|\";\n index += 1;\n } else if (character === \"|\") {\n cells.push(cell.trim());\n cell = \"\";\n } else cell += character;\n }\n cells.push(cell.trim());\n return cells;\n}\n\nfunction tableAlignments(line: string): Alignment[] | undefined {\n const cells = splitTableRow(line);\n if (cells.length === 0 || !cells.every((cell) => /^:?-{3,}:?$/u.test(cell))) return undefined;\n return cells.map((cell) => {\n if (cell.startsWith(\":\") && cell.endsWith(\":\")) return \"center\";\n if (cell.endsWith(\":\")) return \"right\";\n if (cell.startsWith(\":\")) return \"left\";\n return undefined;\n });\n}\n\nfunction beginsBlock(lines: readonly string[], index: number): boolean {\n const line = lines[index] ?? \"\";\n return /^(`{3,}|~{3,})\\s*[\\w-]*\\s*$/u.test(line)\n || /^#{1,6}\\s+/u.test(line)\n || /^(?:-{3,}|\\*{3,}|_{3,})\\s*$/u.test(line)\n || /^>\\s?/u.test(line)\n || /^[-*+]\\s+/u.test(line)\n || /^\\d+[.)]\\s+/u.test(line)\n || (line.includes(\"|\") && tableAlignments(lines[index + 1] ?? \"\") !== undefined);\n}\n\nexport function parseMarkdownBlocks(markdown: string): MarkdownBlock[] {\n const lines = markdown.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n const result: MarkdownBlock[] = [];\n for (let index = 0; index < lines.length;) {\n const line = lines[index] ?? \"\";\n if (line.trim() === \"\") { index += 1; continue; }\n\n const fence = /^(`{3,}|~{3,})\\s*([\\w-]*)\\s*$/u.exec(line);\n if (fence !== null) {\n const marker = fence[1] ?? \"```\";\n const markerCharacter = marker[0] ?? \"`\";\n const closing = new RegExp(`^${markerCharacter}{${String(marker.length)},}\\\\s*$`, \"u\");\n const code: string[] = [];\n index += 1;\n while (index < lines.length && !closing.test(lines[index] ?? \"\")) { code.push(lines[index] ?? \"\"); index += 1; }\n if (index < lines.length) index += 1;\n result.push({ kind: \"code\", lines: code, ...(fence[2] === undefined || fence[2] === \"\" ? {} : { language: fence[2] }) });\n continue;\n }\n\n const heading = /^(#{1,6})\\s+(.+)$/u.exec(line);\n if (heading !== null) {\n result.push({ kind: \"heading\", text: heading[2] ?? \"\", level: heading[1]?.length ?? 1 });\n index += 1;\n continue;\n }\n if (/^(?:-{3,}|\\*{3,}|_{3,})\\s*$/u.test(line)) { result.push({ kind: \"rule\" }); index += 1; continue; }\n\n const alignments = line.includes(\"|\") ? tableAlignments(lines[index + 1] ?? \"\") : undefined;\n if (alignments !== undefined) {\n const headers = splitTableRow(line);\n const rows: string[][] = [];\n index += 2;\n while (index < lines.length && (lines[index] ?? \"\").includes(\"|\") && (lines[index] ?? \"\").trim() !== \"\") {\n rows.push(splitTableRow(lines[index] ?? \"\"));\n index += 1;\n }\n result.push({ kind: \"table\", headers, rows, alignments });\n continue;\n }\n\n if (/^>\\s?/u.test(line)) {\n const quote: string[] = [];\n while (index < lines.length && /^>\\s?/u.test(lines[index] ?? \"\")) {\n quote.push((lines[index] ?? \"\").replace(/^>\\s?/u, \"\"));\n index += 1;\n }\n result.push({ kind: \"quote\", lines: quote });\n continue;\n }\n\n const unordered = /^[-*+]\\s+(.+)$/u.exec(line);\n const ordered = /^(\\d+)[.)]\\s+(.+)$/u.exec(line);\n if (unordered !== null || ordered !== null) {\n const kind = unordered !== null ? \"ul\" : \"ol\";\n const items: ListItem[] = [];\n const pattern = kind === \"ul\" ? /^[-*+]\\s+(.+)$/u : /^\\d+[.)]\\s+(.+)$/u;\n const start = ordered === null ? undefined : Number(ordered[1]);\n while (index < lines.length) {\n const item = pattern.exec(lines[index] ?? \"\");\n if (item === null) break;\n const source = item[1] ?? \"\";\n const task = /^\\[([ xX])\\]\\s+(.+)$/u.exec(source);\n items.push(task === null ? { text: source } : { text: task[2] ?? \"\", checked: task[1]?.toLocaleLowerCase() === \"x\" });\n index += 1;\n }\n result.push({ kind, items, ...(start === undefined ? {} : { start }) });\n continue;\n }\n\n const paragraph: string[] = [line];\n index += 1;\n while (index < lines.length) {\n const next = lines[index] ?? \"\";\n if (next.trim() === \"\" || beginsBlock(lines, index)) break;\n paragraph.push(next);\n index += 1;\n }\n result.push({ kind: \"paragraph\", lines: paragraph });\n }\n return result;\n}\n\nfunction Heading({ block, blockKey }: { readonly block: Extract<MarkdownBlock, { readonly kind: \"heading\" }>; readonly blockKey: string }) {\n const children = inline(block.text, blockKey);\n switch (block.level) {\n case 1: return <h1>{children}</h1>;\n case 2: return <h2>{children}</h2>;\n case 3: return <h3>{children}</h3>;\n case 4: return <h4>{children}</h4>;\n case 5: return <h5>{children}</h5>;\n default: return <h6>{children}</h6>;\n }\n}\n\nexport function MarkdownPreview({ content, label }: { readonly content: string; readonly label: string }) {\n const parsed = parseMarkdownBlocks(content);\n if (parsed.length === 0) return <div className=\"oh-story-markdown-empty\">\u8FD9\u4E2A Markdown \u6587\u4EF6\u8FD8\u662F\u7A7A\u7684\u3002</div>;\n return <article className=\"oh-story-markdown\" aria-label={`${label} \u6E32\u67D3\u9884\u89C8`}>\n {parsed.map((block, index) => {\n const key = `block-${String(index)}`;\n if (block.kind === \"code\") return <pre key={key}><code data-language={block.language}>{block.lines.join(\"\\n\")}</code></pre>;\n if (block.kind === \"rule\") return <hr key={key} />;\n if (block.kind === \"quote\") return <blockquote key={key}>{block.lines.map((line, lineIndex) => <p key={`${key}-${String(lineIndex)}`}>{inline(line, `${key}-${String(lineIndex)}`)}</p>)}</blockquote>;\n if (block.kind === \"ul\" || block.kind === \"ol\") {\n const items = block.items.map((item, itemIndex) => <li key={`${key}-${String(itemIndex)}`} className={item.checked === undefined ? undefined : \"oh-story-task-item\"}>\n {item.checked === undefined ? null : <input type=\"checkbox\" checked={item.checked} readOnly disabled aria-label={item.checked ? \"\u5DF2\u5B8C\u6210\" : \"\u672A\u5B8C\u6210\"} />}\n {inline(item.text, `${key}-${String(itemIndex)}`)}\n </li>);\n return block.kind === \"ul\" ? <ul key={key}>{items}</ul> : <ol key={key} start={block.start}>{items}</ol>;\n }\n if (block.kind === \"table\") return <div className=\"oh-story-markdown-table\" key={key}>\n <table>\n <thead><tr>{block.headers.map((cell, cellIndex) => <th key={`${key}-h-${String(cellIndex)}`} style={{ textAlign: block.alignments[cellIndex] }}>{inline(cell, `${key}-h-${String(cellIndex)}`)}</th>)}</tr></thead>\n <tbody>{block.rows.map((row, rowIndex) => <tr key={`${key}-r-${String(rowIndex)}`}>{block.headers.map((_, cellIndex) => <td key={`${key}-r-${String(rowIndex)}-${String(cellIndex)}`} style={{ textAlign: block.alignments[cellIndex] }}>{inline(row[cellIndex] ?? \"\", `${key}-r-${String(rowIndex)}-${String(cellIndex)}`)}</td>)}</tr>)}</tbody>\n </table>\n </div>;\n if (block.kind === \"heading\") return <Heading key={key} block={block} blockKey={key} />;\n if (block.kind === \"paragraph\") return <p key={key}>{block.lines.map((line, lineIndex) => <span key={`${key}-${String(lineIndex)}`}>{lineIndex === 0 ? null : <br />}{inline(line, `${key}-${String(lineIndex)}`)}</span>)}</p>;\n return null;\n })}\n </article>;\n}\n", ".oh-story-bridge-marker { display: none; }\n.oh-story-split-surface { display: contents; }\n\n/* DSH documents every [data-slot] wrapper as a stable addressable styling\n seam. The official Session body and composer stay mounted; this only turns\n their scroll host into a three-column writing surface. */\n[data-conversation-scroll]:has(> [data-slot=\"conversation.session\"] > .oh-story-split-surface) {\n --os-border: var(--dsw-alias-border-l2);\n --os-muted: var(--dsw-alias-label-tertiary);\n display: grid;\n grid-template-columns: clamp(108px, 16%, 190px) minmax(220px, 1fr) minmax(260px, 38%);\n grid-template-rows: minmax(0, 1fr);\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n scrollbar-gutter: stable;\n}\n\n[data-conversation-scroll]:has(> [data-slot=\"conversation.session\"] > .oh-story-split-surface)\n > [data-slot=\"conversation.session\"] > :not(.oh-story-split-surface) {\n grid-column: 3;\n grid-row: 1;\n min-width: 0;\n min-height: 100%;\n border-left: 1px solid var(--os-border);\n}\n\n[data-conversation-scroll]:has(> [data-slot=\"conversation.session\"] > .oh-story-split-surface)\n > [data-composer-seat] {\n grid-column: 3;\n grid-row: 1;\n align-self: start;\n min-width: 0;\n width: 100%;\n position: sticky;\n top: calc(var(--oh-story-scroll-height, 720px) - var(--dsh-composer-height, 152px));\n bottom: auto;\n}\n\n.oh-story-tree,\n.oh-story-editor {\n box-sizing: border-box;\n grid-row: 1;\n position: sticky;\n top: 0;\n align-self: start;\n min-width: 0;\n min-height: 0;\n height: 100%;\n color: inherit;\n background: var(--dsw-alias-bg-base);\n}\n\n.oh-story-tree {\n grid-column: 1;\n overflow: auto;\n padding: 14px 10px 24px;\n border-right: 1px solid var(--os-border);\n background: var(--dsw-specific-sidebar-fill);\n}\n\n.oh-story-editor {\n display: flex;\n grid-column: 2;\n overflow: hidden;\n flex-direction: column;\n}\n\n.oh-story-brand,\n.oh-story-editor header,\n.oh-story-role summary {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n\n.oh-story-brand { min-height: 28px; padding: 0 5px 10px 7px; font-size: 14px; font-weight: 500; }\n\n.oh-story-brand button,\n.oh-story-save,\n.oh-story-role button {\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-base);\n padding: 3px 9px;\n cursor: pointer;\n font: inherit;\n}\n\n.oh-story-brand button { display: grid; width: 28px; height: 28px; place-items: center; border: 0; padding: 0; background: transparent; font-size: 16px; }\n.oh-story-brand button:hover,\n.oh-story-save:hover:not(:disabled),\n.oh-story-role button:hover { color: var(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.oh-story-brand button:focus-visible,\n.oh-story-save:focus-visible,\n.oh-story-mode-tabs button:focus-visible,\n.oh-story-editor-tabs button:focus-visible,\n.oh-story-tree nav button:focus-visible,\n.oh-story-role button:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }\n.oh-story-save:disabled { opacity: .48; cursor: default; }\n\n.oh-story-mode-tabs {\n display: grid;\n grid-template-columns: 1fr 1fr;\n margin: 0 4px 10px;\n border-bottom: 1px solid var(--os-border);\n}\n\n.oh-story-mode-tabs button,\n.oh-story-editor-tabs button {\n position: relative;\n min-height: 30px;\n border: 0;\n color: var(--os-muted);\n background: transparent;\n cursor: pointer;\n font: inherit;\n font-size: 12px;\n}\n\n.oh-story-mode-tabs button:hover,\n.oh-story-editor-tabs button:hover { color: var(--dsw-alias-label-primary); }\n.oh-story-mode-tabs button[aria-selected=\"true\"],\n.oh-story-editor-tabs button[aria-selected=\"true\"] { color: var(--dsw-alias-label-primary); font-weight: 500; }\n.oh-story-mode-tabs button[aria-selected=\"true\"]::after {\n position: absolute;\n right: 14px;\n bottom: -1px;\n left: 14px;\n height: 2px;\n border-radius: 2px 2px 0 0;\n background: var(--dsw-alias-state-business-primary);\n content: \"\";\n}\n\n.oh-story-file-group,\n.oh-story-file-folder { margin: 0; }\n.oh-story-file-group > summary,\n.oh-story-file-folder > summary {\n display: flex;\n align-items: center;\n gap: 5px;\n min-height: 26px;\n padding: 0 7px;\n border-radius: 6px;\n color: var(--os-muted);\n cursor: pointer;\n list-style: none;\n font-size: 11px;\n font-weight: 600;\n}\n.oh-story-file-group > summary { margin-top: 3px; }\n.oh-story-file-group > summary::-webkit-details-marker,\n.oh-story-file-folder > summary::-webkit-details-marker { display: none; }\n.oh-story-file-group > summary::before,\n.oh-story-file-folder > summary::before { width: 8px; content: \"\u203A\"; transform: rotate(0); transition: transform .12s ease; }\n.oh-story-file-group[open] > summary::before,\n.oh-story-file-folder[open] > summary::before { transform: rotate(90deg); }\n.oh-story-file-group > summary:hover,\n.oh-story-file-folder > summary:hover { color: var(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.oh-story-file-group > summary span,\n.oh-story-file-folder > summary span { margin-left: auto; color: var(--dsw-alias-label-caption); font-weight: 400; }\n\n.oh-story-tree nav button {\n display: block;\n width: 100%;\n overflow: hidden;\n padding: 6px 8px;\n border: 0;\n border-radius: 6px;\n color: inherit;\n background: transparent;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n font: inherit;\n font-size: 12px;\n}\n.oh-story-tree nav button:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.oh-story-tree nav button[aria-current=\"page\"] { background: var(--dsw-alias-button-ghost-active-fill); color: var(--dsw-alias-label-primary); }\n.oh-story-tree nav button[data-agent-target] { box-shadow: inset 2px 0 var(--dsw-alias-state-business-primary); }\n\n.oh-story-editor header {\n min-height: 44px;\n flex: none;\n padding: 0 14px;\n border-bottom: 1px solid var(--os-border);\n}\n\n.oh-story-editor header span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n color: var(--os-muted);\n}\n\n.oh-story-editor-actions { display: flex; flex: none; align-items: center; gap: 8px; }\n.oh-story-editor-tabs {\n display: flex;\n padding: 2px;\n border: 1px solid var(--os-border);\n border-radius: 7px;\n background: var(--dsw-alias-bg-layer-1);\n}\n.oh-story-editor-tabs button { min-height: 24px; padding: 0 9px; border-radius: 5px; font-size: 11px; }\n.oh-story-editor-tabs button[aria-selected=\"true\"] { background: var(--dsw-alias-bg-base); box-shadow: 0 1px 2px rgb(0 0 0 / 8%); }\n.oh-story-save { min-height: 28px; }\n\n.oh-story-editor textarea {\n box-sizing: border-box;\n width: 100%;\n min-height: 0;\n flex: 1;\n resize: none;\n border: 0;\n outline: 0;\n padding: clamp(20px, 4vw, 48px) clamp(22px, 6vw, 84px) 48px;\n color: var(--dsw-alias-label-primary);\n background: transparent;\n font: 16px/1.9 ui-serif, \"Songti SC\", \"STSong\", Georgia, serif;\n}\n.oh-story-editor textarea[data-format=\"structured\"] {\n tab-size: 2;\n font: 13px/1.65 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n}\n\n.oh-story-markdown {\n box-sizing: border-box;\n width: 100%;\n min-height: 0;\n flex: 1;\n overflow: auto;\n padding: clamp(24px, 5vw, 56px) clamp(24px, 7vw, 92px) 64px;\n color: var(--dsw-alias-label-primary);\n font: 16px/1.85 ui-serif, \"Songti SC\", \"STSong\", Georgia, serif;\n overflow-wrap: anywhere;\n}\n.oh-story-markdown > :first-child { margin-top: 0; }\n.oh-story-markdown > :last-child { margin-bottom: 0; }\n.oh-story-markdown h1,\n.oh-story-markdown h2,\n.oh-story-markdown h3,\n.oh-story-markdown h4,\n.oh-story-markdown h5,\n.oh-story-markdown h6 { margin: 1.45em 0 .6em; font-family: ui-sans-serif, system-ui, \"PingFang SC\", sans-serif; line-height: 1.35; letter-spacing: -.01em; }\n.oh-story-markdown h1 { font-size: 1.75em; }\n.oh-story-markdown h2 { padding-bottom: .35em; border-bottom: 1px solid var(--os-border); font-size: 1.35em; }\n.oh-story-markdown h3 { font-size: 1.15em; }\n.oh-story-markdown p { margin: .75em 0; }\n.oh-story-markdown ul,\n.oh-story-markdown ol { margin: .75em 0; padding-left: 1.6em; }\n.oh-story-markdown li { margin: .28em 0; }\n.oh-story-markdown .oh-story-task-item { list-style: none; margin-left: -1.35em; }\n.oh-story-task-item input { margin: 0 .55em 0 0; accent-color: var(--dsw-alias-state-business-primary); }\n.oh-story-markdown blockquote { margin: 1em 0; padding: .1em 1em; border-left: 3px solid var(--dsw-alias-state-business-primary); color: var(--dsw-alias-label-secondary); }\n/* DSH gives inline code its own alias; the block fill is a different surface. */\n.oh-story-markdown code { padding: .15em .4em; border-radius: 4px; background: var(--dsw-alias-markdown-inline-code); font: .86em/1.6 ui-monospace, SFMono-Regular, Menlo, monospace; }\n.oh-story-markdown pre { overflow: auto; margin: 1em 0; padding: 14px 16px; border: 1px solid var(--dsw-alias-border-l1); border-radius: 10px; background: var(--dsw-alias-markdown-code-block); }\n.oh-story-markdown pre code { padding: 0; background: transparent; }\n.oh-story-markdown a { color: var(--dsw-alias-state-business-primary); text-decoration-thickness: 1px; text-underline-offset: 3px; }\n.oh-story-markdown del { color: var(--os-muted); }\n.oh-story-markdown-table { overflow-x: auto; margin: 1em 0; border: 1px solid var(--os-border); border-radius: 10px; }\n.oh-story-markdown table { width: 100%; border-collapse: collapse; font-family: ui-sans-serif, system-ui, \"PingFang SC\", sans-serif; font-size: 13px; line-height: 1.55; }\n.oh-story-markdown th,\n.oh-story-markdown td { min-width: 96px; padding: 9px 12px; border-right: 1px solid var(--os-border); border-bottom: 1px solid var(--os-border); vertical-align: top; }\n.oh-story-markdown th:last-child,\n.oh-story-markdown td:last-child { border-right: 0; }\n.oh-story-markdown tbody tr:last-child td { border-bottom: 0; }\n.oh-story-markdown th { background: var(--dsw-alias-bg-layer-1); font-weight: 600; }\n.oh-story-markdown hr { margin: 2em 0; border: 0; border-top: 1px solid var(--os-border); }\n.oh-story-markdown-empty { margin: auto; color: var(--os-muted); font-size: 13px; }\n\n.oh-story-jsonl {\n box-sizing: border-box;\n display: flex;\n width: 100%;\n min-height: 0;\n flex: 1;\n overflow: hidden;\n flex-direction: column;\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-bg-base);\n}\n.oh-story-jsonl-summary { display: flex; min-height: 42px; flex: none; align-items: center; gap: 10px; padding: 0 18px; border-bottom: 1px solid var(--os-border); font-size: 12px; }\n.oh-story-jsonl-summary strong { font-weight: 600; }\n.oh-story-jsonl-summary span { color: var(--os-muted); }\n.oh-story-jsonl-records { overflow: auto; padding: 14px 18px 36px; }\n.oh-story-jsonl details,\n.oh-story-jsonl-error { overflow: hidden; margin-bottom: 10px; border: 1px solid var(--os-border); border-radius: 10px; background: var(--dsw-alias-bg-layer-1); }\n.oh-story-jsonl summary { display: flex; min-height: 42px; align-items: center; gap: 9px; padding: 0 12px; cursor: pointer; list-style: none; font: 12px/1.4 ui-sans-serif, system-ui, \"PingFang SC\", sans-serif; }\n.oh-story-jsonl summary::-webkit-details-marker { display: none; }\n.oh-story-jsonl summary::before { content: \"\u203A\"; color: var(--os-muted); font-size: 16px; transition: transform .12s ease; }\n.oh-story-jsonl details[open] summary::before { transform: rotate(90deg); }\n.oh-story-jsonl summary > span { flex: none; color: var(--os-muted); font-variant-numeric: tabular-nums; }\n.oh-story-jsonl summary > strong { overflow: hidden; min-width: 80px; flex: 1; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }\n.oh-story-jsonl summary > code,\n.oh-story-jsonl summary > em { flex: none; padding: 2px 6px; border-radius: 5px; background: var(--dsw-alias-button-ghost-active-fill); color: var(--dsw-alias-label-secondary); font: 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; font-style: normal; }\n.oh-story-jsonl pre { overflow: auto; max-height: 520px; margin: 0; padding: 14px 16px; border-top: 1px solid var(--os-border); background: var(--dsw-alias-markdown-code-block); color: var(--dsw-alias-label-secondary); white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }\n.oh-story-jsonl-error { display: grid; gap: 5px; padding: 12px; border-color: var(--dsw-alias-state-error-primary); font-size: 12px; }\n.oh-story-jsonl-error > strong { color: var(--dsw-alias-state-error-primary); }\n.oh-story-jsonl-error > span { color: var(--os-muted); }\n.oh-story-jsonl-error pre { margin: 3px -12px -12px; }\n\n.oh-story-stream,\n.oh-story-conflict {\n flex: none;\n padding: 7px 12px;\n border-bottom: 1px solid var(--os-border);\n font-size: 11px;\n line-height: 1.4;\n}\n\n.oh-story-stream { color: var(--dsw-alias-state-business-primary); background: var(--dsw-alias-button-ghost-active-fill); }\n.oh-story-stream[data-stage=\"streaming\"] { animation: oh-story-pulse 1.2s ease-in-out infinite alternate; }\n.oh-story-conflict { color: var(--dsw-alias-state-warn-label); background: var(--dsw-specific-tip); }\n\n@keyframes oh-story-pulse { to { opacity: .62; } }\n@media (prefers-reduced-motion: reduce) { .oh-story-stream[data-stage=\"streaming\"] { animation: none; } }\n\n.oh-story-empty { margin: auto; max-width: 480px; padding: 30px; color: var(--os-muted); line-height: 1.7; text-align: center; }\n.oh-story-error { margin: 8px; padding: 8px 10px; border-radius: 8px; color: var(--dsw-alias-state-error-primary); background: var(--dsw-specific-tip); font-size: 12px; }\n\n.oh-story-role { display: flex; flex-direction: column; margin: 0; overflow: hidden; }\n.oh-story-role summary { min-height: 24px; padding: 0; cursor: pointer; list-style: none; font-size: 14px; line-height: 24px; }\n.oh-story-role summary::-webkit-details-marker { display: none; }\n.oh-story-role summary span { color: var(--dsw-alias-state-business-primary); }\n.oh-story-role summary strong { margin-right: auto; color: var(--dsw-alias-label-secondary); font-weight: 500; }\n.oh-story-role summary em { color: var(--dsw-alias-label-caption); font-style: normal; font-size: 12px; }\n.oh-story-role[data-state=\"error\"] summary em { color: var(--dsw-alias-state-error-primary); }\n.oh-story-role pre { max-height: 260px; overflow: auto; margin: 4px 0 4px 4px; padding: 12px 16px; border: 1px solid var(--dsw-alias-border-l1); border-radius: 12px; color: var(--dsw-alias-label-secondary); background: var(--dsw-alias-markdown-code-block); white-space: pre-wrap; font: var(--dsw-font-markdown-code-block-small); }\n.oh-story-role > button { align-self: flex-start; margin: 4px 0 2px 4px; font-size: 11px; }\n\n@media (max-width: 980px) {\n [data-conversation-scroll]:has(> [data-slot=\"conversation.session\"] > .oh-story-split-surface) {\n grid-template-columns: 104px minmax(210px, 1fr) minmax(252px, 40%);\n }\n .oh-story-editor textarea { padding-right: 28px; padding-left: 28px; }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["name", "directory", "name", "import_jsx_runtime", "import_jsx_runtime", "directory"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 drama-skills contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|