前言¶
在 DeepSeek Harness(DSH)里跑命令、看 Agent 输出,往往离不开右侧边栏的终端。自带终端走共享网关与帧确认,冷启动、大量输出或主线程繁忙时,按键回显和滚动容易变慢。若你希望终端更像本机 shell、切换标签或刷新页面后会话仍在,就需要一条独立的 PTY 通道。下面介绍社区插件 dsh-fast-term(维护者 cyberElar),它占用与自带终端相同的右侧栏标签槽位,用专用 WebSocket 直连 PTY,并可选择完全替代自带终端 UI。
这是什么¶
dsh-fast-term 是 DSH 的客户端类插件:在右侧边栏提供真实 PTY 终端,输出经专用 WebSocket 传输,不经过共享网关与帧确认。插件支持会话保持(切换标签、刷新后自动重连并回放,PTY 不退出)、每标签独立 PTY、shell 可选并记忆,配色与字体跟随 DSH 主题,界面支持中英双语。当前在 SkillHub 插件目录 归类为「客户端」;源码与说明见 GitHub 仓库,许可证为 MIT。
核心功能¶
传输与会话¶
- 专用 PTY WebSocket:按键回显不排队、不等帧确认。
- 右侧栏标签,与自带终端同一槽位;
Ctrl + `可新建终端。 - 会话保持:切换标签或刷新页面后自动重连并回放,PTY 进程不退出。
- 每个标签独立 PTY;shell 可通过下拉选择,选择会被记忆。
界面与操作¶
- 复制粘贴、右键菜单、原生粘贴回退(
Ctrl+Shift+V)。 - 桌面版(Windows/macOS):终端聚焦时,单
Ctrl组合键(如 tmux 的Ctrl+B)优先发给终端;点击页面其它区域后恢复 DSH 快捷键。 - 新终端会从注册表重读系统
Path,安装新的命令行工具后无需重启 DSH。
输入权限与对外接口¶
- 默认只读:仅终端界面自身可输入;点击右上角「只读」胶囊可解锁,允许其它 WebSocket 客户端(含 Agent)写入。
- 可配置命令白名单:按整行前缀匹配(大小写不敏感),白名单外输入会被丢弃;配置保存在
~/.dsh/fast-term.json。 - 只读 HTTP API(仅回环地址并校验 Origin):列出终端、读缓冲、按行列重放画面、读写输入权限配置。
- 宿主注册 Agent 工具
dsh_fast_term_read:任意沙箱权限档下可读边栏终端,工具本身不写 PTY。
可选替代自带终端¶
通过在 profile 补丁层禁用 @deepseek-ai/dsh-client-ui-sidebar-terminal 后,「新建终端」入口与终端 UI 由本插件接管;终端服务仍在,其它依赖终端的插件不受影响。
性能(README 实测)¶
维护者在 Windows、隔离 profile 下对比自带终端与 dsh-fast-term,摘录如下(完整表格见仓库 README):
| 场景 | 自带终端 | dsh-fast-term |
|---|---|---|
| 冷启动到提示符(复用已存在 PTY) | 3.1–3.2 s | ~0.12 s |
| 2.99 MB 输出洪水 | 12.8 s | 2.9 s |
其余场景(空闲按键回显、主线程高负载)见官方文档,数值因环境而异,不宜外推为普遍结论。
安装与启用¶
要求 DSH 0.2.1-rc.2+(桌面版或 Web)。安装或更新后需重启 DSH 宿主。
桌面 profile 安装:
dsh plugin --profile desktop add dsh-fast-term
也可在 DSH「设置 → 插件市场」中搜索 dsh-fast-term。本地开发可将插件目录以 file: 形式加入:
dsh plugin --profile desktop add "file:<path>"
file: 安装是拷贝而非软链;修改 lib/ 后需重新执行 add,或手动覆盖 profile 下 node_modules/dsh-fast-term/lib/。
典型用法¶
- 打开右侧边栏,点「新建终端」或按
Ctrl + `。 - 点标题旁箭头选择 shell;双击标签名可重命名。
- 关闭标签会结束对应 PTY。
- 点右上角「只读」胶囊切换输入权限。
- 选中文本后复制;右键打开操作菜单。
Shell 默认值¶
默认 shell 回退顺序为 PowerShell(pwsh → Windows PowerShell → ComSpec)。可用环境变量 DSH_FAST_TERM_SHELL 覆盖,或在新建时通过下拉菜单选择。
快捷键(节选)¶
| 操作 | 快捷键 |
|---|---|
| 新建终端 | Ctrl + ` |
| 复制选中 | Ctrl+C / Ctrl+Shift+C |
| 粘贴 | Ctrl+V |
| 发送 SIGINT | Ctrl+C(无选中时) |
完全替代自带终端 UI¶
在 profile 补丁文件(例如 ~/.dsh/profiles/desktop/cordis.patch.yml)中加入:
- id: ui-sidebar-terminal
name: "@deepseek-ai/dsh-client-ui-sidebar-terminal"
disabled: true
重启后由本插件接管终端入口;删除该条目可恢复并存。
脚本读取终端输出¶
宿主端口以实际为准,示例:
curl "http://127.0.0.1:PORT/api/dsh-fast-term/list"
curl "http://127.0.0.1:PORT/api/dsh-fast-term/screen?id=<id>&cols=120&rows=40"
buffer 接口适合看尾部日志;全屏 TUI 宜用 screen。缓冲超过 4 MiB 后最旧输出会被丢弃,响应中 truncated 会标记。
适用场景与注意¶
适合谁:长期在 DSH 右侧栏跑 shell、需要低延迟回显、希望刷新页面后终端仍在,或要让 Agent/脚本只读抓取终端画面的开发者。
权限与安全:PTY 以当前 DSH 进程对应用户身份运行,无额外沙箱,与在本机开系统终端相当。安装前请自行审阅 源码 与 MIT 许可证。HTTP API 仅接受回环地址并校验 Origin;不要在不可信页面同源环境中暴露宿主端口。需要 Agent 向终端输入时,须在界面中先解锁「可输入」。
兼容性:在 DSH 0.2.1-rc.2 上验证,依赖 sidebarRightTabs 与右侧栏标签槽位;Windows 优先支持,POSIX 使用 $SHELL -l。标签重命名保存在宿主内存,重启 DSH 后恢复为 shell 名。替代自带终端依赖 bundle id ui-sidebar-terminal,DSH 升级若改名则补丁需跟进。
生态说明:DSH 采用「一切皆插件」的扩展方式;SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-fast-term 把右侧栏终端从共享网关路径拆到专用 PTY WebSocket,并补上会话保持、输入权限与只读 API,适合作为自带终端的并行或替代方案。问题与建议可走 GitHub Issues;版本与更新见 Releases。
- 目录页:https://www.skillhub.cn/plugins/cyberElar/dsh-fast-term
- 仓库:https://github.com/cyberElar/dsh-fast-term