Repository navigation
Releases
Releases · DearTang/myshell
v2.19.0
2.19.0 - 2026-11-02
Added
- 界面字号全站可调:七级字号阶梯 + 「界面字号」滑杆(12–18px)+ Ctrl+=/Ctrl+-/Ctrl+0(焦点在终端时改终端字号)
- 界面实心度 / 弹窗实心度两个滑杆,玻璃底色由配色预设实时算出,33 套预设自动跟随
- 背景图升级为整窗壁纸:侧栏、顶栏、AI 栏、设置页按实心度透出,带可读性遮罩
- 界面动效总开关,一次性停掉全部过渡与动画
Changed
- 壳层第一行改为「侧栏顶排 + 顶栏」连续 44px 一整排,对齐 ompDesktop 的 chrome 口径
- 设置页改为 44px 顶排 + 200px 分组导航 + 圆角玻璃内容卡(正文限宽 940px 居中)
- 连接树行高放宽到约 29px、副标题 10px→11px,侧栏默认宽度 264→260
- 欢迎页改为品牌玻璃卡(矢量标识 + 快捷键提示),替代两行裸文字
Fixed
- 修复背景图 data URL 含
#/)/空白时写入--app-bg-image静默失败(壁纸不显示) - 修复壁纸层被 body 不透明底色整片盖住(底色移到 html、
#app自建层叠上下文) - 修复「界面实心度 / 弹窗实心度」拉满仍透:Element Plus 对话框读的是
--el-dialog-bg-color而非 overlay 变量,工作区与底栏也未接插值,现已全部接入 - 修复实心度滑杆显示值与真实值脱节(默认 0.25 显示 25% 却被滑杆夹成 40%,改用 40+×60 映射)
- 修复 AI 右栏引用从未定义的
--bg-sidebar令牌(实际一直透明),改为显式玻璃底
v2.18.4
v2.18.4(2026-10-21)
MCP 文件操作确认框修复:确认事件被前端守卫丢弃。
🐛修复
- MCP 文件类操作的确认框永不弹出:
sftp_upload、sftp_remove、sftp_rename、upload_project、download_project、zmodem_upload的确认事件(mcp_confirm)不携带connection_id,而前端监听器首行就是if (!connection_id) return,事件在到达mcp_confirm分支前即被丢弃,对话框从未渲染。后端确认 channel 空等到 180 秒超时后按拒绝回包,用户侧表现是「任务卡在等待确认,但没有任何弹窗」,最终报「用户已拒绝高危操作」。修复为把mcp_confirm分支前移到connection_id守卫之前,并在注释中固定该顺序,避免后续重构改回。命令确认(exec_in_tab)payload 带connection_id,不受影响
🔒安全
- 文档脱敏:
progress.md中被 GitGuardian 按scheme://user:pass@host形态标记的 PAT 前缀占位符改为<PAT 已脱敏>(为手工截断的示意串,非可用凭据,无需轮换 token)
v2.18.3
v2.18.3(2026-10-20)
MCP 稳定性修复:端口文件的两处竞态。
🐛修复
- MCP 端口文件非原子发布:GUI 侧改用「写同目录临时文件 → rename 原子覆盖」(
rename被占用失败时回退直接写,保证端口文件一定发布得出去)。此前fs::write先截断再写,MCP 恰在窗口期读到半截内容会误判「端口文件损坏」并删掉健康 GUI 的发现文件,随后每次调用都去拉起注定被单实例拦下的第二实例 - MCP 删除端口文件前不再核验:GUI 看门狗(或另一个 MCP 实例)刚重写的新端口文件会被误删,导致活着的 GUI 永久不可发现。改为「比对后删」——只有文件仍写着判定为陈旧的那个端口才删
v2.18.2
v2.18.2(2026-10-20)
安装器修复:升级后重启不再误删 myshell-mcp.exe。
🐛修复
- 升级后重启导致
myshell-mcp.exe被误删、AI 客户端报「服务器在响应前退出」:升级流程静默调用旧版卸载器时,旧卸载器对被 AI 客户端常驻占用的myshell-mcp.exe执行Delete /REBOOTOK,删除被登记成「下次重启时删除该路径」;新安装随后把新二进制写回同一路径,下次重启时新文件被这份待删记录连带删掉(现场特征:唯独 MCP 缺失、GUI/CLI 完好、安装目录时间戳停在重启时刻)。三处配套修复:调旧卸载器前先把 mcp/cli 改名让位,旧卸载器删不到文件即不登记待删记录;卸载段改为对.uninstall-pending唯一名延迟删除,待删路径永不复用;安装完成后自检 myshell.exe / myshell-mcp.exe / myshell-cli.exe 三件套齐全,缺一即报错中止,杜绝静默半套安装
v2.18.1
MyShell v2.18.1
MCP 稳定性修复:修复所有工具 30 秒超时的根因,锁定保险库时改为调用内等待解锁。
🐛 修复
- 修复 MCP 全部工具 30 秒超时:GUI 运行中其 IPC 发现文件(gui-ipc-port)被陈旧清理竞态误删后,GUI 永久失联——此后每次工具调用都尝试启动第二个实例、被单实例守卫拦截、等待 30 秒后超时。三层修复:GUI 端口文件看门狗(每 5 秒自愈重发布);MCP 启动前探测 myshell.exe 进程存活,不再盲目启动第二实例(返回可操作的 NoPortFile 错误);单实例弹窗 TaskDialogIndirect 失败(部分机器恒 E_INVALIDARG)时回退 MessageBoxW,不再静默退出
🛠️ 优化
- 保险库锁定时 MCP 工具改为调用内等待解锁(最长 20 秒):窗口自动置顶后若在 20 秒内输入主密码,本次调用直接继续执行——不再需要人工告知"已解锁"后重试;等待上限刻意低于客户端约 30 秒请求预算,超时仍返回结构化 vault_locked 错误。等待期间 GUI 崩溃时正确报告 ipc_unresponsive 而非误导性的"未解锁"
- GUI 存活但端口文件缺失时,等待看门狗自愈(约 7 秒)后自动复用现有实例;GUI 自动启动轮询从 30 秒缩短到 20 秒,避免撞上客户端请求预算后变成不透明的传输超时
v2.18.0
MyShell v2.18.0 更新说明
组件库大版本升级 + 连接类型图标全新设计。
✨ 新增
- 连接类型图标全新设计:服务器 / SFTP / FTP / 本地终端从 iconfont 字体图标切换为 myui v1.1.1 新增的自绘线性图标(24 网格 /
currentColor/ 圆头圆角,与库内其余图标同一规范)。Server为两节机架单元(各带实心 LED 与通风横线),Sftp/Ftp直接以协议名作图标(字标,v1.1.1 修复了初版屏内小字在 16px 密集列表下发糊的问题),LocalTerminal为笔记本加>提示符。四类连接仍以蓝 / 紫 / 橙 / 灰四色区分。侧栏、标签页、回收站、连接编辑框全部跟随同一来源
🛠️ 优化
- myui 组件库 v0.30.1 → v1.1.1:跨越 v1.0.0 大版本(约 70 处内部缺陷修复,API 向后兼容,可直升);含弹层、焦点、可访问性等修复
- 图标来源收口到
ConnIcon单一组件:侧栏与回收站此前各自复制了一份「类型 → 图标类名 / 颜色」映射,图标与配色可能随改动漂移;现统一由ConnIcon提供,删除约 30 行重复映射 - 应用默认窗口宽度 1200 → 1300,侧栏与工作区初始更宽松(高度不变,最小尺寸不变)
- 移除 iconfont 字体资产(ttf + css):其仅服务旧的四个连接图标,切换后全仓零引用,安装包与前端产物不再携带
v2.17.2
MyShell v2.17.2 更新说明
小版本:侧栏密度再降一档 + 发布脚本资产定位修复。
🐛 修复
- 发布脚本差点把别的项目的二进制发出去:
publish-gitee-release.mjs/publish-github-release.mjs定位安装包的逻辑是「bundle/nsis/目录下 mtime 最新的*-setup.exe」。本机构建目录与另一个项目共用,该目录下有 88 个 setup.exe,绝大部分属于别的项目 —— v2.17.1 首次发布时 Gitee 挂上去的正是OMP Desktop_1.42.0_x64-setup.exe。现改为按版本号匹配文件名(MyShell_<version>[-_]x64-setup.exe);匹配不到才回退 mtime,并在 stderr 打印[warn]提示确认产物 —— 静默回退才是这类问题的真正帮凶
🛠️ 优化
- 侧栏连接行高 29px → 23px:改为完全由文字撑出高度,上下各留 2px。树形视图下连接行是单行(IP 副标题仅在搜索结果中出现),文字块 13px × 1.25 ≈ 16px,8 条连接总高从 232px 降到 184px(约 21%)。关键点:必须同时放开「⋯」按钮的 36px 固定高度 —— 它在 padding 收到 2px 后成为行高的唯一瓶颈,只改 padding 的话行高会卡在 29px 纹丝不动。「⋯」可点区相应从 36×24 缩为 23×24
v2.17.1
MyShell v2.17.1 更新说明
小版本:侧栏列表密度调整 + 发布流程加固。
🛠️ 优化
- 侧栏连接行高从 51px 收到 40px(文件夹行 31px → 27px):此前行高主要来自默认
line-height: 1.5而非内边距 —— 13px 主名撑到 19.5px、10px 副标题撑到 15px,加内边距与间距后带 IP 副标题的连接行实测 51px,侧栏一屏放不下几条连接。现显式收行高(主名 1.25、副标题 1.3)并同步收紧纵向内边距与行间距,一屏可见连接数明显增加。40px 仍高于 32px 的可点下限。左侧缩进与右侧贴边的既有结论保持不变
🔒 安全
- 移除 git remote URL 中内嵌的明文 PAT:
.git/config里 GitHub remote 此前是https://<PAT>@github.com/...,任何能读该目录的进程都能取到该 token。Git Credential Manager 已全局启用(credential.helper=manager),URL 里再带一份只是多一处泄漏面。现清除内嵌凭据并验证认证仍正常 .zcode/整体纳入.gitignore:此前只忽略*.exe/*.obj/*.pdb三类产物,导致 44 个一次性探针、截图与日志被 git 跟踪,发布时只能用逐文件暂存(通配式暂存会把它们连同 token 文件一起带进发布提交)。现整个目录忽略
v2.17.0
MyShell v2.17.0 更新说明
本版本是一次针对 AI 接入安全边界的审计整改。审计推翻了我方上一轮的核心推测(前后端确认规则集可能存在偏差 → 并不存在),转而修复了三处真实问题:确认门依赖中文错误文案判定、不可逆文件操作的确认弹窗藏在窗口后面、以及保险库解锁缺少可轮询的等待契约。
🔒 安全
- MCP 确认门不再依赖错误文案的措辞:
ssh_exec判定「可见确认框是否出现过」时,用e.message.contains("未找到 myshell.exe")一类字符串匹配来决定能否回落无头执行 —— 也就是确认门本身建立在错误措辞之上,改一个错字或加一个条件分支,都会让判定翻转,高危命令静默执行。现改为enum GuiLaunchError+gui_reachable(),可达性作为类型信息随GuiExecError传递,文案只用于显示;并新增回归测试gui_reachability_comes_from_type_not_wording锁死该性质 - 确认超时按「拒绝」处理:
mcp_confirm等待 180 秒无决策即判为拒绝。不可逆操作里「用户没说好」必须读作「不」——若读作「是」,则「一直等下去」反而变成无条件放行
✨ 新增
- 不可逆文件操作的确认改在 MyShell 界面内渲染:
sftp_upload/sftp_remove/sftp_rename/upload_project/download_project/zmodem_upload六类操作此前由 MCP 进程弹 Windows 原生对话框 —— 用户在 MyShell 窗口里工作时那个框会藏在窗口后面并抢走焦点,而这六类恰恰不可逆(覆盖、删除),漏看一次框就等于漏掉一次确认,AI 则会一直等待。现复用命令确认的既有弹窗组件;并发第二个弹窗会被拒绝(避免顶掉第一个导致其回调丢失);GUI 完全不可用时才回退原生对话框 vault_status只读工具:返回gui_running/initialized/unlocked三个布尔与vault_state,不泄漏任何连接元数据(保险库锁定时 AI 仍看不到任何连接名、主机或凭据)
🛠️ 优化
- 登录门禁给出可轮询的等待契约:此前保险库未解锁时,AI 拿到的只是一段中文提示,只能盲猜重试时机。现失败返回结构化的
error_kind: "vault_locked"与vault_state(locked/not_initialized/gui_unavailable/ipc_unresponsive)及明确指引。仍不做隐式等待——多数 MCP 客户端 30 秒左右就会放弃单个请求,隐式等待必然双重失败;改为由 AI 调vault_status每 5 秒轮询一次(约 2 分钟上限)后重试同一个工具。门禁状态由enum VaultGateError::state()导出,不再从中文文本匹配 - 侧栏连接树左侧空白收敛:此前每行的左缩进由两处叠加 —— 行
margin-left: 6px加上自身padding-left,深度节点再叠加depth * 14px。实测文件行图标前空 22px、连接行前空 30px(侧栏最窄 200px 时白白浪费约 1/10 宽度)。现改为单处承担:文件行 8px、连接行 12px,层级步进同时由 14px 收到 12px;搜索框左缘一并对齐。右侧保持不变(「⋯」贴右缘是上一版用户已确认的结论) - 新增 4 组安全回归测试:23 种命令绕过形态(
do rm/timeout 30 rm/nohup rm/xargs rm/'rm'//bin/rm/( rm )/{ rm; }/if…fi/ 管道后半段 / 反引号 /$()/>&/chmod -R/mkfs/dd/shutdown/sudo…),任一回退为「不弹确认」即失败;另有只读命令不得误弹的反向闸门(确认噪音会训练用户闭眼点确认)、错误类型可达性映射、门禁状态可读性
v2.16.2
v2.16.2(2026-10-09)
🔒 安全
- ZMODEM 文件读写命令缺少门禁(审计发现):
rz_open_read/rz_read_chunk可读任意路径(含保险库文件、IPC 令牌、~/.ssh),sz_open_write的系统目录黑名单不含应用配置目录,可覆写 vault.bundle / connections.db。现四个命令统一要求保险库解锁(require_dek),并新增共用is_secret_path拒绝清单(/myshell 与 ~/.ssh,含"文件尚未创建"的向上探测),附带 3 个回归测试
🛠️ 优化
- 暗色模式侧栏/顶栏对比度重设计:可点元素(头部操作图标、文件夹图标、连接行 ⋯ 按钮等)静止态即可辨认,悬停统一改为主题强调色反馈(胶囊底 + 左侧竖条),对 33 套配色预设与深浅主题逐一校验
- 解锁页暗色可读性:副标题/页脚/字段标签逐级提亮(页脚 2.09:1 → 3.77:1),卡片加顶部高光浮层
- 侧栏展开箭头换用 myui 的 ArrowRight / ArrowDown 独立图标(14px),替换原先 8px 字符
›(几乎不可见);折叠向右、展开向下 - 升级 myui 0.18.0 → 0.27.2:图标库新增 ArrowRight/ArrowDown 等;升级后 21 个既有导出与全部在用组件均兼容,无破坏性变更
🐛 修复
- 启动后窗口延迟显示 4 秒:Vue 迁移时丢失的前端 dom-ready 首帧信号已补回,不再每次启动白等 4 秒兜底
- 主按钮在暗色下"糊成一片白":禁用态白字压浅底仅 1.58:1、启用态白字压强调色仅 2.26:1,改为中性面 + 反色文字(7.5:1)
- 33 套配色预设对 myui / Element Plus 组件从未生效:CSS 令牌桥的选择器特异性被 myui 的
html.dark压过,桥接的 11 个令牌全部失效——按钮/开关/滑块/进度条等 27 个组件恒为库内置青色。补齐选择器后全部跟随所选预设 - 侧栏"菜单"与"会话"层级被压平:文件夹名与连接名对比度仅差 1.16x 导致分不清,改为亮度差 1.6x + 字重 500/600 双通道分级
- 登录/加载界面无法最小化或关闭窗口:无边框窗口下这三个按钮原本只在顶栏,而门禁页全屏覆盖、顶栏尚未渲染,现补齐(抽取 WindowControls 与顶栏共用)