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

远程隧道 lixun910/dsh-share

DeepSeek Harnessv0.5.0
lixun91076 天前有提交已提供中文文档扫描:高危

用手机浏览器安全访问你电脑上的工作区

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

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

自动兼容检查有告警:npm 同名包「dsh-share」归属 hellodigua/dsh-share,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lixun910/dsh-share
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(download_interrupted · 2026/9/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-share」归属 hellodigua/dsh-share,装到的可能不是本插件

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-share @ 0.5.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 ^0.1.0-rc.7 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 06:19:11

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本命令参数由运行时变量拼接读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 42 处,展示前 42 条)
  • 写入本地文件
    scripts/download-cloudflared.js:25
    const file = fs.createWriteStream(dest);
  • 写入本地文件
    scripts/download-cloudflared.js:52
    fs.mkdirSync(binDir, { recursive: true });
  • 执行外部命令运行时拼接
    scripts/download-cloudflared.js:72
    execSync(`tar -xzf "${tmp}" -C "${binDir}"`);
  • 读取本地文件
    scripts/download-cloudflared.js:75
    if (fs.existsSync(extracted) && extracted !== exe) fs.renameSync(extracted, exe);
  • 写入本地文件
    scripts/download-cloudflared.js:77
    fs.copyFileSync(tmp, exe);
  • 写入本地文件
    scripts/download-cloudflared.js:79
    fs.chmodSync(exe, 0o755);
  • 删除本地文件
    scripts/download-cloudflared.js:80
    fs.unlinkSync(tmp);
  • 写入剪贴板
    renderer/renderer.js:205
    await navigator.clipboard.writeText(currentUrl);
  • 写入剪贴板
    renderer/renderer.js:217
    await navigator.clipboard.writeText(uri);
  • 写入本地文件
    scripts/generate-icon.js:180
    fs.mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    scripts/generate-icon.js:182
    fs.writeFileSync(out, buildPng());
  • 读取本地文件
    scripts/generate-icon.js:183
    console.log(`Wrote ${out} (${fs.statSync(out).size} bytes)`);
  • 写入本地文件
    scripts/generate-icon.js:186
    fs.writeFileSync(
  • 写入本地文件
    scripts/generate-icon.js:190
    fs.writeFileSync(
  • 写入本地文件
    scripts/generate-icon.js:194
    fs.writeFileSync(
  • 执行外部命令运行时拼接
    scripts/notarize.js:27
    execSync(`codesign --verify --deep --strict '${appPath}'`, { stdio: 'ignore' });
  • 读取本地文件
    scripts/update-dsh.js:24
    const pkg = JSON.parse(fs.readFileSync(PKG, 'utf8'));
  • 执行外部命令来自配置/变量
    scripts/update-dsh.js:27
    return execSync(cmd, { encoding: 'utf8' }).trim();
  • 写入本地文件
    scripts/update-dsh.js:103
    fs.writeFileSync(PKG, JSON.stringify(pkg, null, 2) + '\n');
  • 读取本地文件
    scripts/update-dsh.js:111
    const lock = JSON.parse(fs.readFileSync('package-lock.json', 'utf8'));
  • 写入本地文件
    scripts/update-dsh.js:123
    fs.writeFileSync(PKG, JSON.stringify(pkg, null, 2) + '\n');
  • 读取本地文件
    scripts/update-gh-pages.js:21
    let html = fs.readFileSync(file, 'utf8');
  • 写入本地文件
    scripts/update-gh-pages.js:49
    fs.writeFileSync(file, html);
  • 写入本地文件
    src/auth.ts:15
    fs.mkdirSync(CONFIG_DIR, { recursive: true });
  • 写入本地文件
    src/auth.ts:16
    fs.writeFileSync(CONFIG_FILE, JSON.stringify(auth, null, 2), { mode: 0o600 });
  • 读取本地文件
    src/auth.ts:21
    const data = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
  • 读取本地文件
    src/cloudflared.ts:25
    if (fs.existsSync(c)) return c;
  • 执行外部命令来自配置/变量
    src/cloudflared.ts:41
    const proc = spawn(bin, args, {
  • 读取本地文件
    src/dsh.ts:30
    if (fs.existsSync(c)) return c;
  • 读取本地文件
    src/dsh.ts:35
    if (fs.existsSync(npxDir)) {
  • 读取本地文件
    src/dsh.ts:36
    for (const entry of fs.readdirSync(npxDir)) {
  • 读取本地文件
    src/dsh.ts:38
    if (fs.existsSync(candidate)) return candidate;
  • 执行外部命令来自配置/变量
    src/dsh.ts:62
    const proc = spawn(process.execPath, args, {
  • 执行外部命令固定命令
    src/main.ts:314
    execFile('netstat', ['-ano'], (err, stdout) => {
  • 执行外部命令固定命令
    src/main.ts:328
    execFile('taskkill', ['/PID', pid, '/F'], () => {
  • 执行外部命令固定命令
    src/main.ts:335
    execFile('lsof', ['-ti', `:${port}`], (err, stdout) => {
  • 执行外部命令固定命令
    src/main.ts:342
    execFile('kill', [pid], () => {
  • 发起网络请求
    src/proxy.ts:144
    const proxyReq = http.request(
  • 发起网络请求
    src/proxy.ts:194
    const proxyReq = http.request({
  • 读取本地文件
    src/settings.ts:16
    const data = JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8'));
  • 写入本地文件
    src/settings.ts:24
    fs.mkdirSync(CONFIG_DIR, { recursive: true });
  • 写入本地文件
    src/settings.ts:25
    fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2), { mode: 0o600 });
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/cordis-plugin-hmr@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/cordis-plugin-timer@deepseek-ai/cosmokit@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-instructions@deepseek-ai/dsh-agent-loop
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 安全公网隧道访问
  • 手机访问电脑工作区
  • 公网URL远程访问

通过安全公网隧道访问你的 DeepSeek Harness(dsh)工作区——用手机,或用公网 URL 从任何地方。

README

由 DeepSeek 最新模型翻译生成
dsh-share 通过一个仅在你使用时才存在的安全、临时公共隧道,从你的手机、iPad 或任何浏览器访问你的 DeepSeek Harness(dsh)工作区。 dsh-share 是为你从自己的设备访问自己的 DeepSeek Harness 而构建的。它不是一个分享工具:URL 和生成的密码是给你自己用的,而不是用来分发给别人的。 免费、无需账户、无需注册。 dsh-share 使用 Cloudflare 快速隧道(cloudflared)通过 HTTPS 暴露你本地的 dsh Web 服务器。无需 Cloudflare 账户、无需 API 令牌、无需 ngrok authtoken —— 只需点击 Start,你就会得到一个公共的 https://.trycloudflare.com URL,可以在任何设备上打开。 dsh-share 控制窗口 使用 DeepSeek v4 Flash 构建。 本仓库中的代码由 DeepSeek v4 Flash 模型编写。 ⭐ 如果 dsh-share 为你节省了一小时,请给仓库点个 star —— 这能帮助其他人发现它。
展开完整文档(README 剩余 1 节)
dsh-share

通过一个仅在你使用时才存在的安全、临时公共隧道,从你的手机、iPad 或任何浏览器访问你的 DeepSeek Harness(dsh)工作区。

dsh-share 是为你从自己的设备访问自己的 DeepSeek Harness 而构建的。它不是一个分享工具:URL 和生成的密码是给你自己用的,而不是用来分发给别人的。

免费、无需账户、无需注册。 dsh-share 使用 Cloudflare 快速隧道(cloudflared)通过 HTTPS 暴露你本地的 dsh Web 服务器。无需 Cloudflare 账户、无需 API 令牌、无需 ngrok authtoken —— 只需点击 Start,你就会得到一个公共的 https://.trycloudflare.com URL,可以在任何设备上打开。

dsh-share 控制窗口

使用 DeepSeek v4 Flash 构建。 本仓库中的代码由 DeepSeek v4 Flash 模型编写。

⭐ 如果 dsh-share 为你节省了一小时,请给仓库点个 star —— 这能帮助其他人发现它。

演示

下载

从发布页面获取适用于你平台的最新安装程序:

| 平台 | 格式 |
| macOS | DMG / zip |
| Windows | NSIS 安装程序 |
| Linux | AppImage |

工作原理

┌─────────────────────────────── Your desktop ───────────────────────────────┐
│ │
│ dsh-share (Electron app) │
│ │ │
│ ├─ 1. starts dsh web ──────────────► dsh web server │
│ │ (--trusted-host ) 127.0.0.1: │
│ │ │
│ ├─ 2. local basic-auth proxy ───────► forwards HTTP + WebSocket │
│ │ (username / password) to dsh on loopback │
│ │ │
│ └─ 3. cloudflared quick tunnel ─────► https://.trycloudflare.com │
│ (no account / token) │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
│
│ HTTPS (Cloudflare edge)
▼
┌─────────────────────────────── Cloudflare ──────────────────────────────────┐
│ Free quick tunnel — terminates TLS, routes to your machine │ └──────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────── 任意设备 ─────────────────────────────────┐ │ 手机 / 笔记本电脑 / 远程浏览器 │ │ • 打开公开 URL,或 │ │ • 使用 dsh-mobile 应用扫描二维码 │ │ • 使用生成的用户名 / 密码进行身份验证 │ └──────────────────────────────────────────────────────────────────────────────┘

该应用将你原本需要手动配置的各个部分打包在一起:

1. 启动一个指向 dsh Web 服务器的 Cloudflare 快速隧道(cloudflared)——无需账户、无需令牌、无需注册。
2. 在 dsh 前面放置一个小型 本地基本身份验证代理(快速隧道本身不提供身份验证)。
3. 以公开 URL 作为 --trusted-host 启动 dsh web,这样浏览器信任围栏就能接受通过隧道发来的 /api 调用。
4. 在控制窗口中向你显示公开 URL、凭据和二维码。

功能特性

- 零摩擦启动 —— 只需点击 Start。无需 ngrok 账户、无需 authtoken、无需配置设置。
- 免费的 Cloudflare 快速隧道 —— 无需账户、令牌或注册。
- 首次运行安全警告 —— 在启动隧道之前,你必须确认一个模态对话框。
- 自动生成的凭据 —— 存储在 ~/.config/dsh-share/auth.json 中,可从 UI 重新生成。
- 移动端访问 —— 控制窗口中有一个二维码;使用 dsh-mobile 应用扫描它即可从手机连接。
- 跨平台构建 —— DMG/zip(macOS)、NSIS(Windows)、AppImage (Linux),并支持可选的代码签名 + 公证。
- 自动应用更新 —— 启动时检查 GitHub releases,在后台下载新版本,并在退出时或通过一键点击安装。
- GitHub Actions CI —— 构建全部三个平台,并在 v 标签的 releases 中附加构建产物。

为什么需要它

dsh web 默认只信任回环地址。要从另一台设备访问它,你必须
将当前的隧道域名作为 --trusted-host 传入 —— 而免费套餐的域名在每次重启时都会轮换。这个应用将整个流程自动化了。

从源码运行

npm install
npm start

构建安装程序

npm run dist # 当前平台
npm run dist:mac # macOS(DMG + zip)
npm run dist:win # Windows(NSIS)
npm run dist:linux # Linux(AppImage)

在 dist/ 中生成安装程序。应用图标由
node scripts/generate-icon.js 生成(无需图像工具)。

代码签名与公证

签名是可选的,由环境变量驱动,因此未签名的构建开箱即用:

| 平台 | 环境变量 | 效果 |
| macOS | CSC_LINK, CSC_KEY_PASSWORD | 对应用签名 |
| macOS | APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_ID | 公证(通过 scripts/notarize.js) |
| Windows | CSC_LINK, CSC_KEY_PASSWORD | 对安装程序签名 |

GitHub Actions
.github/workflows/build.yml 会在每次 push/PR 时构建 macOS、Windows 和 Linux(AppImage),并在你推送 v 标签时创建一个包含所有产物的 GitHub release。将上面的签名密钥添加到仓库的 Actions secrets 中,即可获得已签名/已公证的构建。

自动 harness 更新

.github/workflows/update-dsh.yml 每天运行(也可手动触发),让捆绑的 DeepSeek Harness 保持最新,无需任何手动步骤:

1. scripts/update-dsh.js 检查 npm 上最新的 @deepseek-ai/dsh。如果存在新版本,它会升级所有 @deepseek-ai/ 依赖,将任何新的 harness 包添加为直接依赖(electron-builder 会丢弃 peerDependencies,因此它们必须作为直接依赖才能被提升),并将应用版本升级为最新 v 标签之后的下一个补丁版本。
2. 它会打开一个 PR;build.yml 会在该 PR 上构建全部三个平台。
3. 当构建通过后,PR 会被自动合并,切出一个 v release 标签(这会触发 release 任务),并更新 gh-pages 下载按钮以及“Bundled DeepSeek Harness”版本说明。

如果上一次运行合并了 PR 但未能切出 release,下一次运行会检测到缺失的标签并直接切出,而无需新建 PR。你可以随时通过 Actions → update-dsh → Run workflow 手动运行它。

自动应用更新

已安装的 dsh-share 副本会通过 electron-updater 自行更新。启动时应用会检查 GitHub releases 页面;当存在更新版本时,它会在后台下载并在退出时安装——或者通过控制窗口中的 Restart & install 按钮立即安装。更新会像初始安装一样经过签名和公证,因此 Gatekeeper 会接受它们。electron-updater 读取的 latest.yml 清单由 build.yml 上传到每个 release。

工作原理(底层机制)

Electron main
├─ pick a free port for dsh (never collides with a dsh already on 3080)
├─ createAuthProxy(port, user, pass) → local basic-auth reverse proxy
│ └─ forwards to the app's dsh on 127.0.0.1: (HTTP + WebSocket)
├─ startTunnel(proxyPort) → cloudflared tunnel --url http://127.0.0.1:
│ └─ parses the https://.trycloudflare.com URL from cloudflared's log
├─ startDsh(host, dshPort) → node @deepseek-ai/dsh web --trusted-host --port
└─ control window shows URL + credentials + the local dsh port + logs

凭据在首次启动时生成,存储在 ~/.config/dsh-share/auth.json 中,并可从 UI 重新生成。

安全说明

- 隧道使用 HTTPS(Cloudflare)和 basic auth(本地代理)。
- 重新生成凭据会立即使旧密码失效。
- 该 URL 和密码让你可以从手机或 iPad 访问你的机器。
dsh-share 旨在让你访问自己的 DeepSeek Harness,而不是用于分享——请将链接和凭据保密。隧道是临时的:你一停下来它就被销毁了,所以没有永久的公共端点。
完成后停止隧道。
- 先在 http://localhost:3080 上添加工作区——文件选择器(host.pickDirectory)在设计上仅限回环地址。
- 在使用该应用之前,停止任何你已经在运行的 dsh。 该应用会针对同一个 ~/.dsh 配置运行它自己的 dsh;如果你的 dsh 已经启动,两者会冲突(EPERM / 502)。该应用会检测端口 3080 上的 dsh 并警告你。

配置

| 环境变量 | 用途 |
| DSH_BIN | @deepseek-ai/dsh/lib/bin.js 的路径(覆盖自动检测) |
| CLOUDFLARED_BIN | cloudflared 二进制文件的路径(覆盖捆绑/PATH) |
| DSH_SHARE_CONFIG_DIR | 覆盖配置目录(默认 ~/.config/dsh-share) |

许可证

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

用手机浏览器安全访问你电脑上的工作区

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