hermes-platform-molecule-a2a/hermes_platform_molecule_a2a/__init__.py
Hongming Wang b6d67520cf feat: dual-mode for upstream register_platform (post-#17751) + legacy register_platform_adapter
Same migration shape as Molecule-AI/hermes-channel-molecule@754d162.

NousResearch/hermes-agent#17751 (merged 2026-04-30) shipped a
comprehensive pluggable-platform system with:
- ctx.register_platform(name, label, adapter_factory, check_fn, ...)
- Open Platform enum (Platform('molecule-a2a') via _missing_())

Pre-#17751 forks (incl. the patched hermes-agent baked into
template-hermes' Dockerfile today) expose ctx.register_platform_adapter
+ closed Platform + PluginPlatformIdentifier instead. Detect at runtime
in both register() and the adapter's super().__init__ identity arg so
the same wheel installs cleanly on both shapes.

template-hermes can now drop its hermes-agent fork install and use
upstream main once the in-container tests pass on stock hermes-agent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 07:50:18 -07:00

52 lines
2.0 KiB
Python

"""Hermes plugin: Molecule A2A platform adapter.
Loaded by hermes_cli.plugins via the ``hermes_agent.plugins`` entry
point. The ``register`` callable below is invoked with a PluginContext;
it claims the platform name ``molecule-a2a`` so that GatewayConfig
routes ``platforms.molecule-a2a`` config blocks to this adapter.
"""
from .adapter import MoleculeA2APlatformAdapter, check_molecule_a2a_requirements
__all__ = [
"MoleculeA2APlatformAdapter",
"check_molecule_a2a_requirements",
"register",
]
def register(ctx) -> None:
"""Plugin entry point — dual-mode for upstream + legacy fork APIs.
Upstream NousResearch/hermes-agent#17751 (merged 2026-04-30) shipped
``ctx.register_platform(name, label, adapter_factory, check_fn, ...)``.
Pre-#17751 forks expose ``ctx.register_platform_adapter(name,
adapter_class, requirements_check)`` instead — narrower signature,
no factory. Detect at runtime so the same wheel installs cleanly on
both.
"""
if hasattr(ctx, "register_platform"):
ctx.register_platform(
name="molecule-a2a",
label="Molecule A2A",
adapter_factory=lambda cfg: MoleculeA2APlatformAdapter(cfg),
check_fn=check_molecule_a2a_requirements,
install_hint=(
"configure platforms.molecule-a2a in config.yaml; "
"in-container hermes only — for external hermes use "
"Molecule-AI/hermes-channel-molecule instead"
),
)
elif hasattr(ctx, "register_platform_adapter"):
ctx.register_platform_adapter(
name="molecule-a2a",
adapter_class=MoleculeA2APlatformAdapter,
requirements_check=check_molecule_a2a_requirements,
)
else:
raise RuntimeError(
"hermes-platform-molecule-a2a: this hermes-agent version "
"exposes neither register_platform (upstream #17751+) nor "
"register_platform_adapter (legacy fork) — cannot register"
)