第二十二節 資料與備份
[!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 給出的 文件:行 證據可核對。
