Outbound-Session-Mirroring-Refactor (Issue #1520)

Status

  • In Arbeit.
  • Core + Plugin-Channel-Routing fuer Outbound-Mirroring aktualisiert.
  • Gateway-Send leitet jetzt Ziel-Session ab wenn sessionKey fehlt.

Kontext

Ausgehende Sends wurden in die aktuelle Agent-Session (Tool-Session-Key) gespiegelt statt in die Zielkanal-Session. Eingehendes Routing nutzt Channel/Peer-Session-Keys, sodass ausgehende Antworten in der falschen Session landeten und Erstkontakt-Ziele oft keine Session-Eintraege hatten.

Ziele

  • Ausgehende Nachrichten in den Zielkanal-Session-Key spiegeln.
  • Session-Eintraege bei Outbound erstellen wenn fehlend.
  • Thread/Topic-Scoping an eingehende Session-Keys angleichen.
  • Core-Channels plus gebundelte Extensions abdecken.

Implementierungszusammenfassung

  • Neuer Outbound-Session-Routing-Helper: src/infra/outbound/outbound-session.ts
  • resolveOutboundSessionRoute baut Ziel-sessionKey mittels buildAgentSessionKey (dmScope + identityLinks).
  • ensureOutboundSessionEntry schreibt minimalen MsgContext via recordSessionMetaFromInbound.
  • runMessageAction (send) leitet Ziel-sessionKey ab und uebergibt ihn an executeSendAction zum Spiegeln.
  • message-tool spiegelt nicht mehr direkt; es loest nur agentId aus dem aktuellen Session-Key auf.
  • Gateway-Send leitet Ziel-Session-Key ab wenn keiner angegeben und stellt Session-Eintrag sicher.

Thread/Topic-Behandlung

  • Slack: replyTo/threadId -> resolveThreadSessionKeys (Suffix).
  • Discord: threadId/replyTo -> resolveThreadSessionKeys mit useSuffix=false.
  • Telegram: Topic-IDs mappen auf chatId:topic:<id> via buildTelegramGroupPeerId.

Abgedeckte Extensions

Matrix, MS Teams, Mattermost, BlueBubbles, Nextcloud Talk, Zalo, Zalo Personal, Nostr, Tlon.

Tests hinzugefuegt/aktualisiert

  • src/infra/outbound/outbound.test.ts
  • src/agents/tools/message-tool.test.ts
  • src/gateway/server-methods/send.test.ts