fix(whatsapp): per-contact DM session isolation and user identity in context
This commit is contained in:
parent
96043a8f7e
commit
f02f647237
2 changed files with 17 additions and 2 deletions
|
|
@ -529,7 +529,12 @@ class GatewayRunner:
|
||||||
return await self._handle_set_home_command(event)
|
return await self._handle_set_home_command(event)
|
||||||
|
|
||||||
# Check for pending exec approval responses
|
# Check for pending exec approval responses
|
||||||
session_key_preview = f"agent:main:{source.platform.value}:{source.chat_type}:{source.chat_id}" if source.chat_type != "dm" else f"agent:main:{source.platform.value}:dm"
|
if source.chat_type != "dm":
|
||||||
|
session_key_preview = f"agent:main:{source.platform.value}:{source.chat_type}:{source.chat_id}"
|
||||||
|
elif source.platform and source.platform.value == "whatsapp" and source.chat_id:
|
||||||
|
session_key_preview = f"agent:main:{source.platform.value}:dm:{source.chat_id}"
|
||||||
|
else:
|
||||||
|
session_key_preview = f"agent:main:{source.platform.value}:dm"
|
||||||
if session_key_preview in self._pending_approvals:
|
if session_key_preview in self._pending_approvals:
|
||||||
user_text = event.text.strip().lower()
|
user_text = event.text.strip().lower()
|
||||||
if user_text in ("yes", "y", "approve", "ok", "go", "do it"):
|
if user_text in ("yes", "y", "approve", "ok", "go", "do it"):
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,12 @@ def build_session_context_prompt(context: SessionContext) -> str:
|
||||||
lines.append(f"**Source:** {platform_name} (the machine running this agent)")
|
lines.append(f"**Source:** {platform_name} (the machine running this agent)")
|
||||||
else:
|
else:
|
||||||
lines.append(f"**Source:** {platform_name} ({context.source.description})")
|
lines.append(f"**Source:** {platform_name} ({context.source.description})")
|
||||||
|
|
||||||
|
# User identity (especially useful for WhatsApp where multiple people DM)
|
||||||
|
if context.source.user_name:
|
||||||
|
lines.append(f"**User:** {context.source.user_name}")
|
||||||
|
elif context.source.user_id:
|
||||||
|
lines.append(f"**User ID:** {context.source.user_id}")
|
||||||
|
|
||||||
# Connected platforms
|
# Connected platforms
|
||||||
platforms_list = ["local (files on this machine)"]
|
platforms_list = ["local (files on this machine)"]
|
||||||
|
|
@ -323,8 +329,12 @@ class SessionStore:
|
||||||
def _generate_session_key(self, source: SessionSource) -> str:
|
def _generate_session_key(self, source: SessionSource) -> str:
|
||||||
"""Generate a session key from a source."""
|
"""Generate a session key from a source."""
|
||||||
platform = source.platform.value
|
platform = source.platform.value
|
||||||
|
|
||||||
if source.chat_type == "dm":
|
if source.chat_type == "dm":
|
||||||
|
# WhatsApp DMs come from different people, each needs its own session.
|
||||||
|
# Other platforms (Telegram, Discord) have a single DM with the bot owner.
|
||||||
|
if platform == "whatsapp" and source.chat_id:
|
||||||
|
return f"agent:main:{platform}:dm:{source.chat_id}"
|
||||||
return f"agent:main:{platform}:dm"
|
return f"agent:main:{platform}:dm"
|
||||||
else:
|
else:
|
||||||
return f"agent:main:{platform}:{source.chat_type}:{source.chat_id}"
|
return f"agent:main:{platform}:{source.chat_type}:{source.chat_id}"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue