fix(copilot): ignore subagent idle during cleanup · openclaw/openclaw@a88ce96
vincentkoc
·
2026-06-21
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -678,6 +678,26 @@ describe("attachEventBridge", () => {
|
678 | 678 | expect(bridge.hasObservedSessionIdle()).toBe(true); |
679 | 679 | }); |
680 | 680 | |
| 681 | +it("ignores subagent idle events while waiting for the root session", async () => { |
| 682 | +const session = createFakeSession(); |
| 683 | +const bridge = attachEventBridge(session, { |
| 684 | +getSdkSessionId: () => "sdk-session-id", |
| 685 | +isAborted: () => false, |
| 686 | +}); |
| 687 | + |
| 688 | +const idle = bridge.awaitSessionIdle(); |
| 689 | +session.emit("session.idle", { |
| 690 | + ...makeEvent("session.idle", {}), |
| 691 | +agentId: "subagent-1", |
| 692 | +}); |
| 693 | +await flushAsync(); |
| 694 | +expect(bridge.hasObservedSessionIdle()).toBe(false); |
| 695 | + |
| 696 | +session.emit("session.idle", makeEvent("session.idle", {})); |
| 697 | +await idle; |
| 698 | +expect(bridge.hasObservedSessionIdle()).toBe(true); |
| 699 | +}); |
| 700 | + |
681 | 701 | it("keeps compaction pending after an abort until the SDK reports completion", async () => { |
682 | 702 | const session = createFakeSession(); |
683 | 703 | const bridge = attachEventBridge(session, { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -224,7 +224,10 @@ export function attachEventBridge(
|
224 | 224 | } |
225 | 225 | }); |
226 | 226 | |
227 | | -registerListener(session, unsubscribeFns, "session.idle", () => { |
| 227 | +registerListener(session, unsubscribeFns, "session.idle", (event) => { |
| 228 | +if (!isRootCompactionEvent(event)) { |
| 229 | +return; |
| 230 | +} |
228 | 231 | observedSessionIdle = true; |
229 | 232 | resolveSessionIdle?.(); |
230 | 233 | resolveSessionIdle = undefined; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。