fix(coding-agent): preserve compaction queue behavior (#6730)
This commit is contained in:
@@ -4044,8 +4044,10 @@ export class InteractiveMode {
|
||||
await this.session.prompt(message.text);
|
||||
}
|
||||
|
||||
// Send first prompt (starts streaming)
|
||||
const promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {
|
||||
// Start a prompt when idle, or queue it into a run still finishing compaction.
|
||||
const promptPromise = this.session
|
||||
.prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })
|
||||
.catch((error) => {
|
||||
restoreQueue(error);
|
||||
});
|
||||
|
||||
|
||||
@@ -56,4 +56,30 @@ describe("InteractiveMode compaction events", () => {
|
||||
);
|
||||
expect(fakeThis.flushCompactionQueue).toHaveBeenCalledWith({ willRetry: false });
|
||||
});
|
||||
|
||||
test("preserves steering behavior when flushing into an active agent run", async () => {
|
||||
const fakeThis = {
|
||||
compactionQueuedMessages: [{ text: "change direction", mode: "steer" as const }],
|
||||
session: {
|
||||
clearQueue: vi.fn(),
|
||||
prompt: vi.fn().mockResolvedValue(undefined),
|
||||
steer: vi.fn().mockResolvedValue(undefined),
|
||||
followUp: vi.fn().mockResolvedValue(undefined),
|
||||
},
|
||||
isExtensionCommand: vi.fn().mockReturnValue(false),
|
||||
updatePendingMessagesDisplay: vi.fn(),
|
||||
showError: vi.fn(),
|
||||
};
|
||||
|
||||
const flushCompactionQueue = Reflect.get(InteractiveMode.prototype, "flushCompactionQueue") as (
|
||||
this: typeof fakeThis,
|
||||
options?: { willRetry?: boolean },
|
||||
) => Promise<void>;
|
||||
|
||||
await flushCompactionQueue.call(fakeThis, { willRetry: false });
|
||||
|
||||
expect(fakeThis.session.prompt).toHaveBeenCalledWith("change direction", { streamingBehavior: "steer" });
|
||||
expect(fakeThis.compactionQueuedMessages).toEqual([]);
|
||||
expect(fakeThis.showError).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user