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

小说工坊 shuaixiangzi/dsh-mojian

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

在网页写作室立书设卡,按章生成并改稿

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 62 处,展示前 47 条)
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:10
    if (!existsSync(dir)) return ''
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:11
    const files = readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:17
    return [readFileSync(full, 'utf8')]
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:26
    const identity = existsSync(path.join(PROMPTS, '00-identity.md'))
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:27
    ? readFileSync(path.join(PROMPTS, '00-identity.md'), 'utf8')
  • 读取本地文件
    plugins/dsh-novel-studio/index.js:47
    if (!existsSync(NOVELS)) return []
  • 写入本地文件
    server/db.ts:28
    mkdirSync(DATA_DIR, { recursive: true })
  • 读取本地文件
    server/db.ts:236
    if (existsSync(SETTINGS_PATH)) {
  • 读取本地文件
    server/db.ts:238
    const raw = readFileSync(SETTINGS_PATH, 'utf8')
  • 读取本地文件
    server/db.ts:245
    if (!existsSync(NOVELS_DIR)) return
  • 读取本地文件
    server/db.ts:246
    for (const entry of readdirSync(NOVELS_DIR, { withFileTypes: true })) {
  • 读取本地文件
    server/db.ts:249
    if (!existsSync(file)) continue
  • 读取本地文件
    server/db.ts:259
    const novel = JSON.parse(readFileSync(file, 'utf8')) as Novel
  • 读取本地文件
    server/env.ts:7
    if (!existsSync(file)) return
  • 读取本地文件
    server/env.ts:8
    for (const raw of readFileSync(file, 'utf8').split(/ ? /)) {
  • 读取本地文件
    server/index.ts:60
    if (!existsSync(file) || !req.params.file.endsWith('.mp3')) {
  • 读取本地文件
    server/index.ts:344
    if (existsSync(WEB_DIR)) {
  • 读取本地文件
    server/prompts.ts:9
    for (const entry of readdirSync(dir, { withFileTypes: true })) {
  • 读取本地文件
    server/prompts.ts:31
    if (!existsSync(PROMPTS_DIR)) return []
  • 读取本地文件
    server/prompts.ts:34
    const parsed = matter(readFileSync(file, 'utf8'))
  • 读取本地文件
    server/prompts.ts:49
    const parsed = matter(readFileSync(abs, 'utf8'))
  • 写入本地文件
    server/prompts.ts:50
    writeFileSync(abs, matter.stringify(body.replace(/^ /, ''), parsed.data), 'utf8')
  • 写入本地文件
    server/store.ts:45
    mkdirSync(NOVELS_DIR, { recursive: true })
  • 写入本地文件
    server/store.ts:46
    mkdirSync(DATA_DIR, { recursive: true })
  • 读取密钥环境变量
    server/store.ts:64
    ...profileFromPreset(preset, process.env.DEEPSEEK_API_KEY ?? ''),
  • 读取密钥环境变量
    server/store.ts:71
    ...profileFromPreset(preset, process.env.MINIMAX_API_KEY ?? ''),
  • 读取密钥环境变量
    server/store.ts:76
    ...profileFromPreset(preset, process.env.KIMI_API_KEY ?? ''),
  • 读取本地文件
    server/store.ts:115
    const raw = readKv(getDb(), 'settings') ?? (existsSync(SETTINGS_PATH) ? readFileSync(SETTINGS_PATH, 'utf8') : '')
  • 读取本地文件
    server/store.ts:115
    const raw = readKv(getDb(), 'settings') ?? (existsSync(SETTINGS_PATH) ? readFileSync(SETTINGS_PATH, 'utf8') : '')
  • 写入本地文件
    server/store.ts:166
    writeFileSync(SETTINGS_PATH, serialized, 'utf8')
  • 写入本地文件
    server/store.ts:244
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    server/store.ts:245
    writeFileSync(path.join(dir, 'novel.json'), JSON.stringify(novel, null, 2), 'utf8')
  • 写入本地文件
    server/store.ts:246
    writeFileSync(path.join(dir, 'BIBLE.md'), renderBibleMarkdown(novel), 'utf8')
  • 读取本地文件
    server/store.ts:328
    if (existsSync(dir)) rmSync(dir, { recursive: true, force: true })
  • 删除本地文件递归
    server/store.ts:328
    if (existsSync(dir)) rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    server/tts.ts:58
    mkdirSync(TTS_DIR, { recursive: true })
  • 读取本地文件
    server/tts.ts:59
    if (!existsSync(abs)) {
  • 写入本地文件
    server/tts.ts:61
    writeFileSync(abs, audio)
  • 读取密钥环境变量
    server/tts.ts:76
    || process.env.MINIMAX_API_KEY
  • 读取密钥环境变量
    server/tts.ts:77
    const xai = process.env.XAI_API_KEY
  • 发起网络请求
    server/tts.ts:113
    const response = await fetch(minimaxTtsUrl(), {
  • 请求外部主机api.x.ai
    server/tts.ts:155
    const response = await fetch('https://api.x.ai/v1/tts', {
  • 发起网络请求
    server/tts.ts:155
    const response = await fetch('https://api.x.ai/v1/tts', {
  • 发起网络请求
    web/src/api.ts:14
    const res = await fetch(url, {
  • 发起网络请求
    web/src/api.ts:77
    const res = await fetch(url)
  • 发起网络请求
    web/src/api.ts:100
    const res = await fetch(`/api/novels/${id}/run`, {
  • 发起网络请求
    web/src/api.ts:112
    const res = await fetch(`/api/novels/${id}/events`)
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.x.ai

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 网页写作室
  • 立书设卡
  • 按章生成改稿

墨间 · DeepSeek Harness 小说工坊。网页写作室 + dsh-plugin。

README

由 DeepSeek 最新模型翻译生成
墨间 · 小说工坊 License: MIT dsh-plugin DeepSeek Harness 给作者用的写小说屋子。先立一本书,进房间后再选「细聊」或「直接生成」。短篇可通过聊天自动成稿,长篇先更新世界与人物设定,再生成大纲并按章推进。写作室只换界面主题(排版、材质、按钮),不改模型文风。 这是一个开源的 DeepSeek Harness 项目,GitHub topic 为 dsh-plugin。网页是给作者用的正门;仓库里的 plugins/dsh-novel-studio 是给 dsh 用的插件。 她怎么用 1. 打开网页,在右上角「模型」里给常用服务填一次钥匙。 2. 可直接选择 DeepSeek、MiniMax Coding Plan 或 Kimi Coding Plan,也可新增 OpenAI 兼容服务。 3. 在首页写书名或题眼,选短篇 / 长篇和主题房间,点「创建这本书」。 4. 进入房间后选「先细聊」或「直接生成」。 5. 「发送并写入」会更新设定并生成正文,「只讨论 / 先细聊」不会改稿。 6. 左边设定柜随时看题眼、世界、人物、大纲。正文可划词引用,按段落改稿。 不要让她碰提示词。提示词是给你维护的。 你怎么启动 需要 Node 20+。钥匙可以写在 .env,也可以只在网页里保存。
展开完整文档(README 剩余 1 节)
墨间 · 小说工坊

License: MIT
dsh-plugin
DeepSeek Harness

给作者用的写小说屋子。先立一本书,进房间后再选「细聊」或「直接生成」。短篇可通过聊天自动成稿,长篇先更新世界与人物设定,再生成大纲并按章推进。写作室只换界面主题(排版、材质、按钮),不改模型文风。

这是一个开源的 DeepSeek Harness 项目,GitHub topic 为 dsh-plugin。网页是给作者用的正门;仓库里的 plugins/dsh-novel-studio 是给 dsh 用的插件。

她怎么用

1. 打开网页,在右上角「模型」里给常用服务填一次钥匙。
2. 可直接选择 DeepSeek、MiniMax Coding Plan 或 Kimi Coding Plan,也可新增 OpenAI 兼容服务。
3. 在首页写书名或题眼,选短篇 / 长篇和主题房间,点「创建这本书」。
4. 进入房间后选「先细聊」或「直接生成」。
5. 「发送并写入」会更新设定并生成正文,「只讨论 / 先细聊」不会改稿。
6. 左边设定柜随时看题眼、世界、人物、大纲。正文可划词引用,按段落改稿。

不要让她碰提示词。提示词是给你维护的。

你怎么启动

需要 Node 20+。钥匙可以写在 .env,也可以只在网页里保存。

git clone https://github.com/shuaixiangzi/dsh-mojian.git
cd dsh-mojian
copy .env.example .env
npm install
npm run dev

浏览器打开 http://127.0.0.1:5176

网页内置以下免手输地址的服务预设:

- DeepSeek
- MiniMax Coding Plan
- Kimi Coding Plan

三家的 Key 互不通用。

接 DeepSeek Harness

先能跑起来:

npx @deepseek-ai/dsh web

然后把墨间当成 dsh-plugin 装上。工作区选这个仓库根目录。

从 GitHub 安装:

dsh plugin --profile web add github:shuaixiangzi/dsh-mojian

本地开发时:

dsh plugin --profile web add ./plugins/dsh-novel-studio

或临时挂上:

dsh web --patch ./plugins/dsh-novel-studio/cordis.patch.yml

插件会:

- 注入工坊人格(来自 prompts/)
- 提供 novel_list / novel_bible / novel_prompts
- 和网页版共用同一份稿件数据

技能在 skills/,AGENTS.md 会告诉 agent 先读提示词、再动稿。

提示词在哪

全部在 prompts/,改完立刻生效,不用重启也能在「提示词」页保存。

| 文件 | 管什么 |
| prompts/00-identity.md | 作者人格(启用) |
| prompts/modes/short.md | 短篇写法(启用) |
| prompts/modes/long.md | 长篇写法(启用) |
| prompts/stages/.md | 各步输出格式 |
| prompts/01-craft.md、prompts/skins/.md | 已停用,屋子只换界面 |

写作室只换界面主题,不会把真人写进小说。

数据在哪

真源是本地 SQLite:data/mojian.sqlite

- 书籍、章节、段落、设定柜、对话、钥匙都在库里
- data/novels// 里的 novel.json、BIBLE.md、章节 .md 是给人看的快照
- data/ 不会进 Git,钥匙和稿件留在你自己机器上

写作室(界面主题)

- 清新风 · 青芽来信
- 可爱风 · 奶油星球
- 中国风 · 千里青绿
- 中国风 · 长街灯市
- 中国风 · 烟雨留白
- 帅哥风 · 舞台侧光

开源

MIT License。欢迎提 issue 和 PR。

GitHub topics:dsh-plugin · deepseek-harness · dsh · cordis
预览分享卡片长什么样 ↓shuaixiangzi/dsh-mojian
分享 · DeepSeek Harness Hub
shuaixiangzi/dsh-mojian

在网页写作室立书设卡,按章生成并改稿

这是你的仓库?认领条目

回到顶部