AuraTerm Release History
更新日志
每个版本新增了什么、修复了什么。安装包在 GitHub Releases 获取。 GitHub Releases →
0.3.6
当前版本许可证
- 许可证由 MIT 改为 GPL-3.0-or-later:自本版本起,AuraTerm 以 GNU 通用公共许可证 v3.0 或更高版本发布;0.3.5 及之前的版本仍按 MIT 可用。全部第三方依赖(MIT / Apache-2.0 / ISC / BSD / MPL-2.0)均与 GPLv3 兼容;仅 Apache-2.0 的依赖(如 russh)与 GPLv2 不兼容,因此选择 v3。同步更新
LICENSE、package.json、Cargo.toml、README、CONTRIBUTING、关于对话框,以及 Microsoft Store 的自定义许可条款(docs/MICROSOFT_STORE_LICENSE.md,商店安装包通过licenseFile展示的就是仓库的LICENSE)
改进
- 配置同步不再需要同步口令(设计见
docs/plans/sync-passphrase-removal-design.md):登录 AuraXLab 账户即可同步,重启后不再出现「Sync · 已锁定」。书签、设置与 known-hosts 以rest-v2明文载荷上传,由服务器静态加密保存,通过邮件重置账户密码后数据依然可用。 - 已保存的凭据改为主密码端到端加密:上传前用主密码派生密钥(Argon2id + HKDF + AES-256-GCM)封装为
AURACRED信封,服务器无法读取。凭据同步要求各设备使用相同的主密码;主密码锁定或本机未设主密码时只跳过凭据部分,其余内容照常同步,Live Sync 面板与同步结果会说明原因。 - Live Sync 的「配置同步」状态改为:未登录 / 同步中 / 最近成功 / 凭据待解锁主密码 / 请重新登录 / 失败;账户凭据失效时直接引导重新登录。
- 自动同步:在「配置同步」中勾选后,启动约 10 秒、书签变更 30 秒后(防抖)以及每 30 分钟各自动执行一次双向同步;自动运行失败只记录到状态栏,不弹窗。
- 旧版本上传的口令加密云端副本会在首次同步时提示一次性迁移:输入旧口令合并并转换,或直接用本机数据替换。
- 快捷按钮分组:按钮栏新增分组下拉,可只显示当前工具栏里某个分组的按钮(选中后不再重复显示分组标题);编辑对话框加大,左侧列表可按工具栏和分组筛选,每行显示所属工具栏与分组,筛选状态下的上下移动只在同组内交换位置,新增按钮直接落入当前筛选的工具栏与分组;分组字段改为下拉,列出已有分组并支持新建。
- 统一快捷按钮相关文案:对话框标题、工具栏切换、空列表提示与设置项说明不再混用「片段」;编辑器里的「SSH 主机」「连接分组」改为「仅在这些主机 / 书签分组显示」,说明它们是可见性条件而非归类。
- Live Sync 状态栏(P1/P2):状态栏右侧改为固定的 Live Sync 总入口,只在真正有远程活动或待处理问题时才追加胶囊;所有胶囊指向同一个 Live Sync 面板,并定位到对应功能(设计见
docs/plans/live-sync-status-bar-design.md)。 - 面板统一呈现四行——配置同步、Live Console、Live Share、Live Relay,并区分「其他设备接入本机」与「本机连接其他设备」两个方向。
- 设备级状态不再依赖当前标签页:没有终端标签时状态栏与 Live Sync 入口依然可用。
- 窄窗口自动收起观看数量和空闲文案,只保留控制、待处理与异常。
- 配置同步接入完整过程状态(未配置 / 已锁定 / 同步中 / 最近成功 / 失败),不再只靠一次性提示。
- 状态刷新失败时保留上一次结果并标记「状态未更新」,不再把 Share / Relay 直接隐藏,避免被误认为已经结束。
- 统一状态配色语义:正常活动用强调色,待审批与重连用黄色,控制改为固定的醒目标识(不再持续闪烁),异常用错误色,并始终附带文字。
- 状态栏右半收敛为一枚标签(P3):入口不再与活动胶囊并列,而是入口本身携带状态——空闲显示
Live Sync,有事显示Live Sync · Console 控制 1 · +1,被压缩的部分悬停即可逐行看到,点击仍定位到对应面板行。 - 当前会话的共享状态回到状态栏左半(会话侧),文案改为「已共享 · 允许输入 / 只读 / 临时输入 · 剩 n 分」,不再显示
read_write这类枚举原文。 - 远端输入提示不再永久常驻:静默 15 秒后自动消失。
- 删除状态栏右半与左半重复的波特率、帧格式、流控;没有实时串口状态时改由左半兜底显示。
修复
- 从 Live 功能进入登录后自动返回:Share / Relay 保留原表单选择,Relay 在设备关联后自动刷新设备列表;取消、刷新失败或改走其他账户操作均不会留下 Console 开启意图。同步登录返回不要求关联设备。
- 账户页与状态栏共用连接快照,正确显示待机与重连;「关联设备」文案明确不会自动开启共享。
- 远程输入开关文案明确只覆盖 Live Console 与 Live Relay,Live Share 的控制权限在共享管理中单独设置。
- Live Sync 状态栏(P0):Console 按来源独立统计连接,修复 Relay 控制连接被误计为 Console 观看;区分自动共享开关和共用链路状态,计入本机输入权限与临时授权有效期。
- Share / Relay 同时显示控制、观看及待处理请求,审批不再遮盖控制状态;数量明确按连接统计。Share 拒绝控制申请时同步清除后端请求标志,避免待处理计数残留。
- Console 状态点击改为打开管理面板;共享和远程输入开关须在面板中明确操作,子窗口可只读查看。
移除
- 删除 GitHub Gist、Gitee Gist 与 WebDAV 同步提供方及其配置项;升级后面板显示一次性提示,本机数据不受影响,旧的令牌不再保存。
0.3.5
新增
- Live Sync:云服务功能整合,并新增 Live Relay —— 菜单栏「云服务」更名为 Live Sync,
成为账号云能力的唯一入口;Cloud Console 随之更名为 Live Console(设计见
docs/plans/live-sync-design.md) - 四个成员按「对端是谁」切分:同步(我的其它安装)、Live Console(我的浏览器)、 Live Share(外人)、Live Relay(我自己的另一台 AuraTerm)
- 改名只动展示文案:settings 字段、IPC 命令、HTTP 路由、数据库表名一律不变,
旧的
settings.json与设备凭据直接可读,无需迁移 - 状态栏由原先「一个胶囊轮流显示」改为固定的 Live Sync 入口加按需出现的活动胶囊, Live Share 进行中时不再遮住 Live Console 的链路状态
- Live Relay:接入自己账号下的另一台设备 —— 和 Live Share 的分界是对端是谁: Live Share 用一次性分享码给外人,Live Relay 凭账号与设备凭据接入自己的机器, 在设备列表里直接选,不需要分享码
- 设备选择器列出本账号下所有已绑定设备(在线状态、可接入的共享会话), 选中即在新标签页里镜像该会话
- 默认关闭:目标设备必须本机勾选「允许本账号设备接入本机」,且默认每次接入 都弹确认框。服务端保存的策略副本只用于提前拒绝,最终裁决永远在被接入的那台机器上
- 身份本地校验:签发凭据时回带对端的设备身份公钥,接入方在 E2EE 握手后本地验签, 验不过直接断开——握手不需要再信任服务器一次。两端显示同一个指纹供肉眼核对
- 控制权:可写的共享会话上可申请控制权,对方设备批准后才能输入;撤销、 顶替、踢人、断线都会立即作废写权限(fence 由被接入的设备自持并递增)
- 全局「允许远程发送」开关同时管住 Live Console 与 Live Relay:一个闸门关掉全部远端输入
- 在对方设备上新建会话(三个开关,默认全关):让对方在你的机器上开一个本地终端、 打开你的串口书签,或用你保存的 SSH/Telnet 书签连接。会话以普通标签页打开—— 你看得见、能随时关掉;凭据永不离开本机,连接是本机用自己的书签发起的。 对方只能点名你主动列出的目标,无法指定程序、工作目录或环境变量
- 断线自动重连:网络掉了会退避重试并重放快照,终端自行重绘;被踢、被拒、 共享被停止这类对方主动结束则不重连——那是对方的意思
- 控制权闲置回收:控制者超过设定分钟数没有输入即退回只读(默认 30 分钟)。 仅观察的设备不受影响——盯着一个长时间构建正是观察者的常态
- 流量与 Live Console 共用一套计量,账户中心与网页流量页一并显示; 网页设备页显示每台设备的 Live Relay 开启状态与允许的操作
- Microsoft Store 版本安装后也有桌面快捷方式 —— 提交到商店的 MSIX 此前没有声明任何 Extension,从商店安装只得到 Windows 由
<Application>派生的开始菜单项,而官网的 NSIS 安装包一直有桌面图标——同一个应用,从哪里装的决定了装完有没有图标。现在用desktop7的windows.shortcut扩展声明桌面快捷方式,这是清单内唯一的机制;图标另存为Images\Shortcut.ico——Windows 不会从 exe 的资源段里取快捷方式图标,指向auraterm.exe只会得到一个空白.lnk;desktop7列入IgnorableNamespaces,19645 之前的 Windows 忽略这段扩展而不是让清单校验失败(用 10.0.26100 与 10.0.19041 两套 SDK 打包验证)。开始菜单项已经自动生成,故只声明桌面这一处;打包时设AURATERM_MSIX_DESKTOP_SHORTCUT=0可省略
修复
- 帮助菜单指向手册的新地址 —— 站点把文档从
/products/auraterm/<page>搬到了/docs/<page>。旧地址永久重定向,已发布的版本照常可用,新版本只是省掉那一跳
内部
- 「E2EE 会话 → 本地终端标签页」这段与协议无关的管线从
assist_client.rs抽成remote_tab.rs(中继准入、出站泵、按角色与 fence 门控输入的标签页注册表、读循环);Live Share 只提供一个TabProtocol(帧分类 + 方向标签),Live Relay 的接入端复用同一接缝 - 新增
relay_provider.rs(被接入侧的本地准入:策略闸门、按对端的敲门与超时、并发上限、踢人;E2EE 握手完成后才裁决,连拒绝都是端到端加密的)与relay_client.rs(接入侧:用签发凭据时回带的身份公钥在本地验E2EE_READY签名,验不过在渲染任何字节之前就拒绝) - 「在对方设备上新建会话」由前端完成而不是后端:后端裁决后发
relay-open-request,App.vue把不透明的目标 id 解析回真实可见的标签页、共享它并回报会话 id。裁决函数decide_open是纯函数(Relay 已开启、该类开关打开、id 已对外列出、并发有余),安全关键的闸门无需任何中继或 HTTP 管线即可单测 - 中继数据面新增
relay_controller角色:只允许向上游发 E2EE 帧,没有可续期的租约;只读接入仍是relay_viewer,其上行帧被数据面直接丢弃——只读由客户端之下的一层保证。fence 由被接入设备自持(沿用 Live Share 而非 Cloud Console 的做法):授予递增,撤销 / 踢出 / 断线 / 顶替全部作废 - 设置新增
liveRelay块(Rust 与 TS 两侧,含归一化,所有闸门默认关闭)与控制权闲置分钟数;RelayPolicySummary镜像进 cloud bridge(失败即关闭),随每次空闲 presence ping 上报,服务端可以提前拒绝注定失败的申请,裁决权仍在设备 - 断线重连:
remote_tab把读循环的结果作为TabEnd交回调用方而不是一律关标签页,TabEnd.deliberate区分「对方主动结束」与「链路掉了」;中继票据一次性有效,每次重试都是完整的重新准入,审批与控制权也重新申请,不发明「最近批准过」的豁免 - Live Relay 流量不需要额外接线:中继对端就是普通共享会话上的浏览器通道连接,既有计数器已经包含它们;补一条单测钉住这一点
- 新增
LiveRelayDialog.vue、LiveRelayKnockDialog.vue、liveRelay.ts;文档新增docs/features/Live-Relay.md,Features.md增补 Live Relay 一节并注明 13–16 节同属 Live Sync 一族 - 服务端(AuraXLabs):presence ping 携带的 Live Relay 能力摘要入库、同账号设备的接入授权、
relay_controller角色、新建会话请求、设备页显示每台设备的 Live Relay 状态 make release现在把Changelog.md同步到旁边的 AuraXLabs 检出(app/data/auraterm_changelog.md),站点的/products/auraterm/changelog页面由这份副本渲染;位置可用AURAXLABS_DIR覆盖,找不到检出只告警不失败。内容没变时不写盘(站点按文件 mtime 缓存解析结果);package.json的版本在 Changelog 里找不到对应条目时会告警
0.3.4
新增
- 网络串口(RFC 2217)与裸 TCP —— 串口会话此前只能连本机插着的那个口。协议选择器从三个增加到五个(SSH / Telnet / 串口 / 网络串口 / 裸 TCP),实验室里的板子从哪里都能接上
rfc2217走 Telnet Com Port Control Option(option 44):波特率、数据位、校验、停止位与流控真的会作用到设备服务器上,已对 ser2net、Moxa NPort、Digi、Lantronix 验证。对端拒绝或忽略 COM-PORT-OPTION 时降级成纯字节管道并说明原因,而不是直接失败raw-tcp是裸字节管道,给只暴露这一种接法的设备服务器;它控制不了线路参数,因此对话框里这些字段一并不显示- 控制面对本机串口同样生效:不断开就改线路参数、发送 BREAK、驱动 DTR/RTS、读调制解调器状态线,以及看到帧错误与校验错误——波特率配错时最直接的证据
- 「沿用设备服务器上的现有端口设置」默认勾选,并移到它管辖的那组参数上方:共享的 console server 保持原样是更安全的默认。勾选时这些参数真的锁住了(此前预设下拉仍然可用,会改写灰掉的字段)
- 网络会话带 TCP keepalive 与可选的退避重连——设备服务器重启是常态
- 四个新建入口都有:连接对话框、命令面板、File ▸ 新建会话(原生菜单)、标签栏 + 号的弹出层
- 书签分组分享(P0:文件通道) —— 书签管理页分组右键「⤓ 导出此分组(可分享)…」或顶栏「导出 ▾ ▸ 导出分组「X」」,把整棵分组子树打包成一个分享包(设计见
docs/plans/bookmark-share-design.md) - 分组路径按被分享的根相对化:对方可以把它挂到任意分组下,也不会看到分享者根以上的目录结构(此前只能勾选条目导出,且分组以绝对路径出行)
- 空子分组随包出行并在导入后写回
settings.bookmarkGroups,刻意建出来的层级不会丢 - 分享包永远不含凭据:密码、私钥、passphrase、跳板机凭据、自动登录响应、登录后命令一律剥离;本机日志路径(会暴露分享者的用户名与目录布局)与最近使用时间也不外带。因此该操作在主密码锁定时照常可用
- 文件名带上分组名与时间戳(
auraterm-share-Prod-EU-2026-08-25-1530.json),Windows 非法字符会被折叠 - 导入时留空落点分组,分享包会落在它自己的名字下
- 导入前先过一遍预览 —— 选完文件不再直接落盘:新的预览对话框列出每一条要导入什么、落在哪个分组、和本地哪一条冲突,逐条可选「新增 / 更新 / 跳过」,落点分组可当场改(后端重算冲突)。书签栏的快速导入走同一个对话框——同一份文件的风险不因为从哪个按钮打开而不同
- 冲突判定改为三级回落:
origin.entryId(同一分享包的同一条 → 默认更新)→ 同一台机器(默认跳过)→ 新增。此前是「协议+主机+端口+用户+名称」五元组全等,任一侧改个名就会变成第二份副本 - 串口书签按设备路径比对:它们的 host / user 都是空的,照旧规则每一条串口书签都是其它每一条的重复项
- 信任闸门:外部文件里的登录后命令、自动登录响应、密码/私钥/跳板机凭据一律默认剥离,预览顶部按类别列出数量;要保留必须先展开、再勾选。登录后命令连上即执行,自动登录响应会被自动发送(而它通常就是密码),跳板机决定流量经过谁的机器
- 更新一条书签不会清掉本机已存的凭据:只有载荷真的带了凭据才写凭据库
- 分享码 —— 分组右键「🔗 生成分享码…」把分组打包加密后上传,得到一段
RRRR-SSSS-SSSS-SSSS的码与短链接;对方在「导入分享码」里粘贴即可,无需 AuraXLab 账号 - 端到端加密:密钥由码的后 12 位派生(Argon2id 16 MiB / t=3),这 12 位从不上传,服务端只存密文——与云同步 vault 同样的零知识姿态
- 可设有效期(24 小时 / 7 天 / 30 天)与可导入次数;「我的分享」可随时撤销,撤销会删除服务端密文,已发出去的码立即失效
- 分享包永不含凭据;收到的分享码同样要过预览与信任闸门
- 订阅式更新 —— 导入过的分享码会被记住(以设备本地密钥加密存放),「我的分享 ▸ 已订阅」里一键「检查更新」重新拉取;因为
origin.entryId认得出同一条,更新落在原地而不是翻倍
修复
- 所有确认对话框此前全线失效 ——
node_modules里的@tauri-apps/plugin-dialog停在 2.6.0,而 Rust 侧按 2.7.2 编译;后者把ask/confirm并进了message命令,前端调用的plugin:dialog|confirm已不存在,Promise 直接 reject。十三处确认(批量删除、解散/删除分组、以云端覆盖本地书签、重置 known_hosts、远程文件删除)都是「点了没反应」,其中书签栏右键删除最显眼。alertDialog因为message两个版本都有而照常工作,所以症状看起来像书签的 bug 而不是对话框坏了 - 对话框桥失败会报出来,而不是静默当成「用户取消」 ——
confirmDialog现在自己 catch、经alertDialog报错并返回 false。返回 false 而不是重新抛出是为了守住安全默认值:调用方读作「用户拒绝」,桥断了也不会让破坏性操作无确认地通过 - Telnet 出站不转义 IAC —— 用户数据里的字面
0xFF会被服务器当成命令。现已按 RFC 854 转义,并在未协商 BINARY 时对 CR 补 NUL(回车因此从CR变成CR NUL,与 BSD telnet 和规范一致) - 工作区恢复丢掉网络串口的落点 —— 恢复逻辑写死
protocol: "serial"且只复制六个字段,transport / host / netPort 全丢,重启后变成去打开一个名叫10.0.0.5:2217的本机设备。现在恢复保留协议与端点,没有 host 的网络条目直接拒绝 - Cloud Console 与 Live Share 开播前先要求登录 —— 两者都经账号中转,但未绑定的设备此前可以把 Cloud Console 开关拨开(设置在账号对话框弹出之前就已写下),Live Share 则先渲染出开始表单、再抛一个原始后端错误。后端一直是拒绝未绑定设备的,所以并非安全漏洞,只是开关停在错误或含糊的状态。现在 Cloud Console 先把「打开」的意图存着、设备真的绑定后才落盘,Live Share 未绑定时显示登录提示;加入别人的分享不受影响——那只需要对方的码
内部
- 书签交换格式的
version保持 1,share与origin均为可选字段:0.3.3 及更早的客户端仍能打开新分享包(serde 忽略未知字段,相对路径前缀到用户选择的分组后结构完全正确),只是看不到分享名与空分组;connections.rs有一条专门守住这个约定的单测 SavedConnection新增origin: {bundleId, entryId}——entryId记的是分享者的连接 id,同一条书签多次导出保持不变;本机 id 在导入时一律重发,无法充当跨机器身份。这是后续「再次导入同一分享包时更新而不是翻倍」的一级匹配键- 新增 Tauri 命令
export_group_bookmarks;import_bookmarks的返回结果增加createdGroups relative_group_path复用既有的renamed_group_path(path, root, ""):相对化与「解散分组」本就是同一套子树算术- 三处重复的毫秒时间戳表达式收敛为
now_millis() import_bookmarks拆成preview_bookmark_import/retarget_bookmark_import/apply_bookmark_import/discard_bookmark_import:载荷缓存在后端并以 plan id 引用,可能含凭据的文件内容不再在 JS 与 Rust 之间来回搬;import_bookmarks保留为无预览的薄封装,自备份恢复的行为不变- 新增
bookmark_share.rs(分享码格式与解析、信封、四个 HTTP 调用、订阅存储);sync 与 share 两种信封收敛为同一实现,只有 magic 不同——把一种当另一种解会明确报错而不是悄悄失败 - 分享码的秘密段取 12 位而非 Live Share 的 8 位:Live Share 用 SPAKE2 在线证明、服务端计失败次数并锁定,38.5 bit 足够;分享是离线投递,拿到密文即可离线爆破,38.5 bit 在 Argon2id 下约合数张 GPU 数日——短于分享自身的默认有效期。12 位(≈57.7 bit)把它推出可行范围
- 订阅存储
bookmark_subscriptions.enc以设备本地密钥加密(与sync_config.enc同一套):里面存的是分享码,而码就是密钥;前端拿到的视图类型里没有码 - 新增
ImportPreviewHost.vue(沿用PromptDialogHost的队列 + 宿主模式)、ShareDialog.vue、ShareListDialog.vue、importPreview.ts、bookmarkShare.ts - 服务端(AuraXLabs):
bookmark_shares表与迁移、4 个端点、账号配额与限速规则;缺失/已撤销/已过期/次数用尽一律回同一个 404,4 位路由段因此无法被枚举出「哪些码存在」 - 终端共享功能改名为 Live Share(原「远程协助 / Remote Assist」),中英两端都用这个拉丁名;协助码 → 共享码,结束协助 → 结束共享。只改显示文案:
assist.*i18n 键、菜单 id、assist标签页类型、Rust 模块与remote-assist-design.md都保持原名,协议与已经发出去的加入链接不受影响 - 串口新增传输层接缝
serial_link.rs(SerialLink供读线程、SerialSink供一切写入),serial.rs的读循环因此与传输无关,ZMODEM 路由、UTF-8 解码与事件发布一行未动;option 44 的编解码rfc2217.rs不做 IO,整套握手可单测。scripts/rfc2217_test_server.py让 pyserial 自己的PortManager跑在自回显 pty 上,互操作测试不需要硬件 - 传输层由协议派生(协议成为唯一事实来源),书签里冗余的
serialTransport字段移除;sharedSessionProtocol()把三种串口协议一律映射回serial——它们本来就同住SerialState,否则rfc2217反序列化成SessionProtocol会失败并悄悄弄坏共享 - 依赖树整体前移:十六个 npm 包与 cargo 在 semver 范围内更新,顺带清掉 brace-expansion / nanoid / postcss 三条告警;TypeScript 5.9.3 → 6.0.3,停在 6.x 是刻意的——TypeScript 7 是原生编译器,其 package exports 去掉了 vue-tsc 赖以运行的 JS 编译器 API。
make update现在跑完两套生态后列出仍然落后的包,让这种漂移可见 - 不再调用整体标记为 deprecated 的 generic-array 自有方法,改走
Deref与From<&[u8; N]>:同样的指针转换、不复制,密文格式不变,旧版本写下的数据照常解密 - Vite 的 chunk 体积告警上限从 500 kB 提到 700 kB:超标的是启动即需的 xterm(505.88 kB),而资产随 Tauri 二进制走本地文件系统,告警针对的网络下载成本并不存在
0.3.3
新增
- 书签管理页 —— 「View ▸ 书签管理…」(macOS 原生菜单栏与 Windows 自绘菜单两端一致)/ 命令面板 / 书签栏 ⚙ 按钮打开的全尺寸管理页:左栏分组树(全部 / 最近使用 / 未分组 + 派生分组树,与书签栏共享折叠态)、中栏可排序表格(名称 / 协议 / 目标 / 认证 / 分组 / 最近使用,密码认证以警告色标出)、右栏内嵌书签编辑器(设计见
docs/plans/bookmark-manager-design.md) - 多选:点击勾选框、⌘/Ctrl 点击、Shift 范围选、表头全选;选中后底部操作条可批量「移动到分组」(含新建分组)或删除,删除一律二次确认
- 键盘:
/或 ⌘/Ctrl+F 聚焦搜索,↑↓ 在列表内移动,Enter 连接,Esc 先清空搜索再关闭;双击行连接 - 分组维护:左栏「+ 新建分组」可建立空分组(记入
settings.json,随云同步);分组右键可重命名、新建子分组、解散(书签与子分组提升一级)或连同书签一并删除;把书签行拖到分组上即可移动 - 导入导出:导出全部或所选为 AuraTerm JSON(默认不含凭据,另有一项可导出含密码与私钥的版本);导入自动识别 OpenSSH config / PuTTY
.reg/ AuraTerm 备份,并可指定落点分组 - 克隆:批量复制所选书签,连同凭据一起复制
- 行右键菜单:连接 / 克隆 / 导出 / 删除;右键已勾选的行则作用于整个选区
- 宽度:默认放宽到
min(1440px, 96vw),拖右边缘可继续加宽(下限 760px,上限视窗宽度减 48px),宽度记在本机,双击边缘恢复默认 - 主密码锁定时顶部提示凭据不可见;删除、克隆、导出凭据需要先解锁,而移动分组与重命名只改元数据,锁定状态下照常可用
- 分组改为下拉选择 —— 新建会话对话框与书签编辑器的分组字段优先列出已有分组(含
a/b这类嵌套路径的中间层级),选「新建分组…」才展开输入框 - Live Share——主机侧 —— 生成一个 12 位共享码,让对方用浏览器(
auraxlab.com/assist)或另一台 AuraTerm 查看、并在你允许后控制当前终端会话(设计见docs/plans/remote-assist-design.md) - 共享码
XXXX-XXXX-XXXX:前 4 位路由段由 AuraXLab 分配,后 8 位秘密段只存在于本机内存;双方用它跑 SPAKE2(RFC 9382,P-256)互相认证并派生端到端加密密钥——服务器与中继无法读取内容、无法冒充任何一方;错误尝试(含收到PAKE_B后放弃确认的连接)累计 3 次即锁定并结束 - 「云服务 ▸ Live Share…」/ 命令面板「Live Share」打开对话框:选择会话或「跟随当前标签页」、控制策略(仅查看 / 访客可申请 / 自动授予)、加入需确认、多人模式(≤3)、有效期 5–60 分钟;运行中显示大号共享码(有人加入后自动遮罩)、复制码/链接、剩余时间、访客列表(昵称/客户端/角色/会话指纹、授予/收回控制、踢出)、结束共享
- 敲门审批:访客加入或申请控制时弹出确认(允许查看 / 允许控制 / 拒绝;60 秒不处理视为拒绝);控制权带 fence,撤销即失效;
Ctrl/Cmd+Shift+Esc一键收回所有访客控制权;关闭被共享标签页即结束共享(跟随模式则自动切换) - 状态栏胶囊新增「Live Share · 等待加入 / N 人观看 / N 人控制」状态,远端键入沿用既有提示
- Live Share——访客侧:「云服务 ▸ 加入 Live Share…」/ 命令面板「加入 Live Share」输入共享码或链接,即在新标签页(
assist类型)中接入对方 AuraTerm 的终端:无需账户,经 AuraXLab 取票、WSS 中继、SPAKE2 互证并建立端到端加密;标签页顶部横幅显示主机名/会话指纹/状态(验证中 / 等待批准 / 只读 / 控制中 / 已结束),可申请或放弃控制;只读时键入在本机丢弃,控制态键入以带 fence 的密文INPUT送达主机;终端跟随主机的 cols/rows(本地不 fit,容器内滚动);访客标签页不进入工作区恢复、不可被再次共享 - Live Share——续期与短链接:对话框显示「会话将在 h:mm:ss 后自动结束」(默认 4 小时)并可「延长 1 小时」(服务端记录
assist.extended);复制的链接改为短形式https://auraxlab.com/s#码 - 终端尺寸转发:前端每次 fit 后上报当前 cols/rows,Cloud Console 观看者与 Live Share 访客收到
RESIZE并按主机真实网格渲染(取代原先写死的 80×24)
修复
- 书签保存失败现在会弹出原生错误对话框——此前走
window.alert,而它在 macOS WebView 中是静默 no-op,保存失败没有任何反馈 - 书签栏右键删除加二次确认(此前点下即删,无法撤销)
- 主密码锁定时保存书签会清空已存的密码与私钥——
get_connections在锁定态返回的连接不含凭据,再save_connection写回等于覆盖密文。现在这类保存会被直接拒绝并提示先解锁
内部
- 新增
useBookmarkStore:书签列表、分组折叠态与增删改/批量操作收敛为一份共享状态,书签栏与管理页共用(此前各自invoke,一侧改动另一侧不刷新) bookmarks.ts补齐collectGroupPaths/filterConnections/sortConnections/matchesScope/renameGroupPath等纯函数并纳入单测;BookmarkEditor新增embedded模式供管理页内嵌复用- 新增 Tauri 命令
delete_connections/move_connections/rename_group/duplicate_connection/export_bookmarks:批量操作一次读写落盘,取代前端逐条调用(主密码模式下每次save_connection都会用新盐触发一次 Argon2id 派生);其中move_connections与rename_group只改元数据,不触碰凭据库 import_bookmarks支持 AuraTerm 导出格式:id 一律重新分配,文件内含凭据且主密码已解锁时一并写回凭据库,否则跳过并回报警告- 新增
bookmarkTransfer.ts(格式嗅探 / 导出文件名 / 浏览器下载)与bookmarkGroups设置项(已加入云同步白名单) - 新增
BookmarkManager.test.ts:挂载管理页覆盖列表渲染、分组筛选、批量删除、拖拽移动分组、分组重命名、空分组创建、导出与双击连接;Rust 侧补renamed_group_path与导入导出回环单测 assist_extend命令 + 主机测试(进程内假 AuraXLab 应答/extend,校验截止时间更新与范围钳制)cargo audit:3 项均为传递依赖——quick-xml 0.38(经plist←tauri-utils,构建期配置解析,RUSTSEC-2026-0194/0195,需上游升到 0.41)、rsa 0.10.0-rc(经russh,RUSTSEC-2023-0071 Marvin,无修复版本);其余为 gtk-rs GTK3 绑定"不再维护"类告警(Tauri Linux 依赖)- 新增
pake.rs(SPAKE2-P256,RFC 向量 + 跨语言 fixture 锁定)、assist.rs、assist_host.rs;E2EE 信封抽为e2ee.rs::PeerCipher(方向标签进 AAD) - 新增
assist_client.rs(访客端:join → 中继 → SPAKE2 → E2EE → 输出/状态事件;assist_join/write_assist_input/assist_request_control/assist_release_control/close_assist_session) cargo test新增访客端集成测试(进程内假 AuraXLab + 假 relay/主机:握手、指纹一致、HELLO、只读丢弃输入、申请控制→授予→带 fence 输入;错码在确认前被识别且不发送确认)cargo test新增主机握手集成测试(Tauri mock app + 模拟访客:正确码 → 状态/快照/输出/输入/撤销;错误码 3 次锁定;审批流程)
0.3.2
新增
- AI 助手(可接 Anthropic / OpenAI 兼容 API) —— 内置流式聊天面板 + 终端上下文快捷操作,密钥本地加密存储
- 提供商任选:Anthropic Messages API 或任意 OpenAI 兼容端点(DeepSeek、Kimi、Ollama 等);Settings ▸ AI 配置提供商 / Base URL / 模型 / 最大 token,「测试连接」探针在按钮被禁用时会说明原因(未启用助手 / 未保存密钥)
- 聊天面板:多轮流式对话、随时取消、代码块一键复制/插入终端、token 用量显示;标签栏新增 ✨ 按钮开关面板(设置按钮同时换成真正的齿轮图标)
- 终端上下文动作:命令面板「解释上一条命令 / 分析上一条失败命令」(基于 OSC 133 shell 集成命令块),面板顶部快捷 chips「解释 / 分析报错 / 优化命令 / 总结输出」(总结读取 xterm 当前可见视口,不依赖命令标记);所有上下文先生成可编辑草稿、确认后才发送
- 输入栏 Ctrl/Cmd+K:自然语言描述任务 → 生成单条命令填入输入栏供审阅——绝不自动执行,回车始终在用户手里
- API Key 用设备本地密钥 AES-256-GCM 加密单独存放:不进凭据库、不进设置导出、不进云同步(仅 AI 配置可同步,密钥永不同步)
- 界面多语言:简体中文 —— 轻量响应式 i18n 层(en / zh-CN),语言设置支持「跟随系统 / English / 简体中文」
- 覆盖全部前端界面:菜单/标题栏、设置各页、连接与书签、云同步、隧道、远程文件、命令面板、主密码、输入栏、About、终端浮层与各处 tooltip;macOS 原生菜单栏在切换语言时即时重建
- 新一级菜单「云服务 / Cloud」(自绘标题栏与 macOS 原生菜单同步重构)—— 账户、同步、监控三组入口集中一处
- 账户:未登录显示「登录…」(登录/注册),登录后变为「我的账户…」——账户中心展示用户名、服务器,以及 Cloud Console 消耗流量(总流量 + 上行/下行 + 会话数),支持刷新与退出登录;设备绑定管理并入同一对话框
- 同步:「立即同步」一键按当前 provider 全量同步(结果以浮层提示,未配置/口令未解锁时引导到同步设置);「同步设置…」打开原云同步对话框选择同步范围
- 监控:「Cloud Console」勾选开关 = 自动共享当前会话到云端观测;「允许远程发送 (Allow Remote Send)」默认开启、可单独关闭——关闭后所有共享钳制为只读、Rust 桥接层直接丢弃远端 INPUT(fail-closed:设置未推送前一律拒绝),既有共享会就地降级为只读
- 原生菜单账户/云同步/自动共享项从 File 菜单迁出;登录态与两个开关的勾选状态经
sync_cloud_menu_state实时重建原生菜单;修复原生菜单「AuraXLab 账户…」点击无响应(on_menu_event缺转发分支,现改为menu-*通配转发) - 自动共享策略跟随「允许远程发送」:允许时以 read_write 共享(浏览器仍需 recent-auth + TX 租约),关闭时 read_only
- 移除手动「共享到云端」入口(状态栏按钮、逐会话策略对话框与命令面板项)——共享统一走「Cloud Console」单开关模型(单槽位、跟随当前会话);随之取消的还有仅手动路径可选的「临时控制(自动到期)」策略(Rust 桥接层仍保留该策略支持)
- 状态栏云端状态指示:被控端实时显示 Cloud Console 链路状态——受控中(有控制者接入,红点脉冲)/ 被观看(N 个观看者,蓝)/ 云端在线 / 云端待机 / 云端重连中 / 云端离线;未绑定设备时隐藏。角色信息取自中继
E2EE_INIT的role字段(观看者/控制者接入、断开即时刷新,主窗口点击胶囊可直接开关 Cloud Console) - 修复:活跃会话在云端网页打开即「连接已断开」——E2EE_INIT 处理曾先把 viewer 注册进输出泵、后发
E2EE_READY,繁忙终端的加密输出帧会抢先到达浏览器(彼时浏览器尚无解密密钥,直接判死连接)。现改为E2EE_READY+ 快照发出后才注册 peer;配套 AuraXLab console.js 对 READY 之前到达的加密帧做缓冲回放(兼容旧版本 AuraTerm) - 登录/注册表单提取为
AuraxlabAuthForm.vue,云同步对话框与账户中心复用;命令面板新增「立即同步 / Cloud Console 开关 / 允许远程发送开关」,账户命令标题随登录态切换 - 云桥 HTTP 传输改为长轮询:服务器最长 hold 25s、有帧立即返回——空闲流量降到心跳级(~2 次/分钟),新观看者仍亚秒级发现(要求 AuraXLab 中继支持
wait参数)。心跳遵循服务端 connect-grant 下发的heartbeat_interval(默认 60s,5–600s 钳制),HTTP 与 WebSocket 传输一致 - Cloud Console 桥接生产化(配合 AuraXLab 独立中继)
- 设备身份升级为 Ed25519 签名 + 能力校验,支持凭据轮换(旧钥签新钥);设备身份用设备本地密钥加密落盘(
console_device.enc),启动自动恢复并以指数退避重连 - 中继授予 ws(s):// 地址时走 WebSocket 传输(HTTP 长轮询兜底),重连时热切换传输层,长生命周期泵始终使用当前连接
- 纯 E2EE 输出通道:移除全部非加密发送路径,终端字节只在每观看者的 E2EE 信封内离开设备——无观看者接入时不上传任何内容
- 空闲降级:无共享 60s 后断开中继、转入 30s presence ping 的待机态,账户中心显示「在线(待机)」;发起共享按需拨号
- 串口会话同样可云端观测(serial RX 桥);终端事件统一经事件 broker 分发
- 账户中心「一次登录、两种凭证」 —— 登录表单直连设备绑定:勾选「同时绑定此设备到 Cloud Console」(默认开启)后,同一次密码输入先换取同步凭证、再直批设备登记(密码仅当次使用、不落盘),一步完成登录 + 绑定;两种凭证仍各自独立(sync scope 与设备身份互不可替代),合并的只是流程
- 已登录未绑定时,绑定卡片预填账户邮箱,仅需补一次密码(服务端要求当场密码作为新鲜度证明,同步凭证被明确拒绝用于绑定新设备);浏览器批准路径保留(应用内零密码)
- 「本设备」区不再有独立的邮箱 + 密码表单;服务器地址上移为登录表单字段,登录与绑定共用同一地址,不再可能各指一个服务器
- 对话框顶部新增「接入状态」总览:云同步登录态与 Cloud Console 绑定态并列徽章展示,四种组合状态一目了然
- 书签会话持久化徽章 —— 侧栏书签名旁显示 T(tmux)/ S(screen)小徽章并附说明 tooltip,一眼区分可断线重连的会话;搜索可直接匹配 tmux / screen 关键字
- 新增
make run一键启动桌面端开发环境
修复
- macOS 原生菜单补齐「Cloud Sync…」入口(与 Windows 自绘菜单对齐),两端共用同一打开逻辑
- 账户中心重新打开时优先读取本地加密登录态,不再因线上资料刷新延迟短暂显示登录表单;账户资料与流量改为后台刷新,并防止退出/切换账户期间的旧请求覆盖新状态
0.3.0
新增
- WebGL 加速渲染 —— 对当前可见/聚焦的终端启用 WebGL 渲染器,上下文丢失时自动回退 DOM 渲染
- 端到端加密云同步(书签 / 设置 / known-hosts) —— 对标 Electerm 的自托管思路,免自建后端
- 四种存储后端可选:GitHub Gist、Gitee Gist、WebDAV、AuraXLab 账户(官方私有同步服务)
- 上传前用独立的「同步口令」经 Argon2id + AES-256-GCM 端到端加密(复用现有加密原语,新增
AURASYNCblob 格式),存储方/服务端只见密文(零知识) - 同步内容可选:书签(默认)、设置子集(主题/字体/快捷按钮/输出规则等,剔除设备相关项)、SSH known-hosts、以及(可选)已保存凭据(需主密码解锁)
- 合并策略:书签按 id 合并、known-hosts 并集且本地信任优先;提供「合并 / 覆盖本地 / 覆盖云端」与「立即双向同步」
- 新增设置入口
Cloud Sync(File ▸ Preferences 与命令面板),后端cloud_sync.rs+reqwest(rustls) - AuraXLab 私有书签同步 —— 应用内注册/登录 AuraXLab 账户,按版本化并发控制上传加密 vault(服务端零知识,可自托管)
- 注册采用「先验证邮箱」流程:填邮箱 → 收 6 位验证码 → 验证通过后再建号(账户直接 confirmed,可立即登录)
- 注册字段在本地按与服务器一致的规则预校验(邮箱/用户名格式、密码 ≥ 8)
- 用户手册入口 —— Help 菜单与命令面板新增「User Manual」,跳转至 AuraXLab 站点的在线用户手册(
@tauri-apps/plugin-shell在系统浏览器打开) - 云同步联调测试 —— 新增四后端(GitHub/Gitee Gist、WebDAV、AuraXLab)provider 集成测试:默认对内置 mock 服务跑 encrypt→push→pull→decrypt 全链路;
--ignored的真实端点测试可凭环境变量对真实服务联调(dev-dependency:tiny_http) - Phase 5: 协议打磨、嵌套书签与 Shell 集成
- Telnet IAC 支持 BINARY/ECHO/SGA、终端类型协商和 NAWS 窗口尺寸更新,未知选项保持安全拒绝
- Local/SSH/Telnet/Serial 原始流自动识别
rz/sz,内置 Zmodem 上传、下载、进度、取消及安全文件名处理 - 书签分组升级为任意层级文件夹,支持导入 OpenSSH config 与 PuTTY
.reg会话并自动去重 - xterm OSC 133 Shell 集成记录命令、退出码和滚动标记,支持命令导航、重跑、复制及提示符降级识别
- 四类会话统一复用 stream pump,避免协议帧进入 UTF-8 解码与终端渲染
- Phase 4: SFTP、Snippets 与输出规则
- 输出规则引擎统一支持关键字/正则高亮、响铃、桌面通知、自动应答、冷却时间及全局/主机作用域
- Quick Buttons 升级为 Snippets:多套工具栏、分组、主机/书签组绑定、
{{变量}}参数和 Raw 控制字符发送 - SFTP 支持拖放上传、顺序传输队列、可选断点续传及 SSH 连接后自动打开
- 远程文件双击进入轻量 UTF-8 编辑器,支持
Ctrl/Cmd+S回写、2 MiB 限制与未保存保护 - SSH 端口转发 / 隧道管理器(Phase 2,对标 MobaXterm / SecureCRT 隧道管理)
- 支持三种转发模式:本地
-L、远程-R、动态-D(内置 SOCKS5 代理) - 图形化隧道管理器(
Port Forwarding…,View 菜单或命令面板打开):新增/编辑/删除隧道,逐条启动/停止,实时状态(starting/active/error)与错误提示 - 隧道可保存进书签并随连接自启(
autoStart);自动重连后远程转发自动重建 - 本地/动态转发绑定端口冲突即时反馈;会话关闭时自动回收其所有隧道
- 命令面板(Command Palette)
Ctrl/Cmd+Shift+P唤起模糊搜索弹层,↑/↓导航、Enter执行、Esc关闭- 聚合新建会话、开关书签栏/SFTP、打开端口转发、分屏、终端查找、字号、全屏、设置等动作,以及逐条书签快连
- 终端查找功能
- 支持
Cmd/Ctrl+F打开当前活动终端的搜索栏 - 支持
Enter/Shift+Enter与按钮方式跳转到上一处或下一处匹配 - 支持大小写匹配、整词匹配、正则表达式三种搜索选项
- 在分屏场景下始终对当前焦点终端生效,并显示匹配计数或无结果状态
0.1.8
新增
- 全新 SSH 重连模式
- 支持四种重连模式:
Manual(手动),Simple(简单重试),tmux,screen - 默认为
Manual模式,避免意外重连导致的输入丢失 - 增加手动重连快捷操作:连接断开后,可直接点击底部状态条或按下
R键快速重连 - 优化重连 UI 提示,连接断开时显示明显的提示状态条
- 完美兼容旧版本的
autoReconnect布尔值配置,自动迁移至新模式
0.1.7
新增
- Windows 资源管理器上下文菜单集成,支持"在 AuraTerm 中打开"功能
- 通过 NSIS 安装程序注册 Windows 资源管理器上下文菜单
- 支持在文件夹和文件夹背景上右键打开
- 实现命令行参数解析以接受启动目录
- 后端支持 PTY 会话的可选工作目录
- 新增
get_startup_dirTauri 命令供前端获取启动目录 - 从上下文菜单启动时自动切换到指定目录
- SSH 自动重连功能(通过 screen/tmux)
- 使用 screen/tmux 实现 SSH 自动重连
- 提示是否附加到现有会话
- 使用 'at-' 作为会话前缀
- 添加后端处理和前端 UI
变更
- 窗口位置和大小持久化
- 将窗口位置/大小保存到设置中,启动时恢复
- 限制恢复的边界到可见显示器工作区
- 节流和去重保存
- 新增 WindowBounds 类型和相关设置迁移
改进
- PTY 配置优化
- 为本地 PTY 子进程显式设置 TERM=xterm-256color
- 从密码数据库(登录 shell)解析默认 shell,而不仅仅依赖 $SHELL
- 仍支持通过 settings.shell_path 配置的 shell
- 以登录 shell 启动(argv0 加 -basename 前缀)以确保正确的登录初始化
- 添加 libc 依赖以读取 passwd 条目
0.1.6
新增
- 添加版本同步脚本 (scripts/sync-version.mjs)
- 设置中新增日志保存默认路径和默认文件名模板设置
- 日志文件名模板支持多种占位符:
- 时间占位符:
{timestamp},{datetime},{date},{time},{yyyy},{MM},{dd},{HH},{mm},{ss},{unix} - 会话占位符:
{session},{protocol},{host},{user},{port},{serialPort},{baudRate} - 连接对话框支持自定义日志保存路径,自动按模板生成默认路径
变更
- 重构构建和发布流程,优化 Makefile
- 移除 repackage 目标,调整 release/upload 逻辑
- 版本更新至 0.1.6
- 全局样式从 index.html 移至 main.ts
- AboutDialog 改为运行时获取版本信息
- 优化终端组件键盘事件处理
- 日志文件名中的时间占位符在连接建立时解析一次,确保每个会话固定一个日志文件
改进
- release.py: 重构为从
src-tauri/target/release/bundle目录读取构建产物,不再依赖目录遍历 - release.py: 自动提取构建产物的发布日期(从文件修改时间)
- upload.py: 简化文件查找逻辑,直接从 target 目录读取 exe/dmg 文件
- upload.py: 移除不必要的 JSON 文件检查,改由 release 目标确保 JSON 存在
- upload.py: 简化文件列表验证,不再检查空列表
- vite.config.ts: 配置
manualChunks: undefined优化打包策略 - package.json: 添加版本同步脚本和 tauri 命令前的版本同步步骤
- RemoteFileManager toolbar: reordered buttons (Up, Download, Upload, Refresh, New Folder, Delete)
- Toolbar now uses icons instead of text labels
- All UI and messages switched to English
- Menu structure expanded: File/View/Help menus now expose all major features (new session, close tab, bookmarks, remote files, settings)
- Improved menu accessibility for Windows/macOS
- UI polish: button layout, icon centering, disabled state