變更記錄

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):不與磁碟資料夾綁定的頂層容器。 有些工作階段(session)本來就不屬於任何專案儲存庫,例如遠端連線、瀏覽器分頁,或單純臨時測試用的終端機。在此之前,唯一的收納方式是把這些工作階段硬塞進某個專案裡,顯得格格不入。「集合」是有獨立名稱、背後不綁定磁碟資料夾的容器。因為沒有專案根目錄,前端會直接隱藏不適用的操作,不再等到點擊出錯才報錯:「New Worktree Session」、「Move to Worktree…」以及建立新工作階段對話框中的 worktree 選擇器,在集合中都會直接隱藏。取而代之的是,新增工作階段對話框加入了「Working directory」欄位,預設為使用者的家目錄,桌面版並提供原生資料夾選取器。若啟動工作階段時未指定目錄,現在會直接從家目錄開始,不再沿用應用程式的啟動路徑(在 macOS 上以往是 /)。

  • 「Resources」面板現在顯示整台機器的狀態,而不僅限於當前工作階段。 以往該面板只會回報當前工作階段自身行程樹(process tree)的 CPU 與記憶體用量,導致無法判斷究竟是該工作階段吃光了資源,還是整台機器本來就處於超載狀態。現在面板已拆分為「THIS SESSION」與「SYSTEM」兩個區塊。SYSTEM 區塊顯示 CPU、記憶體與 Swap 的進度條(超過 70% 轉為琥珀黃,超過 90% 轉為紅色),並附帶各平台專屬指標:macOS 顯示記憶體壓力(memory pressure)、Linux 顯示依核心數正規化後的平均負載(load averages),Windows 則因無對應指標而不顯示。如果你只想關注自己的工作階段,只要取消勾選面板頂端的「system」,系統相關欄位就會隱藏,背景取樣也會徹底停止。系統會記住此偏好設定,並套用至所有工作階段的面板。

  • Windows 與 Linux 新增選單列,可透過 Alt 鍵開啟。 macOS 原生具備系統選單,但在 Windows 與 Linux 上,以往設定、檢查更新及分割窗格等功能只能從標題列圖示進入。現在只要單獨按下並放開 Alt 鍵,即可切換選單列的顯示。包含 Alt 的組合鍵完全不受影響——由於 Alt 在終端機中作為 Meta 前綴鍵使用,像 Alt+B 和 Alt+F 這類快捷鍵仍會正常傳送給 Shell;只有單獨按放 Alt 鍵(此時不會向終端機發送任何訊號)才會觸發選單。選單列包含 File(設定、檢查更新)、Terminal(新增終端機、向右分割、向下分割)及 Help(官方網站、意見回饋、分享),並會根據自訂快捷鍵顯示提示。選單支援滑鼠與鍵盤操作:按下 Esc 鍵可關閉開啟的選單、隱藏選單列,並將焦點切換回終端機。

  • 選單新增「Clear notification badges」,可清除以往無法清除的通知標記。 Dock 圖示上的通知標記計數包含了未讀工作階段以及未回應的生成確認卡片(spawn confirmation cards)。然而,側邊欄的清除按鈕只有在存在未讀工作階段時才會顯示,且只能清除這些工作階段的標記。若殘留了未處理的提示卡片——例如來源視窗已關閉或工作階段已刪除,導致卡片無法再渲染顯示——Dock 標記就會卡在 1 且無法消除。新的選單項目會將所有工作階段標記為已讀、將所有待處理的生成請求標記為拒絕,並直接將作業系統的標記計數重設為零。這對 macOS 特別重要,因為 macOS 在應用程式重啟後仍會保留 Dock 標記計數。

  • 指令讀取檔案或等待系統回應時,視窗不再凍結。 同步的 Tauri 指令以往會在主執行緒(main thread)上執行,執行期間會讓整個介面完全卡死。經全面盤點現有的 43 個指令,發現其中有 13 個會在主執行緒上執行 I/O:請求 macOS 通知權限時可能阻塞長達一分鐘等待使用者確認;從長時間運行的工作階段讀取錄製內容時,會以 64 KB 的區塊讀取數十 MB 的資料;貼上螢幕截圖時會直接寫入磁碟;以及獲取工作階段的工作目錄時會呼叫 lsof。現在這 13 個指令均已移至主執行緒外執行。按鍵輸入處理則維持在快速路徑上,不受影響。

遠端存取

  • 主機端現在會顯示已連線的遠端用戶端。 工作階段鏡像(session mirroring)是雙向的,遠端用戶端可以調整主機端的視窗版面配置——但主機端以往完全無法得知是否有人連線,更無從得知連線者是誰。現在標題列會顯示「Mirrored by N」標籤;點擊即可展開已連線用戶端清單,查看其名稱、IP 位址及連線時間戳記。用戶端名稱會在加密交握(handshake)期間回報(若未提供則預設為「Unnamed」)。

AI 智慧體

  • 帳號用量改為每台機器抓取一次,而非每個工作階段各自抓取。 用量額度屬於帳號層級,但以往每個工作階段的 Info 面板都會各自發送請求抓取。若同時開啟十個工作階段,就會對相同的數據發出十次重複請求——這經常觸發 Claude 嚴格的速率限制(rate limit),導致面板顯示空白。現在改由後端集中輪詢並維護單一快照(snapshot),供所有工作階段讀取,並在資料變動時廣播更新。該機制只會輪詢你有在使用的供應商(透過檢查是否存在 ~/.claude~/.codex~/.grok/auth.json 來判斷),且不會存取系統鑰匙圈(keychain),避免彈出不必要的權限提示。快照會儲存至磁碟,應用程式重啟時面板能立即顯示快取數據,無需乾等首次輪詢。筆電從睡眠喚醒時也會立即重新整理數據,不必等待下一個排程週期。若連續輪詢失敗,重試間隔最多退避(backoff)至 8 倍。Settings 的重新整理間隔輸入框旁也新增了明確的開關切換鍵,取代以往語意模糊的 0 秒設定。

  • 用量重新整理失敗時會明確標記為過期(stale),不再偽裝成最新狀態。 以往重新整理請求失敗時,用戶端會靜默返回快取副本,同時把該次請求記錄為成功——推進時間戳記、清除錯誤並重設退避計時器。這導致在遭遇速率限制時,面板看起來一切正常,即使每五分鐘的輪詢都在背後失敗。現在請求失敗時雖然仍保留快取數值,但會在供應商旁顯示琥珀色的 stale 標記。將滑鼠懸停在標記上會跳出工具提示(tooltip),載明失敗時間、錯誤原因以及目前顯示的數據已存放多久。「Updated」時間戳記只會反映最後一次成功同步的時間;系統會遵守伺服器限流時回傳的 retry-after 要求,但你依然能隨時手動觸發立即重新整理。

  • 用量面板中新增個別模型的每週配額。 除了全帳號的 5 小時和 7 天額度限制外,用量端點(usage endpoint)還會回報特定模型的每週配額。以往這些資訊會被忽略,導致使用 Fable 等模型的使用者只能看到帳號總用量,看不到特定模型的剩餘額度。現在這些明細列會依模型系列分類,顯示在總用量下方。

  • 重新開啟 OpenCode 工作階段時會還原聊天記錄。 應用程式先前透過 opencode session list 來檢查工作階段是否存在,但該指令只會查詢當前工作目錄下的工作階段。因為桌面版應用程式是在啟動目錄(在 macOS 上為 /)下執行,所以永遠找不到既有的工作階段 ID,導致嘗試恢復時靜默開啟空白工作階段。現在檢查時會直接查詢特定的工作階段 ID,且只有在指令明確確認刪除時才視為已刪除。遇到其他錯誤一律視為狀態未定,應用程式仍會繼續嘗試恢復,避免意外遺失對話歷史紀錄。

介面

  • 使用輸入法(IME)打字時現在會顯示組字文字(composition text)。 在三大平台上,以往使用輸入法(如拼音或假名)輸入時,文字在按 Enter 確認送出前完全看不見。這是一條自訂 CSS 規則引起的:xterm 原本是在未設限的覆蓋容器(overlay container)中渲染組字文字,但我們先前為了讓終端機長行折行而加上了 right 約束,導致解析出的寬度為零,再加上 overflow: hidden,就把文字完全截斷了。現在該規則已被移除,自訂樣式僅保留用來替換覆蓋層預設白底黑字(該配色與所有主題都不搭)的設定。同時還修復了一個相關問題:xterm 先前為了定位輸入法候選字詞而放大了隱藏的 textarea,事後卻從未將其縮小,導致殘留的隱形區塊擋住了該行上的滑鼠點擊與文字選取。

  • 在 macOS 上,Ctrl 快捷鍵不再觸發 Command 快捷鍵綁定。 先前在 macOS 上檢查修飾鍵時,誤將 Cmd 與 Ctrl 視為可互換。這導致標準終端機快捷鍵與應用程式快捷鍵發生衝突:Ctrl+D(EOF)會變成分割窗格、Ctrl+W(刪除單字)會關閉窗格,Ctrl+F、Ctrl+T 及 Ctrl+O 等快捷鍵也會被應用程式攔截。再加上新增窗格是靜默建立的,常讓人覺得分割窗格是莫名其妙彈出來的。現在 macOS 桌面版應用程式專用 Cmd 作為快捷鍵,其他平台(以及連線至 Mac 的網頁瀏覽器)則一律使用 Ctrl。

  • 下拉選單在選取選項後不再立即重新開啟。 先前外層包覆的 <label> 元素會將整列的點擊事件向上傳遞回觸發按鈕,導致選單剛選好項目就又立刻重新打開。

修復

  • Linux:AppImage 已可重新正常啟動。 0.1.105 版本的 AppImage 在 Ubuntu 22.04 上啟動時,會在視窗出現前崩潰,無法產生 WebKit 的輔助行程。AppImage 打包工具會將二進位檔中寫死的 /usr 路徑改寫為 ././(藉此保持字串長度以便就地修補),這需要啟動腳本將工作目錄切換至 $APPDIR/usr 才能正確解析這些路徑。在 0.1.105 中,我們為了防止環境變數洩漏至子 Shell 而引入了自訂啟動腳本,該腳本雖然轉發了環境變數,卻遺漏了切換目錄的步驟。現在啟動腳本已修正此問題,能正確切換目錄,並加入了建置階段斷言(build-time assertion)以防問題復發。0.1.104 及更早版本不受此問題影響。

  • Windows:通知已恢復播放提示音,點擊通知可跳轉至對應工作階段。 先前 Windows 通知把 macOS 專用的音效識別碼傳給了通知外掛程式,因為外掛程式無法解析該名稱而直接靜音——導致 Windows 通知無論怎麼設定都不會發出聲音。在兩個版本前,Windows 通知曾改走該外掛程式處理,作為當時某個問題的暫時解法(該問題在同版本中其實已經修復)。現在已取消該繞行方案:通知重新回歸原生管道處理,並恢復了提示音與點擊跳轉至對應工作階段的功能。

  • Windows:框線字元與區塊元素現在能對齊。 先前終端機邊框使用比例字型作為備用字型渲染,導致線條模糊走樣。即便解決了該問題,區塊字元(用於進度條及 Claude Code 吉祥物)在每個字元右緣仍會出現細微的垂直縫隙,原因是備用字型比終端機主字型略窄。現在這兩個字元區段均由內建的 JetBrains Mono 子集提供,確保字形寬度完全一致。

  • Windows:在完整版 Git Bash 環境下 git 指令可正常運作。 先前即便已安裝了完整版 Git Bash,在終端機中執行 git 仍會提示「command not found」,並一直提示使用者安裝完整版 Git Bash。這是因為 Git Bash 只有在得知自身所在的目錄路徑時,才會將 mingw64/bin 加入 PATH。由於我們的 Shell 啟動器漏掉了此參數,導致僅存在於該目錄下的二進位檔(例如 gitcurl)無法被找到。此外,下載提示現在會自動選取與主機系統架構相符的安裝程式,不再一律預設為 64 位元版本。

  • Windows:移除 worktree 功能正常運作,且重新安裝 Kiro hooks 不再產生重複項目。 先前移除 worktree 的指令是在目標 worktree 目錄內部執行的。因為 Windows 禁止刪除執行中行程當前所在的目錄,導致該操作總是會因權限錯誤而失敗;現在 Git 指令已改在主儲存庫根目錄下執行。此外,先前的 hook 偵測邏輯直接拿正斜線路徑與 Windows 的反斜線路徑比對,導致檢查失敗,每次重新安裝時都會重複附加 hook 項目。

v0.1.105

最新版本

工作區

  • 會話狀態、未讀標記、行程還活著沒有,現在都由後端說了算,各端看到的是同一份。 這些結論過去是各用戶端各自從自己看到的訊號裡推出來的,於是「未讀」的實際意思是「在這個視窗裡沒讀過」:瀏覽器裡讀完,桌面端那份還在,狀態篩選的動態增加又把那一列推回共享清單,按右鍵選「重新整理狀態」都去不掉。狀態事件也要等這條連線自己啟動過某個會話才註冊,所以瀏覽器新連上來,只有自己開過的會話有圓點,其餘一律沒有。現在後端為每個會話保存一份權威記錄——智慧體、狀態、行程是否活著、未讀標記——用戶端連上和重連時批次拉一次,之後任何變化廣播給所有端。用戶端上報的是觀察,下結論的是後端。於是手機上讀過一個會話,桌面端的未讀跟著清;新連上來的瀏覽器,從沒打開過的會話也有對的圓點。原先散在前端的那幾條仲裁規則連同它們的理由和測試一起搬了過去:權威鉤子報過一次,此後從裸輸出猜出來的結論就蓋不過它;持續有輸出只在「有智慧體、不是 Codex、而且還沒有權威結論」時才算忙;1200 毫秒的工作狀態保持,防止剛開始工作就被緊跟著到的結束事件蓋掉。讀取畫面是唯一的例外,它要的是排好版的網格,只存在於用戶端:由持有終端尺寸的那一端上報讀到的結果,後端裁決收不收,其餘用戶端的上報一律拒絕。萬一哪裡不對,在 localStorage 把 vlx-arbitration 設成 frontend 就交回前端舊鏈。

  • 重啟一個會話,不會把對端的分頁一起關掉。 pty://killed 原來不帶任何資料,對端分不清這是重啟還是關閉,一律按關閉處理,把窗格刪了再把這個版面鏡像回來。現在這個事件會說清是誰殺的、為什麼殺,重啟就留著窗格等新行程接上。事件不帶資料、或者原因不認得,仍然按關閉處理——給一個再也不回來的會話留著窗格,畫面上就杵著一個死掉的終端,比誤關一個本該重啟的更糟。

  • 瀏覽器連上剛恢復工作區的桌面端,不會再把那些會話全部真的拉起來跑。 桌面恢復工作區時只畫佔位卡片、不啟動行程,但這個判斷只存在於桌面本機;瀏覽器跟著鏡像版面看到這些會話,分不清「沒在跑」和「在跑,只是本端沒打開過」,於是掛載終端——掛載就是啟動。現在跟著對端版面進來的葉子,後端說底下沒行程就畫佔位卡片。使用者自己在本端打開會話仍然算啟動意圖,不走這條分支;本端正顯示著的終端也不受影響,行程結束時不該把你還想讀的輸出換成一張卡片。

  • 一端改了設定,另一端立刻跟著變。 設定一直是後端權威,但改完不吭聲,另一端要等到下次啟動才知道。遠端模式下這不只是顯示對不上:一端關掉「狀態篩選動態增加」,另一端開著就照樣往共享清單裡塞;同時開啟的分頁數上限小的那端,會把別人的背景分頁擠掉。現在寫入設定會廣播是哪個鍵變了,各端再走啟動時那條路重新讀一次,所以「受保護的值不發給遠端呼叫方」這道過濾原樣生效——廣播裡只有鍵名,從不帶值。手機端此前既不上傳也不下發設定,這次一併補上。

  • 瀏覽器先等鏡像對齊,再恢復自己的版面。 遠端視窗有兩份版面來源,一份是自己存在 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 與兩種字型、智慧體面板的智慧體選擇、兩個 worktree 對話框、新建和恢復會話的智慧體類型,以及表單彈窗裡最後一個原生 select,都由同一個元件承擔。順帶補上了它們原先都沒有的鍵盤操作:上下鍵移動、Enter 選中、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

  • 輸入中文、日文、韓文時,預先編輯的文字和候選字視窗又看得見了。 這兩樣先前都是隱形的——只能盲打,按下 Enter 才看到結果。原因出在我們自己的兩條 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。配對連結下方的 QR code 可直接用手機掃描。選擇會被記住;若所選介面消失,面板會回退為「自動」,但不會忘記你的選擇。伺服器本身維持不變,仍在所有介面上監聽。選擇一個在伺服器啟動後才出現的位址(例如稍後才連線的 VPN),現在複製的 URL 和 QR code 也會立即更新,而不再是只有配對連結跟隨、其餘要等到下次重新啟動;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;微信提供 QR Code 流程,更新視窗中也新增了分享提示。
  • 細節互動更順手。 暫存終端分頁在儲存為正式工作階段前即可重新命名;一般輸入欄位會關閉行動鍵盤的自動首字母大寫,同時不改變終端輸入行為。

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 使用官方 lifecycle hooks 權威回報工作、權限與等待狀態;Zoo Code 保持穩定的工作識別,並在沒有外部 hooks 時使用終端偵測。
  • 即時重新整理 Codex 用量。 Info 面板可主動查詢 Codex app server 取得最新速率額度,並保留本機 rollout 快照作為相容性備援。

專案與終端

  • 使用 vela <path> 開啟專案。 發行版可安裝類似 VS Code 的 shell 指令;再次呼叫會把專案轉交既有 VelaTerm 視窗,而不會開啟重複執行個體。
  • 可見且可取消的 Git 複製。 Clone Project 現在顯示 Git 階段、百分比與經過時間,可提示進度停滯,並能取消整個 Git 程序樹且不留下未完成目錄。畫面錯誤與稽核記錄會隱藏憑證及查詢 token。
  • Windows 上的 WSL 終端。 所有已安裝的 WSL 發行版都會被偵測,並與 PowerShell、cmd、Git Bash 一起供一般終端選擇。代理工作階段仍使用 Windows 主機 shell,以確保 hooks 與執行檔路徑可靠。

介面與可靠性

  • 更清楚的背景工作階段控制。 背景分頁選單會顯示每個工作階段的即時狀態,超限對話框也可一次結束多個已選分頁。
  • 更安全的應用程式生命週期與更新說明。 結束前會確認是否停止執行中的工作階段;Codex lifecycle 的精確身分優先於模糊的 rollout 掃描;自動更新說明支援所有內建介面語言。

v0.1.94

最新版本

本地化

  • 越南語介面. 現在可在語言選擇器中選擇越南語,且對於設定為越南語系統地區的用戶會自動選中。

瀏覽器

  • 內建瀏覽器的啟動速度更快. 現在每個瀏覽器分頁都提供一鍵快速存取 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 功能也會被安裝到 Codex 的功能目錄中,與 Claude 的目錄一樣,因此 $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 進程中,因此即使子進程退出,轉發功能仍會持續運作——雖然 UI 認為連結已中斷,但終端視窗依然可以正常使用,而重新建立隧道的動作則會白白中斷一個正常的連線。

現在會分兩個階段檢查連結:當子進程退出時,VelaTerm 首先會檢查本地的轉發端口是否仍有監聽器。如果有,則不會有任何動作。只有當端口也消失時,連結才會被視為中斷並重新建立。紅色警示也會被延遲顯示——只有在第一次重新建立嘗試失敗之後才會出現,因此幾秒鐘內就能恢復的暫時問題也不會再出現警告。

真正的斷線仍可自動恢復。若 ControlMaster 進程被終止或網路中斷時間過長,通道會自動重新建立;一旦重試次數用盡,狀態列會變為「SSH link is down」,此時點擊 Reconnect 即可恢復會話——遠端進程仍會持續運行並從中斷處繼續執行。

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 worktree 中產生,如此多個代理就能同時在同一個儲存庫上工作。當分支完成後,圖形化的合併對話方塊會將它們重新整合。

  • 若缺少某個代理,系統會顯示安裝卡片,提供推薦的命令及一鍵安裝功能,之後還會自動偵測安裝路徑。側邊面板會顯示 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 機制進行端對端加密,可透過 QR 程式碼或連結配對,並支援每裝置管理,包括個別撤銷功能。

  • 無桌面模式:--serve可在沒有 GUI 的伺服器上運行相同的服務,可供瀏覽器連接。

  • SSH 遠端連線可將遠端機器納入您的樹狀結構中。VelaTerm可直接從桌面端連線,於遠端部署輕量級的 vela-server,遠端會話的行為就如同本地會話一樣。通道會自動修復並重新建立。

  • 行動端:該服務提供行動網頁版,同時也提供原生應用程式殼層(使用 xterm 顯示,並支援原生輸入及輔助鍵列)。

平台與細節優化

  • 支援 macOS、Linux 和 Windows。

  • 提供自動更新,且 macOS 版本皆經過認證。

  • 亮色與暗色主題會隨系統自動調整,正在運行的代理會話會透過標準的終端通知(DEC 2031)得知主題變更——TUI 的顏色會立即改變,無需重新啟動。

  • 預設為英文,另還有 10 種語言依系統地區設定內建。

每個版本都附帶自動更新功能——VelaTerm 會自動提供最新版本。您可以自行從 下載頁面.