四角色协作写小说,支持导入改写与版本回退
31.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lingran7031/dsh-novel-studio该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 51 处,展示前 44 条)
- 读取本地文件lib/host.js:105
const entries = await readdir(join(root, 'story/decisions'), { withFileTypes: true }) - 读取本地文件lib/host.js:447
const info = await stat(clientPath) - 读取本地文件lib/skills.js:36
entries = await readdir(SKILLS_DIR, { withFileTypes: true }) - 读取本地文件lib/skills.js:47
text = await readFile(file, 'utf8') - 读取本地文件lib/tools.js:320
const entries = await readdir(join(root, 'story/summaries'), { withFileTypes: true }) - 读取本地文件lib/tools.js:410
sourceText = await readFile(sourcePath, 'utf8') - 读取本地文件lib/tools.js:444
buffer = await readFile(absolute) - 读取本地文件lib/tools.js:481
const entries = await readdir(chunkDir, { withFileTypes: true }) - 删除本地文件lib/tools.js:484
if (!written.has(entry.name)) await rm(join(chunkDir, entry.name), { force: true }) - 发起网络请求lib/client.js:354
const response = await fetch(url, { headers: { accept: 'application/json' }, signal: controller.signal }) - 发起网络请求lib/client.js:858
const response = await fetch('/novel-studio/api/workflow', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ s - 写入剪贴板lib/client.js:894
try { await navigator.clipboard.writeText(value); if (alive.current) setNotice(t('copied')) } - 写入剪贴板lib/client.js:980
try { await navigator.clipboard.writeText(text); showNotice(t('copied')) } - 发起网络请求lib/client.js:989
const response = await fetch('/novel-studio/api/export', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ ses - 读取本地文件lib/core.js:54
const info = await stat(target) - 写入本地文件lib/core.js:68
await mkdir(target, { recursive: true }) - 写入本地文件lib/core.js:74
await writeFile(target, content, { encoding: 'utf8', flag: 'wx' }) - 写入本地文件lib/core.js:84
await writeFile(target, content, { encoding: 'utf8' }) - 读取本地文件lib/core.js:89
return await readFile(target, 'utf8') - 读取本地文件lib/core.js:101
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件lib/core.js:246
const entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件lib/core.js:371
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件lib/core.js:535
entries = await readdir(dir, { withFileTypes: true }) - 写入本地文件lib/core.js:895
await writeFile(target, buffer) - 读取本地文件lib/workbench.js:99
const actualRoot = await realpath(root) - 读取本地文件lib/workbench.js:100
const actualFile = await realpath(join(root, rel)) - 读取本地文件lib/workbench.js:107
const target = await realpath(root) - 读取本地文件lib/workbench.js:108
if (!(await stat(target)).isDirectory()) throw apiError(400, '小说项目根路径必须是目录') - 读取本地文件lib/workbench.js:135
const info = await stat(target) - 读取本地文件lib/workbench.js:139
return new TextDecoder('utf-8', { fatal: true }).decode(await readFile(target)) - 写入本地文件lib/revisions.js:27
if (create) await mkdir(target, { recursive: true }) - 读取本地文件lib/revisions.js:28
try { const actual = await realpath(target); if (!(await lstat(actual)).isDirectory()) fail(400, '项目根路径必须是目录'); return actual } - 读取本地文件lib/revisions.js:28
try { const actual = await realpath(target); if (!(await lstat(actual)).isDirectory()) fail(400, '项目根路径必须是目录'); return actual } - 读取本地文件lib/revisions.js:34
const boundary = await realpath(root) - 读取本地文件lib/revisions.js:35
if (!isInside(root, boundary) || !isInside(boundary, root) || (await lstat(root)).isSymbolicLink()) fail(403, '候选项目根目录不能是符号链接') - 读取本地文件lib/revisions.js:44
const info = await lstat(current) - 读取本地文件lib/revisions.js:47
const actual = await realpath(current) - 写入本地文件lib/revisions.js:51
if (parents && index < parts.length - 1) await mkdir(current) - 写入本地文件lib/revisions.js:75
try { await safe(root, rel); await rename(temp, target); break } - 删除本地文件lib/revisions.js:83
catch (error) { await unlink(temp).catch(() => {}); throw error } - 删除本地文件lib/revisions.js:86
async function removeFile(root, rel) { try { await unlink(await safe(root, rel)) } catch (error) { if (error.code !== 'ENOENT') throw error } } - 读取本地文件lib/rewrite-tools.js:38
const info = await stat(target) - 读取本地文件lib/rewrite-tools.js:40
const bytes = await readFile(target) - 读取本地文件lib/rewrite-runtime.js:139
const [actualRoot, actualCwd, actualHeader] = await Promise.all([realpath(resolve(root)), realpath(resolve(cwd)), headerCwd ? realpath(resolve(headerC
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 小说工作室:四角色协作写作、半成品导入、剧情改写与版本回退。
README
由 DeepSeek 最新模型翻译生成dsh-novel-studio · 小说工作室
DeepSeek Harness 写作模式:四个角色协作写小说,支持半成品导入、剧情改写与版本回退。
功能 · 截图 · 快速开始 · 文档 · 开发
这是什么
dsh-novel-studio 是一个本地 bundle,装进 DeepSeek Harness 就能用。它往配置档里注入一个 Agent 预设——小说工作室——把写小说拆成一条流水线:能落盘、能审阅、能回退:
- Lead(总编) 调度、验收、向你汇报;
- Architect(架构师) 管前提、世界观、人物与大纲;
- Writer(作者) 写章节计划与正文;
- Editor(编辑) 做一致性审阅与文字打磨;
- Arbiter(裁定者) 做语义裁定与路线判断。
所有产物都是普通文件:正文、章节摘要、人物卡、时间线、伏笔账本、审阅报告、裁定记录、导入批次、候选稿与版本快照。会话只是在文件之上协作,项目目录才是唯一事实来源。
功能
- 写作模式:新会话选择「小说工作室」,四名角色由 Agent Teams 拉起,共享工作目录与任务板。
- 右栏「写作台」:概览、章节目录与全文阅读、13 类资料库、导入改写入口;自动跟随当前会话的工作区。
展开完整文档(README 剩余 1 节)
dsh-novel-studio · 小说工作室
DeepSeek Harness 写作模式:四个角色协作写小说,支持半成品导入、剧情改写与版本回退。
功能 · 截图 · 快速开始 · 文档 · 开发
这是什么
dsh-novel-studio 是一个本地 bundle,装进 DeepSeek Harness 就能用。它往配置档里注入一个 Agent 预设——小说工作室——把写小说拆成一条流水线:能落盘、能审阅、能回退:
- Lead(总编) 调度、验收、向你汇报;
- Architect(架构师) 管前提、世界观、人物与大纲;
- Writer(作者) 写章节计划与正文;
- Editor(编辑) 做一致性审阅与文字打磨;
- Arbiter(裁定者) 做语义裁定与路线判断。
所有产物都是普通文件:正文、章节摘要、人物卡、时间线、伏笔账本、审阅报告、裁定记录、导入批次、候选稿与版本快照。会话只是在文件之上协作,项目目录才是唯一事实来源。
功能
- 写作模式:新会话选择「小说工作室」,四名角色由 Agent Teams 拉起,共享工作目录与任务板。
- 右栏「写作台」:概览、章节目录与全文阅读、13 类资料库、导入改写入口;自动跟随当前会话的工作区。
- 半成品导入 / 剧情改写(0.2.0):上传 TXT/Markdown,校对切章,按块分析,归档故事资料;需要改稿时生成改写方案,按章节顺序改写、审阅、对照,最后整批采用。
- 版本与回退:每次正式交付生成受管版本快照;可恢复旧版本,回退前的修改也会保留为版本。
- 资料即记忆:人物、世界规则、大纲、时间线、伏笔、关系、文风卡、摘要、裁定实时归档;novel_context 按章组装有界上下文包。
- 确定性工具:项目识别 / 导入切章 / 上下文包 / 资料体检 / 定稿与导出 / 导入改写,共 6 个 novel_ 工具;避免模型手写核心状态。
- 一键导出:整本 Markdown 或 DOCX(纯 Node 生成 OOXML,无外部依赖)。
- 可自检:Host 内置 /novel-studio/api/status,不建会话即可核对 preset、工具、技能与 Client 入口。
截图
右栏写作台:雾港夜航 · 7 章已定稿、12,581 字、5 条未回收伏笔;最近章节、资料库、下一章与导出入口。
多 Agent 协作:Lead 拉起「6 个子智能体」推进第 7 章,完成后给出章节简报与伏笔回收清单。
快速开始
1. 环境
- DeepSeek Harness Desktop 或 Web(需要 Agent Presets;团队协作依赖 Agent Teams);
- Node.js ≥ 20;
- 已在 DSH 中配置可用模型。
2. 安装
git clone https://github.com/lingran7031/dsh-novel-studio.git
然后在 DSH 里安装这个本地 bundle(二选一):
- 插件管理器:在 Creator 模式会话中让 Agent 调 plugin_manager 的 install_bundle,目标填克隆目录的绝对路径;
- 命令行:dsh plugin --profile <profile> add "file:<克隆目录绝对路径>"(不同 DSH 版本命令可能略有差异)。
安装后刷新页面。新建一个会话,在 Agent 预设里选择 小说工作室。
说明:本仓库是 private 的本地 bundle,尚未发布到 npm。安装采用本地目录 link,修改代码后需在插件管理器里「禁用 → 启用」或重启 DSH 生效。
3. 五分钟试用:打开「雾港夜航」
仓库自带一个已归档的演示项目:
samples/雾港夜航/
它现在有 7 章正文、12,581 字、10 个人物、7 条世界设定、6 条伏笔(5 条未回收)、2 份裁定记录,停在第 7 章末尾。
1. 新建「小说工作室」会话,工作区选择 samples/雾港夜航;
2. 输入:
继续写第 8 章。
3. 会话里会看到 Lead 读取状态、生成上下文、调用作者/编辑推进;右栏「写作台」会同步显示章节、资料与进度。
也可以从零开新书:
开一本都市悬疑:主角是法医,基调冷峻克制,目标 30 章。先给我前提、人物和 12 章大纲。
截图与文档
| 文档 | 内容 |
| 使用指南 | 安装、模式入口、新书 / 续写 / 改写、常用提示词、FAQ |
| 右栏写作台 | 面板标签、章节阅读、资料库、接口、刷新与安全边界 |
| 导入与剧情改写 | 0.2.0 上传 → 切章 → 分析 → 方案 → 顺序改写 → 采用/回退 |
| 架构设计 | bundle 组成、四个角色、工具 / 技能 / 路由、版本存储、数据流 |
| 数据格式 | 项目目录结构与各资料文件字段 |
| 开发指南 | 开发循环、测试、自检、常见故障、发布清单 |
| 验收记录 | 人工验收步骤与检查清单 |
| 验证记录 | 测试证据、演示项目数据、真实会话观察 |
| 变更记录 | 0.1.0 → 0.2.0 变更 |
协作模式
| 角色 | 职责 | 主要产物 |
| Lead 总编 | 调度、验收、定稿、对用户汇报 | chapters/NNN.md、meta/progress.json、摘要、简报 |
| Architect 架构师 | 前提、世界观、人物、卷/弧/章大纲;每章后归档资料 | premise.md、characters.json、world_rules.json、outline.json、timeline.jsonl、foreshadow_ledger.json |
| Writer 作者 | 章节计划 + 正文初稿 | story/plans/NNN.md → story/drafts/NNN.md |
| Editor 编辑 | 一致性审阅 + 文字打磨 | story/reviews/NNN.md、story/polished/NNN.md |
| Arbiter 裁定者 | 语义裁定、路线判断、裁定留档 | story/decisions/NNNN-.md、meta/compass.json |
角色宪章放在 skills/novel-role-,按需加载;Lead 的总编手册在 skills/novel-studio,单章循环在 skills/novel-chapter,导入与改写在 skills/novel-import / skills/novel-rewrite。
工作流
日常章节循环
flowchart LR
A[Leadnovel_context] --> B[Writer章节计划]
B --> C[Writer正文初稿]
C --> D[Editor一致性审阅 + 打磨]
D -->|有争议| E[Arbiter裁定并留档]
D -->|无争议| F[Lead 验收]
E --> F
F --> G[novel_chapter promote定稿 + 进度]
G --> H[Architect 归档资料]
H --> I[novel_validate 体检]
I --> J[简报 / 下一章]
默认自动推进;故事蓝图、卷末 / 大转折、影响主线的裁定、用户叫停时暂停。
半成品导入与剧情改写(0.2.0)
flowchart LR
U[右栏上传 TXT/MD] --> S[校对切章]
S --> A[分析原稿人物/规则/大纲/时间线/伏笔]
A --> M[采用为正式书稿]
A --> R[生成改写方案]
R --> W[按章节顺序改写 + 审阅]
W --> C[对照页确认]
C --> V[整批采用 / 版本回退]
右栏「写作台」
- 打开:会话页右上角「展开右栏」→ 右栏顶部 + → 指南卡片「写作台」。
- 概览:书名、项目目录、阶段、章节数 / 已定稿数、总字数、未回收伏笔、裁定数、最近章节、下一章快捷操作。
- 章节:按目录阅读全文,支持搜索、上/下一章、字号、复制正文。
- 资料库:13 类资料(前提、人物、世界规则、大纲、时间线、伏笔、关系、指南针、文风卡、摘要、审阅、裁定、续写方案),支持搜索与全文查看。
- 导入改写:0.2.0 的导入、分析、方案、改写与版本操作入口。
- 操作:复制「继续写第 N 章」指令;导出 Markdown / DOCX 到 export/。
接口与安全边界见 docs/PANEL.md。所有接口按当前会话 sessionId 解析项目目录,也支持显式 path=;章节 / 资料读接口只访问约定文件,单文件上限 8 MiB,并检查符号链接真实目标。
工具
只有「小说工作室」模式可见(作用域隔离)。
| 工具 | 用途 |
| novel_project | detect 识别项目 / init 建骨架 / status 进度与缺失资料 |
| novel_context | 按章组装有界上下文包(前提、大纲、最近摘要、上一章结尾、人物 / 规则 / 伏笔 / 裁定、文风卡) |
| novel_validate | 资料 JSON、字段、引用、时间线、章节连续性、进度与摘要覆盖体检 |
| novel_chapter | promote 定稿(覆盖保护 + .bak)/ summary / checkpoint / export md+docx |
| novel_import | 旧版导入:切章分块、清单、章节归位(story/import/) |
| novel_rewrite | 0.2.0 导入分析、改写方案、顺序改写、候选审阅、资料同步与最终验收 |
项目目录(最小视图)
<novel-root>/
premise.md
chapters/001.md …
outline.json / layered_outline.json
characters.json / world_rules.json / foreshadow_ledger.json / relationship_state.json
timeline.jsonl
meta/progress.json / meta/compass.json
story/
plans/ drafts/ reviews/ polished/ summaries/ decisions/
style.md state.json continuation-plan.md
imports/ rewrites/ versions/ # 0.2.0 导入、候选改写与版本快照 export/novel.md / novel.docx
完整字段与目录见 docs/DATA-FORMAT.md。
兼容性与已知限制
- 数据格式与 dsh-novel-workbench 的读取约定兼容(前提 / 人物 / 世界规则 / 大纲 / 时间线 / 伏笔 / 关系 / 进度)。
- 导入支持 .txt / .md,UTF-8 与 GB18030;单份原稿上限 16 MiB,资料单文件展示上限 8 MiB。扫描版 PDF / 图片小说需先转文本。
- 改写首版保持章节数量与顺序,不做自动增删、拆合或重排。
- 客户端 UI 更新后需要刷新页面;preset / 服务端代码更新通常需要「禁用 → 启用 bundle」或重启 DSH。
- Agent Teams 依赖 DSH 的 experimental Team 包;缺少时写作仍可进行,但团队协作能力会降级。
开发
语法检查全部服务端模块 Get-ChildItem lib -Filter .js | ForEach-Object { node --check $_.FullName }
冒烟测试 + 端到端验收(60 项)
node test/smoke.mjs
node test/acceptance.mjs
自检路由(端口以当前 GUI 启动日志为准):
curl.exe http://127.0.0.1:<port>/novel-studio/api/status
返回 preset 花名册与子插件 fiberState、模式内工具 / 技能、提示词装配结果、Client 入口等。详见 docs/DEVELOPMENT.md。
文档
- 使用指南
- 右栏写作台
- 导入与剧情改写
- 架构设计
- 数据格式
- 开发指南
- 验收记录
- 验证记录
- 变更记录
License
MIT © 2026 lingran7031预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lingran7031/dsh-novel-studio
四角色协作写小说,支持导入改写与版本回退
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目