Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DSH Plugin Installer

DeepSeek Harness(dsh)插件的可视化安装界面:一个跨平台桌面程序,用于浏览 profile、安装/卸载/更新插件 bundle、在 npm 上发现插件、编辑 profile 的 patch 层。

架构继承自 minimal-tauri-app 的极简风格: Tauri 2 + 纯 HTML/CSS/JS 前端(无框架、无构建步骤)+ Rust 后端

功能

功能 说明
环境概览 显示 dsh 版本与路径、DSH_HOME、Node/npm/pnpm 状态
Profile 管理 列出 $DSH_HOME/profiles/*,一键新建(默认挂 @deepseek-ai/dsh-base
安装插件 输入包名/name@version/git 地址/本地路径,流式显示 pnpm 输出,可取消
卸载 / 更新 对已安装 bundle 一键卸载或更新
插件发现 两个来源:npm registry 搜索(dsh-plugin 关键词);GitHub dsh-plugin topic 仓库搜索(github.com/topics/dsh-plugin),一键以 github:owner/repo 安装到当前 profile
Patch 层编辑 可视化编辑 cordis.patch.yml(dsh 长驻进程会热重载)

插件管理全部走 dsh 官方机制:dsh plugin --profile <name> add|remove|update <pkg>, 由 dsh 在 profile 目录里转发 pnpm 并自动对账 dsh.profile.bundles 层列表,与 命令行完全一致,不会产生额外状态。

目录结构

├── src/                  # 前端(静态文件,无构建步骤)
│   ├── index.html        # 单页布局:环境横幅 + profile 侧栏 + 主视图
│   ├── styles.css        # 深/浅色模式
│   └── main.js           # 通过 window.__TAURI__ 调用 Rust 命令、监听流式事件
└── src-tauri/            # Rust 后端
    ├── src/
    │   ├── lib.rs        # tauri 命令注册
    │   ├── dsh.rs        # dsh/DSH_HOME/工具链探测(PATH、corepack、安装锚点)
    │   ├── profiles.rs   # profile 读取/创建/编辑、bundle 版本解析(含单元测试)
    │   └── ops.rs        # 插件操作:dsh plugin 转发、流式输出、进程组取消
    ├── Cargo.toml
    └── tauri.conf.json   # 窗口与打包配置

本地开发

前置要求与 minimal-tauri-app 相同:Rust stable、Node.js LTS+,Linux 额外需要 libwebkit2gtk-4.1-devlibrsvg2-devpatchelfxdg-utils。此外还需要:

  • dsh 在 PATH 上(例如已执行过 npx @deepseek-ai/dsh web,或全局安装 dsh)。 应用从启动它的终端继承 PATH,建议从终端启动。
  • pnpmcorepack:安装插件需要。应用自动优先用 PATH 上的 pnpm; 没有时若存在 corepack,会临时生成一个 corepack pnpm shim 并注入子进程 PATH, 无需全局安装 pnpm。
npm install            # 安装 @tauri-apps/cli
npm run tauri dev      # 开发模式(打开窗口,热更新前端)
npm run tauri build    # 发布构建,产物在 src-tauri/target/release/bundle/

后端单元测试:

cd src-tauri && cargo test

工作原理

  • profile$DSH_HOME/profiles/<name>/ 下的目录(DSH_HOME 未设置时默认 ~/.dsh):package.json 持有有序的 dsh.profile.bundles 层列表, cordis.patch.yml 是用户 patch 层,pnpm-workspace.yaml 供 pnpm 管理外部插件。
  • bundle 是声明了 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } } 的 npm 包;dsh-base 等内置 bundle 从 dsh 安装目录解析(应用通过解析 dsh 二进制的真实路径定位安装锚点,与 dsh 自身的 resolveBundleDir 逻辑一致)。
  • 安装:后端 spawn dsh plugin --profile <name> add <spec>,stdout/stderr 逐行通过 plugin-line 事件推送到前端,结束时发 plugin-done 并返回完整日志 (前端刷新后也能重放)。取消操作会按进程组杀掉 dsh→pnpm 整棵进程树 (Unix kill -TERM/-KILL -<pgid>,Windows taskkill /T /F)。 spec 支持包名、name@versiongithub:owner/repo(GitHub 发现页直接生成)与 本地路径;git 源插件若被 pnpm 的构建脚本策略拦截,dsh 会给出 allowBuilds 配置指引。
  • 发现:npm 搜索直连 registry.npmjs.org/-/v1/search(CORS 开放); GitHub 搜索直连 api.github.com/search/repositories?q=topic:dsh-plugin[+关键词] (topic 是 dsh 插件仓库的官方发现机制,未认证限额 60 次/小时,限流时界面会提示)。

已知说明

  • pnpm 的最小发布年龄策略:pnpm ≥10 的供应链安全策略会静默跳过发布不足 24 小时的版本(本机策略 minimumReleaseAge: 1440 分钟)。刚发布的插件可能 被解析到较旧版本而暂未带 dsh.bundle 声明;此时 dsh 会提示"declares no dsh.bundle",属正常现象,可稍后 update 或显式安装 name@版本号
  • dsh 未找到时:安装/卸载/更新会返回明确错误;环境横幅会显示红色告警。 从 Finder 双击启动的应用 PATH 不完整,建议从终端 npm run tauri dev 启动。

多端构建

与 minimal-tauri-app 相同,.github/workflows/ 可用 tauri-action 构建 macOS(arm64/x64)、Linux(x86_64/arm64)、Windows 五个目标;打 v* tag 自动生成 带全部安装包的 Release。

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages