🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

小说工作室 lingran7031/dsh-novel-studio

DeepSeek Harness
lingran70315 天前有提交已提供中文文档扫描:含敏感能力

四角色协作写小说,支持导入改写与版本回退

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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 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
预览分享卡片长什么样 ↓lingran7031/dsh-novel-studio
分享 · DeepSeek Harness Hub
lingran7031/dsh-novel-studio

四角色协作写小说,支持导入改写与版本回退

这是你的仓库?认领条目

回到顶部