Theme / v0.9.5

CatDesk

把 ChatGPT Web 變成本地 Coding Agent

基礎觀念

v0.6.0 → v0.9.1:bubblewrap 沙盒、Handoff 與全中文介面

掌握 v0.6.0~v0.9.1 的重點變更:Linux 沙盒從 Landlock 改為 bubblewrap、musl 靜態連結、create_handoff 跨 session 交接、SSH agent 轉發、全 TUI 繁體中文與 Git metadata 沙盒。

概述

CatDesk v0.6.0 至 v0.9.1(2026-09-09 至 2026-09-16,四個 minor)把兩條主線各自推了一大步:沙盒安全(bubblewrap、SSH 轉發、Git metadata 白名單)與跨 session 工作延續(create_handoff)。

沙盒演化:Landlock → bubblewrap(v0.6.0)

Linux 沙盒從 Landlock 改為 bubblewrap:

  • 動機:Landlock 依賴較新的 kernel 功能;bubblewrap 把支援範圍延伸到舊版 Linux kernel
  • 不變的:workspace 存取隔離——檔案寫入仍被限制在 workspace 與專屬 scratch 目錄

這是「功能 vs 相容性」的取捨:Landlock 是核心原生、零依賴,但 kernel 版本門檻高;bubblewrap 是使用者空間工具,幾乎任何 kernel 都能跑。對要部署在各種主機的本地工具,涵蓋範圍通常贏過純度。

同版的其他基礎工程:

  • Linux release 改用 musl 靜態連結(x64 / arm64)——不依賴目標主機的 glibc
  • HTTP stack 從 native TLS / OpenSSL 換成 rustls——少一個系統相依
  • TUI 主執行緒 panic 時正確還原 terminal(raw mode、滑鼠捕捉、bracketed paste、alternate screen),不再弄壞 shell

create_handoff:跨 session 帶走工作脈絡(v0.7.0)

ChatGPT 的 session 有長度限制,長任務勢必要拆。v0.7.0 的 create_handoff 讓交接有正式管道:

帶走的內容:

  • 目前目標
  • 已完成的工作
  • 關鍵決策
  • 驗證結果
  • 下一步
  • Git context

設計上的兩個重點:

  1. 不寫 handoff 檔進 workspace——交接資料存放在 ChatGPT Library,你的專案目錄保持乾淨
  2. 精確恢復——新 session 依 workspace 精確比對找到對應 handoff;多個 handoff 並存時明確處理;讀取成功後才清理

v0.9.2 起改為 opt-in(預設關閉):create_handoff 與 ChatGPT Library 連續性指引需在 TUI Settings 開啟才會暴露,開啟後工具數量也會跟著變;詳見第五課「v0.9.2 → v0.9.5」。

SSH 轉發(v0.7.0)

沙盒內的 SSH 認證與簽署改為轉發 SSH agent——私有金鑰留在沙盒外,沙盒內的 Git 操作(clone、push、signed commit)照常運作。

這是 sandboxing 的經典難題:把東西鎖起來 vs 被鎖起來的東西需要憑證。agent 轉發讓沙盒「能用鑰匙但拿不到鑰匙」。

全 TUI 繁體中文(v0.8.0)

主要 dashboard、settings、瀏覽器選擇、ngrok 設定、主題與常見 runtime log 全面中文化,並以 CJK-aware terminal width 處理換行與對齊——中文字寬與英文字母不同,直接套用英文 width 計算會讓表格與框線全歪。

同版:workspace 路徑經 canonicalize 或 symlink 存取時,change tracking 仍回報正確的 workspace-relative 路徑;npm 發布改走 GitHub Actions Trusted Publishing。

Git Metadata 沙盒(v0.9.0 / v0.9.1)

Git 的 metadata(.git)常在 workspace 外:linked worktrees、submodules、repo checkout 都是。v0.9.0 讓沙盒支援這些配置,且帶驗證:只有 workspace 對應的 Git 路徑會被設為可寫。

同版 widget 介面對齊 ChatGPT 緊湊亮暗面、圓角/方角設定持久化並同步到 MCP 資源;runtime log 時間戳改用本機時區(匯出檔名含 UTC offset)。

v0.9.1 修一個有趣的 bug:Linux 沙盒指令約 10 秒就被終止——bubblewrap 過去由即將退役的 blocking worker 生成,改由長壽 Tokio runtime worker 生成後解決。

對既有使用者的影響

  • Linux 沙盒行為有變(bubblewrap),相依特定 kernel 行為的腳本應重新驗證
  • 長任務可考慮改用 handoff 拆 session,workspace 不再需要交接筆記檔(v0.9.2 起需先在 TUI Settings 開啟)
  • SSH-based Git 工作流程在沙盒內恢復正常

學習重點

  1. 沙盒的相容性階梯:Landlock(核心功能)→ bubblewrap(使用者空間)→ musl + rustls(靜態連結)——每一層都是把「依賴目標環境」換成「自帶」。
  2. 交接不等於污染 workspace:session 狀態的外部化(ChatGPT Library)+ 精確比對 + 讀後清理,是乾淨 handoff 的三要素。

來源:v0.6.0~v0.9.1