diff --git a/src/features/background-agent/session-idle-event-handler.test.ts b/src/features/background-agent/session-idle-event-handler.test.ts index 1e2efafbc..ecdfbcfdd 100644 --- a/src/features/background-agent/session-idle-event-handler.test.ts +++ b/src/features/background-agent/session-idle-event-handler.test.ts @@ -247,6 +247,27 @@ describe("handleSessionIdleBackgroundEvent", () => { expect(tryCompleteTask).toHaveBeenCalledWith(task, "session.idle event") }) + it("#when task belongs to a team run #then should not auto-complete on idle", async () => { + //#given + const task = createRunningTask({ teamRunId: "team-run-1" }) + const tryCompleteTask = mock(() => Promise.resolve(true)) + + //#when + handleSessionIdleBackgroundEvent({ + properties: { sessionID: task.sessionID! }, + findBySession: () => task, + idleDeferralTimers: new Map(), + validateSessionHasOutput: () => Promise.resolve(true), + checkSessionTodos: () => Promise.resolve(false), + tryCompleteTask, + emitIdleEvent: () => {}, + }) + + //#then + await new Promise((resolve) => setTimeout(resolve, 10)) + expect(tryCompleteTask).not.toHaveBeenCalled() + }) + it("#when session has no valid output #then should not complete task", async () => { //#given const task = createRunningTask() diff --git a/src/features/background-agent/session-idle-event-handler.ts b/src/features/background-agent/session-idle-event-handler.ts index 17fb70abd..c3396f75d 100644 --- a/src/features/background-agent/session-idle-event-handler.ts +++ b/src/features/background-agent/session-idle-event-handler.ts @@ -85,6 +85,14 @@ export function handleSessionIdleBackgroundEvent(args: { return } + if (task.teamRunId) { + log("[background-agent] Team member session went idle; skipping background auto-complete:", { + taskId: task.id, + teamRunId: task.teamRunId, + }) + return + } + await tryCompleteTask(task, "session.idle event") }) .catch((err) => {