dsh 交互式终端聊天应用:流式对话、工具卡片、任务面板、全文搜索、轨迹回放、多会话标签与 A2A 派发(Ink 实现)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:kouyichi/dsh-tui-app
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
🐋 dsh-tui-app
DeepSeek Harness 的终端主界面 —— 一条蓝鲸,指挥全家
一个基于 Ink(React for CLI,Claude Code 同款技术栈)的 dsh profile 插件:Claude Code 形态的交互式终端界面,DeepSeek 品牌鲸鱼, 一个终端同时指挥 hermes / claude / codex / dsh 四个 Agent。
✨ 界面预览
██████╗ ███████╗ ██╗ ██╗ ▄▄▄▄▄ ██
██╔══██╗ ██╔════╝ ██║ ██║ ▄▄▄▄▄▄▄▄▄▄▄▄██████▀ ████
██║ ██║ ███████╗ ███████║ ▄████████████████████ ██████▄▄
██║ ██║ ╚════██║ ██╔══██║ ████████████████████████▄ ▀███████▄
██████╔╝ ███████║ ██║ ██║ ▄████████████████████████████▄ ██████████
╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ████████████████████████████████▄ ▀██████▀
╭───────────────────────────────╮ ████▀▀▀▀▀▀████████████████████████▄ ▄█████
│ DeepSeek Harness │ ████ ▀▀██████████████▀▀▀▀██████████████
│ model deepseek-v4-flash │ ████ ▀████████████▄▄ ▀████████████
│ mode 标准模式 │ ████▄ ▀████████ █ ███▀██████
│ session session-41bbb… │ █████ ▀██████ ▀█▄▄ ▀███████▀
│ stats skills 15 · pl 92 │ ██████▄ ▄▄▄ ▄ ▄█████████▀
│ /help · /config · /quit │ ▀██████▄▄ ██████▄▄▀ ▀█████████▄▄
╰───────────────────────────────╯ ▀███████████████▄▄▄▄▄███████████
🎯 为什么用它
- 🐋 DeepSeek 品牌鲸鱼开屏:figlet 大标题 + 官方 logo 形状鲸鱼(品牌蓝 #4D6BFE),Hermes 式并排布局
- 🌐 A2A 派活:输入
@hermes 帮我查…/@codex 修个 bug—— 一个终端指挥本机全部 Agent,结果卡片化返回 - 📊 实时统计:轮次/步数、LLM 时间、工具时间、缓存命中率、TPS、token 总量,
/config空格开关 - 🎭 四种模式:标准 / PTC / 极简 / 创造 —— 与 web 同款设置,
/mode切换 - 📝 Markdown 渲染:标题、列表、引用、代码、粗体斜体直接可视化
- 🔍 全文搜索:SQLite FTS 索引全部会话,
/search秒级定位历史 - 🎬 轨迹回放:
/trajectory逐步回看每一步思考与工具调用 - 📑 多会话 Tab:
/tab new或 PgUp/PgDn 热切换,每会话独立记忆 - 🛠 完整工具面:后台任务面板、ask_user_question 浮层、plan 审批流、goal 状态、消息反馈
- ⌨️ 中文 IME、vim 模式、多行输入、命令联想、
@文件补全、历史浏览
🚀 快速开始
前置:dsh ≥ 0.1.0-rc.6、Node ≥ 22(含 corepack/pnpm)。
# 1. 建 profile
mkdir -p ~/.dsh/profiles/tui && cd ~/.dsh/profiles/tui
cat > package.json <<'EOF'
{
"name": "dsh-profile-tui",
"private": true,
"dependencies": {
"dsh-tui-app": "github:kouyichi/dsh-tui-app"
},
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base"] } }
}
EOF
printf 'packages:\n - .\n\nnodeLinker: hoisted\nautoInstallPeers: false\n' > pnpm-workspace.yaml
# 2. 装依赖
corepack pnpm install
# 3. 写 profile patch(注入插件行 + 沙箱 + 搜索索引,见 README 完整版)
cat > cordis.patch.yml <<'EOF'
- id: system-prompt
config:
persona: >-
You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
- id: hmr
disabled: true
- id: sandbox-policy
config: { mode: danger-full-access, workspaceRoot: !!js process.cwd() }
- id: approval
config: { policy: never }
- id: web-search-deepseek
config:
apiKeyEnv: DEEPSEEK_API_KEY
baseURL: http://127.0.0.1:8899/anthropic/v1
- insert:
- id: tui-startup
name: 'dsh-tui-app/startup'
- id: session-stats
name: '@deepseek-ai/dsh-session-stats'
- id: agent-presets
name: '@deepseek-ai/dsh-agent-presets'
config: { default: standard }
- id: tui-runner
name: 'dsh-tui-app'
inject: [tuiStartup]
config: { sessionId: !!js ctx.tuiStartup.sessionId }
EOF
# 4. 启动
dsh --profile tui
⌨️ 命令与快捷键
| 命令 | 作用 |
|---|---|
/mode |
Agent 模式:标准 / PTC / 极简 / 创造(新会话生效) |
/model |
模型选择器 + 推理力度(e 切换) |
/config |
状态栏统计开关(空格切换,持久化) |
/jobs |
后台任务面板(空格日志 · k 停止) |
/search <词> |
会话全文搜索(FTS) |
/trajectory |
事件轨迹回放 |
/feedback up|down [备注] |
消息反馈 |
/tab new | /tab <n> |
多会话 Tab |
/agents |
A2A 端点探测 |
/goal |
目标状态(阶段/轮次/受阻原因) |
@hermes/@claude/@codex/@dsh <任务> |
A2A 派活 |
| 快捷键 | 作用 |
|---|---|
| Shift+Enter | 多行输入 |
| Esc | vim 模式 |
| Tab / ↑↓ | 命令联想选择 |
| ↑↓(无联想时) | 历史浏览 |
| Ctrl+O | 思考/工具卡片折叠 |
| PgUp/PgDn | 切换会话 Tab |
| Ctrl+C | 中断 / 退出 |
🏗 架构
dsh-tui-app (cordis 插件, 纯 Node ESM, 零构建)
├── lib/index.js agent 驱动 + 会话 Tab + 菜单路由 + 统计
├── lib/runtime/ Ink 挂载 / 自定义输入层(IME·vim·粘贴)/ store
├── lib/channel/ 事件归一化 + A2A 客户端(50ms 批量渲染)
├── lib/components/ splash / 消息流 / 工具卡片 / 各面板 / TabBar
├── lib/markdown.js 轻量 Markdown 渲染(零依赖)
├── lib/theme/ 品牌蓝 palette(唯一 SGR 来源)
└── test/ node:test 单测
核心原则:TUI 是薄界面 —— agent/会话/工具全部来自 @deepseek-ai/dsh-base;
agent.ctx.on("session/event") 是唯一数据源,不落盘、不复制逻辑。
🧪 开发
node --test test/input.test.js test/palette-events.test.js # 21 项单测
printf '你好\n/quit\n' | timeout 60 script -qec "dsh --profile tui" /dev/null # 冒烟
📄 许可
MIT —— DeepSeek 标志归 DeepSeek 所有;本项目为独立非官方插件。
链接
同类插件
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3688
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 1769
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 1669
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/dsh-at-file★ 292
Codex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
huiliyi37/dsh-tianshu-tui★ 194
DeepSeek Harness 的终端 UI(TUI)。
Nagi-ovo/dsh-visualize★ 161
对话内生成式 UI:模型把交互式 HTML 卡片直接画进会话流,带流式预览与沙箱渲染。