diff --git a/bot/commands.py b/bot/commands.py index 9441c33..e48e2d9 100644 --- a/bot/commands.py +++ b/bot/commands.py @@ -67,6 +67,12 @@ async def handle_command(user_id: str, text: str) -> Optional[str]: cmd, args = parsed logger.info("Command: %s args=%r user=...%s", cmd, args[:50], user_id[-8:]) + # In ROUTER_MODE, only handle router-specific commands locally. + # Session commands (/status, /new, /close, etc.) fall through to node forwarding. + from config import ROUTER_MODE + if ROUTER_MODE and cmd not in ("/nodes", "/node", "/help", "/h", "/?"): + return None + set_current_user(user_id) if cmd in ("/new", "/n"): diff --git a/router/routing_agent.py b/router/routing_agent.py index 8fa7314..6ea8241 100644 --- a/router/routing_agent.py +++ b/router/routing_agent.py @@ -77,7 +77,14 @@ async def route(user_id: str, chat_id: str, text: str) -> tuple[Optional[str], s return online_nodes[0].node_id, "Only one node available" if text.strip().startswith("/"): - return "meta", "Meta command" + cmd = text.strip().split()[0].lower() + if cmd in ("/nodes", "/node", "/help", "/h", "/?"): + return "meta", "Meta command" + # Session commands: forward to active node directly (no LLM call needed) + active = registry.get_active_node(user_id) + if active: + return active.node_id, "Forwarding command to active node" + return online_nodes[0].node_id, "Forwarding command to first available node" active_node = registry.get_active_node(user_id) active_node_id = active_node.node_id if active_node else None