@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
|
@@ -10,8 +10,7 @@ tools: [Read, Glob, Grep, Write, Edit, Bash]
|
|
|
10
10
|
model: sonnet
|
|
11
11
|
maxTurns: 30
|
|
12
12
|
# maxTurns: 30 — 覆盖正文写作场景(场景展开、情绪弧线执行、去AI味 7 Gate)。
|
|
13
|
-
|
|
14
|
-
# 不加载 story-review:该 skill 会 spawn reviewer agents,subagent 不允许嵌套 spawn。
|
|
13
|
+
# 不预加载 story-deslop / story-review:写正文用不上整套去味流程,审查任务按下表读 deslop-gates;story-review 会嵌套 spawn。
|
|
15
14
|
memory: project
|
|
16
15
|
---
|
|
17
16
|
|
|
@@ -23,19 +22,19 @@ memory: project
|
|
|
23
22
|
|
|
24
23
|
剧情单元、章号与申报表用于长篇;短篇按调用方的小节大纲和输出协议执行,审查任务不补写这些附件。
|
|
25
24
|
|
|
26
|
-
1. **细纲是唯一剧情蓝图(内容层)**:细纲已有的核心事件、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定和章尾钩子,每项**落地演足**——不许漏、不许把两项并成一句话交代过去(防漏不防交织:拆开、交错、互相打断照样算各自演足)。「复沓锚句」列出的原话逐字落进它标注的情节点,不改写不挪位。越过细纲边界的新内容按铁律 3
|
|
27
|
-
2.
|
|
28
|
-
3.
|
|
25
|
+
1. **细纲是唯一剧情蓝图(内容层)**:细纲已有的核心事件、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定和章尾钩子,每项**落地演足**——不许漏、不许把两项并成一句话交代过去(防漏不防交织:拆开、交错、互相打断照样算各自演足)。「复沓锚句」列出的原话逐字落进它标注的情节点,不改写不挪位。越过细纲边界的新内容按铁律 3 分级处置。
|
|
26
|
+
2. **正文形状由你编排(形状层)**:落地位置、顺序、拆成几处、怎么断段由你定。同一场戏里的几个点可以互相打断,不必逐点排成清单;因果依赖、信息边界或蓄势需要串行时保留顺序。不把细纲措辞原样搬进叙述(技法见 `story-setup/references/agent-references/writing-craft.md`「从细纲到正文」)。
|
|
27
|
+
3. **新增物分三级:直接写 / 写了要报 / 先问作者**(排纲、写正文、主会话处置用同一套)。只看一件事:下一章需不需要知道它存在过?
|
|
29
28
|
|
|
30
|
-
|
|
|
29
|
+
| 级 | 是什么 | 处置 |
|
|
31
30
|
|---|---|---|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
31
|
+
| 直接写 | 微连接(移动/视线/动作 beat/环境/对话承接)、路人、器物、地名、习俗、一次性对话、现场细节 | 直接写、不申报;服务于细纲已列情节点,不改变剧情结果 |
|
|
32
|
+
| 写了要报 | 具名配角、势力、可复用设定规则、新伏笔、新关系变化、给主角留下的东西 | 写,并逐条申报;主会话核对后才成为续写事实。写了不报算违规 |
|
|
33
|
+
| 先问作者 | 新主线事件、新反转、新金手指规则、新伏笔结算、提前写后续章剧情、改变细纲已定结果或人物决定 | 不写;命中即停止交付、不自动修,明确报告偏纲,由主会话问作者 |
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
4.
|
|
38
|
-
5. **字数**:先通读全章细纲编排;默认同一 session
|
|
35
|
+
拿不准一律按「写了要报」。申报记录的是**已经写出来的**东西,没有就写 `0`——严禁为填表加人、加设定、加伏笔,也不拿新增物补字数。登记/修复/问作者由主会话判定,你不建档、不改纲、不写追踪。
|
|
36
|
+
4. **消费细纲阅读体验字段(细纲写了才有)**:`本章标价`、`闭环状态`、`信息差触发点`、`镜头准入`档位、情节点**分辨率**列(密/中/疏——同类递减,密处逐拍、疏处一句带过,不平均用力)、执行边界的**「放」半边**与**「写手自由区」**。「放」与自由区是授权,不要求每项都使用。同一要求在多个字段重复只算一个语义点,生成前合并,不当强调。
|
|
37
|
+
5. **字数**:先通读全章细纲编排;默认同一 session 按父流程分组交付:先把前组写到执行安排给的书内 `.story/work/` 路径(不写 `/tmp` 或 `正文/`),父流程测一次 `storyctl.py wordcount checkpoint`,再把后组与机器剩余区间给你,完成后拼接。用户明确要求一次成文时才直接写全章。字数目标是整章分量刻度,疏密自行分配,不拆逐点配额;**不自测字数句长**(不跑 wc、不写统计脚本,短了也不据此重写)。`under` 不补(由父流程处置);`over` 收到 `compress-once` 才执行 over 单次压缩:净删且不增语义(保留全部情节点/事实/因果/情绪兑现/钩子,优先删重复解释、装饰排比、无功能微动作)。改写已有正文不新增情节、不灌水。
|
|
39
38
|
6. **正文元信息隔离**:章节号、上一章、匹配章、细纲编号只用于定位材料。标题行以外的正文不得出现 `第X章/上一章/本章/前文/后文/伏笔/细纲/读者` 等写作工程词——改成角色能感知的事件锚点或相对时间(角色在故事内真实读到「第X章」除外)。
|
|
40
39
|
7. **格式约定(长篇)**:标题 `## 第N章 章名`,写入 `正文/第XXX章_章名.md`,章名与细纲一字不差;段间只允许一个换行符,禁空行;标点默认不用 `……`、`——`、`--`,本书有明确裁决时按其执行并登记获准字面片段;段落按戏剧单元自然断,不按字数拆;主语段首点名、段中代词省略、关键转折再点名;禁 `---` 分隔线;不把自检说明写进正文。prompt 给出的格式硬约束逐条遵守。
|
|
41
40
|
短篇或输出 `正文.md` 时按 `story-setup/references/agent-references/format-and-structure.md` 及调用方格式执行,不套长篇章标题。
|
|
@@ -57,22 +56,22 @@ memory: project
|
|
|
57
56
|
|
|
58
57
|
| 参考文件 | 必读条件 |
|
|
59
58
|
|---|---|
|
|
60
|
-
| `story-setup/references/agent-references/style-resolution.md` |
|
|
61
|
-
| `story-setup/references/agent-references/writing-craft.md` |
|
|
62
|
-
| `story-setup/references/agent-references/banned-words.md` |
|
|
59
|
+
| `story-setup/references/agent-references/style-resolution.md` | prompt 未附 `style_resolution` 裁决时;改写、去味或审稿前 |
|
|
60
|
+
| `story-setup/references/agent-references/writing-craft.md` | **产出正文全程**(从细纲到正文、场景推进、疏密分配、物件三次出现、套式反应删除测试) |
|
|
61
|
+
| `story-setup/references/agent-references/banned-words.md` | 改写、去味或审查任务时(写新正文不预读,禁用词由父流程检测器兜底) |
|
|
63
62
|
| `story-setup/references/agent-references/opening-design.md` | 开新书、或写前 3 章 |
|
|
64
|
-
| `story-setup/references/agent-references/anti-ai-writing.md` | 写后去AI味自检或改写时(7 Gate
|
|
63
|
+
| `story-setup/references/agent-references/anti-ai-writing.md` | 写后去AI味自检或改写时(7 Gate 详版、改写顺序与范例) |
|
|
65
64
|
| `story-setup/references/agent-references/deslop-gates.md` | 去味执行前读取删除保护与所选 Gate |
|
|
66
65
|
| `story-setup/references/agent-references/emotional-arc-design.md` | prompt 给了目标情绪或情绪模块时 |
|
|
67
66
|
| `story-setup/references/agent-references/dialogue-mastery.md` | 本章有对话时(潜台词/信息控制/权力博弈;排版层不采纳其裸引语示例,对话落法以书级文风为准) |
|
|
68
|
-
| `story-setup/references/agent-references/genre-prose-cards.md` 及 `story-setup/references/agent-references/genre-prose-cards/{题材}.md` 单卡 | prompt
|
|
67
|
+
| `story-setup/references/agent-references/genre-prose-cards.md` 及 `story-setup/references/agent-references/genre-prose-cards/{题材}.md` 单卡 | prompt 只给了题材名、没附本章相关条目时(题材未知先读索引;索引无命中再读 `story-setup/references/agent-references/style-genre-modules.md` 通用流派模块兜底;卡片只内部校准,不进正文) |
|
|
69
68
|
| `story-setup/references/agent-references/format-and-structure.md` | 短篇或输出 `正文.md` 时必读;长篇按调用方的 long-format 执行 |
|
|
70
69
|
| `story-setup/references/agent-references/agent-reference-profiles.md` + `story-setup/references/agent-references/agent-quality.md` | 审查/评分前后配套读取 |
|
|
71
70
|
| 文风路径(prompt 传入或从本书定位) | **写作、改写与审稿前必读全文**——摘要只作索引;消费同一 `style_resolution` |
|
|
72
71
|
|
|
73
72
|
## 写作执行
|
|
74
73
|
|
|
75
|
-
-
|
|
74
|
+
- **开局**:接上一章最后的动作/台词/现场,禁大段环境描写或背景复盘开场。
|
|
76
75
|
- **叙述姿态**:默认深度限知——锁死主视角此刻感知,不切他人内心、不提前剧透、场景被其情绪染色。**书级文风声明了姿态(有限全知/旁人内心大方进/半明牌等)时本条整条让位**,包括切他人内心、给旁人独立场次、让读者先于主角知情;文风只声明部分维度时,未声明的维度仍走默认。短篇题材包内联时按包执行。
|
|
77
76
|
- **场景推进**:进入处境,把有新信息的发生/感知/反应揉进同一镜头,不按维度凑段或补反应尾巴;核心戏展开、过场简写,收尾落钩子或情绪定格。按新动作/物件/信息/对话断段。
|
|
78
77
|
- **情绪执行**:情绪落地优先选择、台词、物件、后果,必要时直写;身体细节须承担伤势/失败/习惯/后果才写,不堆无功能小动作。**烈度反保守**:网文要强爽强情绪,冲突前置、打脸狠而具体、当众、有代价反转,宁过火不平淡(以克制为爽感的题材除外)。拉扯有回落再升;白描优先,忌华丽堆砌。
|
|
@@ -83,7 +82,7 @@ memory: project
|
|
|
83
82
|
|
|
84
83
|
只执行调用方选定的 Gate,未传范围时默认 A-G;不要把轻度或单 Gate 任务扩成全量。下述默认判据仅在对应 Gate 被选中时执行,表达选择服从 `style_resolution`。
|
|
85
84
|
|
|
86
|
-
删除保护与 A-G 详细规则统一读取 `story-setup/references/agent-references/deslop-gates.md`。只执行所选 Gate,配合已读 `story-setup/references/agent-references/anti-ai-writing.md`
|
|
85
|
+
删除保护与 A-G 详细规则统一读取 `story-setup/references/agent-references/deslop-gates.md`。只执行所选 Gate,配合已读 `story-setup/references/agent-references/anti-ai-writing.md` 的模式、改写顺序和范例,不在本定义重复规则。
|
|
87
86
|
|
|
88
87
|
- 补充判据:比喻不是原罪——单个生活化、角色化、有功能的保留,堆叠与万能文学比喻删;套式轻微反应(头皮发紧/眼皮一跳类)写作时避免,候选处的删除测试由质检侧执行,你不写验收短文;任务卡点须卡出信息/关系/代价/选择/伏笔变化,删掉无损的不写;每句须推动情节/情绪/代入至少一项,空转句删。身体部位词按叙事功能判断,不设次数上限。
|
|
89
88
|
|
|
@@ -91,10 +90,10 @@ memory: project
|
|
|
91
90
|
|
|
92
91
|
检查分工服从调用方:明确安排父流程或独立审查者负责语义去味时,写手只做编排、内容覆盖和格式自检;交回正文后由指定执行者完成去味。已明确交父流程的最终文件扫描不在子代理内重复;未分配时仍执行下列原有自检。
|
|
93
92
|
|
|
94
|
-
1.
|
|
95
|
-
2.
|
|
96
|
-
3.
|
|
97
|
-
4.
|
|
93
|
+
1. **覆盖自检(长篇必做)**:细纲每个情节点至少落地一次,漏即补;逐点记下落在哪一场,随交付返回。
|
|
94
|
+
2. **对话自检**:按 dialogue-mastery「绝对禁止」逐句过,命中即改。
|
|
95
|
+
3. **文风自检**:按书级文风(`设定/文风.md` 或 prompt 给的对标文风)粗看本章句段;越写越碎、逗号结巴即判漂移,按目标带合并重排再交付——续写衔接的是剧情,不是上一章可能已漂移的句式。
|
|
96
|
+
4. **确定性扫描归父流程**:长篇由父流程一次 `chapter check --fix-punctuation` 跑完 `check-ai-patterns.js --check` 等检测,写手不重复跑。未安排父流程扫描时(短篇、独立改写)自跑 `check-ai-patterns.js --check --fail-on=blocking <正文>` 与 `check-outline-copy.js <正文>`:blocking 改到净,advisory 与细纲重合只列进摘要;node 不可用如实报告,不得声称已运行。
|
|
98
97
|
|
|
99
98
|
## 文风优先级
|
|
100
99
|
|
|
@@ -102,6 +101,6 @@ memory: project
|
|
|
102
101
|
|
|
103
102
|
## 被调用协议
|
|
104
103
|
|
|
105
|
-
- **输出(默认文件模式)**:有文件路径一律 Write/Edit 直接落盘,只回 ≤200 字变更摘要(路径+动了什么+计数),不把全文返回;零散片段才回全文。长篇创作摘要另附(不计入 200
|
|
106
|
-
- **审查任务**(prompt 标「审查+去AI味」):任务是找问题不是验证正确性。按调用方选定 Gate、检查项与 rubric 执行;没有传 Gate 范围时默认 A-G。句式多样性与对话检查仅在相应范围内做;prompt
|
|
104
|
+
- **输出(默认文件模式)**:有文件路径一律 Write/Edit 直接落盘,只回 ≤200 字变更摘要(路径+动了什么+计数),不把全文返回;零散片段才回全文。长篇创作摘要另附(不计入 200 字;审查/短篇不要求):①**情节点落点**(`点N:哪一场`,一行一点);②**本章新增申报表**(类型/名目/落在哪/后续义务;无写 `0`;「后续义务」填不出的从表里删——那是「直接写」;末附一行**「本章没写成的」**——写作中你判断这里还有东西、却没写进去的,逐条列出并注明是哪种:细纲没给(没有这个点、给得太疏或没给位、拿不准会不会跟别处撞)/要先问作者。写成了的进上面的申报表,这一行只收没写成的;无写 `0`,不据它改本章正文);③本轮**参考文件读取清单**(只列文件名)。
|
|
105
|
+
- **审查任务**(prompt 标「审查+去AI味」):任务是找问题不是验证正确性。按调用方选定 Gate、检查项与 rubric 执行;没有传 Gate 范围时默认 A-G。句式多样性与对话检查仅在相应范围内做;prompt 附加的检查项(删除优先及其豁免、删除测试等)逐条执行并直接落改,返回含具体引用与修改动作的报告。被 story-review spawn 时以其内联 rubric 为准。
|
|
107
106
|
- **升级路径**:情绪弧线方向不明→story-architect;对话风格偏离→character-designer;设定矛盾→consistency-checker。短篇同样只写 `正文.md`,不建长篇追踪目录。
|
|
@@ -80,6 +80,7 @@ memory: project
|
|
|
80
80
|
- 主角目标/关键选择:{主角要什么;本章必须做出的判断或选择}
|
|
81
81
|
- 章首钩子:{类型} — {内容}
|
|
82
82
|
- 爽点:{内容 / 无显性但功能}
|
|
83
|
+
- 本章禁止提前释放:{本章特有的三五条;没有写"无"}
|
|
83
84
|
|
|
84
85
|
#### 内容概括(五段式)
|
|
85
86
|
- 起因:{}
|
|
@@ -103,11 +104,11 @@ memory: project
|
|
|
103
104
|
#### 情节细化
|
|
104
105
|
- 情节点序列(逐行填下表):
|
|
105
106
|
|
|
106
|
-
| # | 情节点(谁做了什么) | 功能标签 |
|
|
107
|
+
| # | 情节点(谁做了什么) | 功能标签 | 执行边界(禁+放) |
|
|
107
108
|
|---|---|---|---|
|
|
108
|
-
| 1 | {} | {铺垫/高潮/爽点/打脸} | {
|
|
109
|
+
| 1 | {} | {铺垫/高潮/爽点/打脸} | {禁:本点不可提前释放或新增什么。放:本点允许什么落地、到什么量级} |
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
每章至少一个点写了「放」;不填写逐点字数,不用 `目标字数 / beat 数`、固定档位或历史偏差预测容量,也不为凑目标自动补事件。章级 `字数目标` 保持独立。
|
|
111
112
|
- 复沓锚句:{须一字不差进正文的原话,一行一条、注明落在第几个情节点,如"点3:立此为凭…";誓言、面板、旧案原话等;没有写"无"}
|
|
112
113
|
- 行动成本(可无)/收益归属:{可无行动成本,不硬造代价;收益归谁、如何可见}
|
|
113
114
|
|
|
@@ -164,8 +165,7 @@ memory: project
|
|
|
164
165
|
## 禁止事项
|
|
165
166
|
|
|
166
167
|
- **不要内联参考文件内容到大纲输出中**。参考文件是你的工具箱,按需读取后运用其方法论,而非把理论原文粘贴到创作结果里。
|
|
167
|
-
-
|
|
168
|
-
- **不要输出字段不全的薄细纲**。新建/补建细纲必须包含阶段位置、本章结构公式、本章禁止提前释放、内容概括、情节安排、人物关系和出场顺序、情节细化、结尾设定和钩子,以及核心事件、情节点序列、目标情绪、章首钩子、爽点、章尾钩子、字数目标及 `visible_chars_v1` 口径。无证据的辅线/感情线可写“无”或 `[待补充]`,不能为了格式编造。
|
|
168
|
+
- **不要输出字段不全的薄细纲**。新建/补建细纲必须包含本章禁止提前释放、内容概括、情节安排、人物关系和出场顺序、情节细化、结尾设定和钩子,以及核心事件、情节点序列、目标情绪、章首钩子、爽点、章尾钩子、字数目标及 `visible_chars_v1` 口径;阶段位置、结构公式等阅读体验字段按需写。无证据的辅线/感情线可写“无”或 `[待补充]`,不能为了格式编造。
|
|
169
169
|
- **不要在未确定核心梗的情况下排布大纲**。核心梗三代论(主题 -- 题材核心 -- 核心情绪)是大纲的地基,跳过它会导致结构松散、爽点散乱。
|
|
170
170
|
|
|
171
171
|
---
|
|
@@ -161,15 +161,15 @@ maxTurns: 15
|
|
|
161
161
|
- 若字段缺失或已忽略 → `Glob 对标/*/**/*`,从命中文件所属的书目录(`对标/` 下的第一层目录,排除当前作品)取字典序第一个,并在 `gaps.main_benchmark_unspecified: true` 提示主对标书未指定;**枚举条件是书目录下有文件,不是有 `文风.md`**——缺文风但资料完整的候选仍算命中
|
|
162
162
|
- 若排除后无命中,继续向上找工作区根下的 `拆文库/*/**/*`,同样排除当前作品;仍无 → 返回 `gaps.no_benchmark: true`,`results` 置空,**不报错、不继续读文风**
|
|
163
163
|
3. **对标书路径查找(只判书目录有效性,不判文风)**:优先探 `{项目}/对标/{书名}/**/*`,回退探 `拆文库/{书名}/**/*`(向上找到工作区根,再下钻拆文库);探针是目录下的任意文件——Glob 不接受纯目录模式,`{书名}/` 恒返回空。任一处命中文件即视为书目录有效,进入步骤 4;两处都无命中才是 `benchmark_book_missing`。**不得用 `文风.md` 兼作目录存在性探针**——那会把「书在但缺文风」误判成「书不存在」,吞掉步骤 6 的 `profile_missing` 与调用方的 `custom_style` 降级分支
|
|
164
|
-
4.
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
164
|
+
4. **主产物探针与资料代际**:
|
|
165
|
+
- 先探 `{对标书路径}/剧情/情绪模块.md` 和 `{对标书路径}/剧情/节奏.md`,两者都存在才进入当前权威召回。
|
|
166
|
+
- 任一未命中时直接按下面两项返回并停止准备;`schema_version` 不参与新旧判断。两份老权威产物都存在时正常召回,缺少因果、双时间线或三维节奏等新增内嵌字段不阻断。
|
|
167
|
+
- 缺 `剧情/情绪模块.md` → `gaps.missing_primary_contract: true`、`gaps.module_missing: true`,`repair_action` 写“重跑 /story-long-analyze Stage 3,补齐情绪模块”。
|
|
168
|
+
- 缺 `剧情/节奏.md` → `gaps.missing_primary_contract: true`、`gaps.rhythm_missing: true`,`repair_action` 写“重跑 /story-long-analyze Stage 3,补齐节奏索引”。
|
|
169
|
+
5. **当前权威召回**:
|
|
170
|
+
- 对存在的 `{对标书路径}/剧情/情绪模块.md`,从读者需求、情绪引擎或可复现模块中选择 1 条 `selected_emotion_module`,写入 `module_source_path`。
|
|
171
|
+
- 对存在的 `{对标书路径}/剧情/节奏.md`,从关键信息推进、情绪触动点、爆发/冷却中选择 1 条 `rhythm_reference`,写入 `rhythm_source_path`。
|
|
172
|
+
- 两份文件冲突时保留两条来源摘要,返回 `gaps.module_rhythm_conflict: true`;二者优先于报告和故事线,禁止自行改写。
|
|
173
173
|
- 若两个权威文件都存在但对同一章节/模块的读者情绪或爆发点描述互相矛盾,保留两条原文摘要,并返回 `gaps.module_rhythm_conflict: true` 与 `gaps.conflict: "..."`;调用方按两个权威文件优先于 `拆文报告.md` / `故事线.md` 的规则处理,禁止自行改写
|
|
174
174
|
6. **读文风**:
|
|
175
175
|
- `Read {对标书路径}/文风.md`
|
|
@@ -194,7 +194,7 @@ maxTurns: 15
|
|
|
194
194
|
- L3 章节号最小
|
|
195
195
|
11. **读匹配章节资料**:
|
|
196
196
|
- 先 `Read {对标书路径}/章节/第K章_摘要.md`,提取本章基调序列、关键事件、爽点/情绪节点
|
|
197
|
-
-
|
|
197
|
+
- 新版轻量摘要直接读取「信息变化」「状态变化」「章尾钩子」「三维节奏」字段;旧摘要缺这些字段时再读取「关键信息与扩写技法」表,作为 `matched_chapter_techniques` 的证据/补足;两者都不覆盖 `剧情/节奏.md`
|
|
198
198
|
- 若 `{对标书路径}/章节/第K章_深度拆解.md` 存在,再读取并提取「可借鉴要素」+ 反应层 + 章尾钩子类型
|
|
199
199
|
- 若同章深度拆解不存在(常见:只有黄金三章有深度拆解),不要失败;回退读取 `第1章_深度拆解.md`、`第2章_深度拆解.md`、`第3章_深度拆解.md` 中基调最接近的一章,或仅使用文风「可借鉴技巧」
|
|
200
200
|
- 在 `gaps.matched_deep_dive_missing: true` 标记该回退
|
|
@@ -216,7 +216,7 @@ maxTurns: 15
|
|
|
216
216
|
|
|
217
217
|
> `context_load` 的固定读取量不随章数增长。角色当前值来自独立小快照,旧变化原因来自按 ID/角色定点命中的紧凑增量,时间线按作者/读者视角分开读取。
|
|
218
218
|
|
|
219
|
-
> 普通查询遇文件缺失时在 `gaps` 中返回事实;`context_load` 缺 state、续写状态卡或 `check`
|
|
219
|
+
> 普通查询遇文件缺失时在 `gaps` 中返回事实;`context_load` 缺 state、续写状态卡或 `check` 失败时停止。`benchmark_style_load` 缺两个老权威主产物时返回 `missing_primary_contract` 与 `repair_action`;登记的主对标书目录探不到时返回 `benchmark_book_missing` 与 `expected_path`;缺 `文风.md` 归 `profile_missing`。
|
|
220
220
|
|
|
221
221
|
---
|
|
222
222
|
|
|
@@ -13,9 +13,9 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
13
13
|
|
|
14
14
|
| 用户意图 | 关键词示例 | 路由到 |
|
|
15
15
|
|---|---|---|
|
|
16
|
-
|
|
|
16
|
+
| 长篇规划/写作 | 讨论长篇结构、规划剧情、开书、写大纲、补细纲、长篇、连载 | `/story-long-write` |
|
|
17
17
|
| 写短篇 | 短篇、盐言、一万字 | `/story-short-write` |
|
|
18
|
-
| 长篇拆文 |
|
|
18
|
+
| 长篇拆文 | 拆文、分析这本书、黄金三章、灵感库、跨书灵感聚合 | `/story-long-analyze` |
|
|
19
19
|
| 短篇拆文 | 拆短篇、分析这个故事 | `/story-short-analyze` |
|
|
20
20
|
| 长篇扫榜 | 长篇排行、什么火、起点/番茄/晋江 | `/story-long-scan` |
|
|
21
21
|
| 选题决策 | 写什么能爆、帮我选题、选题方向 | `/story-long-scan` |
|
|
@@ -33,15 +33,19 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
33
33
|
| 查故事资料 | 查角色、查伏笔、查进度、查设定、什么状态、写到哪了 | spawn `story-explorer` agent(结构化 prompt:`项目目录:{dir}\n查询类型:{根据意图选择}\n查询参数:{用户查询}`);agent 不可用时见下方「查询降级」 |
|
|
34
34
|
| 查资料 | 查资料、帮我查资料、调研、搜索一下、搜一下 | spawn `story-researcher` agent;agent 不可用时见下方「查询降级」 |
|
|
35
35
|
|
|
36
|
+
### 裸调用与新手
|
|
37
|
+
|
|
38
|
+
只说 `/story`、看不出意图时,不贴路由表,给四个白话选项:「开一本长篇或接着写」→ `/story-long-write`;「写一篇短篇」→ `/story-short-write`;「把一章改得不那么 AI」→ `/story-deslop`;「更多(拆书、扫榜、导入旧稿、审稿、封面)」→ 再列进阶项。还没部署过(项目根没有 `.story-deployed`)时先建议 `/story-setup`。
|
|
39
|
+
|
|
36
40
|
### 导入续写顺序
|
|
37
41
|
|
|
38
42
|
用户问"导入续写先 setup 还是 import"时,直接回答:**推荐先 `/story-setup`,新开/刷新会话后 `/story-import`,最后 `/story-long-write 日更` 或 `/story-long-write 写第N章`**。如果用户已经直接触发 `/story-import`,按 story-import 自带环境检测继续:未 setup 时让用户选择先去 setup 或继续串行导入。
|
|
39
43
|
|
|
40
44
|
## 作者记忆
|
|
41
45
|
|
|
42
|
-
用户要求记住、查看、确认、替换或忘掉作者习惯时,加载 [references/author-memory.md](references/author-memory.md),并只用本 skill 的 `scripts/author_memory_commit.py`
|
|
46
|
+
用户要求记住、查看、确认、替换或忘掉作者习惯时,加载 [references/author-memory.md](references/author-memory.md),并只用本 skill 的 `scripts/author_memory_commit.py` 管理两级 `.story/作者记忆/`:全局、题材、流程条目在工作区(`AP`),本书条目在书目录(`BP`,传 `--book-root`)。常用变更走单事件 `record`;工具未返回 `ok: true` 和 `Author Memory Receipt` 前,不得声称已记住。告诉作者时先用一句人话说记住了什么(如「记住了:这本书的对话一律用「」」),回执放最后一行,写法见协议「回执怎么告诉作者」。显示画像或待确认项是只读操作;不存在时直接说明尚未建立。
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
新增习惯必须保留用户原话和适用范围。一次性要求只执行不记录;小说事实写入本书设定/追踪;不从反复修改或成稿推断偏好,只记作者明确说的,原话范围含糊才进待确认;与已生效习惯冲突时显式 replace,不原地改写历史。项目级画像里还有「本书:」条目时,建议对该书运行 `migrate --book-root`。用户没有指定工作区时,按协议定位已有作者记忆的最近祖先或当前创作工作区,禁止默认写到用户主目录。
|
|
45
49
|
|
|
46
50
|
## Dashboard 工作台
|
|
47
51
|
|
|
@@ -84,12 +88,14 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
84
88
|
|
|
85
89
|
## 查询降级
|
|
86
90
|
|
|
87
|
-
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version:
|
|
91
|
+
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 32` 不一致时(标记缺失、字段缺失/非整数、小于或大于 32)**照常按文件存在性检查并 spawn**,但只检查当前运行时的 canonical 目录;同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 32)` 并提示重新运行 `/story-setup` 后新开会话;大于 32 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
|
|
88
92
|
|
|
89
93
|
「查故事资料」「查资料」走 agent 前先做轻量可用性检查(路由只做这一层,不承担全局部署策略):当前不在子代理上下文、当前运行时的 Agent/Task 或 `invoke_subagent` 工具可用,且对应部署文件存在(Claude `.claude/agents/*.md`、OpenCode `.opencode/agents/*.md`、Codex `.codex/agents/*.toml`、Antigravity `.agents/agents/agent-name/agent.md`,其中 `agent-name` 为目标 agent 名)→ 可尝试 spawn。Antigravity 用 `invoke_subagent` + 同名 `TypeName`,不得因其他端文件存在而误判。任一不满足,或运行时返回 unknown agent / 未暴露 custom-agent registry,则降级,不硬失败:
|
|
90
94
|
|
|
91
|
-
- `story-explorer` 不可用 → 主线程直接用 Read/Grep
|
|
92
|
-
- `story-researcher` 不可用 → 主线程用现有检索/回答能力完成,或提示用户改用 `/browser-cdp`
|
|
95
|
+
- `story-explorer` 不可用 → 主线程直接用 Read/Grep 从项目文件检索(角色状态/伏笔/进度/设定),回答前说一句「查资料助手没启用,这次我直接翻项目文件」;项目尚未部署时提示先 `/story-setup`(Codex 中用 `$story-setup`)。
|
|
96
|
+
- `story-researcher` 不可用 → 主线程用现有检索/回答能力完成,或提示用户改用 `/browser-cdp` 采集,同样用一句白话说明。
|
|
97
|
+
|
|
98
|
+
回答作者时讲故事里的事(谁、在哪章、发生了什么);文件字段名、伏笔/事件编号不单独出现,编号必须跟着故事描述。
|
|
93
99
|
|
|
94
100
|
## 项目状态感知
|
|
95
101
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.8.0
|
|
@@ -19,23 +19,30 @@
|
|
|
19
19
|
|
|
20
20
|
## 文件与所有权
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
作者记忆分两级存放,记忆随书走:
|
|
23
23
|
|
|
24
24
|
```text
|
|
25
|
-
{工作区}/.story/作者记忆/
|
|
25
|
+
{工作区}/.story/作者记忆/ # 项目级 store:global / genre / workflow 条目,编号 AP
|
|
26
26
|
├── _author-memory-state.json # 唯一结构化权威
|
|
27
27
|
├── 作者画像.md # 仅 active,供作者查看与管理
|
|
28
28
|
├── 待确认.md # pending / conflict,不参与约束
|
|
29
29
|
└── 变更记录.md # 最近 100 次、最新在前的事务记录
|
|
30
|
+
{书}/.story/作者记忆/ # 书级 store:只存这本书的 book 条目,编号 BP,同样四个文件
|
|
30
31
|
```
|
|
31
32
|
|
|
32
|
-
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query`
|
|
33
|
+
三个 Markdown 文件都从 state 确定性生成,禁止手改;完整历史保留在 state,变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图,普通写作 agent 不整份注入,而是调用 `query` 取得本次相关的紧凑上下文。作者记忆不存在时,普通写作、审稿和去味任务直接继续,不自动初始化空目录;首次 `record` 会随事务创建。
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
**定位规则**:`--workspace` 必须显式传给脚本,指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层;已有记忆时,是项目级 state(不带 `book` 字段)所在的最近祖先。书目录自己的 `.story/作者记忆/` 是书级 store,`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`;不要把用户主目录当默认工作区。`--book-root` 是当前书的项目目录(`.active-book` 指向、或含 `设定/`、`正文/` 的那一层,如 `{工作区}/长篇/{书名}/`);书名默认取书级 state 记录的名字,首次建立时取目录名,`--book` 可覆盖。
|
|
36
|
+
|
|
37
|
+
**单书布局**:书根就是工作区(`--book-root` 与 `--workspace` 同一目录)时,书级 store 改住 `{工作区}/.story/作者记忆/书级/`,与项目级各自一份 state;首次建立的书名优先取项目级存量本书条目里唯一的书名,再取目录名。旧版曾把书级 state 写在项目级位置,此后项目级读写都报 `state.book`;带 `--book-root {工作区}` 运行任一命令(含 `query`)会先把它原样移进 `书级/`,不改内容。这个目录其实是某个工作区里的一本书时(上一层叫 `长篇/` 或 `短篇/`,或某个祖先有 `.active-book` 或项目级 state),工具直接报错、不动任何文件,按报错改传 `--workspace`。
|
|
38
|
+
|
|
39
|
+
**路由规则**:ID 前缀就是 store——`decide` / `forget` 看 `item_id`(`AP` 进项目级,`BP` 进书级),`remember` / `replace` 看 `scope.level`(`book` 进书级,其余进项目级)。书级操作必须传 `--book-root`,没传直接报错,不会退而写进项目级。一份 `commit` 事务只能写一个 store;`replace` 与 `conflicts_with` 不能跨 store——本书例外按优先级覆盖全局规则,不算冲突,直接 `remember` 为 book 条目即可;要把全局规则改成本书规则,拆成 `forget` + `remember` 两个事件。
|
|
40
|
+
|
|
41
|
+
**存量迁移,不做双读**:升级前写进项目级 store 的 book 条目不再参与查询与预算估算,也不再接受新的 book 写入;它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来:断言、证据、确认次数、重要度原样保留,换成 `BP` 编号,原 `AP` 条目标 `superseded` 并注明去向;与全局条目的冲突关系在迁移后不再成立,这类候选退回 `pending`。书级每个源条目一笔事务,重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书:」条目时,把迁移列为默认提案项。
|
|
35
42
|
|
|
36
43
|
## 什么时候读取
|
|
37
44
|
|
|
38
|
-
长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active
|
|
45
|
+
长篇、短篇、去 AI 味开始前,如果 state 已存在,用 `query` 按本书、题材、流程和类型筛选 active 条目:结果是项目级 store 与 `--book-root` 所指书级 store 的合并;不传 `--book-root` 就拿不到任何本书条目。查询输出固定不超过 2048 字节。`--kind` 必传——不传直接报错,不再默认返回全部类型;按任务直接选择 kind:
|
|
39
46
|
|
|
40
47
|
| 任务 | query kinds | 注入位置 |
|
|
41
48
|
|---|---|---|
|
|
@@ -50,10 +57,19 @@
|
|
|
50
57
|
|
|
51
58
|
## 可靠性与负荷边界
|
|
52
59
|
|
|
53
|
-
- 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx
|
|
60
|
+
- 明确“记住 / 确认 / 替换 / 忘掉”的请求走单事件 `record`,不要求 agent 手工读取修订号或拼多操作事务。成功响应会给出 `Author Memory Receipt: rN · APxxx`;没有回执就不得声称“已经记住”。怎么告诉作者见「回执怎么告诉作者」。
|
|
54
61
|
- 普通创作只做一次本地 `query`,没有 state 时返回空结果且不创建文件;有记忆时也只返回相关 active 条目,硬上限 2048 字节。完整画像、证据、候选和 journal 不进入正文 prompt。
|
|
62
|
+
- **写入不因注入预算失败**:`record` / `commit` 照常成功、给回执;工具按上表四类任务组合估算最坏查询情形(全局条目+各 scope 维度最重的单一切片,切片按大小写无关归并、轻重按写作时真正读到的字段算,与真实查询同一把尺),装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。收到提醒就用白话转告作者并建议「整理作者记忆」。写入落盘后另一级 store 读不出来(书目录不存在、`--book` 与书级记录不符等)也照常给回执,`warnings` 注明本次提醒没算上它——已有回执就是已记住,不要换 `event_id` 重试。写书级条目时「本书+全局」按实际条目精确计算;写项目级条目时只看得到项目级 store,顺手传 `--book-root` 就把当前这本书也算进提醒。查询按 **重要度 → 本书例外 → 最近更新** 排序装填(同一范围的条目必在同一 store,「最近」按该 store 的修订号比,不跨 store 比较),先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里,写入时按偏好的实际分量填,不要一律 `high`。
|
|
63
|
+
- 注入预算之外还有一道硬上限:`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到(远在注入预算之后),碰到就走「整理作者记忆」;`forget` 这类减量操作在满编时照常可用。
|
|
55
64
|
- 查询项是低优先级倾向,不是逐条打卡清单。自然吸收即可,不复述画像、不刻意提高词面命中率,也不得为命中偏好牺牲正文连贯、节奏、字数或本书既定笔调。
|
|
56
|
-
- 不安装会记录全部用户消息的 prompt hook
|
|
65
|
+
- 不安装会记录全部用户消息的 prompt hook,也不在作者没开口时观察他:不从反复修改、成稿或操作轨迹推断偏好写入。只记作者明确表达的偏好;自然语言是否属于长期习惯仍需 agent 判断,拿不准就只执行不记录。需要确定写入时,用户可明确说“记住:……”,并以回执验收。
|
|
66
|
+
|
|
67
|
+
## 回执怎么告诉作者
|
|
68
|
+
|
|
69
|
+
回复就两行纯文本,不加代码块或引用格式:第一行用一句人话说记住了什么、管哪本书或哪类场合,如「记住了:《{书名}》的对话一律用「」,以后写这本书都照这个来;想改随时说。」;第二行是机器回执作凭证,如「技术备注:Author Memory Receipt: r1 · BP001」。
|
|
70
|
+
|
|
71
|
+
- 确认、替换、忘掉同理:「好,这条生效了:……」「换成了:……,原来的「……」不再用」「忘掉了:……」。只进待确认时说「这条先记在待确认里,你说"确认"才生效」;有冲突时用原话说明跟哪条旧习惯冲突。
|
|
72
|
+
- `warnings` / `omitted_ids` 不原样贴:说「你的习惯攒得有点多,写正文时这几条可能顾不上:「……」」,并建议说「整理作者记忆」。不提字节、prompt、kind、scope;编号只能跟着原话出现。
|
|
57
73
|
|
|
58
74
|
## 捕获判定
|
|
59
75
|
|
|
@@ -61,13 +77,19 @@
|
|
|
61
77
|
|---|---|
|
|
62
78
|
| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`,`source=explicit_user` |
|
|
63
79
|
| 用户明确接受助手提出的长期做法 | `active`,`source=accepted_suggestion` |
|
|
64
|
-
|
|
|
65
|
-
|
|
|
80
|
+
| 作者原话像长期偏好但范围或稳定性含糊 | `pending`,取当前最窄合理范围;待确认只来自作者自己的话 |
|
|
81
|
+
| 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断;作者没开口的偏好不进记忆 |
|
|
66
82
|
| “这一章别……”“这次给我……”等一次性要求 | 只执行,不记录 |
|
|
67
83
|
| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪,不写作者记忆 |
|
|
68
84
|
| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |
|
|
69
85
|
|
|
70
|
-
保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion`
|
|
86
|
+
保留用户的否定词、限定词和适用范围,`quote` 写原话,`assertion` 只做不改变语义的紧凑归纳,**新建条目限一句话(≤120 字节,约 40 个字)**;需要解释的背景写进 `reason`(不进 prompt 载荷),不另开字段。
|
|
87
|
+
|
|
88
|
+
**一条偏好就是一条记录,例外和限定不许拆出去单列。** 「以后少用破折号,对话里也别用,除非表示打断」是一条带例外的偏好,必须整条写成一个 `assertion`(「破折号少用、对话里也不用,只在表示打断时保留」)。超编时条目是逐条被丢的,把「除非表示打断」拆成独立一条,就可能只丢掉例外、把作者明说过的限定变成送进正文的绝对禁令。只有原话确实塞了**几条互不依赖**的偏好(如「多用短句」+「章末留钩子」)才拆成几条。整句写不进 120 字节时压缩措辞,不要切掉限定词。
|
|
89
|
+
|
|
90
|
+
升级前写下的长断言不受新上限约束:原样重申它会**强化**原条目(确认次数 +1),不会因超长被拒;只有真正新建条目才校验 120 字节。
|
|
91
|
+
|
|
92
|
+
范围规则:
|
|
71
93
|
|
|
72
94
|
- “本书 / 这个角色 / 这次连载” → `book`;
|
|
73
95
|
- “都市文 / 这类题材” → `genre`;
|
|
@@ -75,33 +97,41 @@
|
|
|
75
97
|
- “以后 / 一贯 / 我习惯”且无更窄限定 → `global`;
|
|
76
98
|
- 范围含糊但可能稳定 → 取当前最窄合理范围并置 `pending`。
|
|
77
99
|
|
|
78
|
-
类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high
|
|
100
|
+
类型可选:`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`;工具会拒绝推断类来源,存量 state 里的旧来源条目照常可读、可确认、可退役。
|
|
79
101
|
|
|
80
102
|
## 冲突、撤回与强化
|
|
81
103
|
|
|
82
104
|
- 同一类型、范围、归纳文本再次出现时,脚本强化原条目,累加证据和确认次数,不重复建条目。
|
|
83
|
-
-
|
|
84
|
-
- 同一范围的规则改版用 `replace`,启用新条目并将旧条目标成 `superseded`。本书例外用 `remember` 新建 book
|
|
105
|
+
- 新偏好与同一 store 里的 active 条目矛盾时,先以 `conflict` 记候选,并在 `conflicts_with` 列出冲突 ID;当前任务仍按本轮明确要求执行。本书例外与全局规则不算冲突。
|
|
106
|
+
- 同一范围的规则改版用 `replace`,启用新条目并将旧条目标成 `superseded`。本书例外用 `remember` 新建 book 条目(传 `--book-root`),保留 global 习惯;只有作者明确撤销或改变旧规则范围时才跨范围替换,跨 store 时拆成 `forget` + `remember`。
|
|
85
107
|
- pending 可以用 `decide=activate|reject`;冲突候选不能绕过旧规则直接 activate。
|
|
86
108
|
- 作者说“忘掉 / 这不再是我的习惯”时用 `forget`,保留历史证据但不再加载。
|
|
87
109
|
- active 条目的语义不可原地偷改;语义变化必须 replace,历史才可审计。
|
|
88
110
|
|
|
111
|
+
## 整理作者记忆
|
|
112
|
+
|
|
113
|
+
作者说「整理作者记忆」,或回执 `warnings`/查询 `omitted_ids` 提示超编时:读项目级与当前书的 `作者画像.md`(每条都标了范围、重要度、把握和确认次数,重要度就是超编时的去留依据),提出合并同义条(`replace` 多合一)、退役过时条(`forget`)、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案;项目级画像里还有「本书:」条目时,「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认(编号只放括号里),确认后按 store 各汇成一份 `commit` 事务提交(一份事务只写一个 store)。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条,不要靠删限定词把两条凑成一条。整理只由作者发起或确认,不自动执行。
|
|
114
|
+
|
|
89
115
|
## 运行工具
|
|
90
116
|
|
|
91
117
|
先依次尝试 `python3`、`python`、`py -3` 找到 Python 3,再从当前 skill 根运行本地副本:
|
|
92
118
|
|
|
93
119
|
```text
|
|
94
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init
|
|
95
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record
|
|
96
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query
|
|
97
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit
|
|
98
|
-
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py
|
|
120
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init --workspace {工作区} [--book-root {书目录}]
|
|
121
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json
|
|
122
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind {类型}(必传,可重复) [--genre {题材}] [--workflow {流程}]
|
|
123
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json
|
|
124
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}
|
|
125
|
+
{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check --workspace {工作区} [--book-root {书目录}]
|
|
99
126
|
```
|
|
100
127
|
|
|
101
|
-
- `
|
|
102
|
-
|
|
103
|
-
- `
|
|
104
|
-
- `
|
|
128
|
+
所有子命令都可加 `--book {书名}` 覆盖书名;正在写某本书时一律带上 `--book-root`,书级操作没有它会直接报错。事件与事务 JSON 写在 `{工作区}/.story/work/` 下(不写系统 `/tmp`),成功后删掉;`book` 条目的 `scope.value` 填书名(书级 store 已记着书名就用它,首次取书目录名)。
|
|
129
|
+
|
|
130
|
+
- `record`:常用单事件入口,按路由规则落到项目级或书级 store,自动读取该 store 的当前修订、首次自动初始化;`event_id` 相同且内容相同会幂等返回原回执,内容不同会失败。原样重申已有条目的 `assertion` 会强化该条(不受 120 字节新建上限约束)。返回里的 `store` / `book` 说明写到了哪一级,`warnings` 是预算提醒,按「回执怎么告诉作者」用白话转告。
|
|
131
|
+
- `query`:只读相关 active 条目,项目级与书级合并返回;`--kind` 必传、可重复,两级 state 都不存在时返回空结果且零写入。输出按 重要度 → 本书例外 → 最近更新 排序装填;装不下的条目跳过而不中断(一条长的不挡后面的短条),漏下的 ID 按同一优先级报进 `omitted_ids`(最多列 20 条,`omitted` 是真实总数)。**`omitted_ids` 非空=记忆超编**——转告作者并建议「整理作者记忆」,它不是「没有更多了」,也不得改读完整画像规避预算。
|
|
132
|
+
- `commit`:高级批量入口;一份事务只写一个 store,先在内存完成 schema、引用、容量和所有视图校验,最后原子替换 state。事务文件在成功前必须保留;过期修订会在任何写入前失败。
|
|
133
|
+
- `migrate`:把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store,幂等,中途失败直接重跑;返回 `migrated`(源→新编号),没有存量时为空。
|
|
134
|
+
- `check`:从 state 重建并逐字核验所有派生视图;传 `--book-root` 时两级一起核验。
|
|
105
135
|
|
|
106
136
|
## 事务格式
|
|
107
137
|
|
|
@@ -130,7 +160,7 @@
|
|
|
130
160
|
}
|
|
131
161
|
```
|
|
132
162
|
|
|
133
|
-
把文件交给 `record
|
|
163
|
+
把文件交给 `record`(book 范围的事件同时传 `--book-root`)。待确认项的 `status` 用 `pending`;冲突候选用 `conflict` 并填写同一 store 里的 active ID。确认或拒绝候选时,把下列对象作为新事件的 `operation`(`BP` 编号的事件传 `--book-root`):
|
|
134
164
|
|
|
135
165
|
```json
|
|
136
166
|
{"action":"decide","item_id":"AP002","decision":"activate","quote":"对,这就是我的长期习惯。","reason":"作者明确确认"}
|
|
@@ -162,4 +192,4 @@
|
|
|
162
192
|
{"action":"forget","item_id":"AP003","quote":"忘掉这个偏好。","reason":"作者明确撤回"}
|
|
163
193
|
```
|
|
164
194
|
|
|
165
|
-
需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations
|
|
195
|
+
需要把多个动作绑定成一次原子提交时才用高级 `commit`:顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`。操作按数组顺序应用,任一步失败则整份事务零写入。成功后删除临时输入文件;显式记忆请求按「回执怎么告诉作者」转告。
|