交互与命令

August 31, 2026 · View on GitHub

文档索引 · English

输入与全局快捷键

按键行为
Enter空闲时发送;模型工作时把文本 steer 到当前回合的下一步边界;菜单打开时确认选项
Tab补全 / 命令或 @ 文件;模型工作且输入非空时排入当前回合之后的 follow-up
Ctrl+Enter打断当前回合并立即处理输入消息
Shift+Enter / Ctrl+J在光标处插入换行;终端无法上报 Shift 修饰键时可用 Ctrl+J(LF)兜底,macOS Terminal.app 用 Option+Enter
Shift+Tab在配置的会话模式间循环(默认:默认 → 计划模式 → 完全访问)
Alt/Option+Up把最后一条尚未处理的消息取回输入框编辑
Up/Down菜单选择;普通输入中浏览历史或在多行文本间移动
Ctrl+V / Alt+V从系统剪贴板插入文本或文件;图片作为持久附件发送。终端拦截 Ctrl+V 时用 Alt+V
Ctrl+G用外部编辑器($VISUAL$EDITOR)编辑当前输入,保存退出后回填;:cq 或非零退出保留原稿;未设置变量时提示配置,无 vi 兜底
Ctrl+Shift+E展开全屏草稿编辑器(也可点输入行尾 ):行号 + 当前行高亮 + 行/字统计,Enter 换行、Ctrl+Enter 或「发送」按钮发送、Esc 或「收起」按钮收起(草稿保留);滚轮自由滚动、点击定位/拖选/双击选词与输入框一致;可经 /settings 重映射
Esc层级:关帮助 → 关命令菜单 → 关文件菜单(仅当前 @ token)→ 输入框内有选区时仅清选区(文本不动) → 中断回合并重投 pending 消息 → 有输入时清空 → 空输入连续两次 = 时间回溯 rewind;fullscreen 下有鼠标选区时优先取消选区(不复制)
Ctrl+C工作时中断;中断迟迟不收敛时再按一次强制退出;空闲且有输入时清空;空闲且输入框内有选区时复制选区到剪贴板(保留选区继续编辑);空输入时连续两次退出
Ctrl+DCtrl+C 同阶梯:工作中=中断(未收敛时再按=强制退出);空闲时连续两次退出
Ctrl+O切换 transcript/verbose 详情,展开思考与完整工具参数/输出
Ctrl+P切换启动时加载的 loaded-context 面板(面板在屏时有效)
Ctrl+T打开轨迹场景(等同 /trace);场景内 q/Esc 返回对话
Ctrl+R打开输入历史搜索;重复按或 Down 移到下一项
Ctrl+L强制清理并重绘物理终端
?输入框为空时打开快捷键和命令帮助
Help 内 ↑/↓PgUp/PgDnHome/End逐行滚动、翻页或跳到命令列表首尾;Esc 关闭
Shift+Up进入消息选择模式;方向键移动,Enter 展开单条,Esc 退出

动作型快捷键(粘贴、历史搜索、外部编辑器、Ctrl+O/T/P/R/L、子代理面板、显示全部、待办折叠)支持在 /settingsdsh-tuiShortcuts 中自定义:填写 alt+v 这类组合,多个用逗号分隔,留空恢复默认,保存即生效;与固定编辑键或其它动作冲突的组合会被拒绝。cordis.yml 亦可用 shortcuts.<action> 静态指定。

/ 有两种语义:普通输入模式中打开 slash command 补全;Ctrl+O 的 transcript 模式中打开会话全文搜索。全文搜索使用 n/N 在结果间前后跳转。

插件可以经 tuiShortcuts 接缝注册额外组合键(必须带 Ctrl 或 Alt);内建绑定 永远优先,冲突的组合在注册时就会被拒绝。插件弹出的托管对话框 (select/confirm/input)打开期间独占键盘:/ 移动、Enter 确认、 Esc 取消;插件在状态行(提示框上方)也可能有纯展示的贡献文本。

输入编辑

按键行为
Left/Right按字符移动光标;有选区时坍缩到选区对应边缘
Ctrl+Left/Right按单词移动
Home/End移到当前逻辑行首/行尾
Ctrl+A / Ctrl+E编辑器中移到当前逻辑行首/行尾;Ctrl+E 还会展开或折叠长会话中隐藏的旧消息
Ctrl+U删除光标前内容
Ctrl+K删除光标后内容
Ctrl+W删除前一个单词
Backspace / Delete删前一 / 后一字符;有选区时删除整个选区
打字有选区时替换整个选区,光标落在插入文本之后

vim 编辑模式(/vim

/vim 切换输入框的 vim 编辑模式(会话级、不持久化):开启后输入框左侧出现 INSERT 徽标,打字照常;Esc 切到 NORMAL 徽标,裸键按 vim 语义处理。

NORMAL 键行为
h / l左 / 右移一个字符
j / k下 / 上一行(多行输入)
0 / ^ / $行首 / 行首首个非空白 / 行尾
w / b下一个 / 上一个词首(空白分词)
x / X删除光标处 / 光标前字符(行尾时 x 删最后一个字符)
d + 第二键dd 删整行(含换行)· d$ 删至行尾 · d0/d^ 删至行首 · dw 删至词尾
u撤销最近一次 vim 编辑(栈上限 100)
i / I / a / A光标处 / 行首首个非空白 / 光标后 / 行尾进入 INSERT
o / O下方 / 上方新建一行并进入 INSERT
/插入 / 并切回 INSERT(打开命令菜单)
Esc取消待决 d;其余无操作(不触发现有清空 / 双击 rewind 语义)
Enter / Tab / 方向键 / Ctrl+* 组合照常放行(发送、补全、历史、编辑快捷键等)
其他裸键忽略,不插入

注意:vim 开启时 Esc 归 vim 管——时间回溯请退出 vim 模式后双击 Esc 或 用 /rewind;回合运行中 insert 模式下按 Esc 也只是回 normal,打断回合用 Ctrl+C / Ctrl+Enter。NORMAL 下清空输入用 Ctrl+Cdd

Bracketed paste(右键或终端原生粘贴)会保留普通文本与换行,不会把粘贴内容误当 成 Enter 提交。为保证输入框显示、点击与选区几何一致,终端 ANSI 控制序列会被剥离, Tab 会在进入编辑缓冲区时展开为空格。

全屏草稿编辑(Ctrl+Shift+E /

长草稿不再挤 5 行小窗:Ctrl+Shift+E(可重映射)或输入行尾的 按钮把当前 草稿展开成整屏编辑器,编辑状态(光标/选区/折叠/vim 模式)与输入框完全同一份。 可在 /settingsdsh-tui 关闭(expandEditor,默认开)——关闭后 与快捷键 两个入口都不再出现。

  • 外观:圆角边框随会话强调色/plan 色联动;左侧行号槽(宽度随行数伸缩, 光标行号提亮);光标行整行浅底色;标题行实时显示行数/字数,状态行显示 行 L · 列 C 与 vim 徽标(/vim 开启时)。
  • 键位Enter 换行(绝不误发送)、Ctrl+Enter 或「⏎ 发送」按钮发送并 收起;Esc 分层(先清选区,再收起编辑器,草稿保留);Tab 插入 4 空格 缩进;其余编辑键(方向/词跳/Home/End/Ctrl+U/K/W、vim NORMAL 键位)与 输入框一致。折叠块互斥:收起态粘贴大文本照旧折叠成 chip;编辑器一旦 展开块即散开(与点击 chip 展开同语义),展开期间粘贴一律是纯文本、直接 可编辑,收起后也不会再变回块。
  • 鼠标:点击定位光标、拖拽建选区、双击选词、Ctrl+C 复制选区,几何按 行号槽宽度校正;滚轮自由滚动(浏览时不强制跳回光标,任何光标移动后恢复 跟随);「发送」「收起」按钮可点击且 hover 提亮。
  • Ctrl+G 外部编辑器互补:不依赖 $VISUAL/$EDITOR,不离开终端。

@ 文件引用

在消息任意位置输入 @ 会打开文件补全菜单:继续输入过滤,Tab/ Enter 选择,目录可继续深入。普通文件名片段走模糊匹配@ment 命中 src/utils/mentions.ts,前缀/边界命中优先、短路径优先);输入路径形态 (@src/@./@../@~/@D:\ 或含分隔符)时只读取该目录做局部 补全,不再全仓扫描。Esc 只关当前 @ token 的菜单;异步候选刷新时按候选 身份保持当前选中项。发送消息时,文本文件内容或目录列表会自动附加 到消息中;PNG、JPEG、WebP、GIF 会通过 Harness 附件库作为真正的图片块发送。 文件读取走当前 workspace 的 FS 服务,提供者管理的 workspace 同样适用。

Ctrl+V 粘贴时,文件管理器(Windows Explorer、GNOME Files、KDE Dolphin 等)复制 的普通文件会插入路径,图片文件会自动插入 @ 引用。剪贴板位图会保存到附件库, 输入框显示 [Image #N],发送时变成真正的图片块;输入文本中不含 base64。

界面语言

/lang 在简体中文与英文界面之间切换(影响所有 UI 文案),选择持久化,重启后 沿用(0.3.7+)。/settingsdsh-tui → 界面语言 下拉项同样可以切换 (立即生效并保存到 ~/.dsh/settings.yamldsh-tui.langDSH_TUI_LANG 环境变量始终优先)。

消息投递语义

模型正在工作时有三种不同路径:

操作放置位置
Entersteer:送入正在运行的回合,在下一步边界被 Agent 领取
Tabfollow-up:等待当前回合结束后再处理
Ctrl+Enterinterrupt:中断当前回合并立即投递

输入框上方会显示尚未领取的消息。Alt/Option+Up 可以取回最后一条,模型工作时 按 Esc 会中断并立即重投当前 pending 消息。

会话工作流

Resume

/resume 打开会话浏览器——一个全屏界面,而不是浮层面板。默认列出当前工作目录 下的对话,按最近活动排序;确认后切换 Agent 并回放持久化事件。

浏览器只显示对话。模型委托出去的子 agent 运行也各自持久化为会话(判据是 会话头的 origin: 'subagent'),默认折叠并在顶栏计数,ctrl+s 可展开为父会话 下的缩进行。/rewind 产生的回溯分支不受影响——它只写 parentSession 而不写 origin,是用户自己的对话。只记录了启动策略、没有任何对话内容的会话不进列表, 只在顶栏计数,ctrl+x 显式清理(作用域与当前列表一致,不跨项目)。

按键作用
直接输入实时搜索标题、目录、分支、模型
/ PgUp PgDn移动、翻页
Enter恢复选中的会话
Tab预览该会话的最后几轮往来
ctrl+a切换「仅本项目 / 全部项目」(跨项目时按目录分组)
ctrl+b只看上次使用时所在分支的会话
ctrl+s展开 / 折叠子 agent 运行
ctrl+p固定 / 取消固定选中会话(固定项在当前筛选范围内置顶)
ctrl+r / ctrl+d重命名 / 删除选中会话
ctrl+x清理没有对话内容的空会话
Esc先清空搜索,再退出

会话行点击 = 恢复该会话(同 Enter);点击 ★/☆ 或 ctrl+p 切换固定状态, 固定项原子持久化到 ~/.dsh-tui/session-pins.json。右键菜单提供打开、固定/ 取消固定、重命名和删除;删除/清理的确认行点击 = 确认执行,取消保留键盘 Esc。 展开的子 agent 运行也可固定,并会在「已固定」组中独立置顶。

每行显示标题、最近活动时间、上次使用时的 git 分支、日志大小与模型。标题按证据 分级:/rename 的名字、自动生成的标题、首条提示的摘录,或(都读不到时)目录名 ——最后一种会显示为灰色,表示它不是一个真正的名字。

列表只读取会话日志两端的定界窗口,并按持久层自己的变更令牌缓存结果,因此打开 速度与历史长度、单个会话大小都无关。

Windows dsh-tui.cmd --resume 使用 ~/.dsh-tui/resume.txt 中最后选择的会话 ID (该文件同时双写到旧路径 ~/.dsh-cc/resume.txt,供只读旧路径的旧版启动器过渡)。

会话总览(Agent View)

/agentview 打开会话总览——一个全屏界面,列出本进程内的全部会话:当前会话、 从这里派发的后台会话,以及磁盘上已停止的历史会话。行按状态分组(等待输入 > 运行中 > 失败 > 已完成 > 空闲 > 已停止),每行带一行活动摘要——取自会话自身 输出,不做额外摘要模型调用。

按键作用
直接输入底部输入框写任务描述
Enter输入框有文字=派发新后台会话;否则切换到选中会话
Shift+Enter派发并立即切换过去
/ PgUp PgDn移动、翻页
切换到选中会话
Space打开/关闭预览面板(输入框为空时);预览内输入回复 + Enter 发送
Ctrl+X停止后台会话;两秒内再次按下删除
Ctrl+R重命名选中会话
Esc关预览 → 清空输入 → 退出
Ctrl+C清空输入;再按一次退出
?快捷键帮助

派发出去的会话在本进程内独立运行(回合、工具、审批照常),TUI 切换到其他会话 不打断它。后台会话的审批请求会显示为「等待输入」,审批面板直接在总览内弹出 (标注来源会话),行的摘要显示它被阻塞的问题。/bg(别名 /background)把 当前会话转入后台继续运行、终端切到新会话并打开总览;聊天输入框为空时按 是同一件事——当前会话转入后台并直接打开总览(输入框有文字时 照常 移动光标)。经 //bg 打开时,总览顶部显示「当前会话已转入后台——Enter 打开它 · Esc 返回它 · Ctrl+C 两次退出」,最终 Esc 会返回被转入后台的会话。 输入框底部在有会话等待输入时显示「← N 个会话等待输入」计数(N=0 时不占行)。预览与回复对运行中会话即时生效; 已停止会话需先 Enter 切换进去。后台会话随 TUI 进程退出而停止(日志保留, 可恢复);没有 supervisor 进程。

Rewind

输入框为空时连续按两次 Esc 打开用户消息列表。选择并确认后:

  1. 找到该消息所属 turn 的开始事件。
  2. 通过 DSH session fork 创建分支会话。
  3. 回放该边界前的历史。
  4. 把原消息放回输入框供修改和重发。
  • 边界取该消息所属回合开始之前不能回退到第一条消息
  • 若模型正在工作:先取消回合并等落定(最长 30s)。
  • 回退后的分支不算子 agent(只写 parentSession,无 origin 标记),继续用 当前模型路由 + 会话自己的 preset。

插件可以介入这一步(tui/rewind-prompt 决策事件):否决此次回退(给出原因), 或在确认页提供额外的回退模式——例如"回退会话 + 恢复此间修改的文件"。确认页 第一项恒为"仅回退会话";选择插件模式后,回退完成时插件会收到 tui/rewind-done 通知(带所选模式 id 与新旧会话 id)并可回执一条摘要。

鼠标:列表页点击行只选中(进入确认必须键盘 Enter);确认页的消息行 / 模式行点击 = 直接执行该回退。

侧问 /btw

/btw <问题> 发起一次不打扰主任务的快速侧问:复用当前会话上下文(system prompt + 已有历史)做一次无工具、单轮的模型调用,答案显示在可滚动的浮层 面板里。要点:

  • 不进会话历史:问答不写入 session log,也不会出现在主上下文与 token 计数里(关闭面板即消失)。
  • 不打断主回合:模型正在流式输出时也可以触发,主任务继续运行。
  • 面板内 / 滚动,Space/Enter/Esc 关闭,c 复制答案;等待答案 时 Esc 取消。
  • 再次触发 /btw 会中止上一个侧问。

轨迹场景(/trace / Ctrl+T)

整屏场景(不污染 scrollback),查看会话全程的时间线:

按键作用
/(或 h切换 时间线 / 热点 视图
/ PgUp PgDn移动、翻页
[ / ]跳上 / 下一个失败点
{ / }跳上一轮 / 下一轮
/查询行:tool: kind: turn: err: run: >10s tok>1k 前缀,多条 AND,命中列原位高亮
m循环投影模式(等分 / 墙钟 / 压缩空闲)
g / G跳到顶部 / 底部
Enter展开详情;j/k 在详情内翻页
t(热点视图)循环排序(耗时 / 次数 / token)
q / Esc退出;Esc 三层:收详情 → 清查询 → 关闭

以上全部有鼠标等价(inline 模式的整屏场景同样启用鼠标跟踪):时间线/热点 行点击跳光标、页签与右上标签点击切换/循环、查询行与页签空白区点击打开 / 搜索、波形带(含标尺)点击列跳最近事件、滚轮移动光标。

/settings 设置编辑器

/settings 打开插件设置编辑器,按命名空间读取/编辑。编辑是暂存制/ 移动、Enter 展开/切换/编辑,s 保存 / d 放弃 / Esc 先丢弃 脏区再退出。鼠标:字段/组行点击 = 设焦点并执行该行 Enter 动作,悬停即 移动焦点,滚轮走焦点(焦点跟随窗口下即滚动)。dsh-tui 自身命名空间的字段写入 settings.yaml 用户层并实时生效langstatusBar.* 等);未声明 TUI 区块的命名空间以只读形式列出,需 手工编辑 ~/.dsh/settings.yaml

Model 与 preset

/model 通过在当前历史末尾 fork 会话来切换模型,因为 DSH 没有原位换模型 API。 旧会话仍保留在 /resume 中。

/preset 只允许空白会话原地切换。已经开始的会话会把选择保存为下一次 /new 或启动时的默认值。详细规则见配置参考

工作区

/workspace resume 打开工作区选择器;/workspace rename <名称> 重命名当前工作区; /workspace open <目标> 直接打开工作区并创建一个全新会话。/resume/rename 仍分别用于当前工作区内的会话切换和当前会话重命名。 本地目标可以是绝对路径、相对当前本地工作区的路径或标准 file:// URI。其他 URI scheme 和 /workspace 子命令可由可选插件注册,TUI 本身不认识任何具体外部协议。当前工作区属于插件时, 相对路径也由该插件在自己的路径空间内解析。

输入 /workspace 后会列出内建及插件注册的子命令;继续输入前缀并按 Tab 即可补全,例如 /workspace rem。插件别名同样参与匹配。

启动器同样接受工作区目标,例如 dsh-tui .dsh-tui ../projectdsh-tui file:///path/to/project。未安装任何工作区插件时,本地路径、!command 和全部普通 TUI 会话流程保持可用。

Fullscreen 与鼠标

fullscreen: false 是默认 inline 模式,终端模拟器拥有原生 scrollback 和选区。

fullscreen: true 使用 alternate screen,并启用应用内鼠标处理:

操作行为
滚轮按位置路由:补全/命令菜单悬停处移动菜单选中行;最上层滚动容器(转录 / 帮助 / 子代理面板)滚它;其余位置滚动会话消息列表;浮层打开时不穿透滚动背后转录;轨迹场景移动光标(时间线一格 ±3 行、热点 ±1 行、详情展开时滚详情);设置屏移动焦点行
拖拽选择文本,松开后立即复制并清除选区
双击/三击选择单词/整行并复制
Esc取消正在进行的拖拽(或现有选区),不复制
单击消息行纯文本行(用户/assistant)无操作——转录是阅读区,鼠标职责是选字
单击工具卡 / thinking / compact 摘要展开 / 收起(hover 时标题提亮指示,行右侧空白不触发)
单击子代理卡打开该子代理的详情场景(hover 时状态符号提亮)
单击输入框定位文本光标到点击处(多行/换行/CJK 均按显示宽度对齐)
输入框内拖拽建立输入框选区并高亮渲染(caret 跟随拖拽末端):Backspace/Delete 删选区、打字替换选区、←/→ 坍缩到对应边缘、Esc 仅清选区;拖拽只映射可见行(暂不做边缘自动滚动);折叠块存在时选区钳制在 head 或 tail 一侧、不跨 chip 行
输入框 Shift+click从选区头(无选区时为光标)扩展到点击处
输入框双击选词(组件内自检测,500ms / 1 格;路径与标点连串整选)
输入框 Ctrl+C(有选区)复制选区到剪贴板(OSC 52 + 原生工具兜底)并保留选区继续编辑
全屏编辑器Ctrl+Shift+E 展开)点击定位/拖选/双击选词与输入框同路径(坐标按行号槽校正);滚轮滚编辑窗口(位置路由,光标移动后恢复跟随);「发送」「收起」按钮点击执行、hover 提亮;输入行尾 点击展开
单击「加载更早消息」/「ctrl+e 显示前 N 条」加载更早消息 / 展开全部
单击 StickyHeader / 「↓ N new messages」跳回固定消息处 / 滚动到底部
单击超链接打开浏览器
单击 picker / 菜单条目行选中并立即应用(模型/技能/活动帧/预设/权限/plan/语言/主题/effort 档位/命令与文件补全/历史命令/会话行/thinking 显示模式/工作区目标与子菜单/工作区命令分支),与键盘 Enter 同路径;busy 或输入态中的浮层行禁点
单击 rewind 候选行 / 确认页列表页点击只选中(确认保留键盘 Enter——高危操作显式触发);确认页消息行 / 模式行点击 = 直接执行(确认页本身即显式确认层)
单击审批 / 问卷 / 计划评审 / 插件对话框决定行直接提交该决定(agent 阻塞等待时可鼠标放行)
单击轨迹场景时间线/热点行点击 = 光标跳该行(热点行跳回时间线定位该组,同 Enter;hover 亮 dim ▸ 轻指示不刷背景);页签点击切视图;右上排序/投影标签点击循环;查询行与页签空白区点击打开 / 搜索;波形带(含标尺行)点击列 = 跳最近事件
单击 /settings 字段 / 组行设焦点并执行该行的 Enter 动作(boolean/select 循环值、文本进编辑态、组进组页);悬停即移动焦点(lazygit 语义),编辑态整屏不响应防误触
单击会话浏览器确认行删除/清理确认行点击 = 确认执行(同 Enter);取消保留键盘 Esc
单击帮助菜单命令行填入 /name 并关闭帮助(Tab 补全的鼠标等价)
键盘扩展选区有选区时 Shift+←/→/↑/↓/Home/End 扩展 / 收缩(跨行环绕)

复制优先使用 OSC 52;本地终端可回退到 wl-copyxclipxsel,tmux 使用 load-buffer -w。设置 DSH_TUI_DISABLE_MOUSE=1 可临时关闭 fullscreen 鼠标。

ask_user_question 问卷

模型调用问卷工具时,问卷面板暂时拥有键盘:

按键行为
Up/Down移动选项
Space多选题勾选或取消
Tab切换到自定义文本回答
Enter提交当前题
Esc(第 2 题起)返回上一题并保留当前草稿
Esc(第 1 题)取消整批提问,模型收到 ASK_CANCELLED
Ctrl+C从任意题取消整批提问,模型收到 ASK_CANCELLED(harness 侧中止仍报 ASK_ABORTED

最后一行是自由输入行:直接在选项行打字 = 附加该选项标签 + 自定义文本一起 提交(不必先 Tab),Tab 直达输入行。

一批多题以及并发子代理提问会按 FIFO 逐题显示。完成后,问答摘要折叠进本地 transcript。

计划评审(plan review)

计划模式下模型调用 exit_plan_mode 时,计划全文以 markdown 渲染在评审面板中 (intent: plan-review 的专用决策布局):

按键行为
Up/Down在选项与底部反馈输入行之间移动
鼠标滚轮滚动计划正文;批准 / 继续规划 / 反馈行保持钉在视口内
1/2直接提交对应选项(反馈缓冲为空时;非空则数字视为反馈字符)
打字进入反馈输入行
Enter(选项行)提交该选项;批准行有反馈时会报错——批准必须不带反馈,否则协议视为"继续规划"
Enter(输入行)提交"继续规划"并附上反馈文本
Esc打断评审去说话(ASK_CANCELLED),模型停留在计划模式

批准计划或执行 /plan off 后,会话恢复进入计划前的实际沙箱与审批策略; Shift+Tab 切走则保留用户选择的目标模式,包括运行中延迟生效的切换。 恢复已有会话时从事件历史还原进入前权限;历史不足以确定的权限保持不变, 不会因为无法匹配配置模式而自动回落到 full access。

工具审批(approval)

权限层发起 approval/request 时,审批面板显示工具名、从配对 tool call 提取的 完整命令与原因,并暂时拥有键盘(同时挂起问卷时审批优先):

按键行为
Up/Down移动选项
1 / 2允许(仅本次)/ 拒绝
Enter提交当前焦点项
Esc / Ctrl+C拒绝(fail closed)

协议只有「允许一次 / 拒绝」两种结果,没有「总是允许」

Slash Commands

命令菜单由本地命令与 DSH 命令注册表合并而成。输入 / 查看当前组合真正可用的 全集。命令描述随界面语言(/lang)中英切换:内置命令与已收录的注册表命令 (/plan/goal/feedback)显示中文翻译,其余注册表命令回退注册表原文。

分组命令
会话/new/resume/agentview(会话总览)、/bg(别名 /background,会话转入后台并打开总览)、/rename/recap(最近活动摘要 + 建议标题一键应用;设置 recapOnOpen 开启时打开会话自动出分隔线 + 回顾: 摘要行,发送新消息后消失,默认开)、`/workspace resume
状态/context/status/cost/balance(DeepSeek 官方余额:摘要行 + hover 明细,点击刷新)、/config/doctor/init/agents/jobs(后台任务面板:状态/时长/退出码,k 停止)、/settings
模型与显示/model/effort/thinking/tokens/activity/preset/theme/color(会话强调色:无参打开调色板选择器,<名> 直接设置,status/reset;输入框边框 + 右上角会话名标签,按会话保存;标签默认关闭,/settings 可开)、/lang
账号与策略/provider/login/logout/permission/add-dir/hooks/mcp/pluginscheck <路径> 校验插件清单)
Skills/skills 浏览 DSH 从当前 profile、用户与项目发现的技能;可直调技能以 /name 加入菜单
其他/update/vim(vim 编辑模式开关,见「输入编辑」)、/terminal-setup/connect/help/exit(别名 /quit/q
注册表/plan/goal,以及当前 DSH 组合注册的其他命令

dsh-TUI 不预装通用技能;技能内容与发现规则由 DSH 及当前组合负责。

补充语法:

  • /activity 打开动画选择器;/activity frames <name> 直接设置(帧名 30 个:random 随机 + claude star2 sand triangle box box2 corners point layer flip aesthetic hamburger moon moon8 comet breathe dots arrow spark bar braille arc circle grow noise bounce rainbow dqpb toggle,默认 moon8); /activity status 查看当前选择。
  • /preset <id>/preset status 见配置文档。
  • /effort 打开推理强度滑杆(←/→ 实时调整);/effort <id> 直接设定, /effort status 查看当前档位。
  • /theme <name>/theme status 见主题文档。
  • /permission 的名册来自 DSH permissionPresets registry,按声明顺序显示并参与补全;第三方预设无需 TUI 硬编码,custom 只显示当前态,不是可选目标。registry 服务缺失时 TUI 使用三项 legacy 兼容名册;服务已挂载但损坏、为空或不一致时标记 unavailable 并 fail closed。若外部 /permission 命令未注册,输入沿用现有默认命令/model dispatch。
  • /lang 切换中英界面语言(见「界面语言」)。
  • /compact 压缩会话历史;minimal preset(仅 bash+编辑器)下不可用。
  • /thinking 扩展思考显示开关,仅本次界面状态、不持久化
  • 启动后会后台检查 npm 新版本;发现更新时会提示。检测遵循 npm registry 配置(NPM_CONFIG_REGISTRY~/.npmrc),镜像源用户看到的就是安装源 的最新版。/update 更新已安装的 @deepseek-harness-tui/dsh-tui,然后自动重启并恢复当前会话;当前回合运行时需等待完成。 仅在 dsh --profile <name> 启动时可用(源码运行等场景会提示不可用); 已是最新版时直接提示,不会重启。
  • /plan [off|message]/goal ... 由 DSH 命令插件处理并写入会话事件。
  • Skill 命令由 host 注入对应 SKILL.md 的技能正文后执行,参数原样随行; 技能内容与发现规则由 DSH 及当前组合负责。

/connect/hooks 当前是兼容占位命令;当 DSH 组合没有 对应能力时会给出明确说明,而不是静默执行。

外部注入通道(编辑器集成)

运行中的会话会开一个本会话独占的本地注入通道,供编辑器插件(如 dsh.nvim)把上下文推进输入框。它是 OpenCode POST /tui/publish 的对应物,但走本地 socket 而非 HTTP 端口:无端口 分配、无鉴权面,端点随会话退出自动清理。

  • 传输:Unix domain socket ~/.dsh-tui/inject/<sessionId>.sock (Windows 为命名管道 \\.\pipe\dsh-tui-inject-<sessionId>)。
  • 发现~/.dsh-tui/inject/servers.json 列出每个存活会话 (pidsessionIdcwdsocketPath),客户端据此按 cwd 匹配项目并 选择目标会话;会话退出时该记录被移除。
  • 协议:换行分隔的 JSON,每行一条: {"type":"prompt.append","text":"@src/foo.ts "} 把文本追加到输入框; {"type":"command.execute","command":"prompt.submit"} 提交当前输入。追加文本以 空格结尾(OpenCode 惯例)时保持不提交,便于继续编辑。
  • 接线:追加复用输入框的 PromptController.append,提交走 channel.submit(工作态下自动进 inbox,回合结束后处理)。实现见 src/dsh-adapter/inject-channel.ts,回归门禁 scripts/verify-inject-channel.mjs