Add a single boot-config pipeline (file/env/CLI) with env profiles and explain #5

Closed
weichen wants to merge 1 commits from feature/boot-config into main
Owner

目标

启动参数支持三层来源统一解析,按 dev/test/prod 环境段一键切换:

  • 优先级:内置默认 → 显式配置文件(--config,环境段式或平面)→ 环境变量(AGENT_SYSTEM_*)→ 显式 CLI;只有实际传入的 CLI 参与覆盖,删除 override 恢复继承。
  • 配置键:addr / data(工作区根目录)/ plugins / artifacts / dsn(数据库档)/ auth / mock + settings 子树(模型、检索、限流等,按设置 schema 校验,未知键定位报错)。
  • config show 只读诊断(逐键来源 + DSN/apiKey 脱敏,不建库不改目录);config init 生成 dev/test/prod 模板(0600)。
  • 设置覆盖链对齐设计 4.9:文件 settings 子树经系统层注入(defaults 与 user 之间,不落库);GET /api/settings 附加 system 字段(脱敏,向后兼容)。
  • 实例隔离:环境段间 data 目录重叠(相同/嵌套)启动告警;环境段必须显式选择,不从 cwd/分支名推断。
  • apikey 子命令同管道解析存储档定位。

验证

  • go test ./... 全绿(新增 internal/config 16 例、settings 覆盖校验、server 系统层 e2e)。
  • 真实二进制冒烟:config init → config show --env dev(来源标注与脱敏);AGENT_SYSTEM_ADDR 覆盖文件层、--data 覆盖环境层;serve --config cfg.json --env dev(启动日志 config 行、/api/settings system 层生效值、user 层无 mock 残留);configs/agent-system.example.json 三段均可解析。

行为变化

  • --mock(及文件/环境 mock)改为系统层启动注入,不再写入 user 设置;旧库可能残留 runtime.mock=true,README 有处理说明。
  • serve 默认行为不变(不给 --config 时等同原 CLI-only)。
## 目标 启动参数支持三层来源统一解析,按 dev/test/prod 环境段一键切换: - 优先级:内置默认 → 显式配置文件(--config,环境段式或平面)→ 环境变量(AGENT_SYSTEM_*)→ 显式 CLI;只有实际传入的 CLI 参与覆盖,删除 override 恢复继承。 - 配置键:addr / data(工作区根目录)/ plugins / artifacts / dsn(数据库档)/ auth / mock + settings 子树(模型、检索、限流等,按设置 schema 校验,未知键定位报错)。 - `config show` 只读诊断(逐键来源 + DSN/apiKey 脱敏,不建库不改目录);`config init` 生成 dev/test/prod 模板(0600)。 - 设置覆盖链对齐设计 4.9:文件 settings 子树经系统层注入(defaults 与 user 之间,不落库);GET /api/settings 附加 system 字段(脱敏,向后兼容)。 - 实例隔离:环境段间 data 目录重叠(相同/嵌套)启动告警;环境段必须显式选择,不从 cwd/分支名推断。 - apikey 子命令同管道解析存储档定位。 ## 验证 - `go test ./...` 全绿(新增 internal/config 16 例、settings 覆盖校验、server 系统层 e2e)。 - 真实二进制冒烟:`config init` → `config show --env dev`(来源标注与脱敏);AGENT_SYSTEM_ADDR 覆盖文件层、--data 覆盖环境层;`serve --config cfg.json --env dev`(启动日志 config 行、/api/settings system 层生效值、user 层无 mock 残留);configs/agent-system.example.json 三段均可解析。 ## 行为变化 - `--mock`(及文件/环境 mock)改为系统层启动注入,不再写入 user 设置;旧库可能残留 runtime.mock=true,README 有处理说明。 - serve 默认行为不变(不给 --config 时等同原 CLI-only)。
weichen added 1 commit 2026-09-30 04:26:51 +00:00
Why: 启动参数原先只有 CLI flags 与库内设置,无法以配置文件按 dev/test/prod
环境切换工作区目录、存储档、模型密钥等;需要配置文件/环境变量/命令行三层
来源统一解析并支持多环境启动。

Evidence: go test ./... 全绿(config/settings 新增单测 + server 系统层 e2e);
真实二进制冒烟:config init/show(逐键来源标注、DSN 与 apiKey 脱敏、env+flag
覆盖优先级)、serve --config --env dev(启动日志与 /api/settings system 层、
user 层无 mock 残留)、configs/agent-system.example.json 三段均可解析。

Impact: serve/apikey 新增 --config/--env 与 AGENT_SYSTEM_* 环境变量;新增
config show|init 子命令(只读诊断与模板);--mock 改为启动注入、不再写入 user
设置(旧库残留处理见 README 兼容性说明);GET /api/settings 附加 system
字段(向后兼容)。

Refs: development-guidelines standards/configuration.md(单一解析管道/只读
explain/实例隔离);设计方案 4.9 设置分层。
weichen closed this pull request 2026-09-30 04:32:11 +00:00
Author
Owner

关闭原因:与已合入的 #4(feature/config-surface,经批准的配置面设计 2026-09-30-configuration-surface.md)重复——本 PR 为并行会话对同一需求的独立实现,按协作规则拒绝陈旧/重复候选。

差异点(本 PR 有、#4 无,留作后续提案参考,不随本 PR 合入):

  1. 环境段式单文件 + --env(设计选择了 envs/ 多文件方案,故不采纳)
  2. 配置文件 settings 子树注入系统层(设计明确非目标,不采纳)
  3. apikey 子命令支持 --config 解析存储档定位
  4. --mock 改为启动注入不落库(#4 仍写入 user 设置,粘性残留)
  5. GET /api/settings 附加 system 层(脱敏)

分支 feature/boot-config 暂留远端供比对,可随时删除。

关闭原因:与已合入的 #4(feature/config-surface,经批准的配置面设计 2026-09-30-configuration-surface.md)重复——本 PR 为并行会话对同一需求的独立实现,按协作规则拒绝陈旧/重复候选。 差异点(本 PR 有、#4 无,留作后续提案参考,不随本 PR 合入): 1. 环境段式单文件 + --env(设计选择了 envs/ 多文件方案,故不采纳) 2. 配置文件 settings 子树注入系统层(设计明确非目标,不采纳) 3. apikey 子命令支持 --config 解析存储档定位 4. --mock 改为启动注入不落库(#4 仍写入 user 设置,粘性残留) 5. GET /api/settings 附加 system 层(脱敏) 分支 feature/boot-config 暂留远端供比对,可随时删除。

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: weichen/Agent-System-Backend#5