夜雨聆风学习资料网

ARTICLE · 1138294

dsh插件推荐 - dsh-TUI:把 DeepSeek Harness 搬进终端,像素鲸鱼加实时状态行,一条命令装上

dsh插件推荐 - dsh-TUI:把 DeepSeek Harness 搬进终端,像素鲸鱼加实时状态行,一条命令装上

PORT SLOT · 接口槽

dsh-TUI

把 DeepSeek Harness 的交互面搬进终端的插件——纯挂载、不改宿主一行源码,底栏那一行实时读数补上了终端里最缺的判断依据。

约 3502 字

约 9 分钟

终端界面
插件挂载
实时状态栏
开源工具

分享一个dsh插件;

dsh 有网页版还有桌面版,而把 Agent 放进终端里跑,是很多人的习惯。

这个插件就是解决这个问题,一个非常好看的命令行界面,喜欢在命令行使用的小伙伴可以试试;

它叫 dsh-TUI。

一句话说清它是干什么的:把 DeepSeek Harness 的整个交互面搬进终端。而且是纯插件挂载,不改宿主一行源码。

MIT 协议,TypeScript 写的,界面用 React 19 配 Ink 和 Yoga 渲染,打成一个 npm 包,Windows、macOS、Linux 都能跑。

SLOT 01

一、先说清楚它是个什么东西

npm install -g
dst
同一份会话数据

先说最直接的:你在浏览器里用的那一整套,它全给你搬到了终端里。

装法很朴素,就两行:

插入 · 两行

sh

npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui

dsh-tui

dst 是同一个程序的短别名。它挂在一个独立的 profile 上,所以 dsh-tui 和 dsh --profile dsh-tui 是一回事,你想回原来的界面,原来的那条命令也还在。

这里有个细节值得单独说。

它是插件,不是分支,也不是魔改版。它不 patch DeepSeek Harness 的源码,走的是宿主留出来的挂载点。所以哪天你不想用了,卸掉就是卸掉——不留补丁、不改配置、不影响你原本那套。

而且它和 Web GUI、ACP、headless 共用的是同一份会话数据。

这点很重要。你在终端里聊了一半的会话,回头打开浏览器还能接着看;反过来也一样。它不是另起一套系统,它只是同一套系统的另一个门面。

先搞清楚一个关系:它给的是界面,不是引擎。

模型怎么调、工具怎么跑、会话怎么存、上下文怎么压缩,这些全都还是 DSH 自己的事。

SLOT 02

二、它补的是官方留出来的那个空位

Web UI
turtle-ui
@tianyi

这里得交代一下背景。

DeepSeek Harness 官方的界面是 Web UI。命令行那条 dsh,管的是启动和配置,不是一个交互式的终端界面。

所以从它开源那天起,终端这一块就是空的。

空到什么程度呢——官方文档里写过 github:deepseek-harness/turtle-ui 这样一个仓库名,但那个仓库在 GitHub 上是 404。文档跑在了实现前面。

想用终端,就只能等社区。而社区确实有人动手了,做了好几版出来。

dsh-TUI 是其中被官方点名的那一个。

DSH 的官方负责人 Tianyi Cui(@tianyi) 公开推荐过它,原话是它「从 DeepSeek Harness 内测期间就持续开发,做得非常用心,补齐了 DSH 缺失的 TUI 界面」。

这里有两个信息量。

一个是时间:内测期就动手了,也就是官方还没开源、很多东西还在晃的时候。这种时候做插件,基本等于一边写一边追着上游跑。

另一个是口径:项目自己的说明里写得很清楚——「在 DeepSeek Harness 官方负责人推荐的社区插件里,dsh-TUI 是第一个」。

这话是有分量的。

因为它不是自封的。除了负责人推荐,它也被 DeepSeek Harness 官方渠道收录过,还上过 GitHub Trending 的 TypeScript 榜。

顺带说一句更大的背景:官方公开过一组数据,大约六成的 DSH 用户至少用一个第三方插件。

这个数字放在别的生态里不太常见。

它说明 DSH 那套「一切皆插件」的设计是真的成立了——官方把边界划得很清楚,自己不做的地方,留给了社区。dsh-TUI 就是长在这个缝里的一棵。

SLOT 03

三、真正让我服气的,是底下那一行

/compact
双击 Esc
Ctrl+B

回到那个问题:你在终端里看不见它。

dsh-TUI 给的答案,是屏幕最底下那一行。

工作状态配着一个活动动画,你能一眼看出它是在跑还是停着。旁边是上下文进度条,用了多少、还剩多少,一直摆在那儿。再过去是 TPS,也就是每秒吐多少 token;缓存命中率;effort 档位;token 数;还有一栏会话成本估算,子代理的开销也一起算进去。尾巴上是 Git 和会话的元信息。

这一行就是你在一整屏黑底白字里唯一能确定「它正常吗」的地方。

你想想看,长会话里最怕的是什么?不是它答错,是你不知道它还剩多少余量。

我特别喜欢上下文进度条那条。

不是因为它好看,是因为它把一件很虚的事变得可判断了——以前你只能凭感觉猜「是不是快撑不住了」,现在你看得见它爬到哪儿了,什么时候该 /compact,是你自己决定,而不是等它撞墙。

还有那个双击 Esc。

长会话里跑偏是常事:它理解错了你的意思,一路往下做了五轮,你才发现不对。

在别的终端工具里,这时候一般只有两个选择——忍着,或者重开一个会话把前面重讲一遍。

dsh-TUI 的做法是:双击 Esc,从历史里挑一条消息,从那个点重新开一条路。

前面的上下文不用重讲,原来的那条线也还在。

这个动作我第一眼看到的时候愣了一下——原来「后悔」这件事在终端里是可以被设计出来的。

说真的,我们好像已经默认接受了另一套:跑废了就重开,重开就把前面重讲一遍。

默认久了,就不觉得这是个问题了。

聊到这儿你可能会想,这些东西一直刷新,长会话不会卡吗?

会,如果实现得笨的话。

它这块的做法我看了挺久:屏幕外的消息行只留一个「测量过的高度」占位,那些子树根本不参与布局计算。所以你聊到两百轮,每一帧要算的东西还是屏幕上看得见的那点。

代价是代码复杂度上去了,换来的是长会话不掉帧。

这类东西用户不会夸,但一旦没有,你马上就感觉得到。

除了这些,日常要用的它基本都齐了:流式 Markdown、结构化的工具卡、/ 和 @ 补全、#L12-14 这种行号范围引用、历史搜索、中英双语界面。

图片能在支持的终端里直接缩略显示,Mermaid 代码块会画成字符图,LaTeX 公式输出成 Unicode——不是渲染成图,是拿字符拼出来的那种。

还有个 Ctrl+B 侧面板,终端够宽的时候能分出一栏放 todo 和后台任务。

第一次运行它会拉你走一个四步向导:填 API key、选语言和主题、挑模型和工作目录、定快捷键。这东西看着不起眼,但它决定了你装完那五分钟是顺手还是抓瞎——尤其是快捷键那一步,选错了后面每天都要别扭。

后面要改,/setup 可以再跑一遍。

会话这块也有个统一的管理器:/resume 翻历史会话,/home 回主界面,/agentview 看子代理在干什么,/bg 把活丢到后台,还有一个常驻的会话列表。

日常动作最常用的那几个都在:/new 开新会话、/compact 压上下文、/export 导出、/btw 插一句不打断主线的题外话。模型能热切换,不用重启。

你要是同时开着 VS Code,还有个挺方便的小通道——编辑器里选中的那段代码能直接落到终端的输入框里,不用来回复制粘贴。

这些东西单拎出来没有一个是新鲜功能,别家终端工具都有。

但它们是齐的,不是凑的。

SLOT 04

四、几个反着来的决定

像素鲸鱼
dsh-tui migrate
边界感

看完功能表,我想说几个它做得不太一样的地方。

第一个,它给终端工具做了一只宠物。

启动的时候,顶栏有一只像素鲸鱼,三种动画,点一下还能唤醒,第一个任务跑起来之后它就定格不动了。

坦率的讲,第一眼我以为这是玩心。

后来想想不是。终端工具最大的问题是「冷」——你打开它,面对的是一屏等着你敲字的黑。那只鲸鱼实际承担的是一个欢迎页的作用,它告诉你的手「可以开始了」,然后在你进入正题之后安静退场。

这个设计不解决任何效率问题,但它解决心情。

第二个,是它的边界感。

它在说明里反复强调一件事:自己只负责交互与呈现,会话日志才是唯一真源。

翻译成人话就是——你写下的东西归宿主管,它只负责让你看见。

这是个很克制的选择。因为「只负责呈现」意味着它放弃了很多插件最爱干的事:自己存一份状态、自己搞一套存储、自己定义一套会话格式。那些做法短期都有好处,长期都是坑——要么和宿主的升级打架,要么你换工具的时候数据带不走。

它没走这条路,所以它能和浏览器、headless 那几种形态共用同一套数据。

第三个,是它对 Windows 输入的处理。

这段在它的说明里占了相当长的篇幅,我看着有点意外。

原生 Windows 上,终端收到的输入记录会被拆包——一次按键被切成几段送过来。处理不好,这些碎片就会变成一串你看不懂的字符漏进输入框里。

它的做法是:把短时间窗口内被拆开的记录重新拼起来,拼不完整的那些按有界窗口处理(1 秒、64 字节),超出去就按原样放行,绝不无限期地攒着。

鼠标上报、拖放的 file:// 路径、终端主动发来的各种查询应答,它都做了针对性的认领和还原,而且强调只在确实有查询在途的时候才认领。

更少见的是,它还写明了哪些结论是「有证据支持」的,哪些只是「大概率没问题」。

这种透明度在开源项目里不多见。

第四个,它能把别人的会话历史搬过来。

一条 dsh-tui migrate,可以从 Claude Code、Codex 这些工具把历史会话导进来。只读源库、可以重复跑、结构保留。

换工具最烦的就是这段历史断档,它把这个成本削掉了一大块。

另外还有一个实验性的东西:dsh-tui --backend claude,用同一套界面去驱动 Claude Code 的命令行。

这块还是实验阶段,我没打算多说。

还有一个我没想到的地方。

它周围已经长出一圈生态了。

现在有一个围绕它的组织,把插件模板、配套的插件市场都放在里面,等于把「在 dsh-TUI 上做插件」这件事也铺好了路。

顺着这个再聊一句——判断一个东西是不是真的立住了,我一般不看它有多少人夸,看有没有人建立在它之上。

有人拿它当上游去做更深一层的整合,也有插件是挂在它上面跑的。

这个信号比任何推荐都实在。

SLOT 05

五、我的评价是

^22.19
danger-full-access
issue #582

先说门槛,都是装之前就该知道的。

Node.js 要 ^22.19 或者 >=24;pnpm 要 10 以上——pnpm 9 会让它启动之后立刻退出,而且几乎不报错,这个坑挺隐蔽;它必须跑在真实终端里,由 Web 那种非终端宿主拉起来的话会自动跳过。

还有一个容易忽略的:它不支持 Git URL 安装,得走 npm 包。源码依赖 workspace 包和子模块,用 git 装会被 pnpm 拦下来。

再一条,如果你还在 DSH 0.1.x 上,先别升到 0.12.0 以上,会被宿主的门禁直接拒掉;旧宿主继续用 0.9.3 那条线就行。

这就是插件形态的代价:宿主一变,它必须跟着变。

DSH 官方自己标的是 developer preview,说明里用全大写写着会有破坏性变更。所以任何「能不能长期依赖」的担心,指向的其实是整个生态,不是这一个插件。

还有一条,它更新之后新功能可能没生效——如果你机器上同时装过全局包,宿主读的可能是旧的那份补丁,得把两边同步到同一个版本。

快捷键这块也得提一句:部分组合键会被终端自己吞掉,macOS 自带的 Terminal.app 就是典型,切到 iTerm2、kitty、WezTerm 这类终端会好很多。

然后有一条我必须单独说。

它不实现独立沙箱。

这不是它的偷懒,是它的定位——它沿用当前 DSH profile 的文件、Shell、沙箱和审批策略。宿主怎么管,它就怎么管。

但作者的 Windows profile 默认是 danger-full-access 加审批 never。也就是没有沙箱,也没有确认。官方说明里写得很直白,要求你在接触敏感凭证或者来路不明的仓库之前,先把权限收紧。

有一说一,这是作者 profile 的默认值,不是插件的功能缺陷。把它说成「这个插件不安全」,是搞错了对象。

但它确实意味着你装完不该直接拿它去翻重要目录。

我跟你说,这一步很多人会跳过。

装完先跑两个命令看一眼:/preset status 和 /permission,确认实际生效的 preset、沙箱和审批到底是什么。这一步花不了一分钟。

还有一个跟安全有关的小缺口:issue #582 里提到,当权限基态就是最高档的时候,底栏反而不显示任何权限指示。也就是说最危险的那一档,恰恰是最没有视觉提醒的那一档。这个问题目前还开着。

项目地址再放一次:github.com/ccch1mneyyy/dsh-TUI

官网在 dshtui.com,上面有新手整合包,会帮你把 Node、pnpm、dsh CLI 和它一起装好。

如果你平时就在终端里跑 Agent,或者你正好也烦那个转圈的光标,值得装上试一次。

不喜欢,卸掉就行,不留东西。

SEATED · 已就位

AI实用talk · Patrick

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

👍 点赞
👀 在看
↗ 转发
⭐ 星标

谢谢你看我的文章,我们,下次再见。

AI实用talk

/ 作者:Patrick/ 这里分享好用的AI工具和skill/ 创作不易,三连支持一下吧~

相关学习资料