Skip to content

refactor(config):配置快照与 Provider Selection 边界收口#239

Merged
phantom5099 merged 7 commits into
1024XEngineer:mainfrom
phantom5099:main
Apr 12, 2026
Merged

refactor(config):配置快照与 Provider Selection 边界收口#239
phantom5099 merged 7 commits into
1024XEngineer:mainfrom
phantom5099:main

Conversation

@phantom5099

Copy link
Copy Markdown
Collaborator

变更说明

本次本地改动围绕 config / provider selection / runtime provider 输入 做了一次边界收口。

目标不是继续兼容旧配置,也不是增加新的抽象层,而是把当前实现里已经承担不同职责的几部分逻辑拆清楚:

  • config 负责配置快照、静态默认值、YAML 持久化与 provider 装配
  • config/state 负责当前 selected_provider/current_model 的选择与修正
  • provider_runtime 负责把解析后的 provider 配置收敛成 provider 层真正消费的运行时输入

同时,文档和测试也同步更新为当前真实实现,避免继续保留与代码冲突的旧表述。

主要改动

  • 将配置默认值语义收紧为 StaticDefaults(),明确它只表示静态默认值骨架,不再暗示“完整可运行配置”。
  • Config.Validate() 收紧为 ValidateSnapshot(),明确它只校验配置快照结构,不负责修正 selected_provider/current_model 的运行时可用性。
  • 删除 internal/config/selection.go,把 provider/model 选择逻辑下沉到 internal/config/state
    • 新增 state.Service
    • 新增 SelectionProviderOption
    • 明确 EnsureSelection / SelectProvider / SetCurrentModel / ListModels 的职责边界
  • provider_adapter.go 重命名为 provider_runtime.go,把解析后的 ResolvedProviderConfig 显式转换为 provider.RuntimeConfig,避免上层直接共享 config 结构细节。
  • 收紧 Loader 的语义:
    • 严格解析 config.yaml
    • 组装 builtin/custom provider
    • 应用静态默认值
    • 执行快照级校验
  • 更新 app/runtime/tui 对 provider 选择服务的接入方式,使上层依赖 config/state.Service 而不是继续直接耦合旧的 config 内部选择实现。
  • 重写配置文档:
    • 明确当前不自动加载 .env
    • 明确当前不兼容、不清洗旧版 YAML 字段
    • 明确 workdir 不进入 config.yaml
    • 明确“快照校验”和“选择修正”是两层职责
  • 同步补齐和调整测试,覆盖:
    • 静态默认值不是完整运行时配置
    • ValidateSnapshot() 不等于 runtime-ready
    • custom provider 的选择、发现与回退策略
    • 上层模块对新 provider selection 接口的适配

预期收益

  • config 的职责边界更清楚,后续不容易继续往里塞 selection、catalog 或 runtime 语义。
  • “默认值”“校验”“可运行选择状态”三件事被拆开,减少命名误导和错误心智模型。
  • provider/model 选择逻辑从 config 根包中分离出来,后续维护和测试成本更低。
  • provider 层与 config 层之间的运行时输入边界更稳定,减少跨层共享结构导致的语义泄漏。
  • 文档与实现重新对齐,后续排查配置问题时不会再被旧说明误导。

# Conflicts:
#	docs/guides/configuration.md
#	internal/config/model.go
#	internal/tui/core/app/update_test.go
fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

@codecov

codecov Bot commented Apr 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 89.10082% with 40 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/config/state/service.go 87.72% 14 Missing and 13 partials ⚠️
internal/config/loader.go 70.00% 5 Missing and 7 partials ⚠️
internal/config/model.go 91.66% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@phantom5099

Copy link
Copy Markdown
Collaborator Author

/review -codex

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

fennoai[bot]

This comment was marked as outdated.

@phantom5099

Copy link
Copy Markdown
Collaborator Author

/review -codex

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

整体代码改动边界清晰,测试覆盖也完整。我这边保留 1 条文档与实现行为不一致的问题,建议修正文案避免误导排障。

`config.yaml` 里的 `selected_provider/current_model` 表达的是“用户上次保存的选择状态”。

## 故障排查
启动时系统还会基于当前 provider、driver 支持情况和模型目录快照执行选择修正。因此需要区分两件事:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里写“启动时会基于 driver 支持情况执行选择修正”,但当前实现在已选 provider 的 driver 不受支持时会直接返回 ErrDriverUnsupported,不会自动切换到其他 provider(internal/config/state/service.goensureSupportedProvider 的调用路径)。建议把文案改成“会进行选择校验与必要修正;若 driver 不受支持会报错并中止”之类,和真实行为保持一致。

@phantom5099

Copy link
Copy Markdown
Collaborator Author

/code -codex 只允许你帮我提高测试覆盖率

@fennoai

fennoai Bot commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

完成情况

已按你的要求仅做“提升测试覆盖率”,未改任何业务实现代码。

已完成内容

  • 新增并补强 internal/config/state/service_test.go 的异常与漂移分支测试(nil receiver 校验、选择状态漂移、上下文中断、更新阶段状态变化等)。
  • 新增并补强 internal/config/state/model_test.go 的辅助函数分支测试(ResolveDiscoveryConfig 错误透传、identity 错误分支、snapshot 比较边界分支)。
  • 本地验证通过:go test ./...

覆盖率结果(本地)

  • internal/config/state 包覆盖率:86.6% -> 94.7%
  • internal/config/state/model.go:提升到 100%
  • internal/config/state/service.go:分支覆盖显著提升(SelectProvider/SetCurrentModel/ListProviderOptions 等关键路径均补到更多错误分支)。

提交信息

  • Commit: 4dfb79684e222419c1b0b4a56579b0cce2f0301f
  • Message: test(config): improve selection state branch coverage
  • 已推送到当前分支:fork-pr-239-1775974450

额外说明

  • 按 fork 推送流程,已同步创建 fork 内 PR:https://github.com/phantom5099/neo-code/pull/1

View job run

xgopilot and others added 2 commits April 12, 2026 06:20
Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: phantom5099 <245659304+phantom5099@users.noreply.github.com>
test(config): improve selection state branch coverage
@phantom5099 phantom5099 merged commit e4cb866 into 1024XEngineer:main Apr 12, 2026
2 checks passed
@fennoai fennoai Bot mentioned this pull request Apr 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants