Releases: Aswellle/RemoteBridge
Release list
1.3.8
RemoteBridge v1.3.8 发行版
发布日期:2026-08-19
桌面端:v1.3.8 | 服务端:v1.0.0 | Web:v1.0.0
桌面端 UI/UX 全面升级(apps/desktop/src/renderer/)
- 无障碍(a11y)增强:为文件列表、对话框、面包屑添加 ARIA live region、
role="dialog"、aria-modal、aria-labelledby语义属性;对话框支持 Escape 关闭、点击外部关闭、焦点锁定(focus lock),满足 WCAG 2.1 AA 标准(App.tsx、Messages.tsx、Settings.tsx、components/FileList.tsx、components/Breadcrumb.tsx) - 对比度修复:
mutable-foreground色值在暗色/亮色模式下均调整至 ≥4.5:1 对比度,符合 WCAG AA 要求(globals.css) - 动效与主题令牌:新增 CSS 变量滚动条、
prefers-reduced-motion全局尊重、selection颜色、--transition-standard等动效令牌;状态指示灯改用语义化 CSS 变量(--status-online/--status-offline/--status-connecting),与 Tailwind 主题令牌对齐(globals.css、theme.ts)
桌面端系统字体栈替换(apps/desktop/src/、packages/shared/src/ui-fonts.ts)
- 移除 Google Fonts 依赖:将
next/font/google的 Inter 字体替换为跨平台系统字体栈(SF Pro → Segoe UI → Roboto → Noto Sans CJK → PingFang SC / Microsoft YaHei → emoji),零网络依赖,原生渲染,首屏加载更快且无 FOIT/FOUT(web/src/app/layout.tsx、web/tailwind.config.ts、desktop/tailwind.config.ts、globals.css)
桌面端内置本地中继服务器(apps/desktop/src/main/local-relay.ts)
- 修复设置页修改配置后本地中继未重启:修改本地中继端口或自动启动选项后,自动停止旧进程并以新配置重启,避免配置与实际运行状态不一致(
local-relay.ts、Settings.tsx)
生产环境 Docker / 服务端加固(多文件)
- Relay Server 开启
trustProxy: true:修复部署在 Caddy 反向代理之后时,@fastify/rate-limit按代理 IP 而非真实客户端 IP 计数的问题,限流重新按真实客户端 IP 生效(apps/server/src/index.ts) - 新增 1 MB 请求体大小上限:
bodyLimit: 1_048_576,防止恶意大请求耗尽服务端内存(apps/server/src/index.ts) - 两个 Dockerfile 新增非 root 运行用户:server 镜像创建 uid 1001
relayuser,web 镜像创建 uid 1001nextjs,容器被攻破时攻击者权限降至最小(apps/server/Dockerfile、apps/web/Dockerfile) - Web 容器新增 HEALTHCHECK:
node -e内联检查/路由返回码 <500,30s 间隔、5s 超时、20s 启动宽限期、3 次重试(apps/web/Dockerfile) - depends_on 改用
condition: service_healthy:Caddy 仅在 server 和 web 的 HEALTHCHECK 通过后接受流量,避免启动期间 502(docker-compose.yml) - 所有容器添加资源上限与日志轮转:server ≤1 CPU / 512 MB、web ≤0.5 CPU / 256 MB;日志
max-size: 10m/max-file: 3~5,防止磁盘耗尽(docker-compose.yml) - 所有容器添加
no-new-privileges安全选项:阻止容器内进程通过 SUID 二进制提权(docker-compose.yml) - Caddyfile 补全安全响应头:HSTS(
max-age=31536000; includeSubDomains; preload)、X-Content-Type-Options: nosniff、X-Frame-Options: DENY、Referrer-Policy: strict-origin-when-cross-origin、Permissions-Policy关闭摄像头/麦克风/地理位置等、-Server隐藏 Caddy 版本信息(Caddyfile) - Next.js 响应头同步补全:
Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy双层防御(apps/web/next.config.mjs)
安全修复与代码质量(多文件)
- 路径校验 case-sensitive 修复:Windows 路径大小写不敏感匹配逻辑错误,现在统一按平台语义处理(
packages/shared/src/security.ts) - 符号链接逃逸防护:共享目录内符号链接指向允许目录外时,
realpathSync解析后校验,防止目录穿越(packages/shared/src/security.ts) - RATE_LIMIT_CONFIG NaN 守卫:环境变量缺失或非数字时回退默认值,避免
NaN导致限流失效(packages/shared/src/security.ts) - 文件隧道帧长度校验:
file-tunnel-codec.ts解码时验证帧长度字段,防止恶意/损坏帧导致缓冲区越界 - Host JWT 从 URL 移至 Authorization 头:桌面端连接 WebSocket 时不再在 URL 中携带 token,改为
Authorization: Bearer头,避免 token 泄露到日志/历史记录(apps/desktop/src/main/ws-client/client.ts) - 移除 dlopen ABI 回退:
electron-binding.ts不再尝试按 Node.js ABI 版本回退加载,直接使用 Electron 预编译二进制,避免加载错误版本导致崩溃 - 上传分块边界校验:
CMD_UPLOAD_FILE_CHUNK处理时验证分块偏移与大小,防止越界写入 - 僵尸 WebSocket 清理:桌面端断线时彻底清理 WebSocket 实例与事件监听器,防止内存泄漏
- streamDownload AbortController:下载流支持 AbortController 主动中止,避免组件卸载后仍继续下载
- 隧道编解码器校验:
file-tunnel-codec.ts编码/解码时验证版本与 flags 字段,拒绝不兼容帧
CI / DevOps
- 修复
HOST_TOKEN_ROTATION_THRESHOLD_DAYS缺失:packages/shared/src/security.ts的JWT_CONFIG新增HOST_TOKEN_ROTATION_THRESHOLD_DAYS: 30,桌面端 token-rotator 现在正确触发 30 天轮换阈值 - shared 包
fs懒加载:packages/shared/src/中fs改为getNodeFs()懒加载 + webpackfs: false回退,修复 shared 包在浏览器端打包时fs模块报错(next.config.mjs) - 生产部署指南全面重写:
生产环境部署与使用指南.md版本号、rate limit 变量、端口覆盖逻辑、桌面端本地中继、自动更新、安装包获取方式、数据保留策略等全面核实更新
下载
| 平台 | 文件 |
|---|---|
| Windows (x64) | RemoteBridge-Setup-1.3.8.exe |
| macOS (Apple Silicon) | RemoteBridge-1.3.8-arm64.dmg |
| Linux (x64) | RemoteBridge-1.3.8.AppImage |
1.3.0
v1.3.0 fix(release): add @node-rs/bcrypt to bundle-relay external + copy to …
1.2.0
chore(release): bump to v1.2.0, update README and release CI - Bump desktop version to 1.2.0 (adds local relay GUI feature) - README: add local relay GUI, file upload, httpOnly cookie entries - release.yml: build relay server + bundle before electron-builder
1.1.9
feat(desktop): add custom application icon, bump to 1.1.9 Replace the default Electron icon with a custom RemoteBridge icon (icon.ico for Windows NSIS installer, icon.png for Linux AppImage). The previous builds used Electron's generic icon since resources/ was empty.
1.1.8
v1.1.8 chore(release): bump version to 1.1.8, update CHANGELOG (02a-S11)
1.1.7
改进
-
移除顶部菜单栏(
apps/desktop/src/main/index.ts)Electron 框架默认附带的 File / Edit / View / Window / Help 菜单栏已全部移除,界面更加简洁。文本编辑快捷键(Ctrl+X/C/V/Z/A)由操作系统和 Chromium 层原生支持,无需菜单项即可使用;窗口最小化/关闭操作由标题栏按钮保留。
-
开发模式 DevTools 快捷键保留(
apps/desktop/src/main/window.ts)菜单栏移除后,开发调试入口不丢失——开发模式下 F12 和 Ctrl+Shift+I 仍可切换 DevTools,通过
before-input-event钩子实现,不依赖菜单。 -
设置页新增「关于」区块(
apps/desktop/src/renderer/pages/Settings.tsx)原 Help 菜单的版本信息功能迁移至设置页面底部「关于」区块,展示应用版本号、Electron 版本、Node.js 版本、Chromium 版本、操作系统版本及主机名,信息通过 IPC 从主进程实时读取。
-
生产环境 Docker / 服务端加固(多文件)
- Relay Server 开启
trustProxy: true,修复部署在 Caddy 之后时限流按真实客户端 IP 计数失效的问题;新增 1 MB 请求体大小上限。 - 两个 Dockerfile(server / web)均新增非 root 运行用户(uid 1001),减小容器权限风险。
- Web 容器新增
HEALTHCHECK;docker-compose.yml的depends_on改用condition: service_healthy,确保 Caddy 在服务真正就绪后再接受流量。 - 所有容器添加资源上限、日志轮转(max-size/max-file)和
no-new-privileges安全选项。 - Caddyfile 补全 HSTS、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy 安全头并隐藏服务器版本信息;Next.js 响应头同步补全,形成双层防御。
- Relay Server 开启
下载
| 平台 | 文件 |
|---|---|
| Windows (x64) | RemoteBridge-Setup-1.1.7.exe |
| macOS (Apple Silicon) | RemoteBridge-1.1.7-arm64.dmg |
| Linux (x64) | RemoteBridge-1.1.7.AppImage |
1.1.6
修复 / 改进
-
安全审计日志:事件类型徽章各具独立颜色(
packages/shared/src/security-log-ui.ts)之前
ACCESS_DOWNLOAD、ACCESS_PREVIEW、ACCESS三种事件共用同一种蓝色,在大量日志中难以快速区分。现将全部 8 种事件类型分配独立的颜色对,并同时适配浅色与深色主题:红色(认证失败)、橙色(路径访问被阻止)、黄色(会话吊销)、灰色(PIN 码过期)、绿色(会话创建)、蓝色(文件下载)、紫色(文件预览)、青色(文件访问)。 -
桌面端消息中心:发件方气泡时间戳不可读(
apps/desktop/src/renderer/pages/Messages.tsx)桌面端发出的消息气泡背景为主题蓝(
bg-primary),时间戳却使用text-primary/70,在深蓝底色上几乎不可见。已修正为text-white/60,与气泡文字颜色保持一致,确保时间戳清晰可读。 -
桌面端客户端管理:按钮对比度与语义(
apps/desktop/src/renderer/pages/Clients.tsx)「客户端列表」/「活动日志」标签按钮和「刷新」按钮的悬停态与静止态背景色相同,缺乏视觉反馈,已统一改为
hover:bg-muted。「信任」按钮由半透明绿(bg-success/20)改为实心绿(bg-success text-white);「吊销」按钮由半透明红(bg-destructive/20)改为实心红(bg-destructive text-white),两者均达到足够的文字对比度。 -
聊天输入框上方分隔线已移除(
apps/desktop/src/renderer/pages/Messages.tsx、apps/web/src/app/dashboard/messages/page.tsx)消息列表与输入框之间原有一条细边框线(
border-t border-border),在视觉上产生不必要的割裂感。已在 Web 端与桌面端两处同步移除,界面过渡更加简洁自然。 -
Web 设置页面布局左对齐(
apps/web/src/app/dashboard/settings/page.tsx)设置页面内容区原使用
mx-auto居中,与左侧导航侧边栏之间存在较大空白间距。已移除mx-auto,内容区改为左对齐,视觉上更贴近侧边栏,空间利用更紧凑。
下载
| 平台 | 文件 |
|---|---|
| Windows (x64) | RemoteBridge-Setup-1.1.6.exe |
| macOS (Apple Silicon) | RemoteBridge-1.1.6-arm64.dmg |
| Linux (x64) | RemoteBridge-1.1.6.AppImage |
1.1.5
新功能
-
共享目录实时同步(
packages/shared/src/ws-types.ts、apps/desktop/src/main/ipc/dirs.ts、apps/server/src/ws/handler.ts、apps/web/src/hooks/useWebSocket.ts)桌面端在添加共享目录、移除目录、修改访问权限或修改目录别名后,会立即向 Relay 推送
HOST_DIRS_UPDATED消息;Relay 将其广播给该主机的所有在线 Web 客户端。Web 端收到后若当前正处于共享目录根列表视图,则自动重新拉取最新目录列表,无需手动刷新页面即可看到变更生效。 -
共享目录访问权限标识(
apps/web/src/components/FileList.tsx)文件浏览页的共享目录根列表新增"权限"列,每个目录右侧显示权限徽章:绿色「可下载」(
download权限)或灰色「只读」(readonly权限)。桌面端调整权限后,徽章随HOST_DIRS_UPDATED机制实时更新。 -
初始连接页面重新设计(
apps/web/src/app/page.tsx)初始页面改为左右两栏布局:左侧固定面板展示最多 8 条历史连接设备的卡片(设备名称、操作系统、上次连接时间),右侧为 PIN 码输入表单。无需滚动即可看到所有历史设备,点击设备卡片提示用户在对应桌面端重新生成连接码。
修复
-
刷新页面时出现深色→浅色主题闪烁(
apps/web/src/app/layout.tsx、apps/web/src/lib/theme.ts)根布局
<head>中新增同步内联脚本,在 React 水合前读取localStorage.theme并立即写入<html>的class,消除因 JavaScript 延迟执行导致的主题闪烁。同时将默认主题从"深色"改为"浅色",首次访问统一呈现浅色主题。
下载
| 平台 | 文件 |
|---|---|
| Windows (x64) | RemoteBridge-Setup-1.1.5.exe |
| macOS (Apple Silicon) | RemoteBridge-1.1.5-arm64.dmg |
| Linux (x64) | RemoteBridge-1.1.5.AppImage |
1.1.4
修复
-
PDF 预览模态框过小,无法完整显示页面内容(
apps/web/src/components/previews/FilePreview.tsx)点击预览 PDF 文件时,内容渲染在
max-w-5xl max-h-[90vh]的固定尺寸模态框 iframe 内,宽高受限导致多列排版的 PDF 页面大量内容被截断,缩放/翻页等操作也受模态框边界制约,体验极差。修复:
FilePreview现在检测到effectiveCategory === 'pdf'且预览 URL 就绪后,直接调用window.open(previewUrl, '_blank', 'noopener')在新标签页打开,并同时关闭模态框。用户进入 Chrome 内置全屏 PDF 阅读器,具备完整的缩放、翻页、打印等原生操作控件,不再受模态尺寸约束。 -
预览 .txt 文件报"加载失败:TypeError: Failed to fetch"(
apps/web/src/hooks/usePreview.ts、apps/web/src/components/previews/TextViewer.tsx)React 18 StrictMode(
next dev模式下默认启用)对 Effect 执行双重触发:首次挂载 → 执行清理(调用clearPreview()→URL.revokeObjectURL())→ 二次挂载。这导致 blob URL 在TextViewer的useEffect尚未执行fetch(url)之前已被吊销,fetch抛出"TypeError: Failed to fetch",文本内容始终无法渲染。修复:
usePreview针对文本类文件不再创建 blob URL——改为在.then()回调中立即读取blob.arrayBuffer(),将结果以rawBytes: Uint8Array存入 React state。TextViewer接收rawBytesprop,在组件内同步进行 BOM 检测(UTF-8 BOMEF BB BF/ UTF-16 LE BOMFF FE/ UTF-16 BE BOMFE FF)与解码,无需任何二次网络请求,从根本上消除了 blob URL 被提前吊销的竞态问题。编码选择器(UTF-8 / GBK / UTF-16)、行号显示及字体缩放等功能完整保留。图片和 PDF 文件不受影响,仍使用 blob URL 路径。
下载
| 平台 | 文件 |
|---|---|
| Windows (x64) | RemoteBridge-Setup-1.1.4.exe |
| macOS (Apple Silicon) | RemoteBridge-1.1.4-arm64.dmg |
| Linux (x64) | RemoteBridge-1.1.4.AppImage |
1.1.3
v1.1.3 fix(web): fix PDF Chrome sandbox block and add txt encoding detection…