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

墨扉写作台 SDRTIO-bit/dsh-mofei

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

在对话侧栏管理小说章节与设定,让 Agent 协作润色审稿

27.1/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SDRTIO-bit/dsh-mofei
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 74 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 173 处,展示前 75 条)
  • 发起网络请求
    plugin/lib/client.js:3100
    return fetch("/api/mofei", {
  • 发起网络请求
    plugin/lib/client.js:3135
    return fetch("/api/" + method, {
  • 发起网络请求
    plugin/lib/client.js:5570
    fetch("/api/mofei/stream/ai-assist", {
  • 写入剪贴板
    plugin/lib/client.js:6124
    if (typeof navigator !== "undefined" && navigator.clipboard && typeof navigator.clipboard.writeText === "function") return navigator.clipboard.writeTe
  • 发起网络请求
    plugin/lib/client.js:6206
    fetch("/api/mofei/stream/ai-summarize", {
  • 读取本地文件
    plugin/lib/index.js:326
    const entries = await readdir(projectRootDir)
  • 读取本地文件
    plugin/lib/index.js:415
    try { names = await readdir(customSkillDir()) } catch (error) { return out }
  • 读取本地文件
    plugin/lib/index.js:419
    const parsed = parseFrontmatter(await readFile(path.join(customSkillDir(), name), 'utf8'))
  • 读取本地文件
    plugin/lib/index.js:443
    try { if (await readFile(target, 'utf8') === content) return } catch (error) { }
  • 写入本地文件
    plugin/lib/index.js:444
    await mkdir(path.dirname(target), { recursive: true })
  • 写入本地文件
    plugin/lib/index.js:445
    await writeFile(target, content, 'utf8')
  • 读取本地文件
    plugin/lib/index.js:482
    const parsed = JSON.parse(await readFile(path.join(base, mirrorManifestName), 'utf8'))
  • 删除本地文件
    plugin/lib/index.js:494
    try { await rm(path.join(base, safeRelative), { force: true }) } catch (error) { }
  • 读取本地文件
    plugin/lib/index.js:504
    try { await stat(source) } catch (error) { return }
  • 写入本地文件
    plugin/lib/index.js:507
    await mkdir(path.dirname(target), { recursive: true })
  • 写入本地文件
    plugin/lib/index.js:508
    await rename(source, target)
  • 写入本地文件
    plugin/lib/index.js:511
    try { await copyFile(source, target); await rm(source, { force: true }) } catch (error2) { }
  • 删除本地文件
    plugin/lib/index.js:511
    try { await copyFile(source, target); await rm(source, { force: true }) } catch (error2) { }
  • 删除本地文件递归
    plugin/lib/index.js:555
    try { await rm(base, { recursive: true, force: true }) } catch (error) { console.error('墨扉 mirror delete failed', error) }
  • 删除本地文件
    plugin/lib/index.js:561
    try { await rm(path.join(base, mirrorManifestName), { force: true }) } catch (error) { }
  • 删除本地文件
    plugin/lib/index.js:562
    try { await rm(path.join(base, 'project.yml'), { force: true }) } catch (error) { }
  • 写入本地文件
    plugin/lib/index.js:628
    await mkdir(styleDir, { recursive: true })
  • 执行外部命令固定命令
    plugin/lib/index.js:1415
    execFile('git', args, { cwd: gitCwd || cwd, timeout: 10000 }, (error, stdout, stderr) => {
  • 删除本地文件
    plugin/lib/index.js:1455
    try { await rm(messageFile, { force: true }) } catch (error) { }
  • 写入本地文件
    plugin/lib/local-retrieval.js:34
    const dir = path.join(os.tmpdir(), 'mofei-retrieval-' + Math.random().toString(36).slice(2)); await mkdir(dir, { recursive: true })
  • 读取本地文件
    plugin/lib/local-retrieval.js:36
    try { await writeFile(input, JSON.stringify(payload), 'utf8'); await execFileAsync(config.pythonPath, ['-c', script, input, output], { timeout: timeou
  • 写入本地文件
    plugin/lib/local-retrieval.js:36
    try { await writeFile(input, JSON.stringify(payload), 'utf8'); await execFileAsync(config.pythonPath, ['-c', script, input, output], { timeout: timeou
  • 删除本地文件递归
    plugin/lib/local-retrieval.js:37
    finally { await rm(dir, { recursive: true, force: true }) }
  • 读取本地文件
    plugin/lib/local-retrieval.js:77
    try { await readFile(path.join(config.rerankModelPath, 'config.json'), 'utf8'); status.rerankCachePresent = true; const values = await rerankTexts('本地
  • 读取本地文件
    test-host.mjs:13
    async stat(target) { return files.has(target) ? { size: files.get(target).length } : undefined },
  • 读取本地文件
    test-host.mjs:547
    async stat(target) { return legacyFiles.has(target) ? { size: legacyFiles.get(target).length } : undefined },
  • 读取本地文件
    test-host.mjs:893
    async stat(target) { try { const info = await stat(target); return { size: info.size } } catch (error) { return undefined } },
  • 读取本地文件
    test-host.mjs:894
    async readText(target) { return readFile(target, 'utf8') },
  • 写入本地文件
    test-host.mjs:895
    async writeText(target, content) { await writeFile(target, content, 'utf8') },
  • 读取本地文件
    test-host.mjs:930
    const projectsJson = JSON.parse(await readFile(path.join(workspaceRoot, '.mofei-projects.json'), 'utf8'))
  • 读取本地文件
    test-host.mjs:939
    const characterLines = (await readFile(path.join(base, 'characters', character.id + '.history.jsonl'), 'utf8')).split('\n').filter(Boolean)
  • 删除本地文件递归
    test-host.mjs:973
    await rm(workspaceRoot, { recursive: true, force: true })
  • 写入本地文件
    test-host.mjs:1207
    async writeText(target, content) { writeCounts.set(target, (writeCounts.get(target) || 0) + 1); await writeFile(target, content, 'utf8') },
  • 写入本地文件
    test-host.mjs:1222
    await mkdir(path.join(workspaceRoot, 'summaries', 'chapters'), { recursive: true })
  • 写入本地文件
    test-host.mjs:1223
    await mkdir(path.join(workspaceRoot, 'chains'), { recursive: true })
  • 写入本地文件
    test-host.mjs:1224
    await writeFile(path.join(workspaceRoot, 'project.yml'), '---\nid: "discover-project"\ntitle: "发现项目"\ndescription: ""\ngoal: 0\ncurrentStyle: "default
  • 写入本地文件
    test-host.mjs:1225
    await writeFile(path.join(workspaceRoot, 'summaries', 'chapters', 'chapter-1.md'), '---\nchapterId: "chapter-1"\nupdatedAt: 1700000000000\nchapterRevi
  • 删除本地文件递归
    test-host.mjs:1241
    await rm(workspaceRoot, { recursive: true, force: true })
  • 删除本地文件递归
    test-host.mjs:1342
    await rm(workspaceRoot, { recursive: true, force: true })
  • 删除本地文件递归
    test-host.mjs:1427
    await rm(workspaceRoot, { recursive: true, force: true })
  • 删除本地文件递归
    test-host.mjs:1503
    await rm(workspaceRoot, { recursive: true, force: true })
  • 删除本地文件递归
    test-host.mjs:1565
    await rm(workspaceRoot, { recursive: true, force: true })
  • 读取本地文件
    test-mofei-writer-preset.mjs:5
    const preset = await readFile(new URL('./presets/mofei-writer/agent.cordis.yml', import.meta.url), 'utf8')
  • 写入本地文件
    vendor-tools/dsh-browser/lib/index.js:199
    mkdirSync(dir, { recursive: true });
  • 读取密钥环境变量
    verify-shots/vision-look.cjs:7
    const KEY = process.env.VISION_KEY || '1'
  • 读取本地文件
    verify-shots/vision-look.cjs:11
    const resolveArg = (a) => (fs.existsSync(a) ? a : path.resolve(__dirname, '..', a))
  • 读取本地文件
    verify-shots/vision-look.cjs:13
    const files = args.filter((a) => fs.existsSync(a) || fs.existsSync(path.resolve(__dirname, '..', a))).map(resolveArg)
  • 读取本地文件
    verify-shots/vision-look.cjs:15
    const custom = args.find((a) => !fs.existsSync(a))
  • 读取本地文件
    verify-shots/vision-look.cjs:21
    const b64 = fs.readFileSync(file).toString('base64')
  • 发起网络请求
    verify-shots/vision-look.cjs:33
    const r = await fetch(BASE + '/chat/completions', {
  • 读取本地文件
    verify-v0.14-isolation.cjs:15
    const preset = fs.readFileSync(WRITER_PRESET, 'utf8')
  • 发起网络请求
    verify-v0.14-isolation.cjs:28
    const r = await fetch('/api/' + method, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ type: 'client-reques
  • 发起网络请求
    verify-v0.14-isolation.cjs:34
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 发起网络请求
    verify-v0.14-t5.cjs:14
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 发起网络请求
    verify-v0.14-workbench.cjs:14
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 发起网络请求
    verify-v0.14-writing.cjs:21
    const r = await fetch('/api/' + method, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ type: 'client-reques
  • 发起网络请求
    verify-v0.15-project-sessions.cjs:20
    const response = await fetch(url, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) })
  • 发起网络请求
    verify-v0.15-sync.cjs:19
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 读取本地文件
    verify-v0.15-sync.cjs:80
    const raw = fs.readFileSync(filePath, 'utf8')
  • 写入本地文件
    verify-v0.15-sync.cjs:82
    fs.writeFileSync(filePath, bumped, 'utf8')
  • 发起网络请求
    verify-v0.16-subagent.cjs:13
    const r = await fetch('/api/' + method, {
  • 发起网络请求
    verify-v0.17-skills-sessions.cjs:21
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 读取本地文件
    verify-v0.17-skills-sessions.cjs:47
    if (fs.existsSync(settingsFile) && fs.readFileSync(settingsFile, 'utf8').includes('mofei-deslop-writing')) ok('设置已落盘 .mofei-skill-settings.json')
  • 读取本地文件
    verify-v0.17-skills-sessions.cjs:60
    if (fs.existsSync(customFile) && fs.readFileSync(customFile, 'utf8').includes('name: ' + CUSTOM_SKILL)) ok('~/.dsh/skills/' + CUSTOM_SKILL + '.md 落盘(s
  • 发起网络请求
    verify-v0.18-onboard.cjs:19
    const r = await fetch('/api/mofei', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ method, args: args || {}
  • 写入本地文件
    verify-v0.18-onboard.cjs:37
    fs.mkdirSync(TMP, { recursive: true })
  • 读取本地文件
    verify-v0.18-onboard.cjs:51
    if (fs.existsSync(chapterFile) && fs.readFileSync(chapterFile, 'utf8').includes('山间有雾')) ok('章节正文落盘到小说文件夹: ' + chapterFile)
  • 读取本地文件
    verify-v0.18-onboard.cjs:54
    const workspaceHasEntities = fs.existsSync(path.join(workspaceMirror, 'chapters'))
  • 读取本地文件
    verify-v0.18-onboard.cjs:71
    if (fs.existsSync(TMP)) ok('delete-project 不删除小说文件夹(用户数据安全)')
  • 删除本地文件
    verify-v0.18-onboard.cjs:73
    fs.rmSync(TMP, { recursive: true, force: true })
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 管理小说章节与设定
  • Agent协作润色
  • Reviewer审稿把关

墨扉 —— 基于 DeepSeek Harness (DSH) 的 AI 小说写作工作台,Cordis 插件实现「人写草稿 → Agent 润色 → Reviewer 把关」写作流水线。

README

由 DeepSeek 最新模型翻译生成
墨扉(Mofei)DSH 墨扉是运行在 DeepSeek Harness(DSH)中的小说写作工作台插件。它把项目、卷章、角色、世界书、笔记、摘要和提示词链放在同一套写作数据模型里,并将 mofei-writer 写作会话与 DSH 原生工作区连接起来。 当前固定插件版本:dsh-mofei v0.24.0(以 plugin/package.json 为准)。 能做什么 - 项目与章节:章节编辑、自动保存、修订号冲突保护、卷章排序和全文检索。 - 写作设定:角色、笔记、世界书、摘要、写作技能和项目级提示词链。 - 文件优先:项目根目录中的 project.yml、chapters/、styles/ 等 Markdown 资产可直接被 Git 管理。 - DSH 工作区联动:新项目默认使用当前 DSH 会话的 cwd,也可以在初始向导中选择专用小说文件夹。 - Agent 协作:mofei-writer 会话使用同一工作区,可通过 mofei_ 工具读写章节和设定;子代理角色 = 四个内置角色(Writer/Reviewer/Analyzer/Polisher)+ 项目覆盖/自建,由 subagent_with_model 按角色装配 persona 与模型。
展开完整文档(README 剩余 1 节)
墨扉(Mofei)DSH

墨扉是运行在 DeepSeek Harness(DSH)中的小说写作工作台插件。它把项目、卷章、角色、世界书、笔记、摘要和提示词链放在同一套写作数据模型里,并将 mofei-writer 写作会话与 DSH 原生工作区连接起来。

当前固定插件版本:dsh-mofei v0.24.0(以 plugin/package.json 为准)。

能做什么

- 项目与章节:章节编辑、自动保存、修订号冲突保护、卷章排序和全文检索。
- 写作设定:角色、笔记、世界书、摘要、写作技能和项目级提示词链。
- 文件优先:项目根目录中的 project.yml、chapters/、styles/ 等 Markdown 资产可直接被 Git 管理。
- DSH 工作区联动:新项目默认使用当前 DSH 会话的 cwd,也可以在初始向导中选择专用小说文件夹。
- Agent 协作:mofei-writer 会话使用同一工作区,可通过 mofei_ 工具读写章节和设定;子代理角色 = 四个内置角色(Writer/Reviewer/Analyzer/Polisher)+ 项目覆盖/自建,由 subagent_with_model 按角色装配 persona 与模型。
- 快捷操作:顶栏三点打开可搜索的写作操作面板;支持关闭按钮、再次点击、Escape 和点击外部收起,不暴露内部命令名。
- 原生界面共存:墨扉工作台从左侧展开,官方 DSH 对话和 Composer 保留在右侧;官方会话侧栏展开时,工作台会自动收紧,不遮挡输入区。

使用场景

- 长篇小说日更/连载:分卷管理章节,修订号冲突保护保证 Agent 与手动编辑不互相覆盖,全文检索快速定位设定词,区间摘要维持长文记忆。
- 人设与世界观管理:角色、笔记、世界书(world entries)全部文件优先存为 Markdown,可直接进 Git 做版本管理,写作时通过 mofei_ 工具或工作台即时查阅。
- Agent 协作写作流水线:mofei-writer 会话内可用 subagent 拉起 Writer/Reviewer/Analyzer/Polisher 四个内置角色,实现「写草稿 → 审稿 → 修订」闭环;子代理通过 mofei_read-chapter / mofei_update-chapter(带 expectedRevision)读写章节。
- RAG 辅助检索:内置 RAG 索引支持跨章节语义检索,长书设定检索不用翻正文。
- 多项目隔离:每个项目独立目录(project.yml + chapters/ + characters/ 等),项目之间数据互不干扰,可同时管理多本书。

安装

墨扉需要已安装、且已配置可用模型的 DSH(≥0.1.0-rc.6)。子代理使用 DSH 随附的 minimal preset;不依赖本机私有的 minimal-v3 或其他作者自定义 preset。

以下以 Windows PowerShell 为例。下载仓库后,在仓库根目录执行:

将插件加入独立的 novel profile(推荐独立 profile,避免污染 coding 环境)。
$pluginPath = (Resolve-Path .\plugin).Path
dsh plugin --profile novel add $pluginPath

首次安装写作 preset。已有同名 preset 时先备份或使用下方的更新命令。
New-Item -ItemType Directory -Force "$env:USERPROFILE\.dsh\.agent-presets" | Out-Null
Copy-Item .\presets\mofei-writer "$env:USERPROFILE\.dsh\.agent-presets\mofei-writer" -Recurse

插件自带 dsh.bundle 声明(plugin/package.json + plugin/cordis.patch.yml),
dsh plugin add 后 DSH 会自动将 dsh-mofei 挂载到 profile 层栈,无需手写
cordis.patch.yml 的 insert 行;mofei 一行已由插件 bundle 自动提供。

更新仓库后的 preset 时,确认没有本地自定义后再执行:

Copy-Item .\presets\mofei-writer "$env:USERPROFILE\.dsh\.agent-presets\mofei-writer" -Recurse -Force

安装后重启 DSH。mofei-writer 是主会话 preset;Writer、Reviewer 等子代理由墨扉创建为 DSH 内置 minimal preset,再在各自会话内注入墨扉工具和角色规则,因此不会继承或污染主会话。

配置要求

| 依赖 | 说明 |
| Node.js | ≥ 20(DSH 0.1.0-rc.6 运行于 Node 24 验证) |
| DSH | ≥ 0.1.0-rc.6,已配置可用模型(llm-deepseek 或 llm-pi-ai 任一路由) |
| DEEPSEEK_API_KEY | 使用 DeepSeek 官方路由(含 web 搜索)时需要;其他路由按 DSH 配置提供凭据 |
| pnpm | dsh plugin 依赖 pnpm 管理 profile 依赖 |
| 端口 3088 | 墨扉写作入口约定端口(dsh --profile novel --port 3088) |

可选行为参数(写在 profile 或 bundle 的 config: 中,不配则用内置默认):

默认值示例 config: historyCap: 20 # 章节历史快照上限 entityHistoryMax: 50 # 角色/笔记/世界书条目快照上限 gitCommitIntervalMs: 10000 # git 自动提交节流(毫秒) rag: chunkSize: 800 chunkOverlap: 100 candidateLimit: 40 resultLimit: 5 confidenceThreshold: 0.005

快速开始

在 Windows PowerShell 中启动写作环境:

cd
dsh --profile novel --port 3088

3088 是本项目约定的墨扉写作入口,不是 DSH 的全局默认端口。请始终以
dsh --profile novel --port 3088 启动墨扉,不要写中间的 web 子命令
(dsh --profile novel web ... 是错误写法)。

打开 http://127.0.0.1:3088/,点击 DSH 侧栏底部的「墨扉」进入工作台。新建项目时,默认保存到当前 DSH 工作区;项目栏右侧的「同步」按钮可立即扫描工作区中的墨扉项目。

工作台顶栏的「⋯」是快捷操作入口,可搜索新建章节、摘要、写作风格、版本历史和 Writer/Reviewer 等动作;打开后点击右上角「×」、再次点击「⋯」、按 Escape 或点击面板外部即可关闭。

普通 dsh web 未指定端口时会使用 DSH 的 3080 默认端口。该地址是干净的标准 DSH/browser 测试环境,不是墨扉入口,也不应加载 dsh-mofei 写作插件;需要写作时请访问 http://127.0.0.1:3088/。

工作区文件

当项目绑定到 DSH 工作区时,推荐的目录结构如下:

/
project.yml
chapters/.md
characters/.md
notes/.md
world/.md
styles/.md

没有选择工作区时,插件会继续使用兼容缓存 .mofei-.json 和默认的 .mofei/projects/ 存储。运行时缓存、日志和浏览器截图不会进入 Git;稳定的验证脚本仍保存在 verify-shots/。

数据与 Git:.mofei/ 文件树(章节/角色/世界书等小说数据)默认随本仓库 Git 版本化——插件每次保存会自动 git add .mofei 并提交(墨扉 项目保存),这是刻意的版本管理设计(v0.10.1 文件优先)。如果你希望小说数据与代码分仓,请把项目 rootDir 指向独立 Git 仓库,或调整 .gitignore 并停用自动提交。

项目结构

plugin/
package.json 插件元数据、DSH bundle/client 声明和构建脚本 cordis.patch.yml 插件 bundle patch(dsh.bundle 自动挂载入口) lib/index.js Host 半体:webServer RPC、SSE、文件同步和持久化 lib/client.js 生成的 Client bundle(由 src/client/ 构建) lib/tools.js 73 个 mofei_* 工具注册(消费 ctx.get('mofei') 服务;详见 docs/TOOL-REFERENCE.md) lib/subagent-max.js subagent_with_model 子代理工具(角色/模型/推理强度)
lib/{ai,summary,prompt-chain,roles,instructions,rag,local-retrieval,txt,world}.js
业务子模块 src/client/.js 工作台、项目网格、编辑器、摘要、技能库等组件源码 web/index.html 墨扉独立站入口(/mofei) tools/ Client 契约和辅助验证 tests/verify-p0-lifecycle.mjs Host 生命周期回归(mock ctx) docs/ARCHITECTURE.md 架构说明(Host/Client 两半体与装配) docs/ACCEPTANCE-2026-08.md 整体验收报告 AGENTS.md Agent 协作约定(mofei_ 工具与写作流水线) v0.26-changelog.md 最新变更说明

开发与验收

修改 Client 源码后重建 bundle:

node plugin\esbuild.config.js
node tools\verify-client-bundle.mjs

提交前建议运行:

node --check plugin\src\client\legacy.js
node --check plugin\lib\index.js
node test-host.mjs
node verify-v0.18-onboard.cjs

当前回归覆盖 Host RPC、文件优先同步、工作区发现、官方会话树、Composer 与墨扉面板边界、500px 窄屏工作台和客户端 bundle 契约。

文档导航

- v0.26 变更说明
- 架构说明
- 开发文档(构建/运行/测试/常见修改路径)
- Agent 工具参考(mofei_* 工具全表 + 错误码)
- 整体验收报告
- Agent 协作约定
- dsh-novel-tavern fork 调研(小说存储/酒馆格式对照)
- dsh-novel-tavern 参考手册(逐条借鉴清单与优先级)
- 历史交接与规划文档已归档至 docs/archive/

许可与来源

本项目插件代码使用 Apache-2.0。墨扉参考 OpenFic 的写作平台思路与技能体系,但在 DSH 中作为独立插件运行;标准 DSH 会话不加载墨扉工具、技能或工作区数据。
预览分享卡片长什么样 ↓SDRTIO-bit/dsh-mofei
分享 · DeepSeek Harness Hub
SDRTIO-bit/dsh-mofei

在对话侧栏管理小说章节与设定,让 Agent 协作润色审稿

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部