前言¶
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。