自动化环境安装与配置
本页讲清如何在 CI / cron / agent runner 里把 mailagent CLI 跑起来,并理解它的配置加载顺序——后者直接决定”我设的值到底有没有生效”。
CLI 通过 pip 的 optional-dependencies 安装。从仓库根目录(已有 venv)执行:
source venv/bin/activatepip install -e ".[cli,dev]"# cli: typer / rich / pyyaml# dev: pytest + jsonschema>=4.18 + referencing(跑 schema 校验时需要)验证:
which mailagent # 应是 <project>/venv/bin/mailagentmailagent --version # 打印版本号mailagent --help # 列 10 个 group + 全局 flags配置优先级链
Section titled “配置优先级链”CLI 启动时按下列顺序加载配置,后者覆盖前者:
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1(最低) | ~/.config/mailagent/config.toml | 用户级,可选 |
| 2 | <project>/.env | 与服务共用的 pydantic Config |
| 3 | --config PATH | CLI 显式指定的配置文件 |
| 4 | MAILAGENT_* 环境变量 | 如 MAILAGENT_CLI_API_KEY |
| 5(最高) | 命令行 flag | --db-path / --api-key 等 |
例:mailagent --config x.toml email get 53675 会用 x.toml 里的 db_path 而非 .env。
# db 路径覆盖:临时指向另一个库(如 app 库 vs 主仓 PM2 库)mailagent --db-path ~/Library/Application\ Support/mailagent-frontend/data/sync_store.db \ -o json email list --limit 5
# API key 覆盖(写命令):env 优先于 .env,flag 优先于 envMAILAGENT_CLI_API_KEY=xxx mailagent email flag 53675 --is-readmailagent --api-key xxx email flag 53675 --is-readload_cli_config() 工厂——为什么配置一定生效
Section titled “load_cli_config() 工厂——为什么配置一定生效”CLI 不用模块级单例 from src.config import config。原因:pydantic Settings 在 import 时就立即加载 .env,那样 --config flag 来得太晚、无法覆盖。
CLI 改用显式工厂 load_cli_config(config_path, env_overrides, flag_overrides):每次启动按上面的优先级链重新构造一个 Config 实例。这意味着:
- 你传的
--config/--db-path/--api-key保证生效,不会被 import-time 锁死的.env覆盖。 - 服务端进程(
main.py/ pm2)仍用全局 singleton,与 CLI 路径互不干扰——CLI 是短进程,每次干净加载。
MAILAGENT_CLI_API_KEY
Section titled “MAILAGENT_CLI_API_KEY”写命令需要鉴权(读命令不需要)。在自动化环境里用环境变量注入,不要写进 --api-key 命令行(会进 shell history / 进程列表):
# CI / cron:从 secret store 注入环境变量export MAILAGENT_CLI_API_KEY="$(cat /run/secrets/mailagent_cli_key)"mailagent email flag 53675 --is-read # 自动用 env 里的 key服务端 .env 里也配同名 MAILAGENT_CLI_API_KEY,CLI 用 hmac.compare_digest 比对。完整规则(读/写命令清单、--dry-run 跳过鉴权、dev bypass 风险)见 写命令鉴权契约。
shell 补全
Section titled “shell 补全”mailagent 基于 typer,自带 shell completion:
# 安装当前 shell 的补全(zsh / bash / fish)mailagent --install-completion zsh# 或仅打印补全脚本,自己决定怎么 sourcemailagent --show-completion zsh补全覆盖资源、动作、flag,可枚举——这也是设计原则 2「资源-动作一致」给 agent autocomplete 的红利。
常见安装问题
Section titled “常见安装问题”| 现象 | 原因 | 处理 |
|---|---|---|
mailagent: command not found | venv 未激活 / PATH 没含 venv/bin | source venv/bin/activate 或用绝对路径 |
写命令报 E_AUTH_FAILED(exit 4) | 没传 MAILAGENT_CLI_API_KEY | 注入 env 变量;见 鉴权 |
| 读命令报 SQLite 权限错 | 缺 Full Disk Access | 给 runner 授予 FDA |
admin db-version 报 E_SCHEMA_MISMATCH(exit 5) | db_version 与 expected 不符 | 先跑后端起 DB 迁移;见 退出码 |