变更日志

VelaTerm 的所有重要变更,最新版本在前。

v0.1.91 是首个公开发布的版本;此前的版本号均为内部测试版本,不在记录范围内。

v0.1.108

最新版本
  • Claude、Codex 和 OpenCode 新增实验性对话视图,支持流式回复、思考过程、工具详情、权限审批和提问表单。首次配置仍默认使用终端视图。

  • 对话控件按各引擎能力提供模型设置、消息排队、插话、文件补全和图片附件。

  • 新增对话内容搜索、文件链接、图片操作与独立对话字体,改善长会话阅读;远程历史渐进加载,工具详情按需读取。

  • 消息提交回执用于断线后的结果核对;结果不确定的提交保留待确认状态,不自动重复发送。

  • 新增 vrefervsearch,用于读取和搜索其他会话;vrefer --ask 可让智能体代读。vorchvstat 提供多智能体协调与状态查询。

  • 记忆条目支持标签、正文直接编辑、未保存修改保护及整理配置;历史导入改进筛选与选择,图谱导航同步完善。

  • 公网共享客户端支持账号与设备绑定、按范围访问 AI 会话及加密中继连接;访客图片上传和复杂 MCP 表单仍不支持。

  • Codex 恢复 ID 会与已落盘历史核对;确认历史缺失时明确报错,不再静默启动空白会话,已有终端进程仍可重新附着。

  • 回退范围遵循引擎能力:Codex 仅回退对话,不恢复文件。OpenCode 回退范围处理与目录预检查仍有已知限制。

  • 发布升版保留已锁定的依赖版本。跨平台安装升级及真实 AI 联调验收仍待执行,自动化检查不替代这些验收。

v0.1.107

最新版本
  • 🧠 全局记忆(实验性):由 Claude 或 Codex 把会话整理成按主题维护的共享知识库
  • 🕸️ 代码图谱(实验性):为工作目录建立索引,浏览符号之间的关系,并与记忆相互关联
  • 🔎 会话中可以用 vknowledge 查询代码和记忆
  • 🖥️ SSH 连接可以镜像远端桌面版:标签、分屏和当前会话在两台机器上保持一致
  • 🪟 SSH 远程连接的目标机器可以是 Windows
  • 📥 可以从项目目录导入已有的 Codex、Claude 和 OpenCode 会话
  • 🤖 新增 OMP 智能体
  • 🎚️ vspawn 可以指定子会话使用的模型和推理强度
  • 🌿 vspawn-tree 在集合中同样可用,运行中的 worktree 会话显示分支图标
  • 🔤 搜索优先匹配完整词语,并高亮实际匹配到的内容
  • 🖱️ 鼠标中键点标签即可关闭
  • ⌨️ macOS 浏览器中可以用 ⌘D、⌘⇧D 分屏
  • 💬 输入法组字时画面不再跳动,组字串里能看到光标
  • 🪓 菜单里的分屏只作用于当前焦点窗口,每次分屏都会记入 logs/split.log
  • 📁 远程目录选择对话框会保留你输入的路径
  • ℹ️ 信息面板:启动时间与已运行时长显示在同一行,macOS 增加平均负载
  • 🔑 密码输入框不再出现浏览器自带的显示按钮

v0.1.106

最新版本

工作区

  • 侧边栏新增“集合”(Collection):不与磁盘文件夹绑定的顶层容器。 有些会话本身并不属于某个代码仓库——比如远程会话、浏览器页面,或者只是随手用来跑跑命令的临时终端。此前它们只能放在具体项目里,显得格格不入。“集合”是一个具名的独立顶层容器,在磁盘上没有对应的底层文件夹。由于它没有项目根目录,相关的不适用操作已直接在界面上隐藏,不再在点击后才报错:“新建 Worktree 会话”、“移动到 Worktree…”以及新建会话对话框里的 Worktree 选择器都会对集合隐藏。同时,新建会话对话框中增加了“工作目录”选项,默认指向用户主目录,并配有桌面原生文件夹选择器。如果启动会话时未指定目录,现在会默认从用户主目录开始,不再继承应用程序自身的启动路径(macOS 上此前为 /)。

  • 资源面板现可显示整机资源,而不仅是当前会话。 此前该面板只显示当前会话自身进程树的 CPU 和内存占用,很难判断究竟是当前会话耗尽了资源,还是整台机器本身就已过载。现在面板拆分为了 THIS SESSION 与 SYSTEM 两部分。其中 SYSTEM 部分提供了 CPU、内存和 Swap 交换分区的进度条(使用率超过 70% 显示为黄色,超过 90% 显示为红色),并附带一行平台专属指标:macOS 显示内存压力(memory pressure),Linux 显示按 CPU 核心数归一化后的平均负载(load averages),Windows 则不显示(无对应指标)。如果你只关心当前会话,可以在面板顶部取消勾选 "system"——系统相关指标会随之隐藏,后台采样也会彻底停止。此偏好设置会自动保存,并应用到所有会话的面板中。

  • Windows 和 Linux 现已支持菜单栏,可通过 Alt 键调出。 macOS 自带原生系统菜单,而 Windows 和 Linux 此前只能通过点击标题栏图标来打开设置、检查更新或进行分屏。现在,只需单独按下并松开 Alt 键即可显示或隐藏菜单栏。带有 Alt 的快捷键不受任何影响——由于 Alt 在终端中充当 Meta 键前缀,像 Alt+B、Alt+F 等快捷键依然会直接透传给 Shell;只有未向终端发送任何内容的单次 Alt 按键才会触发菜单栏。菜单栏包含“文件”(设置、检查更新)、“终端”(新建终端、向右分屏、向下分屏)和“帮助”(官网、反馈、分享),并会展示与你的自定义快捷键一致的提示。菜单栏同时支持鼠标和键盘操作:按 Esc 键可关闭当前打开的菜单并隐藏菜单栏,将焦点重新交还给终端。

  • 菜单中的“清除通知角标”可清除以往无法清除的角标。 程序坞(Dock)角标的未读计数包含了未读会话数和未处理的生成确认卡片数。但侧边栏的清除按钮仅在有未读会话时才会出现,且只能清理会话状态。一旦遗留了未处理的提示卡片(例如来自已关闭的窗口或已删除的会话,卡片已无法再在界面上显示),Dock 角标就会卡在 1 上怎么也消不掉。现在新增的菜单项能将所有会话标为已读、将所有待处理的生成请求置为拒绝,并直接将操作系统的角标计数清零。这在 macOS 上尤为实用,因为 macOS 在重启应用后依然会保留之前的 Dock 角标计数。

  • 命令读取文件或等待系统响应时窗口不再卡死。 此前同步的 Tauri 命令是在主线程上执行的,运行期间会导致整个 UI 界面完全卡死。经排查,全部 43 个命令中有 13 个在主线程上执行了 I/O 操作:macOS 请求通知权限时可能阻塞等待用户确认长达一分钟;读取长会话的录制文件时需要按 64 KB 分块遍历几十兆数据;粘贴截图时会直接同步写盘;获取会话工作目录时需要创建子进程执行 lsof。现在这 13 个命令都已移出主线程改为异步执行。按键事件处理依然保留在快速通道中,保持不变。

远程访问

  • 主机端现已显示连接的远程客户端。 会话镜像是双向同步的,远程客户端可以调整主机端的界面布局,但此前主机端根本无法感知是否有客户端接入,更不知道对方是谁。现在标题栏会显示一个 "Mirrored by N"(已由 N 个客户端镜像)角标,点击即可查看已连接客户端的列表,包括客户端名称、IP 地址和连接时间戳。客户端名称会在加密握手阶段上报(若未提供则默认显示为 "Unnamed")。

AI 智能体

  • 账户用量现改为每台机器获取一次,而非每个会话独立获取。 用量配额是按账户计算的,但此前每个会话的“信息”(Info)面板都会单独请求一次用量数据。如果打开十个会话,就会发起十次一模一样的重复请求——这极易触发 Claude 严格的速率限制,导致面板直接显示空白。现在改由统一的后台轮询服务维护一份数据快照,所有会话共享这一快照,并在数据更新时收到广播通知。该服务仅会轮询你当前正在使用的服务商(通过检测是否存在 ~/.claude~/.codex~/.grok/auth.json),且不会读取系统钥匙串,避免弹出多余的权限确认窗口。快照会持久化保存到磁盘,因此重启应用后,面板可以直接展示缓存的用量数据,无需等待初次轮询完成。当笔记本电脑从睡眠中唤醒时,也会立刻主动刷新,而不必等待下一个计划轮询周期。若连续轮询失败,重试退避时间最多会延长至 8 倍。此外,在“设置”中,刷新间隔输入框旁新增了明确的开关,取代了之前语义模糊的“设为 0 秒”。

  • 用量刷新失败时明确标记为已过期,而不再假装是最新数据。 此前一旦刷新请求失败,客户端会悄悄返回本地缓存并当作刷新成功处理——不仅更新了时间戳、清除了错误信息,还重置了退避计时器。这导致在触发速率限制时,面板虽然每 5 分钟轮询一次,界面看起来却像一切正常一样。现在刷新失败后仍会展示缓存数据,但会在服务商名称旁显示一个黄色的 stale 角标。鼠标悬停在角标上即可查看提示气泡,了解失败时间、报错原因以及当前显示数据的已存在时长。“更新时间”会如实显示上一次成功同步的时间;系统也会严格遵守服务端返回的 retry-after 重试等待要求(手动点击刷新仍会立即执行)。

  • 各模型每周配额现已显示在用量面板中。 除了整个账户的 5 小时与 7 天用量限制外,用量接口还会返回具体特定模型的每周配额。此前这部分数据一直被忽略,使用 Fable 等模型的用户只能看到账户总用量,而无法查看特定模型的剩余额度。现在这些细分明细会按模型系列分类,展示在总用量下方。

  • 重新打开 OpenCode 会话可恢复其聊天历史记录。 此前应用会通过 opencode session list 来检查会话是否还存在,但该命令只会查询当前工作目录下的会话。由于桌面应用是在自身的启动目录(在 macOS 上为 /)下运行的,因而查不到已有的会话 ID,导致恢复会话时直接默默打开了一个空白会话。现在,会话检查会直接查询指定的会话 ID,并且只有在命令明确确认会话已删除时才会将其视为已删除。遇到其他错误一律视为状态未定,应用会继续尝试恢复会话,避免意外丢失会话历史记录。

界面

  • 使用输入法(IME)输入时现可正常显示预编辑文本。 此前在三大平台上,使用输入法(如拼音、假名等)打字时,未按回车上屏的预编辑文本完全看不见。其原因是一条自定义 CSS 规则:xterm 原本是在一个无尺寸约束的浮层容器中渲染预编辑文本,但此前为了实现终端长文本折行所添加的 right 约束,导致该容器的计算宽度变成了 0,再加上 overflow: hidden,文本便被彻底裁剪隐藏了。现在该规则已被移除,仅保留了对浮层默认白底黑字配色的覆盖(原默认配色与任何主题都不匹配)。与此同时还顺带修复了一个关联问题:xterm 此前为了给输入法候选词定位,会把隐藏的 textarea 放大以匹配浮层尺寸,但事后从未将其恢复缩小,残留的隐形浮层会遮挡该行区域内的鼠标点击与文本选中。

  • 在 macOS 上,Ctrl 快捷键不再触发 Command 绑定的快捷键。 此前在 macOS 上判断修饰键时,程序把 Cmd 和 Ctrl 当成了等价按键。这导致终端原生快捷键与应用快捷键发生冲突:Ctrl+D(发送 EOF)误触发了分屏,Ctrl+W(删除前一个词)误关闭了分屏,Ctrl+F、Ctrl+T 和 Ctrl+O 等按键也会被应用直接截获。由于新建分屏时没有任何提示,经常让人感觉分屏窗口是凭空冒出来的。现在 macOS 桌面端专属使用 Cmd 键作为快捷键修饰键,而其他平台(以及通过浏览器连接到 Mac 的 Web 端)则统一使用 Ctrl。

  • 下拉菜单在选中选项后不再立即重新打开。 此前外层包裹的 <label> 元素会将整行的点击事件冒泡回触发按钮,导致点击选中某个选项后,下拉菜单又瞬间被重新点开。

修复

  • Linux:AppImage 恢复正常启动。 0.1.105 版本的 AppImage 在 Ubuntu 22.04 下会在窗口出现前崩溃,原因是无法启动 WebKit 的辅助进程。AppImage 打包工具会将二进制文件中的 /usr 字符串替换为 ././(通过保持字符等长来进行原地打补丁),这就要求启动脚本必须把工作目录切换到 $APPDIR/usr,路径才能被正确解析。而在 0.1.105 中,为了防止环境变量泄漏到子 Shell 而引入的自定义启动脚本虽然转发了环境变量,却漏掉了切换工作目录这一步。现在启动脚本已能正确切换目录,并配有构建期断言以防问题再次发生。0.1.104 及更早版本不受该问题影响。

  • Windows:通知恢复提示音播放,且点击通知可跳转至对应会话。 Windows 下的通知此前误向通知插件传递了 macOS 的声音标识符。因为系统无法解析该名称,便直接静音处理——导致无论怎么设置,Windows 通知都一直没有声音。此前在两个版本前,为了临时规避一个问题,Windows 通知被绕道交由该插件处理,而那个问题在同一版本中其实已得到解决。现在已撤销该临时方案:通知重新经由原生通道发送,恢复了提示音播放以及点击通知跳转至对应会话的功能。

  • Windows:框线字符与块元素恢复对齐。 终端边框字符此前使用了不等宽的回退字体进行渲染,导致视觉模糊、错位。即便修复了该问题,用于进度条和 Claude Code 吉祥物的块级字符在每个字符单元格右侧仍会留有一条发丝般的细微缝隙,因为回退字体的宽度略窄于终端主字体。现在这两个字符范围均改由应用内置的 JetBrains Mono 字体子集提供,确保字符字形宽度完全匹配。

  • Windows:git 可在完整版 Git Bash 中正常运行。 尽管完整版 Git Bash 安装成功,但在终端中运行 git 仍会提示“command not found”,并反复提示用户安装完整版 Git Bash。原因在于 Git Bash 只有在明确获知自身所在的目录树路径时,才会把 mingw64/bin 添加到 PATH 环境变量中;而应用的 Shell 启动器此前漏掉了该参数,导致仅存在于该目录下的二进制文件(如 gitcurl)无法被找到。此外,安装引导的下载提示现在会根据宿主系统的架构自动选择匹配的安装程序,不再一律默认选用 64 位版本。

  • Windows:删除 Worktree 恢复正常,重新安装 Kiro 钩子不再产生重复项。 此前删除 Worktree 的命令是在目标 Worktree 自身目录下执行的。由于 Windows 系统禁止删除当前活动进程所在的工作目录,该操作总会因权限错误而失败;现在相关 Git 命令均改在主仓库根目录下执行。此外,钩子检测逻辑此前直接拿正斜杠路径与 Windows 反斜杠路径进行比较,导致检测失败并在每次重新安装时追加重复的钩子条目。

v0.1.105

最新版本

工作区

  • 会话状态、未读标记、进程还活着没有,现在都由后端说了算,各端看到的是同一份。 这些结论过去是各客户端各自从自己看到的信号里推出来的,于是「未读」的实际含义是「在这个窗口里没读过」:浏览器里读完,桌面端那份还在,状态筛选的动态增加又把那一行推回共享名单,右键「刷新状态」都去不掉。状态事件也要等这条连接自己启动过某个会话才注册,所以浏览器新连上来,只有自己开过的会话有圆点,其余一律没有。现在后端为每个会话保存一份权威记录——智能体、状态、进程是否活着、未读标记——客户端连上和重连时批量拉一次,之后任何变化广播给所有端。客户端上报的是观察,下结论的是后端。于是手机上读过一个会话,桌面端的未读跟着清;新连上来的浏览器,从没打开过的会话也有对的圆点。原先散在前端的那几条仲裁规则连同它们的理由和测试一起搬了过去:权威钩子报过一次,此后从裸输出猜出来的结论顶不动它;持续有输出只在「有智能体、不是 codex、且还没权威」时才算忙;1200 毫秒的工作态保持,防止刚开始工作就被紧跟着到的结束事件顶掉。读屏是唯一的例外,它要的是排好版的网格,只存在于客户端:由持有终端尺寸的那一端上报读到的结果,后端裁决收不收,其余客户端的上报一律拒绝。万一哪里不对,在 localStorage 把 vlx-arbitration 设成 frontend 就交回前端旧链。

  • 重启一个会话,不会把对端的标签一起关掉。 pty://killed 原来是空载荷,对端分不清这是重启还是关闭,一律按关闭处理,把 pane 删了再把这个布局镜像回来。现在这个事件会说清是谁杀的、为什么杀,重启就留着 pane 等新进程接上。载荷缺失或者不认识的原因仍然按关闭处理——给一个再也不回来的会话留着 pane,屏幕上就杵着一个死终端,比误关一个本该重启的更糟。

  • 浏览器连上刚恢复工作区的桌面端,不会再把那些会话全部真的拉起来跑。 桌面恢复工作区时只画占位卡片、不启动进程,但这个判断只存在于桌面本地;浏览器跟着镜像布局看到这些会话,分不清「没在跑」和「在跑,只是本端没打开过」,于是挂载终端——挂载就是启动。现在跟着对端布局进来的叶子,后端说底下没进程就画占位卡片。用户自己在本端打开会话仍然算启动意图,不走这条分支;本端正显示着的终端也不受影响,进程退出时不该把你还想读的输出换成一张卡片。

  • 一端改了设置,另一端立刻跟着变。 设置一直是后端权威,但改完不吭声,另一端要等到下次启动才知道。远程模式下这不只是显示对不上:一端关掉「状态筛选动态增加」,另一端开着就照样往共享名单里塞;同时开启的标签数上限小的那端,会把别人的后台标签挤掉。现在写入设置会广播是哪个键变了,各端再走启动时那条路重新读一次,所以「受保护的值不发给远程调用方」这道过滤原样生效——广播里只有键名,从不带值。手机端此前既不上传也不下发设置,这次一并补上。

  • 浏览器先等镜像对齐,再恢复自己的布局。 远程窗口有两份布局来源,一份是自己存在 localStorage 里的,一份是镜像模式下主机推过来的,谁先到都会被后到的那个覆盖。先落本地那份的代价不只是闪一下:挂上一个终端叶子就是真起一个进程,碰上进程早就没了的会话,那次挂载实打实起了个没人会看的 shell,而浏览器端卸载走的是分离不是杀掉,于是这个 shell 就留在那了。现在浏览器先等第一次对齐有结论再恢复,最多等两秒;后端慢或者连不上就退回本地布局,总比空窗口强。手机端和镜像关掉的情况立即放行,不空等。

远程访问

  • SSH 连接时可以给远端起的服务打开镜像模式。 这个开关本来在「远程访问」面板里,但 SSH 连的是远端机器上临时起的无界面服务,那台机器没有面板可点。现在按住 Option 点「连接远程」,SSH 模式里多出一个「多端界面镜像」勾选框,默认不勾。这个值跟着连接走、记在服务进程内存里,不写进远端机器的库:勾了「复用远端桌面版的数据库」时写的就是人家桌面版自己的库,一次 SSH 连接不该顺手改掉别人面板上的开关。选择按主机名记住,下次从历史里点同一台机器会带回来。复用已经在跑的远端服务,现在要求版本、数据模式、镜像模式三者都对得上——任一不同就收掉旧服务重起,重起会丢远端正在跑的会话,所以这个选项和数据库开关一样藏在 Option 后面。

  • 被镜像的那一端会说出来。 跟随端的标签和分屏以前会莫名其妙自己变,屏幕上没有任何东西说明变化从哪来。现在标题栏多了一个 Mirrored 徽标,鼠标悬停有说明。主机自己不显示——开关就在它手里。

  • 文件可以在你的机器和跑着终端的那台机器之间来回传了。 远程访问一直能看到对面的文件,却没法把它拿回来,也没法送一个过去,唯一的办法是在终端里敲命令。现在 Files 面板的文件右键菜单里有下载,标题栏有上传按钮,把文件从桌面拖到某个目录行上也能传过去。两个方向都走和别的功能同一条认证连接,所以局域网浏览器、手机、桌面开的远程连接窗口都能用。传输是分块走的,树下方有一条队列显示进度,切到别的面板也不会中断。下载就是一个普通的下载链接,交给浏览器自己的下载器:流式落盘、显示速度和剩余时间、能暂停能续传,文件多大都行,每个浏览器都一样,手机上也一样。链接里带的是为这一个文件现签的票,几分钟就过期——这台服务的凭证放在请求头里,而浏览器点开链接时不会带请求头。上传时先写一个临时名字,全部传完才改成正式名字,中途断了不会在目标位置留下一个只有一半的文件;目标目录里已经有同名文件的话,一开始就拒绝,不会白传一趟。上传会显示速度和剩余时间,而且断线不算完:某一块失败会退避重试大约一分钟,重试前先问服务端那个临时文件到底传到哪儿了,而不是把可能已经写进去的那一块再发一遍。真放弃了也把这些字节留着——把同一个文件再拖一次就接着传,刷新过页面也一样,只有点取消才会把传了一半的东西扔掉。

AI 智能体

  • Antigravity 和 Copilot 的会话也用首条消息命名了。 这两个智能体此前都没接上自动改名,左树里就是一排「Antigravity 1、2、3」。Antigravity 的钩子事件根本不带用户原文,只给会话 id 和对话记录路径,所以改从对话记录里读第一条消息,后面跟着的元信息块不进标题。Copilot 的事件连事件名都没有,各类事件靠形状区分,于是「有 prompt、没有工具名」的那种就当成用户提交——这样一来,起会话时带的那句初始 prompt 和工具调用都不会被误认。

  • Antigravity 关掉再开,历史对话还在。 续接要靠会话 id,而从启动参数里认 id 的那个解析器不认识 Antigravity 的写法,于是 --conversation=<id> 一直没有锚点可指,重开的会话次次都是空的。

  • vspawn --yes 直接派生,不弹确认卡。 开着「派生前先确认」的人,连开一串子会话时要一张张点。加上这个标志(也认 -y--no-confirm)就跳过这一次的确认卡,按默认设置直接起。它不改设置本身,下一次不带标志的派生照旧会问。

  • 派生卡的模型框现在能打字。 原来它是个纯下拉,只能选列表里有的,可智能体认的标识符远不止那些:带日期的 claude-opus-4-6、带厂商前缀的名字、本地配的别名,都列不出来。现在它是个文本框,右边挂下拉给出已知的那些当快捷方式。列表只是建议不是白名单:打什么就传什么,空着就是不带 --model;输入时列表跟着过滤,自定义标识符匹配不到就自然收起来。

界面

  • 各处的下拉收成同一个组件。 这些下拉本来是照着同一份代码复制出来的,复制了十几遍,然后各自跑偏:面板背景有三种、阴影四种、悬停色三种,触发框高度 26、28、32 都有,选中项还留着多选清单才需要的打勾。现在合并分支的来源与目标、设置里的语言与默认 Shell 与两种字体、智能体面板的智能体选择、两个工作树对话框、新建和恢复会话的智能体类型,以及表单弹窗里最后一个原生 select,都由同一个组件承担。顺带补上了它们原先都没有的键盘操作:上下键移动、回车选中、Esc 关掉下拉而不会顺手关掉外层弹窗、Home/End 跳首尾。状态栏那两个是菜单不是下拉,行为不动;左树的状态筛选是多选,保留打勾。

  • 「远程访问」面板的密码可以看明文。 它一直是个裸的密码输入框,看不见自己打了什么;小眼睛的实现早就有,只是留在连接面板自己的文件里。现在两边共用同一个组件,面板关掉再开,回到掩码。

  • IP 选择器不再套着系统外观。 它原来用的是原生 select,WKWebView 会给它套一层系统样式,配深色面板很别扭,跟上面换掉的那些下拉是同一个毛病。现在改用公共组件,标题从「IP address」缩成「IP」——它左边本来就有说明文字,不用再重复一遍。

修复

  • 每次检查更新都真的问服务器。 开着不关的客户端会被钉死在它第一次看到的那个版本上:查到 0.1.101 之后,0.1.104 发出来了它还在提示 0.1.101,点「检查更新」也只是把那张旧对话框重新打开——因为有待处理的提示时,原来的实现直接返回,根本不发请求。现在每次都发。服务器报了更新的版本就换掉屏幕上那张提示,报同一个版本或者正在下载就保持原样;服务器说没有更新了,那张还挂着的提示就是过期的(版本被撤了,或者你自己已经装过了),一并撤掉。「手动下载」按钮现在打开官网的下载页,它以前给的是更新器自己的包,那个包是就地解压用的,人下下来没法装。

  • 快速销毁终端时不再弹整屏的错误浮层。 xterm 的视口在构造时排了一次滚动区域同步,reset 时又排一次,销毁时两个都不取消。一个终端在同一个任务里开了又关——远程连接时重建会话树正是这样——回调照样会跑,读到的是已经被清掉的渲染器,于是抛错。这个错来自定时器,try/catch 和错误边界都够不着,只能全局兜底,所以匹配得很窄:只有栈或消息里带着那次同步、并且提到渲染器或它的尺寸,才当成无害吞掉并记进请求日志。真崩溃照样弹浮层。

v0.1.104

最新版本

AI 智能体

  • 子任务确认卡给出的是每个智能体自己的模型,以及它真正认识的思考强度参数。 确认卡过去不管面对哪个智能体,都用 --model--effort 拼启动参数,但只有 Claude、Kiro 和 Antigravity 用这个写法——Grok 和 Zoo 叫 --reasoning-effort,Cline 叫 --thinking。于是给其余智能体选一次思考强度,等于往命令行里塞了一个它从没听说过的参数,会话直接起不来。现在每个智能体都给出自己的参数名和取值范围。模型控件也跟着各家 CLI 的实际能力走:能列出目录的(OpenCode、Grok、Crush、Antigravity、Cursor、pi、Kiro)会去问它要,给出真实列表;只有固定几个的(Claude、Codex、Kimi Code)给出那几个;剩下的给一个文本框,附上它期望的写法示例。没装或者没登录的智能体会直接说列表取不到,而不是一直转圈。选「Default」现在是把继承来的设定清掉,而不是留着旧值;选思考强度也不会再顺手把父会话传下来的模型弄丢。

  • 从 Kimi Code 会话派生的子任务仍然是 Kimi Code。 派生时用来继承父会话智能体的那张表里漏了 Kimi Code,于是它的子会话会悄悄退回默认智能体。

工作区

  • 分组建好之后还能改绑 worktree。 过去 worktree 只能在建分组的时候选,选完就定死,想换只能把分组删了重建。现在右键分组选「Move to Worktree…」,可以新建一个 worktree、绑到已有的某一个,已经绑过的分组则是改指向。改动只落在分组本身:分组里已有的会话保持它们创建时的目录——正在跑的会话没法在自己脚下换目录——之后新建的会话才会起在这个 worktree 里。

  • 镜像模式现在覆盖整棵左树。 它此前同步的是选中项和折叠的面板,搜索框、状态与标记过滤留在本地,理由是同步过去会打断正在查东西的人。这个理由说反了:镜像的意思是两个窗口持有同一份状态,不是一边把另一边的按键重放一遍——这边开着的过滤条件,那边也开着。真正打断人的,恰恰是两边看到的树不一样。现在左树的每个投影都跟着走:分屏结构、投影的名字、搜索词、状态与标记过滤,还有各自独立的折叠状态。快照格式升到第 2 版,版本对不上的一方会停止镜像,而不是套用半帧内容,所以升级期间一直开着的窗口刷新一下即可。

界面

  • macOS 上关窗口问的问题和退出一样了。 ⌘Q 和菜单里的退出都会走应用自己的确认,但红色关闭按钮是直接把窗口销毁——而承载确认对话框的 webview 就在那个窗口里。结果要么根本没有确认,要么只剩下降级的原生弹框:没有「保存工作区」勾选框,文案也没翻译。现在三个平台都会先把窗口留住,等你回答。

  • 「保存工作区」默认勾选,而且改了之后记得住。 丢掉布局的代价比多存一份用不上的快照大,所以这一项默认是勾上的。它此前还会忘事:这个设置要经过 400 毫秒防抖才落库,而退出会在这个窗口期里把进程杀掉,下次启动对账时便以旧值为准,把你的改动改了回去。现在退出前会先把这次写入刷下去,并且最多等 600 毫秒,后端卡住也不会让确认按钮一直转。(由 FarhadGSRX 贡献。)

  • 远程连接面板里的密码可以看明文。 URL 密码和 SSH 密码各有一个眼睛按钮,在掩码和明文之间切换。显示状态只属于这个输入框,面板关掉就复位,不会把密码留在屏幕上。

  • 左栏过滤器的角标会把所有生效的过滤条件都数进去。 标记过滤此前只是把按钮点亮、不作声,于是两个条件同时开着时角标却显示 1。现在状态和标记一起计数,和下拉里打勾的数量对得上;只开一个状态过滤时仍然保留那个彩色圆点。

修复

  • macOS 上的自动更新恢复正常。 v0.1.103 的安装包里混进了 ._VelaTerm.app 这类 AppleDouble 伴生条目,而更新器会去掉每条路径的第一层——这类条目去掉之后就成了空路径——于是它干脆拒绝解包。两个架构都中招,所有用 macOS 的 v0.1.103 用户都卡在了那一版。现在打包不会再写出这些条目。

  • 应用主题与系统不一致时,原生控件跟着应用走。 切换主题只改了应用自己的配色,没有同步 color-scheme,而那个值只在启动时按系统偏好种下一次、之后再没变过,于是系统深色 + 应用浅色时,复选框、下拉和滚动条还是深色的。(由 FarhadGSRX 贡献。)

  • 干净 clone 下来能编译了。 Rust crate 在编译期就要嵌入 ../dist,而 dev 命令并不产出这个目录,于是新克隆的仓库还没跑起来就先编译失败。现在构建脚本会在目录缺失时把它建出来。(由 FarhadGSRX 贡献。)

v0.1.103

最新版本

修复

  • Windows 上 Codex 会话不再拒绝启动。 每次开 Codex 会话都报 unexpected argument '--codex-hook' 然后立即失败,原因是生命周期钩子的 TOML 表通过命令行传入时带着空格和双引号,而 npm 安装的 codex.cmd 要经过 cmd.exe 重新解析——cmd.exe 会吃掉引号、按空格把值拆成多个参数。现在 Windows 上跳过钩子注入,状态检测退回到已有的 notify / screen / busy 启发式方式,仍然能报告忙闲状态,只是不如钩子精确。macOS 和 Linux 不受影响,继续使用钩子。

  • 回滚了 v0.1.102 的 Windows 输入法预编辑修复。 那个修复在恢复中日韩输入法预编辑浮层的同时,给它加了背景色、1px 边框和圆角,导致打字时终端里会冒出一个小框把拼音圈住——终端里不该出现这种框。由于浮层尺寸、helper 容器的几何计算和 textarea 清理三处互为前提,只能整体退回。Windows 上盲打中日韩的问题仍然存在,跟踪在 issue #6。

v0.1.102

最新版本

AI 智能体

  • 智能体预设:多个兼容的 CLI 可以并排使用。 过去每种智能体都写死了一个可执行文件,于是一个分支版本、一个 nightly 构建,或者另一个说着同样协议的 CLI,都没有地方安放——只能去改现有类型的启动参数,改完原来的那个就没了。现在一个预设自带可执行文件、图标和启动参数,并出现在新建会话菜单里,与内置类型并排。会话会记下自己是由哪个预设创建的,因此 Fork 出来的会话仍然用同一个可执行文件;在桌面端创建的预设也会出现在已配对的浏览器和远程客户端上,图标一起带过去——因为图标是以数据的形式传输的,而不是某台机器上的一个路径。已有会话完全不受影响:旧版本留下的数据库,启动后和以前一模一样。

  • 子任务确认卡可以挑模型和推理强度,一处回答,处处生效。 智能体请求派生子任务时,确认卡现在可以选模型,智能体支持的话还能选推理强度,两者都按父会话自己的启动参数预填,因此常见情况点一下就完事。在卡片上换成另一个智能体,两项会重新推导,一个 CLI 的模型名不会再跑到另一个 CLI 的命令行上。这张卡会出现在每个已连接的客户端上,在其中一个上回答,其余的会一起消失;第一个回答还会在服务端认领这个任务,于是在同一秒里用手机和桌面各确认一次,也只会创建一个 worktree 和一个子会话,而不是两个。

工作区

  • 镜像模式:所有客户端共用同一套布局。 终端数据流一直是共享的——一个 PTY,一条字节流——但围绕它的那套排布只存在于各个客户端自己的浏览器存储里,因此局域网里打开的浏览器有自己的一套标签和分屏,在一边重新排布,另一边毫无反应。打开镜像模式后,标签、分屏、当前会话、侧边栏选中项和折叠的面板都会发布给每个客户端,并被所有客户端跟随。开关由主机在远程访问面板里控制。在任何一端重新排布,另一端都会跟着变;某个会话离开本窗口的布局时是被分离,而不是被杀掉,因此跟随对端永远不会终结别人的进程;应用对端布局时也不会把键盘从正在本地打字的人手里抢走。手机不参与——手机上是两级导航,是另一种形态的界面,把桌面的分屏树复制过去对谁都没有好处。

  • 右栏的 Git 页签做成了能用的 Git 客户端。 它以前只会列出改动过的文件。现在它可以暂存和取消暂存单个文件或整组文件、放弃更改、写提交(含修改上一次提交),并显示提交历史以及每个提交涉及的文件和差异——分成已暂存、已修改、未跟踪和已提交几组,可以折叠起来。路径统一从仓库根目录处理,因此在子目录里打开的会话,操作的就是它显示的那些文件;处于分离 HEAD 状态时会如实标出,而不是显示一个叫 HEAD 的分支。

界面

  • ⌘Q 现在问的问题和关窗口一样。 应用菜单里的退出项原本是系统自带的那个,按下去直接终止进程:按 ⌘Q 会跳过关闭按钮会弹的「保存工作区」确认,同一个意图,换个方式表达行为就不一样。现在两条路都走同一个确认。如果显示确认的那个窗口在此期间重新加载或崩溃了,再按一次 ⌘Q 会重新询问,并回退到原生对话框,而不是让应用退不掉。

  • 快捷键提示显示的是真正能用的按键。 各平台的默认键位本来就不同,而浏览器会把 ⌘/Ctrl 加字母的组合留给自己——⌘D 是收藏,⌘T 是开标签页——所以当 VelaTerm 以网址方式打开时,macOS 上应用自己的 ⌘ 快捷键根本传不到页面。现在普通浏览器标签页在所有操作系统上都改用 Ctrl+Alt 这套键位,桌面应用和远程连接窗口仍然用 ⌘。工具提示和空标签页上的提示会显示当前实际生效的键位,包括你自己改过的,而不是写死的 ⌘ 组合;终端拦截的也正好是应用已经占用的那些组合,所以给某个操作换键,拦截也跟着换过去。

  • 字体预设覆盖了 Nerd Font 和中日韩字体,自己填的字体没装会明说。 预设列表加入了常见的 Nerd Font 和中日韩字族;手动输入的字体会回显并检查一遍:系统里没有这个字体,设置页会直接说出来,而不是悄悄回退到一个和你要的完全不像的默认字体。

  • macOS 上的输入框不再自动大写或自动更正。 系统的自动首字母大写、自动更正和拼写检查过去对应用里的每一个输入框都生效,会话名和命令输入框也不例外,于是「npm」被改成了「Npm」。现在这些在所有地方都关掉了。

Windows

  • 输入中文、日文、韩文时,预编辑文字和候选词窗口又能看见了。 这两样此前都是隐形的——只能盲打,按下回车才看到结果。原因出在我们自己的两条 CSS 规则上:承载预编辑浮层的容器宽度塌成了 0,浮层的 right 偏移在这个容器里算下来什么都不是。候选词窗口跟着一起消失,因为操作系统是按浮层的矩形来定位它的。现在浮层重新画出来了,配色也用上了应用自己的;承载它的那个隐形输入元素在组词结束后会释放自己占据的区域,因此在那一块上点击和拖动能落到终端上,而不是被一个一直盖着的空元素挡住。

  • 原生标题栏跟随浅色/深色设置。 应用保留了系统标题栏,而 Windows 在没被告知之前一直把它画成浅色,于是深色界面上方顶着一条白边。现在它会与应用保持一致,后续打开的窗口——比如 SSH 和远程连接窗口——也一样。选择「跟随系统」则把控制权交回操作系统,而不是钉死一个值。

  • 冷启动时那个多余的小方块没有了。 单实例插件会创建一个隐藏的消息窗口,却一直没给它自己样式里承诺的透明属性,于是 Windows 偶尔会把这个零尺寸窗口撑到最小尺寸,在启动过程中画出一个小方块。现在它是真的透明了;单实例行为没有变化。

性能

  • 远程访问首屏要加载的东西少了很多。 静态资源现在按需压缩,并带上缓存校验标记,因此第二次访问是重新校验而不是重新下载;语言包和终端的可选渲染器也改成用到时才加载,不再算进首屏的那一份。两项加起来,首次传输量降到原来的五分之一左右。

修复

  • 派生出来的子会话,现在和请求它的那个会话以同样的方式启动。 子会话过去既不继承父会话的权限模式,也不继承它的启动参数,于是一个跳过确认在跑的会话,它的子会话起来后反而要你确认,父会话上钉住的模型也丢了。现在两者都会继承,取不到就回退到该智能体类型的全局默认值——和「新建智能体会话」菜单用的是同一份。

  • 重连远程窗口不再误报「认证失败」。 窗口重连时,新的 WebSocket 和它取代的那个会互相竞争;失败一方的拆除被当成认证失败上报,于是横幅指责一个完全有效的配对被拒绝了。

  • 分组不能再被拖进自己的子树里。 把一个分组拖到它自己的某个后代上,会让整条分支从树上脱落,里面的会话从侧边栏消失,直到手工修复数据库才能找回。现在这个移动会被拒绝。

  • 从别的工具里启动 VelaTerm,智能体输出的颜色不会丢。 终端会继承启动它的那个程序的环境,因此从导出了 NO_COLORCIFORCE_COLOR=0 的 IDE 或智能体框架里启动,VelaTerm 里的智能体 TUI 会全部渲染成单色,尽管终端本身声明支持全彩。现在会话启动时会丢弃这些继承来的值;你自己在 shell 配置文件里导出的同名变量仍然生效,因为那份配置是在会话内部执行的。

v0.1.101

最新版本

远程访问

  • 可以选择分享链接使用的地址——Tailscale 地址现已显示。 地址列表过去只接受传统的私有 IPv4 网段,因此像 Tailscale 这样从运营商级 NAT 网段(100.64.0.0/10)分配地址的 VPN 组网,会被静默排除在远程访问面板和配对链接之外——尽管服务器早已可以通过这些地址访问。这些地址现在会列出;VPN 隧道排在最后,永远不会成为默认项。面板中新增的 IP 选择器(启动前和运行中均可见)会列出每个候选地址及其网络接口名称,并标记 VPN 隧道;选择某个地址后,其 URL 会移到最前,配对链接也会以该主机重新生成,因此复制的链接在只能通过 VPN 访问本机的设备上也能直接使用,无需手动修改 URL。配对链接下方的二维码可直接用手机扫描。选择会被记住;如果所选接口消失,面板会回退到"自动",但不会忘记你的选择。服务器本身保持不变,仍在所有接口上监听。选择一个在服务器启动后才出现的地址(例如稍后才连接的 VPN),现在复制的 URL 和二维码也会立即更新,而不再是只有配对链接跟随、其余要等到下次重启;VPN 隧道在所有平台上都排在 LAN 地址之后,服务器停止时所做的选择会决定启动后的第一个配对链接,重叠的链接重新生成也不会再用旧链接覆盖新链接。

  • 共享现在可以在重启后继续使用。 过去配对令牌在服务器每次启动时都会重新生成:只要退出并重新打开 VelaTerm,所有已分享的链接就会悄悄失效,每部手机都得重新配对。现在,令牌、已配对设备和设备封禁列表都保存在数据目录下一个仅所有者可读的文件里:已配对的设备在重启后仍可通过保存的 URL 直接重连(访问密码仍是必需的第二重验证),被撤销的设备也依然保持撤销状态。VelaTerm 还会记住共享处于开启状态:在服务器运行时退出应用,下次启动会自动在同一端口恢复服务——桌面应用和通过 --serve 运行的无界面服务器都是如此;如果是您自己停止的服务器,下次启动则不会自动开启任何东西。即使自动启动失败(例如端口被占用),应用也会正常启动,远程访问面板会显示失败原因。端口输入框现在会记住实际使用过的端口,而不再重置为默认值;「重新生成链接」仍是显式的作废开关:它会立即签发新令牌、让所有旧链接失效并覆盖保存的状态。访问密码本身永远不会写入磁盘——只保存一个内存困难型哈希(Argon2id)。

安全

  • 已配对设备无法再管理共享本身。 此前,任何已配对的浏览器都能调用与桌面应用相同的管理命令——创建新的配对链接(这同时会清空设备屏蔽列表)、列出并吊销其他设备、停止或重新配置服务器——而设置存储会把完整的设置表交给每个客户端,其中包括访问密码的内存困难哈希,以及下次启动要读取的自动启动设置。管理命令现在仅限桌面应用和 Electron 外壳使用;设置 API 会在已配对设备的每次读取中过滤远程访问相关键和 Gitea 令牌,并拒绝对它们的写入。已配对设备保留配对的本来用途——终端会话和完整的 shell 访问——但再也无法读取密码校验值、邀请或驱逐其他设备,或篡改下次启动使用的端口。读取、写入或删除已存储机密的命令——Gitea 令牌和已记住的主机密码——现在对已配对设备同样会被拒绝;接收路径的命令——读取、预览、写入、创建、重命名和删除,以及显示文件的 git 差异或选择克隆仓库的目标文件夹——会先解析符号链接,再拒绝位于 VelaTerm 自身数据目录内的路径(配对状态和密钥就存放在那里),其他所有路径照常可用,因此远程文件浏览和编辑不受影响。一项测试会枚举每个接收路径的远程命令,新命令无法悄悄绕过这项检查。当这些保护拒绝某个请求时,浏览器现在会显示经过翻译的提示,而不是原始的英文错误。

  • 吊销设备或重新生成链接,在双实例配置下也不会再丢失。 在开启自动启动的无界面 --serve 服务器上,两个服务器实例各自持有保存的配对状态副本并整体回写:通过一个实例完成的吊销或新配对链接,可能被另一个实例悄悄撤销。同一进程内的所有实例现在按数据目录共享单一配对状态:吊销与轮换立即在所有位置生效,文件只由一处写入,并且在真正的重启之间仍是权威数据来源。

  • 反复失败的登录会被限速。 访问密码的校验使用 Argon2id,代价刻意高昂——而任何能连到端口的人都可以尝试。同一地址失败五次后,后续尝试会在任何哈希计算开始之前被拒绝一分钟;哈希计算本身现在也在服务器事件循环之外执行,并对并发校验数量设有硬性上限:大量错误密码既不能再用内存困难哈希拖垮服务器,也不能拖慢已连接设备的响应。该限速器只存在于内存中,随服务器重启而重置;真正的屏障仍是配对令牌和密码。该限制现在由使用同一数据目录的所有服务器实例共享——--serve 双实例配置不再使尝试次数翻倍;并且在密码校验开始前就会预留一次尝试,使来自同一地址的并行请求无法绕过限制。被限流的浏览器现在会在登录界面看到专门的限流提示,而不是被告知密码错误;限流也不再像密码错误那样被记住:等待结束后,下一次尝试无需刷新页面即可再次通过。中途放弃的尝试——密码还在校验时标签页就被关闭——现在会立即释放其预留的名额,而不是在这一分钟剩下的时间里继续计入该地址;登录成功也只释放自己的预留,而不再清空该地址的全部记录:在共享网络地址背后,某人正确登录不再重置攻击者的尝试额度,已记录的失败只随其所在的一分钟过期。

  • 磁盘上和日志中的机密得到更谨慎的处理。 保存配对状态的文件和端到端加密密钥现在从创建那一刻起就仅所有者可读,而不是先写入再收紧权限;存有密码哈希的会话数据库同样仅限所有者访问。无界面 --serve 不再把配对链接中长期有效的机密打印到日志:当输出不是终端时,链接会被隐去,只显示一条提示;--print-pairing 可显式恢复原行为。设备注册表上限为 32 条,名称长度受限,已配对客户端无法让保存文件无限膨胀;保存吊销或新链接失败时,错误现在会返回给调用方,而不是只留在日志里。自动启动不再顶替已手动启动的服务器,过期的自动启动错误在您自行停止服务器后即会消失。

修复

  • 现在也可以在 Electron 外壳中管理配对。 生成配对链接、列出已配对设备和吊销设备此前只作为桌面(Tauri)命令存在;Electron 外壳和浏览器客户端使用的 WebSocket 分发器会返回 "Unknown command",导致远程访问面板在那里无法使用。现在这三个命令在两条传输通道上都经过同一套核心函数,两者不会再产生偏差;回归测试覆盖了新的分发路径,包括对一个正在运行的本地服务器实际生成配对链接。

v0.1.100

最新版本

AI 智能体

  • Kiro CLI 成为一等公民会话类型。 Kiro 会话在树里有自己的节点,状态点由 Kiro 自己的生命周期 hooks 驱动,如实反映工作中与等待处理;一个回合结束会发通知;重新打开节点自动接回同一段对话;启动参数、跳过确认开关、经 vspawn 派生子会话也都齐了——其它智能体已有的能力,Kiro 现在都有。VelaTerm 把你的默认 Kiro agent 克隆成自己的 vlx-term agent,只在副本上加一份只观察、不干预的生命周期 hooks 再启动它,你自己的 agent 文件全程不动,提示词、工具和 MCP 服务器原样带过来。Kiro 没有权限请求 hook,所以它等你批准的时候,状态点仍然显示为工作中。

修复

  • 终端里启动的程序不再继承 AppImage 自己的环境(Linux)。 AppImage 的启动器会把 PYTHONHOMEPYTHONPATHPERLLIBQT_PLUGIN_PATH 和 GStreamer 的插件路径指向包内的临时挂载目录,并把包内目录插到 PATHLD_LIBRARY_PATH 的最前面。终端会把整个环境交给它启动的 shell,于是系统的 python3 跑到包里去找标准库,根本起不来;其它动态链接的程序也会优先加载包里的那份库,而不是系统的。现在 VelaTerm 在启动 shell 或外部工具之前先把这些包内路径剥掉,你自己设的值保持不动。APPDIRAPPIMAGE 仍然可见,靠它们判断自己是不是从 AppImage 启动的程序照样拿得到答案。只有 AppImage 版本受影响,deb 包、macOS 和 Windows 行为不变。

v0.1.99

最新版本

终端

  • Shift+Enter 换行,不再直接提交。 终端协议里没有「带修饰键的 Enter」这种编码,因此 Claude Code、Codex 这类智能体命令行收到的只是一个普通回车,话还没写完就被发了出去。现在 VelaTerm 改发 ESC+CR,与这些工具在 iTerm2 上配置键位映射后期望的序列一致,多行输入终于可用——macOS 也包含在内,此前那里根本没有安装自定义按键处理。输入法组词期间不受影响,Enter 仍用于上屏候选词。

项目与组织

  • 单个会话的状态可以单独刷新。 在启用了状态筛选的窗格中,会话菜单新增「刷新状态」,只按该窗格自己的条件重新判断这一个会话并决定去留,其余会话原地不动。该操作归属于菜单所在的窗格,因此递归切分时不会误用其它窗格的筛选条件;结果按窗格分别保存,重启后恢复。
  • 清除标记只需点一下。 再次选择已生效的表情即可取消,原先单列的清除项和分隔线随之移除。筛选按钮上的表情徽章也一并去掉:按钮高亮已经说明表情筛选处于启用状态,具体是哪个表情菜单里写着。

修复

  • Linux AppImage 的桌面集成在任何机器上都能安装。 打包进去的图标是一个指向构建机绝对路径的符号链接,因此 Gear Lever、AppImageLauncher 这类工具无法提取图标,尽管程序本身运行正常。现在改为相对链接。glibc 要求也更正为 2.35——此前只测了主程序,未计入随包分发的库——因此桌面端支持的最老发行版为 Ubuntu 22.04。

v0.1.98

最新版本

AI 智能体

  • Grok Build 成为 VelaTerm 的一等智能体。 现在可以安装、启动和续接 Grok 4.5;稳定的会话 ID、官方 lifecycle hooks、准确的工作与权限状态、合并后的转录、用量详情和随主题变化的官方图标,在桌面端、浏览器端和移动端保持一致。

项目与组织

  • 把项目左栏切分成彼此独立的工作视图。 任一树窗格都能继续向下切分,并在重启后恢复各自的搜索、状态与表情筛选、折叠状态和分隔比例。所有窗格仍是同一份后端项目树的投影视图,编辑会同步生效,不会复制业务数据。
  • 标记并筛选节点时不再丢失上下文。 项目、分组和会话都可以添加表情标记。命中标记的容器会保留完整子树;状态成员在操作期间保持稳定,同时支持动态增加和手动刷新;状态与表情条件按并集合并。
  • 直接创建空项目。 选择父目录并校验名称后,可在同一流程中创建并导入文件夹。中途导入失败时只会重试导入,不会重复创建目录。

界面

  • 在社区常用的平台分享 VelaTerm。 分享弹窗现在支持微信朋友圈、微博、小红书、X、Reddit、Hacker News、LinkedIn、Facebook、Telegram 和 WhatsApp;微信提供二维码流程,更新弹窗中也新增了分享引导。
  • 细节交互更顺手。 临时终端标签在保存为正式会话前即可重命名;普通输入框会关闭移动键盘的自动首字母大写,同时不改变终端输入行为。

v0.1.97

最新版本

AI 智能体

  • 会话不会再卡在“工作中”。 Codex 通过各自独立的短命进程上报工具活动和回合结束,回调到达顺序可能颠倒,导致已经结束的回合仍显示为工作中。现在会丢弃在自身回合结束之后才到达的中途上报,并新增会话结束 hook,覆盖没有发出完成事件就退出的会话。
  • 被打断的回合几秒内即可恢复正常。 按下 Esc 或遇到流式错误时,Claude 与 Codex 的回合结束时完全不会发出完成回调。现在终端连续静默六秒后会安静地把这类会话校正为等待中,且不会弹出“已回复”通知。

界面

  • macOS 上的分屏快捷键更可靠。 向右分屏(Cmd+D)和向下分屏(Cmd+Shift+D)现在同时注册为原生 Terminal 菜单命令,macOS 不会再在 VelaTerm 收到之前拦截这组按键。
  • 一次按键只保存一次文档。 Cmd+S 之前会被全局快捷键和聚焦中的编辑器同时处理,可能在一次按键中把同一个文件写入两次。

v0.1.96

最新版本

AI 智能体

  • Codex 状态只信任 lifecycle hooks,不再依赖终端猜测。 新版 Codex 会话现在只使用官方 lifecycle hooks 作为活动状态来源。SessionStart 握手会验证回调链路;缺少回调时明确显示“状态不可用”;终端文字或输出活动也不会再覆盖工作、待确认或已完成状态。
  • 每个回合结束后更及时地刷新 Codex 用量。 Info 面板会立即显示本地 rollout 快照,再与实时速率额度校准;Codex 写完最终 token 快照后还会补一次刷新,并忽略来自旧会话的延迟响应。

界面

  • macOS 上的项目树命中更可靠。 虚拟行不再依赖合成器 transform,避免滚动或树更新后 WKWebView 保留过期命中坐标,导致悬停、点击或拖拽落到另一行。

v0.1.95

最新版本

AI 智能体

  • Kimi Code 和 Zoo Code 加入会话树。 VelaTerm 现在可以启动、续接、安装并配置这两种智能体。Kimi 使用官方生命周期 hooks 权威上报工作、权限和等待状态;Zoo Code 保持稳定任务标识,并在缺少外部 hooks 时使用终端检测。
  • 实时刷新 Codex 用量。 Info 面板现在可以主动查询 Codex app server 获取最新速率额度,同时保留本地 rollout 快照作为兼容回退。

项目与终端

  • 使用 vela <path> 打开项目。 发布版现在可以安装类似 VS Code 的 shell 命令;再次调用会把项目转交给已有 VelaTerm 窗口,而不是打开重复实例。
  • 可见、可取消的 Git 克隆。 “克隆项目”现在显示 Git 阶段、百分比与耗时,可提示长时间无进展,并能取消整个 Git 进程树且不留下半成品目录。界面错误和审计日志会隐藏凭据与查询 token。
  • Windows 上的 WSL 终端。 所有已安装的 WSL 发行版都会被探测,并与 PowerShell、cmd、Git Bash 一起供普通终端选择。智能体会话仍使用 Windows 宿主 shell,确保 hooks 与可执行路径可靠。

界面与可靠性

  • 更清晰的后台会话控制。 后台标签菜单会显示每个会话的实时状态,超限弹窗也可以一次结束多个已选标签。
  • 更安全的应用生命周期与更新说明。 退出前会确认是否停止运行中的会话;Codex lifecycle 的精确身份优先于含糊的 rollout 扫描;自动更新说明支持所有内置界面语言。

v0.1.94

最新版本

本地化

  • 越南语界面已可用。 在语言选择器中现已出现“Tiếng Việt”选项,对于越南语系统区域设置会自动选中该选项。

浏览器

  • 内置浏览器启动速度更快。 现在每个浏览器标签页都提供了针对 ChatGPT、Claude、Gemini 和 Google 的一键快捷方式。项目与组上下文菜单也可以在会话树中的对应部分直接创建永久性浏览器页面。

图片与文档

  • 在 macOS 中可稳定粘贴图片路径。 当 WebKit 未将复制的图片作为文件呈现时,VelaTerm 会从系统剪贴板读取该图片,并仍以文件路径的形式上传,而不会默默地转而使用智能体的原生图片占位符。远程窗口始终会显示图片粘贴设置,解释为何需要文件路径模式,并禁用不可用的原生选项。

  • 将图片粘贴到源文档中。 源编辑器现在可接受剪贴板中的图片。已保存的 Markdown 文档会将图片存储在 assets/ 下的文档旁边,并插入可移植的 Markdown 图片语法;未保存的草稿则会嵌入图片数据,这样在清理临时文件时图片也不会丢失。

界面

  • 上下文菜单始终可见且能定位到正确项。 在右侧边缘附近打开的菜单会经过正确测量并移动。现在右键点击树节点时只会高亮显示菜单目标,而不会改变现有的选中内容,且组菜单会包含一个限定于该组的终端。

  • 更简洁的编辑界面与状态标签。 源文本不会再为 HTML 注释等序列显示类似箭头的字体连字,使用率百分比会明确标注为“已使用”,而且宿主 WebView 的无关原生上下文菜单也不会再出现在 VelaTerm 自身菜单的后面。

修复问题

  • Codex 仍保留在常规终端历史记录中。 由 VelaTerm 启动的 Codex 会话现在采用内联终端模式,因此按 Esc 键中断或回退时不会再切换终端屏幕缓冲区,也不会将滚动回放视图跳回顶部。你的 Codex 配置不会受到影响。

v0.1.93

最新版本

更新

  • 安装前可查看变更内容。 当有新版本可用时,状态栏图标和专用对话框会显示该版本的发布说明。你可以立即更新、跳过该版本、在后台继续下载,或手动打开安装程序下载;进度会实时显示,应用会重启以完成更新。如果你跳过了多个版本,系统会同时显示其间所有版本的说明,而不仅仅是最新版本。

AI 智能体

  • Codex 会话可自行命名。 一旦你发送第一条消息,Codex 会话就会立即根据该消息重新命名——这与 Claude 会话的命名方式相同——这样树状结构中就不会再出现“Codex 1”、“Codex 2”这样的名称。你手动设置的名称永远不会被覆盖。

  • vspawn 与 vopen 现在也在 Codex 中可用。 内置的 vspawnvspawn-treevopen 功能不仅安装在 Claude 的功能目录中,也安装在 Codex 的功能目录中,因此 $vspawn <task>$vopen <file> 可以在 Codex 会话中运行。

  • Codex 的恢复功能更可靠。 为后续恢复而捕获 Codex 对话时不再受固定计时限制,因此即使你在输入第一条消息前暂停,该功能依然有效;而且在同一文件夹中启动的两个 Codex 会话不会再相互关联。

  • Codex 的模型与上下文使用情况。 信息面板现在会显示 Codex 会话的当前模型、上下文窗口使用情况以及正在使用的工具,这与 Claude 的显示方式一致,信息直接从会话的运行状态中实时读取。

远程与终端

  • 远程文件浏览器已重新设计。 远程会话的目录选择器具备实时搜索、跳转至路径(可使用 ~)、上下导航以及内联新建文件夹功能。

  • 链接会在你的本地机器上打开。 现在在终端中点击链接——包括智能体的登录链接——都将在你的本地浏览器中打开,远程窗口也是如此。

  • “重用远程数据库”选项被隐藏了起来。 仅当你按 Option/Alt 键点击“连接至远程”时才会显示该选项;普通点击则始终会使用独立的数据库进行连接。

修复问题

  • 从 Dock 启动工具时仍能找到它们。 现在从 Dock 或 Finder 启动 VelaTerm 时,不会再使其处于精简版的 PATH 状态,因此智能体所依赖的 git 及其他通过 Homebrew 安装的工具都能被正确定位。

  • 新终端会在正确的文件夹中打开。 现在从侧边栏中的项目或组创建终端时,会直接在对应节点的目录中打开,而不会复用上一个活动会话的文件夹。

v0.1.92

最新版本

修复问题

  • 不会再出现错误的“SSH 链接丢失”警告。 之前的隧道监控机制会将端口转发子进程的退出视为链接断开,从而显示红色警告并重新建立隧道。但实际上转发监听器位于 ControlMaster 进程中,因此即使子进程退出,转发功能依然正常工作——终端仍可正常使用,只是界面会错误地显示链接已断开,而重新建立隧道的行为则毫无必要地破坏了正常的连接。

现在链接会分两阶段进行检查:当子进程退出时,VelaTerm 首先会检测本地转发端口是否仍有监听器。如果有监听器,则不会发生任何操作。只有当端口也不存在时,才会认为链接已断开并重新建立。红色警告也会被延迟显示——只有在第一次重建尝试失败后才会出现,因此几秒内就能恢复的故障不会再触发警告。

真正的断开连接仍可自动恢复。如果 ControlMaster 进程被终止或网络长时间中断,隧道会自动重建;一旦重试次数用尽,状态栏会显示“SSH link is down”,此时点击“Reconnect now”即可恢复会话——远程进程仍会继续运行并从上次中断处继续工作。

v0.1.91

最新版本

**首次公开发布。**本版本中包含的所有功能均已推出。

将 AI 智能体视为核心组件

  • 内置支持九种智能体——Claude Code、Codex、OpenCode、Copilot CLI、Cursor CLI、Cline、Pi、Antigravity(Gemini CLI)以及 Crush。创建会话时选择相应类型,智能体即可开始工作。

  • 智能体状态是实时报告的,而非猜测。VelaTerm 在启动时会注入各供应商的官方回调机制(Claude 使用 hooks,Codex 使用 notify,OpenCode 使用插件等),因此任何状态变化都会立即反馈。会话树会用不同符号显示智能体是正在工作、等待指令还是已完成但未被查看;侧边栏可按状态筛选,状态栏则实时显示计数。

  • 当智能体需要权限决策或完成任务时,系统会发出通知,点击通知即可直接跳转到对应会话。对于没有回调机制的智能体,系统会启用屏幕检测作为备用方案。

  • 所有对话内容都会被保留。每个智能体都有自己的会话 ID,会被捕获并存储下来,因此关闭会话、重启应用或恢复归档的会话,都可以在确认该对话仍然存在后继续原来的对话。Claude Code、Codex 和 Pi 还可以将当前对话拆分到另一个并行会话中。

  • 会话可以衍生出新会话。子任务会成为子会话,可由智能体或用户创建,也可按需放入独立的 Git 工作树,让多个智能体同时处理同一仓库。子任务完成后,可通过图形化合并对话框重新合并分支。

  • 如果缺少某个智能体,系统会显示安装卡片,其中包含推荐的安装命令及一键安装选项,安装后会自动检测路径。侧边栏会显示 Claude 和 Codex 的使用额度,任何对话都可以直接查看或导出为完整的 Markdown 文本记录。

会话管理

  • 采用三级树结构——项目、组、会话——组的嵌套层级不受限制,会话下还可以有子会话。节点可以自由拖动,且状态在重启后依然保持不变。

  • 任何子树都可以被归档:不会删除数据,而是隐藏在归档面板中,随时可以恢复,并且能够继续进行对话。

  • 全局内容搜索(⌘⇧F)基于 SQLite FTS5 索引,可搜索智能体对话记录和终端输出。左侧为搜索结果树,右侧为关联预览,还可以在会话之间逐步骤导航。

首先打造出色的终端体验

  • 使用真正的 PTYs 终端(portable-pty,来自 wezterm),因此 vim、htop 以及各类智能体的 TUI 界面都能正常运行。

  • 支持多个标签页,且分割方式灵活——每个标签页都有独立的分割结构,可按需水平或垂直分割。

  • 采用类似浏览器的标签页生命周期管理:后台标签页会保持运行状态,其进程也会继续运行。实时标签页数量是可配置的,超过设定值后,系统会自动关闭最久未使用的会话。只有关闭标签页才会终止对应的进程。

  • 得益于输入优先级调度和输出帧合并技术,即使在负载较高的情况下,输入操作依然响应迅速——再也不会因为智能体占用过多屏幕空间而影响按键操作。

  • 支持终端内搜索(⌘F)、会话录制与回放、直接将图片粘贴或拖拽到智能体中,还可在 Windows 上在 cmd、PowerShell 和 Git Bash 之间自由切换。

超越终端的体验

  • 可在任何会话中运行 vopen <file>,从而在终端旁边直接打开文档标签页:Markdown 会以 WYSIWYG 编辑器形式打开并导出为向量格式的 PDF,图片则在内置查看器中打开,源文件还会显示语法高亮。

  • 内置的浏览器标签页可用作临时标签页,也可固定在项目树中作为永久节点。

远程与多设备支持

  • 桌面应用通过网页提供相同的界面,所有会话实时共享。输出内容会实时发送到每个客户端,任何客户端都可以输入内容——桌面端和浏览器端看到的都是同一个终端,且都能对其操作。

  • 采用逐帧 NaCl 加密实现端到端加密,可通过二维码或链接配对,还支持按设备进行管理,包括单独撤销授权。

  • 无界面模式:--serve 可在没有图形界面的服务器上运行相同服务,供浏览器连接使用。

  • 通过 SSH 可实现远程连接,将远程机器纳入你的会话树中。VelaTerm 可直接从桌面端连接,然后在远程端部署轻量级的 vela-server,远程会话的表现与本地会话一致。隧道会自动修复并重新建立连接。

  • 移动端支持:该应用提供移动端网页视图,同时也提供原生应用外壳(使用 xterm 渲染,支持原生输入和辅助键栏)。

支持的平台及界面优化

  • 支持 macOS、Linux 和 Windows 系统。

  • 支持自动更新,且 macOS 版本经过数字签名验证。

  • 主题会随系统自动切换为浅色或深色模式,正在运行的智能体会通过标准的终端通知(DEC 2031)得知主题变化——TUI 颜色会立即改变,无需重启。

  • 默认语言为英语,还内置了 10 种语言,语言设置会跟随系统区域设置自动调整。

每个版本都附带自动更新功能——VelaTerm 会自动提供最新版本。你可以从 下载页面自行获取。.