diff --git a/packages/acp-server/test/e2e-turn.test.ts b/packages/acp-server/test/e2e-turn.test.ts index db4c1e93745..a23b264c501 100644 --- a/packages/acp-server/test/e2e-turn.test.ts +++ b/packages/acp-server/test/e2e-turn.test.ts @@ -29,6 +29,21 @@ const STDIO_MCP_FIXTURE = fileURLToPath( new URL('../../agent-core-v2/test/mcpCore/fixtures/mock-stdio-server.mjs', import.meta.url), ); +/** + * Best-effort recursive removal of a test's temp home dir. `fs.rm`'s + * recursive cleanup can transiently ENOTEMPTY/EBUSY right after a file + * handle (or, for the MCP-fixture tests, a child process pipe) in the + * directory closes but the OS hasn't fully released the deletion yet. + * Retry with Node's own linear-backoff defaults. Always returns `undefined` + * so call sites can just reassign: `homeDir = await cleanupHomeDir(homeDir);`. + */ +async function cleanupHomeDir(homeDir: string | undefined): Promise { + if (homeDir !== undefined) { + await rm(homeDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); + } + return undefined; +} + describe('acp-server real prompt turn (scripted LLM)', () => { let homeDir: string | undefined; let client: TestClient | undefined; @@ -39,10 +54,8 @@ describe('acp-server real prompt turn (scripted LLM)', () => { await client.close(); client = undefined; } - if (homeDir !== undefined) { - await rm(homeDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); - homeDir = undefined; - } + + homeDir = await cleanupHomeDir(homeDir); }); function installTerminalClient(c: TestClient): void { @@ -578,10 +591,8 @@ describe('acp-server prompt error hygiene', () => { await client.close(); client = undefined; } - if (homeDir !== undefined) { - await rm(homeDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); - homeDir = undefined; - } + + homeDir = await cleanupHomeDir(homeDir); }); it('a launch failure settles as a fixed internalError and never leaks the engine message', async () => { @@ -625,10 +636,8 @@ describe('acp-server builtin slash commands (local execution, no LLM turn)', () await client.close(); client = undefined; } - if (homeDir !== undefined) { - await rm(homeDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); - homeDir = undefined; - } + + homeDir = await cleanupHomeDir(homeDir); }); async function boot(): Promise { @@ -842,10 +851,8 @@ describe('acp-server terminal reverse-RPC (clientCapabilities.terminal)', () => await client.close(); client = undefined; } - if (homeDir !== undefined) { - await rm(homeDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); - homeDir = undefined; - } + + homeDir = await cleanupHomeDir(homeDir); }); interface FakeTerminal { diff --git a/packages/agent-core-v2/test/app/config/configManifest.test.ts b/packages/agent-core-v2/test/app/config/configManifest.test.ts index b8a92c2ee57..97002d93aa0 100644 --- a/packages/agent-core-v2/test/app/config/configManifest.test.ts +++ b/packages/agent-core-v2/test/app/config/configManifest.test.ts @@ -8,5 +8,5 @@ describe('config manifest', () => { const expected = await buildConfigManifest(); const actual = readFileSync(MANIFEST_PATH, 'utf-8'); expect(actual).toBe(expected); - }, 60_000); + }, 120_000); }); diff --git a/packages/agent-core-v2/test/wire/wireManifest.test.ts b/packages/agent-core-v2/test/wire/wireManifest.test.ts index 8013c58f2ec..c323943b1de 100644 --- a/packages/agent-core-v2/test/wire/wireManifest.test.ts +++ b/packages/agent-core-v2/test/wire/wireManifest.test.ts @@ -9,7 +9,7 @@ describe('wire manifest', () => { const expected = await buildWireManifest(); const actual = readFileSync(MANIFEST_PATH, 'utf-8'); expect(actual).toBe(expected); - }, 60_000); + }, 120_000); it('docs/wire-manifest.d.ts parses as TypeScript', () => { const project = new Project({ useInMemoryFileSystem: true });