前言¶
DeepSeek Harness(DSH)的 Web 界面在浏览器中运行,而实际的工作目录和进程管理在宿主机上。当需要在本地文件管理器、终端或编辑器中查看当前会话的工作目录时,手动切换窗口会打断工作流。DSH 插件生态旨在解决这类集成问题,dsh-open-in-x 就是其中之一,它提供了从 Web 界面直接调用本机外部应用的能力。
功能介绍¶
该插件是一个 DSH bundle,核心功能是在当前会话的工具栏添加“在外部应用中打开”按钮。点击该按钮后,会话的工作目录会被传递给宿主机上已安装的本地应用。
支持的本地应用包括:
* 文件管理器:macOS Finder、Windows 文件资源管理器、Linux 默认文件管理器
* 终端:macOS 终端、Windows Terminal、常见 Linux 终端模拟器
* 代码编辑器:Visual Studio Code、Cursor、Windsurf、Zed
* IDE:IntelliJ IDEA、WebStorm、PyCharm、Android Studio
插件会自动检测宿主机已安装的应用并展示,仅展示“本机”(即运行 dsh web 的机器)上安装的软件。
安装与启用¶
安装前请确保环境满足要求:宿主机安装了 Node.js 22.19+ 或 24+,以及兼容的 DeepSeek Harness 版本(0.1.0-rc.6 或更高)。
- 执行安装命令:
npx @deepseek-ai/dsh plugin --profile web add dsh-open-in-x
- 安装完成后,重启
dsh web服务:
npx @deepseek-ai/dsh web
- 在 DSH Web 界面中,选择一个已有工作目录的会话,点击顶部工具栏出现的“在外部应用中打开”按钮,选择目标应用即可。
配置说明¶
安装后,可以通过修改配置文件来调整插件行为。默认启用所有内置 launcher,未安装的应用不会在界面显示。
支持以下配置项:
apps:
- finder
- terminal
- vscode
- cursor
- windsurf
- zed
- idea
- webstorm
- pycharm
- android-studio
allowRemote: false
allowLegacyPaths: false
defaultApp: vscode
quickOpen: true
allowRemote:默认为false。该选项控制是否允许远程 Web 连接触发宿主机的 GUI 进程。只有明确理解风险且通过可信反向代理访问时才建议开启。allowLegacyPaths:默认为false。用于控制是否兼容旧版 DSH 的 Workspace 菜单路径行为。新式会话由 Host 解析目录,旧版仅提供路径,默认禁用以保证安全。quickOpen:开启后,主按钮可直接使用defaultApp打开,下拉菜单仍可选择其他应用。
应用列表仅在 DSH Web 页面加载时检测一次,安装新应用后需刷新页面以更新列表。
工作原理¶
插件包含 Browser half 和 Host half 两部分:
* Browser half:优先注册到公开的 conversation.session.header.actions slot,仅向 Host 发送当前会话的 ID。
* Host half:在 ctx.webServer 注册唯一的 POST /__dsh/open-in-x 路由,接收请求并在宿主机启动选定的应用程序。
安全边界¶
为防止潜在风险,插件在安全设计上做了限制:
* 请求限制:只接受 JSON POST,请求体上限 8 KiB,严格拒绝额外字段。
* 访问控制:默认只接受 loopback(127.0.0.1)和同源请求。
* 操作限制:Browser 只能提交固定的 App ID 和 Session ID,不能提交可执行文件路径、参数或命令行文本。工作目录由 Host 根据 Session header 解析,启动进程使用 argv 数组且禁用 shell 拼接。
* 限流:相同 App 和工作目录的操作在短时间内会被限流,防止重复点击导致大量进程启动。
总结¶
dsh-open-in-x 解决了 Web 界面与本地文件系统及编辑器之间割裂的问题,适合需要频繁在浏览器中查看或编辑本地项目的开发者。更多细节可查看插件目录:https://www.skillhub.cn/plugins/nikoart-liu/dsh-open-in-x 或源码仓库:https://github.com/nikoart-liu/dsh-open-in-x。