From 5190b3b3fa8e9936732caf5ea6fb3f34ba8ed6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fu=20Abaris?= <135986694+doguabaris@users.noreply.github.com> Date: Wed, 1 Apr 2026 19:46:22 +0200 Subject: [PATCH] fix: avoid locally caught ACP session init exception (#55136) (thanks @doguabaris) --- src/acp/control-plane/manager.core.ts | 28 ++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/acp/control-plane/manager.core.ts b/src/acp/control-plane/manager.core.ts index 9ce3ce610fe..d4c52f3d534 100644 --- a/src/acp/control-plane/manager.core.ts +++ b/src/acp/control-plane/manager.core.ts @@ -357,19 +357,15 @@ export class AcpSessionManager { state: "idle", lastActivityAt: Date.now(), }; + + let persisted: SessionEntry | null = null; try { - const persisted = await this.writeSessionMeta({ + persisted = await this.writeSessionMeta({ cfg: input.cfg, sessionKey, mutate: () => meta, failOnError: true, }); - if (!persisted?.acp) { - throw new AcpRuntimeError( - "ACP_SESSION_INIT_FAILED", - `Could not persist ACP metadata for ${sessionKey}.`, - ); - } } catch (error) { await runtime .close({ @@ -383,6 +379,24 @@ export class AcpSessionManager { }); throw error; } + + if (!persisted?.acp) { + await runtime + .close({ + handle, + reason: "init-meta-failed", + }) + .catch((closeError) => { + logVerbose( + `acp-manager: cleanup close failed after metadata write error for ${sessionKey}: ${String(closeError)}`, + ); + }); + + throw new AcpRuntimeError( + "ACP_SESSION_INIT_FAILED", + `Could not persist ACP metadata for ${sessionKey}.`, + ); + } this.setCachedRuntimeState(sessionKey, { runtime, handle,