feat(config): add config service with multi-level resolution #474

Merged
freemo merged 1 commit from feature/m3-config-service into master 2026-03-01 05:26:48 +00:00
Owner

Summary

Implement the complete configuration system with multi-level resolution chain, typed key registry, and CLI integration per specification.

ConfigService changes

  • Expand _build_catalog() to register all 103 config keys (102 spec-aligned + 1 skills extension) across 9 groups: core (14), server (4), actor (5), plan (8), sandbox (5), index (12), context (43), provider (11), skills (1)
  • Each key carries exact dotted-dash name, Python type, default value, explicit env var name per spec, project-scopability flag, and description
  • Fix _env_name() to convert dots and dashes to underscores
  • Provider keys use standard env var names (e.g., OPENAI_API_KEY)
  • Register skills.agent_skills_paths for backward compatibility with skill discovery

CLI commands rewiring

  • Rewrite config set/get/list to use ConfigService instead of Settings
  • Add --verbose flag to config get showing full 5-level resolution chain
  • Add --project flag to config set/get/list for project-scoped overrides
  • Support both glob and regex patterns in config list
  • Validate keys against ConfigService registry with actionable errors

Test fixes

  • Update all Behave feature files and step definitions to use new spec-aligned key names
  • Update robot helpers to use core.log.level instead of old log_level
  • Update robot/benchmark key count expectations from 102 to 103
  • Accept global source name from ConfigService resolution in roundtrip test

Closes #258

## Summary Implement the complete configuration system with multi-level resolution chain, typed key registry, and CLI integration per specification. ### ConfigService changes - Expand `_build_catalog()` to register all 103 config keys (102 spec-aligned + 1 skills extension) across 9 groups: core (14), server (4), actor (5), plan (8), sandbox (5), index (12), context (43), provider (11), skills (1) - Each key carries exact dotted-dash name, Python type, default value, explicit env var name per spec, project-scopability flag, and description - Fix `_env_name()` to convert dots and dashes to underscores - Provider keys use standard env var names (e.g., `OPENAI_API_KEY`) - Register `skills.agent_skills_paths` for backward compatibility with skill discovery ### CLI commands rewiring - Rewrite config set/get/list to use ConfigService instead of Settings - Add `--verbose` flag to config get showing full 5-level resolution chain - Add `--project` flag to config set/get/list for project-scoped overrides - Support both glob and regex patterns in config list - Validate keys against ConfigService registry with actionable errors ### Test fixes - Update all Behave feature files and step definitions to use new spec-aligned key names - Update robot helpers to use `core.log.level` instead of old `log_level` - Update robot/benchmark key count expectations from 102 to 103 - Accept `global` source name from ConfigService resolution in roundtrip test Closes #258
freemo added this to the v3.4.0 milestone 2026-02-28 04:57:13 +00:00
freemo force-pushed feature/m3-config-service from 3ed5e44659
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 13s
CI / build (pull_request) Successful in 15s
CI / security (pull_request) Successful in 29s
CI / quality (pull_request) Successful in 31s
CI / typecheck (pull_request) Successful in 1m1s
CI / integration_tests (pull_request) Failing after 4m35s
CI / benchmark-regression (pull_request) Successful in 20m3s
CI / unit_tests (pull_request) Failing after 33m27s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Failing after 1h17m20s
to ab84752abe
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 30s
CI / typecheck (pull_request) Successful in 35s
CI / integration_tests (pull_request) Successful in 2m46s
CI / unit_tests (pull_request) Successful in 11m22s
CI / docker (pull_request) Successful in 59s
CI / benchmark-regression (pull_request) Successful in 21m34s
CI / coverage (pull_request) Has been cancelled
2026-02-28 17:44:05 +00:00
Compare
freemo force-pushed feature/m3-config-service from ab84752abe
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 30s
CI / typecheck (pull_request) Successful in 35s
CI / integration_tests (pull_request) Successful in 2m46s
CI / unit_tests (pull_request) Successful in 11m22s
CI / docker (pull_request) Successful in 59s
CI / benchmark-regression (pull_request) Successful in 21m34s
CI / coverage (pull_request) Has been cancelled
to c9626775ee
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 20s
CI / typecheck (pull_request) Successful in 35s
CI / security (pull_request) Successful in 50s
CI / integration_tests (pull_request) Successful in 4m21s
CI / unit_tests (pull_request) Successful in 12m32s
CI / docker (pull_request) Successful in 39s
CI / benchmark-regression (pull_request) Successful in 28m28s
CI / coverage (pull_request) Failing after 44m9s
2026-02-28 18:18:02 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-02-28 18:40:08 +00:00
freemo force-pushed feature/m3-config-service from c9626775ee
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 20s
CI / typecheck (pull_request) Successful in 35s
CI / security (pull_request) Successful in 50s
CI / integration_tests (pull_request) Successful in 4m21s
CI / unit_tests (pull_request) Successful in 12m32s
CI / docker (pull_request) Successful in 39s
CI / benchmark-regression (pull_request) Successful in 28m28s
CI / coverage (pull_request) Failing after 44m9s
to 994672ef45
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 16s
CI / lint (pull_request) Successful in 24s
CI / quality (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 1m1s
CI / security (pull_request) Successful in 1m7s
CI / integration_tests (pull_request) Successful in 2m47s
CI / benchmark-regression (pull_request) Successful in 23m32s
CI / unit_tests (pull_request) Failing after 25m48s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Failing after 46m50s
2026-03-01 03:15:22 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-01 03:15:36 +00:00
freemo force-pushed feature/m3-config-service from 994672ef45
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 16s
CI / lint (pull_request) Successful in 24s
CI / quality (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 1m1s
CI / security (pull_request) Successful in 1m7s
CI / integration_tests (pull_request) Successful in 2m47s
CI / benchmark-regression (pull_request) Successful in 23m32s
CI / unit_tests (pull_request) Failing after 25m48s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Failing after 46m50s
to 7c4663b8ee
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 18s
CI / build (pull_request) Successful in 19s
CI / typecheck (pull_request) Successful in 38s
CI / security (pull_request) Successful in 46s
CI / integration_tests (pull_request) Successful in 2m52s
CI / unit_tests (pull_request) Successful in 12m35s
CI / docker (pull_request) Successful in 38s
CI / benchmark-regression (pull_request) Successful in 20m57s
CI / coverage (pull_request) Successful in 47m23s
CI / lint (push) Successful in 12s
CI / build (push) Successful in 14s
CI / quality (push) Successful in 17s
CI / typecheck (push) Successful in 32s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 40s
CI / integration_tests (push) Successful in 2m52s
CI / benchmark-publish (push) Successful in 12m29s
CI / unit_tests (push) Successful in 12m31s
CI / docker (push) Successful in 38s
CI / coverage (push) Successful in 47m17s
2026-03-01 04:38:42 +00:00
Compare
freemo merged commit 7c4663b8ee into master 2026-03-01 05:26:48 +00:00
freemo deleted branch feature/m3-config-service 2026-03-01 05:26:48 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
cleveragents/cleveragents-core!474
No description provided.