Matthias Nott
2026-03-07 1b0fb4ece961dcf52a32a392103ae70b1ae49ce2
feat: route incoming messages to correct session by sessionId

When server includes sessionId in text/voice/image payloads, route
to that specific session via addMessageToSession instead of always
adding to active session. Enables unread badges on non-active sessions.
2 files modified
changed files
contexts/ChatContext.tsx patch | view | blame | history
types/index.ts patch | view | blame | history
contexts/ChatContext.tsx
....@@ -285,7 +285,11 @@
285285 timestamp: Date.now(),
286286 status: "sent",
287287 };
288
- addMessageToActive(msg);
288
+ if (data.sessionId) {
289
+ addMessageToSession(data.sessionId, msg);
290
+ } else {
291
+ addMessageToActive(msg);
292
+ }
289293 notifyIncomingMessage("PAILot", data.content ?? "New message");
290294 break;
291295 }
....@@ -308,7 +312,11 @@
308312 timestamp: Date.now(),
309313 status: "sent",
310314 };
311
- addMessageToActive(msg);
315
+ if (data.sessionId) {
316
+ addMessageToSession(data.sessionId, msg);
317
+ } else {
318
+ addMessageToActive(msg);
319
+ }
312320 notifyIncomingMessage("PAILot", data.content ?? "Voice message");
313321 if (msg.audioUri && canAutoplay()) {
314322 playAudio(msg.audioUri).catch(() => {});
....@@ -326,7 +334,11 @@
326334 timestamp: Date.now(),
327335 status: "sent",
328336 };
329
- addMessageToActive(msg);
337
+ if (data.sessionId) {
338
+ addMessageToSession(data.sessionId, msg);
339
+ } else {
340
+ addMessageToActive(msg);
341
+ }
330342 notifyIncomingMessage("PAILot", data.caption ?? "New image");
331343 break;
332344 }
types/index.ts
....@@ -56,18 +56,21 @@
5656 export interface WsIncomingText {
5757 type: "text";
5858 content: string;
59
+ sessionId?: string;
5960 }
6061
6162 export interface WsIncomingVoice {
6263 type: "voice";
6364 content: string;
6465 audioBase64?: string;
66
+ sessionId?: string;
6567 }
6668
6769 export interface WsIncomingImage {
6870 type: "image";
6971 imageBase64: string;
7072 caption?: string;
73
+ sessionId?: string;
7174 }
7275
7376 export interface WsSession {