Repository navigation
Releases: XMoon/dsh-pi-tui
Release list
dsh-pi-tui 0.5.4
中文
安装与版本对应
本版以已发布的 DSH 0.2.1-rc.4 作为精确验证目标,最低版本仍为 0.2.1-rc.2。安装 DSH 需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.1-rc.4
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.4
dsh --profile pi-tui已发布的 0.5.3 仍可与 0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4 配对使用。旧版本 DSH 的配对关系不变:@deepseek-ai/dsh@0.2.0-rc.2 使用 @xmoon76/dsh-pi-tui@0.5.1 或 @xmoon76/dsh-pi-tui@0.5.2-rc.1; @deepseek-ai/dsh@0.2.0-rc.1(含 0.1.7-rc.2)使用 @xmoon76/dsh-pi-tui@0.5.0,@deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8。
变更
-
Settings 重构为唯一的全屏工作区。
/settings与/status现在打开同一个 工作区,默认落在 About 主页;宽/中屏是分类栏加内容栏,窄屏(<76 列)直接显示 About。一级分类固定为 About / Models / Account / Agent / Appearance / Conversation / Input & Terminal / Tools / Plugins,只有扩展设置注册表存在条目时才追加 Extensions;Tab/Shift+Tab切换区域,←/Esc逐层返回。所有页面共用同一 标题、状态与底部操作栏,/plugins、/footer、/statusline和裸/keybindings都是工作区内深链。About 显示版本、后端、当前会话身份、整会话统计、TTFB/吞吐与 Context 占用,支持c复制所选事实、C复制整份报告、r刷新。旧主设置编辑器、 独立插件全屏页与旧/status页面均已移除,配置行不再有逐行复制按钮。 -
tmux 图片改为默认自动尝试准入。 满足严格条件的 tmux 不再需要显式设置环境 变量;
PI_TUI_TMUX_KITTY_IMAGES=0或PI_IMAGE_PROTOCOL=none/0仍可关闭。不会 自动修改 tmux 配置。
新增
-
Models 与 Account 工作区。 Models 列出 Host provider 目录、API key 是否存在 (不是连通性测试)、provider 详情、遮蔽输入、清除确认、Add Provider 向导与 provider 原生登录;首页只列已配置 provider,未配置的进入可选目录,目录与凭据在 首帧后一次读取,目录大时不阻塞按键。Account 显示登录状态、浏览器授权 URL、SSH 隧道提示、独立钱包、取消当前尝试、刷新与二次确认退出登录。DeepSeek Account 登录 使用官方
host-webserver的127.0.0.1:0回环回调,TUI 不接触 token/grant,--help不监听端口;/login、/logout直接打开对应页面深链。 -
Settings 现在可直接编辑所有配置。 Appearance 的 Icon style 与 Status line mode;Conversation 的 Transcript detail、Thinking detail、Progress updates、 Response style、Submit while busy、Git attribution;Input & Terminal 的 Home/End 键、Fullscreen、滚轮行数、通知、Terminal progress、Footer 布局与 Keyboard shortcuts;Agent 的审批策略、默认权限、子代理模型白名单与选择、用户 shell 沙箱; Tools 的 Web Search / Fetch 与 Visual tools;Extensions 按插件分组的动态设置。 写入都要显式确认,并按权威回读显示
Verified、Not saved或Outcome unknown;Fullscreen偏好保存后在正常退出 Settings 时才切屏。 -
审批改为编辑器席位的阻塞式操作面板。 完整 Reason/Arguments 在可滚动正文中 阅读(不再只显示前六行),
y允许一次、n拒绝、Esc/Ctrl+C取消、c复制原始参数、e展开。全屏可点击实际绘制的 Allow once / Reject / Cancel 并 滚轮滚动,普通模式保持键盘;窄窗口显示真实精简内容或Resize to inspect more, 不会画出被裁掉的决定。 -
终端图片按真实能力准入。 直连 Kitty、Ghostty、WezTerm、Warp、Tern 及显式
PI_IMAGE_PROTOCOL=kitty的终端共用同一套受管图片生命周期;Zellij 向当前窗格 实时查询能力;tmux 在allow-passthrough=all、真实身份与唯一显示客户端检查通过 后自动尝试 Unicode placeholder,未知终端需返回匹配的e=T,U=1;OK。无回复、普通OK、错误或超时保持纯文字,不退回旧转义路径。tmux Control Mode 客户端不计入显示 客户端;PI_IMAGE_PROTOCOL=none/0与PI_TUI_TMUX_KITTY_IMAGES=0仍可关闭,旧但 支持 U1 的终端可设置PI_TUI_TMUX_KITTY_PLACEHOLDERS=1。 -
Kitty 终端支持 JPEG/WebP,草稿与查看器都有预览。 Transcript 缩略图、草稿 预览卡和全屏查看器统一使用一份受限 PNG 派生(WebP 取首帧、按 EXIF 摆正、最长边 768 像素);信息行保留原始名称、尺寸、格式与字节数。草稿最后一张图片显示为有界 卡片,全屏
x只删除当前占位符、Ctrl+-可撤销;全屏信息行[-]/[+]只折叠 该图,点击正文打开只读查看器;新增/view-image列出当前窗口图片,Enter查看、Esc back返回原列表。 -
Ctrl+V、
/attach、/image统一到当前编辑器,并支持正文内联补全。 连续粘贴 按触发顺序落稿,文字插在当前光标处、不发送不覆盖,图片得到规范占位符;会话、owner 或编辑器座位变化后旧结果不写入新草稿。/attach、/image与 Ctrl+V 共用同一编辑器 座位、草稿存储和 Client cwd/文件限制,TSP 也可执行。在正文任意位置输入/ima、/att会出现内联下拉,选中文件只替换当前片段,前后文不变,不发送草稿,一次 Undo 回到路径文本。 -
交付文件尾部与
/deliverables面板。 最终回答的present文件以最多四项、 每项两行的紧凑尾部显示(相对当前显示会话工作区的路径 + 描述),超出显示+N more · /deliverables;全屏可点击Browse all与逐文件Details。/deliverables含 Files/Turns/Details,支持↑↓、Enter、/过滤、T切换 Turn、C复制原始 Host 路径、Esc返回/关闭;Details 读取 Host 文本一页 120 行, 二进制/文档后缀不读字节,文件变化从头重启;面板内文字可用鼠标选中复制,面板居中 且 resize 保留状态。 -
图表/SVG 工具、Visual tools 开关与发布。 新增常驻
dsh_pi_tui_chart(bars/spark,2–12 个带标签数值与可选单位)与dsh_pi_tui_svg(受限安全子集的 静态 SVG);结果显示在原 Tool Card,Tern 支持时原生绘制,否则显示精确数值/描述或 受限栅格 PNG。Settings → Tools → Visual tools(默认 On)一处开关同时管理dsh_pi_tui_chart、dsh_pi_tui_svg与present_visual。模型可用visual-ref-v1:sv1_…发布本会话更早步骤的 1–8 个成功图表/SVG;发布不新增会话 事件,已发布图在最终回答原位插入或按顺序附在末尾,同一 ref 最多一次。PiTUI 提供Copy Data、View/Copy SVG、Alt+V/Alt+C/Alt+O和全屏 SVG 阅读器;/copy复制显示正文(不含已消费的 marker 行)。 -
实验性 TSP renderer 支持原生工具卡、Work Hub、图片与已发布图。 工具头按工具 声明的 kind 显示 path/pattern,
run_code子调用显示为Child calls · N树, 流式参数显示Preparing <Tool>…行,工具结果图片按块顺序原生显示;/tasks、/subagents打开 Work Hub(Needs attention / Subagents / Jobs),Enter/View details打开只读 Work Details,Back返回同一选择;Ctrl+V 图片、Dock 草稿缩略图与历史图片按原顺序显示,已发布图表/SVG 在最终回答内原位显示并带Copy按钮,Alt+V/Alt+C选择与复制。
修复
-
热重载不再误退出运行中的 TUI。 重新挂载的启动行此前会把“启动器早已就绪”误判 为“TUI 没有挂载”,以
required TUI surface did not mount结束进程;现在只有真正 见证过该次启动的行才做判定,冷启动缺失仍会非零退出并给出提示。 -
Shift+Tab 切换权限预设不再报错。 之前官方
/permission收到undefined信号,抛Cannot read properties of undefined (reading 'aborted'),预设不会切换; 现在使用既有生命周期 AbortSignal,Direct 与 Remote 行为一致。 -
旧扩展句柄重复释放不再删除新注册。 主题、自动补全、键盘快捷键、消息/工具 渲染器与编辑器六类 Stable 注册现在一次注册只释放一次;旧句柄显式
dispose()、 插件 Fiber 卸载和注册失败回收共用同一个一次性清理,新注册及其健康记录、主题卸载 通知都不再被旧句柄影响。
English
Installation and version pairing
This release validates against the published DSH 0.2.1-rc.4 and keeps the minimum at 0.2.1-rc.2. Installing DSH requires explicitly allowing its native install scripts:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.1-rc.4
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.4
dsh --profile pi-tuiThe published 0.5.3 remains compatible with 0.2.1-rc.2, 0.2.1-rc.3 and 0.2.1-rc.4. Older DSH releases keep their pairings unchanged: @deepseek-ai/dsh@0.2.0-rc.2 uses @xmoon76/dsh-pi-tui@0.5.1 or @xmoon76/dsh-pi-tui@0.5.2-rc.1; @deepseek-ai/dsh@0.2.0-rc.1 (including 0.1.7-rc.2) uses @xmoon76/dsh-pi-tui@0.5.0, and @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8.
Changed
-
Settings is now the single full-screen workspace.
/settingsand/statusopen the same workspace and land on the About home. Wide and medium terminals show a category rail beside the content; narrow terminals (under 76 columns) show About directly. The fixed categories are About / Models / Account / Agent / Appearance / Conversation / Input & Terminal / Tools / Plugins, with Extensions appended only while the extension settings registry has rows.Tab/Shift+Tabmove between regions and←/Escstep back. Every page shares one header, status line and bottom action bar;/plugins,/footer,/statuslineand bare/keybindingsare deep links into the same workspace. About shows versions, backend, the captured session identity, whole-session statistics, TTFB/throughput and Context occupancy, withcto copy the selected fact,Cfor the full report andrto refresh. The legacy main settings editor, the standalone plugin screen and the old/statuspage are gone, and configuration rows no longer have per-row copy buttons. -
Images in tmux now attempt admission automatically. A tmux server that meets the strict conditions no longer needs an explicit environment variable;
PI_TUI_TMUX_KITTY_IMAGES=0orPI_IMAGE_PROTOCOL=none/0still disables the capability. No tmux configuration is modified automatically.
Added
-
Models and Account workspaces. Models lists the Host provider catalog, API-key presence (not a connectivity test), provider details, a masked editor, clear confirmations, the Add Provider wizard and provider-native sign-in. The home lists only configured providers; missing ones live in the Add Provider catalog, and the catalog and credentials are read once after the first frame so a large catalog never blocks the keyboard. Account shows sign-in state, the browser authorization URL, SSH tunnel guidance, independent wallets, exact attempt cancellation, refresh and a confirmed sign-out. DeepSeek Account sign-in uses the official
host-webserverloopback callback on127.0.0.1:0; the TUI never receives a token or grant,--helpopens no port, and/login//logoutopen the matching page deep link. -
Settings now edits every configuration field in place. Appearance: Icon style and Status line mode. Conversation: Transcript detail, Thinking detail, Progress updates, Response style, Submit while busy and Git attribution. Input & Terminal: Home/End keys, Fullscreen, wheel lines, notifications, Terminal progress, Footer layout and Keyboard shortcuts. Agent: approval policy, default permission, subagent model allowlist and selection, and user shell sandbox. Tools: Web Search / Fetch and Visual tools. Extensions: dynamic settings grouped by plugin. Every write needs explicit confirmation and reports
Verified,Not savedorOutcome unknownfrom the authoritative read-back; a savedFullscreenpreference applies after Settings closes normally. -
Approvals now use a blocking action sheet in the editor seat. The full Reason/Arguments body is readable in one scrollable area (no six-line argument preview).
yallows once,nrejects,Esc/Ctrl+Ccancels,ccopies the raw arguments andeexpands. Fullscreen can click the actually painted Allow once / Reject / Cancel actions and wheel the body; regular mode stays keyboard-only. Short viewports show the real compact payload orResize to inspect more, never a cropped decision. -
Terminal images are admitted by real capability. Direct Kitty, Ghostty, WezTerm, Warp, Tern and terminals explicitly set to
PI_IMAGE_PROTOCOL=kittyshare one managed image lifecycle. A Zellij pane queries its current pane's live capability; tmux automatically attempts Unicode placeholders afterallow-passthrough=all, the live identity checks and the single display client check pass, and an unknown terminal must return a matchinge=T,U=1;OK. No reply, a plainOK, an error or a timeout stays text-only and never falls back to the legacy escape path. tmux Control Mode clients do not count as display clients.PI_IMAGE_PROTOCOL=none/0andPI_TUI_TMUX_KITTY_IMAGES=0still disable images; an older terminal that ...
dsh-pi-tui 0.5.3
中文
安装与版本对应
本版把 DSH 最低版本提高到已发布的 0.2.1-rc.2,并以该版本作为精确验证目标。安装 DSH 需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.1-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.3
dsh --profile pi-tui@deepseek-ai/dsh@0.2.1-rc.1 没有对应的 TUI 版本。旧版本 DSH 的配对关系不变: @deepseek-ai/dsh@0.2.0-rc.2 使用 @xmoon76/dsh-pi-tui@0.5.1 或 @xmoon76/dsh-pi-tui@0.5.2-rc.1;@deepseek-ai/dsh@0.2.0-rc.1(含 0.1.7-rc.2)使用 @xmoon76/dsh-pi-tui@0.5.0,@deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8。
新增
- 插件管理统一到一个全屏页面。
/plugins和 Settings 里的一级Plugins现在打开 同一个 Plugin Manager:按 TUI & Extensions / Official DSH / Third-party / Experimental 分组,可以搜索、筛选,键盘和鼠标都能操作。14 个官方插件从真实的 DSH 目录读取:已安装的可以启用/停用,未安装的官方插件可以在确认后安装,页面上会显示 安装版本、等待批准的执行脚本和是否需要重启。 - 实验性插件会明确写出它在终端里能做什么、不能做什么。 每个官方实验插件都会写明 可用的界面和限制(有些只能在 Web UI 里用,有些只能通过现有的工具/任务/活动/
/skill/标题界面使用),不会因为启用就变成“Host 已支持”。升级方式也按实际情况 说明:跟随 DSH 升级、先移除再从 profile 安装,或交给外部管理;不提供原地更新, 也不会悄悄重装。 /model可以直接选到 DSH 0.2.1-rc.2 提供的deepseek-flash。 候选只来自 DSH 的模型目录,按精确的(provider, model)身份搜索和提交,显示名不会被当成 ID。- Session 换工作目录后,界面会跟着新目录走。 Footer、历史、
!Shell、@补全、 Skill 目录和命令执行都读取切换后实际生效的目录;会话列表、归档和新会话仍按原始 项目目录归类。 - 新增
/settings → Other → Web Search / Fetch入口。 沿用现有的设置编辑器, 可以在这里选择两套 DeepSeek API、查看 API key 的来源并编辑 endpoint。保存结果以 Host 实际读回的值为准,只有写入和读回一致才显示Verified。默认的 Messages/HTTP 不会调用收费 API;Share Original Question只发送最多 128 字符的触发问题(不含 完整历史或系统提示词),endpoint 必须是可信的 HTTPS。 - Task Center 会显示外部 provider 执行的任务。 这类任务没有本地子会话,会单独 显示为一行并标注
External · no local session;选中时会说明原因,不会打开不存在 的详情页,也不会显示 Stop/Continue。本地子会话的显示不变。
变更
-
需要 DeepSeek Harness
0.2.1-rc.2,不再支持0.2.1-rc.1。 旧版本 DSH 的配对 关系不变(见上面的安装说明);从更旧的 DSH 升级时,请按上面的配对选择 TUI 版本。 -
Settings 的 Plugins 页新增
Open Plugin Manager。 宽屏和中屏可以在 Rows 栏 直接点这一行,或用 Enter、Right 打开;窄屏仍然一步就能打开。 -
停用或移除 Auto Review 前会先确认风险。 确认页会说明这可能把现有的 Auto 会话 变成 Full access,且 Auto Review 不是沙箱;默认选择 Cancel,确认之前不会改动 Host。
-
time-context等 Snapshot 注入不再把同一回合的 Activity/Thought 切成多块。 Compact 里随 Activity 折叠,Focus 里随 Thought 隐藏、展开后按原顺序恢复,Full 保持 原样;同一回合的后台任务完成通知也会一起折叠,空闲时的唤醒和其他 Context 仍然 单独显示。
修复
-
Plugin Manager 在正文没有可显示行时不再显示假的
Enter提示。 例如 80×2 这种 窗口:操作栏不再提示Enter,也不能用 Enter/Right 打开看不见的卡片详情;Esc仍然可用,搜索编辑里Enter apply确实会执行,所以仍会提示。 -
选择 B03 Auto 权限预设后,Footer 会继续显示当前权限。 之前 Auto 不在内置的 权限标签里,切过去后整个权限徽标都会消失;现在显示
[auto](compact/plain 格式 也一样)。 -
发出去的消息会带上运行 TUI 的进程时区。 官方
time-context不再显示Browser time zone ... unavailable:Direct 主会话和可续聊的子 Agent 在发送时读取 时区并写入请求,Remote 主会话仍由官方SessionFace读取;读不到可用时区时,消息会 在发出前被拒绝并恢复草稿,不会伪造时区。 -
Host、模型和工具返回的文本会在显示到终端前统一过滤。 单行文字和多行正文分别 处理,夹带的终端控制序列和换行不会再拆行、凭空多出一行;Job 输出仍保留允许的颜色 样式,原始记录、搜索和复制仍然使用原文。
-
全屏下用鼠标点击编辑器区域后,Task Quick 的
↓入口与其↓ view提示不再失效, 编辑器的导航键优先权、历史面板的按键归属与面板焦点状态也保持一致。 -
工具结果的多行预览只在确实有内容被隐藏时显示
…。 以前结尾的换行会被当成多了 一条记录,误显示…;按条数上限丢掉内容时,反而可能不显示。
English
Install and version pairing
This release raises the minimum DSH version to the published 0.2.1-rc.2, which is also the exact validation target. Installing DSH requires explicitly allowing its native install scripts:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.1-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.3
dsh --profile pi-tui@deepseek-ai/dsh@0.2.1-rc.1 has no paired TUI. Older DSH releases keep their pairings: @deepseek-ai/dsh@0.2.0-rc.2 uses @xmoon76/dsh-pi-tui@0.5.1 or @xmoon76/dsh-pi-tui@0.5.2-rc.1; @deepseek-ai/dsh@0.2.0-rc.1 (including 0.1.7-rc.2) uses @xmoon76/dsh-pi-tui@0.5.0, and @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8.
Added
- Plugin management now lives on one fullscreen page.
/pluginsand the first-levelPluginscategory in Settings now open the same Plugin Manager: grouped as TUI & Extensions / Official DSH / Third-party / Experimental, with search, filters and both keyboard and mouse. The 14 official plugins come from the real DSH catalog: installed ones can be enabled or disabled, missing official ones can be installed after confirmation, and the page shows the installed version, scripts waiting for approval and whether a restart is needed. - Experimental plugins now say exactly what they can and cannot do in the terminal. Each official experimental plugin shows its available surfaces and limits (some work only in the Web UI, some only through the existing tools/jobs/activity/
/skill/title surfaces), and enabling one never turns that into "the Host supports it". The upgrade path is spelled out as well: upgrade with DSH, remove and reinstall from the profile, or leave it to external management; there is no in-place update or silent reinstall. /modelcan select thedeepseek-flashmodel that ships with DSH 0.2.1-rc.2. Candidates come only from the DSH model catalog and are searched/submitted by the exact(provider, model)identity; the display name is never used as the ID.- When a session changes its working directory, the UI follows the new directory. The footer, history,
!shell,@completion, skill catalog and command execution read the directory that is actually in effect; the session list, archive export and new sessions still use the original project directory. - New
/settings → Other → Web Search / Fetchentry. It reuses the existing settings editor: choose either DeepSeek API, see where the API key comes from and edit the endpoint. A save counts only when the Host reads back the same value, soVerifiedappears only on a matching write and read-back. The default Messages/HTTP pair calls no billed API;Share Original Questionsends at most 128 characters of the triggering question (never the full history or system prompt), and the endpoint must be trusted HTTPS. - The Task Center shows tasks run by external providers. They have no local child session, so they appear as their own row marked
External · no local session; selecting one explains why, never opens a missing detail page and never offers Stop/Continue. Local child sessions are unchanged.
Changed
-
Requires DeepSeek Harness
0.2.1-rc.2and drops0.2.1-rc.1. Older DSH releases keep their pairings (see the install notes above); when upgrading from an older DSH, pick the TUI version from that pairing. -
The Settings Plugins page now has
Open Plugin Manager. Wide and medium layouts can click that row in the Rows column, or press Enter/Right; the narrow layout still opens it in one step. -
Disabling or removing Auto Review now asks for confirmation first. The confirmation explains that this can turn existing Auto sessions into Full access and that Auto Review is not a sandbox; it defaults to Cancel and changes nothing on the Host until confirmed.
-
Snapshot injections such as
time-contextno longer split one turn's Activity/Thought. Compact folds them into the Activity, Focus hides them in the Thought and restores them in their original order when expanded, and Full keeps the original layout; same-turn background-job notices fold the same way, while idle wakeups and other Context stay separate.
Fixed
-
The Plugin Manager no longer shows a fake
Enterhint when the body has nothing to display. In an 80×2 window with no body rows, the action bar no longer advertisesEnterand Enter/Right cannot open an invisible card;Escstill works, and the search editor keeps itsEnter applyhint because that action really runs. -
Choosing the B03 Auto permission preset keeps the current permission in the footer. Auto was missing from the built-in permission labels, so the badge disappeared when it was selected; it now shows
[auto](also in compact/plain formats). -
Outgoing messages now carry the time zone of the process running the TUI. The official
time-contextno longer reportsBrowser time zone ... unavailable: the Direct main session and continuable child follow-ups read the zone when the message is sent, Remote keeps reading it through the officialSessionFace, and when no usable zone is available the message is refused before sending and the draft is restored instead of inventing one. -
Text from the Host, models and tools is now filtered before it reaches the terminal. Single-row text and multi-line prose are handled separately, so embedded terminal control sequences or line breaks can no longer split a row or add a phantom one; Job output keeps its allowed colour styles, and raw records, search and copy still use the original text.
-
Clicking the editor area with the mouse in fullscreen no longer disables Task Quick's
↓entry or its↓ viewhint, and the editor's navigation-key priority, the history panel's key ownership and the panel focus state stay consistent. -
A tool result's multi-line preview shows
…only when something really is hidden. A trailing newline used to count as an extra record (a false marker), while dropping records at the count limit could show nothing.
dsh-pi-tui 0.5.2-rc.1
中文
安装与版本对应
本预览版与 0.5.1 使用同一已发布 DSH 基线:peer floor 为 >=0.2.0-rc.2,精确验证目标为 0.2.0-rc.2。安装 DSH 需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.2-rc.1
dsh --profile pi-tui旧 runtime 的配对不变:@deepseek-ai/dsh@0.2.0-rc.1(含 0.1.7-rc.2)使用 @xmoon76/dsh-pi-tui@0.5.0,@deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8。
新增
-
Task Quick 改为按需窗口。 有任务时默认不占行,只在编辑器最后一个可视行按
↓展开到 Footer 之下;↑↓/PgUp/PgDn选择,Enter打开既有详情,↑/Esc返回编辑器并保留 草稿。列表末尾的➜ Open Task Center…行进入完整任务中心且不计入任务数;旧的模态 Quick 已退役。 -
Ctrl+R历史搜索接管底部编辑席位。 席位包含查询、结果与可独立滚动的 Preview;Enter把原文写回编辑器且不自动发送,Alt+C复制。切换会话时旧席位立即关闭,其操作与 异步搜索结果都不会落到新会话。 -
/settings成为全屏工作区,Configured theme与Transcript display可直接写入。 三栏 / 两栏 / 单栏是同一套分类 → 设置行 → 详情投影(Right/Enter前进一层,Left/Esc返回一层),R重读、C复制原始值;写入沿既有串行路径落盘并从权威来源 核对,失败时如实显示Not saved或Outcome unknown。 -
Job 详情成为独立的全屏工作区。 显示 Job 身份、状态与
[GAP]/[ERROR]/[SETTLED],Tab在Output/Command两页切换;输出可滚动、可查找、默认跟随最新(手动浏览即暂停,End恢复),Command 页显示未经改写的原始命令并可复制。不消耗job_output游标,也不 写入会话历史。 -
Footer 性能项新增「全 Session 速率」,数值改由 TUI 自有的 Host 投影提供:Direct 与 Remote 同源,重连与分页不再影响数值,无合格样本时省略而不是显示
0 tok/s。
变更
-
/fork真正切换到新子会话后会给出一次明确提示。 只有子会话确实被采用、且该次导航 仍然有效时才显示Forked to a new session;Fork 失败、子会话只被 park 或被更新的导航 取代时不提示,/rewind、/new、/resume的既有反馈不变。 -
选择器与状态标记统一到同一套视觉词汇:覆盖层使用
primary游标与Esc置尾的提示行,/settings与/preset的当前值改为[current]/[default]chip。 -
长用户消息的
▴ Collapse尾部行移除,改为单击正文任意位置收起。 -
无粘贴标记的终端中,多行粘贴改为在第一个 Enter 提交;支持粘贴标记的终端行为不变。
修复
-
新建或切换 Session 后,同名 Skill 命令、未确认提交的草稿与
↑历史都不再丢失。 -
Footer 的
↓ view提示始终与真实可进入状态一致:模态占用输入、显式禁用或改键时不显示, 历史浏览返回或 Todo 折叠改变 Task Quick 空间时随之恢复。 -
查看子会话时
working行不再泄漏主会话事实,全屏下‹ back可点击返回。 -
全屏下插件
input.widget两行不再消失,零行授权成为合法的空投影。 -
嵌套的
/settings → Keyboard shortcuts子页不再占满整屏;独立/keybindings不变。 -
实时与冷启动的转录分组收敛,冷启动恢复出的 Work 成员与读取分组与实时一致。
-
workflow 卡片只在官方终态事件结算,运行中的 workflow 不再显示为
[interrupted]。 -
Task Browser 的 Host 标签在终端边界投影,夹带的 ANSI/OSC/CSI 不再送到终端。
已知限制: OSC 7 窗格工作目录与 OSC 9;4 的「等待输入」细化当前只在识别为 Tern 的 终端启用。
English
Install and version pairing
This preview uses the same released DSH baseline as 0.5.1: the peer floor stays >=0.2.0-rc.2 and the exact validation target stays 0.2.0-rc.2. Installing DSH requires explicitly allowing its native install scripts:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.2-rc.1
dsh --profile pi-tuiThe older-runtime pairings are unchanged: @deepseek-ai/dsh@0.2.0-rc.1 (including 0.1.7-rc.2) uses @xmoon76/dsh-pi-tui@0.5.0, and @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8.
Added
-
Task Quick is now an on-demand window. With live tasks it still takes no rows by default: it appears below the whole Footer only when you press
↓on the editor's last visible line, where↑↓/PgUp/PgDnselect,Enteropens the existing detail for that real task identity, and↑(first row) orEscreturns to the editor with the draft preserved. The trailing➜ Open Task Center…row opens the full Task Center without counting as a task; the legacy modal Quick is retired. -
Ctrl+Rhistory search takes over the bottom editor seat. The seat holds the query, the results and a Preview that soft-wraps the full prompt and scrolls on its own;Enterwrites the entry back to the editor without submitting, andAlt+Ccopies it. Switching sessions closes the old seat immediately, so its actions and async results never land in the new session. -
/settingsis now a fullscreen workspace, andConfigured themeandTranscript displaywrite directly. Three, two and one column are the samecategories → rows → detailprojection (Right/Entermove one level in,Left/Escone level back),Rre-reads andCcopies the raw value, and a confirmed change goes through the existing serialized write path and is re-read from the authority — a failure is reported asNot savedorOutcome unknown, never as success. -
A Job detail is now its own fullscreen workspace. It shows the Job identity, its status and the
[GAP]/[ERROR]/[SETTLED]facts, andTabswitches between theOutputandCommandpages. Output scrolls, searches, and follows the newest output by default (a manual browse pauses it untilEnd), the Command page shows the unmodified original command and copies it, and the workspace never consumes thejob_outputcursor or writes session history. -
The Footer's Performance item gains the whole-Session rate, now sourced from the TUI's own Host projection: identical on Direct and Remote and unaffected by reconnects or paging, with the main session and a viewed child each showing their own Session's figures, and an ineligible scope omitted instead of shown as
0 tok/s.
Changed
-
A
/forkthat really switches to the new child session now says so. TheForked to a new sessionnotice appears once, and only while the child was actually adopted and that navigation is still in effect; a failed fork, a merely parked child or a superseded navigation stays silent, and the/rewind,/newand/resumefeedback is unchanged. -
Pickers and state markers share one visual vocabulary: overlay pickers use a
primarycursor and anEsc-last hint line, and/settingsand/presetshow the current value as a[current]/[default]chip. -
The
▴ Collapsetail row is removed from long user messages, replaced by a click anywhere in the body. -
In terminals without paste markers, a multi-line paste submits at the first
Enter; terminals that support paste markers are unchanged.
Fixed
-
Input is no longer lost after a new or switched Session: same-name Skill commands, an unacknowledged draft and
↑recall all survive. -
The Footer's
↓ viewhint always matches the real admission: it is withheld while a modal owns the input or the action is disabled or rebound, and it returns with history browsing or a Todo fold that changes the Quick window's room. -
Viewing a child session no longer leaks the main session's facts, and the fullscreen
‹ backis clickable. -
Plugin widgets no longer disappear in fullscreen; a zero-row grant is a legal empty projection.
-
The nested
/settings → Keyboard shortcutssubpage no longer fills the whole screen; standalone/keybindingsis unchanged. -
Live and cold-start transcript grouping converge, so a restored session matches the live one.
-
workflow cards settle only on the official terminal event and are no longer shown as
[interrupted]. -
Task Browser Host labels are projected at the terminal boundary, so embedded ANSI/OSC/CSI never reaches the terminal.
Known limitations: The OSC 7 pane working directory and the OSC 9;4 "waiting for input" refinement are currently enabled only for terminals identified as Tern.
dsh-pi-tui 0.5.1
中文
安装与版本对应
本稳定版把开发与兼容验证使用的精确 DSH family 推进到已发布的 0.2.0-rc.2, 运行时最低版本(peer floor)随之提升到 >=0.2.0-rc.2;安装 DSH 时需要显式 允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.1
dsh --profile pi-tui仍需保留旧版 DSH 的用户:@deepseek-ai/dsh@0.2.0-rc.1 与 0.1.7-rc.2 使用 已发布的 @xmoon76/dsh-pi-tui@0.5.0;@deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8。
新增
-
终端原生进度与状态上报。
/settings → Terminal progress由开关改为四档:9;4+7501(默认)、9;4、7501、Off。默认在既有 OSC 9;4 进度条之外,同时 通过 OSC 7501 上报 Agent 的语义状态(运行中、等待审批、等待回答、完成、出错、 空闲):完成/出错只在真实运行的最后一个 turn 结果被证实后上报一次,中断或取消 回到空闲,退出前保留已证实的终态,$EDITOR、全屏往返等临时移交前清除运行中 状态。切换档位立即生效,旧配置On读作默认双协议。两个协议都是通用终端协议, 不限于某个终端,其他终端按自己支持的协议显示。 -
窗格工作目录跟随当前 Session(OSC 7)。 直接启动、会话切换、全屏往返与
$EDITOR往返后都会重新上报;Direct 会话没有官方工作目录时回退到启动目录, DSH Remote 后端不发布任何目录,不把 Host 工作目录泄漏到 Client 终端(当前只在 识别为 Tern 的终端启用)。 -
子代理查看器把子会话当作真正的显示主体,并新增单行主题栏。 查看子会话时, 它的模型/预设/权限、上下文占用与窗口、累计 token 用量、待办与工作目录都取自该 子会话自己的会话状态(子会话尚无模型时显示
model ?,绝不借用主会话模型),并 在对应事件落地当下更新;主会话的身份头卡在查看期间隐藏、退出后立即恢复。主题栏 固定在 Header 下方,显示‹ back、子会话标签、● running/○ inactive与 子会话自己的provider/model @effort;旧的[viewing subagent · …]标记与 footer 的view-scope身份块不再渲染(旧自定义布局仍可载入/编辑/保存)。扩展 API 新增可选session.displaySubject投影发布当前查看的子会话;已发布的会话快照 语义不变:插件仍然只看到主/活会话,查看器进出不会表现为会话切换。 -
可选的官方 Git 提交署名指引(默认关闭)。 开启后 Agent 创建提交时会加入
Co-Authored-By: @xmoon76/dsh-pi-tui <dsh-pi-tui@xmoon.org>;product-model模式额外加入Assisted-By: <provider>/<model>。这是 Agent 指引而非仓库级强制: 不安装 Git 钩子、不改写命令、不探测仓库,手动提交不受影响。 -
Compact 下已结算的历史过程段只保留头部。 只有当前窗口里仍在运行或正在 Preparing 的最新过程段保留
Think:/Action:预览;已结算的历史段折叠为头部 (N actions · …统计仍在),纯思考的历史段显示为Thought <时长>。 -
已到达但尚未落进模型历史的 Context 条目在会话尾部立即可见。 后台任务完成、 子代理结算等非用户 Context 不再无声等待:它们按 Context/User/Context 原顺序显示 一行有界预览,宿主一旦接管即按权威事件退场,也不会把视口从你正在看的位置拉走。
变更
-
Question 工具的输入语义收敛为「选择 / 编辑 / 前进」。 多选题用
Space(或数字键、单击)切换勾选项,Enter与→一样只负责前进(未答则跳过); 自由文本实时保存,未按Enter的草稿在Esc、跨题往返后依然存在;回看列表里 已保存的自定义答案直接显示值(密码题显示掩码圆点)。提示文案相应改为space toggle · ↵ continue/review。 -
顶部 Header 严格保持单行。 主会话标题按终端 cell 宽度做 ANSI/CJK/Emoji 安全 截断(空间不足时省略号截断,再不足则整体省略),在任何宽度与显示预设下都不再 换行——超长主标题(尤其打开子代理查看器时)不再把编辑器与固定 chrome 挤出屏幕。
-
折叠 Focus 里的回合中途通知改为渲染在 Thought 之外。 唤醒本回合的开头通知仍 在 Thought 之前;进行中到达的后台任务完成、子代理结算等通知现在显示在折叠 Thought 之后(展开后仍按原始时间顺序),并仍可被全文搜索定位。
-
大会话下滚动与重绘更快。 纯滚动与到达历史边界时的翻页不再重复测量整份转录 几何;约 1.6 MB 文本的会话实测滚动帧 CPU 下降约 80%(观测值,非 CI 门槛), 滚动、点击与复制的语义不变。
-
命令与设置的发现文案如实标注条件能力。
!/!!、/settings的本地 shell 沙箱行、/title、/login、/logout、/transcript、/attach与/model把「依赖后端 / Host 支持」的条件写清楚;注册与行为不变。
修复
- 长用户消息可以对称地展开与收起。 折叠时单击气泡任意位置展开;展开后同样可 单击任意位置收起(尾部
▴ Collapse仍然可用),拖拽选文不受影响。常规模式下 折叠标记把生效按键如实写作expand/collapse。
兼容性
- DSH 依赖基线整体升级到已发布的
0.2.0-rc.2family。 全部@deepseek-ai/dsh-*peer floor 提升到>=0.2.0-rc.2,开发与源码验证目标精确 锁定0.2.0-rc.2。本线的 Question 生命周期依赖 rc.2 才发布的公开契约 (userQuestionsRemote 与 Session projection),因此 rc.1 及更早 family 不再 属于本线声明的兼容范围;旧 runtime 请按上方安装对应表选择配对的 TUI 线。
已知限制: 生产默认后端仍是 Direct;Remote 是本项目自有的实验性组合,需要 显式配置与配套 Host 扩展,本版不承诺其通用可用性。OSC 7 窗格工作目录与 OSC 9;4 的「等待输入」细化当前只在识别为 Tern 的终端启用。
English
Installation and version pairing
This stable release moves the exact DSH family used for development and compatibility validation to the published 0.2.0-rc.2, and the runtime peer floor rises to >=0.2.0-rc.2; installing DSH requires explicitly allowing its native install scripts:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.1
dsh --profile pi-tuiUsers who must keep an older DSH: @deepseek-ai/dsh@0.2.0-rc.1 and 0.1.7-rc.2 use the released @xmoon76/dsh-pi-tui@0.5.0; @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8.
Added
-
Terminal-native progress and status reporting.
/settings → Terminal progressturns from a switch into four modes:9;4+7501(default),9;4,7501andOff. On top of the existing OSC 9;4 progress bar, the default also reports the Agent's semantic state through OSC 7501 (working, waiting for approval, waiting for an answer, done, error, idle): done/error is reported once a real run's last turn result is proven, an interrupted or cancelled run returns to idle, a proven final state is retained until exit, and a temporary handover ($EDITOR, a fullscreen round-trip) clears the live state first. Switching modes takes effect immediately, and a persistedOnreads as the dual-protocol default. Both protocols are generic terminal protocols, not tied to one terminal: other terminals show whatever they support. -
The pane's working directory follows the current Session (OSC 7). It is re-reported after startup, a session switch, a fullscreen round-trip and an
$EDITORround-trip; a Direct session without an official cwd falls back to the launch directory, and a DSH Remote backend publishes nothing — a Host cwd is never leaked into the Client terminal (currently enabled only for terminals identified as Tern). -
The subagent viewer now treats the child session as a real display subject and adds a single-line subject bar. While a viewed child session is on screen, its model/preset/permission, context pressure and window, cumulative token usage, todos and working directory all come from that child session's own session state (
model ?while the child has no model yet — never the parent's model) and update the moment their event lands; the main session's identity head card is hidden while viewing and returns on exit. The subject bar sits under the header and shows‹ back, the child label,● running/○ inactiveand the child's ownprovider/model @effort; the old[viewing subagent · …]marker and the footerview-scopeidentity block no longer render (legacy custom layouts still load/edit/save). The extension API gains the optionalsession.displaySubjectprojection for the viewed child; the released session-snapshot semantics are unchanged — plugins still see only the live/main session, so entering or leaving a viewer never looks like a session switch. -
Optional official Git commit attribution guidance (off by default). When enabled, the Agent is instructed to add
Co-Authored-By: @xmoon76/dsh-pi-tui <dsh-pi-tui@xmoon.org>to commits it creates; theproduct-modelmode additionally addsAssisted-By: <provider>/<model>. This is Agent guidance, not repository-level enforcement: no Git hooks are installed, no commands are rewritten, no repositories are probed, and manual commits stay untouched. -
Compact collapses settled historical process spans to their header. Only the live or Preparing newest span of the current window keeps its
Think:/Action:previews; a settled historical span collapses to its header (theN actions · …statistics stay), and a historical think-only span showsThought <duration>. -
Context entries that have arrived but not yet entered the model history are visible in the conversation tail. A finished background job, a subagent settlement or another non-user Context no longer waits silently: it shows one bounded preview row in the original Context/User/Context order, leaves as soon as the Host takes it over, and never pulls the viewport away from where you are reading.
Changed
-
The Question tool's input semantics converge to selection / editing / progression. Multi-select questions toggle checkboxes with
Space(or digits / clicks), whileEnteronly continues like→(skipping when unanswered); free text saves live, so an un-Enter-ed draft survivesEscand cross-question navigation; a saved custom answer shows its value on revisit (masked questions show bullets). Hints now readspace toggle · ↵ continue/review. -
The top header is strictly ONE physical line. The session title is ANSI/CJK/emoji-safe truncated to the remaining cell width (ellipsized, then dropped when no cell remains) and no longer wraps at any width or display preset — a very long main title (especially while a child viewer is open) can no longer push the editor and pinned chrome off screen.
-
A mid-turn notice inside a collapsed Focus now renders outside the Thought. The opening notice that woke the turn stays before the Thought; notices that arrive mid-turn (a background job finishing, a subagent settling) now render after the collapsed Thought (in raw chronological order when expanded) and stay reachable through full-text search.
-
Scrolling and repainting are faster in large sessions. Plain scrolling and paging at a history boundary no longer remeasure the whole transcript geometry; a measured session of ~1.6 MB of text showed ~80% lower per-frame scroll CPU (an observation, not a CI threshold). Scroll, click and copy semantics are unchanged.
-
Command and settings discovery copy states conditional capabilities truthfully.
!/!!, the/settingslocal-shell sandbox row,/title,/login,/logout,/transcript,/attachand/modelnow spell out the "requires backend / Host support" condition; registration and behavior are unchanged.
Fixed
- A long user message can be expanded and collapsed symmetrically. A single click anywhere on a collapsed bubble expands it, and a single click anywhere on an expanded bubble collapses it (the tail
▴ Collapsecontrol stays available); drag selection remains intact. Regular long-user markers advertise the effective key asexpand/collapse.
Compatibility
- The DSH dependency baseline moves to the published
0.2.0-rc.2family as a whole. Every@deepseek-ai/dsh-*peer floor rises to>=0.2.0-rc.2, and the development/source qualification target pins exact0.2.0-rc.2. This line's Question lifecycle depends on contracts published only in rc.2 (theuserQuestions...
dsh-pi-tui 0.5.0
中文
安装与版本对应
本稳定版把开发与兼容验证使用的精确 DSH family 推进到已发布的 0.2.0-rc.1; 运行时最低版本(peer floor)保持 >=0.1.7-rc.2 不变,旧 runtime 的升级建议与 恢复命令现在指向 0.2.0-rc.1。安装 DSH 时需要显式允许其原生安装脚本, --allow-scripts 收敛为真正需要执行脚本的三项(DSH 0.2.0-rc.1 将 Koffi 固定为 3.1.1,Linux 全新安装不再依赖其余脚本白名单):
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.1
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.0
dsh --profile pi-tui仍需保留旧版 DSH 的用户:@deepseek-ai/dsh@0.1.7-rc.2 可继续使用已发布的 @xmoon76/dsh-pi-tui@0.4.9(本版 floor 不变,升级本版亦可直接运行); @deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8;更旧的 @deepseek-ai/dsh@0.1.6-alpha.2 使用 @xmoon76/dsh-pi-tui@0.4.7-alpha.2。
- 会话写锁的官方原生实现确认为
@deepseek-ai/node-addon-system/flock预编译 家族,仓库退休了过期的fs-ext手工编译 workaround。 隔离安装与兼容验证 环境不再修改官方发行版内容;原生载荷缺失时按发行版问题直接报错,而不是在 consumer 侧 node-gyp 补丁式修复。DSH 的 Source Mode 验证同样推进到0.2.0-rc.1release commit 并完整通过(上一版因上游 rc.2 源码树无法 self-clean 而豁免)。
修复
- Task Center 在 subagent 较多时,不再因 lifecycle/tool/job/open 等同一波 invalidation 并发启动多次完整 descendant traversal:已有 refresh 在飞时只记录 dirty,结算后合并为一次 trailing refresh,避免新 subagent 因 refresh storm 被长时间拖后。单次上游递归遍历本身的成本不在本次修复范围内。
English
Installation and version pairing
This stable release moves the exact DSH family used for development and compatibility validation to the published 0.2.0-rc.1; the runtime peer floor stays >=0.1.7-rc.2, and the upgrade advice plus recovery command for old runtimes now point at 0.2.0-rc.1. Installing DSH requires explicitly allowing its native install scripts, and --allow-scripts converges to the three packages that genuinely run scripts (DSH 0.2.0-rc.1 pins Koffi to 3.1.1, so fresh Linux installs no longer need the remaining allowlist entries):
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty @deepseek-ai/dsh@0.2.0-rc.1
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.5.0
dsh --profile pi-tuiUsers who must keep an older DSH: @deepseek-ai/dsh@0.1.7-rc.2 can keep the released @xmoon76/dsh-pi-tui@0.4.9 (this release keeps the same floor, so upgrading to this version also runs); @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8; the older @deepseek-ai/dsh@0.1.6-alpha.2 uses @xmoon76/dsh-pi-tui@0.4.7-alpha.2.
- The official native implementation of the session write lease is confirmed as the
@deepseek-ai/node-addon-system/flockprebuilt family, and this repository retires the obsoletefs-extmanual-build workaround. Isolated install and compatibility environments no longer modify the official distribution; a missing native payload fails loudly as a distribution problem instead of a consumer-side node-gyp patch. DSH Source Mode validation likewise moved to the0.2.0-rc.1release commit and fully passed (the previous release waived it because the upstream rc.2 source tree could not self-clean).
Fixed
- When many subagents are tracked, the Task Center no longer starts several full descendant traversals for one burst of lifecycle/tool/job/open invalidations: invalidations arriving while a refresh is in flight are coalesced into a single trailing refresh, so a new subagent is no longer pushed back by a refresh storm. The cost of one upstream recursive traversal is unchanged by this fix.
dsh-pi-tui 0.4.9
中文
安装与版本对应
本稳定版把 DSH 兼容目标推进到已发布的 0.1.7-rc.2(peer floor >=0.1.7-rc.2):rc.2 收回了 rc.1 的 preset 选择可见性部署策略、为会话内切换 模型引入当前可用性准入与后台默认保存,并在运行中的会话里记录动态工具更新。 0.4.8/rc.1 仍是上一条已发布配对,本线在 rc.1 之上做了删除式适配,而不是叠加 兼容分支。安装 DSH 时需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.7-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.9
dsh --profile pi-tui仍需保留旧版 DSH 的用户,请安装与该 runtime 配对的 TUI 线: @deepseek-ai/dsh@0.1.7-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.8, @deepseek-ai/dsh@0.1.6-alpha.2 使用 @xmoon76/dsh-pi-tui@0.4.7-alpha.2, 更旧的 DSH 0.1.5-rc.1/rc.2 使用 @xmoon76/dsh-pi-tui@0.4.6。
新增
-
/plugins:在 TUI 内管理当前 profile 的插件与 bundle。 新增的 Plugin Manager 直接调用官方 DSH Plugin Manager,按分区展示:正在提供当前界面的dsh-pi-tui(Current TUI,只读且自保护,不能从自身界面禁用/移除);能精确关联到 live TUI extension 贡献的包(TUI Extensions);其余普通 DSH 插件(DSH Plugins)。可查看 bundle 元数据、声明的插件行、启用/只读/可移除状态、兼容性错误与已配置的 registry,并执行启用/禁用、删除(二次确认,且确认与具体包身份绑定)与安装。安装流程先经官方 inspect 展示包信息与所选 registry,再实时显示进度与日志,可安全取消;关闭面板不会取消安装,重新打开会恢复同一请求,丢失响应时按官方waitForInstall结果核对而不会重复安装。/settings新增Plugins Manage…行,按需打开同一个管理界面。 -
/tasks:选中 Job 可查看非消耗式的实时输出。 Job 详情现在通过官方 Job Controller 的follow()流展示状态、进度与保留的输出尾部,并在输出被截断时明确提示;该查看是只读预览,不消耗模型的job_output游标、不影响完成通知、也不写入会话历史。Esc 返回原来的 Task Center,Stop 行为保持不变。 -
启动等待不再像死机:Host Loader 未就绪时显示
Starting DSH…。 当某个可选插件让 Host Loader 迟迟不结束(例如初始连接或tools/list一直没有响应的远程 MCP),TUI 会在开始等待前就在终端写出单行Starting DSH…,Loader 就绪后立即清除;非 TTY 保持静默。没有引入超时、跳过 pending 插件或半装配 Agent —— 只是让全局就绪等待可见。
修复
-
/quit、exit、Ctrl+C 退出时不再出现retire phase failed ... phase=cancel(cannot read inbox state: its projection registration is not active)。 交互退出现在会在请求appExit之前先同步取消当前 Direct Agent 的首次工作,避免 Host root teardown 先把 inbox 投影注销、导致稍后的 cancel 失败;idle → 后代 drain → flush → dispose仍留在appExit的关闭看门狗边界内完成,退出前不会等待完整 Host teardown。取消按 Agent 对象身份去重,因此会话切换提交后的新 Agent 仍会被取消;首次取消若失败不会被记为已完成,正式 retire 会重试。 -
仍在运行的 Agent 丢失 standing preset 组合时会立刻报错,而不是静默地把残缺请求发给模型。 profile 现在挂载官方
@deepseek-ai/dsh-invariants(只启用@deepseek-ai/dsh-agent-preset-registry一项检查)和官方agent-preset-registry/invariant:一旦某个 live Agent 不再 joined 任何 preset,下一次 prompt 组装就会 fail loud,而不是像此前那样把只剩subagent的工具列表当成正常请求发出去。TUI 不自行 remount / reparent / 重建 Agent,preset 生命周期仍由 DSH 负责。 -
用
dsh <profile>位置参数形式启动时,退出提示不再给错 profile。 退出时的 resume 提示此前只从process.argv里找--profile;而dsh <name>形式下 launcher 只是为自己的参数解析临时合成--profile、并不改动process.argv,于是提示会回退成硬编码的pi-tui(对dsh tui、dsh rescue等任何非pi-tui的 profile 都是错的)。现在改为读取 Host 官方的profileContext.name:它对--profile <name>、--profile=<name>、dsh <name>和--from-default-profile <name>一律正确;只有拿不到该服务的无 profile 场景(测试、嵌入式挂载)才继续用 argv 兜底。
改进
-
Task Center 的范围词汇从
All改为Tracked,footer Job 分母明确为当前跟踪名册。 直接/tasks打开的完整 Task Center 显示[TRACKED](A在ACTIVE↔TRACKED间切换,Quick→Full 仍保留ACTIVE),表明它列出的是 Job Registry / Subagent catalog 当前仍在跟踪的工作,而非 Session 执行历史:DSH0.1.7会在前台bash/pwsh运行期间临时注册 Job(可观察、可停止),命令在前台等待内完成后该记录由 DSH 移除、行随之离开 Task Center,最终结果仍由 Transcript 的 tool card 承担历史展示;显式后台 Job 完成后只要 Registry 保留记录,就仍在TRACKED可见。Footer 的 Job 分母(preferred 密度显示1/3 tracked jobs)同样是当前 registry 名册、可随上游移除而下降,不是 Session 总量(compact 密度保持1/3j不变)。没有新增 job 历史缓存,也没有改变后台 Job 的保留语义。 -
/preset回到由官方 registry 单独裁决的普通命令。 rc.2 收回了 rc.1 的modeSelectionEnabled部署可见性策略,0.4.9相应删除了整条 TUI 侧的可见性策略层(DTO 字段、Direct/Remote 适配分支、命令可见性缓存与后台探测):/preset只要命令目录健康就照常出现在候选与/help中,是否可用只由官方agentPresetsregistry 在真正执行时裁决;/preset default <id>先校验再持久化,不再读取任何策略名单,会话内空白 Session 的切换仍走官方 select。升级到 rc.2 后,旧 profile 里遗留的该字段由 DSH 忽略,TUI 不会迁移或删除它。 -
会话内切换
/model不再等待默认保存。 Direct 会话切换现在与 rc.2 一致:先按当前 provider/model 的精确可用性准入,再经官方 call-config 归一化,提交model/selection后立刻返回;全局默认保存改为后台尽力而为,失败只记诊断、不回滚也不阻塞 picker。TUI 侧原有的默认写入 generation/重断言排序已删除,重叠写入的先后交给官方AgentDefaultModel串行化。同一 Agent 上带图 prompt 的准入(含显式/skill)与/model切换共用官方 per-Agent serialization window:重叠切换按调用顺序生效,图片能力检查不会再在已被替换的 model 下通过,纯文本 prompt 保持不串行。 -
rc.2 动态工具更新:运行中的会话会记录官方
developer/message工具更新,TUI 全程安全忽略。 当 DSH Agent loop 因工具注册表变化记录tool-addition/tool-removal时,Session.toolHistory()是唯一权威;TUI 不新增假卡片,Ctrl+F 搜索、导出、fork/rewind 与三种显示投影保持稳定,并补齐了超长多字节工具输出与超长会话续发 prompt 的回归。注意:在已安装 profile 内通过 Plugin Manager 对 bundle/plugin 行启用或禁用时,rc.2 Host 返回restart-required(而非静默热更新),TUI 如实展示该结果;本版不承诺“无需重建会话即热生效”。
English
Installation and version pairing
This stable release moves the DSH compatibility target to the published 0.1.7-rc.2 (peer floor >=0.1.7-rc.2): rc.2 retires the rc.1 preset chooser-policy contract, introduces exact current-availability admission plus a background default save for in-session model switches, and records dynamic tool updates inside an already-running session. 0.4.8/rc.1 remains the previous released pairing; this line is a deletion-based adaptation on top of rc.1, not a stacked compatibility branch. Installing DSH requires explicitly allowing its native install scripts:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.7-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.9
dsh --profile pi-tuiTo keep an older DSH runtime, install the TUI line paired with it: @deepseek-ai/dsh@0.1.7-rc.1 uses @xmoon76/dsh-pi-tui@0.4.8, @deepseek-ai/dsh@0.1.6-alpha.2 uses @xmoon76/dsh-pi-tui@0.4.7-alpha.2, and the older DSH 0.1.5-rc.1/rc.2 family uses @xmoon76/dsh-pi-tui@0.4.6.
Added
-
/plugins: manage the active profile's plugins and bundles from the TUI. The new Plugin Manager drives the official DSH Plugin Manager and lists packages in classified sections: thedsh-pi-tuibundle currently providing this surface (Current TUI — read-only and self-protected, so it cannot be disabled/removed from its own screen); packages that are exactly associated with a live TUI extension contribution (TUI Extensions); and every other ordinary DSH plugin (DSH Plugins). It shows bundle metadata, declared plugin rows, enabled/read-only/removable state, compatibility errors and the configured registries, and performs enable/disable, remove (with a confirmation bound to the exact package identity) and install. Installation first runs the official inspect to show the package and the selected registry, then streams progress and logs with safe cancellation; closing the panel never cancels an install, reopening resumes the same request, and a lost response is reconciled through the officialwaitForInstallinstead of installing twice./settingsgains aPlugins Manage…row that lazily opens the same surface. -
/tasks: open a Job to see non-consuming live output. The Job detail now shows status, progress and the retained output tail through the official Job Controllerfollow()stream, and says so explicitly when earlier output was evicted. This is a read-only preview: it never consumes the model'sjob_outputcursor, never affects completion notices, and never becomes session history. Esc returns to the same Task Center and Stop behavior is unchanged. -
Startup no longer looks like a dead terminal:
Starting DSH…while the Host Loader settles. When an optional plugin keeps the Host Loader from settling (for example a remote MCP server whose initial connect ortools/listnever answers), the TUI now writes a singleStarting DSH…line before it starts waiting and clears it as soon as the Loader settles; non-TTY output stays silent. No timeout, no skipping a pending plugin, no half-composed Agent — the global readiness wait is simply visible.
Fixed
-
/quit,exitand Ctrl+C no longer fail retirement withretire phase failed ... phase=cancel(cannot read inbox state: its projection registration is not active). An interactive exit now cancels the current Direct Agent's first work synchronously BEFORE requestingappExit, so the Host root teardown can no longer unregister the inbox projection ahead of the later cancel;idle → descendant drain → flush → disposestill complete inside the watchdog-boundedappExitdisposal, and the exit never awaits the full Host teardown. The cancel is deduplicated by Agent object identity, so the new Agent of a committed session transition is still cancelled, and a first cancel that throws is not recorded as done — the real retirement retries it. -
A live Agent that loses its standing preset composition now fails loudly instead of silently addressing the model with a truncated request. The profile mounts the official
@deepseek-ai/dsh-invariantsregistry (enabling exactly the@deepseek-ai/dsh-agent-preset-registrycheck) plus the officialagent-preset-registry/invariantcompanion: as soon as a live Agent is no longer joined to any preset, the next prompt assembly fails loud instead of sending a tool list that had collapsed tosubagentalone. The TUI still does not remount, reparent or recreate an Agent — preset lifetime stays DSH-owned. -
The exit resume hint no longer names the wrong profile when the TUI was started with the positional
dsh <profile>form. The hint used to scrapeprocess.argvfor--profile; underdsh <name>the launcher only synthesizes that flag for its own argument parsing and leavesprocess.argvuntouched, so the hint fell back to the hardcodedpi-tui— wrong fordsh tui,dsh rescue, or any other non-pi-tuiprofile. It now reads the Host's officialprofileContext.name, which is correct for--profile <name>,--profile=<name>,dsh <name>and--from-default-profile <name>alike; only a profile-less mount (tests, an embedded surface) still falls back to the argv scrape.
Improved
- Task Center renames the user-visible
Allscope toTrackedand clarifies the footer job denominator as the current tracked roster. A direct `/...
dsh-pi-tui 0.4.8
中文
安装与版本对应
本稳定版把 DSH 兼容目标推进到已发布的 0.1.7-rc.1(peer floor >=0.1.7-rc.1):TUI 偏好迁入 profile 持有的插件配置,Agent preset 改用官方 声明式 registry,后台任务、沙箱 shell、任务中心与远程读取采用 rc.1 官方运行时 契约。安装 DSH 时需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.7-rc.1
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.8
dsh --profile pi-tui仍需保留旧版 DSH 的用户,请安装与该 runtime 配对的 TUI 线: @deepseek-ai/dsh@0.1.6-alpha.2 使用 @xmoon76/dsh-pi-tui@0.4.7-alpha.2, @deepseek-ai/dsh@0.1.5-rc.2 使用 @xmoon76/dsh-pi-tui@0.4.6,更旧的 DSH 0.1.1-rc.1/rc.2 使用 @xmoon76/dsh-pi-tui@0.3。
新增
-
兼容 DeepSeek Harness
0.1.7-rc.1:设置迁入 profile 持有的插件配置,Agent preset 切换到官方声明式 registry。 TUI 偏好(主题、页脚、显示预设、通知、按键绑定等)现在保存在tui-app插件的 profile 配置中,/settings修改即时生效且按字段持久化;旧版settings.yaml中的既有偏好会在首次启动时自动迁移(含 Focus 偏好到显示预设的收敛),迁移只读旧文件、可重试且不会覆盖迁移后修改过的新值。Agent preset 列表改为官方standard/ptc/minimal/cordis声明(默认选择与「设为默认」由 Host 统一裁决),已移除对旧code默认值的猜测式别名映射。运行最低要求提升到dsh 0.1.7-rc.1:后台任务、沙箱 shell、任务中心与远程读取全面采用 rc.1 官方运行时契约(任务按会话所有权、shell 的 execute/result 生命周期、任务中心的官方投影与任务名册),现有交互行为保持不变。 -
两个独立的沟通设置:Progress updates 与 Response style。 在
/settings分别控制工作时的中途更新节奏(Milestones 默认 / Frequent / Off)与可见回复的密度(Default 默认 / Concise / Explanatory);下一次模型步骤即生效,无需重启 Agent。偏好跨会话保存、互不影响,也不改变展示预设;Focus 只暂时抑制进度更新节(保存的节奏不变),Response style 在 Focus 下仍生效。 -
超长用户消息可以收起。 纯文本 Prompt 超过 10 个终端视觉行时默认只显示开头 4 行、 一条
── N rows compacted · … to expand ──提示和结尾 3 行;Ctrl+O展开并收回最近 3 个用户回合内的超长 Prompt,全屏下也可点击提示行或搜索命中展开单条。全屏下展开后的 消息尾部新增▴ Collapse · …控件可直接收回,steering…阶段的长输入按同一套视觉行 规则折叠且状态行始终可见。折叠按当前宽度换行后的视觉行判断(CJK / emoji 按真实占位), resize 后重新计算;折叠/展开保持视口(跟随最新时继续跟随,历史浏览时停留在同一条 语义行),该尾部控件只出现在全屏且不会被复制进剪贴板。已知限制:搜索跳转只展开命中 所在的整条消息,不会把视口定位到命中那一行。 -
全屏
↓ Latest提示。 全屏 Transcript 一旦离开实时尾部(手动上滚或浏览 history 窗口),底部出现可点击的↓ Latest · <快捷键>;点击与Ctrl+End语义 相同,直接回到全局 latest,回到尾部后提示自动消失。 -
/model改为即时打开的可搜索模型面板。 输入/model后立即显示Loading models…,目录加载完成后原地填充;provider 仅作分组,一次搜索覆盖 provider/model 的名称与 id;reasoning 模型按Enter进入同一行的行内 effort 编辑 (←→调整、Enter提交、Esc返回)。DSH 的 session / 全局默认模型语义不变。 -
/settings的 “Subagent allowed models” 改为可搜索分组列表。Enter直接 增删允许路由;官方整段写入、last-route 保护、写入串行与失败回滚语义不变。 -
Job 详情浮层有独立的底部操作提示。 运行中的 Job 显示
S stop · Esc back; 任务结束后 Stop 提示消失且该键失效;Esc back在长内容、短终端或窄屏下始终可见。 -
已接受但未落地的输入保持可见,并读取官方持久 inbox projection。 提交的 steering / 排队输入在 queue pane 或会话尾部显示本地回显,直到权威 transcript 落地 才退场;回显与权威消息按请求 id 关联,不依赖文本匹配,重连或重启后仍可恢复。被其他 DSH 实例或上下文占用 writer 时会给出可执行的退出指引,而不是内部诊断信息。
改进
-
Compact 与 Focus 的折叠过程统一为
Think:+Action:两个槽,头部统一按actions计数。 折叠卡不再只认识「真实工具调用」:Action:槽按时间顺序显示最新的属于某个 turn 的非思考过程证据——真实工具调用、正在 Preparing 的调用、llm 重试,以及无法配对的工具结果诊断(诚实显示为Unpaired … result,绝不伪装成成功调用)。头部随之统一为N actions · 子类型 ×次数(如7 actions · read ×3 · bash ×2 · +1;+1计的是剩余子类型种类):真实工具按其callCount计入(合并的 read 分组仍是 2 次调用),每次重试计一次,孤儿结果与 Preparing 不计入,ask_user_question/exit_plan_mode仍由其交互面板独占、既不占据 Action 槽也不计入。Focus 与 Activity 共用同一套分类、选择、格式化与子类型排序规则;1 action · read ×1这类单次计数不会被特殊隐藏。Tool 仍是严格的底层语义:重试不会因此变成工具。 -
subagent/descriptor不再产生任何转录卡片。 它是子会话的身份记录(version / mode / provider / label):continuable 子会话的 descriptor 位于其首个turn/start之前(上游断言descriptorIndex < turnStartIndex),因此它不属于任何 model turn。子会话查看器的 label/mode/activity 仍由其自身权威状态展示,转录正文则不再出现合成的Subagent身份卡;真正的父侧委派证据本来就是那条 genuinetool/call name=subagent,由它承担 Action。旧窗口的N tool calls计数也不再包含描述符行。 -
斜杠命令成为真正独立的 transcript 节点,拥有自己的披露。 command 的生命周期属于会话级:DSH 以
command/run/command/done直接追加日志事件,不为它开启 model turn,结算结果在模型历史之外渲染(/compact [running]→/compact [ok])。命令卡是独立行:不再成为任何 Activity 的成员(它会切断相邻过程段的连续性)、不进入N actions/N tool calls统计、也不会被折叠 Focus 的Action:槽或 Thought 吞掉——「Agent 答完、用户空闲时执行/compact」场景下反馈依然可见。其折叠与 Focus root 相互独立,长结果可操作(折叠单行预览、展开完整正文);纯命令会话保持可见、可搜索,Ctrl+F 可通过锚定窗口揭示回合前/回合间/尾部的命令。手动/compact仅通过官方sourceCommandId/sourceEventSeq关系与压缩卡合一(绝不按名称/文本/相邻匹配):压缩卡成为唯一可见 owner,命令的名称/参数/结果仍可通过它搜索到。 -
Activity 卡不再有独立身份图标,容器外层也不再缩进。 用户可见名称仍为
Activity(内部 owner 类型不变),但其身份不再随图标风格变化:▸ Activity/▾ Activity(🧰/✦及其图标语义一并移除),身份由折叠标记与名称表达;Focus、Activity、待定 Activity 卡与 Context 簇的外层两格缩进移除,折叠容器头部与其展开后的原始行共享同一转录左边缘(不再出现「折叠缩进、展开顶格」的层级倒置)。卡片内部的父子缩进保留:Thinking 正文、Tool 的 payload/result、PTC 子调用树、assistant/user 换行续行,以及 standalone Context 卡(notice / relay / recall)自身的正文——其 header 顶格、summary/payload/relay 正文与长消息标记统一缩进 2 格,与 Tool 卡的 payload 内缩一致;该缩进在按缩减后的内容宽度换行之后再施加,窄屏下不会为凑缩进而超宽。 -
Activity 头部现在显示该过程段自己的实际耗时。 计时是仅展示层的 wall-clock 侧账,全部取自会话事件时间(思考、工具调用/结果,以及重试的点证据),在既有的单次聚合遍历内完成;运行中的卡片随现有重绘心跳实时走秒(不新增每卡定时器),证据缺失时省略时长(绝不显示假的
0s);跨回合合并的连续 read 分组会丢弃计时,一个 Activity 的时间跨度绝不跨越回合边界;Preparing → 正式工具调用沿用最早的权威开始时间,已过秒数不再从3s重置为0s。token 用量只保留在 Focus 头部(按回合统计);Activity 是按过程段聚合的,没有可信的按段用量归属,因此绝不显示、估算或分摊 token。 -
Compact 的 Action 槽现在与 Focus 一致显示 PTC 活跃子调用。 例如
Code · Bash ×2 running;窄宽度降级时优先保留 running 状态、再舍弃根描述文本;嵌套子调用开始/结束会即时刷新折叠 Activity 卡。 -
转录细节词汇收敛。
/settings的 "Tool output" 更名为 "Transcript detail"(Bulk expansion for recent collapsible transcript content);Ctrl+O 的描述改为 "Expand/collapse recent transcript detail",Alt+T 改为 "Expand/collapse thinking detail"(折叠语义,而非可见性开关);Display 描述改为 "…Compact folds contiguous process into Activity spans";/help同步改用以上措辞与生效键位。 -
Advanced API 新增
advanced.host.setTranscriptDetailExpanded()。 原setToolsExpanded()保留为 deprecated 别名,两者驱动同一运行时状态(不维护两个字段)。 -
全屏滚动在大会话与 Focus/Compact 下更流畅。 纯滚动/纯重绘帧不再每帧重新测量整份转录几何并重建每行点击身份:快照只在内容、折叠、图片加载或窗口尺寸真正变化时重建(几何 epoch)。~1500 挂载块的会话滚动帧耗时约 −37%,Focus 展开约 −27%,Compact 约 −16%;点击与复制的命中判定语义不变(滚动导致单元格位移的按下/松开仍会被拒绝)。
-
转录折叠 / 搜索 / 视口现在收敛到一套 owner 与揭示模型。 每个隐藏区域在当前界面上都有一个可操作的 owner:常规界面统一用
Ctrl+O主开关操作 Work、Context 簇、普通折叠、长/待发用户折叠以及 assistant 尾部的 delivered files;当该快捷键不可用(被改键或禁用)时这些折叠全部 fail-open,不再渲染无法打开的折叠头或(ctrl+o to expand)提示。delivered files 另有单独的 per-owner 能力:fullscreen Compact/Focus 或禁用快捷键时直接全部展开;Thinking 由 Alt+T 单独拥有,regular 面禁用 Alt+T 时同样 fail-open(不产生 compact 卡片或 dead 提示)。展开的 Focus 现在把连续过程呈现为可独立折叠的嵌套Work容器(全屏默认折叠,可用鼠标或搜索临时揭示;常规界面在 Thought 展开时保持完整揭示),显式折叠 Thought 会让该回合的嵌套 Work 回到 Compact 深度。鼠标点击容器内部的空白行现在折叠“最近的共享容器”(嵌套 Work 优先于外层 Thought,簇内空白折叠簇,边界/全局空白无动作)。搜索揭示改为容器路径:导航期间临时打开所有隐藏祖先且不写入手动状态,普通关闭会原子提升这些 owner,显式折叠会撤销临时揭示;搜索只揭示当前真正隐藏的匹配(fail-open 或已经可见的行不会凭空产生 owner)。折叠/展开仍复用既有的语义视口事务(不新增第二套 viewport 模型)。 -
会话展示现在只有一个规范的 Full/Focus/Compact 预设状态。
/display是主控制命令,/focus保持兼容。 -
Compact 展示预设现已可用。
/display compact、设置项display-preset以及持久化的displayPreset: compact都会真正启用 Compact:会话和 assistant 中间输出保持按时间顺序可见,连续的思考/工具过程折叠为带 Header + Think + Action 预览的Activity段(鼠标点击或Ctrl+O可展开查看原始过程行,Ctrl+O也是批量展开/折叠入口);注入的notice/relay/recall上下文改为独立呈现(生产者摘要、Agent 消息、会话回忆),相邻的环境类注入(instructions/catalog/snapshot)合并为可展开的 Context 簇。Compact 仍是可选预设,默认值不变。 -
Context 簇头部现在同时显示展开状态与 Context 身份。 折叠/展开标记(
▸/▾)后新增 Context 身份图标:emoji 下为▸ 📎 Context · N injections,symbols 下为▸ ⋅ Context · N injections,minimal 下只保留▸ Context · N injections(装饰图标自动隐藏,无多余空格)。Activity头部则遵循「只有折叠标记 + 名称」的规则,不引入 Context 式身份图标。 -
折叠的 Focus 会把回合中途的过程通知收进 Thought。 Agent 已在工作期间到达的
notice(后台任务完成、子代理结算等过程反馈)不再独立占据一行,而是收进折叠的 Thought,展开 Focus 时按原始时间顺序完整恢复;唤醒本回合的开头通知仍然可见(用来说明 Agent 为何被唤醒),中途的relay也仍然独立可见。中途通知在折叠状态下仍可通过全文搜索临时定位,关闭搜索后恢复折叠,不产生新的手动展开状态。 -
长会话下打开搜索的展示重建不再随历史规模平方增长。 大历史会话中搜索定位的重新投影改为每个投影周期只解析一次揭示归属,历史越长改善越明显。
-
已结束的
ask_user_question与exit_plan_mode(Plan review)卡片现在作为“人工交互证据”独立展示,不再被过程折叠吞掉。 两者只按工具身份识别(恰好是这两个工具,不新增语义类别,也不因为卡片丰富或曾需要批准就扩大范围):Compact 下成为Activity的边界并原地单独展示(不计入Activity的 actions 统计或 Action 槽);折叠的 Focus 会把它们提到 Thought 之外(与 user/steer、surfaced Context 同类,保持原始相对顺序,不跨越已提交回答/steer 的顺序边界);展开 Focus 时回到原始时间位置;Full 不变。卡片自身的展开/折叠与 Focus root 相互独立(折叠 Focus root 不会重置它),并复用已有 Tool 卡片交互(全屏可点击;常规面无可操作 owner 时按现有能力完整展示)。仍在等待回答/批准的问题不受影响——交互仍由其面板独占,不会重复出现一张已结束样式的卡片;部分作答、跳过、取消或出错的问题卡片同样保持独立可读。其余工具(todo/goal/subagent/workflow/schedule/cordis/bash/edit 等)仍属于普通 Process。 -
Question / Approval 保留响应所有权,同时允许只读上下文检查。 模态打开时仍可通过直接或 leader 检查快捷键使用折叠、Thinking 展开、全屏回到最新位置、Todo 展示切换,以及已证明的全屏展示性鼠标目标;固定的 Question / Approval 响应键优先于冲突的全局检查快捷键,提交、会话切换和生命周期操作仍由模态保护。
-
长会话全文搜索显著更快。 连续输入、
Enter/Shift+Enter跳转现在每个操作最多 重建一次会话内容,不再重复重建、重复测量或整窗重绘;同一窗口内的跳转近似即时, 跨窗口跳转只有一次必要的重新投影。 -
搜索会复用活动卡片的渲染命中索引。 同一张卡片的渲染内容没有变化时,重复跳转会复用 已有的命中结果;查询变化只重新计算命中,卡片内容变化时自动重新建立语料,不改变语义 搜索的
N/M和命中身份。 -
只能定位来源的搜索结果会尽量靠近渲染命中滚动。 在能找到对应来源区域或卡片内渲染命中时, 全屏搜索会把候选命中带入视口;已经完整可见的命中不会反复把视口吸回固定位置。近似定位 不会升级为强高亮,来源无法映射时仍回退到诚实的来源锚点。
-
当前搜索结果的视觉更醒目,并且跟随主题。 能证明对应关系的当前命中使用明确的 主题前景/背景色块(不再依赖终端的反显属性);只能定位来源的命中改用一层更浅的 背景提示所属卡片/来源行,其余命中仍是弱下划线——不会为了醒目而把某次出现伪装成 “已证明的当前命中”。
-
搜索框打开时,会话内容仍可浏览和操作。 全屏下可以继续用滚轮 /
PageUp/PageDown滚动、拖动滚动条、选中复制、以及鼠标展开/折叠卡片,同时搜索框保持 输入焦点(Home/End、Ctrl+U/Ctrl+D等编辑按键仍归搜索框);编辑器、 提交和其它弹窗仍被搜索框阻断。 -
Quick Tasks 收敛为纯导航。 Footer
↓打开的 Quick Tasks 只响应方向键、Tab、Enter和Esc,其余按键一律 no-op(S///T不再触发停止确认、搜索或 视图切换);N/Shift+N与 Quick 的T进入完整视图已改为底部 “Open Task Center” 行 +Enter,完整 Task Center 新增Shift+Tab反向遍历类型过滤。 -
被中断的 parked steering 准确呈现并给出恢复路径。 turn 被 Interrupted 后,仍在 inbox 的 steering 行显示
waiting for next turn…,并在下一次普通消息唤醒时按官方 语义消费;此时空的 Ctrl+S 会给出提示而不是静默无操作。 -
Focus 头部显示真实执行状态。 未完成 turn 显示
Working、Waiting for approval · 12s或Waiting for input · 12s,完成后显示Turn complete; 等待用户的时间不计入运行时长。 -
Focus compact 工具行改为工具身份 + 官方描述。 前台 Bash 显示
Bash · <description>,后台卡片显示<工具名> · <content 描述>;未知的自定义工具 保留原始名字,完整命令仍保留在展开后的 tool card 中。 -
短屏全屏下 Todo 首次展开 3 项。 终端行数 ≤16 时 compact Todo 面板显示 3 项 (普通终端仍为 5 项),缩放时按当前高度重新推导。
-
全屏拖选与
/copy统一 clipboard policy。 二者同时尝试 terminal OSC 52 与本机 helper 两条通道,helper 成功不再阻断 OSC 52;修复远端(如 ORCA/xterm.js)下选择被 复制到远端主机剪贴板、本地粘贴不到的问题。 -
文件 edit/write diff 卡片对齐 DSH 的边界化上下文 diff。 共享上下文行不再 被误报为增删,大文件中的稀疏改动保持精确;只有超出官方边界化 edit search(每个 fragment 256 次 edit)才退化为粗粒度替换,折叠处的
+N/-M与展开内容同源。 -
Task Center 的 Job 详情按层级返回,捕获型浮层的焦点恢复统一。 从...
dsh-pi-tui 0.4.7-alpha.2
中文
安装与版本对应
本版本把 next npm 线的 DSH 兼容目标推进到 0.1.6-alpha.2(peer floor >=0.1.6-alpha.2);安装 DSH 时需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.6-alpha.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.7-alpha.2
dsh --profile pi-tui仍需保留旧版 DSH 的用户,请安装与该 runtime 配对的 TUI 线: @deepseek-ai/dsh@0.1.6-alpha.1 使用 @xmoon76/dsh-pi-tui@0.4.7-alpha.1, @deepseek-ai/dsh@0.1.5-rc.2 使用 @xmoon76/dsh-pi-tui@0.4.6。
改进
- DSH 兼容目标推进到
0.1.6-alpha.2。 Client Session 生命周期改为官方的显式引用持有语义(retain/release),因此 runtime peer floor 升至>=0.1.6-alpha.2。仍在0.1.6-alpha.1的 Harness 会在启动时收到可执行的升级提示(也可继续使用已发布的0.4.7-alpha.1TUI 线)。 - 待处理输入改为读取官方持久 inbox projection。 排队/steering 行不再依赖会话内瞬时队列快照,重连或重启后仍可恢复;被其他 DSH 实例或上下文占用 writer 时会给出可执行的退出指引,而不是内部诊断信息。
/fork与/rewind采用 DSH 官方 Host 分支语义。 Host 负责完成回合截断、子会话身份、谱系、工作区和模型/预设组合;Direct 与 Remote 路径保持同一语义。- 运行中的
/fork在派生请求提交时确定截断点。 不再等待旧回合结束;导航被后续操作取代时,已发布的子会话仍可在会话列表中打开。 - 工作区归属现在与 Web 端共享。 TUI 配置挂载官方 workspace 服务;对已归属某个工作区的会话执行
/fork时,子会话加入同一工作区,Web 端会把它显示在该工作区下。 - 首个用户回合不再提供 rewind。 官方 Host fork 无法表达空前缀子会话。
- 超长用户消息现在可以双向收起。 全屏下展开后的消息尾部新增
▴ Collapse · …控件,点击即可收回(不再只能依赖Ctrl+O);steering…阶段的长输入也按同一套 视觉行规则折叠,状态行始终可见。折叠/展开会保持视口:跟随最新时继续 跟随,历史浏览时停留在同一条语义行。该尾部控件只出现在全屏,且不会被复制进剪贴板; regular 仍由Ctrl+O收起,不会向 scrollback 注入可被终端原生框选复制的文案。
English
Installation and version pairing
This release moves the next npm line's DSH compatibility target to 0.1.6-alpha.2 (peer floor >=0.1.6-alpha.2). Its native install scripts must be explicitly allowed:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.6-alpha.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.7-alpha.2
dsh --profile pi-tuiTo keep an older DSH runtime, install the TUI line paired with it: @deepseek-ai/dsh@0.1.6-alpha.1 uses @xmoon76/dsh-pi-tui@0.4.7-alpha.1, and @deepseek-ai/dsh@0.1.5-rc.2 uses @xmoon76/dsh-pi-tui@0.4.6.
Changed
- The DSH compatibility target moves to
0.1.6-alpha.2. Client Session lifetime now uses the official explicit reference ownership (retain/release), so the runtime peer floor rises to>=0.1.6-alpha.2. A Harness still on0.1.6-alpha.1gets an actionable startup upgrade notice (and may keep using the published0.4.7-alpha.1TUI line). - Pending input now reads the official durable inbox projection. Queued/steering rows no longer depend on a transient in-session queue snapshot and recover after a reconnect or restart; a writer held by another DSH instance or context now surfaces actionable quit-and-retry guidance instead of an internal diagnostic.
/forkand/rewindnow use the official DSH Host fork semantics. The Host owns the completed-turn cut, child identity, lineage, workspace, and model/preset composition; Direct and Remote follow the same semantics.- A running
/forkfixes its cut at fork admission. It no longer waits for the old turn to finish; if navigation is superseded, the published child remains available from the session list. - Workspace membership is now shared with the Web surface. The TUI profile mounts the official workspace service, and
/forkof a session that belongs to a workspace puts the child in that same workspace, where Web lists it. - Rewind is no longer offered for the first user turn. The official Host fork cannot represent an empty-prefix child.
- Long user messages now collapse in both directions. In fullscreen, an expanded prompt gains a tail
▴ Collapse · …control that collapses it with a plain click (no longerCtrl+Oalone); long input in thesteering…lane folds by the same visual-row rule with its status line always visible. Disclosure keeps the viewport — follow-latest keeps following and historical browsing stays on the same semantic row. The tail control is fullscreen-only, is never copied into the clipboard, and regular keepsCtrl+Oas its collapse owner without injecting terminal-native-selectable chrome into the scrollback.
dsh-pi-tui 0.4.7-alpha.1
中文
安装与版本对应
本版本把 next npm 线的 DSH 兼容目标推进到 0.1.6-alpha.1(peer floor >=0.1.6-alpha.1);安装 DSH 时需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.6-alpha.1
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.7-alpha.1
dsh --profile pi-tui继续使用旧版 DSH 0.1.5-rc.1/0.1.5-rc.2 的用户请留在稳定版 @xmoon76/dsh-pi-tui@0.4.6;更旧的 DSH 0.1.1-rc.1/rc.2 使用 @xmoon76/dsh-pi-tui@0.3。
新增
- 超长用户消息默认折叠。 纯文本 Prompt 超过 10 个终端视觉行时,只显示开头 4 行、 一条
── N rows compacted · … to expand ──提示和结尾 3 行,让尾部说明保持可见;Ctrl+O展开并收回最近 3 个用户回合内的超长 Prompt,全屏下也可点击提示行或搜索 命中展开单条。折叠按当前宽度换行后的视觉行判断(CJK / emoji 按真实占位),resize 后重新计算。已知限制:搜索跳转只展开命中所在的整条消息,不会把视口定位到命中那 一行。 - 全屏
↓ Latest提示。 全屏 Transcript 一旦离开实时尾部(手动上滚或浏览 history 窗口),底部出现可点击的↓ Latest · <快捷键>;点击与Ctrl+End语义 相同,直接回到全局 latest,回到尾部后提示自动消失。 /model改为即时打开的可搜索模型面板。 输入/model后立即显示Loading models…,目录加载完成后原地填充;provider 仅作分组,一次搜索覆盖 provider/model 的名称与 id;reasoning 模型按Enter进入同一行的行内 effort 编辑 (←→调整、Enter提交、Esc返回)。DSH 的 session / 全局默认模型语义不变。/settings的 “Subagent allowed models” 改为可搜索分组列表。Enter直接 增删允许路由;官方整段写入、last-route 保护、写入串行与失败回滚语义不变。- Job 详情浮层有独立的底部操作提示。 运行中的 Job 显示
S stop · Esc back; 任务结束后 Stop 提示消失且该键失效;Esc back在长内容、短终端或窄屏下始终可见。 - 已接受但未落地的输入保持可见。 提交的 steering / 排队输入在 queue pane 或会话 尾部显示本地回显,直到权威 transcript 落地才退场;回显与权威消息按请求 id 关联, 不依赖文本匹配。
改进
- Quick Tasks 收敛为纯导航。 Footer
↓打开的 Quick Tasks 只响应方向键、Tab、Enter和Esc,其余按键一律 no-op(S///T不再触发停止确认、搜索或 视图切换);N/Shift+N与 Quick 的T进入完整视图已改为底部 “Open Task Center” 行 +Enter,完整 Task Center 新增Shift+Tab反向遍历类型过滤。 - 被中断的 parked steering 准确呈现并给出恢复路径。 turn 被 Interrupted 后,仍在 inbox 的 steering 行显示
waiting for next turn…,并在下一次普通消息唤醒时按官方 语义消费;此时空的 Ctrl+S 会给出提示而不是静默无操作。 - Focus 头部显示真实执行状态。 未完成 turn 显示
Working、Waiting for approval · 12s或Waiting for input · 12s,完成后显示Completed; 等待用户的时间不计入运行时长。 - Focus compact 工具行改为工具身份 + 官方描述。 前台 Bash 显示
Bash · <description>,后台卡片显示<工具名> · <content 描述>;未知的自定义工具 保留原始名字,完整命令仍保留在展开后的 tool card 中。 - 折叠 Thinking 预览追随推理尾部。 运行中的 compact Thinking 单行始终显示最新 token(超宽时从左侧裁掉),只由真实 reasoning delta 驱动;settled 仍从行首显示。
- 短屏全屏下 Todo 首次展开 3 项。 终端行数 ≤16 时 compact Todo 面板显示 3 项 (普通终端仍为 5 项),缩放时按当前高度重新推导。
- 全屏拖选与
/copy统一 clipboard policy。 二者同时尝试 terminal OSC 52 与本机 helper 两条通道,helper 成功不再阻断 OSC 52;修复远端(如 ORCA/xterm.js)下选择被 复制到远端主机剪贴板、本地粘贴不到的问题。 - 文件 edit/write diff 卡片对齐 DSH 0.1.6 的边界化上下文 diff。 共享上下文行不再 被误报为增删,大文件中的稀疏改动保持精确;只有超出官方边界化 edit search(每个 fragment 256 次 edit)才退化为粗粒度替换,折叠处的
+N/-M与展开内容同源。 - Task Center 的 Job 详情按层级返回,捕获型浮层的焦点恢复统一。 从 Quick Tasks 或 完整 Task Center 打开 Job 状态详情后,
Esc返回同一个 Task Center 实例(保留 选中行、滚动、过滤、搜索与展开状态),再按一次才回到编辑器;能定位子会话的 subagent 作业仍直接打开子会话 transcript。浮层关闭后被恢复的下层捕获型浮层重新取得键盘焦点 与焦点席位,nonCapturing提示浮层不自动夺焦也不压住同级浮层;Question / Save Location 结束与 fullscreen 切换只做内部恢复,保留当前逻辑层级、可见性与焦点意图 以及前置顺序。
修复
- TUI 启动失败不再被静默当作可选插件失败。 启动提交就绪但
tui-app从未挂载时, 打印明确错误并以非零状态退出,不再出现「告警 + 成功 + 进程仍驻留」的假成功。 - preset 选择可见性跟随部署策略。 部署把
modeSelectionEnabled设为false时,/preset不再出现在斜杠候选与/help中,直接输入仍按官方策略拒绝;roster 不可用 时保持原展示。 - 全屏历史滚动位置不再被拉回尾部。 队列面板增删、其他 chrome 变化或终端 resize 改变 viewport 高度时,已经滚离实时尾部的视图保持原位置;只有显式回到底部才恢复 跟随。
兼容性
- PTC / workflow runtime 对齐官方 0.1.6 组合。
ptcpreset 通过官方ptc-runtime行获得 PTC 运行时,TUI 不再插入已退休的code-runtime-worker-thread行,host 平面 的 workflow 行也对齐到官方workflow-ptc。
已知限制: 当前生产默认后端仍为 Direct;remote attach 暂不支持。
English
Installation and version pairing
This release moves the next npm line's DSH compatibility target to 0.1.6-alpha.1 (peer floor >=0.1.6-alpha.1). Its native install scripts must be explicitly allowed:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.6-alpha.1
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.7-alpha.1
dsh --profile pi-tuiTo stay on the older DSH 0.1.5-rc.1/0.1.5-rc.2, keep the stable @xmoon76/dsh-pi-tui@0.4.6; for the older DSH 0.1.1-rc.1/rc.2 use @xmoon76/dsh-pi-tui@0.3.
Added
- Long user messages collapse by default. A text-only prompt longer than 10 terminal visual rows renders its first 4 rows, one
── N rows compacted · … to expand ──marker, and its last 3 rows, so a trailing instruction stays visible;Ctrl+Oexpands and collapses the long prompts within the most recent 3 USER turns, and fullscreen can expand a single message by clicking that marker row or a search hit. The decision uses the wrapped visual rows at the current width (CJK and emoji count their real cells) and is recomputed after a resize. Known limitation: a search jump expands the matched message but does not scroll onto the exact matched row. - A fullscreen
↓ Latesthint. Once the fullscreen transcript leaves the live tail (manual scroll-up or a browsed history window), the bottom shows a clickable↓ Latest · <key>; it takes the same path asCtrl+Endstraight back to the GLOBAL latest and disappears again at the tail. /modelis now an immediate, searchable palette. The panel opens at once withLoading models…and fills in place when the directory read settles; provider is a group only, one search covers provider/model names and ids, andEnteron a reasoning model focuses the inline effort on the same row (←/→pick,Entercommits,Escreturns). DSH session and global-default model semantics are unchanged./settings"Subagent allowed models" uses the same searchable grouped list.Entertoggles an allowed route directly; the official whole-section write, last-route guard, serialized writes, and failure rollback are unchanged.- The Job detail overlay has its own bottom action hint. A running job shows
S stop · Esc back; once the job settles the Stop hint disappears and its key becomes a no-op, whileEsc backstays visible under a long body, a short terminal, or a narrow width. - Accepted but not yet landed input stays visible. A submitted steering or queued prompt shows a client-local echo in the queue pane or the conversation tail until its authoritative transcript lands; the echo is correlated with the authoritative message by request id, never by text.
Improved
- Quick Tasks is now navigation-only. The Footer
↓Quick Tasks view responds only to the arrows,Tab,Enter, andEsc; every other key is a no-op (S///Tno longer arm a stop, enter search, or switch views),N/Shift+Nand Quick'sTshortcut into the full view became the bottom "Open Task Center" row plusEnter, and the full Task Center gainsShift+Tabreverse type cycling. - Interrupted parked steering is presented accurately with its recovery path. After the active turn is interrupted, a steering row still parked in the inbox reads
waiting for next turn…and is consumed by the official next-wake semantics on the next ordinary prompt; an empty Ctrl+S then explains the recovery instead of silently no-opping. - The Focus header shows the real run state. An open turn reads
Working,Waiting for approval · 12s, orWaiting for input · 12s, and settles onCompleted; time spent waiting on the user no longer counts toward the run duration. - The Focus compact Tool row uses the tool identity plus the official description. A foreground Bash call shows
Bash · <description>and a background card shows<tool name> · <content description>; an unknown custom tool keeps its raw name, and the full command stays in the expanded tool card. - The collapsed Thinking preview follows the reasoning tail. While reasoning streams, the one-line compact preview always shows the newest token, clipping overflow from the left, driven only by real reasoning deltas; a settled row still reads from the start of its line.
- A short fullscreen opens the Todo panel with 3 rows. On terminals with at most 16 rows the compact Todo panel shows 3 items (5 otherwise), re-derived from the current height on resize.
- Fullscreen drag selection and
/copyshare one clipboard policy. Both attempt the terminal OSC 52 leg and the native helper leg independently, and a helper success no longer suppresses OSC 52; this fixes remote setups (e.g. ORCA/xterm.js) where a selection was copied to the remote host's clipboard. - File edit/write diff cards follow DSH 0.1.6's bounded contextual diff. Shared context lines are no longer misreported as additions or deletions and sparse edits in large files stay exact; only a fragment past the official bounded edit search (256 edits) degrades to a coarse replacement, with the folded
+N/-Mtotals derived from the same source as the expanded body. - A Task Center Job detail returns one level, and capturing-overlay focus restoration is unified. Opening a Job status detail from Quick Tasks or the full Task Center returns with
Escto the same Task Center instance (selected row, scroll, filter, search, and disclosure preserved) before a secondEscreturns to the editor; a subagent job that resolves to a child session still opens that transcript directly. After a close, a restored capturing overlay regains keyboard focus and the focused seat, a nonCapturing notice does not take focus or suppress its siblings, and a Question / Save Location settle or a fullscreen swap is an internal restore that keeps the current logical hierarchy, visibility and focus intent, and front order.
Fixed
- A failed TUI startup is no longer silently treated as an optional plugin failure. When startup commits but the
tui-approw never mounted, the bundle prints an actionable error and exits nonzero, never a warning-plus-success with a lingering process. - Preset-selection visibility follows the deployment policy. With
modeSelectionEnabledset tofalse,/presetno longer ...
dsh-pi-tui 0.4.6
中文
安装与版本对应
本稳定版与 0.4.5 使用相同的 DSH 兼容范围:最低兼容 DSH 0.1.5-rc.1,同时兼容 0.1.5-rc.2。推荐安装 rc.2;安装 DSH 时需要显式允许其原生安装脚本:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.5-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.6
dsh --profile pi-tui不要把本版本与历史 DSH 0.1.3-alpha.2 线混用。仍需保留旧版 DSH 的用户, 请安装对应的历史 TUI 线:DSH 0.1.2-rc.1 使用 @xmoon76/dsh-pi-tui@0.4.1,DSH 0.1.3-alpha.2 使用 @xmoon76/dsh-pi-tui@0.4.3-alpha.2,更旧的 DSH 0.1.1-rc.1/rc.2 使用 @xmoon76/dsh-pi-tui@0.3。
新增
- 显式交付文件呈现。
present工具卡现在以人类可读的文件列表显示,最终回答尾部会汇总实际交付的路径与描述,并在折叠视图中保持紧凑。
修复
- Focus 实时呈现高度与滚动稳定性。 流式 Markdown 内容在展开 Focus 中增高或收缩时,不再因临时高度变化造成视口抖动;历史内容更新、工具准备/完成以及 Focus/fullscreen 切换会正确释放旧的高度基线,并保留用户主动滚动位置。
已知限制: 当前生产默认后端仍为 Direct;remote attach 暂不支持。
English
Installation and version pairing
This stable release keeps the same DSH compatibility range as 0.4.5: the minimum is 0.1.5-rc.1, and 0.1.5-rc.2 is also compatible. We recommend rc.2; its native install scripts must be explicitly allowed:
npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs,fs-ext @deepseek-ai/dsh@0.1.5-rc.2
dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.4.6
dsh --profile pi-tuiDo not pair this release with the historical DSH 0.1.3-alpha.2 line. Users who must keep an older DSH should install the matching historical TUI: use @xmoon76/dsh-pi-tui@0.4.1 for DSH 0.1.2-rc.1, @xmoon76/dsh-pi-tui@0.4.3-alpha.2 for DSH 0.1.3-alpha.2, and @xmoon76/dsh-pi-tui@0.3 for the older DSH 0.1.1-rc.1/rc.2 line.
Added
- Explicit delivered-file presentation.
presenttool cards now show a human-readable file list, while the final assistant answer summarizes the delivered paths and descriptions in a compact turn tail.
Fixed
- Focus live presentation stability. Streaming Markdown in expanded Focus no longer jitters when content height grows or shrinks; historical updates, preparing-tool transitions, completion, and Focus/fullscreen changes release stale height baselines correctly while preserving explicit user scroll intent.
Known limitation: The production default backend remains Direct; remote attach is not supported.