@oh-story/dsh 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/lib/client.js +204 -72
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +84 -74
- package/lib/drama/skills/short-drama/SKILL.md +2 -2
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-edit/SKILL.md +27 -29
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +2 -2
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +24 -67
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +27 -56
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +37 -79
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +39 -92
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +12 -16
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +126 -11
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +64 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
- package/lib/drama/skills/short-drama-review/SKILL.md +2 -3
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +9 -35
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +10 -6
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +58 -21
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +10 -9
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +12 -38
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +4 -7
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -22
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -19
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +2 -2
- package/lib/drama/skills/short-drama-write/SKILL.md +2 -4
- package/lib/index.js +289 -91
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/README.md +299 -59
- package/lib/novel-to-game/README_ZH.md +299 -56
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
- package/lib/novel-to-game/manifest.json +77 -87
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
- package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
- package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
- package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
- package/lib/oh-story/manifest.json +230 -185
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/consistency-checker.md +4 -4
- package/lib/oh-story/roles/narrative-writer.md +24 -25
- package/lib/oh-story/roles/story-architect.md +5 -5
- package/lib/oh-story/roles/story-explorer.md +11 -11
- package/lib/oh-story/skills/story/SKILL.md +13 -7
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +40 -53
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +1 -1
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-import/SKILL.md +77 -81
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +34 -16
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
- package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +38 -29
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +25 -20
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +4 -13
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/project-files.md +9 -7
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +1 -2
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +86 -115
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -120
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +66 -68
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +4 -12
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +139 -18
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +34 -16
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +5 -3
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-review/SKILL.md +68 -85
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-review/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-review/references/review-quality.md +4 -10
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +50 -42
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +4 -12
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
- package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +6 -147
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +2 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +3 -2
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +19 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +16 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts +5 -3
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts +52 -0
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-identity.d.ts +17 -0
- package/lib/types/role-identity.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
|
@@ -18,23 +18,25 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
|
|
|
18
18
|
先按运行环境探测 Python 3 解释器(依次尝试 `python3`、`python`、`py -3`)。追踪事务脚本使用当前 skill 根目录;字数与章节闭环统一使用 `story-long-write` skill 根目录:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
|
-
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {
|
|
21
|
+
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {书项目根}/.story/work/init.json
|
|
22
22
|
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py check --project {书项目根}
|
|
23
|
+
{PYTHON} {当前 skill 根}/scripts/tracking_commit.py draft --project {书项目根} --chapter {N}
|
|
23
24
|
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter check --project {书项目根} --chapter {N}
|
|
24
|
-
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {
|
|
25
|
-
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {
|
|
25
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json
|
|
26
|
+
{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
- `init`:只在 `_tracking-state.json` 不存在时执行,绝不覆盖已初始化项目。
|
|
29
|
-
- `
|
|
30
|
-
- `
|
|
30
|
+
- `draft`:按当前 state 把逐章事务预填到 `.story/work/第NNN章/tracking.json`(修订号、模式、章名、`context` 四项当前值),并输出各文本字段的字数上限与在场核心角色的当前快照;调用方只填 `delta` 与有变化角色的快照。
|
|
31
|
+
- `wordcount measure` / `wordcount checkpoint`:纯测量入口;不写正文、不写 tracking、不做语义判断。长篇正文只在前组写完后由父流程调用一次 `checkpoint`(见 workflow-chapter 步骤 6),整章长度由 `chapter check` 收口。
|
|
32
|
+
- `chapter check`:重新读取当前正文与细纲目标,返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作,不保存 approval。`under` 不提供自动补写;`over` 额外返回一次净删型 `compress-once` 及回到内部区间或作者给定区间所需的删除字数。
|
|
31
33
|
- `chapter commit`:再次读取当前文件、重新计数并重跑 blocking quality;只接受用户带内章节,把简短字数记录与逐章事务一起原子提交。
|
|
32
34
|
- `chapter accept-current-length`:只接受带外但 quality pass 的章节;接受动作发生时重新读取、重新计数并立即原子提交,不保存可陈旧的历史决议。
|
|
33
35
|
- `check`:严格验证 state schema、逐章记录连续性/规范名/体积、固定 7 栏、角色快照硬上限、派生文件集合,以及所有派生视图与 state 的逐字一致性。
|
|
34
36
|
|
|
35
37
|
每本书由 `追踪/.tracking-commit.lock` 串行写事务,`expected_state_revision` 再拒绝基于旧状态构造的 stale transaction。两个不同事务并发时至多一个修订成功。字数记录也在锁内对当前正文和目标重新验证,正文或目标变化会让预先构造的记录直接失败。
|
|
36
38
|
|
|
37
|
-
事务 JSON
|
|
39
|
+
事务 JSON 是临时输入,不是项目产物:只写在书目录 `.story/work/` 下(逐章事务放 `.story/work/第NNN章/tracking.json`),不写系统 `/tmp`、书根、`大纲/` 或 `正文/`;成功前必须保留,提交成功后即可删除(`storyctl.py chapter commit` / `accept-current-length` 成功时自动删除该章目录;直接调用 `tracking_commit.py commit` 时由调用方删除)——之后 `check` 失败按下文提交 `mode=revision` 新事务修复,不需要原事务。若文件写入失败,`_tracking-state.json` 尚未推进;修正环境后直接重跑**同一份** `commit`。append 重跑只接受内容完全相同的既有逐章记录,不维护 `dirty/pending/repair` 状态机。
|
|
38
40
|
|
|
39
41
|
校验失败与写入失败处理方式不同:校验失败(字段非法、退役结构、容量超限)要按报错改事务本身,重跑同一份结果不变。派生视图被手改或外部改动导致 `check` 报 `derived view differs from _tracking-state.json` 时,重新提交**该章**的 `mode=revision` 事务让工具整份重建,`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON;不手改派生文件,也不删 `_tracking-state.json` 重来。手写出的逐章记录会让同章 `append` 永久报 `chapter delta N already exists with different content`——删掉那个手写文件后重跑原事务即可。
|
|
40
42
|
|
|
@@ -1,144 +1,115 @@
|
|
|
1
1
|
# workflow-chapter.md:单章正文工作流(Phase 4-5)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
「写一章正文」的完整流程。日更批量由 `workflow-daily.md` 控制批次,每章仍走本文件。项目文件结构、缺失处理和对标权威顺序见 [project-files.md](project-files.md),首次定位或文件缺失时才读。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**工作目录**:本章临时文件(前组.md、后组.md、writer_prompt.md、tracking.json)只放书目录下 `.story/work/第NNN章/`,不写系统 `/tmp`、`正文/`、`大纲/` 或书根;`chapter commit` / `accept-current-length` 成功后脚本自动删除该目录,失败时保留供重跑。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
agent 只查当前端 canonical 目录;Antigravity 用 `.agents/agents/agent-name/agent.md` 与 `invoke_subagent` + 同名 `TypeName`,其余端用各自 Agent 工具。
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## 单章写作流程
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
1.
|
|
16
|
-
2.
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
| 场景 | 技巧 |
|
|
86
|
-
|------|------|
|
|
87
|
-
| 开篇 500 字 | 必须有钩子,不能从天气/风景开始(除非反差极大) |
|
|
88
|
-
| 对话 | 推进剧情或揭示性格,不能只为了凑字数 |
|
|
89
|
-
| 打斗 | 不要流水账,写策略和反转,不写「你一拳我一脚」 |
|
|
90
|
-
| 日常 | 日常要有人物互动和伏笔,不能只是「吃饭睡觉」 |
|
|
91
|
-
| 任务卡点 | 角色办事被卡住,必须卡出信息/关系/代价/选择/伏笔变化;删掉无损就压缩或删除 |
|
|
92
|
-
| 爽点释放 | 铺垫要充分、释放要干脆,读者等得越久释放越要爽 |
|
|
93
|
-
| 爽点密度 | 高压/推进章每 3000-5000 字一个「爽」的情绪节点;低压/关系/修炼/信息整理章不强求,但每章仍要有往下看的理由(见 references/outline-structure-theory.md「章节定位与张弛」) |
|
|
94
|
-
| 长篇结构约束 | 参考 genre-prose-cards.md 与当前题材卡的长线约束 |
|
|
95
|
-
| 章尾 | 每章结尾都要有让读者想翻下一页的东西 |
|
|
96
|
-
| 情绪验证 | 写完每章回头检查:读者到这里应该感受到什么?感受到了吗?没感受到 → 按章节定位补:高压/推进章补冲突或钩子,低压/关系章补关系或情绪质感,别一律加爽点 |
|
|
13
|
+
缺 `_tracking-state.json` 时先按 workflow-daily「首次初始化」处理,`check` 通过才往下走。
|
|
14
|
+
|
|
15
|
+
1. **检查细纲**:读 `大纲/细纲_第{N}章.md` 全文,取「单元ID/位置」,跑 `outline_view.py --unit {单元ID} {卷纲路径}` 取卷契约、全卷常任裁定、当前剧情单元与终局底牌边界——**不整读卷纲**;exit 1 按提示修,不改用整读。细纲缺失或缺必需字段时**先补建再写**:按 workflow-setup 细纲模板补齐必填项(核心事件、字数目标、字数口径、单元ID/位置、目标情绪、主角目标/关键选择、章首钩子、爽点、本章禁止提前释放)和四个小节,无证据的写 `[待补充]`,补完跑 `check-outline-contract.js` 验收。
|
|
16
|
+
2. **读取上下文**:`tracking_commit.py check`(取 `last_committed_chapter` / `state_revision`,完整 state 不进 prompt)→ `追踪/上下文.md` 全 7 栏 → 细纲点名或出场的 `设定/角色/`、`设定/势力/`、`设定/世界观/` 相关文件。上一章结尾由脚本代读,承接存疑才自己读。久别角色读 `追踪/角色状态/{名}.md`;更旧的信息按 workflow-daily「旧信息查找步骤」定点查。
|
|
17
|
+
3. **写前准备**:
|
|
18
|
+
- **先跑组装脚本**:`{PYTHON} {skill 根}/scripts/build_writer_prompt.py --project {项目根} --chapter {N} --out`。`====` 以上是 prompt、以下是核对报告;退出码 2 =数据问题,修完重跑,不手拼绕过。
|
|
19
|
+
- **状态筛选**:从续写状态卡取本章在场角色、要碰/要避的伏笔、必须履行的下一章承诺与相关长期约束,写成本节速记。
|
|
20
|
+
- **召回**:核对报告写「召回降档:成立」时直接用脚本给的情绪/节奏;不成立时才完整读取 [benchmark-recall.md](benchmark-recall.md) 执行全量召回。
|
|
21
|
+
- **意图确认**:一句话写清本章意图(例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」)。确认时对照:细纲是唯一剧情蓝图,新增物按写手铁律 3 的三级(直接写 / 写了要报 / 先问作者);后续阶段真相与底牌不因章尾钩子提前泄露;细纲多处重复的同一要求只算一个语义点,正文兑现一次;爽点前有可指认的危机/期待铺垫,打脸/揭露章写在场配角的差异反应;高压节拍收紧对话声线。
|
|
22
|
+
- **契约四问**:主角是否靠自己的选择挣到本章结果?收益是否被配角、机构或巧合无交换地拿走?有没有提前动用后面的底牌?旧期待付利息、留新期待了吗?任一问不过(没靠自己挣到、收益被拿走、提前动了底牌、旧期待没付利息),读 `references/reader-contract-and-progression.md` 对应小节,先修纲再写。
|
|
23
|
+
4. **资料研究**(按需):需查证外部事实时 spawn story-researcher 输出到 `参考资料/`,不可用则主线程查。
|
|
24
|
+
5. **标题预检**:看核对报告的重名结论;重名或明显重复才按核心事件改名,并同步细纲标题与正文文件名。
|
|
25
|
+
6. **写作准备**:全章细纲先交给 writer 统筹编排,默认同一 session 按前后两组交付。
|
|
26
|
+
- 按实际叙述顺序在自然转场或因果停顿处分组,不在一句对话或同一动作中间截断;可交错情节点,但不增删批准内容,不拆逐点字数配额。
|
|
27
|
+
- writer 先把前组写到工作目录 `前组.md`;主会话只调用一次 `storyctl.py wordcount checkpoint --file {segment} --target {目标} --chapter {N}`,把 `actual / remaining_user_range` 连同后组交回同一 writer。两组按原文拼接,不回改前组追字数。
|
|
28
|
+
- 用户明确要求一次成文时执行安排填「全章」,直接落盘,不跑 checkpoint。批准内容写完即停,不为字数加剧情;实际长度由步骤 8 收口。
|
|
29
|
+
- **正文元信息隔离**:章号、上一章、匹配章、细纲文件只用于定位。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类工程词,承接前文改成角色能感知的事件锚点或相对时间(「比第一章那三秒开火更疼」→「比那三秒开火更疼」)。例外:角色在故事内真实阅读/讨论「第X章」文本,或真实身为作者/读者。
|
|
30
|
+
7. **正文执行**:确认 narrative-writer 已部署;骨架已由脚本生成,细纲全文、卷纲、续写状态卡都不进 prompt。**主会话填八槽**(搜 `[主会话填]`):执行安排 / 本章意图 / 参考技法 / 本节速记 / 涉及角色 / `genre_prose_card` / 必读设定 / `style_resolution`;降档不成立时情绪与节奏槽也要填。`author_preferences` 由脚本查询注入(查询失败才成空槽,按 author-memory.md 手动查),只作低优先级倾向,不逐条展示或最大化命中。空槽以外一字不改,整份照抄进 Agent prompt。脚本**跑不起来**时读 [writer-prompt-fallback.md](writer-prompt-fallback.md) 手动组装并报 `Fallback: build_writer_prompt -> 手动组装`;退出码 2 不是回落,是修数据。agent 交付后主会话核对它只消费了批准情节点;agent 未部署则主线程按同一流程写。
|
|
31
|
+
8. **核情节点落点,再一次检测收口**:
|
|
32
|
+
- 细纲每个情节点**至少出现一次**,漏即退回补写批准内容。这类退回不以字数为由。
|
|
33
|
+
- 运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N} --fix-punctuation`:一次调用整理标点,再跑 AI 句式、`check-degeneration.js` 退化、细纲照搬与字数检测。文件改动后重跑,不存决议,不再分别调各检测脚本。
|
|
34
|
+
- 带内 + pass → 完成步骤 9-12 再提交;fail / `invalid` → 停止修。`under` + pass → 不补不重试,按「向作者汇报」的字数问法请作者选。`over` + pass → 删除区间随 `compress-once` 交 narrative-writer 一次净删、零新语义,复检后带内提交,否则同样请作者选。
|
|
35
|
+
9. **检查钩子与爽点**:章尾有往下看的理由(低压/过场章留阶段目标即可);高压/推进章爽点到位。不达标只修复批准内容,修后重跑步骤 8,不借质量修复补新剧情追字数。
|
|
36
|
+
10. **元信息扫描**:按步骤 6 的规则清掉标题行以外的工程词。
|
|
37
|
+
11. **检测结果处理**:严重度统一读作必须修 / 建议看 / 仅提示——检测器 blocking 与 checker 的 S1/S2 是必须修,advisory 与 S3 是建议看,S4 仅提示。`quality.blocking_findings` 就地改到净;`advisories` 逐条读原文判断,确属问题才改,功能性写法保留,不为归零机械改写。`formulaic-parallelism` 连同台词一起复核;细纲照搬里判定保留的补进细纲「复沓锚句」。禁用词表不整读,拿不准的二级词才查 `references/banned-words.md` 对应条目。改完只重跑步骤 8,不另安排全篇去味。
|
|
38
|
+
12. **更新追踪**:运行 `{PYTHON} {skill 根}/scripts/tracking_commit.py draft --project {项目根} --chapter {N}`,它把修订号、模式、章名和上下文当前值预填进工作目录 `tracking.json`,并给出字数上限与在场核心角色的当前快照。只填 `delta` 与留空的本章结尾时间、场景:本章变化的核心角色把快照整份改好放进 `character_snapshots`;撤下的长期约束或风险从 `context` 删掉并把原文列进 `delta.retired_context_items`。不读脚本源码或 state 文件找格式;schema 细节、修订与修复见 [tracking-transaction.md](tracking-transaction.md),只在出错或 `mode=revision` 时读。带内执行 `storyctl.py chapter commit`,作者接受当前长度执行 `chapter accept-current-length`(两者都重读正文、重数、重跑 quality 后原子提交)。报错会一次列全要改的字段,按提示改完重跑同一命令。作者选「这章不要了」时删本章正文与工作目录,不提交。判为「登记」的申报项在这次事务里一并登记;有「先问作者」项时暂停提交与下一章。
|
|
39
|
+
13. **提交后核对**:返回 `tracking_committed: true` 即本章完成,工作目录已删;连续写多章不另做快照。
|
|
40
|
+
|
|
41
|
+
## 向作者汇报
|
|
42
|
+
|
|
43
|
+
按 SKILL.md「面向作者的汇报」,下列时机照模板说;`{}` 换成故事里的话,其余内部结论不说给作者。提交成功、本章完成后(日更批量改用 workflow-daily 批末汇报):
|
|
44
|
+
|
|
45
|
+
<!-- author-report -->
|
|
46
|
+
```md
|
|
47
|
+
第{N}章《{章名}》写好了,约 {字数} 字。
|
|
48
|
+
这章:{两三句讲发生了什么,停在哪个钩子上}。
|
|
49
|
+
{有需作者留意的新人物/新设定就一句话,如「加了个跑腿的小厮阿福,后面可能还会用」;没有就删掉此行}
|
|
50
|
+
{自查结论一句话:「自查过设定和前文,没发现冲突」或「发现一处前后不一:{什么},已按前文改正」}
|
|
51
|
+
下一章:第{N+1}章《{章名}》,要接着写吗?
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
字数一次处理后仍不在范围内时,请作者选,不自行补写:
|
|
55
|
+
|
|
56
|
+
<!-- author-report -->
|
|
57
|
+
```md
|
|
58
|
+
第{N}章《{章名}》写完了,比目标{少/多}了约 {差额} 字(目标约 {目标} 字,现在 {实际} 字)。{一句原因,如「细纲的事写完就到这儿了,硬凑会注水」}
|
|
59
|
+
你想怎么处理?
|
|
60
|
+
1. 就按现在的长度收下(推荐)
|
|
61
|
+
2. 我改细纲或字数目标,再重写这章
|
|
62
|
+
3. 这章不要了
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
作者选 1 → `chapter accept-current-length`;选 2 → 等作者改完细纲/目标后回步骤 8;选 3 → 删本章正文与工作目录,不提交。新增内容需要作者拍板(下方处置表「先问作者」)时:
|
|
66
|
+
|
|
67
|
+
<!-- author-report -->
|
|
68
|
+
```md
|
|
69
|
+
第{N}章写的时候多出了一样东西,需要你定:{用故事话说新增了什么}。
|
|
70
|
+
它会牵动{后面哪段剧情或哪个已定安排,如「原定第三卷才揭开的那封信」}。
|
|
71
|
+
1. 留下,我把后面的大纲一起改过来
|
|
72
|
+
2. 删掉,按原细纲写
|
|
73
|
+
我建议选 {1/2}:{一句理由}。
|
|
74
|
+
这章先不算写完,等你定了再往下。
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
写不下去、要停下时:
|
|
78
|
+
|
|
79
|
+
<!-- author-report -->
|
|
80
|
+
```md
|
|
81
|
+
第{N}章还没法写:{白话说缺什么,如「这一章还没有细纲」}。
|
|
82
|
+
建议{一个动作,如「我先按卷纲把这章细纲补出来给你看」},可以吗?
|
|
83
|
+
```
|
|
97
84
|
|
|
98
85
|
## 字数测量权威
|
|
99
86
|
|
|
100
|
-
|
|
87
|
+
细纲 `字数目标` + `visible_chars_v1`,默认范围 ±15%(`internal_pass`、`borderline` 都算在内);**用户本轮明确给出上下限时原样优先**。缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由作者接受、改目标/细纲或放弃。
|
|
101
88
|
|
|
102
89
|
---
|
|
103
90
|
|
|
104
91
|
## 质量检查
|
|
105
92
|
|
|
106
|
-
|
|
93
|
+
三个维度:**情绪交付**(交付了细纲规划的目标情绪吗)、**契约风险**(步骤 3 契约四问)、**技术质量**(一致性、格式、禁用词;清单见 [long-chapter-quality.md](long-chapter-quality.md),主会话自己写正文或排查具体问题时才读)。
|
|
107
94
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
**正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
|
|
111
|
-
|
|
112
|
-
**写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
|
|
113
|
-
|
|
114
|
-
**确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook 不阻断台词就略过;`stock-reaction-tic` 的候选交下方 narrative-writer 质检 spawn 逐处做「反套话四问」删除测试并直接改——**写手不写验收短文**(验收由质检 spawn 的删除测试承担),质检报告列出候选数、删改数与保留理由即可。
|
|
115
|
-
随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。主会话以最终落盘文件复扫验收,不以 agent 自检代替。
|
|
116
|
-
|
|
117
|
-
**退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
|
|
118
|
-
advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界面用语、弹幕刷屏、重复台词等有功能则保留。
|
|
95
|
+
**写后同轮清零**:正文落盘不是汇报时机,同一轮内完成步骤 8-11,blocking 清零才算本章完成。写后 hook 推回的毒句式当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"时,在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 与下一章前的欠账拦截都认它)。退化类 blocking(复读、截断、拒绝语、工程词泄漏)只重写受影响段落,最多 2 次,仍失败按停下问法请作者定夺;故事内系统用语、弹幕、有功能的重复台词保留。
|
|
119
96
|
|
|
120
97
|
### Agent 调用:consistency-checker
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
**按需调用**:writer 申报表非 `0`,或核对细纲时发现未申报的跨章事实(新证词、证据、承诺、关系变化)才在本章 spawn;否则日更由批末整批查一次(workflow-daily Step 3),非日更的单章写作在步骤 12 提交前对本章查一次。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致\n本章新增申报:{申报表原样粘贴,无则写 0};同时核对正文有无未申报的跨章事实,逐处列原文和细纲出处。只读与新增项和本章出场角色相关的设定、角色卡与追踪条目。冲突按 S1-S4 报出`。不可用则主线程参照 long-chapter-quality.md 检查。
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
**「写了要报」的处置**(正文定稿、追踪未提交时做)。checker 只给事实证据,归哪一栏由主会话判:
|
|
125
102
|
|
|
126
|
-
|
|
|
103
|
+
| 处置 | 判据 | 出口 |
|
|
127
104
|
|---|---|---|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
105
|
+
| **登记** | 无必须修的冲突;不需要在卷纲占 F/L 编号或新增反转/打脸债行;不碰主推线与终局底牌边界,不与活跃伏笔、下一章承诺打架 | 进步骤 12 的事务:角色/势力按 workflow-setup Phase 3 补建静态档案;可复用设定补进 `设定/世界观/{主题}.md`;伏笔、关系、约束、下章承诺进对应 delta 字段 |
|
|
106
|
+
| **修复** | 有必须修的冲突 | 退回 writer 就地改正文或删掉该新增物,最多一次 |
|
|
107
|
+
| **先问作者** | 要在卷纲新增编号或条目、碰主推线/终局边界、可能与既有承诺冲突,或需创作决策 | 按拍板问法问作者;本章暂停提交及下一章。作者接受则按授权改卷纲/设定后提交,不接受则删改后提交 |
|
|
131
108
|
|
|
132
|
-
|
|
133
|
-
- 申报与处置记录随本章报告留存;不自动改写锁定细纲。
|
|
134
|
-
- 申报为 `0` 仍做正文与细纲的正常核对;发现漏报的跨章事实,照本表处置。确实无新增则跳过申报处置。
|
|
109
|
+
拿不准归「先问作者」。申报为 `0` 仍做正文与细纲的正常核对,发现漏报照本表处置。
|
|
135
110
|
|
|
136
111
|
### Agent 调用:narrative-writer(去AI味审查)
|
|
137
112
|
|
|
138
|
-
|
|
113
|
+
**按需调用**:步骤 8 里需要语义判断的 advisory(`stock-reaction-tic`、`formulaic-parallelism` 等)合计 ≥3 条,或 blocking 一次就地修改后仍未清零,才 spawn 一次;否则主会话按步骤 11 处理。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查分工:你负责语义去味及原定自检;最终文件扫描由主会话执行\n检查范围:{本次写作的章节}\n文风路径:{设定/文风.md 全文路径}\nstyle_resolution:{与写作一致的裁决}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除,删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色\n按你的 7 Gate 与对话自检执行,台词里的工整否定不因脚本豁免而跳过\n删除测试:stock-reaction-tic 候选按 writing-craft.md「套式反应删除测试」逐处过,爽点段与 detector 标记处按同文件「写法抽查」表查,只指认已有问题、不补内容;报告列候选数/删改数/保留理由`。不可用则主线程按 `references/anti-ai-writing.md` 执行。
|
|
139
114
|
|
|
140
|
-
|
|
141
|
-
- 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;
|
|
142
|
-
- 时间线变化写入 `timeline_events`,由 `_tracking-state.json` 统一派生 `作者真相.md` 与 `读者已知.md`,不得把作者秘密泄露到读者视图;
|
|
143
|
-
- 核心角色状态变化同时提交该角色截至当前章的完整快照;
|
|
144
|
-
- 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state 与全部派生视图一致,删除该临时事务 JSON 后再继续写作。
|
|
115
|
+
审查在本章首次提交前改动的连续性事实,直接写进步骤 12 的 `mode=append` 事务;本章提交后再改连续性事实,才按 tracking-transaction.md 提交 `mode=revision` 事务(`draft --chapter {N}` 同样可生成预填草稿)。
|