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

长篇小说工作台 micellince/dsh-long-novel-workbench

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

长篇中文小说工作台DSH…

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 87 处,展示前 60 条)
  • 写入本地文件
    index.js:953
    await mkdirP(baseDir, { recursive: true })
  • 读取本地文件
    index.js:960
    try { statSync(dir) } catch { exists = false }
  • 写入本地文件
    index.js:962
    await mkdirP(dir, { recursive: true })
  • 读取本地文件
    index.js:1353
    if (!existsSync(target)) throw invalid(`路径不存在:${target}`)
  • 读取本地文件
    index.js:1406
    entries = readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    index.js:1442
    const stat = statSync(target)
  • 读取本地文件
    index.js:1444
    const baseDir = stat.isDirectory() && existsSync(chaptersDir) && statSync(chaptersDir).isDirectory() ? chaptersDir : target
  • 读取本地文件
    index.js:1444
    const baseDir = stat.isDirectory() && existsSync(chaptersDir) && statSync(chaptersDir).isDirectory() ? chaptersDir : target
  • 写入本地文件
    index.js:1649
    await mkdirP(manuscriptDir, { recursive: true })
  • 写入本地文件
    index.js:1663
    await writeFile(filePath, `${name}\n\n${parts.join('\n\n')}\n`, 'utf8')
  • 执行外部命令来自配置/变量
    index.js:2539
    const child = spawn(cmd, args, { detached: true, stdio: 'ignore' })
  • 发起网络请求
    client.js:286
    res = await fetch(apiBase(), {
  • 写入剪贴板
    client.js:416
    await navigator.clipboard.writeText(value)
  • 写入剪贴板
    client.js:886
    try { navigator.clipboard.writeText(text) } catch { }
  • 读取本地文件
    lib/store.js:84
    await stat(path)
  • 读取本地文件
    lib/store.js:128
    const raw = await readFile(path, 'utf8')
  • 写入本地文件
    lib/store.js:139
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    lib/store.js:141
    await writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/store.js:142
    await rename(tmp, path)
  • 写入本地文件
    lib/store.js:146
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    lib/store.js:148
    await writeFile(tmp, String(text ?? ''), 'utf8')
  • 写入本地文件
    lib/store.js:149
    await rename(tmp, path)
  • 读取本地文件
    lib/store.js:163
    const real = await realpath(wanted)
  • 读取本地文件
    lib/store.js:189
    const realDir = await realpath(dir)
  • 读取本地文件
    lib/store.js:194
    const realDir = await realpath(dir)
  • 读取本地文件
    lib/store.js:244
    const files = await readdir(join(dir, 'chapters'))
  • 删除本地文件
    lib/store.js:738
    for (const old of names.slice(0, Math.max(0, names.length - BACKUP_LIMIT))) await rm(join(sub, old), { force: true })
  • 删除本地文件
    lib/store.js:923
    await rm(plan.txt, { force: true })
  • 删除本地文件
    lib/store.js:927
    await rm(plan.md, { force: true })
  • 删除本地文件
    lib/store.js:931
    await rm(plan.metaPath, { force: true })
  • 删除本地文件
    lib/store.js:1211
    for (const old of extra) await rm(join(target, old), { force: true })
  • 读取本地文件
    lib/usage.js:91
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    lib/usage.js:101
    info = await stat(full)
  • 读取本地文件
    lib/usage.js:134
    files = (await readdir(sessionDir)).filter((name) => /^session\.v\d+\.jsonl\.zstd$/.test(name))
  • 读取本地文件
    lib/usage.js:142
    buf = await readFile(file)
  • 请求外部主机models.dev
    lib/usage.js:197
    const response = await fetch('https://models.dev/api.json', { signal: AbortSignal.timeout(8000) })
  • 发起网络请求
    lib/usage.js:197
    const response = await fetch('https://models.dev/api.json', { signal: AbortSignal.timeout(8000) })
  • 读取本地文件
    lib/bookdb.js:39
    return JSON.parse(await readFile(file, 'utf8'))
  • 写入本地文件
    lib/bookdb.js:46
    await mkdir(join(file, '..'), { recursive: true })
  • 写入本地文件
    lib/bookdb.js:48
    await writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/bookdb.js:49
    await rename(tmp, file)
  • 读取本地文件
    lib/bookdb.js:183
    const raw = await readFile(`${base}.${ext}`, 'utf8')
  • 读取本地文件
    lib/bookdb.js:204
    const raw = await readFile(join(dir, 'reviews.json'), 'utf8').catch(() => '[]')
  • 读取本地文件
    lib/bookdb.js:502
    try { files = (await readdir(chapterDir)).filter((file) => /^\d{4}\.txt$/.test(file)) } catch { files = [] }
  • 读取本地文件
    lib/bookdb.js:509
    try { text = await readFile(join(chapterDir, file), 'utf8') } catch { continue }
  • 读取本地文件
    lib/bookdb.js:510
    try { meta = JSON.parse(await readFile(join(chapterDir, file.replace(/ txt$/, '.meta.json')), 'utf8')) } catch { meta = {} }
  • 写入本地文件
    lib/review-doc.js:129
    await mkdir(manuscriptDir, { recursive: true })
  • 写入本地文件
    lib/review-doc.js:130
    await writeFile(filePath, content, 'utf8')
  • 发起网络请求
    lib/update.js:40
    const res = await fetch(url, { signal: controller.signal, headers: { accept: 'application/json' } })
  • 读取本地文件
    lib/update.js:126
    try { await stat(path); return true } catch { return false }
  • 请求外部主机registry.npmjs.org
    lib/update.js:150
    const metaRes = await fetch(`https://registry.npmjs.org/${PKG}/latest`, { headers: { accept: 'application/json' } })
  • 发起网络请求
    lib/update.js:150
    const metaRes = await fetch(`https://registry.npmjs.org/${PKG}/latest`, { headers: { accept: 'application/json' } })
  • 发起网络请求
    lib/update.js:160
    const res = await fetch(tarball)
  • 写入本地文件
    lib/update.js:174
    await mkdir(staging, { recursive: true })
  • 写入本地文件
    lib/update.js:178
    if (file.dir) { await mkdir(target, { recursive: true }); continue }
  • 写入本地文件
    lib/update.js:179
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    lib/update.js:180
    await writeFile(target, file.data)
  • 写入本地文件
    lib/update.js:183
    await rename(root, backup)
  • 写入本地文件
    lib/update.js:185
    await rename(staging, root)
  • 读取本地文件
    lib/update.js:208
    try { entries = await readdir(parent) } catch { entries = [] }
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:models.dev、registry.npmjs.org

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

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

长篇中文小说工作台:章节/时间线/事实账本/伏笔/冲突/人物/高光/审稿/提案/对齐/9 Agent 分工/名家风格预设,AI 可直接生成与审稿。

README

由 DeepSeek 最新模型翻译生成
GitHub 自动化配置 - workflows/ci.yml:每次 push / PR 跑语法检查,外加版本 / CHANGELOG / 发布说明一致性预检(不跑自动化测试)。 - workflows/publish.yml:推 v* tag 时校验 tag 与 package.json 版本一致,然后发布到 npm(凭据:仓库 secret NPM_TOKEN)。 - ISSUE_TEMPLATE/:Issue 模板;PULL_REQUEST_TEMPLATE.md:PR 模板。
预览分享卡片长什么样 ↓micellince/dsh-long-novel-workbench
分享 · DeepSeek Harness Hub
micellince/dsh-long-novel-workbench

长篇中文小说工作台DSH…

这是你的仓库?认领条目

回到顶部