它到底是什么:从清单文件看起
DSH TUI 是一个发布在 npm 上的包,名为 @deepseek-harness-tui/dsh-tui,当前版本 v0.10.1,MIT 许可,作者署名 chimney。它的 package.json 只声明了一处与 Harness 的挂接点:dsh.bundle,指向随包发布的 ./cordis.patch.yml。清单里没有 dsh-plugin 字段,dsh-plugin 也不在它的 keywords 之列——所以把它理解成「一个自带 bundle 补丁的接口插件」是准确的,而「官方认定的 plugin 条目」则不是。
包从同一个入口导出两个可执行命令:dsh-tui 与 dst。安装后它落在自己独立的 DSH profile 里,README 明确写道:走完 install.sh 之后,dsh-tui 与 dsh --profile dsh-tui 是等价的——README 里那条 Windows 安全警告,针对的正是这个 profile。
界面本身是给终端写的 React 渲染器:react 与 react-reconciler 都是直接依赖,另有一批终端原语,如 chalk、cli-boxes、wrap-ansi、strip-ansi、cli-highlight、marked。整份依赖清单里没有任何 HTTP 客户端或分析上报库。
它实际提供了什么
README 的自我概括是:像素鲸鱼顶栏、实时工作状态行、流式思考展示、双击 Esc 时间回溯、上下文进度条与 TPS 仪表;工作过程中还会显示缓存命中率、推理等级、输入/输出 token 数以及 Git/会话信息。除外观之外,还有几块实打实的能力:
- 会话工作流:
/resume按工作目录分类浏览、搜索和预览历史会话,常用会话可固定并持久化到~/.dsh-tui;/agentview是会话总览,可把会话一键后台化,并对后台会话做派发、预览、回复与停止;此外还有/new、/compact、/export、/btw、模型热切换、原生 subagent、会话 fork 与自动更新。 - 输入编辑:
/vim编辑模式;鼠标选区编辑(拖选高亮、Shift+click 扩展、双击选词、Ctrl+C 复制);Ctrl+Shift+E或输入行⛶按钮打开全屏草稿编辑器,长草稿独占整屏,该功能可在/settings关闭。 - 终端内图片:用户附图与助手/工具结果中的持久图片块直接显示在会话记录中;Kitty graphics 或 Sixel 可用时给等比缩略图,否则保留同尺寸文字回退。全屏预览支持适应窗口、100% 原像素与 200%/400%/800% 放大,可平移,可用
←/→或底部‹/›切换且首尾不循环。底部「打开原图」直接调用系统看图程序,打开未经重编码的原始附件。 - 设置与诊断:
/settings、/permission、/plugins、/doctor、/skills。README 特别说明 dsh-TUI 不预装通用技能,/skills展示的是当前 profile、用户与项目已经发现的内容。 - 像素鲸鱼娘:22 帧手绘原图与闲置行为(摆鳍、拍尾、入睡、点击冒爱心)移植自
@lhh010的dsh-ui-whale,README 有署名致谢。开始第一个任务后它永久定格为静态帧,这也是作者敢说闲置零开销的原因。 - VS Code:README 记录了在 VS Code 集成终端里运行 dsh-TUI 的方式,配套扩展
dsh-tui-vscode已上架 Marketplace。
它同时把自己当作一个平台来经营:文档化插件接缝、生态组织、模板仓库,以及一个实验性的纯类型入口 @deepseek-harness-tui/dsh-tui/api。这些接缝的稳定性分级由作者自己标注为非正式,分为「稳定候选」「实验性」和「跟随上游」三档。
运行前提与安装
README 要求 Node.js、deepseek-harness,以及注册好的 DEEPSEEK_API_KEY;安装命令是 npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui,随后用 dsh-tui 或 dst 启动。README 自己没有写 Node 版本;包清单写了:engines.node 为 ^22.19 || >=24。请把这条理解为包的硬性要求,而不是 README 承诺过的前置条件。
peer 依赖覆盖了 @deepseek-ai/dsh-* 相当宽的一个区间,从 ^0.1.0-rc.6 一直到 0.1.5-rc.1,且全部标记为 optional。
安装过程有一个有据可查的坑:pnpm 11 默认阻止带安装脚本的依赖(如 @google/genai、protobufjs),因此 dsh plugin 可能报 ERR_PNPM_IGNORED_BUILDS。README 给出的办法是在 profile 的 pnpm-workspace.yaml 里补一段 allowBuilds,并说明 /update 与 dsh-tui update 会自动写入该配置。sharp 是可选依赖;缺图片依赖时保留文字回退。
终端图形:能力与边界
图形能力是自动探测的,优先 Kitty,其次使用 DA1 声明的 Sixel 能力。DSH_TUI_IMAGE_PROTOCOL=auto|kitty|sixel|none 可以覆盖协议选择,DSH_TUI_DISABLE_TERMINAL_IMAGES=1 则始终强制关闭预览。
README 同时划了三条边界:tmux 与 screen 下图形被禁用;非 TTY 输出与无障碍模式同样禁用;强制协议也不会在环境不允许时启用 inline Sixel。Windows 只在两处出现——Windows Terminal 的 Sixel 缩略图说明,以及安全警告——所有来源都没有给出操作系统支持列表。因此这里不写「支持 macOS」也不写「支持 Linux」,README 本身既没承认也没否认。
安全边界:需要直说
第一,README 带一条醒目的 Windows 安全警告:Windows profile 默认使用 danger-full-access,且 approval 默认是 never,这会授予工具不受限制的访问权限;它建议在敏感凭证或不可信仓库环境中启动前先检查并收紧 profile 配置。
第二,dsh-TUI 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与 approval 策略。README 对它自己的插件宿主边界同样坦白:插件与宿主同进程时,绝对路径加载无法被包 exports 阻止,所以它把这条描述为 trusted-in-process 边界,而不是安全沙箱,并明确拒绝「插件绝不可能调用某些东西」这类无限定承诺。权限预设来自 DSH 的 permissionPresets registry;README 说明该服务缺失、为空或损坏时 TUI 会 fail closed,不伪造名册。
关于「零核心改动」:README 的标语确实声称零核心改动、纯插件挂载,且卸载后不留下核心补丁。但包清单确实随包发布了一个 cordis.patch.yml,并把它声明为 dsh.bundle 的补丁目标。来源没有说明这个补丁文件的内容或作用范围。所以本条目不把「零核心改动」当作已确认事实,只把它当作作者的声明——诚实的表述是:这个插件随包带了一份作用范围未被描述的补丁。
已知限制与悬而未决的问题
- 状态:README 自己的徽章写的是 public beta。
- 接缝稳定性不是契约:README 自称分级为非正式,正式状态与兼容性协定以一份外部生态规范文档为准。
- 适配层工作按作者自述尚未完工:live 探针是分批推进的,若干宿主方法被描述为 staged 或 degraded 而非 live,另有一个适配模式明确只是 legacy 兼容发布路径。
test-utils公共子路径已被移除,理由是它包含可注入真实 activationId 的测试助手;需要无头测试的人被要求自行复制仓库内思路。api子路径为实验性。- 图片预览要重启才生效:改
/settings → 终端图片预览或terminalImages: false需/restart;已保存的/settings选择优先于 Cordis 配置;DSH_TUI_DISABLE_TERMINAL_IMAGES=1始终优先。 - 它与官方 Web GUI 是替换还是并存,来源没有说明。包里确实有一个名字与 web coexistence 有关的校验脚本,但 README 从未交代二者关系,本条目两种说法都不采用。
- 遥测与网络端点没有说明。依赖清单里没有任何 HTTP 或分析库,README 也没有记录插件自身的对外请求——但这是「没有证据」,不构成隐私保证。
- 星数与安装量不是 README 的数据。徽章区提到国内官方公众号推文收录、dshfind 与 GitHub Trending 收录,这些属于推广信号;「收录」「trending」这类徽章不是中立背书。frontmatter 里的
stars/forks来自本站自己的追踪,不来自本次查阅的来源。
什么时候用它,什么时候不要用
如果你的日常就在终端里,并希望 Harness 在那里也是一等公民式的交互应用,那它很合适:流式推理取代转圈等待,上下文与吞吐量一目了然,会话浏览与 fork 全在键盘上完成,Kitty/Sixel 终端里可直接预览图片,一次糟糕的回合可以回溯而不必重启。
不要指望它提供加固的执行环境。它继承你的 DSH profile 允许的一切,自身没有任何沙箱——在 README 记录的 Windows 默认配置下,那意味着工具访问不受限制且审批关闭,这和安全恰好相反。
如果你想要图片却又常在 tmux/screen 里工作,可以跳过:那里图形是关掉的。如果你在安装前必须拿到操作系统支持保证,同样跳过:来源没有给出平台列表,Windows 相关的表述只有一条警告和一条 Sixel 说明。若你需要一套冻结的 API,也要谨慎:公开接缝的分级是非正式的,一个公开入口是实验性的,而整个测试工具子路径已经在版本演进中被删除。
FAQ
dsh-TUI 是 DeepSeek 官方插件吗?
没有任何来源这么说,本条目也不这样认定。它由作者 chimney(ccch1mneyyy)发布在 @deepseek-harness-tui 这个 npm scope 下,MIT 许可。README 提到 DeepSeek Harness 官方公众号推文收录过它,也有第三方目录收录过它,但这些是「被报道/被收录」,不等于官方归属或官方支持。
它会沙箱隔离 agent 吗?
不会。README 写得直接:dsh-TUI 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与 approval 策略;它同时把自身的插件宿主边界描述为 trusted-in-process,而非安全沙箱。它警告的 Windows profile 默认值正是 danger-full-access 加 approval never,那会授予工具不受限制的访问权限。
安装它会改动 Harness 核心吗?
README 声称零核心改动、卸载后不留核心补丁;但已发布的包里确实带了 cordis.patch.yml,并声明为它的 bundle 补丁,而来源没有描述这个文件的内容与作用。请把「零核心改动」当作作者的声明而不是已核验的属性——如果这个区别对你重要,装之前先读那份补丁文件。
为什么图片显示成文字而不是缩略图?
要么是终端没通过 Kitty/Sixel 探测,要么命中了几条明写的排除项:tmux 与 screen 禁用图形,非 TTY 输出与无障碍模式同样禁用;缺少图片依赖或编码失败也会回退文字。在环境不允许的地方,强制指定协议并不能打开 inline Sixel。
支持哪些操作系统?
本次查阅的来源没有回答这个问题。包清单只约束了 Node(^22.19 || >=24),没有 os 字段;README 也没有发布平台列表,Windows 只出现在一条安全警告和一条 Sixel 缩略图说明里。因此本条目不写操作系统支持,而不是去猜一个。