前言¶
DeepSeek Harness (DSH) 采用「一切皆插件」的架构。在 Web UI 环境中调试智能体或执行本地命令时,一个真实的终端是刚需。dsh-terminal 插件通过宿主端的 node-pty 和客户端的 xterm.js,为 Web UI 提供了一个开箱即用的交互式 shell 面板。
这是什么¶
dsh-terminal 是 DeepSeek Harness 的一个 Web UI 终端面板插件。它由 giiiiiithub 维护,采用 MIT 许可证。
插件包含宿主端和客户端两部分。宿主端利用 node-pty 在 DSH 服务进程中拉起真实的 shell(Windows 下走 ConPTY),客户端使用 xterm.js 进行渲染,从而实现全功能的浏览器终端体验。
核心功能¶
- 真实 PTY:基于
node-pty,提供真实的 shell 环境,而非简单的模拟器。 - 浏览器渲染:使用
xterm.js(@xterm/xterm 6),支持全色彩、光标、滚动回看(5000 行)以及 Ctrl+Shift+C/V 复制粘贴。 - 多标签会话:支持同时打开多个终端标签。折叠面板后,宿主端的会话会继续运行。
- 窗口交互:支持停靠模式(可拖动边缘调整高度)和浮动模式(可移动窗口并八向缩放)。
- 随项目打开:首个会话默认在 DSH 的第一个 workspace path 启动;找不到时回退到配置目录或用户主目录。
安装与启用¶
安装前需确保已安装 DeepSeek Harness,且 dsh web 能正常启动。同时,DSH 的 profile 使用 pnpm 管理依赖,需满足 pnpm >= 9。
第一步:安装¶
在 DSH profile 目录下执行以下命令:
dsh plugin --profile web add dsh-terminal
注意: 若安装环境使用 pnpm >= 10,可能会拦截 node-pty 的构建脚本。此时需将 node-pty 加入 profile 目录 pnpm-workspace.yaml 的 allowBuilds 配置中,然后重新执行安装命令。
第二步:重启服务¶
插件包含宿主端代码,必须重启 dsh web 进程才能加载:
# 停止当前进程(如 Ctrl+C),然后启动
dsh web
第三步:验证¶
刷新浏览器页面。在会话头部出现 >_ 终端按钮后点击展开。首次展开会自动启动一个默认 shell 会话(Windows 下为 cmd.exe)。
配置¶
默认配置可通过 profile 目录下的 cordis.patch.yml 覆盖。配置项会在插件 bundle 层之后应用。
- id: terminal
config:
shell: cmd.exe # 默认 shell(Windows 下默认即 cmd.exe,也可填完整路径)
cwd: <工作目录> # 新会话默认工作目录
env: # 追加到进程环境
LANG: "zh_CN.UTF-8"
| 配置项 | 默认值 | 说明 |
|---|---|---|
shell |
cmd.exe (win32) / /bin/zsh (macOS) / /bin/bash (Linux) |
新会话使用的 shell |
cwd |
客户端工作区路径;都没有时为用户主目录 | 新会话的工作目录。解析顺序:客户端请求参数(UI 默认传当前会话 workspace)→ 本配置 → 用户主目录 |
env |
— | 追加的环境变量 |
defaultReadTimeoutMs |
250 | read 长轮询上限 |
maxBufferBytes |
2,000,000 | 每会话输出缓冲上限,超出丢弃最旧字节 |
已知限制¶
- 会话管理:活会话上限为 64 个。超出后
open操作会先逐出已退出的会话,仍满则返回session-limit错误。已退出会话在宿主端保留 60 秒供读取退出码,之后转入 tombstone(上限 64 条)。 - 服务重启:DSH 服务重启会终止所有 PTY 会话。
- Kill 命令:
kill命令在 Windows 和 Linux 下的行为有差异。Windows 上会先执行taskkill强制清理进程树,再走node-pty正常终止;Linux 下按进程组终止。仅当子进程以CREATE_NEW_CONSOLE启动等特殊情况时,可能仍会残留。 - 折叠面板:折叠面板或非活动标签的会话输出在宿主端缓冲(上限 2MB),重新激活时会一次性回放。
结语¶
dsh-terminal 插件解决了 Web UI 环境下调试与执行命令的痛点,提供了真实、低延迟的终端体验。通过配置 shell、cwd 和 env,可以将其适配到不同的开发场景中。