前言¶
在 DSH 里做长篇小说,常见做法是聊天窗口里一段段续写,大纲、人设、待改稿散落在笔记或另一个工具里;agent 能写,但「这一轮能不能开写」「改稿要不要人拍板」往往靠自觉。DeepSeek Harness 的插件模型允许把 UI、数据层和 RPC 收进一个包:dsh-nightwrite(社区名 长夜)把「今天能不能写 → 大纲 → 派单 → 正文 → 验收」串成一条可重复的工作流,数据落在本地目录,agent 通过同名 RPC 与界面读写同一份库。
下面介绍它是什么、核心页面与护栏、如何安装,以及使用前需要留意的权限与版本要求。事实以 GitHub 仓库 README 与 SkillHub 目录页 为准;SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-nightwrite 由维护者 qinyuan1017 发布,在 SkillHub 分类为 工作流。定位是:AI 主写、人类当导演 的 DSH 小说工作台——长夜不替你在界面里「偷偷改已定稿」,而是通过派单、队列、验收台把写、审、改分开,人类在关键节点拍板。
接入方式:
- 侧栏「插件」里 🌙 图标,中心列
main槽位,key='nightwrite'。 - 数据目录默认
~/.dsh/data/dsh-nightwrite,可用环境变量NIGHTWRITE_ROOT覆盖。 - 读写统一走同源 RPC:
POST /nightwrite/api,body 为{ op, payload }。 - 同时注册工具
nightwrite_op,让 agent 与 UI 操作同一套 119 个 op。
当前 package 版本 0.2.0,许可证 MIT,要求 Node >= 22.19.0。
八个页面与一条工作流¶
导航在底栏居中胶囊(.nw-dock)里,共八个入口;顶栏一行展示品牌、状态、待验收/队列/本月花销等,不把「今天有多少活」藏进深层菜单。README 说明早期十页经两次合并为八页:流水线上下段合成 派单,「能不能写」与「今天写什么」合成 今天。
| 页 | key | 作用(摘自 README) |
|---|---|---|
| 今天 | today |
run 状态条(确认/打回/收尾)+ 今天该写什么 |
| 正文 | read |
只读正文,字号行距、阅读位置、J/K 换章,可切编辑 |
| 大纲 | plan |
方案 → 卷章骨架 → 可把「第几回 + 意图」送去派单 |
| 派单 | dispatch |
11 个岗位与在途工单,上下文包、指令单、队列 |
| 验收台 | review |
逐章拍板(含提案/问题单视图)、读者视角、历史版本 |
| 世界库 | world |
人物/地点/伏笔/事件/术语/规则/高光/冲突等账本 |
| 侦察 | scout |
拆文、扫榜、资料研究、封面 |
| 设置 | settings |
作品参数、分场景写作原则、质量门、预算、数据位置 |
典型流水线(README 原文逻辑):
今天 → 大纲 → 派单 → 正文 → 验收台
写作原则按场景分条:project.settings.writePrinciple 为通用句,project.settings.principles = [{name, text}] 最多 12 条;派单时按模板名与意图匹配场景,只把相关原则带给模型(pickPrinciple() → dispatch()),可在设置页修改。
尚无作品时,八页不显示,改为三步建书向导(project.create → outline.save → outline.generate);任一步失败不回滚已建目录,但会说明哪一步未落盘。
派单、岗位与 agent¶
长夜通过 派单 驱动写作,而不是在插件内独自完成全部正文。README 记载 11 个岗位 写在 agents/*.md,并与 skills/ 下 25 份 SKILL.md 配套;合并通读文件为 nightwrite-skills-all.md。流水线页把上下文装配、指令单与队列合成一页,上游是岗位与在途工单,下游进入模型执行与回写。
对 DSH 里的 agent,除 UI 外还可调用 nightwrite_op(及 README 提到的 nightwrite_dispatch 等注册)直接执行与界面相同的 op,便于在对话里续队列、查状态而不重复造数据层。
数据与安全护栏¶
数据层在 lib/store.js 描述的 JSON/文本布局,例如 library.json、chapters/、ledger.json、queue.json、outline.json、proposals.json、problems.json 等。README 强调三条「丢了就真没了」的防护:
- 覆盖正文前留底:
chapter.save前把旧正文写入chapters/history/,每章保留最近 20 版;chapter.restore回滚,回滚操作本身也留底。 - 删章可恢复:
chapter.delete移到chapters/.trash/,可chapter.recover;chapter.purge才永久删除。 - 采纳前先点数:
proposal.preview统计before在正文中出现次数,大于 1 时验收台告警,避免改错位置。
提案机制:proposal.save 的 before 必须是正文逐字原文;proposal.decide 全部命中才写回,否则整单拒绝、正文不动——AI 不能绕过人类拍板改已定稿。
RPC 共 119 个 op(读 60 / 写 59),完整列表见 README;常见读 op 含 project.list、chapter.get、queue.list、run.current 等,写 op 含 dispatch.send、run.open、review.action 等。
安装与启用¶
在 DSH desktop profile 下从 npm 安装:
dsh plugin --profile desktop add dsh-nightwrite
本地开发可从仓库路径安装(README 示例为 Windows 路径,Linux 下改为本机绝对路径即可):
dsh plugin --profile desktop add file:C:/path/to/dsh-nightwrite
说明:lib/client.js 为入库产物,宿主装载时不跑构建;若自行改 src/*.js,需在仓库内执行 node build.mjs 再提交。改完源码后,file: 依赖不会自动热更新,README 给出了同步到 ~/.dsh/profiles/desktop/node_modules/dsh-nightwrite 的 cp 与 md5sum 核对步骤,开发时可按文档操作。
安装后重启或按 DSH 惯例加载插件,从侧栏 🌙 进入;确认 NIGHTWRITE_ROOT(若设置)指向可写目录。
典型用法(可复现路径)¶
- 新建作品:无书时走三步向导,填书名与创作意图,选体量,可选「建完先把全书骨架排好」;提交触发上述三个 create/outline op。
- 今天页开工:查看 run 状态条,确认上一轮已验收或收尾后再开新轮;顶栏快动作含「续写一章 / 连更 3 章 / 体检」等(以当前 UI 为准)。
- 大纲 → 派单:在
plan维护方案与卷章骨架,必要时outline.generate回填摘要/钩子,再把「第几回 + 意图」送入派单。 - 派单执行:在
dispatch查看岗位、工单、队列;agent 可通过nightwrite_op与同一队列协作。 - 正文与验收:
read阅读或轻改;review逐章拍板,处理提案与问题单;预算超支时顶栏计量条会标明超出量(README 描述)。
成书导出、检查更新、语料池等入口在设置及相关模块(如 src/74-book.js)中,格式含 TXT/MD/EPUB/DOCX(见目录说明)。
适用场景与注意¶
适合:希望在 DSH 内用固定工作流写长篇、需要本地作品库与世界观账本、希望 agent 与人类共用一套 RPC 而非多套文件的作者或插件开发者。
注意:
- 插件以 当前 DSH 进程权限 读写
NIGHTWRITE_ROOT或默认数据目录;安装前请阅读源码与 MIT 许可证,确认可接受数据落盘位置与 RPC 面。 - 依赖 Node >= 22.19.0 与 DSH desktop 的 web 客户端注入配置(
cordis.patch.yml);与宿主版本不兼容时以仓库engines与 CHANGELOG 为准。 - 社区目录显示星标为 0,不代表功能完整度;质量可参考仓库内 backend / smoke 等多套测试脚本,自行克隆仓库跑测需遵循 README,本文不展开 clone 步骤。
- 勿将 SkillHub 目录页表述为官方应用商店;DSH 生态理念是「一切皆插件」,第三方插件需自行审计。
结尾¶
dsh-nightwrite 把长篇小说写作收进 DSH 的一个插件包:八页导航、119 个 RPC、派单与验收护栏、分场景写作原则,以及 agent 工具 nightwrite_op 与 UI 同源。若你要在 Harness 里做「AI 主写、人来做导演」的闭环,可从 npm 安装后在 🌙 入口建第一本书,再沿今天 → 大纲 → 派单 → 验收走一轮。