dsh-novel-forge:在 DSH 里用文件管理长篇网文写作状态

前言

在 DeepSeek Harness(DSH)里做长篇中文网文,常见做法是每次让模型「接着写」——设定、人物状态、伏笔散落在对话里,章与章之间容易矛盾,也缺少可版本管理的落盘结构。社区维护者 EastChilde 的 dsh-novel-forge(墨匣)把思路换成「写作状态管理」:设定、大纲、正文、人物状态、伏笔账本都落成工作区内可读可改的纯文本;模型在写某一章之前,只通过工具装配该章需要的上下文,而不是依赖对话记忆。

下面介绍插件定位、能力与安装方式,以及一套可复现的章节写作顺序。

这是什么

dsh-novel-forge 是 DSH 分类为「工作流」的插件:从一句想法到能连载的长篇网文,目标是把创意、设定、细纲、正文和追踪信息全部落在固定目录结构中。README 写明当前为 M1 完成——9 个 host 工具与左侧「小说」面板(书架、章节、关系图、编辑、导出)可用,40 项单测通过;向量检索、docx/epub 导出等在后续里程碑。

它不是「一键生成全书」的按钮,而是一套与 DSH 工具、会话、工作区绑定的流程。插件以当前 dsh 进程权限运行;安装前建议在 GitHub 核对源码与 MIT 许可证(版本 0.1.0,package.json 中 engines.node 为 >=22)。

设计思路:为什么不用「直接让模型写」

README 用表格归纳了几类问题与插件对策,核心可概括为:

问题 插件做法
模型没有跨章记忆 写章前通过 novel_context 从设定库、状态、伏笔账本装配上下文
前后设定矛盾 state.json 为唯一权威;novel_write_commit 提交时校验并更新
伏笔难回收 伏笔编号、埋设章、计划回收章;逾期提醒
文风趋同 文风锚点、高危词表、句首重复检测与定向重写相关能力
批量失控 单轮批量上限、细纲前置、必须修 / 提醒两级检查

正文可改,但须经提交;旧版自动存档。全部是纯文本,可直接用 git 管理书籍目录。

核心功能

Host 工具(9 个)

工具 作用 典型时机
novel_guide 方法论:网文规则、结构模板、钩子库、去 AI 味 规划、自检
novel_init 建书、落目录骨架 开新书
novel_status 进度、最近章节、未回收伏笔、下一章细纲是否就绪 续写前 / 裸调用 /novel
novel_outline_put 写入或替换某章细纲(校验不过不写盘) 写正文前
novel_context 装配某章写作上下文 写正文前
novel_write_commit 提交正文:落盘、更新状态、重建派生、跑检查 写完一章
novel_check 对已提交章节做机械检查 改稿后复查
novel_export 合并已提交章节为导出合集 备份、投稿
novel_resume 冷启动恢复卡:上章结尾、人物状态、下一章要害 新会话、隔天续写

多本书时,novel_status、novel_write_commit 等支持 book 参数;仅一本时可省略,多本未指定会报错。

左侧「小说」面板

刷新后,左侧导航会多 小说 入口,与「自动化任务」同类实现:main 面板(key: novel)+ sidebar.panellist(id: novel)。主区为书架与单书详情两栏:章列表、细纲、人物、设定、伏笔、未答问题;可在面板内阅读/编辑并原子写回原文件;支持导出 MD/TXT、伏笔跳转、人物/地点/势力关系图等。右上角 写下一章 会打开或复用当前工作区会话并预置「继续写下一章」;对话里直接说「写第 3 章」等价。

HTTP 接口(面向面板与工作区)

宿主需具备 tools、workingDirectory、webServer、sessions;缺任一项插件会停在 pending。工作区解析顺序:显式 cwd → 会话 id 对应 cwd → 最近有 cwd 的会话 → 本进程最近一次小说工具用的工作区。

方法 路径 用途
GET /novel/api/snapshot 全部书及章节/细纲/人物/伏笔快照
POST /novel/api/book 新建书骨架 {cwd?, title, genre?, premise?}
POST /novel/api/export 导出 {cwd?, slug, format?: 'md' \| 'txt'}
POST /novel/api/rename 改书名 {cwd?, slug, title}
POST /novel/api/delete 移到回收站 {cwd?, slug}
GET /novel/api/file?path= 读书目录内文件(越界 403、缺失 404、>2MB 413)
PUT /novel/api/file 写回文件;保存正文时重算章字数并同步 state

质量检查

novel_write_commit 每次运行机械规则:必须修(字数超目标 ±15%、正文为空、细纲缺标题);提醒(AI 味词密度、对话占比、句首三连重复、单段过长、章末钩子、伏笔逾期等)。无法由规则判定的一致性问题,依赖 state.json 与人工确认。

目录约定

默认一本书一个目录,在工作区 books/ 下(可通过配置改 booksRoot):

books/北境无神/
├── project.json
├── 00-创意.md
├── 01-设定/
├── 02-大纲/
├── 03-正文/
├── 04-追踪/          # state.json(权威)+ 派生追踪
├── 05-导出/
└── .novel/             # 索引缓存与归档(可删)

规则:state.json 唯一权威,派生物可重建;正文修改走提交,旧版进 .novel/archive/。

安装与启用

插件无构建步骤(src/ 即运行时)。官方 README 安装方式如下:

# GitHub
dsh plugin --profile <profile> add github:EastChilde/dsh-novel-forge

# Gitee
dsh plugin --profile <profile> add git+https://gitee.com/EastChilde/dsh-novel-forge.git

# 本地目录(开发时)
dsh plugin --profile desktop add /path/to/dsh-novel-forge

装完后重启 profile,或在插件管理器中对该插件禁用再启用一次。README 注明发布到 npm 后亦可 add dsh-novel-forge(需包先在 npm 可用)。

开发时改 src/*.js 后需在插件管理器对 include:novel-forge 禁用再启用,或重启应用;改 src/references/*.md 无需重载。

典型用法

推荐工具调用顺序(摘自 README):

novel_init → novel_guide(开书) → 提案确认
→ 写设定 / 细纲 → novel_outline_put
→ novel_context → 写正文 → novel_write_commit
→ (有必须修就改)→ novel_write_commit 同章覆盖

在 cordis.patch.yml 的 config 中可覆盖例如 booksRoot(默认 books)、defaultTargetWords(默认 2500)、wordTolerance(默认 0.15)、aiFlavorWords、aiDensityLimit、dialogueMin / dialogueMax 等项;未在配置中写的项保持 README 默认值。

适用场景与注意

适合在 DSH 中长期连载、希望设定与大纲与正文同源落在工作区、并愿意按「细纲 → 上下文 → 正文 → 提交」节奏写作的开发者或作者。不适合指望单次对话无结构吐完全书、或不需要文件化状态管理的场景。

插件依赖宿主能力完整就绪;安装源以 GitHub/Gitee 或本地路径为准,使用前请自行审阅仓库代码与许可证。路线图中 M2/M3 含斜杠命令、卷纲批量、docx/epub、质量报告等,以仓库后续提交为准,本文不展开未落地能力。

结尾

dsh-novel-forge 把长篇网文写作拆成可编辑的文件树与可重复的 host 工具链,让每章写作建立在装配好的上下文与统一的 state.json 上,而不是一次性生成。要进一步看分类说明与仓库详情,可访问 SkillHub 插件页 与 GitHub README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye