fix: only process assistant messages in before_message_write

before_message_write fires for both user (incoming) and assistant
(outgoing) messages. Without a role check, end symbols from other
agents' incoming messages incorrectly trigger turn advances.

Add role check to skip non-assistant messages early.
This commit is contained in:
zhi
2026-03-02 11:20:39 +00:00
parent 6d17e6a911
commit fb2cbaa5b3
2 changed files with 16 additions and 0 deletions

View File

@@ -932,9 +932,17 @@ export default {
} }
// Extract content from event.message (AgentMessage) // Extract content from event.message (AgentMessage)
// IMPORTANT: Only process assistant messages — before_message_write fires for both
// user (incoming) and assistant (outgoing) messages. Processing user messages would
// incorrectly detect end symbols from OTHER agents' messages and advance the turn.
let content = ""; let content = "";
const msg = (event as Record<string, unknown>).message as Record<string, unknown> | undefined; const msg = (event as Record<string, unknown>).message as Record<string, unknown> | undefined;
if (msg) { if (msg) {
const role = msg.role as string | undefined;
if (role && role !== "assistant") {
// Skip non-assistant messages (user messages, system messages, etc.)
return;
}
// AgentMessage may have content as string or nested // AgentMessage may have content as string or nested
if (typeof msg.content === "string") { if (typeof msg.content === "string") {
content = msg.content; content = msg.content;

View File

@@ -932,9 +932,17 @@ export default {
} }
// Extract content from event.message (AgentMessage) // Extract content from event.message (AgentMessage)
// IMPORTANT: Only process assistant messages — before_message_write fires for both
// user (incoming) and assistant (outgoing) messages. Processing user messages would
// incorrectly detect end symbols from OTHER agents' messages and advance the turn.
let content = ""; let content = "";
const msg = (event as Record<string, unknown>).message as Record<string, unknown> | undefined; const msg = (event as Record<string, unknown>).message as Record<string, unknown> | undefined;
if (msg) { if (msg) {
const role = msg.role as string | undefined;
if (role && role !== "assistant") {
// Skip non-assistant messages (user messages, system messages, etc.)
return;
}
// AgentMessage may have content as string or nested // AgentMessage may have content as string or nested
if (typeof msg.content === "string") { if (typeof msg.content === "string") {
content = msg.content; content = msg.content;