dsh-ctui — Oh My Pi 风格的 DeepSeek Harness TUI
DeepSeek Harness 官方没有终端 TUI——dsh-ctui 来补位:Oh My Pi(OMP)
视觉语言的全屏交互终端,覆盖 DSH-TUI 家族(dsh-cc-tui)的全部能力,
并新增 /mode 四模式(agent preset,可靠持久化)、TUI 内直接管理
MCP 与 Skills、npm 一键安装。

界面一览(OMP 风格)
- OMP 主题色系:accent 金
#febc38、链接蓝 #0088fa、暖色用户消息底
#221d1a、VS Code Dark+ 语法高亮、markdown 标题金色/行内代码浅紫。
- OMP 布局骨架:无鲸鱼/大字顶栏,启动即消息区;用户消息是整块暖色
铺底(无
❯ 指针、无气泡框),助手消息为纯 markdown(无 ● 圆点),
工具调用为单行活动行(spinner/状态图标 + 工具名 + 参数,成功/失败用
toolSuccessBg/toolErrorBg 底色,结果缩进展示)。
- 状态行在编辑器边框内(OMP "main status in editor border"):输入区是
带边框的多行编辑器,顶边框下第一行就是分段状态栏——
#121212 深色条 +
分段色(模式金 · 模型粉 · 路径青 · git 绿/黄 · 上下文紫 · spend 青 · cost
橙),上下文分段进度条 + 实时 TPS 仪表保留,下面才是输入行。
- 思考边框色阶:thinking 块左侧边框按推理力度着色(off 灰 → low 蓝 →
medium 亮蓝 → high 紫 → xhigh 浅紫);流式时折叠为 OMP 思考 dots 脉冲
(
✻✼❉❊✺✹✸✶),回合结束自动收起为静态 glyph,Ctrl+O 展开全文。
- 双击 Esc 时间回溯(rewind):把对话回滚到任意一条历史消息,DSH 会话
fork 后原样重放,消息自动回到输入框可编辑重发。
- 完整交互细节:
/ 命令菜单(竖排、Enter 执行、Tab 补全)、? 快捷键菜单、
Ctrl+R 历史搜索、@ 文件补全、/ 全文搜索、Shift+Enter 多行、消息选择
模式(Shift+↑)、滚动置顶「当前提示词」与「↓ N 新消息」药丸、鼠标选择即
复制(全屏模式)。
npm 一键安装
前置:官方 dsh CLI 与 pnpm(npm install -g @deepseek-ai/dsh 与
npm install -g pnpm)。
npm install -g dsh-ctui
dsh-ctui
dsh-ctui --resume
dsh-ctui 启动器做的事:检测 dsh CLI → 首次运行自动执行
dsh plugin --profile ctui add dsh-ctui(官方 CLI 自动初始化
$DSH_HOME/profiles/ctui,pnpm 安装并把本包追加为 bundle 层)→
dsh --profile ctui 启动。全程一条命令,无需改任何配置文件。
等价的手工路径(不装全局 CLI 也可以):
sh install.sh
dsh --profile ctui
Windows 用户可用仓库根目录的 dsh-ctui.cmd(等价,且 --resume 恢复上次
会话)。
/mode — 四种模式(agent preset)
/mode 切换的是 DSH 的 agent preset(官方 dsh-agent-presets
名册),四种出厂模式:
standard 标准 | 功能完整的编码 Agent:文件编辑、Shell、文件/网页检索、Skills、计划、目标、子代理、工作流 | |
code 代码 | 标准模式的全部能力 + Code Mode SDK:模型用一个 TypeScript 程序组合多步操作 | |
minimal 极简 | 仅持久 bash 与 str_replace_editor 的双工具 Agent | |
cordis 创造 | 标准能力 + 读写自身运行时的 Cordis 工具集,用于创作新 preset | |
用法:
/mode
/mode code
/mode status
持久化保证(单真源,绝不回退):
- 选择先写盘后生效:写不进
~/.dsh-ctui/mode.json 的切换会被拒绝,界面
永远不会显示一个重启后就消失的模式。
- 写入是原子写(临时文件 + rename),崩溃也不会留下截断文件。
- 空白会话(尚未产生任何轮次)立即生效;已开始的会话受官方 blank-only
规则锁定,选择会保存为默认并显示为
mode: A · 会话:B,/new 或下次启动
生效——已选 A 绝不会悄悄变回 B。
- 重启后新会话用
~/.dsh-ctui/mode.json 里的模式创建;cordis.yml 里显式
配置的 mode 键优先于运行时选择(部署优先)。
- 旧版 dsh-cc 的选择(
~/.dsh-cc/agent-preset.json 或
~/.dsh-ctui/agent-preset.json,preset 键)会自动迁移。
- 验证:
pnpm test 里的 verify-mode-prefs 覆盖写入/读取/原子性/损坏文件/
重启不回退全部用例。
MCP — TUI 内直接管理
/mcp 打开交互管理器,管理 ~/.dsh-ctui/mcp.json(TUI 管理的服务器):
/mcp
/mcp status
面板操作:a 添加(表单:传输方式 1=stdio / 2=streamable-http → serverName
→ command/url → args)、space/x 启停、d 删除(再按 y 确认)、r
刷新工具列表、Esc 关闭。
- 即时生效,无需重启:启用/添加的服务器通过官方
@deepseek-ai/dsh-mcp-client 动态挂载,工具以 mcp__<服务器>__<工具>
注册进运行时;停用/删除立即断开。
- 与
/mode 同一持久化契约:先写盘后挂载,写失败拒绝操作。
- 经典部署方式(profile 的
cordis.patch.yml 里 insert mcp 行)不受影响,
/mcp status 同样能看到这些服务器。
Skills — TUI 内直接管理
/skills 打开技能管理器,列出注册表里的全部技能(ctx.skills.list()):
/skills
/skills status
面板操作:space/x/Enter 启停、r 刷新、Esc 关闭。
- 停用即时生效:被停用的技能从模型可见目录(loadedContext.skills)移除,
模型不再看到它;启用后立即恢复。状态持久化在
~/.dsh-ctui/skills-state.json(原子写,先写盘后生效)。
- 技能本体不动:
~/.dsh/skills、项目 .dsh/skills、.agents/skills、
各 preset 自带的 skills 目录照常被扫描。
快捷键
Esc Esc | 时间回溯(rewind 选择器) |
/ | 命令菜单(/mode /mcp /skills /new /compact /resume …) |
? | 快捷键帮助 |
Ctrl+R | 历史搜索 |
Ctrl+O | 展开/折叠全部 thinking 与工具详情 |
Ctrl+T | 切换加载上下文面板 |
Ctrl+E | 展开折叠的早期消息 |
Ctrl+C | 中断当前回合(双击退出) |
Ctrl+D | 退出 |
@ | 文件补全 |
Shift+Enter | 多行输入 |
Shift+↑ | 消息选择模式 |
↑/↓ | 历史 / 选择器导航 |
Tab | 命令补全 |
主题
OMP 色系内置三套:dark(默认,OMP dark 移植)、light(OMP light 移植)、
dark-ansi(16 色终端回退)。启动时自动探测终端背景。
/theme
/theme light
自定义主题放 ~/.dsh-ctui/themes/<名字>.json(base 必填,colors 覆盖
任意主题键;所有主题键见 src/theme.ts 的 Theme 接口)。选择持久化在
~/.dsh-ctui/theme.json。
配置(profile cordis.patch.yml)
$DSH_HOME/profiles/ctui/ 下只有 cordis.patch.yml(你的补丁层,顶层
YAML 数组,!!js 可用)。常用覆盖:
- id: ctui
config:
provider: deepseek-official
model: deepseek-v4-flash
effort: max
activity: true
activityFrames: claude
cwd: !!js process.cwd()
fullscreen: true
mode: standard
构建与测试
pnpm install
pnpm build
pnpm test
pnpm tui
许可证
BSD-3-Clause。本项目是 dsh-cc-tui
的派生(同许可证),视觉语言致敬 Oh My Pi(OMP)主题体系
(can1357/oh-my-pi)。