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

皮肤宇宙 springbrand-lab/dsh-skin-universe

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

为 Web 界面换装五套主题并扩展任务看板与远程连接

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add springbrand-lab/dsh-skin-universe
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/24 14:52:08

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

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

读写/删除本地文件
查看扫描证据(共 51 处,展示前 45 条)
  • 读取本地文件
    packages/dsh-git-graph/src/index.ts:33
    canonical = await realpath(path)
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:28
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    packages/dsh-pet/src/persist.test.ts:35
    writeFileSync(join(dir, 'pet.json'), '{ not json', 'utf8')
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:38
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    packages/dsh-pet/src/persist.test.ts:45
    writeFileSync(join(dir, 'pet.json'), JSON.stringify({ name: '鲸鱼娘' }), 'utf8')
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:48
    rmSync(dir, { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:64
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    packages/dsh-pet/src/persist.test.ts:71
    writeFileSync(join(dir, 'pet.json'), JSON.stringify({
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:91
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    packages/dsh-pet/src/persist.test.ts:98
    writeFileSync(join(dir, 'pet.json'), JSON.stringify({
  • 删除本地文件递归
    packages/dsh-pet/src/persist.test.ts:103
    rmSync(dir, { recursive: true, force: true })
  • 读取本地文件
    packages/dsh-pet/src/persist.ts:81
    const raw = readFileSync(join(dir, 'pet.json'), 'utf8')
  • 写入本地文件
    packages/dsh-pet/src/persist.ts:123
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    packages/dsh-pet/src/persist.ts:126
    writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf8')
  • 写入本地文件
    packages/dsh-pet/src/persist.ts:127
    renameSync(tmp, target)
  • 读取本地文件
    packages/dsh-pet/src/routes.ts:163
    return readFile(join(packageRoot, 'assets', 'whale', file.name)).then((body) => {
  • 读取本地文件
    packages/dsh-pet/src/routes.ts:190
    return readFile(join(packageRoot, 'assets', 'theme-companions', name)).then((body) => {
  • 读取本地文件
    packages/dsh-remote-web-ui/src/mobile-routes.ts:62
    if (!existsSync(path)) {
  • 读取本地文件
    packages/dsh-remote-web-ui/src/mobile-routes.ts:67
    const body = await readFile(path, 'utf8')
  • 读取本地文件
    packages/dsh-remote-web-ui/src/tunnel.ts:55
    if (existsSync(bin)) return
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:97
    if (keyPath === undefined || !existsSync(keyPath)) {
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:100
    config.privateKey = readFileSync(keyPath, 'utf8')
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:152
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:154
    const stat = statSync(full)
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:492
    if (!existsSync(local)) throw new Error(`local path not found: '${localPath}'`)
  • 读取本地文件
    packages/dsh-ssh/src/engine.ts:495
    const stat = statSync(local)
  • 写入本地文件
    packages/dsh-ssh/src/engine.ts:529
    if (!existsSync(dirname(local))) mkdirSync(dirname(local), { recursive: true })
  • 写入本地文件
    packages/dsh-ssh/src/routes.ts:115
    mkdirSync(staging, { recursive: true })
  • 写入本地文件
    packages/dsh-ssh/src/routes.ts:368
    const sink = createWriteStream(tmp)
  • 删除本地文件
    packages/dsh-ssh/src/routes.ts:377
    void unlink(tmp).catch(() => undefined)
  • 删除本地文件
    packages/dsh-ssh/src/routes.ts:400
    await unlink(tmp).catch(() => undefined)
  • 读取本地文件
    packages/dsh-ssh/src/routes.ts:429
    const source = createReadStream(tmp)
  • 删除本地文件
    packages/dsh-ssh/src/routes.ts:444
    await unlink(tmp).catch(() => undefined)
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:103
    keyReady = existsSync(expandHome(entry.auth.keyPath))
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:237
    if (!existsSync(configPath)) return { parsed: 0, added: 0, skipped: 0, skippedNames: [] }
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:238
    const lines = readFileSync(configPath, 'utf8').split(/ ? /)
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:310
    if (!existsSync(this.path)) return { version: FORMAT_VERSION, hosts: [] }
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:312
    const parsed = JSON.parse(readFileSync(this.path, 'utf8')) as StoreFile
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:322
    renameSync(this.path, `${this.path}.corrupt-${Date.now()}`)
  • 读取本地文件
    packages/dsh-ssh/src/store.ts:330
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:330
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:334
    writeFileSync(tmp, JSON.stringify(file, null, 2) + '\n', { encoding: 'utf8', mode: 0o600 })
  • 写入本地文件
    packages/dsh-ssh/src/store.ts:335
    renameSync(tmp, this.path)
  • 读取本地文件
    shared/tsdown.client.ts:277
    const source = await readFile(fileId)
  • 读取本地文件
    shared/tsdown.client.ts:326
    if (existsSync(emitted)) return emitted
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

界面预览

6 张 · 点击查看大图

功能亮点

  • 五款可安装主题
  • 任务看板
  • SSH远程连接

DeepSeek Harness 的主题与 Web GUI 插件:任务看板、Git 图、文件面板、SSH、移动端远程、伴侣、实时统计,外加五款可安装主题。

README

由 DeepSeek 最新模型翻译生成
DSH 皮肤宇宙 DSH 皮肤宇宙 初恋时刻主题 面向 DeepSeek Harness Web 的完整功能扩展与主题合集。保留任务看板、Git 图谱、右侧文件/变更面板、SSH、移动端远程、主题联动桌宠、实时令牌统计和统一设置中心,并只提供五套定制主题。 这是一个由 SpringBrand 开源的项目。更多 DeepSeek Harness 相关内容见 SpringBrand DeepSeek Harness。 四套 IP 主题均标注为“非官方同人主题”,与相关权利方不存在隶属、授权、赞助或背书关系。完整声明见 THIRD_PARTY_NOTICES.md。 五套主题 初恋时刻(First Love) 三张成年女性电影感肖像自动淡入轮换,搭配雨后自然光、清透玻璃面板和专属初恋伙伴。浅色面板经过专门减薄,背景人物和环境保持清晰,同时保留输入区可读性。 初恋时刻 蛛网都市(Spider Verse) 非官方同人主题。 城市高空、红蓝英雄配色和蛛网纹理构成漫画电影氛围。 蛛网都市 宝可梦黄昏(Pokemon Sunset) 非官方同人主题。 金色原野、旅途夕阳和伙伴剪影构成温暖冒险氛围。 宝可梦黄昏 木叶忍界(Naruto Konoha) 非官方同人主题。 木叶街道、火影岩和橙黑忍者配色构成热血界面。
展开完整文档(README 剩余 1 节)
DSH 皮肤宇宙

DSH 皮肤宇宙 初恋时刻主题

面向 DeepSeek Harness Web 的完整功能扩展与主题合集。保留任务看板、Git 图谱、右侧文件/变更面板、SSH、移动端远程、主题联动桌宠、实时令牌统计和统一设置中心,并只提供五套定制主题。

这是一个由 SpringBrand 开源的项目。更多 DeepSeek Harness 相关内容见 SpringBrand DeepSeek Harness。

四套 IP 主题均标注为“非官方同人主题”,与相关权利方不存在隶属、授权、赞助或背书关系。完整声明见 THIRD_PARTY_NOTICES.md。

五套主题

初恋时刻(First Love)

三张成年女性电影感肖像自动淡入轮换,搭配雨后自然光、清透玻璃面板和专属初恋伙伴。浅色面板经过专门减薄,背景人物和环境保持清晰,同时保留输入区可读性。

初恋时刻

蛛网都市(Spider Verse)

非官方同人主题。 城市高空、红蓝英雄配色和蛛网纹理构成漫画电影氛围。

蛛网都市

宝可梦黄昏(Pokemon Sunset)

非官方同人主题。 金色原野、旅途夕阳和伙伴剪影构成温暖冒险氛围。

宝可梦黄昏

木叶忍界(Naruto Konoha)

非官方同人主题。 木叶街道、火影岩和橙黑忍者配色构成热血界面。

木叶忍界

鬼灭藤夜(Demon Slayer Night)

非官方同人主题。 藤花月夜、羽织纹样和深靛夜景构成沉浸式夜间界面。

鬼灭藤夜

完整功能

皮肤中心

设置中心内仅展示上述五套主题。支持亮/暗预览、即时试穿、退出还原、一键应用和背景遮挡调节。

仅含五套主题的皮肤中心

任务看板

五列状态覆盖待规划、待办、进行中、已完成和已失败;任务可交给真实 DSH 会话执行,也支持 cron 定时执行。

任务看板

SSH 远程连接

支持密钥/密码认证、导入 ~/.ssh/config、Web 终端、SFTP、端口转发、集群执行和 Agent 直连。

SSH 远程连接

移动端远程

扫码或复制链接后,可在移动端查看与新建会话、收发消息、切换模型、调整思考强度和权限。局域网与公网隧道模式均保留。

| 桌面配对 | 移动端布局 |
| 移动端配对 | 移动端布局 |

Git 图谱、右侧面板与实时状态

保留分支/提交图谱、文件预览、源码/预览切换、SCM stage/unstage/discard、面板宽度持久化、桌面宠物与实时 token/TPS/缓存统计。

右侧文件与变更面板

安装

DSH 插件安装到 profile;dsh web 使用 web profile。

从 npm 安装(推荐)

包已发布,装的是预构建产物,不需要克隆、不需要本地构建,也不会遇到下面那条 allowBuilds 提示:

dsh plugin --profile web add @linxin666/dsh-web-ui-all
dsh web

只要皮肤,不要功能插件:

dsh plugin --profile web add @linxin666/dsh-skins

从源码安装

需要 Node.js >= 22 与 pnpm。改代码或跑本仓库脚本时用这条路径。

1. 克隆仓库
git clone https://github.com/springbrand-lab/dsh-skin-universe.git
cd dsh-skin-universe

2. 安装依赖并构建
pnpm install
pnpm -r build

3. 链接全部功能包并注册聚合插件
node scripts/link-profile.mjs
dsh plugin --profile web add link:$(pwd)/packages/dsh-web-ui-all

4. 启动
dsh web

只安装皮肤聚合包:

node scripts/link-profile.mjs
dsh plugin --profile web add link:$(pwd)/packages/dsh-skins

命令行切换主题:

node scripts/dsh-skin list
node scripts/dsh-skin use first-love
node scripts/dsh-skin use spider-verse
node scripts/dsh-skin use pokemon-sunset
node scripts/dsh-skin use naruto-konoha
node scripts/dsh-skin use demon-slayer-night
node scripts/dsh-skin use official

若首次安装提示 ERR_PNPM_IGNORED_BUILDS,按提示把 cloudflared、cpu-features、ssh2 加入 profile 的 pnpm-workspace.yaml allowBuilds 后重试。

验证与卸载安装后重启 dsh web,侧边栏应出现“任务看板”和“SSH”,设置页的 Skin Center 应显示 5。也可执行 dsh --profile web --dump-config 检查挂载配置。

dsh plugin --profile web remove @linxin666/dsh-web-ui-all

技术细节见 docs/plugins.md。

来源与版权

| 包 | 来源 | 版权 |
| 功能插件与原始框架 | zhu1090093659/dsh-web-ui | BSD-3-Clause,保留上游版权声明 |
| 五套主题 | SpringBrand Skin Lab | BSD-3-Clause(主题代码);IP 主题为非官方同人作品 |

from springbrand deepseek harness plugin
法律声明与第三方归属见 LICENSE 和 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓springbrand-lab/dsh-skin-universe
分享 · DeepSeek Harness Hub
springbrand-lab/dsh-skin-universe

为 Web 界面换装五套主题并扩展任务看板与远程连接

这是你的仓库?认领条目

回到顶部