hermes-agent/tests/gateway/relay/test_descriptor_from_entry.py
Ben 3db49381d6 feat(relay): derive descriptor from PlatformEntry
CapabilityDescriptor.from_platform_entry() projects an existing PlatformEntry
(label, max_message_length, emoji, platform_hint, pii_safe, name) into a
descriptor, proving the descriptor is a projection of existing config rather
than a parallel concept. Runtime-only capabilities (len_unit, draft/edit/
thread/markdown) are caller-supplied. max_message_length==0 ('no limit') maps
to the stream_consumer 4096 default.

Phase 0 complete. Task 0.3 of the gateway-relay plan.
2026-06-17 16:37:45 -07:00

64 lines
2.2 KiB
Python

"""Descriptor <- PlatformEntry projection (relay Phase 0, Task 0.3).
Proves the CapabilityDescriptor is a projection of the existing PlatformEntry,
not a parallel concept: the entry's label/limit/emoji/hint/pii fields carry
straight through.
"""
from gateway.platform_registry import PlatformEntry
from gateway.relay.descriptor import CONTRACT_VERSION, CapabilityDescriptor
def _entry(**overrides) -> PlatformEntry:
base = dict(
name="telegram",
label="Telegram",
adapter_factory=lambda cfg: None,
check_fn=lambda: True,
max_message_length=4096,
pii_safe=False,
emoji="\u2708\ufe0f",
platform_hint="You are on Telegram.",
)
base.update(overrides)
return PlatformEntry(**base)
def test_projection_carries_platform_entry_fields():
d = CapabilityDescriptor.from_platform_entry(_entry(), len_unit="utf16")
assert d.contract_version == CONTRACT_VERSION
assert d.platform == "telegram"
assert d.label == "Telegram"
assert d.max_message_length == 4096
assert d.emoji == "\u2708\ufe0f"
assert d.platform_hint == "You are on Telegram."
assert d.pii_safe is False
assert d.len_unit == "utf16"
def test_zero_max_length_maps_to_4096_default():
"""PlatformEntry.max_message_length == 0 means 'no limit'; the descriptor
carries a concrete bound matching the stream_consumer default."""
d = CapabilityDescriptor.from_platform_entry(_entry(max_message_length=0))
assert d.max_message_length == 4096
def test_runtime_capabilities_supplied_by_caller():
"""PlatformEntry doesn't encode draft/edit/thread/markdown behavior — those
come from the caller (the connector, reading the live adapter)."""
d = CapabilityDescriptor.from_platform_entry(
_entry(),
supports_draft_streaming=True,
supports_edit=False,
supports_threads=True,
markdown_dialect="discord",
)
assert d.supports_draft_streaming is True
assert d.supports_edit is False
assert d.supports_threads is True
assert d.markdown_dialect == "discord"
def test_projection_roundtrips_through_json():
d = CapabilityDescriptor.from_platform_entry(_entry(), len_unit="utf16")
assert CapabilityDescriptor.from_json(d.to_json()) == d