From ec677991aee97b289510a8411ac4c83b95b86451 Mon Sep 17 00:00:00 2001 From: Vinh Nguyen Date: Tue, 3 Feb 2026 15:49:52 +0700 Subject: [PATCH] fix: create session sync client before metadata extraction Prevents race condition where multiple session client instances could be created inside the extractSDKMetadataAsync callback. --- src/claude/runClaude.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/claude/runClaude.ts b/src/claude/runClaude.ts index bcdd74fd..9eec8ce7 100644 --- a/src/claude/runClaude.ts +++ b/src/claude/runClaude.ts @@ -162,12 +162,15 @@ export async function runClaude(credentials: Credentials, options: StartOptions logger.debug('[START] Failed to report to daemon (may not be running):', error); } + // Create realtime session FIRST (before SDK metadata extraction) + const session = api.sessionSyncClient(response); + // Extract SDK metadata in background and update session when ready extractSDKMetadataAsync(async (sdkMetadata) => { logger.debug('[start] SDK metadata extracted, updating session:', sdkMetadata); try { // Update session metadata with tools and slash commands - api.sessionSyncClient(response).updateMetadata((currentMetadata) => ({ + session.updateMetadata((currentMetadata) => ({ ...currentMetadata, tools: sdkMetadata.tools, slashCommands: sdkMetadata.slashCommands @@ -178,9 +181,6 @@ export async function runClaude(credentials: Credentials, options: StartOptions } }); - // Create realtime session - const session = api.sessionSyncClient(response); - // Start Happy MCP server const happyServer = await startHappyServer(session); logger.debug(`[START] Happy MCP server started at ${happyServer.url}`);