Back to home

chenshutian9610

deepseek-harness-terminal-plugin

DeepSeek Harness 网页版终端插件

Stars
0
Language
TypeScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-web-terminal

dsh-web-terminal 是面向 DeepSeek Harness 0.1.0-rc.5 的 Web 终端插件,为 dsh-web 提供跟随当前 Session 工作区的交互式终端。

终端嵌入当前 Session 的中间对话区域,显示在输入框下方并随对话区贴底;打开时参与正常布局,把输入框向上推而不是覆盖页面。终端会跟随网页当前的浅色/深色主题切换背景和前景色。按 Cmd+J(macOS)或 Ctrl+J(Windows/Linux)即可打开、隐藏并聚焦。插件使用 xterm.js 渲染,通过 Harness 的 subprocess 与 sandbox 扩展点启动 PTY,并在切换 Session、关闭页面或卸载插件时自动清理进程。

当前版本提供单终端和固定初始尺寸;由于 Harness 暂无 PTY resize 接口,窗口尺寸变化后 vimtop 等全屏程序可能无法完美适配。审批、提问等界面接管输入框期间,终端会随普通输入栏暂时隐藏。

怎么使用

安装

插件尚未发布到 npm,可从本地目录安装:

cd <插件目录>
pnpm install
pnpm build

cd <deepseek-harness 目录>
pnpm dsh plugin --profile web add <插件目录>

安装后需要重启 dsh-web

pnpm dsh web

如果安装时 dsh-web 已经运行,请先停止旧进程,重启后再对浏览器执行硬刷新。

打开终端

  1. dsh-web 中创建或选择一个 Session。
  2. Cmd+J(macOS)或 Ctrl+J(Windows/Linux)打开终端。
  3. 再次按快捷键或点击右上角关闭按钮可隐藏终端;重新打开后终端进程仍然保留。
  4. 切换 Session、关闭页面或停止 dsh-web 时,对应终端进程会自动结束。

怎么开发的

user:
/deepseek-harness-plugin-skill
给 dsh-web 开发一个终端, 通过 cmd(ctrl)+j 触发, 可行吗

---

assistant:
可行。Harness 0.1.0-rc.5 已具备所需扩展点,无需修改 agent loop。

最小方案:

Client 插件注册到 shell.overlay,显示底部抽屉。
捕获 Cmd+J / Ctrl+J,切换终端并聚焦。
用 xterm.js 渲染。
Host 插件通过 ctx.subprocess.spawnTerminal() 启动当前 Session 工作目录下的 PTY。
输入、输出通过现有 Remote API 长轮询传输,复用 /api 的安全与 Agent 身份校验。
插件卸载、Session 结束或页面关闭时终止 PTY。
注意:现有 ctx.terminals 面向模型、偏逐行交互,不适合直接做完整终端;原始 PTY API 当前也没有 resize。因此首版建议固定终端尺寸,支持 shell/REPL,但暂不承诺 vim/top 的完美自适应。

建议先做这个 MVP:单终端、当前工作区、Cmd/Ctrl+J、固定尺寸、自动清理。多标签和动态 resize 后续再加。

---

user:
实现

v1

user:
终端目前的这个样式可以改改吗?我想的是只在对话框那边显示,并且它打开的时候始终在聊天框下面 (打开的时候把聊天框往上顶)

先告诉我,可不可以实现?实现起来麻不麻烦?是否需要用很特殊的手段,还是官方就已经提供

---

assistant:
可以实现,难度不大。

目前终端注册在官方的 shell.overlay,所以会覆盖整个页面。可以改为注册到官方的 conversation.composer.dock:

终端只显示在中间对话区域,不覆盖侧边栏。
位于输入框下方。
使用正常布局,打开后终端增加高度,输入框自然向上移动。
不需要 Portal、DOM 查询、MutationObserver 或修改 Host/PTY 协议。
主要调整 Client 注册位置、组件样式,并在显示后重新执行一次 xterm fit()。
需要注意:这个官方 slot 原本主要用于输入框下方的状态信息,并非专门为大型交互面板设计,但技术上可以正常承载终端。若要求在审批/提问等“输入框接管”状态下也始终显示,则 rc.5 没有完全匹配的官方 slot,最好给 Harness 补一个专用位置,而不是写 CSS 黑魔法。

---

user:
做一版我看看

assistant:
(doing...)

---

user:
按快捷键后终端没有出来

---

assistant:
已修复。根因是原 slot 在空白新会话中不渲染。

v2

user:
能够识别网页的主题是浅色还是暗色,从而修改终端的背景颜色吗, 如果网页是浅色,终
端就是白色背景, 以此类推

---

assistant:
(doing...)

v3