From 9588aa6ef971918b8acfeefdad4f6a33f93349cf Mon Sep 17 00:00:00 2001 From: Shreya Keshive Date: Tue, 19 Aug 2025 10:24:58 -0700 Subject: feat: Show /ide subcommands based on connection status instead of ideMode boolean (#6496) --- packages/core/src/ide/ide-client.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'packages/core/src') diff --git a/packages/core/src/ide/ide-client.ts b/packages/core/src/ide/ide-client.ts index 0a99f0de..efb9c8f0 100644 --- a/packages/core/src/ide/ide-client.ts +++ b/packages/core/src/ide/ide-client.ts @@ -63,6 +63,7 @@ export class IdeClient { private readonly currentIde: DetectedIde | undefined; private readonly currentIdeDisplayName: string | undefined; private diffResponses = new Map void>(); + private statusListeners = new Set<(state: IDEConnectionState) => void>(); private constructor() { this.currentIde = detectIde(); @@ -78,6 +79,14 @@ export class IdeClient { return IdeClient.instance; } + addStatusChangeListener(listener: (state: IDEConnectionState) => void) { + this.statusListeners.add(listener); + } + + removeStatusChangeListener(listener: (state: IDEConnectionState) => void) { + this.statusListeners.delete(listener); + } + async connect(): Promise { if (!this.currentIde || !this.currentIdeDisplayName) { this.setState( @@ -237,6 +246,9 @@ export class IdeClient { // disconnected, so that the first detail message is preserved. if (!isAlreadyDisconnected) { this.state = { status, details }; + for (const listener of this.statusListeners) { + listener(this.state); + } if (details) { if (logToConsole) { logger.error(details); @@ -390,7 +402,6 @@ export class IdeClient { logger.debug('Failed to close transport:', closeError); } } - logger.error(`Failed to connect: ${_error}`); return false; } } -- cgit v1.2.3