diff --git a/server/modules/providers/tests/support/tmux-e2e-harness.ts b/server/modules/providers/tests/support/tmux-e2e-harness.ts index 303e8fe..65b9ab7 100644 --- a/server/modules/providers/tests/support/tmux-e2e-harness.ts +++ b/server/modules/providers/tests/support/tmux-e2e-harness.ts @@ -32,7 +32,8 @@ export type FakeTmuxAgent = { events: () => Promise; waitUntilReady: () => Promise; waitForInput: (value: string) => Promise; - waitForInterrupt: () => Promise; + /** Resolves once at least `count` interrupts have been recorded. */ + waitForInterrupt: (count?: number) => Promise; waitForTurnStarted: () => Promise; waitForTurnInterrupted: () => Promise; }; @@ -325,9 +326,9 @@ export async function createTmuxE2EHarness(): Promise { async () => (await events()).some((event) => event.type === 'input' && event.value === value), `${sessionName} input ${JSON.stringify(value)}`, ), - waitForInterrupt: () => waitFor( - async () => (await events()).some((event) => event.type === 'interrupt'), - `${sessionName} SIGINT`, + waitForInterrupt: (count = 1) => waitFor( + async () => (await events()).filter((event) => event.type === 'interrupt').length >= count, + `${sessionName} SIGINT x${count}`, ), waitForTurnStarted: () => waitFor( async () => (await events()).some((event) => event.type === 'turn_started'), @@ -430,9 +431,9 @@ export async function createTmuxE2EHarness(): Promise { async () => (await events()).some((event) => event.type === 'input' && event.value === value), `${sessionName} input ${JSON.stringify(value)}`, ), - waitForInterrupt: () => waitFor( - async () => (await events()).some((event) => event.type === 'interrupt'), - `${sessionName} SIGINT`, + waitForInterrupt: (count = 1) => waitFor( + async () => (await events()).filter((event) => event.type === 'interrupt').length >= count, + `${sessionName} SIGINT x${count}`, ), waitForTurnStarted: () => waitFor( async () => (await events()).some((event) => event.type === 'turn_started'), diff --git a/server/modules/providers/tests/tmux-runtime.e2e.test.ts b/server/modules/providers/tests/tmux-runtime.e2e.test.ts index c407432..b75ce80 100644 --- a/server/modules/providers/tests/tmux-runtime.e2e.test.ts +++ b/server/modules/providers/tests/tmux-runtime.e2e.test.ts @@ -386,7 +386,9 @@ test('real tmux interrupt cancels a running verified fake-agent turn and repeats ); await sendTmuxProcessAction(target, 'interrupt'); - await delay(100); + // Wait for the second interrupt to be recorded instead of sleeping: a fixed + // delay made this assertion fail on slower CI runners (observed on Node 24). + await agent.waitForInterrupt(2); assert.equal( (await agent.events()).filter((event) => event.type === 'interrupt').length, 2,