From 1d5e25f35367af7ff15856bca232ba44bd0bc84f Mon Sep 17 00:00:00 2001 From: ztexydt-cqh <276649498+ztexydt-cqh@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:15:04 +0800 Subject: [PATCH] fix(gateway): persist /sethome home channel to .env across all platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _handle_set_home_command wrote FEISHU_HOME_CHANNEL / DISCORD_HOME_CHANNEL / etc. as top-level keys into config.yaml, but load_gateway_config() only reads home channels from env vars. After every gateway restart the home channel was lost — on every platform, not just Feishu. Fix: switch /sethome to save_env_value(), which atomically writes to ~/.hermes/.env and updates the current process env in one shot. The handler builds the env key from platform_name.upper(), so one line change repairs /sethome for every platform that has a HOME_CHANNEL env var. Also widen _EXTRA_ENV_KEYS in hermes_cli/config.py so HOME_CHANNEL and HOME_CHANNEL_NAME for every platform are treated as managed env vars: SIGNAL, SLACK, SMS, DINGTALK, BLUEBUBBLES, FEISHU, WECOM, YUANBAO, plus the missing *_NAME variants for DISCORD/TELEGRAM/MATTERMOST. Closes #16806 Co-authored-by: teknium1 --- gateway/run.py | 14 +++----------- hermes_cli/config.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/gateway/run.py b/gateway/run.py index 827ec01b..60fbd490 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -6384,18 +6384,10 @@ class GatewayRunner: env_key = f"{platform_name.upper()}_HOME_CHANNEL" - # Save to config.yaml + # Save to .env so it persists across restarts try: - import yaml - config_path = _hermes_home / 'config.yaml' - user_config = {} - if config_path.exists(): - with open(config_path, encoding="utf-8") as f: - user_config = yaml.safe_load(f) or {} - user_config[env_key] = chat_id - atomic_yaml_write(config_path, user_config) - # Also set in the current environment so it takes effect immediately - os.environ[env_key] = str(chat_id) + from hermes_cli.config import save_env_value + save_env_value(env_key, str(chat_id)) except Exception as e: return f"Failed to save home channel: {e}" diff --git a/hermes_cli/config.py b/hermes_cli/config.py index d3b00fe9..13337316 100644 --- a/hermes_cli/config.py +++ b/hermes_cli/config.py @@ -35,26 +35,35 @@ _LAST_EXPANDED_CONFIG_BY_PATH: Dict[str, Any] = {} _EXTRA_ENV_KEYS = frozenset({ "OPENAI_API_KEY", "OPENAI_BASE_URL", "ANTHROPIC_API_KEY", "ANTHROPIC_TOKEN", - "DISCORD_HOME_CHANNEL", "TELEGRAM_HOME_CHANNEL", + "DISCORD_HOME_CHANNEL", "DISCORD_HOME_CHANNEL_NAME", + "TELEGRAM_HOME_CHANNEL", "TELEGRAM_HOME_CHANNEL_NAME", + "SLACK_HOME_CHANNEL", "SLACK_HOME_CHANNEL_NAME", "SIGNAL_ACCOUNT", "SIGNAL_HTTP_URL", "SIGNAL_ALLOWED_USERS", "SIGNAL_GROUP_ALLOWED_USERS", + "SIGNAL_HOME_CHANNEL", "SIGNAL_HOME_CHANNEL_NAME", + "SMS_HOME_CHANNEL", "SMS_HOME_CHANNEL_NAME", "DINGTALK_CLIENT_ID", "DINGTALK_CLIENT_SECRET", + "DINGTALK_HOME_CHANNEL", "DINGTALK_HOME_CHANNEL_NAME", "FEISHU_APP_ID", "FEISHU_APP_SECRET", "FEISHU_ENCRYPT_KEY", "FEISHU_VERIFICATION_TOKEN", + "FEISHU_HOME_CHANNEL", "FEISHU_HOME_CHANNEL_NAME", + "YUANBAO_HOME_CHANNEL", "YUANBAO_HOME_CHANNEL_NAME", "WECOM_BOT_ID", "WECOM_SECRET", "WECOM_CALLBACK_CORP_ID", "WECOM_CALLBACK_CORP_SECRET", "WECOM_CALLBACK_AGENT_ID", "WECOM_CALLBACK_TOKEN", "WECOM_CALLBACK_ENCODING_AES_KEY", "WECOM_CALLBACK_HOST", "WECOM_CALLBACK_PORT", + "WECOM_HOME_CHANNEL", "WECOM_HOME_CHANNEL_NAME", "WEIXIN_ACCOUNT_ID", "WEIXIN_TOKEN", "WEIXIN_BASE_URL", "WEIXIN_CDN_BASE_URL", "WEIXIN_HOME_CHANNEL", "WEIXIN_HOME_CHANNEL_NAME", "WEIXIN_DM_POLICY", "WEIXIN_GROUP_POLICY", "WEIXIN_ALLOWED_USERS", "WEIXIN_GROUP_ALLOWED_USERS", "WEIXIN_ALLOW_ALL_USERS", "BLUEBUBBLES_SERVER_URL", "BLUEBUBBLES_PASSWORD", + "BLUEBUBBLES_HOME_CHANNEL", "BLUEBUBBLES_HOME_CHANNEL_NAME", "QQ_APP_ID", "QQ_CLIENT_SECRET", "QQBOT_HOME_CHANNEL", "QQBOT_HOME_CHANNEL_NAME", "QQ_HOME_CHANNEL", "QQ_HOME_CHANNEL_NAME", # legacy aliases (pre-rename, still read for back-compat) "QQ_ALLOWED_USERS", "QQ_GROUP_ALLOWED_USERS", "QQ_ALLOW_ALL_USERS", "QQ_MARKDOWN_SUPPORT", "QQ_STT_API_KEY", "QQ_STT_BASE_URL", "QQ_STT_MODEL", "TERMINAL_ENV", "TERMINAL_SSH_KEY", "TERMINAL_SSH_PORT", "WHATSAPP_MODE", "WHATSAPP_ENABLED", - "MATTERMOST_HOME_CHANNEL", "MATTERMOST_REPLY_MODE", + "MATTERMOST_HOME_CHANNEL", "MATTERMOST_HOME_CHANNEL_NAME", "MATTERMOST_REPLY_MODE", "MATRIX_PASSWORD", "MATRIX_ENCRYPTION", "MATRIX_DEVICE_ID", "MATRIX_HOME_ROOM", "MATRIX_REQUIRE_MENTION", "MATRIX_FREE_RESPONSE_ROOMS", "MATRIX_AUTO_THREAD", "MATRIX_DM_AUTO_THREAD", "MATRIX_RECOVERY_KEY",