From 0eb85906b08dff9d1df5a12906a8b9128aa57493 Mon Sep 17 00:00:00 2001 From: alt-glitch Date: Sat, 25 Apr 2026 00:09:12 +0530 Subject: [PATCH] feat(session): add guild_id/parent_chat_id/message_id to SessionSource MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Groundwork for injecting raw platform identifiers into the agent's system prompt. Currently only `thread_id` is exposed as a raw ID — callers in a Discord thread had to guess `channel_id == thread_id` (which happens to work because threads are channels in Discord's REST API) and had no way to reference the parent channel, guild, or the triggering message. Adds three optional fields: - `guild_id` — Discord guild / Slack workspace / Matrix server scope - `parent_chat_id` — parent channel when chat_id refers to a thread - `message_id` — ID of the triggering message (pin/reply/react) Extends `BasePlatformAdapter.build_source()` to accept + forward them and teaches `to_dict`/`from_dict` to serialize them. Behaviourally a no-op: nothing reads the fields yet and they default to None. --- gateway/platforms/base.py | 6 ++++++ gateway/session.py | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gateway/platforms/base.py b/gateway/platforms/base.py index db76034989..cfbe9b1b26 100644 --- a/gateway/platforms/base.py +++ b/gateway/platforms/base.py @@ -2440,6 +2440,9 @@ class BasePlatformAdapter(ABC): user_id_alt: Optional[str] = None, chat_id_alt: Optional[str] = None, is_bot: bool = False, + guild_id: Optional[str] = None, + parent_chat_id: Optional[str] = None, + message_id: Optional[str] = None, ) -> SessionSource: """Helper to build a SessionSource for this platform.""" # Normalize empty topic to None @@ -2457,6 +2460,9 @@ class BasePlatformAdapter(ABC): user_id_alt=user_id_alt, chat_id_alt=chat_id_alt, is_bot=is_bot, + guild_id=str(guild_id) if guild_id else None, + parent_chat_id=str(parent_chat_id) if parent_chat_id else None, + message_id=str(message_id) if message_id else None, ) @abstractmethod diff --git a/gateway/session.py b/gateway/session.py index db90d31217..7353785272 100644 --- a/gateway/session.py +++ b/gateway/session.py @@ -83,6 +83,9 @@ class SessionSource: user_id_alt: Optional[str] = None # Platform-specific stable alt ID (Signal UUID, Feishu union_id) chat_id_alt: Optional[str] = None # Signal group internal ID is_bot: bool = False # True when the message author is a bot/webhook (Discord) + guild_id: Optional[str] = None # Discord guild / Slack workspace / Matrix server scope + parent_chat_id: Optional[str] = None # Parent channel when chat_id refers to a thread + message_id: Optional[str] = None # ID of the triggering message (for pin/reply/react) @property def description(self) -> str: @@ -120,8 +123,14 @@ class SessionSource: d["user_id_alt"] = self.user_id_alt if self.chat_id_alt: d["chat_id_alt"] = self.chat_id_alt + if self.guild_id: + d["guild_id"] = self.guild_id + if self.parent_chat_id: + d["parent_chat_id"] = self.parent_chat_id + if self.message_id: + d["message_id"] = self.message_id return d - + @classmethod def from_dict(cls, data: Dict[str, Any]) -> "SessionSource": return cls( @@ -135,6 +144,9 @@ class SessionSource: chat_topic=data.get("chat_topic"), user_id_alt=data.get("user_id_alt"), chat_id_alt=data.get("chat_id_alt"), + guild_id=data.get("guild_id"), + parent_chat_id=data.get("parent_chat_id"), + message_id=data.get("message_id"), )