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

macOS 桌面壳 zbin8523/dsh-whale

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

把网页版界面封装成 Dock 可启动的独立应用

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 66 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 37 处,展示前 29 条)
  • 写入本地文件
    Electron/main.cjs:97
    fs.mkdirSync(LOG_DIR, { recursive: true });
  • 写入本地文件
    Electron/main.cjs:140
    fs.appendFileSync(APP_LOG, `[${new Date().toISOString()}] ${message}\n`);
  • 读取本地文件
    Electron/main.cjs:163
    if (!fs.existsSync(shortcutConfigPath())) return { ...DEFAULT_SHORTCUTS };
  • 读取本地文件
    Electron/main.cjs:166
    ...JSON.parse(fs.readFileSync(shortcutConfigPath(), 'utf8'))
  • 写入本地文件
    Electron/main.cjs:175
    fs.mkdirSync(path.dirname(shortcutConfigPath()), { recursive: true });
  • 写入本地文件
    Electron/main.cjs:176
    fs.writeFileSync(shortcutConfigPath(), `${JSON.stringify(shortcuts, null, 2)}\n`, { mode: 0o600 });
  • 发起网络请求
    Electron/main.cjs:300
    const response = await fetch(ENDPOINT, {
  • 读取本地文件
    Electron/main.cjs:316
    fs.accessSync(candidate, fs.constants.X_OK);
  • 执行外部命令固定命令
    Electron/main.cjs:343
    const result = spawnSync('/usr/bin/security', ['find-generic-password', '-s', service, '-w'], {
  • 执行外部命令来自配置/变量
    Electron/main.cjs:362
    const child = spawn(executable, args, {
  • 读取本地文件
    Electron/main.cjs:393
    const stream = fs.createReadStream(file);
  • 写入本地文件
    Electron/main.cjs:402
    fs.mkdirSync(runtimeRoot(), { recursive: true, mode: 0o700 });
  • 读取本地文件
    Electron/main.cjs:404
    if (!fs.existsSync(archive) || await sha256(archive) !== specification.sha256) {
  • 请求外部主机nodejs.org
    Electron/main.cjs:406
    const response = await fetch(`https://nodejs.org/dist/v${NODE_VERSION}/${specification.file}`, { cache: 'no-store' });
  • 发起网络请求
    Electron/main.cjs:406
    const response = await fetch(`https://nodejs.org/dist/v${NODE_VERSION}/${specification.file}`, { cache: 'no-store' });
  • 写入本地文件
    Electron/main.cjs:409
    fs.writeFileSync(temporary, Buffer.from(await response.arrayBuffer()), { mode: 0o600 });
  • 删除本地文件
    Electron/main.cjs:412
    fs.rmSync(temporary, { force: true });
  • 删除本地文件
    Electron/main.cjs:420
    fs.rmSync(staging, { recursive: true, force: true });
  • 删除本地文件
    Electron/main.cjs:424
    fs.rmSync(managedNodeRoot(), { recursive: true, force: true });
  • 删除本地文件
    Electron/main.cjs:426
    fs.rmSync(staging, { recursive: true, force: true });
  • 读取本地文件
    Electron/main.cjs:480
    if (!error.message.includes('pnpm failed') || !fs.existsSync(workspace)) throw error;
  • 执行外部命令来自配置/变量
    Electron/main.cjs:669
    ownedService = spawn(executable, ['web', '--port', '3080', '--no-open'], {
  • 读取本地文件
    script/acceptance_test.mjs:12
    || (existsSync(userAppPath) ? userAppPath : '/Applications/DSH Whale.app');
  • 发起网络请求
    script/acceptance_test.mjs:30
    const response = await fetch(`${endpoint}/api/${method}`, {
  • 执行外部命令固定命令
    script/acceptance_test.mjs:48
    const rows = execFileSync('/bin/ps', ['-axo', 'pid=,ppid=,command='], { encoding: 'utf8' })
  • 执行外部命令固定命令
    script/acceptance_test.mjs:64
    return execFileSync('/usr/bin/plutil', [
  • 读取本地文件
    script/acceptance_test.mjs:159
    const profile = JSON.parse(await readFile(`${profileRoot}/package.json`, 'utf8'));
  • 发起网络请求
    script/acceptance_test.mjs:161
    const rootHtml = await (await fetch(`${endpoint}/`)).text();
  • 发起网络请求
    script/cdp_eval.mjs:6
    const targets = await fetch('http://127.0.0.1:9223/json/list').then(response => response.json());
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
涉及外部主机:nodejs.org

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 封装网页为独立应用
  • Dock可启动
  • 兼容WebUI与插件

独立 macOS 桌面外壳,为 DeepSeek Harness 提供完整 Web UI 与插件兼容。

README

由 DeepSeek 最新模型翻译生成
DSH Whale DSH Whale 把 DeepSeek Harness(DSH) 的 Web 界面封装成一个可从 Dock 直接启动的 macOS 独立应用,不再需要先开终端、再开浏览器。 它不会复制或修改 DSH 配置。应用直接复用本机 ~/.dsh 中已有的工作区、历史任务、Provider、模型、插件和登录信息,因此网页版本能用的 DSH 功能会继续在独立窗口中使用。 功能 - 双击鲸鱼图标后自动启动本机 DSH,并在独立 Chromium 窗口中打开。 - 新电脑未安装 DSH 时自动打开设置向导,无需终端或管理员权限。 - 向导自动安装固定版本的 Node、DSH、14 个插件和郑观宇模型配置。 - 复用当前 ~/.dsh,不迁移、不上传、不内置 API Key。 - 保留 DSH Web 插件、文件上传、下载、剪贴板、弹窗和消息流能力。 - 最终回答直接显示在原消息流中。 - 原生标题栏跟随 macOS 的深色/浅色外观。 - 修复窄窗口或多栏布局中“本轮 token”按钮被挤成竖排的问题。 - 应用退出时只停止由自己启动的 DSH 服务。 - 支持 Intel 与 Apple Silicon 两种安装包。 系统要求 - macOS 12 或更高版本。 - 首次自动安装需要访问 Node.js 与 npm 软件源。
展开完整文档(README 剩余 1 节)
DSH Whale

DSH Whale 把 DeepSeek Harness(DSH) 的 Web 界面封装成一个可从 Dock 直接启动的 macOS 独立应用,不再需要先开终端、再开浏览器。

它不会复制或修改 DSH 配置。应用直接复用本机 ~/.dsh 中已有的工作区、历史任务、Provider、模型、插件和登录信息,因此网页版本能用的 DSH 功能会继续在独立窗口中使用。

功能

- 双击鲸鱼图标后自动启动本机 DSH,并在独立 Chromium 窗口中打开。
- 新电脑未安装 DSH 时自动打开设置向导,无需终端或管理员权限。
- 向导自动安装固定版本的 Node、DSH、14 个插件和郑观宇模型配置。
- 复用当前 ~/.dsh,不迁移、不上传、不内置 API Key。
- 保留 DSH Web 插件、文件上传、下载、剪贴板、弹窗和消息流能力。
- 最终回答直接显示在原消息流中。
- 原生标题栏跟随 macOS 的深色/浅色外观。
- 修复窄窗口或多栏布局中“本轮 token”按钮被挤成竖排的问题。
- 应用退出时只停止由自己启动的 DSH 服务。
- 支持 Intel 与 Apple Silicon 两种安装包。

系统要求

- macOS 12 或更高版本。
- 首次自动安装需要访问 Node.js 与 npm 软件源。
- 如本机已经安装 dsh,应用会继续优先复用兼容的现有环境。

DSH Whale 默认检查自己的托管运行环境,以及 /usr/local/bin、/opt/homebrew/bin、~/.local/bin、~/.npm-global/bin、~/.volta/bin 和当前 PATH。

安装

从 GitHub Releases 下载与你电脑对应的 DMG:

- Apple Silicon(M1/M2/M3/M4):arm64
- Intel Mac:x64

打开 DMG,将 DSH Whale.app 拖入 Applications。当前公开构建使用临时签名、尚未经过 Apple 公证;首次打开如被 macOS 拦截,请在 Finder 中右键应用并选择“打开”,或到“系统设置 → 隐私与安全性”确认打开。

如果新电脑尚未安装 DSH,首次打开后填写 zhenguanyu API Key(DeepSeek Key 可选),点击“一键安装”。运行环境保存在:

~/Library/Application Support/DSH Whale/runtime/

Provider 配置保存在本机 ~/.dsh/;API Key 保存在 macOS 钥匙串,不进入 DSH 配置目录、应用安装包或 GitHub。“DSH Whale → 安装或修复 DSH…”可随时重新打开设置向导。

dsh-web-lan-access 会随插件一起安装,但默认不启用。只有在安装向导中主动勾选“允许局域网访问”时才会加入运行配置。

快捷键

| 默认快捷键 | 功能 |
| ⌘N | 新建会话并聚焦输入框 |
| ⇧⌘N | 在当前工作区新建会话 |
| ⌥Space | 从任何应用全局唤起并新建会话 |
| ⌘/ | 打开快捷键设置 |
| Enter | 直接发送消息 |
| ⇧Enter | 换行,不发送 |

DSH 页面左下角有“快捷键”入口,可查看、录制修改、保存或恢复默认设置。Dock 图标右键菜单也提供“新建会话”和“快捷键设置”。快捷键只保存在本机:

~/Library/Application Support/DSH Whale/shortcuts.json

从源码构建

npm install
npm run build:x64
npm run build:arm64
npm run release

npm run release 会生成两种架构的 ZIP、DMG 和 SHA-256 校验文件。Electron 锁定在 43.4.1,因为 Electron 44 已不再支持 macOS 12。

本机安装与启动验证:

./script/build_and_run.sh --verify
./script/install.sh
./script/acceptance_test.mjs

如需真实调用指定模型做验收:

DSH_WHALE_TEST_PROVIDER=your-provider \
DSH_WHALE_TEST_MODEL=your-model \
./script/acceptance_test.mjs --model

隐私与安全

- 仓库和安装包不包含 DSH 配置、API Key、Token、会话或工作区内容。
- DSH Whale 只连接本机 http://127.0.0.1:3080。
- 应用日志不主动记录提示词或 API Key。
- 当前发布包未使用 Apple Developer ID,无法完成公证;这是目前公开分发的主要限制。

日志位置:

- ~/Library/Logs/DSH Whale/app.log
- ~/Library/Logs/DSH Whale/dsh-service.log

License

MIT
预览分享卡片长什么样 ↓zbin8523/dsh-whale
分享 · DeepSeek Harness Hub
zbin8523/dsh-whale

把网页版界面封装成 Dock 可启动的独立应用

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部