mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
feat: dynamic toolset generation for plugin platforms
Plugin platforms now get full toolset support without any entries in toolsets.py. tools_config._get_platform_tools(): Falls back to 'hermes-<name>' when the platform isn't in the static PLATFORMS dict. No more KeyError for plugin platforms. toolsets.resolve_toolset(): Auto-generates a toolset for plugin platforms (hermes-<name>) containing _HERMES_CORE_TOOLS plus any tools the plugin registered into a matching toolset name. This means a plugin can call ctx.register_tool(toolset='irc', ...) and those tools will be included in the hermes-irc toolset automatically. webhook.py: Registry-aware cross-platform delivery. run_agent.py: Platform hints from plugin registry. IRC adapter: Token lock + platform hint. Removed dead token-empty-warning extension. Updated docs.
This commit is contained in:
parent
2a304e5de4
commit
d1c7fa1907
2 changed files with 28 additions and 1 deletions
|
|
@ -475,7 +475,12 @@ 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"]
|
||||
plat_info = PLATFORMS.get(platform)
|
||||
if plat_info:
|
||||
default_ts = plat_info["default_toolset"]
|
||||
else:
|
||||
# Plugin platform — derive toolset name from platform key
|
||||
default_ts = f"hermes-{platform}"
|
||||
toolset_names = [default_ts]
|
||||
|
||||
# YAML may parse bare numeric names (e.g. ``12306:``) as int.
|
||||
|
|
|
|||
22
toolsets.py
22
toolsets.py
|
|
@ -452,6 +452,28 @@ def resolve_toolset(name: str, visited: Set[str] = None) -> List[str]:
|
|||
return [e.name for e in registry._tools.values() if e.toolset == name]
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Auto-generate a toolset for plugin platforms (hermes-<name>).
|
||||
# Gives them _HERMES_CORE_TOOLS plus any tools the plugin registered
|
||||
# into a toolset matching the platform name.
|
||||
if name.startswith("hermes-"):
|
||||
platform_name = name[len("hermes-"):]
|
||||
try:
|
||||
from gateway.platform_registry import platform_registry
|
||||
if platform_registry.is_registered(platform_name):
|
||||
plugin_tools = set(_HERMES_CORE_TOOLS)
|
||||
try:
|
||||
from tools.registry import registry
|
||||
plugin_tools.update(
|
||||
e.name for e in registry._tools.values()
|
||||
if e.toolset == platform_name
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
return list(plugin_tools)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return []
|
||||
|
||||
# Collect direct tools
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue