数据放在哪
一个运行时的全部家当在一个数据目录里:每个人格一个 SQLite 库、一个系统库、配置、日志、备份、插件和它们的数据。密钥不在这里。
目录
从源码跑时,数据目录就是项目目录(下面的路径都相对它);桌面版在系统的应用数据目录里(首次配置「就绪 → 高级」里能改)。
config/
bot.toml 主配置(开发用的中性基础配置)
personas.toml 人格注册表:有哪些人格、各自的配置和库在哪、会话绑定
personas/<人格>.toml 每个人格的配置(网页后台「配置管理」改的就是它)
personas/.removed/ 删掉的人格的配置挪到这里(挪回去就恢复)
data/
personas/<人格>.db 每个人格一个库:聊天、记忆、关系、作息、决策记录……
aeria.db 默认的库路径(只有一个人格、没写库路径时)
system.db 系统库:不属于任何一个人格的状态(访问密钥的哈希、插件的记录……)
logs/aeria.jsonl 日志(打过码,按大小轮转)
backups/ 备份
plugins/<插件>/ 装上的插件
plugin_data/<插件>/ 插件自己的数据(更新插件不动它)
plugin_host/grants.json 装的人确认过的插件能力
knowledge_staging/ 知识库上传了、还没确认的文件
webui.token 后台密码(从源码跑、没设 WEBUI_TOKEN 时自动生成)
.env 从源码跑时的环境变量和密钥(不进 git、不进备份)
密钥在哪
- 桌面版:系统钥匙串(macOS 钥匙串、Windows 凭据管理器、Linux Secret Service),运行时启动时由桌面版注入;磁盘上没有。
- 从源码跑:
.env。配置文件里只写环境变量的名字(token_env、api_key写引用),写明文会被拒绝。
备份
python -m aeria.backup create # 整机:每个人格的库 + 系统库 + 配置
python -m aeria.backup create --persona <人格> # 只备一个人格
python -m aeria.backup verify data/backups/<名字> # 校验:文件哈希、库完整、库属于谁
python -m aeria.backup restore data/backups/<名字> --persona <人格> # 先停运行时
- 人格库用 SQLite 的在线备份:运行时开着也能备,拿到的是某一刻的一致快照。
.env、data/webui.token永远不进备份。- 按人格恢复:恢复到哪由现在的注册表决定,不信备份里记的路径;目标库属于别的人格就拒绝;恢复前先把现在的样子备一份。
对应的代码
- 路径的默认值:
src/aeria/config.py的Environment(database_path、config_path、persona_registry_path、log_path);人格的库路径:src/aeria/personas.py(默认data/personas/<人格>.db)。 - 库:
src/aeria/storage.py(表结构、迁移);备份:src/aeria/backup.py;插件的目录:src/aeria/plugins.py。
没做到的
- 库没有加密:能登录这台电脑这个账户的人和程序都读得到。
- 日志按大小轮转(默认 10 MB × 5 份),不按时间清。