refactor: DLO-16/17/18/20 — CLI simplification, config Pydantic, planner split, type system unification

DLO-16: Reduce cli.py from 1073 to 83 lines by registering Click commands from commands/*.py modules
DLO-17: Migrate Config to Pydantic BaseModel for validation
DLO-18: Split planner.py (826 lines) into orchestration, path rendering, and duplicate handling modules
DLO-20: Unify type system — convert 14 dataclasses to Pydantic BaseModel, keep TypedDicts as JSON schema hints

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
windyboy
2026-09-27 10:47:04 +08:00
co-authored by Claude Sonnet 4.5
parent 8a60aaf9a9
commit fe03a31dd4
23 changed files with 1964 additions and 2714 deletions
+6 -4
View File
@@ -2,10 +2,12 @@
from pathlib import Path
from vlm.config import Config, validate_config
import pytest
from pydantic import ValidationError
from vlm.config import Config
def test_validate_rejects_non_positive_enrichment_concurrency():
config = Config(library_root=Path("/test"), enrichment_max_concurrency=0)
errors = validate_config(config)
assert any("enrichment_max_concurrency must be >= 1" in e for e in errors)
with pytest.raises(ValidationError, match="enrichment_max_concurrency"):
Config(library_root=Path("/test"), enrichment_max_concurrency=0)