mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-05 02:31:47 +00:00
feat: complete plugin platform parity — all 12 integration points
Extends the platform plugin interface from Phase 1 to cover every touchpoint where built-in platforms have hardcoded behavior. - allowed_users_env / allow_all_env: per-platform auth env vars - max_message_length: smart-chunking for send_message tool - pii_safe: session PII redaction flag - emoji: CLI/gateway display - allow_update_command: /update access control send_message tool (tools/send_message_tool.py): - Replaced hardcoded platform_map dict with Platform() call - Added _send_via_adapter() for plugin platforms — routes through live gateway adapter when available - Registry-aware max message length for smart chunking Cron delivery (cron/scheduler.py): - Replaced hardcoded 15-entry platform_map with Platform() call - Plugin platforms now work as cron delivery targets User authorization (gateway/run.py _is_user_authorized): - Registry fallback: checks PlatformEntry.allowed_users_env and allow_all_env when platform not in hardcoded maps - Plugin platforms get per-platform auth support _UPDATE_ALLOWED_PLATFORMS: checks registry allow_update_command flag Channel directory: includes plugin platforms in session enumeration Orphaned config warning: descriptive message when plugin platform is in config but no plugin registered it Gateway weakref: _gateway_runner_ref for cross-module adapter access hermes status: shows plugin platforms with (plugin) tag hermes gateway setup: plugin platforms appear in menu with setup hints hermes_cli/platforms.py: get_all_platforms() merges with registry, platform_label() falls back to registry for plugin names - 8 new tests (extended fields, cron resolution, platforms merge) - Updated 3 tests for new Platform() based resolution - 2829 passed, 24 pre-existing failures, zero new failures
This commit is contained in:
parent
8f144fe36b
commit
2e20f6ae2d
11 changed files with 376 additions and 86 deletions
|
|
@ -3779,35 +3779,61 @@ def gateway_setup():
|
|||
print()
|
||||
print_header("Messaging Platforms")
|
||||
|
||||
# Build menu from built-in platforms + plugin platforms
|
||||
_plugin_entries = []
|
||||
try:
|
||||
from gateway.platform_registry import platform_registry
|
||||
_plugin_entries = platform_registry.plugin_entries()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
menu_items = []
|
||||
for plat in _PLATFORMS:
|
||||
status = _platform_status(plat)
|
||||
menu_items.append(f"{plat['label']} ({status})")
|
||||
for pentry in _plugin_entries:
|
||||
configured = pentry.check_fn()
|
||||
status_str = "configured" if configured else "not configured"
|
||||
menu_items.append(f"{pentry.emoji} {pentry.label} ({status_str}) [plugin]")
|
||||
menu_items.append("Done")
|
||||
|
||||
_total_platforms = len(_PLATFORMS) + len(_plugin_entries)
|
||||
choice = prompt_choice("Select a platform to configure:", menu_items, len(menu_items) - 1)
|
||||
|
||||
if choice == len(_PLATFORMS):
|
||||
if choice == _total_platforms:
|
||||
break
|
||||
|
||||
platform = _PLATFORMS[choice]
|
||||
if choice < len(_PLATFORMS):
|
||||
platform = _PLATFORMS[choice]
|
||||
|
||||
if platform["key"] == "whatsapp":
|
||||
_setup_whatsapp()
|
||||
elif platform["key"] == "signal":
|
||||
_setup_signal()
|
||||
elif platform["key"] == "weixin":
|
||||
_setup_weixin()
|
||||
elif platform["key"] == "dingtalk":
|
||||
_setup_dingtalk()
|
||||
elif platform["key"] == "feishu":
|
||||
_setup_feishu()
|
||||
elif platform["key"] == "qqbot":
|
||||
_setup_qqbot()
|
||||
elif platform["key"] == "wecom":
|
||||
_setup_wecom()
|
||||
if platform["key"] == "whatsapp":
|
||||
_setup_whatsapp()
|
||||
elif platform["key"] == "signal":
|
||||
_setup_signal()
|
||||
elif platform["key"] == "weixin":
|
||||
_setup_weixin()
|
||||
elif platform["key"] == "dingtalk":
|
||||
_setup_dingtalk()
|
||||
elif platform["key"] == "feishu":
|
||||
_setup_feishu()
|
||||
elif platform["key"] == "qqbot":
|
||||
_setup_qqbot()
|
||||
elif platform["key"] == "wecom":
|
||||
_setup_wecom()
|
||||
else:
|
||||
_setup_standard_platform(platform)
|
||||
else:
|
||||
_setup_standard_platform(platform)
|
||||
# Plugin platform — show env var setup instructions
|
||||
pentry = _plugin_entries[choice - len(_PLATFORMS)]
|
||||
print(f"\n {pentry.label} (plugin platform)")
|
||||
if pentry.required_env:
|
||||
print(f" Required env vars: {', '.join(pentry.required_env)}")
|
||||
print(f" Set these in ~/.hermes/.env or config.yaml gateway.platforms.{pentry.name}.extra")
|
||||
else:
|
||||
print(f" Configure in config.yaml under gateway.platforms.{pentry.name}")
|
||||
if pentry.install_hint:
|
||||
print(f" {pentry.install_hint}")
|
||||
print()
|
||||
|
||||
# ── Post-setup: offer to install/restart gateway ──
|
||||
any_configured = any(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue