@@ -86,26 +86,40 @@ def leave_session(self, session_id: str) -> None:
8686 """Leave a session room."""
8787 self ._sio .emit (C2SEvent .SESSION_LEAVE , None , session_id )
8888
89+ @staticmethod
90+ def _build_message_data (
91+ content : str ,
92+ attachments : Optional [list [dict [str , Any ]]] = None ,
93+ referenced_sessions : Optional [list [dict [str , str ]]] = None ,
94+ action : Optional [dict [str , Any ]] = None ,
95+ ) -> dict [str , Any ]:
96+ """Build the session:message payload per spec 5.1.1."""
97+ from datetime import datetime
98+ data : dict [str , Any ] = {
99+ "content" : content ,
100+ "attachments" : attachments or [],
101+ "referenced_sessions" : referenced_sessions or [],
102+ "client_now_date" : datetime .now ().isoformat (),
103+ }
104+ if action is not None :
105+ data ["action" ] = action
106+ return data
107+
89108 async def chat (
90109 self ,
91110 session_id : str ,
92111 content : str ,
93112 * ,
94113 attachments : Optional [list [dict [str , Any ]]] = None ,
95114 referenced_sessions : Optional [list [dict [str , str ]]] = None ,
115+ action : Optional [dict [str , Any ]] = None ,
96116 ) -> AsyncGenerator [ChatEvent , None ]:
97117 """Send a message and yield events with stream buffering.
98118 Production handler reads payload.data as {content, attachments, ...}.
99119 """
100- from datetime import datetime
101120 self ._sio .emit (
102121 C2SEvent .SESSION_MESSAGE ,
103- {
104- "content" : content ,
105- "attachments" : attachments or [],
106- "referenced_sessions" : referenced_sessions or [],
107- "client_now_date" : datetime .now ().isoformat (),
108- },
122+ self ._build_message_data (content , attachments , referenced_sessions , action ),
109123 session_id ,
110124 )
111125 async for event in self ._listen (session_id ):
@@ -118,17 +132,12 @@ def send_message(
118132 * ,
119133 attachments : Optional [list [dict [str , Any ]]] = None ,
120134 referenced_sessions : Optional [list [dict [str , str ]]] = None ,
135+ action : Optional [dict [str , Any ]] = None ,
121136 ) -> None :
122137 """Fire-and-forget message send (no event listening)."""
123- from datetime import datetime
124138 self ._sio .emit (
125139 C2SEvent .SESSION_MESSAGE ,
126- {
127- "content" : content ,
128- "attachments" : attachments or [],
129- "referenced_sessions" : referenced_sessions or [],
130- "client_now_date" : datetime .now ().isoformat (),
131- },
140+ self ._build_message_data (content , attachments , referenced_sessions , action ),
132141 session_id ,
133142 )
134143
0 commit comments