DeepSeek Harness Hub
← 返回列表

wuwuzhige-sudo/dsh-terminal-panel

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

在 DeepSeek Harnessdsh网页对话视图中提供 终端 + SFTP 标签页。直接从浏览器在…

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/16 · 已提供中文文档

A manual Terminal tab for the DeepSeek Harness (dsh) web UI — run commands on the host machine, persistent cwd, sudo password prompt, command history.现在可以在web界面内直接执行命令行了

综合分
28.2
GitHub 分
28.2
用户评分
★ Stars
2
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add wuwuzhige-sudo/dsh-terminal-panel
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-terminal-panel

在 DeepSeek Harness(dsh)网页对话视图中提供 终端 + SFTP 标签页。直接从浏览器在 harness 宿主机上运行命令——绿字黑底的经典终端外观、持久化的 cwd、sudo 密码提示、命令历史——并通过同一个 SSH 连接在 SFTP 标签页中浏览/传输文件。

终端

功能特性

- 每个对话视图中都有 终端标签页(对话 · 轨迹 · 终端 · SFTP 顺序)
- SFTP 标签页紧邻终端——通过同一个 SSH 连接(相同的主机 / 用户 / 密码 / 密钥,无需二次登录)进行文件浏览:浏览目录、上传、下载、创建目录、删除文件和空目录
- 通过 harness 的 subprocess 服务在宿主机上手动执行命令
- 持久化工作目录——普通的 cd 可跨命令生效(cd ..、cd ~/x、相对路径、错误目标的错误提示)
- sudo 支持——以 sudo 开头的命令会以 sudo -S 运行;当 sudo 等待输入时,面板会遮蔽密码字段(在底行输入密码并按 Enter)
- 命令历史(↑/↓)、Ctrl+C 中断正在运行的命令、清屏、重置目录
- 两种主题——经典绿字黑底和现代黑字白底,通过面板控件旁的按钮切换;选择会在重新加载后保留(localStorage),并同时应用于两个标签页
- ANSI 转义清理——原始转义序列绝不会到达面板
- 输出上限——512 KiB 滚动缓冲区,因此长时间运行的输出不会撑爆内存

安装

该插件以 dsh profile 插件的形式发布。在运行 dsh web 的机器上:

1. 将包安装到 web profile(git 依赖;pnpm 会解析它)
dsh plugin --profile web add /dsh-terminal-panel

2. 在 profile patch 层中注册插件
cat >> ~/.dsh/profiles/web/cordis.patch.yml /.ssh/dsh-terminal

一次性设置好身份(一条命令,之后无需密码提示):

ssh-keygen -t ed25519 -N "" -f ~/.ssh/dsh-terminal
allow shell access (no port forwarding etc.):
echo "restrict,no-user-rc $(cat ~/.ssh/dsh-terminal.pub)" >> ~/.ssh/authorized_keys
for a remote target, add the same line to the target's authorized_keys
在 SSH 模式下,每条命令执行后都会发出一个完成标记,以便面板
知道远程命令何时结束(该标记会从显示中剥离)。
读取 stdin 的命令(例如 sudo -S)会保持 stdin 打开——在面板中输入密码
并按 Enter;输入内容会被遮蔽。

安全

⚠️ 此插件会在 harness 主机上执行任意命令。 任何能够访问 /sxec/ 端点的人都可以以目标用户的身份运行命令。

- 仅接受来自回环主机或 trustedHosts 中列出的主机的请求(DNS 重绑定防御)。
- 没有内置身份验证——当将其暴露到 localhost 之外时,请使用反向代理认证层(例如 Caddy basic_auth)保护 Web 服务器本身。
- SSH 密码(如果已配置)存储在用户级 config.json(0600)中,并通过 SSH_ASKPASS 传递给 ssh;在共享机器上优先使用密钥认证。
- 该端点会继承 dsh Web 服务器前端组件的暴露程度:仅将其绑定到回环地址,或在其前面放置一个带身份验证的代理。

工作原理

- 主机端(lib/index.js):一个 dsh 插件,在 harness Web 服务器上注册 /sxec/ 路由族(term-init、term-run、term-send、term-signal、term-reset、term-read、term-config、term-init-key、sftp-init、sftp-list、sftp-mkdir、sftp-rm、sftp-download、sftp-upload)。命令要么通过 node:child_process 在本地运行(绕过 harness 子进程沙箱),要么在配置了 sshTarget 时通过持久化的 ssh -t pty 会话运行;输出会经过 ANSI 清理并缓冲。SFTP 操作会使用相同的凭据启动短生命周期的 sftp -b - 批处理进程。
- 客户端(lib/client.js):在 conversation.view 中注册 终端 和 SFTP 槽位,并通过同源 fetch('/sxec/*') 调用与主机通信(无 WebSocket,无额外端口)。两个标签页共享一个设置面板和一个主题。

开发

git clone /dsh-terminal-panel
edit lib/index.js (host) / lib/client.js (client), then:
systemctl --user restart dsh-web   # host changes take effect immediately
client changes need a hard refresh of the page

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群