From a5461e07bf4cbed358d8edcd2f4f2504655609d7 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Sun, 8 Mar 2026 17:11:49 -0700 Subject: [PATCH] feat: register title, resume, and other missing commands with platform menus Add /title, /resume, /compress, /provider, /usage to Telegram's set_my_commands so they appear in the / autocomplete menu. Add /title, /resume, /compress, /provider, /usage, /help as Discord slash commands so they appear in Discord's native command picker. These commands were functional via text but not registered with the platform-native command menus, so users couldn't discover them. --- gateway/platforms/discord.py | 62 +++++++++++++++++++++++++++++++++++ gateway/platforms/telegram.py | 5 +++ 2 files changed, 67 insertions(+) diff --git a/gateway/platforms/discord.py b/gateway/platforms/discord.py index 7e137047c..d8d2b004f 100644 --- a/gateway/platforms/discord.py +++ b/gateway/platforms/discord.py @@ -592,6 +592,68 @@ class DiscordAdapter(BasePlatformAdapter): except Exception as e: logger.debug("Discord followup failed: %s", e) + @tree.command(name="compress", description="Compress conversation context") + async def slash_compress(interaction: discord.Interaction): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, "/compress") + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + + @tree.command(name="title", description="Set or show the session title") + @discord.app_commands.describe(name="Session title. Leave empty to show current.") + async def slash_title(interaction: discord.Interaction, name: str = ""): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, f"/title {name}".strip()) + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + + @tree.command(name="resume", description="Resume a previously-named session") + @discord.app_commands.describe(name="Session name to resume. Leave empty to list sessions.") + async def slash_resume(interaction: discord.Interaction, name: str = ""): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, f"/resume {name}".strip()) + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + + @tree.command(name="usage", description="Show token usage for this session") + async def slash_usage(interaction: discord.Interaction): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, "/usage") + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + + @tree.command(name="provider", description="Show available providers") + async def slash_provider(interaction: discord.Interaction): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, "/provider") + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + + @tree.command(name="help", description="Show available commands") + async def slash_help(interaction: discord.Interaction): + await interaction.response.defer(ephemeral=True) + event = self._build_slash_event(interaction, "/help") + await self.handle_message(event) + try: + await interaction.followup.send("Done~", ephemeral=True) + except Exception as e: + logger.debug("Discord followup failed: %s", e) + @tree.command(name="update", description="Update Hermes Agent to the latest version") async def slash_update(interaction: discord.Interaction): await interaction.response.defer(ephemeral=True) diff --git a/gateway/platforms/telegram.py b/gateway/platforms/telegram.py index 1ea1971e3..81d3e562e 100644 --- a/gateway/platforms/telegram.py +++ b/gateway/platforms/telegram.py @@ -155,6 +155,11 @@ class TelegramAdapter(BasePlatformAdapter): BotCommand("status", "Show session info"), BotCommand("stop", "Stop the running agent"), BotCommand("sethome", "Set this chat as the home channel"), + BotCommand("compress", "Compress conversation context"), + BotCommand("title", "Set or show the session title"), + BotCommand("resume", "Resume a previously-named session"), + BotCommand("usage", "Show token usage for this session"), + BotCommand("provider", "Show available providers"), BotCommand("help", "Show available commands"), ]) except Exception as e: