前言¶
DeepSeek Harness(命令名 dsh)把智能体运行时拆成可组合的插件:模型、工具、会话、沙箱和界面都可以在 Cordis 内核上增删。官方开发者预览页把这件事概括成 Everything is a plugin(一切皆插件)。随附的可交互入口是 Web UI(dsh web / --profile web),一次性任务走 headless profile。终端里要持续对话,官方安装并不自带一块交互式 TUI。
CLI 参考文档里曾经用 github:deepseek-harness/turtle-ui 当 profile 组合包的例子。这个组织仓库目前 404。Harness 维护者 turtle1999 在讨论区说明:那是一个没开的私仓,TUI 的定位之后会再考虑;公开可看的是 turtle1999/turtle-ui。仓库 README 写它是「某个周五下午做出的第一版 dsh UI」,内容来自原先的 packages/ui/tui。社区目录把它归在「界面增强」,简介是「原版 turtle UI 项目(原样提供,不担保)」。
需要先说明:下文引用的目录页来自独立社区站点 DeepSeek Harness 插件库,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。官方仓库是 deepseek-ai/deepseek-harness。本文按目录详情页、GitHub README / package.json / cordis.patch.yml / 源码,以及官方 CLI 参考和讨论区 #871 交叉核对,核实日期为 2026-08-18。
这是什么¶
turtle-ui 是一款界面增强插件,由 turtle1999 维护。npm 包名仍是 @deepseek-ai/dsh-tui,package.json 里 "private": true,不走公共 npm 发布,安装走 Git。许可证是 BSD-3-Clause,LICENSE 版权行写的是 Copyright (c) 2026, DeepSeek。GitHub 仓库描述是 as is, no warranty;目录页同期标注 6 星,仓库页面为 7 星。
它解决的问题很具体:给 dsh 补一块终端前台。职责边界在 README 里写清楚了——TUI 只负责终端呈现和输入;agent、模型、工具、持久化和 dsh 启动器仍归 Harness。实现上它是一套 profile 组合包(bundle):package.json 声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },装进某个 profile 后会自动叠一层 patch,骑在 @deepseek-ai/dsh-base 上面,把 TUI 和已配置的 agent 绑到同一次持久会话。
渲染依赖打过补丁的 @earendil-works/pi-tui。仓库把它放在 devDependencies,构建时打进 lib/,使用者不用再装 pi-tui,也不用配 patchedDependencies。
核心功能¶
下面这些能力来自 README、cordis.patch.yml 和 src/,不是产品宣传清单。
-
终端会话前台
启动后在当前 TTY 里对话。默认打开推理块显示(showReasoning: true),工具卡片折叠预览默认保留 6 行(maxToolOutputLines: 6)。状态栏模板能拼工作目录、git worktree、模型、缓存命中率和上下文用量。 -
会话身份由启动参数决定
tui-startup解析启动器交给应用的参数,提供tuiStartup服务;agent-loop 和 TUI 行注入这份服务后再求值,避免开到错误的会话。--help只打印帮助,不启动 agent。--resume和--session不能同时传。 -
斜杠命令与快捷键
源码里注册的命令包括:
-/help:快捷键和命令列表
-/model [[provider/]model]:查看或切换本会话模型
-/clear:清转录视图,会话历史不变
-/details [collapsed|expanded|hidden] [reasoning [on|off]]:工具卡片可见性和推理显示
-/palette:终端用到的颜色角色
-/status:会话诊断、系统提示词和已注册工具
-/resume:列出当前工作区可恢复会话
-/reload:实验性,空闲时重读 loader 配置
-/exit、/quit:当前 turn 空闲后退出
-/skill: [instructions]:把 skill 载入对话(在命令注册表之外拦截)
帮助文本里的快捷键:Enter 发送;Shift/Alt+Enter 换行;上下键翻输入历史;Esc 取消当前 turn;Ctrl+O 循环工具卡片折叠/展开/隐藏;Ctrl+R 开关推理块;Ctrl+L 重绘;运行中 Ctrl+C 取消,空闲时清空输入或退出;Ctrl+D 退出。
-
默认叠在 dsh-base 上的 agent 行
自带 patch 会改agent-loop、system-prompt、llm-deepseek、fs-sandbox、tools,并插入会话引用、存储、投影缓存、tmux 上下文、TUI 自身和tool-ask-user。默认模型是deepseek-v4-pro,提供方deepseek-official,API 密钥环境变量DEEPSEEK_API_KEY,thinking: enabled,reasoningEffort: max,工具模式native。这些是组合包默认值,profile 自己的cordis.patch.yml可以整行覆盖。 -
@文件补全
配置项里有工作区文件索引上限、结果条数和排除目录,给编辑器里的@模糊查找用。
有一条 README 写明的缺口:应用内 /resume 的进程交接,以及退出提示文案,仍然依赖已经拆掉的 TUI 专用启动器,目前不可用。/resume 可以列出可恢复会话;真正换会话,要用命令行的 --resume <sessionId>。
安装与启用¶
目录详情页给出的安装命令是:
dsh plugin add github:turtle1999/turtle-ui
这是组合包,需要进一个 profile。web / headless 会从随附模板自动初始化;其他名字(包括 tui)第一次只装 @deepseek-ai/dsh-base。仓库 README 和官方 CLI 参考都按 --profile tui 来写。讨论区有人验证可用的写法是:
dsh plugin --profile tui add github:turtle1999/turtle-ui
不要照抄 README 和 CLI 参考里的 github:deepseek-harness/turtle-ui。GitHub API 对该路径返回 404;#871 里用这条命令会在 git ls-remote 阶段失败。turtle1999 指向的公开仓库是 turtle1999/turtle-ui。
从 Git 安装会拉源码,再跑 prepare(tsdown.prepare.config.ts)在本机转出 lib/,不做类型检查。pnpm ≥10 默认拦住这个脚本。第一次 add 会失败并打印 allowBuilds 键;把打印出来的那把键写进 profile 的 pnpm-workspace.yaml 后再跑一次。官方文档把这次放行理解成:允许安装时在本机执行该包代码,不在 agent 沙箱里。不要猜键名。
需要可复现安装时,按目录页把 commit 钉死:
dsh plugin add github:turtle1999/turtle-ui#<commit>
本地开发时,README 要求把本仓库和 DeepSeek Harness 放成兄弟目录,先构建 Harness,再构建 turtle-ui,然后用 file: 装进 profile,让 peer 依赖走 profile 的托管回退:
(cd ../deepseek-harness && pnpm install && pnpm run build)
pnpm install
pnpm run build
dsh plugin --profile tui add file:.
dsh --profile tui
package.json 声明 Node ^22.19.0 || >=24.0.0,packageManager 为 pnpm@11.7.0。重建之后要再执行一次 add,才会刷新 profile 里那份拷贝。
典型用法¶
装好后启动:
dsh --profile tui
不带会话参数时,每次启动生成新的 session id。指定新会话 id,或继续已有会话:
dsh --profile tui --session review
dsh --profile tui --resume <sessionId>
dsh --profile tui --help
--help 打印的示例与源码 startup.ts 一致。进 TUI 后可以用 /help 看快捷键,/status 看会话、token 和工具,/model 切模型。改界面行为不要改包内文件,在 profile 的 cordis.patch.yml 里覆盖 tui 那一行的 config。patch 替换整份 config,不是深合并,覆盖时要把仍需要的键一并写上。
模型调用需要 DEEPSEEK_API_KEY。patch 里 llm-deepseek 还读 DEEPSEEK_BASE_URL。凭据解析顺序以官方 CLI 参考为准:继承环境、$DSH_HOME/.credentials.yaml、调用目录 .env、$DSH_HOME/.env。
适用场景与注意事项¶
适合已经在用 dsh、希望少开浏览器、在 SSH 或本机终端里盯 agent 的人。它不是社区另外几款 TUI(例如目录里的 dsh-TUI、npm 上的 @tomowang/dsh-tui)的替代说明,那些是独立实现;turtle-ui 是从 Harness 拆出来的原版终端层,目录和仓库都按「原样、不担保」发布。
使用前注意:
- 权限。插件以当前 dsh 进程的权限运行,安装时可能执行代码(包括
prepare)。安装前检查源码和许可证。 - 文档滞后。官方 CLI 参考和本仓库 README 仍出现
github:deepseek-harness/turtle-ui。以能打开的turtle1999/turtle-ui为准。 - TUI 定位未定。维护者在 #871 写过,之后会重新考虑 TUI 的位置。API 和包结构可能跟着 Harness 预览版一起变。
- 恢复会话走命令行。应用内
/resume交接不可用;继续会话用dsh --profile tui --resume <sessionId>。 - 环境。需要交互式 TTY、已安装的
dshCLI,以及 PATH 上的 pnpm。peer 依赖指向多套@deepseek-ai/dsh-*^0.0.1和@deepseek-ai/cordis^4.0.0-rc.7,跟当前 Harness 对不上时,优先查版本而不是改 TUI 源码。
小结¶
turtle-ui 把 DeepSeek Harness 早期那套终端 UI 以组合包的形式交出来:不改启动器,只在 profile 上叠一层 patch,让 agent 在 TTY 里跑。目录页和仓库都标明原样提供、不担保;安装地址用 github:turtle1999/turtle-ui,不要用已经 404 的 deepseek-harness/turtle-ui。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/turtle-ui/
GitHub:https://github.com/turtle1999/turtle-ui