dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness 的一页式小说创作工作台:开新章给方向、候选稿抽卡、剧情总结带索引、别称识别、情节体检、偏好档案按类型跨书继承
给 DeepSeek Harness 用的一页式小说创作工作台。
写长篇最难受的不是写不出来,是写着写着人物崩了、伏笔丢了、前文忘了。这个插件不替你写,它做的是把「写这一章需要知道的一切」整理好端到你面前。
旧做法:每次写新章,翻七八个文件——大纲、人物卡、前几章正文、伏笔清单——翻完上下文也乱了。
这个插件:点一下「开新章」,自动挑出这一章用得上的材料,拼成一份写作包:
近 10 章剧情总结 全文,一条不删
10 章之前 每章一句话
例外:本章要出场的配角在前面出现过 → 把那几章升级成全文
本章大纲 前后各 1 章给全字段
更远的大纲 只在提到相关人物时,带「目标 + 埋」
上一章正文 只取结尾 1400 字(接话用)
人物卡 名字(含别称)出现才读
每次都会告诉你读了什么、省了多少,不是黑盒。
两步都要做:先装包,再把它挂进 profile 的组合层。只做第一步,包装好了但界面里什么都没有。
dsh plugin --profile web add github:ShanJun-pro-max/dsh-novel-studio
--profile web 必须写在 add 前面。 新版 dsh 把 --profile 定为必填项,而且它属于 plugin 这一层——写成 dsh plugin add --profile web … 会报:
error: required option '--profile <name>' not specified
因为 add 之后的内容会原样转给 pnpm,dsh 自己没读到 --profile。
profile 名怎么选:用 dsh web 就是 web;用桌面版客户端就是 desktop。不确定就看 ~/.dsh/profiles/ 下有哪些目录。
node ./node_modules/dsh-novel-studio/install.mjs web
脚本只做一件事:把 dsh-novel-studio 写进 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles。手动做也行——在那个文件里找到:
"dsh": { "profile": { "bundles": [ "...", "这里加一行 dsh-novel-studio" ] } }
(这一步别省。dsh plugin add 只把包装进 node_modules,组合层是独立的另一份配置,插件自带的 cordis.patch.yml 靠它才会被应用。)
重启 dsh web,侧栏底部出现「📚 小说工坊」,点开看左侧导航最底部的版本号(最新是 v2.21.2)。
本地开发:
dsh plugin --profile web add file:/path/to/dsh-novel-studio
node /path/to/dsh-novel-studio/install.mjs web
# 1. 重新装一次,会拉最新代码
dsh plugin --profile web add github:ShanJun-pro-max/dsh-novel-studio
# 2. 重启 dsh web
开工作台看左下角版本号有没有变。(dsh.profile.bundles 里的那一行只需加一次,更新时不用再动。)
版本号没变? 说明命中了旧的依赖缓存。删掉再装:
# Windows
rmdir /s /q "%USERPROFILE%\.dsh\profiles\web\node_modules\dsh-novel-studio"
dsh plugin --profile web add github:ShanJun-pro-max/dsh-novel-studio
从源码装的(file: 方式)更新更简单:
cd /path/to/dsh-novel-studio
git pull
然后重启 dsh web。
插件按约定找文件。最小结构:
你的小说/
├─ 大纲.md ← 全书章节骨架
├─ 正文/
│ ├─ 第001章-标题.txt
│ └─ 第002章-标题.txt
└─ 剧情/
├─ 第1章 剧情总结.md
└─ 第2章 剧情总结.md
全部可选,缺什么插件会标红提醒你补。推荐再放:
├─ 设定/
│ ├─ 立项.md
│ ├─ 世界观.md
│ ├─ 人物设定.md
│ ├─ _口径.md ← 名字表、时间线、写作禁忌
│ └─ 道具与增益台账.md
└─ 人物/
├─ 陆铮.json
└─ 萧烬.json
侧栏 → 小说工坊 → ⚙️ 设置:
| 字段 | 说明 |
|---|---|
| 候选目录 | 抽卡候选稿落点,如 …/作品/.dsh-novel-studio/候选稿/第12章 |
| 作品根 | 留空则从候选目录向上自动探测 |
| 模型 | 留空用 dsh 当前默认模型 |
① 这一章写什么 → 编辑本章设定(目标 / 禁止发生 / 出场人物 / 要求)
② 方向 → 模型给 3–16 个写法方向,勾选要写的
③ 写候选 → 一次一篇,看得见进度,可随时停
④ 完成 → 去候选稿逐段标 👍/👎
写稿时不会跳页,状态不会丢。
---
chapter: 11
characters: [陆铮, 萧烬, 闫振军, 柯朗]
location: [城东老院子]
planted: [萧烬体质收不住, 闫振军单独留话]
paid: []
---
# 第11章 剧情总结
## 核心剧情点
- ...(正文照旧,怎么写都行)
头上 6 行给机器查,下面照旧给你写。 有了它才能查「李满在第几章退场」。
characters 用规则提取(扫正文里出现的已知角色名),不调模型——比模型准,而且免费。
小说里没人一直叫全名。插件会扫出「李哥」「萧先生」这类称呼,并且:
「萧总」出现 3 次
第4章 "小程。""萧总。""我给他那张卡" 附近:萧烬
第4章 "稍等。""萧总,没有记录。" 附近:萧烬
→ 推测:萧烬
✓ 建议选它 / ⚠ 说不准是谁采纳后写进角色卡 "别称": ["李哥"],索引、一致性检查、写作包选人三处都认。
| 检查 | 说明 |
|---|---|
| 张力曲线 | 按正文冲突信号估分,标出「中段塌陷」「全程平缓」 |
| 伏笔欠账 | 大纲里「埋 / 收」配对,找出该收没收的 |
| 一致性 | 总结漏记人、有卡没出场、总结缺索引头(纯规则,不花钱) |
写完一本兽人小说,建个类型「兽人校园」。下本同类型的书绑同一个类型,自动继承所有偏好规律。
类型库在 ~/.dsh/novel-studio-types/,跨书共用。删错能恢复。
| 内容 | 位置 |
|---|---|
| 章节正文 | <作品>/正文/ |
| 剧情总结 | <作品>/剧情/ |
| 人物卡 | <作品>/人物/*.json |
| 候选稿 | <作品>/.dsh-novel-studio/候选稿/第N章/ |
| 标注 | <作品>/.dsh-novel-studio/候选稿/第N章/.dsh-novel-studio/marks.json |
| 偏好档案 | <作品>/.dsh-novel-studio/作者偏好档案.md |
| 备份 | <作品>/.dsh-novel-studio/备份/ |
| 类型库 | ~/.dsh/novel-studio-types/ |
全部是普通文件,随时能用编辑器打开、能用 Git 管理、能手动改。
| 机制 | 说明 |
|---|---|
| 删除 | 一律先进回收站,可恢复;回收站里再「彻底删」才真删 |
| 覆盖 | 改正文 / 总结 / 设定文件前自动备份到 .dsh-novel-studio/备份/ |
| 未保存 | 改正文没保存就切页面 / 关窗口,会弹确认 |
| 路径 | 只能读写作品目录内的 .md / .txt / .json,越界拒绝 |
| 接口 | 只接受本机回环请求 |
入口没出现?
重启 dsh web。还不行就 Ctrl + F5 硬刷新(浏览器会缓存旧 bundle)。
装的时候报 error: required option '--profile <name>' not specified?
把 --profile web 挪到 add 前面:dsh plugin --profile web add github:…。
--profile 属于 plugin 这一层,写在 add 之后会被当成要转给 pnpm 的参数,dsh 自己读不到。
「这个 dsh 没挂 LLM 服务」? 开新章、生成总结、识别别称这些要调模型。在设置里指定模型,或确认 dsh 已有默认模型。
文件明明在,清单却标红?
点那个 ✗,右边有三个选项:手动新建 / 让模型去文件夹里找 / 知道了。
找到后归属关系会记在 .dsh-novel-studio/文件归属.json,以后就认了。
总结里的 HTML 注释是什么? `` 那对,是提炼规律时标记自动生成区块用的。别删。
# 语法检查
npm run check
# 装到本地 profile
dsh plugin --profile web add file:$(pwd)
结构:
lib/
├─ index.js 插件入口(注册唯一 RPC 端点 /novel-studio/api/)
├─ client.js 前端(宿主只加载这一个文件,不能拆)
├─ server/
│ ├─ api.js 74 个业务接口
│ ├─ context.js 路径约定、项目识别、配置读写
│ ├─ summary.js 总结提示词、头部解析、输出清洗
│ ├─ distill.js 提炼规律
│ └─ pack-assemble.js 写作包取材策略
└─ core/ 纯逻辑(读文件、合稿、分章、情节分析)
后端只有一个 HTTP 端点,前端用 { a: '动作名' } 分发。加功能只加一个方法。
改完代码必须重启 dsh web 才生效。
完整的功能说明、设计思路、数据存放位置、已知限制,见 功能总览.md。
每个版本改了什么,见 CHANGELOG.md。
MIT