第二十二节 数据与备份

[!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.yamlremember 标记;存量无此字段视同已记住
主机指纹 首连确认 首次连接展示 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 系统文件管理器定位并选中
外部链接 http(s) URL 默认浏览器打开
反引号内联代码里的路径 带扩展名 与普通链接同等识别
工具结果 / 回答里的 文件:行 path:line(:col)? 带行号的工作区文件 → 「查看」打开源码预览并滚到该行
代码块里单条 .md / .mdx 路径 文件存在(异步校验后升级为可点) 打开 Markdown 预览抽屉
普通内联代码 不识别为链接
危险协议 http(s) 拦截
纯目录 / 无扩展名片段 a/b/etc/hosts 不可点

点击后弹出非模态浮动工具条(主动作「查看 / 打开」+「复制」),用 Popover API 渲染在顶层,弹窗内点击同样不被遮挡。「查看」对带行号的源码走 PreviewSourceFile(target, line) 在代码视图定位到该行,让 code.search / code.ask 给出的 文件:行 证据可核对。