第二十二節 資料與備份

[!ref] 詳解見使用者手冊「升級、備份與同步」節。

22.1 備份內容

項 說明
工作區清單 名稱、路徑、歸檔狀態
會話歷史 全量訊息流,含工具呼叫、計畫、待辦、簽核
助手人設 內置 + 自定義
技能 全域 + 工作區 + 外掛提供
工具政策 三態權限 + 白名單
外部服務 憑證以加密形式存儲
通道綁定 IM 對端 ↔ 工作區
設定項 一般 + 工作區

22.2 備份與復原

操作 步驟
備份 關閉應用 → 設定 → 資料 → 資料目錄 → 整目錄打包
復原 關閉應用 → 取代原資料目錄 → 啟動應用
跨設備遷移 備份後還原到新設備同名目錄
同步(實驗性) 設定 → 資料 → 同步 啟用後多設備共享

22.3 完整清理

關閉應用 → 刪除應用本體 → 刪除資料目錄

資料目錄包含登入憑證、會話歷史、外部服務憑證;刪除後不可復原。

22.4 SSH 遠端工作區協議

欄位 類型 預設 說明
協議 enum zworkspace zworkspace / ssh
主機 string — user@host[:port]
認證 enum password password / private_key / private_key_with_passphrase
私鑰路徑 string — 文件選擇器挑選;本機解析
遠端根目錄 string ~ 支持 ~ 自動展開為遠端家目錄。拒絕 /;.. 逃逸與 ~/..(含 ~//../)一層穿透均已封堵;展開並解析真實路徑後再按同一口徑二次校驗
憑證加密 — SM4-GCM 國密落盤 + 本機綁定;每次儲存使用隨機鹽
憑證保留 bool 記住 「記住密碼 / 通行碼」複選框。未勾選則為臨時憑證:連線期內保留(保重連),應用啟動與結束時清除。工作區粒度,落盤為 ssh_secrets.yaml 的 remember 標記;存量無此欄位視同已記住
主機指紋 — 首連確認 首次連線展示 SHA256 指紋,由你核對確認後才釘住 known_hosts,確認前不發送密碼;已知主機換鑰硬拒(疑似中間人)

SSH 工作區與本機工作區的差異:

能力 本機 SSH
fs.* 文件操作 本機 走 SFTP / 遠端 shell
fs.grep Go RE2 遠端系統 grep(提速)
fs.exec 同步 本機 遠端 shell
fs.exec.start 背景長駐 啟用(會話隨 Interpreter 生命週期結束) 啟用(會話狀態存遠端 <root>/.avlcode/sessions/,跨斷線重連與應用重新啟動存活;setsid 自成程序組,kill 連子孫一併收;記錄檔為完整文件、無本機版 256 MiB 環形丟尾;不做 venv 感知)
文件變更面板 git 本機 git 遠端 git(無 git 時隱藏面板)
Skills / Plugins / Hooks 本機 .avlcode/ 遠端 .avlcode/
文件威脅掃描 本機位元組 SFTP 取位元組後掃描
sys.info 報告身份 本機 遠端真實身份
「關閉並清除資料」選單項 顯示 不顯示 + 後端拒絕(避免誤刪遠端文件)
設定 → 最近訪問 「刪除記錄」 刪本機記錄與憑證 刪本機記錄與憑證(不碰遠端文件)
跨 OS 用戶端相容 — 遠端命令不注入本機環境變數(用遠端登入 shell 自帶環境);遠端路徑一律按 POSIX 文法構造(Windows ↔ Linux 已徹底打通)

22.5 會話附加目錄

欄位 類型 預設 說明
入口 — — 輸入框「+」選單:附加目錄(只讀) / 附加目錄(讀寫)
權限 enum — ro(讀 / 列舉 / 搜尋) / rw(額外允許寫 / 刪 / 建立)
作用域 — 會話 僅當前會話;其它會話不受影響
持久化 — 會話內 隨會話儲存;重新啟動背景自動重新生效
顯示 — 輸入框上方「附加路徑」條 可隨時移除
路徑標註 — 絕對路徑 搜尋 / 列舉結果標絕對路徑,來源一目了然
會話身份注入 — 系統在呼叫鏈注入 _session_id AI 不可偽造身份冒用別會話的附加權限

22.6 專案指令(AGENTS.md)

工作區根目錄放 AGENT.md / AGENTS.md / CLAUDE.md(按優先級取一份),自動作為系統提示裡的「# 專案指令」塊。

欄位 行為
檔名優先級 AGENT.md > AGENTS.md > CLAUDE.md(取第一個存在的)
注入位置 系統提示詞獨立「# 專案指令」塊
重新讀取 每輪重新讀,改了立即生效
子目錄注入 AI 讀寫某子目錄下文件時,自動把路徑上各級 AGENT.md 一並注入(每會話每子目錄一次,去重不刷屏)
截斷政策 UTF-8 字元邊界安全截斷 + 截斷標記
軟鏈護欄 EvalSymlinks 真實路徑校驗,不在工作區內則拒絕
內置編輯器 會話選單 / 工作區選單「編輯 AGENTS.md」;Cmd/Ctrl+S 儲存、Tab / Shift+Tab 縮排、未儲存保護、空狀態模板

22.7 訊息內鏈接與檔案路徑點擊行為

類別 識別 點擊行為
工作區內檔案路徑 帶常見副檔名(如 src/main.go / README.md)或慣例檔名(Dockerfile / Makefile / go.mod 等);須經後端確認存在且在工作區 / 附加範圍內 工具條:「預覽」/「在資料夾中顯示」(系統檔案管理員定位並選中)/「複製」
外部鏈接 http(s) URL 預設瀏覽器開啟
反引號內聯程式碼裡的路徑 帶副檔名 與普通鏈接同等識別
工具結果 / 回答裡的 文件:行 path:line(:col)?;冒號前須為認得的檔名,冒號後只能是數字(example.com:8080 不算) 「預覽」開啟源碼預覽並滾到該行
Markdown 鏈接 / file:// 裡的 #L 錨點 #L10、#L10-L20、#L10C3(取起始行);去掉 ?query、解碼百分號 定位到該行
預覽中 Markdown 文件內的相對鏈接 — 以該文件所在目錄為基準解析(訊息流裡的路徑仍以工作區根為基準)
會話附加 / 專案工作區級共享附加裡的路徑 與工作區文件同口徑 可點;附加清單變化後已渲染訊息重新判定
SSH / 遠端工作區 — 不顯示「在資料夾中顯示」;SSH 附加路徑不提供預覽、不按本機路徑解析
程式碼區塊裡單條 .md / .mdx 路徑 文件存在(非同步校驗後升級為可點) 開啟 Markdown 預覽抽屜
普通內聯程式碼 — 不識別為鏈接
危險協議 非 http(s) 攔截
純目錄 / 無副檔名片段 如 a/b、/etc/hosts 不可點

點擊後彈出非模態浮動工具條(文件:「預覽」「在資料夾中顯示」「複製」;外鏈:「開啟」「複製」),用 Popover API 渲染在頂層,彈窗內點擊同樣不被遮擋。「預覽」與「在資料夾中顯示」走同一條路徑解析,失敗時提示附具體原因。「預覽」對帶行號的源碼走 PreviewSourceFile(target, line) 在程式碼視圖定位到該行,讓 code.search / code.ask 給出的 文件:行 證據可核對。