dsh-classic-mode: One-click Open DS Bot Web Configuration in Classic Sidebar

前言

DeepSeek Harness(DSH)可以在桌面端使用经典 Agent 壳,同时用另一个 Web 配置跑 DS Bot,供浏览器或平板使用。两套配置共用 ~/.dsh 数据目录,但 Web 实例需要单独启动,还要从命令行输出里拿到带 ?token= 的地址再粘贴到浏览器。手动做这几步容易打断工作流。dsh-classic-mode 由社区维护者 shiyoungwoo 发布,归类为客户端插件,在经典界面侧边栏底部增加入口,点一次即可在 Safari 中打开已配置的 Web 配置;若实例未运行会先拉起进程。它不负责安装 DS Bot,也不改动任一配置里的插件列表。

这是什么

dsh-classic-mode(npm 包名 @local/dsh-classic-mode,当前资料中版本为 0.1.7)是一个 DSH bundle:在经典 Agent 侧边栏底部的插件操作区注册「DS Bot」按钮(图形为内嵌的 DS Bot 鲸鱼静态资源,Apache-2.0),点击后由宿主侧启动或复用指定 profile 的 Web 服务,并用系统浏览器打开认证 URL。默认目标 profile 名为 classic,需在该 profile 中已启用 DS Bot 才能使用其团队界面。

架构与行为

插件拆成两半,职责在 README 中有明确说明。

宿主侧(index.js) 读取 ~/.dsh/classic-mode/state.json;若本插件此前在同一宿主下已启动过 Web 进程则复用,否则执行 dsh --profile <profile> --no-open --port <port>,从标准输出解析带 token 的 URL,写入 state,再打开浏览器。还会在适当时机清理「残留实例」(见下文)。

客户端侧(client.js) 通过 sidebar.footer.action 注册按钮,位置随经典侧边栏布局:展开时显示图标与标签,折叠为窄栏时仅图标;不悬浮在对话区域。按钮请求 GET /classic-mode/open。DS Bot Web 独立侧栏不提供此入口。

环境与依赖

  • DSH:>=0.2.1-rc.3 且 <0.3.0(Web 或 Desktop)。
  • Node:>=22.19。
  • 需要第二个已启用 DS Bot 的 DSH profile(默认名 classic)。
  • 默认用 macOS 的 open -a <browser> 打开浏览器;其他平台可将 browser 改成本机可用的启动方式,或自行读取接口返回的 url。

安装与启用

1、把包加入某一 profile(本地 checkout 或 GitHub):

pnpm add link:/path/to/dsh-classic-mode
# or: pnpm add github:shiyoungwoo/dsh-classic-mode

2、将仓库 cordis.patch.yml 中的条目追加到该 profile 的 bundle 列表,或依赖包自带的 patch 自动应用,然后填写 config(见下节)。

3、重启 DSH,或在 Plugins 页面切换该 bundle 的启用状态。

配置

仓库内 cordis.patch.yml 为占位值,四项都需按本机填写;建议在自己的 profile 补丁里覆盖,避免把绝对路径写进仓库:

字段 含义
cliPath dsh 启动器绝对路径,必填。Desktop 示例:/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh
profile 要拉起的 profile,默认 classic
port Web 服务监听的本机回环端口,默认 3090,需保持未被占用
browser 传给 open -a 的应用名,默认 Safari

示例覆盖(来自 README):

- id: local-classic-mode
  name: '@local/dsh-classic-mode'
  config:
    cliPath: /Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh
    profile: classic
    port: 3090
    browser: Safari

典型用法

完成安装与配置后,在已加载该 bundle 的经典 Agent 界面中,展开或折叠侧边栏均可看到底部 DS Bot 入口。点击后:

  • 若目标 profile 的 Web 实例已在运行(且属于当前宿主或已被正确复用),直接在 Safari(或你配置的 browser)中打开已有会话 URL。
  • 若未运行,宿主会 detached 启动 dsh --profile classic --no-open --port 3090(实际 profile/port 以配置为准),解析 token URL 后打开浏览器。

无需手动复制终端里的地址。插件不会替你安装 DS Bot,也不会修改 desktop 与 classic profile 各自的插件选择。

残留实例与占用会话

classic Web 服务以 detached 方式启动,会存活于启动它的 DSH 宿主进程之外。DSH 重启后,旧进程仍可能占用 Harness 会话,其他 DSH 实例(桌面端或另一个 dsh web)可能报会话已被占用。插件在 state.json 中记录宿主 PID,并在两处尝试清理:bundle 在新宿主进程中加载时;以及点击按钮时发现记录的 server 属于更早的宿主。仅当进程命令行同时包含本插件配置的 profile、port 且为 DSH 入口时才会发终止信号;PID 已被无关进程复用时只报告、不 kill。当前宿主自己启动的实例始终复用,不重启。

安全与权限

  • /classic-mode/open 在 DSH Connection 认证之前响应,会拒绝 Origin 与服务 host 不一致的跨站请求;仅接受 GET,其他方法返回 405。
  • 拉起的 Web 服务绑定回环地址;token 写在 ~/.dsh/classic-mode/state.json,权限随用户主目录,勿将该文件提交到版本库。
  • 插件以当前 DSH 进程权限运行,安装前应阅读仓库源码与许可证(启动器代码 MIT;内嵌鲸鱼素材见 DS-Bot-LICENSE)。社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-classic-mode 面向「桌面经典壳 + 独立 Web profile 跑 DS Bot」的分工方式,用侧边栏一键补齐「启动 Web 实例并打开带 token 的 Safari 页」这一步。进一步说明与 issue 见 GitHub:shiyoungwoo/dsh-classic-mode,目录索引见 SkillHub。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye