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

插件增强套件 zzyyyds88/dsh-solo-leveling

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

为原版加装看板、桌宠、皮肤与手机适配

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

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

自动兼容检查未通过:仓库根目录无 package.json,浅层子目录有 8 份 dsh 插件清单(plugins/git-graph-host/package.json、plugins/git-graph-ui/package.json、plugins/mobile-adapt/package.json 等),无法唯一定位安装名。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zzyyyds88/dsh-solo-leveling
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/11/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库根目录无 package.json,浅层子目录有 8 份 dsh 插件清单(plugins/git-graph-host/package.json、plugins/git-graph-ui/package.json、plugins/mobile-adapt/package.json 等),无法唯一定位安装名

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-solo-leveling(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:20:30

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

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

读写/删除本地文件
查看扫描证据(共 37 处,展示前 21 条)
  • 读取本地文件
    plugins/git-graph-host/src/index.ts:33
    canonical = await realpath(path)
  • 读取本地文件
    plugins/skin-center/src/routes.ts:183
    const rootStat = statSync(SKINS_DIR, { throwIfNoEntry: false })
  • 读取本地文件
    plugins/skin-center/src/routes.ts:184
    const carrierStat = statSync(joinPath(SKINS_DIR, 'dsh-skins', 'skins'), { throwIfNoEntry: false })
  • 读取本地文件
    plugins/skin-center/src/routes.ts:191
    meta = JSON.parse(readFileSync(joinPath(dir, 'skin.json'), 'utf8')) as { id?: unknown }
  • 读取本地文件
    plugins/skin-center/src/routes.ts:237
    if (!statSync(bundle, { throwIfNoEntry: false })) {
  • 读取本地文件
    plugins/skin-center/src/routes.ts:242
    res.end(readFileSync(bundle, 'utf8'))
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:40
    for (const entry of readdirSync(scoped)) {
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:124
    const meta: unknown = JSON.parse(readFileSync(joinPath(absDir, 'skin.json'), 'utf8'))
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:159
    entries = readdirSync(skinsDir)
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:167
    const isDir = (p: string): boolean => statSync(p, { throwIfNoEntry: false })?.isDirectory() === true
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:180
    if (lstatSync(candidate, { throwIfNoEntry: false })?.isSymbolicLink() === true) continue
  • 读取本地文件
    plugins/skin-center/src/skin-switch.ts:182
    if (statSync(joinPath(candidate, 'skin.json'), { throwIfNoEntry: false })) out.push(candidate)
  • 写入本地文件
    plugins/skin-center/src/skin-switch.ts:806
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    plugins/skin-center/src/skin-switch.ts:819
    writeFileSync(tmp, next, { flag: 'wx' })
  • 写入本地文件
    plugins/skin-center/src/skin-switch.ts:820
    chmodSync(tmp, previousMode ?? 0o600)
  • 写入本地文件
    plugins/skin-center/src/skin-switch.ts:821
    renameSync(tmp, filePath)
  • 删除本地文件递归
    plugins/skin-center/src/skin-switch.ts:824
    rmSync(tmpDir, { recursive: true, force: true })
  • 删除本地文件递归
    plugins/skin-center/src/skin-switch.ts:831
    rmSync(tmpDir, { recursive: true, force: true })
  • 删除本地文件
    plugins/skin-center/src/skin-switch.ts:881
    if (process.platform === 'win32' && stat.isDirectory()) rmdirSync(target)
  • 删除本地文件
    plugins/skin-center/src/skin-switch.ts:882
    else unlinkSync(target)
  • 写入本地文件
    plugins/skin-center/src/skin-switch.ts:897
    mkdirSync(dirname(target), { recursive: true })
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • 访问门禁与HTTPS反代
  • 手机端适配
  • 桌宠与皮肤

README

由 DeepSeek 最新模型翻译生成
DSH 纯插件集(Solo Leveling Plugins) 官方 DeepSeek Harness 的插件集 —— 不再 fork,不改任何官方源码。 基线:官方 npm 包 @deepseek-ai/dsh@0.1.5-rc.2。 形态变更(2026-09):本仓库曾是「大宝贝定制版」——把 harness 源码平铺仓库根、自维护基线的 fork 整合包。 该形态已废弃,现改为纯插件集。原因与迁移过程见 docs/工作区/纯插件迁移方案.md。 这是什么 一套跑在官方原版 DSH 上的插件。官方宣称「一切皆插件」,实测也确认:当年为了访问门禁、设置命名空间暴露、LLM 重试兜底而不得不改官方包的那批需求,官方 0.1.5 已自己实现或换成了别的方式,剩下的差异化能力全都能以插件形态做出来。 所以本仓库现在只做一件事:给官方 DSH 加插件,让它更好用。
展开完整文档(README 剩余 1 节)
DSH 纯插件集(Solo Leveling Plugins)

官方 DeepSeek Harness 的插件集 —— 不再 fork,不改任何官方源码。
基线:官方 npm 包 @deepseek-ai/dsh@0.1.5-rc.2。

形态变更(2026-09):本仓库曾是「大宝贝定制版」——把 harness 源码平铺仓库根、自维护基线的 fork 整合包。
该形态已废弃,现改为纯插件集。原因与迁移过程见 docs/工作区/纯插件迁移方案.md。

这是什么

一套跑在官方原版 DSH 上的插件。官方宣称「一切皆插件」,实测也确认:当年为了访问门禁、设置命名空间暴露、LLM 重试兜底而不得不改官方包的那批需求,官方 0.1.5 已自己实现或换成了别的方式,剩下的差异化能力全都能以插件形态做出来。

所以本仓库现在只做一件事:给官方 DSH 加插件,让它更好用。

插件清单

| 插件 | 半 | 作用 |
| dsh-plugin-git-graph-host + -ui | host + client | Git 图谱:分支选择器、提交历史、分支泳道;host 侧 /git/ 路由做工作区圈根校验 |
| dsh-plugin-task-board-host + -ui | host + client | 任务看板:五列看板;台账与 cron 调度在 host 进程(关掉网页照跑),数据落 $DSH_HOME/task-board/ledger.json;/api/task-board/ 供看板与外部复用 |
| dsh-plugin-mobile-adapt | host + client | 手机端适配:窄屏下侧栏/右侧栏变抽屉、虚拟键盘避让、输入区 16px 防 iOS 缩放、设置弹层触控优化;断点与抽屉宽度进设置卡 |
| dsh-plugin-pet | host + client | 网页桌宠:随任务/工具/上下文切换表情的 Live2D 女仆,状态气泡、音效语音、账房 token 统计 |
| dsh-plugin-skin-center | host + client | 皮肤中心:列表 / 试穿 / 一键应用(host /api/skin-center/* 热切换);skin-background 背景命名空间 |
| dsh-plugin-skin-maid-atelier | host + client | 皮肤资产:Abyssal Maid Atelier(深渊女仆工坊),侧栏立绘、蕾丝装饰、标题栏品牌字 |

所有插件共用一个约定:可调参数一律进「设置 → 插件 → 插件配置」卡片,保存即生效,不硬编码。

安装与运行

1. 装官方 DSH

npm i -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs \
@deepseek-ai/dsh@0.1.5-rc.2

--allow-scripts 不能省:npm 11 默认拦截 native 依赖的安装脚本,不补跑会缺文件系统与终端能力(koffi / node-pty 的原生绑定不会编译)。

2. 装插件

dsh plugin --profile web add /path/to/dsh-plugin--0.1.0.tgz

装完会自动追加进 $DSH_HOME/profiles/web/package.json 的 dsh.profile.bundles 层栈,无需手动改任何配置。

3. 起实例

dsh web

启动行会打印带 token 的 URL(并带一个 LAN 地址,见下)。

作为 systemd 常驻服务

[Unit]
Description=DeepSeek Harness Web
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
Environment=HOME=/root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/usr/bin/dsh web --no-open
Restart=always
RestartSec=3
KillMode=control-group

[Install]
WantedBy=multi-user.target

Environment=HOME= 必须显式给——systemd 不保证为 root 注入 HOME,缺了会解析不到 $DSH_HOME。
取启动 token:journalctl -u dsh-web | grep 'dsh web:' | tail -1。

局域网访问

官方 CLI 故意拒绝 --host 0.0.0.0(避免误敲一个 flag 就把 RCE 暴露到网络),但 host 配置字段本身支持它——官方 README 也明确描述了这个部署形态。写 $DSH_HOME/cordis.patch.yml:

- id: webserver
config:
host: '0.0.0.0'
port: 3080

注意 config 是整段替换,必须重述 port。生效后启动行会自动带上 LAN 地址,且该地址自动进 trustedHosts,不需要 --trusted-host。

已知限制(官方设计如此,非本仓库缺陷)

| 限制 | 说明 |
| 局域网页面改不了设置 | 官方 ui-settings 明确限制:非 loopback 页面拿不到可写 settings("every row it backs is inert even though Connection authentication covers the API")。要在界面上配置,走 SSH 端口转发 ssh -N -L 3080:127.0.0.1:3080 后开 http://127.0.0.1:3080/ |
| 无 TLS | 官方 webserver 不带 TLS,token/Cookie 在局域网明文传输 |
| token 每次启动都换 | 但会话 Cookie 是持久的(默认 30 天、跨重启有效)。用一次 token 换到 Cookie 后,直接访问 http://:3080/ 即可 |
| 没有登出/吊销接口 | 官方无 logout/revoke/rotate。想踢设备只能删 $DSH_HOME/.credentials.yaml 里的签名密钥(全体失效) |
| Cookie 按 authority 绑定 | 127.0.0.1 与局域网 IP 的 Cookie 不通用,固定用一个地址 |

完整痛点清单见 docs/工作区/纯插件形态-痛点清单.md。

目录结构

plugins/ 8 个插件包源码(构建前提见 plugins/README.md) docs/工作区/ 工作区文档:迁移方案 / 退役审查 / 痛点清单

本仓库不含 harness 源码(旧 fork 形态的遗留已清理)。
构建插件需要一份外部的 harness 源码检出——官方未发布客户端打包 preset,仓外插件必须自行复现那套 lazy-CJS factory 产物;步骤见 plugins/README.md。

相关文档

| 文档 | 内容 |
| 纯插件迁移方案 | 处置决策、迁移配方、rc.2→0.1.5 完整 API 映射表、逐项验收证据 |
| 插件退役审查 | 逐个插件的退役判据、官方能力对照表、0.1.5 DOM 钩子清单 |
| 纯插件形态-痛点清单 | 使用痛点、已放弃的能力、等官方正式版后的动作 |

已退役的能力(不要再问「为什么没有 X」)

| 退役项 | 原因 |
| 访问门禁 + TLS | 改用官方 token 门禁;官方无 TLS,一并放弃 |
| live-stats 实时统计 | 官方 ui-chat 的 StatsPills 已覆盖(TPS/TTFT/token/缓存命中) |
| describe-image 图像理解 | 官方 DeepSeek 提供方现在只有多模态模型(deepseek-flash 等),原生识图;且官方对文本模型传图是硬拒绝 |
| defaults 默认值 | 零消费方(其消费方在退役的 fork 里),是空壳 |
| aionui-panel 右侧面板 | 文件树/预览被官方右侧栏四件套全覆盖 |
| mobile-remote 手机遥控 | 手机端操纵整体移出范围,只做 web 端 |

许可

MIT。收录的皮肤资产(Abyssal Maid Atelier)遵循 CC BY-NC-SA 4.0。
预览分享卡片长什么样 ↓zzyyyds88/dsh-solo-leveling
分享 · DeepSeek Harness Hub
zzyyyds88/dsh-solo-leveling

为原版加装看板、桌宠、皮肤与手机适配

这是你的仓库?认领条目

回到顶部