自 v0.13.0 以来,dsh-TUI 从「DSH 的前端」长成了多内核 TUI:同一套界面现在也能把整个会话跑在 Claude 或 Codex 上,并带来了 Agent 团队工作台、/btw 侧线程面板、轨迹与任务观测,以及重做的 Markdown 渲染。
亮点
- 内核(kernel):Claude 与 Codex 后端(实验性) — 会话不再只能跑在 DSH 上。用
/kernel(或启动页「内核」格、右下角内核区)打开内核选择器,选中即记住并重启进入,在新内核里开新会话,原会话仍留在/resume;dsh-tui --backend dsh|claude|codex、配置行backend:、DSH_TUI_BACKEND也可指定。一个进程只跑一个内核,回合运行中不能切换。#1311 #1313- Claude:由 Claude Agent SDK 驱动本机
claudeCLI,项目里的CLAUDE.md、设置、hooks、MCP 服务器与插件按 CLI 自己的方式加载。SDK 是可选依赖,未安装时在内核选择器里对着置灰的 Claude 行按Enter就能一键装上;凭据依次取/channel渠道档案、/login订阅登录、ANTHROPIC_API_KEY等环境变量、本机已有的claude login。#1328 - Codex:经官方
codex app-server复用你自己 Codex 的配置、登录、AGENTS.md、skills、hooks 与 MCP,thread 与官方 CLI 共用(codex resume <id>可换回官方前端)。需要自装 CLI(npm install -g @openai/codex@0.160.1,基线 0.160.1、最低 0.144.0);/login提供 ChatGPT OAuth、设备码与 API key 三种方式,dsh-TUI 不写~/.codex/config.toml。吞吐 TPS 计入隐藏推理时间、排除工具执行时间。#1352 #1356 - 新增
/channel渠道档案:可从settings.json导入、新增、管理与查看模型映射,用中转或自定义端点跑 Claude 与 Codex;连接变了就重启进入新会话。权限模式也有了非 DSH 入口:/permission命令与底栏可点段、Shift+Tab循环,审批面板支持「始终允许」(写明 CLI 会记住什么)与带理由的拒绝。曾经选过的bypassPermissions不再被记忆沿用。#1311 - 边界:两者都标为实验性;Claude 下 DSH 专属命令(
/tree、/preset、/provider、/workspace、/agentview、/bg等)不可用,Codex 下Shift+Tab只切 Plan(Full Access 须显式选择)。详见 Claude 后端 与 Codex 后端。
- Claude:由 Claude Agent SDK 驱动本机
- Agent 团队工作台 — 子代理有了主屏转录视图:全屏阅读子代理的完整转录(历史与实时尾部合并、工具卡按 call id 配对),就地给它发消息,向上翻页不再被新输出拽回底部;宽度足够时右侧多出「信息 / 工具 / 父代理与同级」工作台,可在同级与父代理之间就地切换。SendMessage 卡不再显示原始 JSON,而是「发给谁 + 消息预览 + 状态徽章」;代理间消息在转录里显示为
from → to。#1311 /btw侧线程面板 —/btw从单轮侧问变成常驻侧栏线程:可滚动的问答记录、未读跳转、新话题、⤢进整屏场景,「发送到聊天」把答案附到下一次主聊天提交。携带的上下文由dsh-tui.btw.contextTurns(1–8,默认 4)与dsh-tui.btw.contextBudget(1000–200000,默认 24000)控制,超出窗口的旧组不进请求、但仍留在面板里。#1311- 轨迹与任务观测 —
/trace/Ctrl+T现在在每个内核都打得开:没有轨迹数据的内核会明说「当前内核不提供轨迹数据」,全屏头部标出轨迹来源;审批与问卷的等待行显示实时「已等待 X」,检视器给出答复、来源与问题快照;a在代理 → 父回合 → 全部后代 → 会话之间循环范围。任务卡头部点击直达详情,详情新增最近进度与最近 8 条时间线(启动 / 进度 / 输出 / 缺口 / 结束)。每回合末尾可显示一行右对齐的用量小记(dsh-tui.turnUsageRow,默认关闭;/tokens、/status与底栏悬停数字不受影响)。#1311 - Markdown 渲染重做 — 标题 H1–H6 分级降调并压掉多余空行;列表续行悬挂到正文列、嵌套每级不再多算一层;任务清单显示勾选状态,
~~删除线~~生效;引用按层递暗、引用内空行保留竖条;图片变成[img] 替代文字并用 OSC 8 链到原图地址。代码块默认改为「轻框」——顶部角标加语言标签、每行左侧竖杆,不额外占行;dsh-tui.codeFrameStyle切到full可回到封闭盒子,终端太窄时恒为原来的纯 fence。#1311 - 主题与外观 — 上下文进度条分段、最高思考档的「点火」动画、正文链接色与输入框光标块改由主题接管(#1260 by @xiaoxiaohaigui;新增
contextBar*、ignition/ignitionDim、cursor色键,均可不填)。开屏与主题跟随内核:Claude 整套换橙(CLAUDE CODE标题、Claude 娘立绘、claude-dark/claude-paper),Codex 换薰衣草紫(CODEX标题、「Build anything with Codex」、codex-lavender/codex-paper);dsh-tui.brand可锁定其中一种外观。#1352 - 侧栏与启动台 —
dsh-tui.sidePanel.panels从手写逗号串变成勾选器(插件注册的面板自动出现,取消即移除,仍保留「高级」行编辑原始列表),内置面板默认全部启用;面板栏改为居中标题加两侧圆点/箭头并可全屏。启动台入口行多出「内核」一格,参数行装不下时截短最长的一段而不再整段吞掉权限名。#1311 #1315 #1354 - 模型能力编辑 — 在
/provider的模型列表里聚焦一项并按Tab,可直接编辑上下文窗口、最大输出 token、推理档位与图片输入能力,不必再手改配置(#1304 by @CikeSeven)。
修复
- 凭据与安全:渠道令牌不再出现在 CLI 命令行上(改经 0600 临时文件传递,会话结束即删);切换渠道时旧凭据不再被发往新端点,渠道拿不到自己的凭据就拒绝启动;删除令牌前先扫描全部引用,不再连带删掉别的渠道仍在用的凭据;
/login重连失败只显示固定说明与 HTTP 状态,不再把 OAuth 响应体抛到界面上。#1311 - 崩溃与终端恢复:终端收窄跨过代码框回退阈值不再抛 React #300 直接退出;崩溃时恢复终端状态并把完整堆栈写入
~/.dsh-tui/crash.log,可恢复时原地重挂载回对话;全屏内核切换期间按Ctrl+C不再把 shell 留在备用屏,替换进程首帧前失败会一并复位鼠标、焦点、括号粘贴与光标;/restart、/update后回到当前内核而不是拿另一个内核的会话 id 启动失败。#1311 - 输入与会话:Windows 终端多行粘贴保留换行,不再静默删字(#1251 by @baobaolaodie);回合运行中输入
/model、/new、/compact等已知命令按命令执行,不再被当成插话打断当前回合(#1258 by @Lucas2011wastaken);会话列表能恢复快速窗口之外的模型信息,较长或旧会话不再缺模型显示(#1276 by @xuzijian2019);被撤权或已卸载的插件即使延迟返回,也不能再影响你的下一次提交或拦截会话切换(#1297 by @T-Auto)。 - 显示与计量:Ghostty 下打开 Star 弹窗不再触发其 zlib 解码器崩溃(#1347 by @CikeSeven);macOS 图片入站时第二份 libvips 的原生警告不再刷满输入框(#1267 by @xuzijian2019);上下文条按后端实测占用对齐,压缩后不再残留过期估算(#1363 by @CikeSeven);Codex 被原生守护进程占用的空闲 thread 可重新加入(#1358 by @CikeSeven);启动页参数行不再吞掉权限段(#1299 by @baobaolaodie)。
兼容与升级
- 侧栏默认面板变多:
dsh-tui.sidePanel.panels的默认值从todo,jobs,agents变成todo,jobs,agents,info,trajectory,workspace,btw,companion(含新的 btw 与宠物面板)。侧栏本身仍默认收起,显式写过该 key 的配置原样生效;想回到旧观感,在/settings的「启用的面板」里取消勾选即可。 - 外观会跟着内核走:内核是 Claude/Codex 时,开屏与配色默认换成对应品牌。只有本次会话
/theme手选过、设了DSH_TUI_THEME,或把dsh-tui.brand固定为某个值,才会锁住外观;仅靠~/.dsh-tui/theme.json持久化的历史主题选择不被视为显式锁定。 - 行为变化(无需迁移,但会感觉到):回合运行中,已知命令永远是命令,由命令自己的门禁裁决,只有不构成命令的文本与技能手势才作为插话(#1258 by @Lucas2011wastaken);
Esc中断后排队消息不再自动重发,改为暂存在输入框上方,⏎全发、↑取回(#1311);非 DSH 内核下←与/bg打开统一会话管理但不会把当前会话转后台(#1354);Claude 内核下回合运行中拒绝/resume。 - 新前置条件(按需,不影响 DSH 升级):Claude 内核需要可选依赖
@anthropic-ai/claude-agent-sdk@0.3.287(一键向导,或手动cd ~/.dsh/profiles/dsh-tui && pnpm add @anthropic-ai/claude-agent-sdk@0.3.287);Codex 内核需要自装@openai/codex(基线 0.160.1,最低 0.144.0),本包不捆绑 Codex 依赖;supports-hyperlinks升到^4.6.0,新增运行时依赖ws。 - 没有破坏的地方:配置 key 无重命名、无删除,只新增
dsh-tui.brand、dsh-tui.codeFrameStyle、dsh-tui.turnUsageRow、dsh-tui.btw.contextTurns、dsh-tui.btw.contextBudget;快捷键与环境变量无删除;DSH 兼容线与@deepseek-ai/*peer 范围不变(主验证目标仍是 DSH0.2.0-rc.2),Node 要求不变;插件与主题接缝只做扩展——插件主题base新增四个内置主题名,新色键全部可选,旧键与弃用别名继续有效。 - 验证范围:Codex 内核用真实的 0.160.1 app-server 过了 9 项无凭据离线检查与 8 项守护重连检查(无模型回合、不产生费用),真实订阅登录、带凭据的模型回合与真实 TTY 交互本轮未运行;其余内核与界面的改动以仓库内的聚焦回归脚本为准。
安装
npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui@0.14.0已安装的用户可以直接 /update 或 dsh-tui update。
What's Changed
- refactor: backend hosts for channels, modes and mcp by @ccch1mneyyy in #1322
- refactor(claude): split session and translator responsibilities by @ccch1mneyyy in #1323
- fix(channel): own delayed login reconnect by @ccch1mneyyy in #1324
- fix(ui): fold job commands and restore agent panel metadata by @ccch1mneyyy in #1321
- feat(ui): claude brand identity, panel fixes and channel hardening by @ccch1mneyyy in #1326
- feat(kernel): one-click SDK install wizard for the Claude backend by @ccch1mneyyy in #1328
- fix(claude): real usage numbers, effort readout and phase-based spinner copy by @ccch1mneyyy in #1337
- ci: fail fast on a corrupted build artifact (digest canary) by @ccch1mneyyy in #1334
- fix(images): reuse host sharp for image ingress by @xuzijian2019 in #1267
- fix(scripts): sweep relocated-preset leftovers instead of stranding them by @ccch1mneyyy in #1338
- docs(vscode): add the image protocol to the known-differences table by @baobaolaodie in #1331
- fix(sessions): recover model metadata outside the tail window by @xuzijian2019 in #1276
- fix(adapter): 决策等待期间被撤权/卸载后不再采纳迟到的 decision by @T-Auto in #1297
- fix(scripts): bound the sync-profile gate so a hung child fails loudly(verify-sync-profile 门禁加上限,挂起不再静默吞掉整条构建) by @baobaolaodie in #1287
- fix(input): decode leaked win32 records so a multi-line paste keeps its newlines(多行粘贴保留换行,不再静默删字) by @baobaolaodie in #1251
- fix(launchpad): keep all four parameter segments by truncating the long one(参数行装不下时截尾超长段,权限段不再被整段吞掉) by @baobaolaodie in #1299
- feat(provider): edit model capabilities in wizard by @CikeSeven in #1304
- feat(theme): make the context bar, effort ignition, links and caret theme-driven by @xiaoxiaohaigui in #1260
- fix(ink): avoid zlib image uploads on Ghostty(修复 Ghostty 打开 Star 弹窗时崩溃) by @CikeSeven in #1347
- feat(codex): native Codex kernel (app-server backend), brand and metering by @ccch1mneyyy in #1352
- fix(input): run commands as commands while a turn is running(回合运行中的命令不再被当成插话) by @Lucas2011wastaken in #1258
- fix(ui): enable sidebar panels and open backend session manager by @ccch1mneyyy in #1354
- fix(codex): include hidden reasoning in TPS timing by @CikeSeven in #1356
- fix(codex): rejoin idle threads held by the native daemon by @CikeSeven in #1358
- fix(context): align context bar with backend occupancy by @CikeSeven in #1363
- test(ci): reliably observe screen transitions and cold-start frames by @CikeSeven in #1365
- chore(release): prepare v0.14.0 by @CikeSeven in #1366
Full Changelog: v0.13.0...v0.14.0