feat: Show /ide subcommands based on connection status instead of ideMode boolean (#6496)

This commit is contained in:
Shreya Keshive
2025-08-19 10:24:58 -07:00
committed by GitHub
parent fde5511c27
commit 9588aa6ef9
5 changed files with 60 additions and 12 deletions

View File

@@ -63,6 +63,7 @@ export class IdeClient {
private readonly currentIde: DetectedIde | undefined;
private readonly currentIdeDisplayName: string | undefined;
private diffResponses = new Map<string, (result: DiffUpdateResult) => 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<void> {
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;
}
}