dsh-minitui
A light TUI plugin for Deepseek Harness.
- Stars
- 0
- Language
- TypeScript
- Created
- Sep 8, 2026
- Updated
- Sep 8, 2026
Introduction
Version 0.1.0
项目概述
这是一个为 Deepseek Harness(dsh) 设计的 TUI 前端,和目前主流的 dsh-TUI 项目相比,这个项目会更加简陋。因为本人仅仅是个人开发者,没有团队,所以功能不是很复杂,界面也不是很华丽。这个项目是本人做的第一个 TypeScript 项目,整体框架由人工编写,有些功能实在写不出来,让 AI 帮忙实现。
需要注意的是,开发环境是 Ubuntu 22.04,且使用了 neo-blessed 第三方库,可能在 Windows 上的适配可能会有未知 bug 。Windows 用户请使用 WSL2 (感觉绝大多数使用 dsh 的 Windows 用户都会用 WSL 吧)。
项目特点
本项目和 dsh-TUI 最大的不同我认为就是在于简陋,或者好听点说,简洁。它是为代码工作者(尤其是后端)设计的。我的设计理念是 TUI 就应该是简洁的、以键盘交互为主的。因此本项目的界面里没有任何供鼠标点击的地方,只有纯粹的和 Agent 交互的输入框。这样可以规避每次启动 dsh 时打开 Web 界面再选择工作区的步骤,直接可以在项目目录打开 TUI 界面与 Agent 交互。
另外,本项目的界面参考了 OpenCode 的界面。很干净,没有艺术字,没有鲸鱼娘,只有输入框、对话框和一个监控区。
目前的功能就只有和 Agent 的对话,短期内可能会在左侧的监控区做一点文章,也希望各位开发者能提出需要的功能。但是我不打算做太复杂或者花里胡哨的功能,毕竟相比于 dsh-TUI 项目,我这个项目实在是蚍蜉撼树。如果是对于代码工作者很有用的功能,我一定会尽量加入。
功能介绍
输入区快捷键
| 功能 | 快捷键 |
|---|---|
| 发送 | Alt+Enter |
| 换行 | Enter |
| 补全 | Tab |
| 复制 | Ctrl+Shift+C |
| 粘贴 | Ctrl+Shift+V |
| 退出 | Ctrl+C |
这里设计成发送需要按下 Alt+Enter 才能触发,因为在与 Agent的交流中,使用 Markdown 格式效率更高,但是大多数和 AI 交流的场景按下 Enter 键都会直接发送,导致用户无法输入完整且清晰的 Markdown 语句。因此在这个 TUI 界面里,Enter 仅用于换行,不会用于发送消息。
输入区命令
除了 dsh 中原本的命令外,本项目还引入了一些其他的命令来实现一些功能。
-
/session本项目为了应对不使用点击切换会话的情况,新增了一个
/session命令用于切换同一个工作区目录下的会话或者创建会话。千万注意:无法切换到当前工作区以外的会话,这需要你先退出
TUI界面,切换到你需要的目录,再打开TUI界面。 -
/model虽然
dsh的 Web 端本身也有这个命令,但是不同的前端仍然需要重新实现,实际流程可能不同,因此在这里指出。本项目的
/model命令用于切换模型和推理等级。需要注意的是,目前只支持 Deepseek 本家的模型,不支持外接的其他模型。
自定义
本项目其实没有提供多少自定义功能,只有一些颜色和创建会话时的默认配置。第一次运行插件后,会在插件的根目录下生成一个 `userconfig.json` 文件。看变量名称你也能看懂是什么意思(毕竟 `json` 格式不支持写注释)。如果填写了不存在的值会导致插件打不开哦。
安装指南
本项目暂时还没有开源到 npm 仓库的想法,所以暂时只能通过 GitHub 仓库获取源码自己用 tsc 编译。整体的过程如下:
git clone https://github.com/AncientMoon114/dsh-minitui
cd ./dsh-minitui-0.1.0/
npm install
npx tsc
dsh plugin --profile minitui add link://这里需要填入minitui的绝对路径
然后就可以在项目目录里通过以下命令打开 TUI 界面:
dsh --profile minitui
如果您嫌弃这样调用太麻烦,我的建议是修改 ~/.bashrc ,添加缩写:
alias dsh-minitui='dsh --profile minitui'
如果遇到什么问题,可以在 Issue 界面提出。本人开发自理尚浅,如果给您带来了糟糕的体验,还请理性批评。
使用依赖
本项目使用了一些第三方库来实现前端的渲染,包括 neo-blessed 、marked 、marked-terminal和 streammark 等。
之所以在这里指出这一点,是因为我在实现过程中发现 streammark 在渲染时会导致代码块的边界显示异常,因此我手动修改了这个第三方库来实现更美观的显示效果。我已经通过 patch-package 工具打上了补丁,所以用户在安装依赖时是可以正常安装的,但是在之后的更新或者用户的全局环境变量中可能会有冲突,在这里指出这种可能性。