安装
| 平台 | 格式 |
|---|---|
| Windows | .msi 安装包 |
| Windows x64 便携版 | .zip 压缩包 |
| macOS (Apple Silicon) | .dmg 磁盘映像 |
| Linux | .deb / .AppImage |
- Windows 首次安装可能触发 SmartScreen 提示,点击"仍要运行"继续
- macOS 应用未经 Apple 签名/公证,首次打开可能提示"已损坏"或"无法验证开发者"
Windows 便携版:下载 Windows x64 portable .zip,解压后直接运行 cli-manager.exe,无需安装。
macOS 安装说明
如果已拖入"应用程序"目录,执行:
xattr -cr /Applications/CLI-Manager.app
open /Applications/CLI-Manager.app也可以在 Finder 中右键应用图标,选择"打开",或在"系统设置 → 隐私与安全性"中点击"仍要打开"。
变更日志
侧边栏底部同步状态单行显示
- 侧边栏底部的同步状态文案(如“未配置”)不再换行成两行:云图标固定不压缩,文案强制单行,宽度不足时以省略号截断,完整内容仍可通过悬浮提示查看。
- 底部工具栏的四个图标按钮不再参与收缩,避免挤压同步状态文案的可用宽度。
会话历史编辑与批量选择
- 修复会话历史批量选择入口与消息级多选回归,保留会话列表和详情页的本地化选择操作。
- 修复编辑/删除消息后历史 V2 索引仍返回旧快照的问题;目录变更会在读取前同步刷新,并对源文件指纹做新鲜度校验,刷新后立即显示持久化结果。
- 修复手动刷新历史索引后仍保留已删除会话详情快照的问题:当前会话会重新加载,已不存在的会话会自动清空详情。
- 修复 V2 详情将会话事件时间误用为文件并发校验时间导致编辑/删除持续提示“文件已变化”的问题。
- 增大历史消息编辑框的默认及最大高度,长文本编辑时可查看更多内容并减少滚动。
- 历史消息编辑框改为按文本内容自动增高,长文本编辑时与阅读态保持更接近的可视高度。
终端预览面板独立主题
- 设置 → 终端 新增「预览主题」区块:可以让终端右侧的预览类面板跟随终端主题(默认),或从终端主题库里单独挑一个预设。作用范围为 Markdown 预览(小眼睛)、子代理转录、会话回放与终端内 Git diff 查看器;终端本体、终端 Tab、统计/供应商/系统资源等状态面板与 Statusline 预览不受影响。
- 「终端主题库」与「预览主题」共用同一套预设网格组件(分组、搜索、色板卡片、当前徽标),终端主题库原有的浅色/深色/跟随系统分段与 auto 特例行为不变。
- 预览主题的明暗判定、面板 CSS 变量作用域统一收敛到一处解析器:面板自己不再各判一套明暗。切换设置即时生效,不需要重开面板;分屏下多个预览面板表现一致。
- 独立主题下代码块高亮明暗跟随预览主题;会话回放的转录改用终端代码主题时显式保留「预览」链接行为,不会变成直接打开外链。跟随终端时保留终端自定义文字颜色覆盖,独立主题则使用预设自身前景色。
- 该设置持久化在本地偏好并归入 WebDAV 同步的
preferences类;同步回灌或手改出的未知/失效预设 id 会自动回退为「跟随终端」。
浅色终端擦除 Claude / Pi 的黑色背景块
- 浅色终端主题下,Claude Code 与 Pi 发送命令后残留的黑色(深色)背景块会被强制擦除:按 xterm 单元格实际渲染色判定,RGB 与 256 色/ANSI 调色板背景都按当前终端主题解析,只清除接近中性的深色背景(相对亮度 ≤ 0.28、色度 ≤ 96),彩色徽标、diff 标记和浅色选中高亮保持原样。
- 该擦除按会话身份加主题明暗生效(浅色主题 + Claude/Pi 会话),不再依赖 TUI 欢迎横幅的可见性锁存——横幅滚出可视区后黑块依然会被清掉;深色主题、Codex 与普通 Shell 会话的渲染行为不变。
- 同一行深色单元格少于 4 个时保留,避免误清 TUI 自绘块状光标;整行大面积反显(inverse)仍按既有规则清除,孤立反显单元格保留为软件光标。前景色不做清除,浅色主题的
minimumContrastRatio: 6会自动把原本贴在深色块上的浅色文字调回可读对比度。
修复文件浏览器残留拖拽预览导致前端类型检查失败
- 文件浏览器侧边栏在拖拽预览逻辑迁入共享 Hook 后残留了一段引用已删除局部状态(
dragPreview/Portal)的 JSX,使tsc报 11 个错误、npm run build无法通过;该死代码已删除,拖拽预览仍由useTerminalFilePointerDrag统一渲染。
供应商面板不可入队过滤与固定头部
- 终端右侧供应商面板的「路由状态」卡片新增第三个开关「展示不可入队」,位于「自动故障转移」下方,默认关闭:关闭时供应商列表不再展示状态为「不可入队」的供应商(即未就绪且未熔断的那一档),打开后恢复完整列表。该开关是纯视图过滤,不写入数据库或路由配置,也不改变故障转移队列成员、目录顺序与
#N优先级编号——队列提交与拖拽重排仍按全量供应商计算,因此隐藏行不会被踢出队列,也不会触发provider_reorder_mismatch。 - 过滤只作用于「不可入队」这一档状态:已熔断与半开供应商有各自的状态标签,始终展示;当前正在生效的供应商即使未就绪也始终保留,避免面板看起来没有当前项。列表标题右侧的计数在存在隐藏项时显示为「可见数/总数」;全部供应商都被过滤掉时提示打开该开关,而不是复用「暂无可用供应商」空态。
- 供应商面板的「CLI 类型」分段控件、「路由状态」卡片与「供应商列表」标题行改为固定区域,只有下方供应商列表滚动,滚动列表时上方内容不再跟着上移;面板级错误提示同样移入固定区域,不会随列表滚走。
Git 变更文件和目录拖放到终端
- Git 变更面板中的文件和目录行(文件覆盖已修改、已添加、已删除、重命名、冲突和未跟踪状态)现在可以直接拖放到应用内终端;同一项目或 Worktree 仍插入既有 CLI 相对路径,跨项目、Worktree 或 SSH 根目录时自动插入来源仓库的绝对路径,目录保留尾斜杠。
- Git 树与文件浏览器复用同一套指针拖拽、预览、终端投递和拖后点击抑制逻辑;暂存、丢弃、删除等行内操作按钮保持原有点击行为,不会被当作拖拽手柄。
非 Git 目录的 Git 变更面板空态
- 打开的目录不是 Git 仓库时,Git 变更面板不再把 libgit2 原始错误(
不是 Git 仓库或无法访问: could not find repository at '...'; class=Repository (6); code=NotFound (-3))当成提示语铺满面板,改为显示图标 + 「当前目录不是 Git 仓库」+ 初始化提示的友好空态;WSL 项目也不再显示裸错误码not_git_repository。 - 后端
git_get_changes的 native/libgit2 链路现在遵守既有稳定错误码合约:libgit2NotFound映射为not_git_repository,所有权误判、权限不足、仓库损坏等真实故障保留原始错误并继续按原样提示,不会被伪装成友好空态。SSH Agent 的 Git 错误映射同步识别该场景(需要更新远端 Agent 后生效)。 - 顺带修好文件浏览器的非 Git 负缓存:Windows 本地非 Git 项目此前因为拿不到稳定错误码而每次刷新都重复查询 Git 状态,现在与 WSL 链路一致只探测一次。
- Git 推送、拉取、Fetch、切换分支等操作在非 Git 目录失败时,toast 也改为「当前目录不是 Git 仓库」而不是原始错误串。
内置 Live Server
- 本地项目与 Worktree 的
.html/.htm文件右键菜单新增“使用 Live Server 打开”,覆盖普通文件树、文件搜索和代码搜索结果;使用系统默认浏览器打开,项目根右键菜单可显式停止当前服务。SSH、WSL 与非 HTML 文件不显示可执行入口。 - Live Server 由应用内 Rust 后端直接提供,不调用
npx、Python、VS Code 或全局命令。同一项目根复用动态端口,不同项目独立运行;项目文件变化通过 250 ms 防抖 watcher 推进版本,浏览器内注入的客户端在正常本地文件系统条件下于一秒内自动刷新。 - 服务仅绑定
127.0.0.1,校验精确 Host、请求方法、相对路径、规范化根目录与 canonical containment;拒绝路径穿越、反斜杠、非 HTML 入口、缺失目标及 symlink/reparse 越界,不生成目录列表。应用退出时统一关闭监听器与 watcher。
历史会话智能命名自定义 Prompt
- 设置 → 会话历史 → 历史会话智能命名新增一份全局、本机保存的自定义 Prompt 编辑器。保存非空内容后,后续手动和自动标题生成会将其作为所选 Native Provider 的系统指令;清空或“恢复内置默认”立即回退既有内置标题指令。
- Prompt 会移除首尾空白,并限制为最多 4096 个 UTF-8 字节且不得包含 NUL 字符;设置页在保存前给出中英文错误提示和字节计数,手工修改的无效本地设置也会安全回退默认值。
- Prompt 保存完成后会显示本地化成功提示,写入期间按钮显示加载状态并阻止重复提交;写入失败不会误报成功。
- 标题候选消息仍由程序独立提取并作为 Provider 的 user/input 发送,不新增 IPC Prompt 字段、数据库迁移或 Provider 协议分支;该设置继续排除在设置同步之外,日志不记录 Prompt 或候选正文。
- 生成智能标题的 Tauri command 改为异步响应路径,Provider 请求等待不再由同步
block_on占用 IPC handler,数秒的模型响应期间应用界面仍可交互;点击后会立即将对应会话标为生成中,详情按钮显示加载图标并禁止重复触发,列表同步显示进度。 - 正式版与
npm run tauri dev按设计共享本机 SQLite 时,智能命名的预留/落库事务会先获取写锁并最多等待 15 秒,避免读后写竞争被误报为 Provider、模型或网络故障;耗尽等待后返回稳定的“本地历史数据库正忙”类别和本地化提示。
Grok TUI 鼠标交互
- 恢复全屏 Grok 等启用终端鼠标协议的 TUI 直接接收普通点击与拖动,不再要求按住 Alt;宿主文本选择改回标准终端行为(Shift 拖选)。OSC 52 本机剪贴板路径保持不变。(Refs #228, #212)
侧边栏项目树可读性
- 项目行的终端数徽章现在按 CLI 工具着色:Claude Code 橙色、Codex 绿色、Gemini CLI 紫色,其余工具保持默认蓝色。徽章取
resolveCliToolIconKey归一化后的图标 key,cli_tool存的是自由文本命令(可能带参数),此前无法匹配到已有配色,所有圆点都是同一个蓝色。 - 分组行新增项目数徽章:统计含子分组递归、不计 Worktree,超过 99 显示
99+,折叠分组后仍能看出规模。统计口径与折叠侧边栏窄条徽章统一为countProjectsInNode,避免两处各写一份递归;该徽章不带工具色圆点,与项目行的终端数徽章在视觉上区分。 - 外观列增加缺列自愈:每次打开数据库前的
db_repair_known_migration_drift会检查groups/projects的icon、color列与 migration 34 的登记状态是否一致 —— 无论 migration 34 是否已登记,缺列都会先补齐;版本未登记时按同一 checksum 补登记,避免 sqlx 重放ADD COLUMN撞duplicate column name,修复项目列表外观标记时报no such column: color。已登记旧版外观 migration 33 的数据库会先补齐远端的路由用量诊断字段,再校正 v33 登记并补记外观 migration 34,避免更新后因 checksum 冲突无法启动。 - 分组与项目新增外观标记(migration 34,
groups/projects各增加icon、color两列,默认空串):颜色只存 10 色调色板 token 不存任意 hex,图标可存单个 emoji(含 ZWJ 组合、旗帜、CJK 单字)或内置图标 key。未设置时不做任何自动配色,节点跟随统一的系统色,只有用户显式设置才改变。调色板亮/暗主题分别取值,10 色对#ffffff/#141414的非文本对比度均 ≥ 3:1(实测 3.30–11.04)。写入路径做归一化,非法颜色一律落成空串,不写脏值进库;新建分组时外观随同一条 INSERT 落库,修改外观只更新单行的icon/color列。 - 外观标记有两个入口且共用同一面板:新建分组内联行的图标位(点开快选,不点直接回车仍是一步建组)、分组/项目右键菜单「外观标记」(菜单内内联展开);项目新建/编辑/克隆弹框不再显示该项,编辑项目也不会覆盖原有标记。点击紧凑标记输入框会打开本地 Emoji 15 数据直接渲染的选择器,提供搜索、九个可切换分类和原生可见滚动条;同时增加离线可用的飞书、小红书、哔哩哔哩品牌标记。自定义输入仍可用且不再显示“1 个 emoji 或字符”占位提示。项目与分组行设置颜色后均显示左侧细色条,默认没有任何多余竖线;显式颜色也会作用于单色图标。折叠侧边栏窄条图标同样跟随。emoji 与 CLI 品牌图标自带颜色,运行态背景(
data-status)语义不被覆盖。Worktree 行保持既有的绿色身份,不继承项目颜色。 - 侧边栏右键菜单按实际尺寸在视口四边翻转并钳制;展开外观面板时保留原菜单位置,只有确实放不下才收敛并内部滚动,避免点击外观编辑后菜单跳到窗口顶部。Emoji 选择器优先向右弹出并按视口边缘自动翻转/位移;不再在 Radix 弹层内命令式挂载异步 Emoji Mart Web Component,避免其连接生命周期被右键菜单重渲染中断而出现空白。分类按钮由 React 状态直接驱动,滚动容器使用应用样式的原生滚动条,避免内容被裁切、无法切换分类或无法下拉。
- History 与 Stats 的项目树接入同一份外观解析:同一分组/项目在侧边栏、History 侧栏、Stats 项目筛选三处的颜色与图标完全一致,全仓只有一份调色板实现。Stats 的项目图标此前走
inferVendor+VendorIcon,是三处里唯一的第三种图标口径,现已统一为 CLI 工具图标。 - 外观标记纳入 WebDAV 备份与恢复往返:
groups/projects的导出列与恢复插入列同时加入icon、color,并同步更新后端BACKUP_RESTORE_INSERT_COLUMNS白名单 —— 该白名单是精确前缀匹配,只改一侧会让整批恢复在BEGIN IMMEDIATE事务里全量回滚。恢复语句顺序与外键语义未变,分片行数按列数动态计算仍在单语句 30000 参数预算内。旧版本快照缺少外观字段时恢复不报错,缺失或非法值落空串退回系统色;恢复对话框在选中"工作区"域时提示外观标记会被快照覆盖。数据形态变化会让升级后首次自动备份重新上传一次(内容哈希改变),属预期。
供应商弹框统一维护密钥与模型选择
- 新增/编辑供应商弹框的「高级选项」中加入「API 密钥」字段,密钥、模型回到与 baseUrl 同一个弹框内维护,不再需要「先保存供应商 → 重开详情 → 切页签 → 加密钥 → 激活」这条五步链路(issue #214)。密钥输入框占满整行以便完整显示,多密钥时通过输入框内的小图标菜单切换。
- 新增供应商时填写的密钥随供应商一并创建并自动激活,成为该供应商的第一个密钥;密钥非必填,留空则只创建供应商,保留「先建壳、后补密钥」的用法,此时仍会带出详情弹窗引导去「API 密钥」页签补配。
- 编辑供应商时密钥输入框回显当前激活密钥的明文,右侧下拉框可切换要查看/编辑的密钥。切换只改查看对象、不改激活状态,激活项仍在「API 密钥」页签中调整;密钥值未发生变化时不会写回,不会无谓地把供应商推进「密钥已变更,请重新预览并应用」状态。原本没有任何密钥的供应商在编辑态填入密钥后,会补建并激活第一个密钥。
- 「获取模型」不再要求供应商已落库且已有激活密钥:表单里填了密钥就能直接拉取
/v1/models,新增供应商时即可使用。该临时密钥仅用于当次请求,不写入数据库,也不会随调试日志(CLI_MANAGER_DEBUG=1)落盘。不填表单密钥时行为与此前一致,仍从激活密钥取。 - Claude 的默认兜底模型由自由输入框改为带建议的输入框,与上方五个角色模型(Sonnet / Opus / Fable / Haiku / Subagent)一致;供应商的模型字段同样改为带建议输入。
- 模型候选来源按优先级取用:
/v1/models拿到结果时只展示接口返回的模型,不再把本地维护的模型拼进同一个下拉,避免分不清哪些是该供应商真正支持的;接口没调过、调失败或返回空时,才回退到「当前已配置 → 模型价格表 → 其他供应商在用」三级本地候选并分组展示。价格表候选按 CLI 类型粗筛,筛不中时给出整表而非空列表。任何时候都允许直接输入不在候选中的模型 ID。 - 修复模型下拉在字段已有值时只显示当前这一条、无法直接改选其他模型的问题:输入框现值命中候选时展示全部候选,只有用户真的键入新内容才按子串过滤;过滤结果为空时同样退回展示全部,避免已配置模型不在接口返回列表中(自建/聚合站常见)时点开只看到空下拉。
- 候选列表中的模型一律不带
[1M]后缀,长上下文仍由各角色行独立的 1M 勾选控制。 - 修复取模型失败时真实原因被掩盖的问题:此前后端在检查 HTTP 状态之前就解析响应体,而 401/404 的响应体常是 HTML 或非标准 JSON,解析失败会抢先报「响应无法解析」,把真正的 401/404 藏起来。现在先判状态再解析,HTTP 错误按实际状态码返回。
- 修复取模型结果跨供应商串数据:承载表单的弹框是常挂载的(Modal 关闭时组件不卸载),此前拉到的模型列表会一直留在内存里,导致在 Grok 供应商拉取过模型后,切到 Claude 新建或编辑供应商时下拉框里已经带着 Grok 的模型,且仍挂着「接口返回」的分组名,等于把别的供应商的结果冒充成当前供应商的。现在切换 CLI 类型、切换供应商、修改 API 地址或重开弹框都会显式失效该列表;并为取模型请求加入代际守卫,失效后回来的在途响应不会再把旧地址的结果写回。
- 取模型失败新增可排查的诊断日志:
warn级别记录 CLI 类型、HTTP 状态与截断后的响应体(供应商真正的拒绝原因通常只在响应体里),不需要开CLI_MANAGER_DEBUG即可看到;debug级别额外记录实际请求的 URL、使用的认证请求头、API 格式、认证字段、密钥来源(表单临时密钥或已激活密钥)以及密钥指纹与长度,用于比对同一地址在不同 CLI 类型下的请求差异。密钥只记首尾各 4 位的指纹,长度不足 12 位时全部隐去,日志不含明文密钥。 - 取模型失败不再一律显示同一句「获取模型失败」:按原因区分地址未填、密钥未填或未激活、密钥含非法字符、请求未送达、响应非 JSON、返回成功但无模型,以及 HTTP 401/403(密钥被拒)、404(接口不存在,并提示完整端点需开启「完整 URL」)与其他状态码;未知错误码原样附在提示中便于排查。
文件浏览器忽略项淡化显示
- 移除文件树底部的「已折叠文件: N」聚合行:命中
.gitignore、内置默认规则、默认折叠目录名或手动忽略的条目不再被抽离到独立分组,一律按正常文件树层级显示在自身父级的原位,排序不变(issue #227)。 - 忽略态改用整行降低透明度表达,文件名、图标与 Git 状态徽标一起变淡;淡化沿子树继承,展开一个淡化目录后其全部后代同样淡化。被淡化的行在悬浮或选中时提亮,避免透明度吃掉选中高亮反馈。
- 原先被直接隐藏、在文件树中无法找到的忽略文件(如
*.log、.DS_Store)恢复可见,以淡化态显示。 .git、.hg、.svn元数据继续不在文件树显示;按名称匹配且不限条目类型,因此 git worktree 目录下.git为文件时同样不会出现。- 文件搜索结果与代码内容搜索结果沿用同一套淡化判定,不再出现「文件树里淡、搜索结果里亮」的表现割裂。
- 右键菜单「忽略 / 取消忽略」保留,语义从"移入折叠分组"变为"标记为淡化";按项目隔离的持久化与
.gitignore运行时变更重载均不受影响。
文件预览、自动刷新与 Markdown Diff
- 修复文件编辑器 Markdown 渲染预览的 Ctrl + 滚轮缩放:预览根节点现在消费现有字号状态,8–32px 调整会立即覆盖渲染器固定的
text-xs字号;源代码编辑模式保持原有 Monaco 缩放行为。 - 修复文件浏览器已打开文件在隐藏侧栏后不再刷新的生命周期问题:本地 watcher、WSL watcher 失败后的 15 秒轮询、焦点/可见性补刷已迁移到 App 常驻控制器;干净文件自动重读,未保存草稿继续保留。
- SSH 项目已打开文件新增上下文就绪后的 15 秒静默轮询与焦点补刷;自动检查复用现有单飞刷新和远端只读 RPC,不创建重复后台操作,也不会回退到本地文件命令。
- 修复 Git Diff 中 Markdown 表格被拆成多行的问题:将 Refractor 语法 token 限定为 Diff 代码单元内联显示,避免
token table与 Tailwind.table工具类冲突;统一/分栏和换行/不换行模式均保持一条 Markdown 源行对应一条 Diff 行。 - 文件编辑器已打开的普通文件标签新增与终端 Tab 一致的终端主题右键菜单,可关闭当前、其它、左侧或右侧文件;批量关闭会在目标包含未保存内容时一次确认,保存仅处理目标脏文件,固定 Git Diff 标签和终端专属的新建、复制、分屏等操作均不受影响。
Grok Build SSH CLI/Hook 与本地历史删除
- SSH 主机“CLI 集成”新增 Grok Build,支持
$HOME/.grok默认根、项目级覆盖、非空有效覆盖根的GROK_HOME安全注入,以及远端 Hook 的检查、事务预览、安装和卸载;空根保留远端原生环境。Grok 仅作为 CLI/Hook source,远程历史继续只支持 Claude Code 与 Codex CLI。 - SSH Agent 升级到
0.1.10、协议保持1.11;远端规划hooks/cli-manager.json的 11 个 Grok Hook definition,并写入config.toml的compat.claude.hooks/compat.cursor.hooks = false隔离,不调用 Grok CLI doctor。Grok installation record 不生成 history candidate 或历史 metadata,旧 Agent 不支持 Grok 时显式返回真实错误。 - 本地与 WSL 的 Grok 历史删除会备份
updates.jsonl、summary.json与signals.json后移除整个会话目录;路径必须落在 Grok history home 内且不能是 home 本身,会话 ID 在删除和grok --resume前执行字母数字、_、-白名单校验。失败不会声称成功。WSL UNC 用wsl.exe find发现updates.jsonl,不回退宿主递归;命中必须带 workspace 与 session 两层目录,不用宿主Path解析 Linux 路径。历史根优先历史来源设置,其次 Hook 配置目录下的sessions。
Grok Build SSH Hook 配置保护
- 修复 SSH Agent 安装 Grok Hook 时覆盖 Claude/Cursor 兼容 Hook 配置后无法恢复的问题:仅对实际需要隔离的值写入带当前 installation id 的原始状态 marker;卸载只还原同一安装实例仍持有的
true或缺失值。用户预先关闭的值、另一安装实例的标记、用户后续手动修改、其他兼容配置和注释均保持不变。
SSH Agent 新版本检测
- SSH 主机「CLI 集成」打开时自动检查
cli-manager-ssh-agent的签名发布版本(优先安装包内置,不建立 SSH 连接)。若已记录或最近检测到的远端版本更旧,展示可用新版本,并可通过「更新」进入现有预览确认后升级。 - 修正 SSH Agent 新版本检测相关 Rust 测试导入的格式,恢复后端格式检查通过。
cc-connect 本机 Codex 启动器 PATH 解析
- 本机解析
codex/codex.exe时跳过 cc-connect 托管的remote-manager/bin,避免 PATH 里的 wrapper 把自己当成真实启动器;Windows 仍按.exe/.cmd/.bat/.ps1在其余 PATH 项中查找。 - 修复真实 Codex
.cmd/.bat启动器位于含空格、中文或\\?\扩展前缀的 Windows 路径时,远程 app-server 探针被 CMD 截断路径并启动失败的问题;批处理改用安全call边界并保留参数、stdin/stdout 与退出码。非 UTF-8 的中文系统错误也会按本地编码正确显示,不再出现乱码。
cc-connect 微信授权
- 修复 Telegram、飞书或企业微信存在“已启用但 allow_from 尚未填写”的设置草稿时,微信扫码授权在二维码生成前被全 Profile 校验阻止的问题;授权准备现在只隔离禁用无效的其他平台草稿,保留其输入和凭据,已完整配置的平台继续保持启用。微信旧 ID 无效时允许重新扫码,常规保存/连接仍严格拒绝任何启用但无明确用户 ID 的平台。
供应商与终端路径修复
- 修复供应商详情/编辑弹框内的删除确认框被父级弹框遮挡的问题;确认框与遮罩现在使用供应商域既有的较高层级,取消、确认和 Esc 语义保持不变。
- 修复终端输出中的
/D:/...、D:/...文件路径传给 Windows Explorer 时被解释为默认目录的问题;打开边界现在规范化为原生 Windows 路径,普通文件继续在对应父目录中选中。
供应商导入
-
从 cc-switch 导入供应商时,“导入密钥”选项现在默认勾选;用户仍可在提交前取消,密钥继续仅写入后端
providers.db,不会在列表、预览或日志中返回明文。 -
SSH 主机「CLI 集成」打开时自动检查
cli-manager-ssh-agent的签名发布版本(优先安装包内置,不建立 SSH 连接)。若已记录或最近检测到的远端版本更旧,展示可用新版本,并可通过「更新」进入现有预览确认后升级。 -
解析本机 Codex 启动器时跳过 cc-connect 托管 wrapper 目录,避免 PATH 里的 wrapper 把自己当成真实
codex。 -
修正 SSH Agent 新版本检测相关 Rust 测试导入的格式,恢复后端格式检查通过。
-
将仅供 Unix 回归测试使用的 Codex 启动器解析辅助函数限定为 Unix 编译,Windows
npm run tauri dev不再输出未使用函数告警。
项目配置
- 编辑终端的环境变量字段新增 JSON 格式悬浮示例;移除与悬浮卡片重复的浏览器原生提示,示例区支持一键复制;输入区改为默认 3 行、可纵向调整的等宽 JSON 文本域,并沿用项目维护弹框的主题样式与中英文文案。
首次升级启动
- 修复本地用量记录较多时,数据库迁移超过 15 秒就被误判为启动失败的问题;不可取消的迁移现在保持加载状态,并明确提示首次升级可能需要数分钟,避免重复重试导致迁移反复中断。
- 修复百万级历史用量数据库升级时 migration 32 在启动事务中执行全表项目路径回填、可能阻塞数十分钟的问题;兼容层保持原 migration checksum,并把历史回填改为数据库加载后的单飞小批次后台任务。主界面可先启动,回填可中断、可重启续跑,重名项目与 SSH 项目不会被错误映射。
Shell 选择器图标
- CMD、Git Bash、Windows PowerShell、PowerShell 7 与 WSL 改为优先使用随应用打包的匹配图标,不再依赖运行时从可执行文件提取而出现通用图标或缺失;自定义 Shell 继续保留原生图标提取与通用兜底。
供应商目录
- 修复关闭供应商详情或编辑流程后目录仍残留上一项选中样式的问题;视觉选中态现在仅在对应详情打开期间显示,内部选择缓存和重新进入详情的上下文恢复保持不变。
- 修复关闭供应商详情后 Mantine 将焦点返回目录行、导致该行残留矩形焦点环的问题;焦点现在在退出动画完成后转移到现有的目录 surface 导航控件,不再触发供应商行或整页的额外轮廓,编辑表单仍会先返回详情弹窗。
- 设置 → 供应商设置中的目录、详情、密钥、导入、CLI Home、路由与编辑表单操作统一使用项目按钮样式;主、次、轻量、危险、成功和图标操作保持一致,原有加载、禁用、链接、键盘与无障碍行为不变。
- 调整供应商设置按钮为常规字重;详情页“删除”改为与“编辑”同层级的轻量危险按钮,避免裸文本风格与其他操作不一致。
历史用量与请求日志加载性能
- 请求日志打开、筛选、翻页和汇总改为直接读取已持久化的 SQLite 数据,不再在每次读取前等待递归扫描历史文件;应用启动、60 秒定时任务和手动刷新统一执行单飞增量同步,并仅在数据变化后失效相关查询。
- 请求日志同步会物化规范化项目路径,项目筛选直接使用 SQLite 中的 Windows、WSL、UNC 与 Worktree 路径候选,不再为筛选刷新历史索引;路由归因改为写入时按会话定向处理,旧记录由后台单次修复,不阻塞日志读取。
- 本地历史统计优先复用内存或持久化索引快照,默认包含 OpenCode 的统计也可按数据库与 WAL 指纹命中聚合缓存;普通页面读取不再触发递归历史目录扫描,显式同步与远程手动刷新语义保持不变。
- 新增 v32 兼容迁移,为可恢复的旧请求记录回填规范化项目路径并传播到同会话路由记录;剩余旧记录使用有界项目 key 兼容匹配,升级后无需等待源目录重扫即可继续按项目查看。
- 修复仅 Copilot、Pi、Cursor、Kiro、Cline 等非请求日志来源变化时历史统计缓存未失效的问题;请求日志缓存仍只在对应文件或行变化时刷新。
- 请求日志与统计看板的手动刷新会排队执行点击后的强制同步,不再复用点击前已开始的扫描;统计同步失败时保留旧数据和原刷新时间,并显示中英文错误。
路由故障转移与请求 usage
- 修复故障转移候选处于 circuit-open 或 Key cooldown 时被误计为真实 provider 失败、错误消耗重试预算并快速打开全部 circuit 的问题;候选跳过现在不累计熔断失败,队列后方仍可尝试的供应商会继续接收请求,所有候选不可用时仍保留 fail-fast
503 routing_provider_circuit_open。 - 修复同一供应商多密钥或整流重试的真实上游请求未逐次消耗 attempt 预算的问题;现在每次 HTTP send 都使用唯一 attempt index,失败发送逐条落库,且不会超过配置的最大请求次数。
- 路由失败/候选跳过且没有 Token 的记录改为
not_applicable,不再污染成功响应缺少 usage 的数据质量提示;成功响应确实缺少 usage 时仍显示missing,请求日志同步提供中英文状态文案。 - 自动故障转移关闭时不再显示上一次运行留下的熔断/降级状态;每次开启或关闭自动故障转移都会重置当前 CLI 类型的 daemon 熔断状态,避免旧状态跨开关周期残留。
路由历史用量异常详情
- 历史用量分析的请求日志现在会透传路由失败的稳定错误码与安全异常摘要;失败/跳过记录不再只显示笼统的“usage 不适用”,而是优先展示脱敏后的上游报错,或回退到本地化的路由错误说明与 HTTP 状态。
- 新增 v33 可空诊断字段迁移及幂等 schema bootstrap:仅从允许的上游 JSON 错误字段提取文本,写入前遮蔽密钥、Bearer/JWT 等敏感值并限制长度;不会保存完整请求、响应或 headers,旧记录继续兼容。
- 请求日志错误状态新增“查看异常详情”弹窗,显示供应商、HTTP 状态、稳定错误码和可用的安全详情;支持中英文、长文本滚动与 Esc 关闭,点击入口不会触发行双击打开会话。
供应商快捷切换
- 修复终端右侧供应商面板拖拽排序时卡片横向偏移扩大滚动区域、触发底部横向滚动条的问题;拖拽现在仅沿纵轴移动,原有排序与纵向滚动保持不变。
Agent MCP 与 Skills 会话诊断
- 修复 Codex
mcp list --json返回auth_status时未被能力诊断识别的问题;深度检查现在可正确呈现已认证与未认证 MCP 的正常/异常状态。详情行同时显示 MCP 是否已启用与独立的运行健康状态;无会话证据且 Codex 未提供健康信息的 stdio MCP 仍诚实显示为未知。
终端 OSC 52 剪贴板
- 内置终端现在拦截远程/全屏 TUI 发出的 OSC 52(含 tmux DCS passthrough),解码后写入 Tauri 本机剪贴板,不再依赖远端
xclip/DISPLAY。序列会从可见输出中剥离,避免刷出 base64。 - 仅实时 PTY 输出会写剪贴板;daemon replay、reset 和会话回放不会用历史 OSC 52 覆盖当前剪贴板。查询仅在用户显式开启默认关闭的读取权限后回应当前剪贴板内容,清空和非法 payload 不改剪贴板。(Refs #211)
- 「设置 -> 快捷键」提供独立的 OSC 52 写入与读取本机剪贴板开关;关闭后仍剥离序列,且对应操作不会发生。
Ctrl+Shift+C在终端中复制选区(可在「设置 -> 快捷键」改绑),并仅在终端区域阻止 Chromium 检查元素;调试仍用 F12。
macOS Fcitx5 终端输入
- 修复 macOS 上 Fcitx5 确认中文候选后,xterm 的延迟 Process-key 回退可能将同一段 CJK 文本第二次通过 onData 写入 PTY 的问题。共享输入边界现保留既有 80 ms 跨来源去重,并只在 helper textarea 的近期 Process-key 检查点内去除同源精确重发;普通 Shell、Codex 与其他内置终端 CLI 共用该保护,新的 composition 开始会清除检查点,避免吞掉用户刻意连续输入的相同中文。
Git 变更面板
- 修复 Windows 上 libgit2 误判仓库所有者导致 Git 变更列表显示“无文件变更”的问题;仅在所有者校验失败时受锁保护地兼容重试,并在确实失败时显示真实错误。
Hook 审批通知
- 修复 Codex 子 Agent 的非交互工具 Hook 被直接当成父会话待审批、导致桌面宠物和通知渠道误报的问题;共享 Hook 入口现在暂存缺少显式审批证据的子 Agent
PermissionRequest,通过 Hook 时记录的 rollout 字节基线、同一子 Agent 工具进展或会话结束确认任务已继续,无法确认时在 15 秒后保守提醒。主 Agent、携带明确说明的真实子 Agent 审批、后台 daemon、SSH 与远程托管通知保持原有即时/保守行为。 - 收紧共享审批仲裁边界:SSH spool 的 Codex 权限请求立即进入既有全局通知链路;本地/WSL 暂缓记录必须同 source、环境、tab、session 与子 Agent 才能被消解。转录路径复用允许根校验,越界路径不再被 daemon 轮询,WSL UNC 仅保留事件相关性和超时兜底。
Trellis Codex 工作流
- Codex 的 Trellis 执行流默认改由主会话直接处理;只有用户明确要求子任务,或主会话提前询问并获得明确同意后,才会派发研究、实现或检查子任务。