From 196c453ccf5c1c290f1f4c4a242f0636702ca99b Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Tue, 31 Mar 2026 04:59:27 +0900 Subject: [PATCH] fix: skip enqueueMessageCheck when task is already completed (ESCALATE/done) --- src/message-agent-executor.ts | 7 +++++-- src/paired-execution-context.ts | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/message-agent-executor.ts b/src/message-agent-executor.ts index 16e590c..877bf7a 100644 --- a/src/message-agent-executor.ts +++ b/src/message-agent-executor.ts @@ -1076,13 +1076,16 @@ export async function runAgentForGroup( // After owner/reviewer completes, enqueue the next turn so // the message loop picks it up without waiting for a new message. - // Skip if owner produced no output — likely interrupted by /stop. + // Skip if: no output (interrupted), or task already completed (ESCALATE, done, etc.) if ( pairedExecutionContext && pairedExecutionStatus === 'succeeded' && pairedSawOutput ) { - deps.queue.enqueueMessageCheck(chatJid); + const finishedCheck = getPairedTaskById(pairedExecutionContext.task.id); + if (finishedCheck?.status !== 'completed') { + deps.queue.enqueueMessageCheck(chatJid); + } } } } diff --git a/src/paired-execution-context.ts b/src/paired-execution-context.ts index 4d560f5..5552054 100644 --- a/src/paired-execution-context.ts +++ b/src/paired-execution-context.ts @@ -246,7 +246,12 @@ export function preparePairedExecutionContext(args: { return undefined; } - const task = ensureActiveTask(group, chatJid, roomRoleContext, args.hasHumanMessage); + const task = ensureActiveTask( + group, + chatJid, + roomRoleContext, + args.hasHumanMessage, + ); if (!task) { return undefined; }