把本地 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 78 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/7) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 官方无关,请勿以官方名义发布。 感谢使用与传播!
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
z-time-007/DSH-desktop
把本地 DSH 变成带壁纸桌宠的桌面软件
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2
这是你的仓库?认领条目