Replace RootModel wrappers with type aliases and TypeAdapter validation (#3470)
Some checks failed
CI / checks (push) Has been cancelled
CI / all-green (push) Has been cancelled

This commit is contained in:
Marcelo Trylesinski 2026-09-07 17:40:21 +02:00 • committed by GitHub
commit 9972c21aa4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 872 additions and 1127 deletions

View file

@ -454,11 +454,20 @@ def test_elicit_result_surface_accepts_null_content_values_at_every_version_that
surface.model_validate({"action": "accept", "content": {"name": "x", "age": None}})
def test_server_capabilities_extensions_with_null_json_value_round_trips_at_2026():
"""Spec `JSONValue` includes `null`; the ts->json render dropped it from the vendored schema."""
raw: dict[str, Any] = {"extensions": {"x": {"k": None}}}
parsed = v2026.ServerCapabilities.model_validate(raw)
assert parsed.model_dump(mode="json")["extensions"] == {"x": {"k": None}}
def test_discovery_capabilities_preserve_nested_json_values() -> None:
"""Spec `JSONValue` permits nested containers and every JSON scalar, including numbers and null."""
extensions = {"x": {"nested": [None, True, 1, 1.5, "text", {"child": [False]}]}}
raw = {
"supportedVersions": ["2026-07-28"],
"capabilities": {"extensions": extensions},
"resultType": "complete",
"ttlMs": 0,
"cacheScope": "private",
}
parsed = methods.parse_server_result("server/discover", "2026-07-28", raw)
assert isinstance(parsed, types.DiscoverResult)
assert parsed.capabilities.extensions == extensions
assert methods.serialize_server_result("server/discover", "2026-07-28", raw) == raw
def test_elicit_request_surface_accepts_loose_property_schemas():

View file

@ -153,8 +153,6 @@ def _surface_classes(module: ModuleType) -> list[tuple[str, type[BaseModel]]]:
continue
if obj.__module__ != module.__name__ or obj.__name__ != name:
continue # re-export or alias to another model
if getattr(obj, "__pydantic_root_model__", False):
continue # RootModel alias wrapper; the field-subset property does not apply
out.append((f"{tail}.{name}", obj))
return out