From 18e4849e759a246daa5ccb6bacc9e2f856bb38a2 Mon Sep 17 00:00:00 2001 From: Hongming Wang Date: Sat, 2 May 2026 04:08:10 -0700 Subject: [PATCH] fix(cli): handle plugin platforms in _get_platform_tools toolset lookup The static PLATFORMS registry only contains built-in platforms (slack, discord, etc.). Plugin platforms registered via PluginContext.register_platform_adapter aren't in PLATFORMS, so the existing PLATFORMS[platform]["default_toolset"] lookup raised KeyError during agent loop init for any plugin-platform message. Caught by an end-to-end test that spawns hermes gateway run + a stub OpenAI-compat LLM and routes a real message through a plugin platform (molecule-a2a). Fall back to "hermes-cli" (most permissive in-tree toolset) for plugin platforms; operators can override per-platform via config.platform_toolsets. Co-Authored-By: Claude Opus 4.7 (1M context) --- hermes_cli/tools_config.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hermes_cli/tools_config.py b/hermes_cli/tools_config.py index 8bfbc059..05b788b0 100644 --- a/hermes_cli/tools_config.py +++ b/hermes_cli/tools_config.py @@ -516,7 +516,15 @@ def _get_platform_tools( toolset_names = platform_toolsets.get(platform) if toolset_names is None or not isinstance(toolset_names, list): - default_ts = PLATFORMS[platform]["default_toolset"] + # Plugin platforms (registered via PluginContext.register_platform_adapter) + # aren't in the static PLATFORMS registry — fall back to the cli + # toolset, which is the most permissive in-tree default. Operators + # can override per-platform via config.platform_toolsets. + platform_info = PLATFORMS.get(platform) + if platform_info is None: + default_ts = "hermes-cli" + else: + default_ts = platform_info["default_toolset"] toolset_names = [default_ts] # YAML may parse bare numeric names (e.g. ``12306:``) as int.