fix(copilot): ignore subagent idle during cleanup

This commit is contained in:
Vincent Koc
2026-06-21 03:10:04 +08:00
committed by Vincent Koc
parent 448b3fa0be
commit a88ce96ee1
2 changed files with 24 additions and 1 deletions

View File

@@ -678,6 +678,26 @@ describe("attachEventBridge", () => {
expect(bridge.hasObservedSessionIdle()).toBe(true);
});
it("ignores subagent idle events while waiting for the root session", async () => {
const session = createFakeSession();
const bridge = attachEventBridge(session, {
getSdkSessionId: () => "sdk-session-id",
isAborted: () => false,
});
const idle = bridge.awaitSessionIdle();
session.emit("session.idle", {
...makeEvent("session.idle", {}),
agentId: "subagent-1",
});
await flushAsync();
expect(bridge.hasObservedSessionIdle()).toBe(false);
session.emit("session.idle", makeEvent("session.idle", {}));
await idle;
expect(bridge.hasObservedSessionIdle()).toBe(true);
});
it("keeps compaction pending after an abort until the SDK reports completion", async () => {
const session = createFakeSession();
const bridge = attachEventBridge(session, {

View File

@@ -224,7 +224,10 @@ export function attachEventBridge(
}
});
registerListener(session, unsubscribeFns, "session.idle", () => {
registerListener(session, unsubscribeFns, "session.idle", (event) => {
if (!isRootCompactionEvent(event)) {
return;
}
observedSessionIdle = true;
resolveSessionIdle?.();
resolveSessionIdle = undefined;