三界面一键切换,17 组件开箱即用的整合发行版
28.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Miyazawai/dsh-whale该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 103 处,展示前 91 条)
- 读取本地文件desktop/after-pack.cjs:17
if (!existsSync(runtimeSrc)) { - 删除本地文件递归desktop/after-pack.cjs:21
rmSync(dst, { recursive: true, force: true }) - 删除本地文件递归desktop/after-pack.cjs:28
rmSync(nmJunction, { recursive: true, force: true }) - 执行外部命令固定命令desktop/after-pack.cjs:29
const res = spawnSync('cmd', ['/c', 'mklink', '/J', nmJunction, nmTarget], { stdio: 'pipe' }) - 读取本地文件desktop/after-pack.cjs:33
if (!existsSync(join(nmJunction, '@deepseek-ai', 'dsh-tools'))) { - 写入本地文件desktop/main.js:16
appendFileSync(p, `\n===== ${new Date().toISOString()} dsh-whale start =====\n`) - 写入本地文件desktop/main.js:22
if (logStream) { try { appendFileSync(logStream, line + '\n') } catch { } } - 读取本地文件desktop/main.js:34
if (existsSync(p)) return p - 读取本地文件desktop/main.js:38
if (existsSync(withNm)) return withNm - 写入本地文件desktop/main.js:47
mkdirSync(base, { recursive: true }) - 写入本地文件desktop/main.js:77
mkdirSync(targetRoot, { recursive: true }) - 读取本地文件desktop/main.js:81
if (!existsSync(dst) && existsSync(src)) cpSync(src, dst, { recursive: true }) - 执行外部命令来自配置/变量desktop/main.js:88
const child = spawn(process.execPath, ['--expose-internals', DSH_CLI, 'plugin', '--profile', 'web', 'add', source], { - 读取本地文件desktop/main.js:108
if (existsSync(markerPath)) { - 读取本地文件desktop/main.js:109
const m = JSON.parse(readFileSync(markerPath, 'utf8')) - 读取本地文件desktop/main.js:117
if (!existsSync(bundlesPath)) return - 写入本地文件desktop/main.js:137
try { writeFileSync(markerPath, JSON.stringify({ version: '1', ok: [...done], time: Date.now() })) } catch { } - 执行外部命令来自配置/变量desktop/main.js:208
dshChild = spawn(process.execPath, ['--expose-internals', DSH_CLI, '--profile', 'web', '--port', '0'], { - 读取本地文件plugins/sidebar/src/git-workspace.ts:20
if (!existsSync(cwd) || !statSync(cwd).isDirectory()) { - 读取本地文件plugins/sidebar/src/git-workspace.ts:20
if (!existsSync(cwd) || !statSync(cwd).isDirectory()) { - 读取本地文件plugins/sidebar/src/preferences-server.ts:36
JSON.parse(await readFile(path, 'utf8')) as unknown, - 写入本地文件plugins/sidebar/src/preferences-server.ts:98
await mkdir(dirname(path), { recursive: true }) - 写入本地文件plugins/sidebar/src/preferences-server.ts:100
await writeFile(temporary, `${JSON.stringify(preferences, undefined, 2)}\n`, { - 写入本地文件plugins/sidebar/src/preferences-server.ts:104
await rename(temporary, path) - 删除本地文件plugins/sidebar/src/preferences-server.ts:106
await unlink(temporary).catch(() => {}) - 读取本地文件plugins/skins/src/preferences-server.ts:39
const parsed = parseSkinPreferences(JSON.parse(await readFile(path, 'utf8')) as unknown) - 写入本地文件plugins/skins/src/preferences-server.ts:98
await mkdir(dirname(path), { recursive: true }) - 写入本地文件plugins/skins/src/preferences-server.ts:100
await writeFile(temporary, `${JSON.stringify(preferences, undefined, 2)}\n`, { mode: 0o600 }) - 写入本地文件plugins/skins/src/preferences-server.ts:102
await rename(temporary, path) - 删除本地文件plugins/skins/src/preferences-server.ts:106
await unlink(temporary).catch(() => {}) - 写入本地文件plugins/skins/src/preferences-server.ts:109
await copyFile(temporary, path) - 删除本地文件plugins/skins/src/preferences-server.ts:110
await unlink(temporary) - 读取本地文件plugins/skins/src/tui-adapter.ts:49
return JSON.parse(readFileSync(path, 'utf8')) as unknown - 写入本地文件plugins/skins/src/tui-adapter.ts:56
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件plugins/skins/src/tui-adapter.ts:58
writeFileSync(temporary, `${JSON.stringify(value, undefined, 2)}\n`, { mode: 0o600 }) - 写入本地文件plugins/skins/src/tui-adapter.ts:60
renameSync(temporary, path) - 删除本地文件plugins/skins/src/tui-adapter.ts:64
rmSync(temporary, { force: true }) - 写入本地文件plugins/skins/src/tui-adapter.ts:67
copyFileSync(temporary, path) - 删除本地文件plugins/skins/src/tui-adapter.ts:68
rmSync(temporary, { force: true }) - 写入本地文件plugins/skins/src/tui-adapter.ts:99
mkdirSync(directory, { recursive: true, mode: 0o700 }) - 执行外部命令来自配置/变量src/cli.ts:152
const child = spawn(spec.command, spec.args, { - 读取本地文件src/data-root.ts:106
return lstatSync(path) - 读取本地文件src/data-root.ts:115
return statSync(path) - 写入本地文件src/data-root.ts:171
mkdirSync(destination, { recursive: true, mode: sourceStat.mode & 0o777 }) - 读取本地文件src/data-root.ts:177
for (const entry of readdirSync(source)) { - 写入本地文件src/data-root.ts:190
mkdirSync(dirname(destination), { recursive: true, mode: 0o700 }) - 写入本地文件src/data-root.ts:192
copyFileSync(source, destination, fsConstants.COPYFILE_EXCL) - 写入本地文件src/data-root.ts:200
mkdirSync(dirname(destination), { recursive: true, mode: 0o700 }) - 写入本地文件src/data-root.ts:209
copyFileSync(source, destination, fsConstants.COPYFILE_EXCL) - 写入本地文件src/data-root.ts:235
mkdirSync(destination, { recursive: true, mode: 0o700 }) - 读取本地文件src/data-root.ts:242
for (const entry of readdirSync(source)) { - 读取本地文件src/data-root.ts:256
if (!existsSync(marker)) writeFileSync(marker, 'complete\n', { mode: 0o600 }) - 读取本地文件src/data-root.ts:271
if (existsSync(migrationMarker(input.ohDshHome, DESKTOP_MIGRATION))) { - 写入本地文件src/main.ts:157
mkdirSync(workspaceRoot, { recursive: true }) - 读取本地文件src/main.ts:158
if (!existsSync(paths.nodeBinary)) { - 读取本地文件src/main.ts:161
if (!existsSync(paths.cliEntry)) { - 写入本地文件src/main.ts:184
mkdirSync(workspaceRoot, { recursive: true, mode: 0o700 }) - 写入本地文件src/main.ts:185
mkdirSync(temporary, { recursive: true, mode: 0o700 }) - 读取本地文件src/main.ts:186
if (!existsSync(paths.nodeBinary)) throw new Error(`packaged Node runtime is missing: ${paths.nodeBinary}`) - 读取本地文件src/main.ts:187
if (!existsSync(paths.cliEntry)) throw new Error(`packaged DSH CLI is missing: ${paths.cliEntry}`) - 读取本地文件src/main.ts:190
const launcher = process.platform === 'darwin' && existsSync(sandbox) - 读取本地文件src/main.ts:237
if (existsSync(packaged)) return packaged - 写入本地文件src/main.ts:625
mkdirSync(workingDirectory, { recursive: true, mode: 0o700 }) - 写入剪贴板src/main.ts:780
clipboard.writeText([ - 写入本地文件src/main.ts:857
mkdirSync(electronDataRoot, { recursive: true, mode: 0o700 }) - 写入本地文件src/main.ts:889
mkdirSync(logsDir, { recursive: true }) - 发起网络请求src/marketplace-tools.ts:133
const response = await fetch(credentials.url, { - 读取本地文件src/profile.ts:80
const parsed: unknown = JSON.parse(readFileSync(path, 'utf8')) - 写入本地文件src/profile.ts:89
writeFileSync(temporary, JSON.stringify(value, undefined, 2) + '\n', { mode: 0o600 }) - 写入本地文件src/profile.ts:90
renameSync(temporary, path) - 写入本地文件src/profile.ts:135
mkdirSync(profileDir, { recursive: true, mode: 0o700 }) - 读取本地文件src/profile.ts:137
const manifest = existsSync(manifestPath) - 读取本地文件src/profile.ts:154
if (!existsSync(manifestPath) || JSON.stringify(next) !== JSON.stringify(manifest)) { - 读取本地文件src/profile.ts:165
if (!existsSync(path)) writeFileSync(path, contents, { mode: 0o600 }) - 写入本地文件src/profile.ts:165
if (!existsSync(path)) writeFileSync(path, contents, { mode: 0o600 }) - 写入本地文件src/profile.ts:167
mkdirSync(dirname(join(dshHome, 'sessions', '.keep')), { recursive: true, mode: 0o700 }) - 执行外部命令来自配置/变量src/runtime.ts:80
const child = spawn(command, args, { - 执行外部命令来自配置/变量src/runtime.ts:156
const child = spawn(options.nodeBinary, [options.cliEntry, ...args], { - 读取本地文件src/tui.ts:240
: existsSync(stagedNode) - 读取本地文件src/tui.ts:244
if (!existsSync(paths.nodeBinary)) { - 读取本地文件src/tui.ts:247
if (!existsSync(paths.cliEntry)) { - 读取本地文件src/tui.ts:253
if (!existsSync(cwd)) throw new UsageError(`workspace directory does not exist: ${cwd}`) - 写入本地文件src/tui.ts:254
mkdirSync(dataRoot, { recursive: true, mode: 0o700 }) - 读取本地文件src/update-manager.ts:141
const packageType = (await readFile(join(resourcesPath, 'package-type'), 'utf8')).trim() - 执行外部命令固定命令src/version.ts:24
const result = spawnSync('git', [ - 读取本地文件src/version.ts:46
const manifest = JSON.parse(readFileSync(path, 'utf8')) as { version?: unknown } - 执行外部命令来自配置/变量src/web.ts:162
const child = spawn(command, args, { detached: true, stdio: 'ignore' }) - 读取本地文件src/web.ts:222
: existsSync(stagedNode) - 读取本地文件src/web.ts:226
if (!existsSync(paths.nodeBinary)) { - 读取本地文件src/web.ts:229
if (!existsSync(paths.cliEntry)) { - 写入本地文件src/web.ts:233
mkdirSync(dataRoot, { recursive: true, mode: 0o700 })
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 三界面一键切换
- 17组件开箱即用
- 模型与预设联动
README
由 DeepSeek 最新模型翻译生成简体中文 ·
🐳 dsh-whale(鲸鱼包) DSH 傻瓜整合包 —— 开箱即用的 DeepSeek Harness 发行版外壳。
核心 17 组件开箱即用,三种界面(webui / gui / tui)一个安装包切换,Windows 小白双击即用。
下载最新版
选品清单
架构决策
以 Oh-DSH 发行层为基座(一次性源码级 fork,独立演进)。把社区插件精选、去重、兼容性修复后打包成一个发行版,"核心包"只是默认组合——遵循 DSH"一切皆插件"哲学,所有组件都可随时插入与拆除。
✨ 特色
- 三界面一包:webui(浏览器)/ gui(Electron 桌面壳)/ tui(终端,dsh-TUI),共享同一份会话与配置,启动时自选
- 核心 17 组件开箱即用:每功能一实现(功能唯一性 > 资源开销 > 包体积)
- 模型↔预设联动:换 flash 模型自动启用思维路由(Router Standard),换 pro 自动启用锚定式预设(Anchored Standard)——设置页一键开关,想关就关
- 可插拔:任何插件可用官方 dsh plugin 机制移除;可选 17 组件默认关闭、一键开启
- 自带运行时:无需安装 Node/pnpm,自带固定版本 DSH runtime
🚀 快速开始
展开完整文档(README 剩余 1 节)
简体中文 · 🐳 dsh-whale(鲸鱼包) DSH 傻瓜整合包 —— 开箱即用的 DeepSeek Harness 发行版外壳。 核心 17 组件开箱即用,三种界面(webui / gui / tui)一个安装包切换,Windows 小白双击即用。 下载最新版 选品清单 架构决策 以 Oh-DSH 发行层为基座(一次性源码级 fork,独立演进)。把社区插件精选、去重、兼容性修复后打包成一个发行版,"核心包"只是默认组合——遵循 DSH"一切皆插件"哲学,所有组件都可随时插入与拆除。 ✨ 特色 - 三界面一包:webui(浏览器)/ gui(Electron 桌面壳)/ tui(终端,dsh-TUI),共享同一份会话与配置,启动时自选 - 核心 17 组件开箱即用:每功能一实现(功能唯一性 > 资源开销 > 包体积) - 模型↔预设联动:换 flash 模型自动启用思维路由(Router Standard),换 pro 自动启用锚定式预设(Anchored Standard)——设置页一键开关,想关就关 - 可插拔:任何插件可用官方 dsh plugin 机制移除;可选 17 组件默认关闭、一键开启 - 自带运行时:无需安装 Node/pnpm,自带固定版本 DSH runtime 🚀 快速开始 1. 从 Releases 下载 dsh-whale Setup x.x.x.exe(Windows 安装包,约 94MB,自带 Node/DSH runtime,无需预装任何环境) 2. 双击安装 → 桌面出现 dsh-whale(鲸鱼包) 快捷方式 3. 启动后三选一: - GUI:双击桌面图标(Electron 窗口) - Web:安装目录下运行 bin\ohdsh web(或 GUI 内操作) - TUI:在终端运行 bin\ohdsh tui 核心 17 组件开箱即用;可选组件在设置页一键开启;模型↔预设联动默认开启(换 flash/pro 自动切换路由/锚定预设),可在设置关闭。 🔒 与已有 DSH 共存(完全隔离) 鲸鱼包是独立的 DSH 实例,与你已装的 dsh 零冲突,可同时运行: | 项 | 你现有的 dsh | 鲸鱼包 | | 程序 | 系统安装/npx 的 dsh | 安装目录内置拷贝(自带 Node runtime) | | 数据目录 | ~/.dsh | %APPDATA%\dsh-whale\dsh-home | | 端口 | 默认 3080 | 随机空闲端口(永不撞车) | | 插件/预设 | 你的 profile | 自己的 profile + 内置 4 预设 | | 卸载 | 不受影响 | 只删自己的目录 | ⚠️ 注意: - 鲸鱼包不共享 ~/.dsh 的 API Key / 会话 / 凭据——首次使用需在鲸鱼包内重新配置一次 DeepSeek API Key(隔离的代价,也是不碰你现有数据的保证)。 - 请通过桌面图标/安装器启动;若在安装目录手动敲 dsh 命令,记得设 DSH_HOME(否则会回落到 ~/.dsh)。 📦 核心组件(默认启用,17 个) | 功能 | 插件 | 来源 | | 费用/计费 | dsh-cost-meter | Han-1413141/dsh-cost-meter | | 生成式 UI | dsh-genui | omdsh-dev/dsh-genui | | 文件引用 | dsh-at-file | omdsh-dev/dsh-at-file | | 文件上传 | dsh-file-uploads | l541402398/dsh-file-uploads | | 会话折叠 | dsh-web-archive | renat3u/dsh-web-archive | | 导航条 | dsh-navbar | vlln/dsh-navbar | | 路径可点 | dsh-file-mentions | a903067276-rgb/dsh-file-mentions | | 消息编辑 | dsh-message-edit | Moeblack/dsh-message-edit | | 文档读取 | dsh-plugin-anydoc | beancookie/dsh-plugin-anydoc | | Web 通知 | dsh-session-notification | dingyi222666/dsh-session-notification | | 主题 | dsh-theme-gallery | wsxwj123/dsh-plugins(theme-gallery 子包) | | CSV 工具 | dsh-tool-csv | omdsh-dev/dsh-tool-csv | | Skill 管理 | dsh-skill-viewer | Fishquito7/dsh-skill-viewer | | 视觉工具 | dsh-vision-toolkit | Anionex/dsh-vision-toolkit | | 插件说明 | dsh-plugin-description | MysaDC/dsh-plugin-description | | 桌宠 | dsh-dafeiyu | QCYTSN/dsh-dafeiyu | | 运行时注入 | dsh-super-injector | yjh051108/dsh-routing-suite(dsh-super-injector) | 🎛️ 预设(随包安装,模型联动) | 预设 | 绑定模型 | 来源 | | Anchored Standard(含 Zero-Anchored / Whoami 变体) | pro | xiaobright/dsh-anchored-standard | | Router Standard | flash | yjh051108/dsh-routing-suite(dsh-router-standard) | 🧩 可选组件(默认关闭,一键开启) | 功能 | 插件 | 来源 | | 多维仪表盘 | dsh-spend | nonewind/dsh-spend | | 自由 HTML 卡片 | dsh-visualize | Nagi-ovo/dsh-visualize | | 拖拽真实路径 | dsh-drag-and-drop | omdsh-dev/dsh-drag-and-drop | | 摘要 tab | dsh-focus-chat | dingyi222666/dsh-focus-chat | | 文档写/MCP | dsh-cowork | Jesse-njx/dsh-cowork | | 工作区回滚 | dsh-turn-rewind | Anionex/dsh-turn-rewind | | Windows 通知 | dsh-notify-windows | SeverusZh/dsh-notify-windows | | 多引擎搜索 | modsearch | liustack/modsearch | | 便签 | dsh-sticky-note | Meredith2328/dsh-sticky-note | | 注意力徽章 | dsh-web-attention-badge | Luaphes/dsh-web-attention-badge | | HUD 状态面板 | dsh-hud | a903067276-rgb/dsh-hud | | 状态文案 | ui-status-label | alingalingling/ui-status-label | | 技能导入 | dsh-skillport | Jesse-njx/dsh-skillport | | 内置开关 | dsh-builtin-toggles | Starfie1d1272/dsh-builtin-toggles | | 批注 | dsh-annotation | omdsh-dev/dsh-annotation | | 跨会话消息 | dsh-crosstalk | Jesse-njx/dsh-crosstalk | | 浏览器操控 | dsh-browser(Chrome 扩展,独立安装) | Lum1104/dsh-browser | 🙏 致谢 本项目是社区生态的组合产物,站在以下项目的肩膀上(均为开源): - hust-open-atom-club/oh-dsh —— 发行层基座(三形态统一、Pinned runtime、分层分发) - ccch1mneyyy/dsh-TUI —— 终端界面(TUI) - omdsh-dev/DSH-better-sidebar —— 侧边栏工作台(PTY/文件/Git) - xiaobright/dsh-anchored-standard —— 锚定式预设(pro 模型绑定) - yjh051108/dsh-routing-suite —— 思维路由预设 + 超级注入器(flash 模型绑定) - 以及上表中全部核心/可选组件仓库与 awesome-dsh-plugin 生态 🔗 相关 - 选品清单:docs/selection.md | 架构决策:docs/adr/0001 | 调研底稿:docs/overlap-map.md - 术语表:CONTEXT.md | 补丁簿:docs/patch-book.md | 调研档案:research/、research_output/
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Miyazawai/dsh-whale
三界面一键切换,17 组件开箱即用的整合发行版
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目