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

多版本启动器 dsh-plugins/dsh-launcher

DeepSeek Harnessv0.3.5
dsh-plugins15 天前有提交已提供中文文档扫描:含敏感能力

桌面启动器,让多个 DeepSeek Harness DSH 版本和实例并排运行。

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugins/dsh-launcher
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · chat
装得上吗
npm 包存在但缺 main/exports/bin 入口声明,源码安装也可能起不来
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✓npm 包dsh-launcher @ 0.3.5
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 07:00:57

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 28 处,展示前 28 条)
  • 读取本地文件
    ci/bump-version.mjs:30
    const current = JSON.parse(readFileSync('package.json', 'utf8')).version
  • 读取本地文件
    ci/bump-version.mjs:37
    const doc = JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    ci/bump-version.mjs:39
    writeFileSync(path, `${JSON.stringify(doc, null, 2)}\n`)
  • 读取本地文件
    ci/bump-version.mjs:43
    const toml = readFileSync(tomlPath, 'utf8')
  • 写入本地文件
    ci/bump-version.mjs:49
    writeFileSync(tomlPath, toml.replace(tomlVersionRe, `version = "${next}"`))
  • 读取本地文件
    ci/bump-version.mjs:57
    const lock = readFileSync(lockPath, 'utf8')
  • 写入本地文件
    ci/bump-version.mjs:63
    writeFileSync(lockPath, lock.replace(blockRe, `$1${next}"`))
  • 写入本地文件
    ci/bump-version.test.mjs:23
    if (p.includes('/')) mkdirSync(parent, { recursive: true })
  • 写入本地文件
    ci/bump-version.test.mjs:24
    writeFileSync(full, content)
  • 执行外部命令来自配置/变量
    ci/bump-version.test.mjs:26
    const res = spawnSync(process.execPath, [join(process.cwd(), 'ci', 'bump-version.mjs'), tag], {
  • 读取本地文件
    ci/bump-version.test.mjs:34
    contents[p] = readFileSync(join(dir, p), 'utf8')
  • 删除本地文件递归
    ci/bump-version.test.mjs:36
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    ci/bump-version.test.mjs:86
    if (p.includes('/')) mkdirSync(parent, { recursive: true })
  • 写入本地文件
    ci/bump-version.test.mjs:87
    writeFileSync(full, content)
  • 执行外部命令来自配置/变量
    ci/bump-version.test.mjs:89
    const res = spawnSync(process.execPath, [join(process.cwd(), 'ci', 'bump-version.mjs'), 'v0.2.4'], {
  • 读取本地文件
    ci/bump-version.test.mjs:95
    assert.match(readFileSync(join(dir, 'package.json'), 'utf8'), /"version": "0 2 5"/)
  • 删除本地文件递归
    ci/bump-version.test.mjs:96
    rmSync(dir, { recursive: true, force: true })
  • 读取本地文件
    ci/check-versions.mjs:5
    const pkgVersion = JSON.parse(readFileSync('package.json', 'utf8')).version
  • 读取本地文件
    ci/check-versions.mjs:6
    const cargoVersion = readFileSync('src-tauri/Cargo.toml', 'utf8').match(/^version = "([^"]+)"/m)?.[1]
  • 读取本地文件
    ci/check-versions.mjs:7
    const tauriVersion = JSON.parse(readFileSync('src-tauri/tauri.conf.json', 'utf8')).version
  • 读取本地文件
    ci/market-fetch.test.mjs:73
    const messages = JSON.parse(await readFile(new URL('../src/locales/zh-CN.json', import.meta.url), 'utf8'))
  • 读取本地文件
    ci/release-notes-render.mjs:89
    ? readFileSync(commitsFile, 'utf8').split('\n').map((s) => s.trim()).filter(Boolean)
  • 读取本地文件
    ci/set-version.mjs:16
    const doc = JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    ci/set-version.mjs:18
    writeFileSync(path, `${JSON.stringify(doc, null, 2)}\n`)
  • 读取本地文件
    ci/set-version.mjs:27
    const toml = readFileSync(tomlPath, 'utf8')
  • 写入本地文件
    ci/set-version.mjs:33
    writeFileSync(tomlPath, toml.replace(tomlVersionRe, `version = "${version}"`))
  • 读取本地文件
    ci/set-version.mjs:44
    const lock = readFileSync(lockPath, 'utf8')
  • 写入本地文件
    ci/set-version.mjs:50
    writeFileSync(lockPath, lock.replace(blockRe, `$1${version}"`))
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 多版本并排运行
  • 多实例并排运行
  • 桌面启动器

并排运行多个 DeepSeek Harness(DSH)版本和实例的桌面启动器。

README

由 DeepSeek 最新模型翻译生成
DSH Launcher 桌面启动器,让多个 DeepSeek Harness (DSH) 版本和实例并排运行。 Tauri 2 + Vue 3 + TypeScript + Sass + vue-router + vue-i18n + Arco Design Vue。 预览 Preview 功能 - 多版本安装:查询 npm registry,把多个 @deepseek-ai/dsh 版本装进互相隔离的目录,彼此永不干扰。 - 多实例管理:每个版本可以建多个实例,各自拥有独立的名称、配置档和运行时环境变量。 - 三种 DSH_HOME 模式: - 复用/共享已有的 DSH_HOME; - 自动采用用户默认的 ~/.dsh; - 为每个实例单独创建 DSH_HOME(自动在应用数据目录下创建并注册)。 - 一键启动:在首页选好实例和配置档即可启动;启动器解析 dsh web 打印的 URL,在专用 webview 窗口里打开 DSH Web GUI。 - 环境变量覆盖:在实例设置页增删运行时环境变量,启动时注入子进程(DSH_HOME 是保留项,始终由启动器按所选 DSH_HOME 注入)。
展开完整文档(README 剩余 1 节)
DSH Launcher

桌面启动器,让多个 DeepSeek Harness (DSH) 版本和实例并排运行。

Tauri 2 + Vue 3 + TypeScript + Sass + vue-router + vue-i18n + Arco Design Vue。

预览

Preview

功能

- 多版本安装:查询 npm registry,把多个 @deepseek-ai/dsh 版本装进互相隔离的目录,彼此永不干扰。
- 多实例管理:每个版本可以建多个实例,各自拥有独立的名称、配置档和运行时环境变量。
- 三种 DSH_HOME 模式:
- 复用/共享已有的 DSH_HOME;
- 自动采用用户默认的 ~/.dsh;
- 为每个实例单独创建 DSH_HOME(自动在应用数据目录下创建并注册)。
- 一键启动:在首页选好实例和配置档即可启动;启动器解析 dsh web 打印的 URL,在专用 webview 窗口里打开 DSH Web GUI。
- 环境变量覆盖:在实例设置页增删运行时环境变量,启动时注入子进程(DSH_HOME 是保留项,始终由启动器按所选 DSH_HOME 注入)。
- 插件市场:浏览发布到 DSH plugin market 的插件(https://dsh-plug.in/api/plugins.json),按名称/描述搜索,并安装到任意实例的配置档:
- 三个版本通道,用彩色图标字母区分 —— stable(releases / npm latest,绿色 R)、beta(pre-releases / npm next,黄色 B)和 alpha(GitHub 上最新 commit,红色 A);
- 安装流程是一个向导:选插件 → 选版本通道/版本 → 选实例 → 选配置档 → 创建任务 → 开始安装;
- 自动放行依赖构建脚本(onlyBuiltDependencies: ['']),并把装好的插件登记到配置档的 package.json(dsh.profile.bundles + dependencies),非 bundle 插件还会在 cordis.patch.yml 里插入一行。
- 按配置档管理插件(实例设置 → Plugins 标签页):按配置档筛选,查看其中已安装的插件,单独启用/禁用,也可多选批量启用/禁用。核心 @deepseek-ai/ 包会被隐藏。
- 系统托盘:
- 左键点击启动器托盘:打开并聚焦启动器窗口;
- 右键菜单:「Running profiles」子菜单为每个运行中的实例提供 Open / Stop,外加「Open launcher / Quit launcher」。
- 退出启动器会终止所有实例进程,不留孤儿进程。
- 每个运行中的实例一个托盘图标(issue #72,可在设置里关闭):
- 图标用实例自己的自定义图标,没有则回退到启动器图标;
- 悬停时显示 <instance> · <profile> · running (N active conversations);数量来自实例的 DSH 会话索引,每约 15 秒刷新一次;
- 左键单击打开实例的 Web GUI(TUI 配置档则打开其终端窗口),窗口已打开时将其置前;
- 右键单击提供「Open instance」/「Stop instance」。
- 关闭到托盘(可在设置中禁用)。
- 登录时启动(设置开关,通过 autostart 插件真实注册)。
- i18n:简体中文 / English;JSON 语言文件会被自动发现、热重载,并由 @intlify/unplugin-vue-i18n 通过 Vite 预编译。
- WSL2 实例(实验性):在 WSL2 发行版内创建 DSH 实例——Node.js / pnpm / 固定版本会自动安装到发行版内,实例的 DSH_HOME 位于发行版的 ~/.dsh-launcher/homes 下。创建完成后,HOME 的用法与本地实例一致(配置档增删改查、插件安装/启用/禁用/卸载、技能、MCP、图标、日志、整合包导出/导入、内嵌终端);文件通过 \\wsl$\ UNC 共享访问,已停止的发行版会自动启动。

界面

- Home:左侧面板(实例状态 → 关联实例/配置档下拉框 → 大号启动按钮 → 实例列表 / 实例设置);右侧预留给新闻区。
- Download:侧边栏含「Create instance / Download plugins」;创建页按 stable/prerelease 分组展示可安装版本;点击某个版本打开命名页(实例名、DSH_HOME 选择、底部的「Start download」)。插件页即市场;三步向导(插件 → 版本通道 → 实例/配置档)创建安装任务。
- Instances:名称、版本、DSH_HOME、配置档、运行状态与 URL、编辑/删除。
- Instance settings → Plugins:按配置档筛选、启用/禁用插件、多选批量启用/禁用(@deepseek-ai/* 核心插件隐藏)。
- Settings:五个分区——Startup(启动行为、数据目录、DSH_HOME 管理、环境导入、日志)、Personalization(语言、主题、新闻源、启动器图标)、Network(代理)、Resources(SKILL 仓库、插件目录源)和 About(版本、更新通道与检查、仓库 / issues / releases 链接)。

WSL 实例的插件与整合包依赖安装会在发行版内运行 pnpm(拉取 Linux 平台二进制),SKILL 仓库安装则用发行版自带的 git 克隆;从 Windows 侧通过 UNC 读写文件要求发行版处于运行状态,启动器会自动将其启动。

已知限制:WSL HOME 暂不支持存储重定向(storage 标签页)(需要在发行版内创建并验证符号链接);该页面会显示能力提示,而不是报错。

开发

前置条件:Node ≥ 20、pnpm、stable Rust(MSVC 工具链)、WebView2。

pnpm install
pnpm tauri dev # dev mode (Vite frontend + debug backend)
pnpm tauri build # bundle (produces exe / msi / nsis installers)

在浏览器里预览前端,不启动后端(mock 层由 localStorage 支撑):

pnpm dev # open http://localhost:1420

运行时数据

- 启动器配置与数据:%APPDATA%\in.dsh-plug.dsh-launcher\
- config.json:DSH_HOMEs / versions / instances / settings
- versions/<version>/:每个版本的独立安装目录
- homes/<instance name>/:专用 DSH_HOME(选用时)
- logs/<instance id>.log:实例运行时日志

架构

- src/:Vue 3 前端(页面、store、API 封装、i18n)
- src/api/index.ts:统一 API 层 —— Tauri 下走 invoke,普通浏览器里走 localStorage mock
- src-tauri/src/
- config.rs:配置模型与原子持久化
- commands.rs:全部 Tauri 命令(CRUD / 版本安装 / 实例启停 / 设置)
- plugins.rs:插件市场 —— 拉取目录、按渠道取版本(npm dist-tags + GitHub commits)、安装任务、profile manifest 注册与启用/停用
- tasks.rs:后台任务系统(create-instance / install-plugin),带进度与日志事件
- process.rs:实例进程管理(spawn / kill / URL 解析 / 环境变量注入 / 日志)
- tray.rs:系统托盘与动态菜单
- windows.rs:实例 webview 窗口管理

License

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

桌面启动器,让多个 DeepSeek Harness DSH 版本和实例并排运行。

回到顶部