# Changelog ## [Unreleased] - 2026-03-11 ### 功能 - Linux deb/rpm/pacman 安装包启用应用内自动更新;未标记的开发包和 Snap 继续提供手动下载入口 - 终端新增"粘贴时自动上传剪贴板图片"选项:剪贴板含图片时,在远程会话中粘贴(快捷键/右键/中键)自动通过 SFTP 上传图片到远端 `.netcatty-paste-images/` 目录并输入远端路径,否则保持原有文本粘贴行为(设置 > 终端 > 行为,默认关闭) - 修复自动更新 IPC 事件仅发送到单个窗口的问题,改为广播所有窗口(主窗口 + 设置窗口均可收到) - 统一手动检查更新与自动更新的状态机,消除三套并行状态 - 手动"检查更新"通过 GitHub API 检测版本,发现更新后异步触发 electron-updater 下载 - 设置窗口中点击"检查更新"后,下载进度可实时反映在 UI 中 - 应用启动后 5 秒自动触发 `electron-updater` 检查更新,无需用户手动点击 - 发现新版本后自动开始下载(`autoDownload=true`) - 下载完成后弹出持久 toast 通知,用户点击"立即重启"即可安装 - 下载失败时弹出错误 toast,提供"打开 Releases"降级入口 - Settings > System 进度条实时展示自动下载进度,由 `useUpdateCheck` 统一驱动 - Linux Snap、未标记的开发包等不支持 electron-updater 的平台自动跳过,保持原有 GitHub API 通知行为 ### 设计原理 - `broadcastToAllWindows` 替换 `getSenderWindow` 单点发送,保证所有窗口都能收到 IPC 事件 - `manualCheckStatus` 字段追踪手动检查 UI 状态(idle/checking/available/up-to-date/error),与 `autoDownloadStatus` 在 UI 层按优先级渲染 - `SettingsSystemTab` 不再持有本地 update state,单向接收 `useUpdateCheck` 统一数据 - 将原有两套独立系统(GitHub API 通知 + electron-updater 手动下载)合并为统一状态机:`useUpdateCheck` 作为唯一事实来源,同时驱动 `App.tsx` toast 和 `SettingsSystemTab` 进度条 - 全局持久化 IPC 监听器在 `autoUpdateBridge.init()` 时一次性注册,避免每次手动下载请求重复注册/清理监听器 - `autoInstallOnAppQuit=false`,不做静默安装,由用户主动触发重启 ### 接口变更(SettingsSystemTabProps) - 移除:`autoDownloadStatus`、`downloadPercent` - 新增:`updateState`(完整 UpdateState)、`checkNow`、`installUpdate`、`openReleasePage` ### 注意事项 - `checkNow` 语义:使用 GitHub API(`performCheck`)检测是否有新版本,若发现更新且 electron-updater 尚未开始下载,则异步触发 `bridge.checkForUpdate()` 启动自动下载流程 - 此功能仅对打包后的应用(Windows NSIS、macOS dmg/zip、Linux AppImage/deb/rpm/pacman)生效,dev 模式需配合 `forceDevUpdateConfig=true` + `dev-app-update.yml` 测试(见 `.gitignore`) - `hasUpdate` 旧 toast 在 `autoDownloadStatus !== 'idle'` 时自动抑制,避免与新 toast 重复