前言¶
DeepSeek Harness(命令行工具是 dsh)是 DeepSeek 开源的智能体运行时,核心理念是「一切皆插件」:模型适配、工具、会话、沙箱,以及界面本身,都可以换成插件。官方入门路径很直接,装好 Node.js 之后执行 npx @deepseek-ai/dsh web,默认会起一套 Web UI。
这条路径适合浏览器里点选、看任务。但如果你长期待在 SSH、tmux 或纯终端环境里,打开浏览器并不是最顺手的方式。社区因此做了若干终端界面(TUI)插件。本文介绍的是其中定位比较克制的一个:deepseek-harness-tui。它不重写 harness,只用 Ink(React 的终端渲染器)把现有会话画到终端上。
需要先说清楚来源。插件由 gxinxing 维护,许可证是 MIT,目录分类为「界面增强」。社区插件目录页与 GitHub 仓库在写作时均显示 7 个 star。目录站点是独立的社区索引,与 DeepSeek / 幻方没有官方从属关系;仓库 README 也写明这是独立社区项目,与 DeepSeek、TokenDance 均无关联。
这是什么¶
一句话定位:deepseek-harness-tui 是挂在 dsh 上的终端聊天界面插件。准备好 TokenDance 的 API Key 和一份可用的 dsh 安装,运行 dsh --profile tui,就能得到一个几乎没有边框装饰的终端对话界面。
仓库 README 把它写成「约 800 行 UI 的精简插件,不是对 harness 的重实现」。package.json 也印证了这一点:它声明了 dsh.bundle.patch,依赖 @deepseek-ai/dsh-agent、@deepseek-ai/dsh-session、ink、react 等包,版本徽章对准的是 dsh 0.1.0-rc.6。也就是说,模型调用、工具执行、会话持久化仍由 Harness 自己的服务负责,这个插件主要负责把 session/event 投影成终端画面。
package.json 里 "private": true,当前不是作为公开 npm 包分发的。目录页给出的安装入口是 GitHub 源,而不是 npm install 某个 scoped 包名。
核心功能¶
下面这些能力来自插件目录页与仓库 README,两边描述一致。
1、对话流就是界面。 没有额外的盒子和装饰层。空会话时会显示 DeepSeek 品牌 banner(ANSI Shadow logo、渐变配色);一旦开始对话,主体就是 transcript。当前模型和当前工作目录放在底部较暗的 footer 里。
2、工具调用收成 cell。 执行中显示 ⠋ Running,结束后变成 ✓ • 1.2s(失败为 ✗)。工具输出合并进同一个 cell,颜色变暗,并按头尾截断(… +N lines),避免终端被原始日志刷满。
3、主题跟终端走。 通过 OSC 11 探测真实背景色,消息底色和行内代码 chip 按背景混合:深色终端叠 12% 白,浅色终端叠 4% 黑,不写死十六进制色值。调试时可以用环境变量强制背景:
DSH_TUI_BG=#ffffff
4、Thinking 可以折叠。 ctrl + t 切换推理轨迹的展开与收起。任意时刻按 esc,会通过 agent.cancel({ kind: 'user' }) 中止当前回合。
5、Markdown 尽量保持原形。 标题仍带 #,围栏代码块保留围栏,行内代码有 chip 底色。中英文和 emoji 按字符宽度折行,gutter 对齐。
6、视口钉在底部。 最新内容始终可见。忙碌时显示 braille spinner 和紧凑计时,例如 Working 5s。
仓库还附了 INTEGRATION-NOTES.md,记录 session/event 如何映射到 UI、patch 语义以及和 dsh profile / bundle 的衔接。那是给要改事件桥的人看的,日常使用不必先读完。
安装与启用¶
运行环境:Node.js ≥ 20,以及已安装的 DeepSeek Harness CLI。插件目录页给出的安装命令如下,在 DeepSeek Harness 终端中执行即可:
dsh plugin add github:gxinxing/deepseek-harness-tui
如需可复现安装,按目录页说明固定 commit 哈希:
dsh plugin add github:gxinxing/deepseek-harness-tui#<commit>
把 <commit> 换成仓库里实际的提交哈希。不要凭空猜测。
仓库 README 另外写了一条面向本地开发的装配路径:先全局安装 dsh,再 clone 源码并用 pnpm 安装依赖,最后把插件挂到名为 tui 的 profile 上。
npm install -g @deepseek-ai/dsh # harness(README 注明暂无 Homebrew tap)
git clone https://github.com/gxinxing/deepseek-harness-tui
cd deepseek-harness-tui && pnpm install
一次性写入 tui profile:
dsh plugin --profile tui add @deepseek-ai/dsh-headless
dsh plugin --profile tui add /path/to/deepseek-harness-tui
第二条里的路径换成你本机 clone 下来的目录。这条路径会把包以本地 link: 的方式挂进 profile,适合要改 UI 源码的人;只想试用的话,优先用目录页那条 github:gxinxing/deepseek-harness-tui。
插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应检查源代码仓库和许可证。
典型用法¶
按 README,启动前需要 TokenDance 的 API Key。可以导出环境变量,或写入 ~/.dsh/.credentials.yaml(权限 0600):
export TOKENDANCE_API_KEY=sk-...
dsh --profile tui
进入 TUI 之后:
ctrl + t:折叠或展开 thinkingesc:中断当前回合/help:查看全部按键与命令
模型路由也写在仓库里。profile 补丁 cordis.patch.yml 把 llm-deepseek 指到 TokenDance 网关:
llm-deepseek:
apiKeyEnv: TOKENDANCE_API_KEY
baseURL: https://tokendance.space/gateway/v1
README 说明 provider 注册在 ~/.dsh/settings.yaml 的 llm-pi-ai.providers.tokendance:OpenAI 兼容端点,thinkingFormat: deepseek,模型为 deepseek-v4-flash(默认)和 deepseek-v4-pro。换模型可以改该列表,或在 profile patch 里覆盖 llm-deepseek.model。
这里有一个仓库明确记录的限制。TokenDance 在流式返回后续 tool-call 增量时,name / id 可能是空串;官方 @deepseek-ai/dsh-llm-deepseek 适配器若用空串覆盖第一帧的 call id,Harness 会陷入 unknown tool "" 循环。README 给出了一次性地改全局安装里 node_modules/@deepseek-ai/dsh-llm-deepseek/lib/index.js 的守卫(把 !== void 0 改成对空串也拒绝),并注明该改动在升级 dsh 后会丢失,需要重新打。这不是插件本身的功能,而是当前网关与官方适配器组合下的已知问题;动手改 node_modules 前应对照仓库 README 原文,也值得关注上游是否已经合入修复。
适用场景与注意事项¶
比较适合下面几类用法:
- 已经在用
dsh,希望 SSH / 本地终端里直接对话,而不是再开 Web UI。 - 想看一个尽量薄的 TUI 示例:界面用 Ink + React,agent 逻辑仍交给 Harness。
- 能接受 TokenDance 这条模型路由,并准备好对应的 Key。
不那么合适的情况也要说清楚:
- 默认并不是「导出
DEEPSEEK_API_KEY就能用官方 API」。当前 profile 把llm-deepseek指到 TokenDance。若你的环境不是这条网关,需要自己改 patch,不能假定开箱即连 DeepSeek 官方接口。 - 社区目录里还有功能更完整的终端插件,例如同属「界面增强」的
dsh-TUI(Claude Code 风格、npm 安装)。deepseek-harness-tui的取舍是薄和可读,不是功能清单竞赛。选哪一个取决于你要的是一层皮,还是一套带会话工作流的完整 TUI。 - 仓库
package.json的engines要求 Node.js ≥ 20;README 徽章对准dsh0.1.0-rc.6。Harness 仍处于开发者预览,插件 API 可能继续变。 - 插件以当前
dsh进程权限运行。安装社区插件前应阅读源码和 MIT 许可证,确认自己接受这一权限模型。
小结¶
deepseek-harness-tui 做的事情很集中:在不重写 Harness 的前提下,用 Ink 给 dsh 加一个零边框的终端聊天界面。工具调用收成 cell、thinking 可折叠、主题跟终端背景走,这些都写在目录页和 README 里,并且两边能对上。
它是 gxinxing 维护的社区插件,MIT 许可,不是官方应用商店里的一等公民。安装命令以目录页为准:
dsh plugin add github:gxinxing/deepseek-harness-tui
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-tui-gxinxing/
GitHub:https://github.com/gxinxing/deepseek-harness-tui
DeepSeek Harness 官方仓库:https://github.com/deepseek-ai/deepseek-harness