Repository navigation
v3.1.0
更新摘要
3.1.0 把「对话」做成了与终端并列的主力工作区:一个窗口可开多个会话并分屏浏览,历史会话回到侧栏,支持改名、归档、编辑重发与分叉;正文升级为全量 Markdown 渲染,新增 @ 引用文件、TodoWrite 任务卡、会话内搜索、命令面板拼音检索与快捷键速查层;审批卡可直接查看 diff,并可一键放行同类调用。终端修掉了 ssh 启动探测、回显重复输入、等待命令漏判等一批稳定性问题;MCP 工具在大文件、长输出与 GBK 源码场景下更省对话上下文。更新弹框同步升级为品牌双栏样式。
新增
- 升级更新弹框并完善终端交互
- 升级 Clawd 对话小队与本轮插话交互
- 优化对话工作区交互与执行反馈
- 对话页对齐柔光画布、动效扩展与输入区收缩
- 升级对话工作区与日常聊天交互
- 对话页接线(时间轴 / 导航 / 导出 / 草稿),并修 6 处交互缺陷
- 对话页新增四个能力模块(时间轴标记 / 按轮导航 / 导出 / 草稿存储)
- 审批卡支持「以后都放行这类调用」
- 侧栏等批准行显示剩余秒数 + 分组头不再写「0 在跑」
- 审批卡直接看 diff(不再让人读转义 JSON)
- 等批准时发桌面通知(此前只有轮结束有)
- 流内轮次脚注(四类 token / 输出速度 / 双时长)
- 轮次用量的数据源(生成时长 / 首 token / 工具耗时)
- 对话详略三档(详细 / 标准 / 精简)
- 进程中途退出可见(侧栏 dead + 流内横幅)
- 图片输入接入 Composer(粘贴 → chips → 发送 → 回显,批 C)
- 图片输入协议层(探针已通,批 C)
- 对话页 diff 井排视图与词级高亮 + 审批面板内嵌 diff
- 对话页呈现·检索·引用全面升级 + 命令面板拼音 + 审计事件推送
- 3-2 S1 托管通道纯函数层 + 探针修复
- 审批即审计(批4-2)
- 上下文税仪表(批4-1)
- 消息编辑重发与分叉(批3-3)
- 侧栏改名与归档(批3-1d)
- 历史会话回侧栏 + 同目录并发提示(批3-1c)
- 对话页多会话——每条会话一个 pane + 侧栏(批3-1b)
- 对话多会话容器与命令显式带 id(批3-1a)
- 对话页快赢七项与对齐六项的前端落地
- CC 对话链路真协议化、历史对话、审批自动放行与会话用量账
- CC 对话补齐三处缺口——远端路径、远端工作目录、提问回答
- CC 对话全链路——进程复用、事件流水、内联审批
- stop_command 保留条目与输出,新增 terminated/outputComplete 语义
- MCP 返回上下文优化批B——read_files 超限即拒、batch 返回预算、搜索软超时、长命令后台化
- MCP 返回上下文优化批A——run_command 保存/返回分离、compact 默认、readOnlyHint 下发
- 对话输入框支持 @ 引用文件 / 目录(设计稿《对话页-@引用与排版偏好》):打出
@浮出补全面板(SlashPanel 同款形态与键位,IME 组词期放行),本机目标的根层为「本会话目录置顶 + 白名单根」、远端目标为本会话远端 cwd;@desktop/src/ccM式路径逐段自动下钻(含 Windows 绝对路径的前缀跳级),选中目录续写路径继续下钻、选中文件插入@路径收尾。远端列目录复用ssh_sftp_list;browse_directory新增include_files参数(目录选择器行为不变),BrowseEntry补发isDir(前端类型早有此字段,此前从未发过)。 - 对话正文排版偏好:输入区底行「Aa」循环 小 / 中 / 大(12 / 13 / 14.5px,行高联动),localStorage 全局记忆、所有 pane 即时生效;刻意只作用于助手与用户气泡(工具行 / 思考是 metadata 层,跟随变字号会把 24px 行撑乱)。管道走 CSS 变量,不穿 props 链。
- 对话页正文升级为全量 Markdown 渲染(设计稿《对话页-Markdown与TodoWrite卡片》):标题 / 列表 / 表格 / 引用 / 链接 / fenced 代码块(语言角标 + 悬浮复制,视觉沿用 MonoBlock 的 border-l-2 家族)。实现走 marked 词法 → React 元素:零 innerHTML、不引 DOMPurify,原始 HTML 不解析原样转义展示,链接只放行 http(s)/mailto;单换行渲染为换行(breaks,与旧 pre-wrap 行为一致)。用户气泡同步升级(与正文同一渲染器)。
TodoWrite渲染为「任务计划」进度卡:进行项呼吸点高亮、完成项划线、全部完成时头部与进度条转 success;同一会话只有最新一张展开,历史更新折叠成一行(每次调用都是全量列表,不折叠会刷屏)。- 助手正文悬浮复制(工具输出 / 思考全文此前已有,正文补齐;
focus-visible对键盘用户常显)。 - 会话内搜索(Ctrl+F,设计稿《对话页-会话内搜索》):浮层搜索条不占布局,当前命中实底反色、其余 wash 底;Enter / Shift+Enter 翻页、Esc 关闭并把焦点还给输入区(Esc 带 IME 守卫)。搜索范围 = 可见文本(用户 / 助手的 markdown 叶子、思考标题、工具行摘要),索引口径与渲染层逐字对齐(叶子序号 + 区间),不存在「计数说命中、界面找不到」。
- 命令面板检索升级(设计稿《命令面板-拼音模糊与最近使用》):拼音全拼 / 首字母匹配(敲
mx出「模型」、qk出「清空」,注音槽显示命中的音节);label 子串 > 子序列 > keywords > 拼音的分数序 + 命中字符加亮;空查询时「最近使用」(frecency:次数 × 距今衰减,本机 localStorage,上限 50 条)置顶。键盘链路与高危确认弹窗零改动。 - 快捷键速查层:非输入态按
?唤起,全局 / 对话页 / 终端页三组键位;登记处单一真源在lib/shortcuts.ts(加键位要连实现一起改,防速查层谎报)。 - 对话流长会话渲染跳过:消息列的每条消息离屏后跳过 paint/layout(
content-visibility: auto+ 记忆高度),一条跑满 4096 条事件的会话不再为上千个离屏节点付每 tick 的布局成本;锚点跳转 / 搜索命中对折叠节点依旧有效(盒子一直在,内容按需渲染)。 - 审计日志改为事件驱动刷新:后端每条审计落盘即 emit
audit:appended(write_audit_log单一漏斗,覆盖 MCP 工具调用、备份还原/删除、配置与撤销操作的全部写入方),日志页从 10s 一刷变成逐条活起来;前端 500ms 防抖失效缓存(batch / 高频调用时一次失效顶一串事件),轮询降级为 60s 兜底(性能面板 30s → 60s 同理)。窗口隐藏时不失效(规则 8)。 - 状态刷新消费后端既有的
mcp-status-changed事件(start/stop/restart 时后端一直在发、前端从未听过):MCP 启停即时点亮/熄灭,不等 5s 轮询;轮询保留——uptime 等实时字段仍靠它跳动。 - 新增依赖
marked(仅用词法)与pinyin-pro(拼音索引)。 - 对话页「本会话改动」面板改为按审批点分组:用协议原样带下来的
tool_use_id精确对上「我点的那一次允许」与「它实际改了什么」,每个审批点可单独撤销,也能按轮次整组撤销。有审计备份的用备份还原;CC 内置Edit/MultiEdit走反向补丁(逆序应用、每处必须恰好匹配一次,任一处对不上就整体拒绝、一个字不动);内置Write只有工具结果明确说「创建了」才给删除入口,删除前还会逐字节比对当前内容。撤不了的写明原因(内置Write覆盖了已有文件、批量写只留一个备份、历史会话查不到当时的审计)。 search_files增加encoding参数(如"gbk"):非 UTF-8 文件按指定编码转码后再匹配,中文关键字终于能搜到 GBK 老工程源码;合法 UTF-8 文件始终不转码,混合编码目录也安全。中文关键字零命中且未指定编码时,返回里会提示加encoding重试。- 对话页工具输出 / 思考全文 / 审批详情增加悬浮「复制」按钮(复制全文,截断显示不影响复制内容)。
- 审批 / 提问卡的「60s 后自动拒绝」改为真实走秒的倒计时(此前是印死的常量)。
- 发送键可选:默认 Enter 发送 / Shift+Enter 换行(主流习惯),可在输入区底行一键切回「Ctrl+Enter 发送」(入口就是原来那句提示本身,不新开设置页);两档下 Shift+Enter 都只换行。
- 会话条的工作目录 chip 点开可改(此前只在空状态能改,说过第一句话就成了死文本,换项目只能关会话重开):输入框手填、本机可「浏览…」选文件夹、可恢复默认;说过话的会话会明说「下一句会开一条新会话,模型看不到这段对话」。
- 图片可以直接拖进输入框(与粘贴同一条通道;只接管带
Files的拖拽,拖一段文字进来照常插到光标处),拖拽期间整块输入区描虚线并提示「松手添加图片」。 - 最后一条用户消息可「重发」(原地再问一遍,不另开会话)—— 上一轮因为网络 / 进程崩溃没收尾时,用户要的是这个,不是多开一个 pane。
- 等批准时的桌面通知(此前只有轮结束有):标题带会话目录末段(多会话时回答「哪一条」)、正文写工具与动什么,并说明 60 秒不处理会自动拒绝。四道门——通知开关、窗口不在前台、待批只有这一条、20 秒节流——都是为了让它不被用户关掉。
- 侧栏「等批准 / 等选择」的行上显示剩余秒数(最后 20 秒转警示色):这 60 秒里切到别的会话,此前唯一的线索是一个 6px 圆点,超时即静默失败。
- 审批卡新增「以后都放行这类」:把这次的工具与参数加成一条自动放行规则(规则文本由后端拼,glob 元字符全部转义成字面量,
ls *.rs里的*不会顺手放行ls *.rs && rm -rf /),加完即放行这一次;规则可在设置页撤销。取不到主参数的调用不给这个按钮(那时只剩「整个工具全放行」,不替用户决定);配置还没读出来时也不写(那是整字段覆盖,用空表往上写会把已有规则清空)。 - 会话条新增导出对话为 Markdown(复制到剪贴板):标题 + 目录 / 模型 / 导出时间,正文保留助手 Markdown、思考折叠、
Bash的命令与输出(唯一能说明「凭什么得出这个结论」的证据),Edit/Write只写改了哪个文件、改了几处(diff 是过程不是结论)。代码围栏按内容里最长的反引号串自动加长,工具输出里的三反引号不会提前闭合整段。 - 对话流新增「上一条 / 下一条我的提问」翻页钮(与「回到底部」同一条浮条,只在上滚离开底部时出现):几十轮的会话靠滚轮回到某个提问要滑很久,而搜索找的是字、不是轮。到顶 / 到底就不动,不弹提示。
- 对话流新增两条时间轴注释:「已停止 · 这一轮没跑完」与「上下文已清空 · 以上内容模型不再记得」。中断后正文停在半句、工具行停在「已中断」,隔一会儿翻回来分不清是被打断的还是模型本来就这么说;
/clear更极端——界面一个字没变而模型已经忘光。清空线从消息内容推导(那条用户消息是/clear),历史重放也自动在;停止线留在原处不动(停止本身会杀进程,下一条消息必然起新进程,但标记不跟着消失),一条消息都没产出就停时它落在所有消息之前。 - 输入框草稿关窗口不丢:打了一半还没发出去的字按会话落在本机,窗口关掉或重启后回来还在(最后约 400 毫秒内被打断仍可能丢 —— 不去拦关窗,那是拿「窗口关不掉」换这几个字)。此前它只活在一个组件
state里,一卸载就没了,而那段字往往是一整段刚组织好的需求或贴进来的报错栈。只存文字不存图片(一张图是几 MB 的裸 base64,而localStorage是同步 API、只有 5MB 配额,写的时候还会卡输入);超过 2 万字符整条不存而不是截断存(截断会让人重开时发现「少了后半截」,看着像程序吞了数据);当前窗口里没有对应会话的孤儿草稿会一并清掉(否则重启后新建的第二条会话会读到上一个窗口的草稿)。
变更
- docs: 对话页全面升级方案 + 产品定位记录
- docs: CHANGELOG 登记本批对话页 5 处 UI 修复
- docs: CHANGELOG 登记本批对话页改动(4 新增 / 2 变更 / 3 修复)
- docs: 对齐表补「每轮用量与速度」反超项
- docs: 对话 GUI 目标边界收敛「只做本机可跑通,远端 SSH 预留」
- tools: 3-2 S2 远端装配验证脚本
- docs: 批 B(可调节布局)取消,取证结论留档
- 引入 Transport 枚举(批 3-2 S3,只放 Direct)
- tools: CDP 真实时间核验脚本
- docs: 批 C 收尾(探针文档补落地三坑 + 两张规划表同步)
- docs: 补齐优化轨道 §八 并同步批 C 探针结论
- docs: 批4-1 上下文税仪表方案;计划/对齐表补交付
- style: cargo fmt 补齐批3-1d 的 store.rs 格式化
- docs: 批3-2 会话不死方案与探针;开工计划/对齐表补 3-1d/3-3 交付
- docs: 开工计划补 3-1c 交付,对齐表更正改名/归档的批次
- docs: 批3-1c 方案与真机核验(历史区 / 载入三态 / 同目录并发)
- docs: 批3-1b 落地交付与能力对齐表更新
- docs: 批3多会话调研、结构方案、能力对齐表与 0-4 托管探针实测
- docs: 对话 GUI 差距清单、开工计划与批0协议探针追加
- docs: CC 对话客户端调研、成本评估与协议探针报告
- docs: 上下文消耗方案标记批B落地,补两轮自查修掉的 6 处缺陷
- docs: 上下文消耗方案标记批A落地,同步同源五条措辞
- docs: 复核上下文消耗优化方案,修正重复计算的收益并补开工前置条件
- 终端支持标签重命名、标签切换与跨标签搜索快捷键、字号快捷键、分屏窗格关闭和文件多选操作;优化断线状态、重连提示与后台关注提醒。
- 更新弹框采用品牌双栏与大版本号,适配深浅色、毛玻璃、经典外观及窄窗口;统一展示下载、安装待重启与失败状态,下载进度可关闭后重新查看。
- 更新提示区分“稍后提醒”和“忽略此版本”,保留下载完成自动启动安装器;需要应用内重启的平台改为确认重启,并检查对话、后台成员、命令及文件传输状态。
- 修复终端准备期间输入重复发送、终端聚焦时 Ctrl+Tab 失效、批量下载只处理首个文件及并发连接突破软件数量限制的问题;改进多行粘贴确认和非法正则反馈。
- 对话运行中默认“补充当前任务”,通过同一 CLI 在工具边界读取;新增“立即调整方向”和独立“下一轮发送”,Ctrl/⌘+Enter 可立即调整,命令始终延后。
- 插话增加接收、处理和本轮结束回执及文字恢复;重复点击与未确认重试按消息标识去重,失败保留草稿和附件,连接意外断开暂停下一轮队列。Clawd 状态同步显示补充等待与调整进度。
- 对话小队默认展示全部成员:宽窗口常驻右侧,常规及窄窗口在输入框上方横向浏览;成员增加稳定配色、角色配饰、独立动作和实时完成反馈。
- 输入框升级为圆角复合输入面,引用文件与命令可直接操作;窄窗口仍明确显示发送方式,矮窗口自动压缩草稿高度,保留审批、队列与单成员停止链路。
- 对话页对齐全应用柔光画布,阅读区、标题栏与浮层层次更清晰;会话抽屉、队列和执行过程增加轻量开合动效,跟随系统减少动态效果偏好,菜单不再短暂撑高页面。
- 升级对话工作区:常驻会话搜索与新建入口,窄窗自动切换会话抽屉;阅读字号改为 14 / 15 / 16px,默认 15px,模型与执行模式集中到输入区。
- 日常聊天支持逐条查看、编辑和移除排队消息,停止后可明确恢复发送;润色先预览再采用,连续成功操作折叠为执行摘要,连接异常提供诊断与恢复入口。
- 会话花费($)改为替换式累计:CLI 的
total_cost_usd是会话累计值,旧逻辑按轮累加会把第 2 轮显示成「第 1 轮 + 两条累计」的虚高值。 - 对话页的错误提示不再顺手把「运行中」拍成空闲:运行中润色失败、点掉错误横幅不会再触发队列误发(该路径曾造成消息被后端拒收后直接丢失);发送失败撤回乐观状态改走独立的内部动作。
- 实时工具输出 / 入参 JSON 在界面层截断到 16k 字符(与历史入库侧同口径),超长命令输出不再整串进 DOM 造成卡顿,并提示已截断。
- 审批卡直接给 diff(此前一律
JSON.stringify入参):Edit/MultiEdit显示真实改动(多处以 ⋯ 分隔),Write显示即将写入的内容并注明「这里没有改动前的样子」(我们手上确实没有),Bash显示命令,其余才退回 JSON。转义后的\n字面量根本读不出改了哪行,等于让人盲批文件改动。复制按钮仍给无损入参原文。 - 「Aa」正文排版与「详略」从循环钮改成三档分段控件:三档一次摊开、当前档高亮(循环钮看不出有几档、不知道该点几下,
aria-pressed也没有意义)。 - 中断不再清空待发队列:改为暂停自动发送,内容原样留着,提示条上给「继续」。此前是替用户猜「他也不想发那几句」,猜错时后果最重(排了三句想好的话,点一下全没了,而这件事只写在 tooltip 里)。停止请求还在途中(杀进程是异步的)时按发送会等它收干净再发,不再被后端拒成一句「上一轮还在进行」。
- 会话条按「运行参数 / 动作」之间加一条竖线分组(左边模型 / 上下文 / 花费 / 权限,右边改动 / 历史 / 新对话 / 终端);没花钱的会话不再显示
$0.00;侧栏分组头不再给每个组都写一遍「0 在跑」。 - 待审批时的输入框占位符改成「本轮在等批准,现在发的会排队,批准后自动发…」——此前写的「先处理上面的审批,再继续」是谎话,实际能排队。
- 会话条右端的动作区(改动 / 导出 / 历史 / 新对话 / 终端)独立成组件:它与左边的运行参数没有状态往来,只是排在同一行;挪出去后会话条那一条不再逼近体量上限。
修复
- 终端画布上的横幅改用不透明底,恢复横幅可本次忽略
- 终端剥除器扣留治理(空闲冲刷 + pending 上界 + 输入关联闸)
- 探测 ssh 客户端可执行性,跳过存在但跑不起来的候选
- 终端偶尔自己输入 echo(注入时序从猜时间改成等回执)
- wait_command 在命令已结束时漏判 untilPattern
- 同一个远端失败同时显示两条几乎一样的红条
- 紧凑列表的项目符号独占一行,正文下移缩进
- 会话条两行布局右半截大段留白
- 上下文余量条在浅色主题下几乎不可见
- 浮层改 fixed 定位,不再被 pane 边界切掉左半边
- 历史面板浮层向右展开,会被 pane 的 overflow 裁掉
- stop_command 的 outputComplete 断言同样不成立(macOS 收尾窗口)
- 4 条测试写死了 Windows 行为(main 的 CI 从 10-25 起连红四次)
- 对话页交互缺陷(发送键 / 拖图 / 目录 / 重发 / 队列 / stderr / 图片)
- 对话页一轮 UX 修复(回到底部 / 待批准 / 键盘可达 / 超时禁用 / 发送队列)
- 全 GUI 一轮缺陷修复(IME 劫持 / 更新卡死 / 并发与竞态)
- 上下文构成面板的开关按钮关不掉自己
- 对话 GUI 一轮缺陷修复(丢事件 / 丢消息 / 丢滚动位置)
- 上下文税哨兵值不再当字符数落盘
- 侧栏「⋯」菜单被滚动容器裁掉(改 fixed 定位 + 就近向上翻)
- batch 子操作审计按实际进入上下文记字节,外层容器条目不再重复计 token
- env 参数静默失效、搜不到 GBK 里的中文等 4 处工具问题
- 对话页:模型选择 / 上下文构成 / 历史对话 / 本会话改动四个浮层改用 fixed 定位 + 视口 clamp。此前是
absolute right-0,只在锚点靠右时不越界;会话条flex-wrap之后右端那一组会整组换到第二行、贴到 pane 左端,浮层向左伸的前半截被面板的overflow-hidden裁掉 —— 表现不是报错而是文字缺开头(Opus Plan显示成s Plan、「下一轮生效」显示成「效」)。左右两个边界都要管,calc(100vw - …)救不了,因为裁切来自面板而不是视口。 - 对话页:无序列表的项目符号不再独占一行。
list-inside的 marker 属于行内盒,而紧凑列表的li里还包了一层块级<p>,于是圆点自成一行、正文整体下移缩进。 - 对话页:上下文余量条在浅色主题下看得见了。此前轨道用
bg-muted、挂在bg-card的会话条上几乎同色,占用率低时整条只剩一个点,读起来像数字前面多打了个逗号。 - 对话页:会话条两行布局不再右半截大片留白。此前参数与动作全挤在同一个
ml-auto组里,组内换行把两行都推到右端,第一行只剩「目标 + 目录」(1578px 窗口下实测空出约 800px);拆成两组后 flex 先在第一行排参数,放不下才让动作整体落到第二行。 - 对话页:同一次远端失败不再显示两条几乎一样的红条。前端摘要(
远端探测失败: … Permission denied (publickey,password).)与 CLIstderr原文重叠时,stderr 那条按保守判据藏掉:仅当它的整行(≥12 字符)被某条错误完整包含才判重复,有一个细节不同就照常显示。 - 对话页:会话内搜索现在能搜到工具的展开正文(
Bash的输出、Read/ 其余工具的入参),此前只索引行上的参数摘要 —— 「那个报错在哪一轮」恰恰是最常搜的东西。索引与渲染共用同一份截断后的文本,高亮不会标错字;命中落在收着的工具卡里时那张卡自动摊开(否则计数说「2/5」、点下一处界面不动,而Read与其余工具默认就是收着的)。 - 对话页:点「停止」不再被误报成「claude 进程在生成中退出了(崩溃或被中断)」。中断走的是杀进程,
Exit事件一定会到,而那条提示拿「还在运行?」当判据 —— 现在停止先自己落下运行态,用户按的是停止,不该被告知出了事故。 - 对话页:前端错误改为多条并存、各关各的(此前只有一个槽,连续两件事出错时后一条顶掉前一条,而先发生的那条往往更重要;那个 × 还会把另一条一起关掉)。最多留 5 条:保头 + 最新的几条 —— 只留最新会把根因挤掉(一次探测失败会让之后每一步各失败一条),只留最旧又会让横幅冻住。
- 对话页空状态:点示例 prompt 改为填入输入框并聚焦(此前点了直接发送,没有修改机会);工作目录输入框停止输入后显示「已应用,下一条消息生效」(此前即时生效但没有任何反馈)。
- 对话页:上滚离开底部后出现「回到底部」浮钮;有待批准的审批 / 提问时变成醒目的「有 N 条待批准」(此前审批卡弹在视口外、没有任何提示,60 秒后被自动拒绝)。
- 对话页:审批 / 提问卡倒计时归零后禁用按钮并显示「已超时,等待撤回」(此前点了只会报错);「拒绝 / 允许一次」间距拉大、卡片标注
role=group供读屏识别。 - 对话页侧栏:会话行可用键盘选中(Enter / Space);「⋯」与「×」键盘聚焦时可见、点击目标放大到 24px;关闭「生成中 / 等批准 / 等选择」的会话前先确认(此前一次误点就中断任务)。
- 对话页:窗口缩到最小宽度时,会话条与输入区底部工具栏自动换行,不再把「历史 / 新对话 / 终端」等按钮裁掉。
- 对话页:发送在途期间新粘贴的图片 / 新输入的文字不再被一并清掉(只清已发出的那几张和那一句)。
- 对话页:会话内搜索打开且模型在流式输出时,不再每个 tick 都把视口拉回当前命中处,只在查询词或命中序号变化时滚动。
- 对话页:「从此处分叉 / 编辑并重发」对纯图片消息不再分叉出一条空会话(禁用并说明原因),带图消息明确提示「图片不会带到新会话」(原图不落盘,历史里只有缩略图)。
- 对话页文案与可读性:约 60 处 10 / 10.5px 的小字号统一提到 11px,复制按钮高度提到 24px;「新建对话」统一为「新对话」;slash 被拦提示补「要发的是路径?前面加几个字即可」;运行中的「排队 / 中断」按钮补说明;@ 面板空结果文案精简。
- 对话页:点「停止」或进程被杀后,没有裁决的审批 / 提问卡与仍显示「执行中」的工具卡不再残留(此前审批卡会一直转「N 秒后自动拒绝」、侧栏一直显示「待批准」,点按钮还会报错;工具卡永远转圈)。一轮落定或进程退出时统一收尾,已裁决的审批保留。
- 对话页:发送在途时(远端 SSH 起进程要数秒)按住 Ctrl+Enter 或连点发送,不再把同一条消息重复提交并排进队列。
- 对话页:排队消息发送失败(CLI 没装、模型名不对等)时不再逐条丢弃整队;失败那条放回队首、其余保留,并暂停自动发送、给出提示,清空队列或下一条发送成功后恢复。
run_command的env参数在未开启「命令会话持久化」(默认)时被整个丢弃且不报错,子进程里变量为空——传密钥会静默发出空凭证。现在本次传入的 env 总是生效,开启持久化时才额外跨调用保留;开关关闭却传了sessionId时,返回里会说明它被忽略。analyze_file对 GBK 文件报encoding: "unknown",与read_files的识别结果不一致;改为共用同一套编码探测,并修正采样截在多字节字符中间时把 UTF-8 误报为 unknown 的问题。search_files返回的路径不再带\\?\前缀。edit_files的首尾空白告警只在失败时返回:此前成功的多行编辑也顶着「去掉首尾空白后重试」,还把首尾换行算成制表符;成功结果也不再带"warning": null占位。- 对话正文丢失全部换行(多段回复被压成一坨):正文补
whitespace-pre-wrap/break-words,顺带修复超长 URL / base64 撑破气泡出现横向滚动。 - 中文输入法在对话输入框被劫持:斜杠命令面板与 Ctrl+Enter 现在跳过 IME 组合期(
isComposing/keyCode 229),拼音选词的方向键与上屏 Enter 不再被当成命令补全 / 发送。 - 流式输出强制贴底、生成期间无法上滚回看:贴底改为「只在用户本来就贴着底部时才追新内容」,跳转锚点自然脱钉。
- 切走再切回一个会话 pane 后滚动位置丢失 / 看不到最新输出(
display:none会归零 scrollTop):切回时贴底的补到底部、没贴底的还原离开时的位置。 - 中断(interrupt / 换目标续聊 / 打开历史)不等 stdout 读线程排干,迟到的
Stderr/Exit污染新流水:造成换目标后数秒「假空闲」(该窗口补发消息会被拒收且丢失)、以及旧会话尾部拼进新打开的历史。kill/shutdown现在等读线程排干(2s 宽限)再返回。 - 事件的「入 ring + 推送前端」在读写两个线程间可能交错,迟到的低序号事件被前端去重丢弃(实例:审批裁决丢失、卡片永远「等待中」):两步绑进同一临界区,推送顺序与序号严格一致;前端另加序号跳号自愈(防抖拉快照重放)。
- 对话事件订阅在
await窗口内卸载会永久泄漏监听器(快速开关会话页累积):解析后立即摘除。 - 订阅 / 恢复未就绪时抢发消息直发被拒且丢失:未就绪一律入队,就绪后自动发出。
- 会话条「模型 / 历史 / 变更集」三个浮层用自己的开关按钮关不掉(外点关闭与按钮开关互相打架):开关按钮不再算「外点」。
- 「上下文构成」面板同样用自己的按钮关不掉:它是后来加的,没接上「开关按钮不算外点」的判定;补上标记,并加按真实点击顺序(
pointerdown→click)的回归测试——只.click()的测试漏得掉这条。 - MultiEdit 只显示第一处修改的 diff 与统计:改为按顺序拼接全部修改(⋯ 行作分隔),行内并标注总处数。
- diff 中段过大降级为整段替换时统计虚高且无提示:diff 块与工具行现在明确标注「已降级,± 为近似值」。
- Bash 工具输出「有结果默认展开」只在历史重放时生效、直播时不展开:结果落地时自动展开一次(用户手动收起过则不代劳)。
- 已归档的会话在「已归档」视图仍可点出第二条同库行 pane(两个进程续同一条 CLI 会话):
openStored去重同时认meta.rowId。 - 打开着的已归档会话,侧栏「⋯」菜单恒显示「归档」、无法取消归档:归档态现在本地记账并正确切换菜单项。
- 关闭会话后端失败时,侧栏历史区要等 30s 缓存过期才重新出现该条:失效重取改为无论成败都执行。
- 会话条「新对话」按钮提示仍是单会话时代的「清空这条会话链」,实际行为(新开一条、原会话保留)与之不符:文案更正。
- 历史面板搜索存在乱序响应竞态(慢的全量响应晚到覆盖新结果):按请求序号丢弃过期响应;远端转录(接管路径后端未实现)现在明确拒绝并说明,而不是被静默切到本机。
- 会话条「历史」按钮接管当前 pane 后侧栏拿不到库行号(改名 / 归档入口误判「还没落盘」):
cc_history_open回传rowId并纳入侧栏对账。 cc_start冷启动先记账后发送,写失败时那句话留在流水里、重发后重放出现两遍:改为送进 stdin 成功才记账(与热路径一致)。- stderr 全局去重吞掉 CLI 合法重复的告警行且 O(n²):改为只对「相邻且完全相同」的批次去重。
- 对话页顶部的 stderr 红条关不掉、还跨轮残留(启动失败的报错会一直挂着,就算后来重试成功):那个 × 只清了前端
error,stderr 原封不动。现在 × 真的清 stderr(与error分开,各关各的),新进程启动时也一并清空,并且只保留最近 40 行(此前同一个进程跑一整天会躺着几百行,每来一条都重建整个视图)。 - 正文悬浮复制按钮用
-top-2负偏移,会探出本节容器压到上一条消息的正文上(hover 时看着像给上一条挂了操作):改为top-0。 - 贴进对话的图片只有 256px 缩略图且点不开:现在可点开看整图(全屏遮罩、Esc 关、←→ 翻页、点背板关),并如实说明「会话里只存了缩略图,这已经是最大的了」——不说的话用户会以为渲染坏了,转头去翻根本不存在的原图。
- 退出不清「重试中」横幅,「已退出」与「正在重试」并排自相矛盾:
exit一并清掉。 - 历史搜索高亮在大小写折叠不等长的字符(如
İ)上区间错位、<mark>切出残字:折叠不等长时退回区分大小写匹配。 - 提问卡选项 / 题面被模型输出重复时 React key 冲突:改用「下标 + 文本」复合 key。
- 切走对话页不收空闲会话,后端会话表累积死会话(每条最多 4096 条事件):切页卸载时关闭无进行中轮次的会话。
- 对话页搜索框门槛只数「已打开」的会话、忽略了历史区(最多 30 条):改为数可搜内容总量。
- 发送后的草稿仍显示「撤销润色」、点它把旧稿填回空输入框:发送时清掉润色备份。
- 对话输入框粘贴图片无任何反应(终端页支持):现在说明去向(终端页粘贴可自动上传并填入路径)。
- 发送键标签固定显示
Ctrl:跟随平台显示⌘Enter/Ctrl+Enter。 - 清理死代码:
PANE_SOFT_LIMIT(宣称「到 12 条自动折叠」但从未接线)、前端reset动作(无调用方,且接上即带序号回绕丢事件缺陷);修正exit事件「每一轮都会收到」的错误注释。 - 命令面板在中文输入法组词期间按 Enter 会直接执行当前选中的命令(可能命中「清空审计日志」「重新生成访问令牌」等高危项):组词期的按键现在全部放行给输入法。
- 输入法组词期守卫铺开到其余 11 处键盘处理:终端搜索条、远端新建文件夹 / 上传路径、引导与安全页的目录 / 程序白名单输入、拖拽上传目标目录、日志导出菜单、扩展名芯片与排除规则输入(组词期逗号不再被当分隔符拆词)、
/快捷搜索、所有弹窗的 Esc(焦点陷阱层统一放行)——组词期的 Enter / Esc / 方向键属于输入法(上屏 / 收候选窗),不再被当成提交 / 关窗 / 导航;判据统一为lib/utils的isImeComposing(keyCode 229兜底 Safari 等不置isComposing的引擎)。 - 下载更新进行中点「检查更新」会把徽章永久卡在「检查中」:状态被检查入口打成 checking,而下载线程复查发出的检查事件又被下载守卫拦下,没有任何事件能救回来——检查入口在下载期间直接忽略。
- 更新流程写「上次检查时间」不再因 localStorage 不可用而抛未处理异常(此前会中断检查收尾)。
- 按住 Ctrl+K 不放,命令面板随键盘重复每帧闪烁开关:只响应首次按下。
- 双击 SSH 连接按钮会并发出两个连接、开出两个重复标签:连接入口加同连接重入闸(ref 判定,同帧连点也挡得住)。
- 系统 ssh 可用性探测失败产生未处理 Promise 拒绝(启用终端页时);降级卡的「重新检测」失败现在明确报错,不再无声无息。
- 会话的远端 cwd 登记表(OSC 7 探测结果)只增不减,长开的工作区会累积大量死映射:抽出
useTerminalCwds,会话移除 / 重连换 sessionId 后同步清理。 - 目录选择器快速连续导航时乱序到达的响应会覆盖新目录(点到 A 显示 B):按请求序号丢弃过期响应;顺带修复首次加载失败后的无限重试 toast 刷屏(自动加载改为每次打开只试一次,重开不丢已浏览位置)。
- 「还原备份」确认框在还原进行中可被 Esc / 点遮罩关闭,还原结果无人接住:进行中禁止关闭(对齐日志页还原弹窗的既有行为)。
- 首次使用引导弹窗没有焦点陷阱,Tab 会跑到被遮罩挡住的背景页上「消失」:接入公共焦点陷阱(Tab 循环、卸载归还焦点;Esc 收起本次引导的语义不变),并补
role="dialog"/aria-modal。 - 对话页:超矮窗口下输入区不再把发送按钮挤出屏幕。此前
.cc-composer-dock是flex:none,窗口变矮时消息流先被压到 0、输入区原高不动,超出 pane 的部分被overflow-hidden裁掉 —— 长草稿(168px)加展开队列时,工具栏与底行整块落在可见区外,发送点不到;附了待发图片时更容易触发。现在输入区自身可收缩(消息流flex-basis:0不参与收缩,缩量全落在输入区上),内部按「草稿(76px 地板)→ 队列列表」两级吸收,发送 / 停止 / 底行始终留在 pane 内,收缩后草稿与队列都在各自内部滚动、不丢内容。最小窗口 560×600(见tauri.conf.json)下仍保留约 60px 阅读区。