diff --git a/packages/provider-acp/src/server/runtimeModel.test.ts b/packages/provider-acp/src/server/runtimeModel.test.ts index 1495d40cc8a1..2ba218d1ce05 100644 --- a/packages/provider-acp/src/server/runtimeModel.test.ts +++ b/packages/provider-acp/src/server/runtimeModel.test.ts @@ -66,7 +66,7 @@ describe("AcpRuntimeModel", () => { ).toBe(false); }); - it("ignores Grok keepalive chunks when tracking session/load replay activity", () => { + it("ignores keepalive chunks and untagged metadata when tracking session/load replay activity", () => { expect( sessionUpdateCountsAsLoadReplayActivity({ sessionId: "session-1", @@ -76,6 +76,15 @@ describe("AcpRuntimeModel", () => { }, } satisfies EffectAcpSchema.SessionNotification), ).toBe(false); + expect( + sessionUpdateCountsAsLoadReplayActivity({ + sessionId: "session-1", + update: { + sessionUpdate: "available_commands_update", + availableCommands: [{ name: "compact", description: "Compact history" }], + }, + } satisfies EffectAcpSchema.SessionNotification), + ).toBe(false); expect( sessionUpdateCountsAsLoadReplayActivity({ _meta: { isReplay: true }, diff --git a/packages/provider-acp/src/server/runtimeModel.ts b/packages/provider-acp/src/server/runtimeModel.ts index 454fa3011ed3..b9dcd9590984 100644 --- a/packages/provider-acp/src/server/runtimeModel.ts +++ b/packages/provider-acp/src/server/runtimeModel.ts @@ -1282,14 +1282,11 @@ export function sessionUpdateCountsAsLoadReplayActivity( case "plan": case "plan_update": case "plan_removed": - case "available_commands_update": - case "current_mode_update": - case "config_option_update": - case "session_info_update": - case "usage_update": case "compaction_update": case "compaction_summary_chunk": return true; + // Copilot pushes session metadata, then loads for seconds before replaying + // untagged history, so metadata must not arm the replay-idle fallback. default: return false; }