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

就位启动器 onblog/dsh-ready

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

一键安装启动升级,全程不用碰终端

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 48 处,展示前 47 条)
  • 读取本地文件
    electron/paths.mjs:148
    stored = JSON.parse(readFileSync(SETTINGS_FILE, 'utf8'))
  • 写入本地文件
    electron/paths.mjs:188
    mkdirSync(USER_DATA, { recursive: true })
  • 写入本地文件
    electron/paths.mjs:189
    writeFileSync(SETTINGS_FILE, `${JSON.stringify(next, null, 2)}\n`)
  • 写入本地文件
    electron/paths.mjs:197
    for (const dir of [USER_DATA, LOG_DIR]) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    electron/logger.mjs:12
    if (statSync(LOG_FILE).size > MAX_BYTES) renameSync(LOG_FILE, `${LOG_FILE}.1`)
  • 读取本地文件
    electron/logger.mjs:12
    if (statSync(LOG_FILE).size > MAX_BYTES) renameSync(LOG_FILE, `${LOG_FILE}.1`)
  • 写入本地文件
    electron/logger.mjs:34
    mkdirSync(LOG_DIR, { recursive: true })
  • 写入本地文件
    electron/logger.mjs:36
    appendFileSync(LOG_FILE, `${stamped}\n`)
  • 发起网络请求
    electron/dsh.mjs:20
    const req = https.request(url, { method: 'HEAD', timeout }, (res) => {
  • 发起网络请求
    electron/dsh.mjs:33
    const req = https.get(url, { timeout }, (res) => {
  • 读取本地文件
    electron/dsh.mjs:128
    if (process.platform === 'win32' && existsSync(globalManifest)) {
  • 读取本地文件
    electron/dsh.mjs:130
    const pkg = JSON.parse(readFileSync(globalManifest, 'utf8'))
  • 读取本地文件
    electron/dsh.mjs:144
    if (existsSync(manifest)) {
  • 读取本地文件
    electron/dsh.mjs:146
    const pkg = JSON.parse(readFileSync(manifest, 'utf8'))
  • 读取本地文件
    electron/dsh.mjs:174
    if (!existsSync(candidate)) continue
  • 读取本地文件
    electron/dsh.mjs:183
    cliPath: cliCandidate && existsSync(cliCandidate) ? cliCandidate : null,
  • 执行外部命令来自配置/变量
    electron/runtime.mjs:60
    child = spawn(cmd, args, { cwd, env: env ?? process.env })
  • 读取本地文件
    electron/runtime.mjs:101
    if (existsSync(candidate)) return candidate
  • 读取本地文件
    electron/runtime.mjs:118
    const npmCliPath = npmCliCandidate && existsSync(npmCliCandidate) ? npmCliCandidate : null
  • 读取本地文件
    electron/runtime.mjs:204
    if (existsSync(candidate)) return candidate
  • 读取本地文件
    electron/runtime.mjs:223
    if (runtime?.npmPath && existsSync(runtime.npmPath)) {
  • 读取本地文件
    electron/runtime.mjs:224
    if (IS_WIN && runtime.npmCliPath && existsSync(runtime.npmCliPath)) {
  • 执行外部命令来自配置/变量
    electron/runtime.mjs:235
    const child = spawn(cmd, args, { cwd, env: env ?? process.env, shell })
  • 读取本地文件
    electron/server.mjs:23
    return existsSync(CAFFEINATE) ? CAFFEINATE : null
  • 发起网络请求
    electron/server.mjs:51
    const req = http.get(`http://127.0.0.1:${target}/`, { timeout: 2000 }, (res) => {
  • 读取本地文件
    electron/server.mjs:96
    if (!existsSync(target.path)) throw new Error(`未找到 dsh 可执行文件:${target.path}`)
  • 执行外部命令来自配置/变量
    electron/server.mjs:124
    child = spawn(command, commandArgs, {
  • 执行外部命令固定命令
    electron/server.mjs:181
    spawn('taskkill', ['/PID', String(pid), '/T', '/F'], { stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    electron/external.mjs:8
    execFile(cmd, args, { timeout: 5000 }, (error, stdout) => {
  • 发起网络请求
    electron/plugins.mjs:27
    const req = https.get(
  • 读取本地文件
    electron/plugins.mjs:58
    return JSON.parse(readFileSync(file, 'utf8'))
  • 读取本地文件
    electron/plugins.mjs:265
    if (!existsSync(dir)) {
  • 删除本地文件递归
    electron/plugins.mjs:269
    rmSync(dir, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    electron/shellenv.mjs:69
    execFile(
  • 读取本地文件
    electron/shellenv.mjs:89
    if (!existsSync(shell)) {
  • 读取本地文件
    electron/telemetry.mjs:30
    return JSON.parse(readFileSync(join(here, 'site.generated.json'), 'utf8'))
  • 发起网络请求
    electron/telemetry.mjs:73
    return await fetch(url, { ...init, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) })
  • 执行外部命令来自配置/变量
    electron/exec.mjs:29
    child = spawn(cmd, args, { cwd, env: env ?? process.env })
  • 执行外部命令来自配置/变量
    electron-builder.config.mjs:20
    execFileSync(process.execPath, [join(ROOT, 'scripts', 'write-site-config.cjs')], {
  • 发起网络请求
    site/public/app.js:358
    const response = await fetch(url, {
  • 发起网络请求
    site/public/app.js:521
    const response = await fetch(url, {
  • 写入剪贴板
    site/public/app.js:673
    await navigator.clipboard.writeText(cmd?.textContent ?? '');
  • 发起网络请求
    site/public/app.js:695
    const response = await fetch('/api/stats');
  • 发起网络请求
    site/public/stats.js:306
    const response = await fetch('/api/stats', { headers: { Accept: 'application/json' } });
  • 发起网络请求
    site/public/stats.js:319
    const response = await fetch('/assets/world-map.json');
  • 发起网络请求
    site/src/index.js:331
    async fetch(request, env) {
  • 发起网络请求
    site/src/index.js:344
    return env.ASSETS.fetch(request);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

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

DeepSeek Harness 一键桌面启动器:安装、启动、升级。

README

由 DeepSeek 最新模型翻译生成
DSH 就位 · DSH Ready DeepSeek Harness 的桌面启动器装好、启动、升级,全程不用终端 🇨🇳 中文 · 🇺🇸 English · 📊 使用数据 这是什么? DeepSeek Harness(dsh)是一个命令行工具。对不常待在终端里的人来说,这意味着要装 Node、记命令、挑端口,还要收拾跑飞的进程。 DSH 就位就是一个蓝色小窗口,替你做这七件事: | 事情 | 具体做了什么 | | 安装 | 选版本 → 用你环境里的 Node/npm(缺 Node 时用 nvm 装到 ~/.nvm)→ 用 npm 默认全局前缀安装 DSH,不需要 sudo | | 启动 | 读取登录 shell 环境,用你的端口启动 dsh web,就绪后自动打开系统浏览器 | | 停止 | 停止自己启动的进程组,或你确认接管的外部实例 | | 状态 | 运行中 / 已停止 / 外部实例 / 安装中 / 升级中,实时刷新 | | 日志 | 实时日志面板 + 落盘日志,失败时能看出卡在哪一步 | | 升级 | 先逐个核对第三方插件的 DSH 兼容范围,通过后才升级 DSH 与插件 | | 卸载 | 停实例 → 卸插件 → 清 profile → 卸本体,但保留 ~/.dsh 与 npm 环境 |
展开完整文档(README 剩余 1 节)
DSH 就位 · DSH Ready

DeepSeek Harness 的桌面启动器装好、启动、升级,全程不用终端

🇨🇳 中文 · 🇺🇸 English · 📊 使用数据

这是什么?

DeepSeek Harness(dsh)是一个命令行工具。对不常待在终端里的人来说,这意味着要装 Node、记命令、挑端口,还要收拾跑飞的进程。

DSH 就位就是一个蓝色小窗口,替你做这七件事:

| 事情 | 具体做了什么 |
| 安装 | 选版本 → 用你环境里的 Node/npm(缺 Node 时用 nvm 装到 ~/.nvm)→ 用 npm 默认全局前缀安装 DSH,不需要 sudo |
| 启动 | 读取登录 shell 环境,用你的端口启动 dsh web,就绪后自动打开系统浏览器 |
| 停止 | 停止自己启动的进程组,或你确认接管的外部实例 |
| 状态 | 运行中 / 已停止 / 外部实例 / 安装中 / 升级中,实时刷新 |
| 日志 | 实时日志面板 + 落盘日志,失败时能看出卡在哪一步 |
| 升级 | 先逐个核对第三方插件的 DSH 兼容范围,通过后才升级 DSH 与插件 |
| 卸载 | 停实例 → 卸插件 → 清 profile → 卸本体,但保留 ~/.dsh 与 npm 环境 |

它刻意不做插件管理、不做 MCP 客户端、不重做 DSH 界面 —— 只启动官方 Web 界面并交给系统浏览器。

这是社区项目,与 DeepSeek 官方没有隶属或背书关系。

下载

| 平台 | 安装包 | 说明 |
| macOS Apple Silicon | dsh-ready-1.0.3-arm64.dmg | M1 / M2 / M3 / M4 |
| macOS Intel | dsh-ready-1.0.3-x64.dmg | Intel 芯片的 Mac |
| Windows x64 | dsh-ready-1.0.3-x64.exe | Windows 10 / 11 |

到 dsh.wordtk.com 下载:安装包放在 R2,官网永远提供最新版本。

macOS 安装包带 ad-hoc 签名,Apple Silicon 可直接运行,但没有做苹果公证。下载后首次打开可能被系统拦一次:到「系统设置 → 隐私与安全性」点「仍要打开」(macOS 14 及更早可右键图标选「打开」)。若提示「已损坏」,执行 xattr -cr "/Applications/DSH 就位.app"。Windows 上点「更多信息 → 仍要运行」即可。

界面截图

所有截图都由 npm run shots 在沙箱里真实启动应用后截取,不是效果图,也没有后期拼贴。

| 浅色主题 | 深色主题 |

它是怎么做到的

- 只用你环境里的 Node 与 npm。 启动时读取登录 shell 的 Node/npm 并打印版本;缺 Node、版本低于 22.18 或缺 npm 时,用 nvm 把 Node 22 装到 ~/.nvm 并写入 shell 配置。DSH 用普通的 npm install -g 安装,不使用应用私有的 --prefix。
- 登录 shell 环境。 从 Finder 启动的图形应用只有 launchd 的精简环境。应用会执行一次 $SHELL -ilc 'env -0' 再合并,~/.zshrc 里的 API Key、代理、PATH 都能生效,和终端里手敲一致。想跳过就设 DSH_READY_SKIP_SHELL_ENV=1。
- 只有一个实例、一个端口。 每 4 秒扫描一次监听目标端口的 dsh web,发现外部实例可以停止或一键接管;其它端口的 DSH 一律不碰。
- 先出升级计划,再动手。 逐个核对插件声明的 @deepseek-ai/dsh peer 范围与 engines.dsh,有阻塞项只提示、不改环境;检查通过才把命令列出来并执行。
- 端口不偷偷改。 默认 3080,可在界面上改;端口被占用时直接报错,而不是悄悄顺延到你找不到的地址。
- 关于与更新。 右上角「关于」里有开发者联系方式,可手动检测更新;应用每天也会自动问一次官网,有新版本时提示并可一键跳转下载页。
- 缺 Node 才安装。 检测登录 shell 里的 Node ≥ 22.18 与 npm;缺失时先测速官方源与国内镜像,再用 nvm 把 Node 22 装到 ~/.nvm 并写入 shell 配置,不占用应用目录。

目录结构

electron/ 主进程(安装、运行、升级、IPC、日志) renderer/ 窗口界面:HTML + CSS + 原生 JS + 鲸鱼娘动画 site/ dsh.wordtk.com:Cloudflare Worker + 静态资源 + D1/KV/R2 src/index.js /api/:版本清单、分段下载、匿名计数 public/ 官网本体(纯静态优先,单一主题) migrations/ D1 表结构(ready_* 前缀) scripts/ 沙箱启动、真实截图、发布辅助脚本 docs/zh, docs/en 设计与部署文档,按语言分目录

本地开发

npm install
npm start # 启动桌面应用
npm run sandbox # 隔离 DSH_HOME 与应用数据目录后启动
npm run shots # 沙箱内真实截图,结束自动清理
npm run dist:mac:arm64 # 打 Apple Silicon dmg
npm run dist:mac:x64 # 打 Intel dmg
npm run dist:win # 打 Windows 安装包

沙箱(scripts/sandbox-test.sh、scripts/capture-screenshots.mjs)会把 DSH_HOME 和 Chromium 的 --user-data-dir 一起指到临时目录,用随机调试端口,退出即删除。你的 ~/.dsh、设置和正在运行的 DSH 都不会被读写。

官网在 site/:

cd site
npm install
npm run dev # wrangler dev
SITE_URL=https://example.com npm run deploy
npm run release # 上传安装包到 R2 并重写 latest.json

隐私

- 桌面应用不上报任何数据:没有埋点、没有更新检查、没有账号。
- 官网本身不做任何统计:没有页面访问计数、不设 Cookie、无第三方脚本。项目侧唯一的数据是桌面应用上报的匿名启动信号(随机设备 ID、UTC 日期、版本号,以及 Cloudflare 的粗略地区)。不写 IP、不写设备指纹、不记录使用行为。聚合数据公开在 dsh.wordtk.com/stats。

许可

AGPL-3.0-only。 个人使用、学习、研究、开源项目都免费。若要把修改版放进闭源商业产品,需要商业授权,请通过 issue 联系:

<https://github.com/onblog/dsh-ready/issues>

技术栈

桌面端基于 Electron;官网运行在 Cloudflare Workers 上,使用 D1、KV 与 R2。
预览分享卡片长什么样 ↓onblog/dsh-ready
分享 · DeepSeek Harness Hub
onblog/dsh-ready

一键安装启动升级,全程不用碰终端

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