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

桌面增强套件 z-time-007/DSH-desktop

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

把本地 DSH 变成带壁纸桌宠的桌面软件

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

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

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

状态速览

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

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/7) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 73 处,展示前 71 条)
  • 读取本地文件
    desktop/main.js:69
    if (fs.existsSync(path.join(root, 'scripts', 'Start-DeepSeek-HarnessBackground.ps1'))) return root
  • 读取本地文件
    desktop/main.js:72
    if (fs.existsSync(path.join(candidate, 'scripts', 'Start-DeepSeek-HarnessBackground.ps1'))) return candidate
  • 发起网络请求
    desktop/main.js:83
    const req = http.get(BACKEND_URL, { timeout: 2500 }, (res) => {
  • 执行外部命令固定命令
    desktop/main.js:105
    const ps = spawn('powershell.exe', [
  • 执行外部命令固定命令
    desktop/main.js:154
    const child = spawn('powershell.exe', [
  • 写入本地文件
    desktop/main.js:222
    fs.mkdirSync(path.dirname(windowStateFile()), { recursive: true })
  • 写入本地文件
    desktop/main.js:223
    fs.writeFileSync(windowStateFile(), JSON.stringify(state))
  • 读取本地文件
    desktop/main.js:232
    const state = JSON.parse(fs.readFileSync(windowStateFile(), 'utf8'))
  • 读取本地文件
    desktop/main.js:253
    settingsCache = JSON.parse(fs.readFileSync(settingsFile(), 'utf8'))
  • 写入本地文件
    desktop/main.js:265
    fs.mkdirSync(path.dirname(settingsFile()), { recursive: true })
  • 写入本地文件
    desktop/main.js:266
    fs.writeFileSync(settingsFile(), JSON.stringify(settingsCache, null, 2))
  • 读取本地文件
    desktop/main.js:546
    const state = JSON.parse(fs.readFileSync(petStateFile(), 'utf8'))
  • 写入本地文件
    desktop/main.js:560
    fs.mkdirSync(path.dirname(petStateFile()), { recursive: true })
  • 写入本地文件
    desktop/main.js:561
    fs.writeFileSync(petStateFile(), JSON.stringify({ x, y }))
  • 发起网络请求
    plugins/desktop-experience/lib/client.js:123
    const response = await fetch(url, { cache: "no-store", credentials: "same-origin", ...options });
  • 发起网络请求
    plugins/desktop-experience/lib/client.js:475
    const response = await fetch(`${BASE}/wallpaper/upload`, {
  • 读取本地文件
    plugins/dsh-desktop-app/build/Generate-DshAppIcons.mjs:33
    const svg = await readFile(source)
  • 写入本地文件
    plugins/dsh-desktop-app/build/Generate-DshAppIcons.mjs:65
    await mkdir(outputDir, { recursive: true })
  • 写入本地文件
    plugins/dsh-desktop-app/build/Generate-DshAppIcons.mjs:66
    await writeFile(path.join(outputDir, 'dsh-app-icon-192.png'), icon192)
  • 写入本地文件
    plugins/dsh-desktop-app/build/Generate-DshAppIcons.mjs:67
    await writeFile(path.join(outputDir, 'dsh-app-icon-512.png'), icon512)
  • 写入本地文件
    plugins/dsh-desktop-app/build/Generate-DshAppIcons.mjs:68
    await writeFile(path.join(outputDir, 'dsh-app-icon-maskable-512.png'), maskable)
  • 读取本地文件
    plugins/dsh-desktop-app/src/desktop.js:55
    return existsSync(candidate) ? candidate : null
  • 读取本地文件
    plugins/dsh-desktop-app/src/desktop.js:57
    return NATIVE_APP_CANDIDATES.find((candidate) => existsSync(candidate)) ?? null
  • 读取本地文件
    plugins/dsh-desktop-app/src/desktop.js:95
    if (!existsSync(join(root, 'scripts'))) {
  • 读取本地文件
    plugins/dsh-desktop-app/src/desktop.js:103
    if (existsSync(join(root, 'scripts'))) return root
  • 读取本地文件
    plugins/dsh-desktop-app/src/desktop.js:109
    const missing = DESKTOP_SCRIPTS.filter((name) => !existsSync(join(root, 'scripts', name)))
  • 读取本地文件
    plugins/dsh-desktop-app/src/pwa.js:108
    '192': await readFile(assetPath('dsh-app-icon-192.png')),
  • 读取本地文件
    plugins/dsh-desktop-app/src/pwa.js:109
    '512': await readFile(assetPath('dsh-app-icon-512.png')),
  • 读取本地文件
    plugins/dsh-desktop-app/src/pwa.js:110
    maskable: await readFile(assetPath('dsh-app-icon-maskable-512.png')),
  • 发起网络请求
    plugins/dsh-office-docs/lib/client.js:62
    const response = await fetch("/dsh-office-docs/upload", {
  • 写入本地文件
    plugins/dsh-office-docs/src/audit.js:27
    await appendFile(this.filePath, `${JSON.stringify(record)}\n`, { flag: 'a' })
  • 读取本地文件
    plugins/dsh-office-docs/src/core.js:95
    const buffer = await readFile(resolved.target)
  • 写入本地文件
    plugins/dsh-office-docs/src/core.js:110
    await writeFile(target, data, { flag: 'wx' })
  • 写入本地文件
    plugins/dsh-office-docs/src/core.js:240
    await writeFile(target, buffer, { flag: 'wx' })
  • 读取本地文件
    plugins/dsh-office-docs/src/security.js:76
    stats = await lstat(cursor)
  • 写入本地文件
    plugins/dsh-office-docs/src/security.js:90
    await mkdir(resolved.target, { recursive: true })
  • 写入本地文件
    plugins/dsh-office-docs/src/security.js:97
    await mkdir(normalized, { recursive: true })
  • 读取本地文件
    plugins/dsh-office-docs/src/security.js:98
    const stats = await lstat(normalized)
  • 读取本地文件
    plugins/dsh-office-docs/src/security.js:102
    const canonical = await realpath(normalized)
  • 读取本地文件
    plugins/dsh-token-pet/src/balance.js:27
    const text = await readFile(join(dshHome, '.credentials.yaml'), 'utf8')
  • 写入本地文件
    plugins/personal-assistant/src/audit.js:14
    await mkdir(path.dirname(this.path), { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/audit.js:25
    await appendFile(this.path, `${JSON.stringify(entry)}\n`, { encoding: 'utf8' })
  • 写入本地文件
    plugins/personal-assistant/src/document-writer.js:52
    await mkdir(outputDirectory.target, { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/document-writer.js:62
    await writeFile(target, data, { flag: 'wx' })
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:31
    await access(target)
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:49
    const targetStats = await stat(resolved.target)
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:51
    const entries = await readdir(resolved.target, { withFileTypes: true })
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:61
    const childStats = await stat(child)
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:89
    for (const entry of await readdir(current, { withFileTypes: true })) {
  • 读取本地文件
    plugins/personal-assistant/src/file-steward.js:104
    const fileStats = await stat(absolute)
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:131
    await mkdir(resolved.target, { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:143
    await mkdir(path.dirname(to.target), { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:155
    await mkdir(path.dirname(to.target), { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:156
    await rename(from.target, to.target)
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:171
    await mkdir(path.dirname(recycle.target), { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/file-steward.js:172
    await rename(source.target, recycle.target)
  • 读取本地文件
    plugins/personal-assistant/src/image-inbox.js:63
    const stats = await lstat(resolved.target)
  • 读取本地文件
    plugins/personal-assistant/src/image-inbox.js:69
    const input = await readFile(resolved.target)
  • 读取本地文件
    plugins/personal-assistant/src/office-validator.js:101
    const buffer = await readFile(filePath)
  • 写入本地文件
    plugins/personal-assistant/src/secretary.js:53
    await mkdir(resolved.target, { recursive: true })
  • 读取本地文件
    plugins/personal-assistant/src/secretary.js:67
    const parsed = JSON.parse(await readFile(target, 'utf8'))
  • 写入本地文件
    plugins/personal-assistant/src/secretary.js:79
    await writeFile(resolved.target, `${JSON.stringify(tasks, null, 2)}\n`, { encoding: 'utf8', flag: 'w' })
  • 写入本地文件
    plugins/personal-assistant/src/secretary.js:135
    await writeFile(target.target, content, { encoding: 'utf8', flag: 'wx' })
  • 读取本地文件
    plugins/personal-assistant/src/security.js:70
    stats = await lstat(cursor)
  • 读取本地文件
    plugins/personal-assistant/src/security.js:86
    const stats = await lstat(current)
  • 读取本地文件
    plugins/personal-assistant/src/security.js:91
    for (const entry of await readdir(current, { withFileTypes: true })) {
  • 写入本地文件
    plugins/personal-assistant/src/security.js:104
    await mkdir(resolved.target, { recursive: true })
  • 写入本地文件
    plugins/personal-assistant/src/security.js:111
    await mkdir(normalized, { recursive: true })
  • 读取本地文件
    plugins/personal-assistant/src/security.js:112
    const stats = await lstat(normalized)
  • 读取本地文件
    plugins/personal-assistant/src/security.js:116
    const canonical = await realpath(normalized)
  • 发起网络请求
    plugins/safe-auto-approval/lib/client.js:33
    fetch("/local-safe-auto-approval/status.json", { cache: "no-store", credentials: "same-origin" })
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • 壁纸与桌宠
  • 贴边隐藏
  • 界面透明度调节

DeepSeek Harness 桌面增强套件:壁纸 · 黑鲸鱼桌宠 · 贴边隐藏 · 界面透明度 · Office 文档 · 本地秘书,附原生 Electron 桌面应用。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness Desktop 增强套件 DeepSeek Harness 桌面增强套件封面 这是一套自用增强插件 + 原生桌面应用,为 DeepSeek Harness(本地安装的 DSH,回环端口 3080)打造,把 DSH 变成一个更像「桌面软件」的工作环境。 仓库只保留最终版本的源码,已清除所有个人路径、密钥、对话记录与账户余额信息。 本项目为个人学习 / 自用项目,与 DeepSeek 官方无关。 兼容性:适配 DeepSeek Harness 0.1.0-rc.6;壁纸功能需要 sharp 图像库(未安装时其余功能不受影响)。 目录结构 ├── plugins/ # 6 个 Cordis 插件 │ ├── desktop-experience/ # 壁纸、黑鲸鱼桌宠、贴边 dock、设置页与透明度滑块 │ ├── dsh-token-pet/ # DeepSeek 余额 + 会话 token 用量数据源 │ ├── dsh-office-docs/ # Office 文档安全读取(docx / pptx / xlsx) │ ├── personal-assistant/ # 本地秘书 + 文档生成工具 │ ├── safe-auto-approval/ # 工具调用的安全自动批准策略 │ └── dsh-desktop-app/ # 桌面
展开完整文档(README 剩余 1 节)
DeepSeek Harness Desktop 增强套件

DeepSeek Harness 桌面增强套件封面

这是一套自用增强插件 + 原生桌面应用,为 DeepSeek Harness(本地安装的 DSH,回环端口 3080)打造,把 DSH 变成一个更像「桌面软件」的工作环境。

仓库只保留最终版本的源码,已清除所有个人路径、密钥、对话记录与账户余额信息。

本项目为个人学习 / 自用项目,与 DeepSeek 官方无关。

兼容性:适配 DeepSeek Harness 0.1.0-rc.6;壁纸功能需要 sharp 图像库(未安装时其余功能不受影响)。

目录结构

├── plugins/ # 6 个 Cordis 插件 │ ├── desktop-experience/ # 壁纸、黑鲸鱼桌宠、贴边 dock、设置页与透明度滑块 │ ├── dsh-token-pet/ # DeepSeek 余额 + 会话 token 用量数据源 │ ├── dsh-office-docs/ # Office 文档安全读取(docx / pptx / xlsx) │ ├── personal-assistant/ # 本地秘书 + 文档生成工具 │ ├── safe-auto-approval/ # 工具调用的安全自动批准策略 │ └── dsh-desktop-app/ # 桌面应用入口 / PWA / 应用图标 ├── desktop/ # Electron 原生桌面应用(frameless、贴边隐藏、独立桌宠窗口、托盘) ├── tools/ # Restart-DshService.ps1(脱机重启后端) ├── LICENSE # MIT └── .gitignore

功能介绍

1. 桌面体验(desktop-experience,v0.1.26)

- 本地壁纸:支持 PNG / JPEG / WebP / GIF。图片经过安全扫描与转码(动态图转成 animated WebP,静态图同时生成封面),拒绝 SVG、网页、远程 URL 和视频。
- 壁纸美化:可调「模糊」「玻璃质感」「壁纸透明度」。
- 对话框 / 工作区不透明度:分别控制底部输入框(对话框)与左侧栏(工作区)的透明度。底色跟随系统主题(浅色主题为白色,深色主题为深灰),0 = 完全透明、100 = 完全不透明,中间值实时过渡。
- 顶栏快捷栏(dock):鼠标移到屏幕顶部自动显示、移开自动隐藏;提供侧边栏开关、详情开关、桌宠开关、壁纸开关。
- 黑鲸鱼桌宠:独立透明置顶窗口,可离开 DSH 在 Windows 桌面自由拖动;点击查看 DeepSeek 余额、token 用量与缓存命中率;右键菜单可刷新 / 复位 / 关闭。
- 设置页:在 DSH 设置里注入「桌面体验」「桌宠」「壁纸」三个标签页。

2. 余额与用量数据源(dsh-token-pet,v0.1.1)

- 读取 DeepSeek 官方 user/balance 接口,展示账户余额。
- 统计当前会话的 token 用量(输入 / 输出 / 缓存读 / 缓存写 / 命中率),按「最近活跃会话」选择当前会话。
- 提供 GET /dsh-token-pet/data.json 给桌宠或其他面板使用。

3. Office 文档读取(dsh-office-docs,v0.1.0)

- 安全读取 Word / PowerPoint / Excel:路径越界防护、文件类型与内容格式校验、只读解析。

4. 个人助理(personal-assistant,v0.1.2)

- 本地秘书:任务清单、便签、每日摘要、会议纪要(只写入本地工作区)。
- 文档生成:assistant_document_create_text/docx/pptx/xlsx 一键生成文档。
- 图片收件箱、本机状态读取等辅助能力。

固定工作区:助理的所有文件操作被限制在一个固定工作目录内。完整版 harness 由启动脚本通过 DSH_ASSISTANT_WORKSPACE 环境变量提供;官方 npm 版由 install.ps1 自动写入 ~\.dsh\profiles\web\cordis.patch.yml(默认工作区 ~\.dsh\workspace)。

5. 安全自动批准(safe-auto-approval,v0.1.1)

- 对只读类工具调用自动放行,涉及写操作的工具调用仍要求用户确认,减少打断。

6. 桌面应用入口(dsh-desktop-app,v0.1.0)

- 原生应用定位、PWA 支持、应用图标生成脚本。

7. 原生桌面应用(desktop/)

- 无边框现代窗口(自带标题栏与最小化 / 最大化 / 关闭)。
- 主窗口贴边自动隐藏(失去焦点后缩到屏幕边缘,鼠标靠近边缘唤回)。
- 独立黑鲸鱼桌宠窗口(透明、置顶、点击穿透、全桌面拖动)。
- 系统托盘(显示 / 隐藏、开机自启、自动隐藏开关、重新加载、退出)、单实例锁、窗口状态记忆。

安装说明

一键安装(推荐,全程无需 npm 账号)

准备(一次性):Windows 10/11、Node.js LTS、pnpm、git,以及 DeepSeek Harness(二选一):
- 完整版 harness(自带插件安全门禁),或
- 官方 npm 版:npm install -g @deepseek-ai/dsh

安装步骤:

1. 下载本仓库
git clone https://github.com/z-time-007/DSH-desktop.git
cd DSH-desktop

2. 一键安装 powershell -ExecutionPolicy Bypass -File install.ps1

脚本自动完成:检查环境 → 定位 DSH → 打包 6 个插件并安装(自动下载 sharp 等依赖)→ 构建桌面应用 → 重启后端 → 验证。

两种 DSH 都自动适配:
- 检测到完整版 harness(有 security\ 门禁)→ 走「打包 → 安全扫描 → 门禁安装」。
- 检测到官方 npm 版(无门禁)→ 走 dsh plugin add(自动安装依赖)。

常用参数:

.\install.ps1 -HarnessRoot "D:\path\to\deepseek-harness" # 手动指定 DSH 根目录 .\install.ps1 -Port 3090 # 换端口(默认 3080,端口被占用时用) .\install.ps1 -SkipDesktopApp # 跳过桌面应用构建 .\install.ps1 -SkipRestart # 安装后不自动重启后端

说明:dsh plugin add 安装依赖时会从 npm 仓库匿名下载(无需账号);只有「发布到 npm」才需要 npm 账号。

手动安装(完整版 harness,走安全门禁)

以 desktop-experience 为例:

1. 打包(拒绝任何生命周期脚本)
pnpm pack

2. 安全扫描(Defender + 静态模式分析 + 依赖审计,产出不可变报告) powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\deepseek-harness\security\Inspect-PluginPackage.ps1 -Package <生成的.tgz>

3. 复核报告后安装 powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\deepseek-harness\security\Install-PluginSafely.ps1 -Package <同一个.tgz> -ApprovedReport <报告.json> -Approve

4. 脱机重启后端 powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\dsh-plugins\tools\Restart-DshService.ps1

各插件目录下的 build\ 内也提供了打包脚本(如 Build-DshTokenPetPlugin.ps1、Build-DshOfficeDocsPlugin.ps1),直接运行即可完成「打包 + 扫描」两步。

构建桌面应用(desktop/)

powershell -NoProfile -ExecutionPolicy Bypass -File D:\path\to\dsh-plugins\desktop\build\Build-DshDesktopApp.ps1

构建产物为 desktop\dist\DeepSeekHarness\DeepSeekHarness.exe,并会在桌面创建快捷方式。

验证是否装好

1. 打开 http://127.0.0.1:3080。
2. 打开设置,能看到「桌面体验 / 桌宠 / 壁纸」三个标签 → 即安装成功。

操作步骤

1. 启动:双击桌面快捷方式(或运行 DeepSeekHarness.exe),应用会自动检查并启动本地 DSH 后端,就绪后进入主界面。
2. 打开设置:点击 DSH 界面里的设置入口,打开设置面板。
3. 更换壁纸:设置 → 壁纸 → 点击「从本地导入壁纸」选择图片,或把图片放入收件箱后点「安全扫描并更换」;用滑块调整「模糊 / 玻璃质感 / 透明度」。
4. 调整对话框 / 工作区不透明度:设置 → 壁纸 → 拖动「对话框不透明度」「工作区不透明度」滑块(0 = 完全透明,100 = 完全不透明,底色跟随系统主题)。
5. 桌宠:
- 打开:顶部 dock 点 🐋(按一下打开、再按一下关闭),或 设置 → 桌宠 → 「立即打开」。
- 拖动:按住鲸鱼拖动到桌面任意位置。
- 查看数据:点击鲸鱼,气泡显示余额、token 用量与缓存命中率。
- 关闭:右键鲸鱼 → 「关闭桌宠」。
6. 顶部快捷栏:鼠标移到屏幕顶部唤起 dock;「☰」切换侧边栏、「◫」切换详情栏、「▧」开关壁纸。
7. 托盘:右键托盘鲸鱼图标可显示 / 隐藏主窗口、开机自启、自动隐藏窗口、重新加载、退出。

社区与生态

本项目属于 DeepSeek Harness(DSH)社区生态的一部分,可关注以下资源发现更多插件、也让本项目被更多人看到:

- awesome-deepseek-harness —— DSH 生态精选列表(插件 / 技能 / MCP / UI / 工作流)
- awesome-dsh-plugin —— DSH 插件精选列表
- dsh-plugin-marketplace —— 社区插件市场
- WhaleHub 🐋 —— DSH 插件市场(发现、搜索、一键安装)
- 搜索话题:dsh · dsh-plugin · deepseek-harness

隐私说明

- 本仓库不含任何对话记录、账户余额、真实 API 密钥或机器特定的绝对路径。
- 源码中的绝对路径一律用 D:\path\to\deepseek-harness 与 D:\path\to\dsh-plugins 占位。
- 测试文件中的 sk-test、sk-abc123、sk-quoted 等均为假数据。

版权与商标

- 代码与文档:MIT(见 LICENSE)。
- dsh-black-whale.ico、dsh-app-icon-*.png 等鲸鱼 logo 为 DeepSeek 的商标 / 品牌资产,不在 MIT 授权范围内,仅用于项目内展示;请勿擅自用于商业用途或衍生品牌。

授权与使用声明

- 你可以自由地基于本项目:
- 制作视频教程、图文教程、演示与评测;
- 进行二次开发、修改、学习、fork 与再分发(遵守 MIT)。
- 但请遵守以下约定:
1. 注明来处:在使用或衍生作品中保留本项目名称与出处(如本仓库链接 / 作者信息)。
2. 鲸鱼 logo 除外:DeepSeek 鲸鱼品牌资产不受本项目 MIT 授权,请勿用于商业用途或衍生品牌。
3. 本项目与 DeepSeek 官方无关,请勿以官方名义发布。

感谢使用与传播!
预览分享卡片长什么样 ↓z-time-007/DSH-desktop
分享 · DeepSeek Harness Hub
z-time-007/DSH-desktop

把本地 DSH 变成带壁纸桌宠的桌面软件

这是你的仓库?认领条目

回到顶部