Skip to content

Repository files navigation

DSH Launcher

DSH Launcher 是用于管理 DeepSeek Harness Profile 的 Windows 桌面启动器。它直接读取 DSH_HOME/profiles 中的现有 Profile,并通过 DSH 自带的 --dump-configplugin 命令保持配置解析与安装语义一致。

功能

  • 选择、刷新和同时运行多个 Profile。
  • 将已停止的 Profile 安全移入系统回收站,并保留全局 Session、日志和存储数据。
  • 查看 Bundle 层、额外依赖,以及可按需展开的最终生效 Loader 条目、配置和来源。
  • 从 Web / Headless 模板创建 Profile,按 Bundle 折叠选择内置条目,并添加本地插件库或本地包中的扩展。
  • 从本地包目录或 pnpm .tgz 文件安装插件。
  • 使用独立的 DSHgo Home 收录 GitHub 或本地插件仓库,识别 monorepo 中的 DSH 包、运行入口、Bundle、兼容插件和 Web Client 能力。
  • 为本地插件执行 pnpm 安装、构建与 .tgz 打包,并可启动或停止 dev / watch 持续编译进程。
  • 创建 Profile 时或创建完成后,从本地插件库添加 dsh.bundle Profile Bundle,或带 dsh.plugin.json 的兼容插件;支持稳定安装、开发链接、安全移除,以及启用或停用 DSHgo 管理的插件条目。
  • 自动为 Web Profile 选择可用端口,展示 stdout / stderr 和生命周期日志;支持删除单条已结束记录或清空当前 Profile 的已结束记录。
  • 可靠停止由当前启动器会话创建的进程;不会接管或终止外部启动的 DSH。

运行要求

  • Windows 10/11 x64。
  • DSH 源码目录已执行 pnpm installpnpm run build
  • DSH 支持的 Node.js 版本(默认可执行名为 node)。
  • 创建并安装 Profile 扩展时,系统中需要可用的 pnpm。

DSH 目录、工作目录、DSH_HOME、DSHgo Home、Node 可执行文件、首选端口和 Session Log 上传开关都可在“启动器设置”中修改。DSHgo Home 默认是 ~/.dshgo,也可由 DSHGO_HOME 覆盖;它与 DSH 自身的 Home 分离。开启“禁用 DSH Session Log 上传”会为 DSH 子进程设置 DSH_TELEMETRY_DISABLED=1;操作系统中已有的同名环境变量也会照常生效。

Profile 详情页可以在二次确认后将整个 Profile 目录移入系统回收站。删除前必须停止由当前启动器管理的运行实例;回收站操作失败时不会永久删除原目录。该操作只处理 DSH_HOME/profiles/<名称>,不会删除 DSH_HOME 中全局保存的 Session、日志或存储数据。

本地插件库与 Profile 插件

“本地插件库”管理 DSHgo Home 中的源码副本、构建产物和 Dev watcher。GitHub 来源必须是 https://github.com/owner/repository 形式;本地目录会复制或克隆到库中,原目录不会被修改。

仓库收录后,启动器会按新版 manifest 字段识别 dsh.bundledsh.client,并兼容旧的顶层 dshClient。包含有效 dsh.bundle.patch 的包按 Profile Bundle 安装;没有 Bundle 声明、但 package.json.main 与有效 dsh.plugin.json.main 指向同一运行入口的包会标记为“兼容插件”。兼容清单声明 Client 时,还必须同时提供一致的 dsh.client Web 声明和 exports["./client"],确保当前 DSH 能实际发现客户端入口。兼容插件由 DSHgo 安装为普通 Profile 依赖,并在 Profile 自身的 cordis.patch.yml 中写入带所有权标记的 Loader 条目;其他普通 Node 包不会自动挂载。稳定构建会按仓库声明执行 pnpm installbuildbundleprepare,检查入口文件后运行 pnpm pack;产物按仓库、包版本和完整 Git commit 隔离保存在 DSHgo Home。为了兼容 pnpm 10.26 及之后的依赖构建审核,DSHgo 发起的第三方仓库依赖安装会始终允许依赖生命周期脚本执行;这项信任只作用于启动器创建的安装子进程,不会修改全局 pnpm 配置。Dev 模式优先使用 scripts.devscripts.watch,并为 tsdown/TypeScript 提供 watcher 回退。

稳定安装会先把 .tgz 复制到 Profile 自己的 dshgo-packages 目录,因此以后移除本地库仓库不会破坏已安装 Profile。开发链接指向 DSHgo Home 中的源码副本;首次添加时会临时运行 watcher 并等待入口产物就绪,启动 Profile 时会再次自动启动对应 watcher,最后一个引用它的运行实例结束后会自动停止该 watcher。仍有开发链接或正在进行的开发安装引用仓库时,启动器会拒绝刷新或删除该仓库。

DSHgo 使用 Profile 内的 dshgo.plugins.json 记录自己管理的 Bundle 和兼容插件安装。移除时复用 DSH CLI 的 plugin remove;兼容插件还会校验并删除 DSHgo 自己写入的 Loader 配置块。外部安装的 Bundle 也可通过风险确认卸载,来源不明的普通依赖保持只读。添加和移除插件时 Profile 必须处于停止状态。

对于能从 Bundle patch 中安全识别稳定 Loader ID 的已安装 Bundle,以及由 DSHgo 写入 Loader 条目的兼容插件,“安装插件”页会显示启用状态,并允许通过 Profile patch 启用或停用。DSHgo 只管理自己写入的停用配置;如果相同条目已被用户配置或其他 patch 停用,界面会保持只读,避免覆盖手工设置。运行中的 Profile 也可以切换状态,其中停用前需要再次确认;Host 配置会热更新,但已经打开的 DSH Web 页面需要刷新后才会反映变化。

开发模式会把 Bundle 或兼容插件源码以 link: 形式装入 Profile,并在启动 Profile 时自动运行仓库的 Dev watcher。对于 monorepo 中通过 workspace: 聚合其他运行时包的 Bundle,DSHgo 会递归把这些包也链接为 Profile 的直接依赖,启动并等待各运行包自己的 watcher 生成入口,同时避免把附属 Bundle 重复加入 Profile 层;附属链接记录在 dshgo.plugins.json 中,并在最后一个引用它的 DSHgo 插件卸载时一并移除。新版 Web Client 已内置 HMR 接收能力;插件启用状态由 Host 热更新,但已经打开的 Web 页面仍需刷新。

DSHgo 会在调用 CLI 前逐包比较 DSH Host/Client workspace 源码与 manifest 声明的运行时产物,并单独校验 Web 前端构建;如果源码更新后没有完整构建,会提示先在 DSH 目录执行 corepack pnpm run build,避免某个较新的 CLI 文件掩盖其他包的旧产物。

构建和 Dev 模式会执行第三方仓库中的代码与生命周期脚本,只应对可信来源使用。停止 Dev 时,启动器只处理本次会话记录的 watcher 进程树。

开发与打包

corepack pnpm install
corepack pnpm run dev
corepack pnpm run dev:web
corepack pnpm run typecheck
corepack pnpm run dist

Windows 安装程序输出到 release/DSH-Launcher-<version>-Setup.exe

浏览器开发模式

执行 corepack pnpm run dev:web 后,访问终端打印的本地地址(默认从 http://127.0.0.1:5173 开始)。如果端口已被占用,服务会按顺序尝试下一个端口。该模式不是静态 Mock:浏览器通过仅监听回环地址的本地 HTTP/SSE 服务复用 ProfileServiceProcessManager,可以读取真实 Profile、创建 Profile、启动或停止 DSH,并实时查看日志。它适合通过 Codex 内置浏览器进行前端调试和 Agent 自动化测试;桌面发布仍然使用 Electron。

  • 可通过 DSH_WEB_PORT 修改起始监听端口;如果该端口被占用,也会继续向后查找。
  • 可通过 DSH_LAUNCHER_SETTINGS 指定设置文件;默认与 Windows 桌面版共用 %APPDATA%/dsh-launcher/settings.json
  • 可通过 DSHGO_HOME 临时覆盖本地插件库根目录,适合隔离测试。
  • 浏览器无法使用 Electron 原生目录选择框,Web 模式下点击路径选择按钮会要求输入绝对路径。
  • 结束开发服务前,应先停止界面中仍在运行的 DSH 实例和插件 Dev watcher;服务收到退出信号时也会清理自己管理的克隆、构建、打包及 Dev 进程。

进程管理边界

每个 Profile 在同一时刻最多存在一个活动实例,不同 Profile 可同时运行。启动器先请求子进程正常退出;若超过清理窗口,则仅对该次启动记录的 PID 及其进程树执行强制终止。启动器退出时会提示停止所有由它管理的实例。

About

DSH Launcher:DeepSeek Harness 的 Windows 桌面启动器与 Profile 管理器

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages