前言¶
DeepSeek Harness(DSH)从 0.2.1 起在客户端内置了官方右侧栏终端:PTY、传输、会话列表、主题与 xterm 均由 @deepseek-ai/dsh-client-ui-sidebar-terminal 提供。若你更习惯在 composer 下方整行使用终端、或希望托盘与标题栏的「打开终端」落到同一块区域,再叠加复制粘贴快捷键与 shell 里的 dsh 命令,单独再搭一套终端栈既重复又难维护。下面介绍社区插件 dsh-terminal-button(维护者 whiteS18,分类:客户端):它不实现第二套 PTY/WebSocket/xterm,而是把官方终端渲染到会话列底部,并补上官方未覆盖的桌面入口与 CLI shim。
这是什么¶
dsh-terminal-button 是 DeepSeek Harness 的客户端插件,简介为「Embedded terminal plugin for DeepSeek Harness」;当前 npm 包版本为 0.4.4,许可证 MIT,源码见 GitHub:whiteS18/dsh-terminal-button,目录页见 SkillHub:dsh-terminal-button。
从 0.4.0 起,插件定位是「官方终端扩展」:在 conversation.composer.dock 懒加载官方包 chunk lib/client.terminal.js 中的 TerminalBody,数据来自官方客户端服务 webTerminals。插件自身不包含 PTY、WebSocket、xterm 或会话恢复逻辑。
核心功能¶
底部面板¶
面板布局与 0.3.x 时代一致:composer 底部独占一行、与主界面同宽,顶部可拖拽调高度;头部显示会话 cwd,底部保留状态行(连接中 / 运行中 / 已退出 / 错误、路径、「重开终端」)。官方终端被 Host 回收或销毁后(重启、会话卸载、空闲回收),再次打开面板时会自动新建终端并在状态行提示,无需手动点「新建终端」。
关闭面板仅 detach:官方视图与 Host 进程保留,按官方「未附着终端」超时(默认 2 小时)回收;重新 attach 会收到全屏快照。插件通过窗口 hold 桥接,避免没有侧栏 Tab 的底部终端被侧栏开关误释放 hold。
复制与粘贴快捷键¶
在底部面板内:
Ctrl+Shift+C:复制选区Ctrl+Shift+V粘贴;Windows/Linux 上Ctrl+V也可粘贴Ctrl+C仍为 SIGINT;macOS 上Cmd+C/Cmd+V保持原生行为
实现方式为向官方 xterm 转发浏览器 copy 与官方 paste 事件,选区与输入仍由官方渲染器处理(0.4.4 以 DOM 桥接补回 0.4.0 重构时丢失的快捷键)。
桌面「打开终端」入口¶
托盘、设置页、标题栏的「打开终端」在 Host 端 patch desktopRuntime.openTerminal,重定向到底部面板(SSE /dsh-terminal/events 通知前端)。若在插件设置里选择 系统弹窗,则放行原生行为,直接弹出系统终端窗口。
dsh 命令 shim¶
桌面版没有独立 dsh 可执行文件时,官方终端启动子进程通常只透传 DSH_SESSION_ID。插件 patch ctx.subprocess.spawnTerminal,把临时目录中的 dsh.cmd / dsh 前插到 PATH——官方右侧栏终端与底部面板均生效,且不会把任何 DSH_* 变量重新注入 shell。
显示位置与新会话界面¶
在 插件 → 插件列表 → 本插件详情 →「终端显示位置」 可选:
- 底部面板(默认)
- 系统弹窗
旧配置中的 sidebar 会自动归一为底部面板。右侧栏终端仍由官方提供。
进入「新会话」/空白会话(hero)界面时,底部面板会收起,且不会在发出第一条消息后自动弹回;只有明确点击终端图标才会重新挂出(监听 data-content-phase="hero")。
仍由官方负责的能力¶
主题跟随、OSC 调色板、光标对比度、鼠标选择、字体与字号、Shell 选择(含 preferredShell)、终端数量上限、跨刷新恢复等,均使用官方终端实现,本插件不重复实现。
兼容性与依赖¶
- 需要 DSH Desktop 0.2.1-rc.2 及以上。
- Profile bundle 中须启用官方终端插件
@deepseek-ai/dsh-client-ui-sidebar-terminal(dsh-web-app默认会注入)。 - 客户端通过官方
modules.importChunk()载入渲染组件,通过webTerminals复用视图;Host 端需要webServer与subprocess服务。DSH 若改动上述契约,插件需跟随适配。
安装与启用¶
桌面 profile 安装(命令来自项目 README):
dsh plugin --profile desktop add dsh-terminal-button
本地开发目录安装:
dsh plugin --profile desktop add /绝对路径/dsh-terminal-button
启动顺序决定是否需要重启:插件 bundle 在 DSH 进程启动时组合,安装命令只改磁盘上的 profile 文件。
- 先安装 → 再启动:直接生效。
- 先启动 → 再安装:装完后须完全退出并重新启动 DSH Desktop。
仅修改 client.js(客户端半部)时,client-hmr 可热更新或刷新窗口;修改 index.js(Host 半部)须重启 DSH Desktop。
安装后可用 Host 健康检查确认 Host 半部已加载(<port> 换成本机 DSH 端口):
curl http://127.0.0.1:<port>/dsh-terminal/health
正常应返回 {"ok":true}。
典型用法¶
- 按上文命令安装并确保 DSH Desktop 已重启(若安装时 DSH 已在运行)。
- 在会话 composer 区域使用终端图标或桌面「打开终端」入口,终端出现在底部面板(除非设置为系统弹窗)。
- 在面板内用
Ctrl+Shift+C/Ctrl+Shift+V(或 Linux/Windows 下的Ctrl+V)处理复制粘贴;需要时在状态行使用「重开终端」。 - 在终端 shell 中直接调用
dsh(PATH 已由插件 shim 注入)。 - 需要外置系统终端时,在插件详情把「终端显示位置」改为 系统弹窗。
调试时可打开 DSH Developer Tools(标题栏扳手或 Ctrl+Shift+I),在 Console 查看 window.__DSH_TRANSPORT__、window.__DSH_BOOT__ 等;底部面板加载失败时,面板内会显示原因(例如官方 chunk 不可用或 webTerminals 服务缺失)。
适用场景与注意¶
适合:已在用 DSH Desktop、希望 composer 下方整行终端、统一桌面「打开终端」行为,并在 shell 里使用 dsh CLI 的开发者。
注意:
- 插件 Host 半部以当前 DSH 进程权限运行;安装前请阅读 源码与 LICENSE,自行评估信任边界。
- 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是对官方终端的扩展而非替代整套终端栈。
- 0.4.x 为「官方终端扩展」架构;0.3.x 为插件自带终端的旧实现,升级路径与变更见仓库 CHANGELOG.md。
结尾¶
dsh-terminal-button 把官方 @deepseek-ai/dsh-client-ui-sidebar-terminal 接到 composer 底部,并补齐桌面入口重定向、复制粘贴快捷键与 dsh PATH shim,避免重复维护第二套终端。安装命令为 dsh plugin --profile desktop add dsh-terminal-button;详情与 issue 见 GitHub,目录索引见 SkillHub 插件页。