dsh-nvim-tui
用 Neovim 当渲染壳 的 DeepSeek Harness (dsh) TUI:聊天区就是普通 nvim buffer——搜索、复制、可视模式、你的 colorscheme / statusline / LSP 全部生效。Node runner 通过 msgpack-RPC 把 agent 事件流渲染进去,把输入回传给 agent。
dsh --profile tui
└─ nvim-tui-runner(Node / Cordis 插件)
├─ 订阅 session/event,注入 agents / agentDefaultModel
└─ spawn nvim --listen <socket>(内置 TUI 渲染终端)
└─ msgpack-RPC 双向:事件 → buffer,输入 → agent.followup
快速开始
# 安装到 dsh 官方 tui profile
dsh plugin --profile tui add kovey/dsh-nvim-tui
dsh --profile tui
也可以装进任意自定义 profile(如 nvim-tui),两者等价:
dsh plugin --profile nvim-tui add kovey/dsh-nvim-tui
dsh --profile nvim-tui
dsh plugin add 会把声明了 dsh.bundle 的依赖并入该 profile 的 bundles 层栈,
无需手改 package.json。启动后输入 /help 查看命令,输入 / 弹出补全。
常用启动参数:--resume <id> / --continue / --model provider/model /
--permission <name> / --help(见 docs/CONFIG.md)。
更新
# git 依赖用 #tag 重写 ref;update / --latest 推不动 git ref
dsh plugin --profile tui add "kovey/dsh-nvim-tui#<tag>"
宿主与插件版本的对应关系、逐版本升级步骤见 UPGRADE.md。
运行依赖
| 依赖 | 要求 | 说明 |
|---|---|---|
| dsh | >=0.2.2-rc.1 <0.3.0 |
已实测 0.2.2-rc.1(类型面、启动、Agent.model/tools/schedule/投影探针);整个 0.2.2 系列按稳定接口声明;0.3.0 未验证,故意不声明兼容 |
| Neovim | 0.9+(推荐 0.10+) | 0.10+ 完整体验(输入框四边框、弹窗提示嵌入边框);0.9 可运行但降级 |
| Node.js | 24.9+ | 跟随 dsh 0.2.2 的 engines 要求;旧 Node 需先升级 |
- Neovim 0.9–0.12 全系列支持:代码里只有
nvim-0.9/nvim-0.10两档闸门, 0.11 / 0.12 自动走完整分支;已逐项核对 0.12.6 的 breaking changes,均未使用。 - 注意预发布版:dsh 的
nextdist-tag 是 release candidate,latest可能更旧; 安装时显式带版本或@next,别让npm i -g @deepseek-ai/dsh装回旧版。
主要特性
- Neovim 原生体验:聊天区 / 输入窗都是普通 buffer;围栏代码块与 diff 用你的 treesitter + 配色方案高亮。
- 流式渲染:
·· thinking · 12.3s浮动活动指示;思考与工具记录收进<C-o>右侧面板,聊天区保持全宽。工具卡、GFM 框线表格(按显示宽度对齐、超宽自动折行)、 Claude 风格代码块。 - 转录增强:📋 待办条与 ⚙ 任务板钉在聊天区底部(实时更新,全部完成才写入转录)、 ⋯ 压缩检查点、↻ 重试状态行、workflow 嵌套回放、子代理思考链边跑边输出; PTC/code 模式的子工具调用逐条渲染,图片 offload 有提示;待办逐项更新由守卫强制 (说明)。
- 文件改动:write / edit 等工具调用自动渲染
✎ 路径 (+N −M)统一 diff;/changes汇总本会话改动,/diff左右对照审阅;/files打开 netrw 文件树,/preview只读预览,/upload把本地文件作为 durable 附件发送。 - 会话管理:
/sessions工作区分组浏览器、/fork分叉、/btw侧问、/queue消息队列、/search跨会话搜索、/cwd切换工作目录;/outline回合大纲;启动自动续上次活跃会话(类似claude --continue)。 - 子代理与工作流:
/subagents目录 + 对话窗(边跑边看,可续聊 continuable 子代理);/workflow查看阶段树。 - 多模态识图:原生 image 直发;当前模型不支持图像时自动临时切到官方识图模型,
回合结束切回。
<C-v>读剪贴板图片、/image指定文件。 - 输入效率:
@文件 /@session引用;/命令补全(含宿主与插件注册的命令); 精确短语走自然语言命令,模糊语句交给模型判断是否执行(tui_command工具)。 - 模型与状态栏:模型 · effort · 缓存命中 · 上下文占用 · TTFT / tok/s · 成本 ·
权限模式 · 排队 / jobs / 待办;
/difficulty按任务难度自动选模型。 - 扩展与生态:
/market插件市场(安装 / 更新 / 热启停)、/plugin直装;/cordis检查动态 Cordis 插件;EXT-API 允许其他 dsh 插件 和 nvim 插件在 TUI 内渲染 UI、订阅会话事件。 - 可定制:
/theme预设或自定义高亮组、/density、/layout、/whale、/glance;/locale zh|en切换界面语言。
键位
聊天区 normal 模式下 j / k、/ 搜索、n / N、gg / G、y 等原生操作
都可用。运行中发送的消息会排队到当前回合结束(状态栏 ⏳ 计数,/queue 管理)。
| 键 | 作用 |
|---|---|
Enter |
发送消息(输入窗聚焦时自动处于 insert 模式) |
<C-CR> |
输入换行(窗口高度 1–6 行自适应) |
<C-e> |
全屏输入:Enter 换行,Esc 进命令模式;命令模式下回车发送、q 丢弃 |
↑ / ↓ |
行尾循环输入历史(可恢复草稿) |
/ |
命令补全浮窗(Tab / <C-n> 切换,Enter 补全或执行) |
@ |
文件 / 会话引用补全 |
<C-v> |
剪贴板读图(macOS),随消息发送 |
<C-c> |
停止当前回合(同 /stop) |
<C-o> |
展开 / 收起活动面板 |
审批浮窗 y / a / n |
允许一次 / 总是允许 / 拒绝 |
提问浮窗 j k / Space / Enter |
移动 / 多选 / 确认 |
<C-q> / :qa |
退出(:qa 直接退 nvim,runner 随之退出整个 dsh) |
<Esc> / j k |
回到 normal 模式 / 滚动聊天区 |
扩展卡片 1-9 / Enter |
触发卡片动作 / 弹出动作菜单 |
斜杠命令
输入 / 弹出补全,/help 查看全部。常用命令:
| 分组 | 命令 |
|---|---|
| 会话 | /sessions /new /fork /btw /queue /compact /cwd /search /schedule /terminal /upload /quote |
| 模型 | /model /models /effort /difficulty |
| 视图 | /panel /theme /density /steps /layout /whale /locale |
| 运维 | /settings /deps /doctor /plugins /market /plugin /mcp |
| 信息 | /help /status /context /cost /changes /diff /export /copy /stats /outline /files /preview |
完整命令表(81 个内置命令,按分组)见 docs/COMMANDS.md。
宿主与其他插件注册的命令也会进入补全目录,可用 /commands 查看。
配置
runner 行的 config: 写在 profile 的 cordis.patch.yml:
- insert:
- id: nvim-tui-runner
name: 'dsh-nvim-tui'
config:
theme:
DshTuiUser: { fg: '#7aa2f7', bold: true }
| 配置项 | 默认 | 说明 |
|---|---|---|
loadUserConfig |
true |
加载你的 nvim 配置;false 等价 -u NONE |
theme |
— | 高亮组覆盖 |
headless |
false |
无 TTY 测试模式 |
resumeLatest |
true |
启动自动续上次活跃会话 |
locale |
zh |
界面语言 zh / en |
todoGuard |
true |
待办清单逐项更新守卫 |
difficultyRouting |
— | 难度路由配置 |
完整配置项、环境变量、主题组、难度路由与 headless / CI 用法见 docs/CONFIG.md。
开发
npm install
npm run build # src/(TypeScript strict)→ lib/
npm run check # 双 tsconfig 类型检查 + 架构 / 域操作门禁
npm run smoke # 无头冒烟:RPC 往返 + Lua 插件 + 事件渲染
npm run e2e -- "你好,请只回复:收到" # 真模型回归(需 dsh 凭据)
发布用 npm publish;prepublishOnly 会依次跑 check → build → smoke。
本地仓库直链安装:在 profile 的 package.json 里把依赖写成
"dsh-nvim-tui": "link:<仓库绝对路径>",dsh.profile.bundles 包含
"dsh-nvim-tui",然后运行 dsh plugin --profile nvim-tui install,再用
dsh --profile nvim-tui 启动。
目录结构、模块分层与关键设计决策见 docs/STRUCTURE.md; 架构演进与领域划分见 docs/ARCHITECTURE.md。
文档
| 文档 | 内容 |
|---|---|
| docs/COMMANDS.md | 斜杠命令完整参考 |
| docs/CONFIG.md | 配置项、环境变量、主题、难度路由、headless |
| docs/EXT-API.md | 插件开放接口(Node / Lua 两面) |
| docs/STRUCTURE.md | 目录结构与设计决策 |
| UPGRADE.md | 宿主与插件版本升级指南 |
| CHANGELOG.md | 版本变更记录 |
| REQUIREMENTS.md | 需求基线(M0–M7 验收状态) |
License
MIT
No comments yet. Be the first to write one.