From 1076d66d7361d26d4caa35fcd2562e3292c48856 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Wed, 25 Feb 2026 12:24:53 -0500 Subject: [PATCH 1/7] Add dashboard browser setting for VS Code extension Add settings to control which browser opens the Aspire dashboard during debugging and whether to close it when debugging ends: - aspire.dashboardBrowser: Choose between opening in default external browser (default), Chrome debug session, Edge debug session, or Firefox debug session - aspire.closeDashboardOnDebugEnd: Automatically close the dashboard browser tab when debugging ends (works with debug browser options) Debug browser sessions are launched as child sessions of the Aspire debug session, so they automatically close when the parent session ends. Dashboard lifecycle management is consolidated in AspireDebugSession. --- extension/loc/xlf/aspire-vscode.xlf | 18 +++ extension/package.json | 19 +++ extension/package.nls.json | 6 + .../aspire-global-settings.schema.json | 24 +++- extension/schemas/aspire-settings.schema.json | 24 +++- extension/src/debugger/AspireDebugSession.ts | 108 +++++++++++++++++- extension/src/loc/strings.ts | 1 + extension/src/server/interactionService.ts | 21 +++- 8 files changed, 208 insertions(+), 13 deletions(-) diff --git a/extension/loc/xlf/aspire-vscode.xlf b/extension/loc/xlf/aspire-vscode.xlf index 73088ed32fb..0644346f92b 100644 --- a/extension/loc/xlf/aspire-vscode.xlf +++ b/extension/loc/xlf/aspire-vscode.xlf @@ -55,6 +55,9 @@ C# support is not enabled in this workspace. This project should have started through the Aspire CLI. + + Close the dashboard browser when the debug session ends. Works with debug browser options (Chrome, Edge, Firefox). + Codespaces @@ -181,6 +184,15 @@ Launch Aspire Dashboard + + Launch Chrome as a debug session (auto-closes when debugging ends). + + + Launch Firefox as a debug session (requires Firefox Debugger extension). + + + Launch Microsoft Edge as a debug session (auto-closes when debugging ends). + Launch the effective Aspire apphost in your workspace @@ -271,6 +283,9 @@ The apphost is not compatible. Consider upgrading the apphost or Aspire CLI. + + The browser to use when auto-launching the Aspire Dashboard. + The path to the Aspire CLI executable. If not set, the extension will attempt to use 'aspire' from the system PATH. @@ -280,6 +295,9 @@ Update integrations + + Use the system default browser (cannot auto-close). + Watch {0} ({1}) diff --git a/extension/package.json b/extension/package.json index daeae193be5..a51b4f01fd4 100644 --- a/extension/package.json +++ b/extension/package.json @@ -233,6 +233,25 @@ "description": "%configuration.aspire.enableAspireDashboardAutoLaunch%", "scope": "window" }, + "aspire.dashboardBrowser": { + "type": "string", + "enum": ["openExternalBrowser", "debugChrome", "debugEdge", "debugFirefox"], + "default": "openExternalBrowser", + "description": "%configuration.aspire.dashboardBrowser%", + "enumDescriptions": [ + "%configuration.aspire.dashboardBrowser.openExternalBrowser%", + "%configuration.aspire.dashboardBrowser.debugChrome%", + "%configuration.aspire.dashboardBrowser.debugEdge%", + "%configuration.aspire.dashboardBrowser.debugFirefox%" + ], + "scope": "window" + }, + "aspire.closeDashboardOnDebugEnd": { + "type": "boolean", + "default": true, + "description": "%configuration.aspire.closeDashboardOnDebugEnd%", + "scope": "window" + }, "aspire.enableDebugConfigEnvironmentLogging": { "type": "boolean", "default": true, diff --git a/extension/package.nls.json b/extension/package.nls.json index 75e0719f912..1b0bec6fd60 100644 --- a/extension/package.nls.json +++ b/extension/package.nls.json @@ -21,6 +21,12 @@ "configuration.aspire.enableAspireCliDebugLogging": "Enable console debug logging for Aspire CLI commands executed by the extension.", "configuration.aspire.enableAspireDcpDebugLogging": "Enable Developer Control Plane (DCP) debug logging for Aspire applications. Logs will be stored in the workspace's .aspire/dcp/logs-{debugSessionId} folder.", "configuration.aspire.enableAspireDashboardAutoLaunch": "Enable automatic launch of the Aspire Dashboard when using the Aspire debugger.", + "configuration.aspire.dashboardBrowser": "The browser to use when auto-launching the Aspire Dashboard.", + "configuration.aspire.dashboardBrowser.openExternalBrowser": "Use the system default browser (cannot auto-close).", + "configuration.aspire.dashboardBrowser.debugChrome": "Launch Chrome as a debug session (auto-closes when debugging ends).", + "configuration.aspire.dashboardBrowser.debugEdge": "Launch Microsoft Edge as a debug session (auto-closes when debugging ends).", + "configuration.aspire.dashboardBrowser.debugFirefox": "Launch Firefox as a debug session (requires Firefox Debugger extension).", + "configuration.aspire.closeDashboardOnDebugEnd": "Close the dashboard browser when the debug session ends. Works with debug browser options (Chrome, Edge, Firefox).", "configuration.aspire.enableDebugConfigEnvironmentLogging": "Include environment variables when logging debug session configurations. This can help diagnose environment-related issues but may expose sensitive information in logs.", "command.runAppHost": "Run Aspire apphost", "command.debugAppHost": "Debug Aspire apphost", diff --git a/extension/schemas/aspire-global-settings.schema.json b/extension/schemas/aspire-global-settings.schema.json index 606b7ebd700..f0fe37a321f 100644 --- a/extension/schemas/aspire-global-settings.schema.json +++ b/extension/schemas/aspire-global-settings.schema.json @@ -58,7 +58,7 @@ ] } ], - "description": "Enable or disable experimental Go language support for polyglot Aspire applications", + "description": "Enable or disable experimental Go language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:java": { @@ -74,7 +74,7 @@ ] } ], - "description": "Enable or disable experimental Java language support for polyglot Aspire applications", + "description": "Enable or disable experimental Java language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:python": { @@ -90,7 +90,7 @@ ] } ], - "description": "Enable or disable experimental Python language support for polyglot Aspire applications", + "description": "Enable or disable experimental Python language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:rust": { @@ -106,7 +106,7 @@ ] } ], - "description": "Enable or disable experimental Rust language support for polyglot Aspire applications", + "description": "Enable or disable experimental Rust language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "minimumSdkCheckEnabled": { @@ -157,6 +157,22 @@ "description": "Enable or disable disk caching for package search results to improve performance", "default": true }, + "polyglotSupportEnabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string", + "enum": [ + "true", + "false" + ] + } + ], + "description": "Enable or disable support for non-.NET (polyglot) languages and runtimes in Aspire applications", + "default": false + }, "runningInstanceDetectionEnabled": { "anyOf": [ { diff --git a/extension/schemas/aspire-settings.schema.json b/extension/schemas/aspire-settings.schema.json index 90cfd3abc95..704b6826055 100644 --- a/extension/schemas/aspire-settings.schema.json +++ b/extension/schemas/aspire-settings.schema.json @@ -62,7 +62,7 @@ ] } ], - "description": "Enable or disable experimental Go language support for polyglot Aspire applications", + "description": "Enable or disable experimental Go language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:java": { @@ -78,7 +78,7 @@ ] } ], - "description": "Enable or disable experimental Java language support for polyglot Aspire applications", + "description": "Enable or disable experimental Java language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:python": { @@ -94,7 +94,7 @@ ] } ], - "description": "Enable or disable experimental Python language support for polyglot Aspire applications", + "description": "Enable or disable experimental Python language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "experimentalPolyglot:rust": { @@ -110,7 +110,7 @@ ] } ], - "description": "Enable or disable experimental Rust language support for polyglot Aspire applications", + "description": "Enable or disable experimental Rust language support for polyglot Aspire applications (requires polyglotSupportEnabled)", "default": false }, "minimumSdkCheckEnabled": { @@ -161,6 +161,22 @@ "description": "Enable or disable disk caching for package search results to improve performance", "default": true }, + "polyglotSupportEnabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string", + "enum": [ + "true", + "false" + ] + } + ], + "description": "Enable or disable support for non-.NET (polyglot) languages and runtimes in Aspire applications", + "default": false + }, "runningInstanceDetectionEnabled": { "anyOf": [ { diff --git a/extension/src/debugger/AspireDebugSession.ts b/extension/src/debugger/AspireDebugSession.ts index bc35aceeb6c..7dd722eba4a 100644 --- a/extension/src/debugger/AspireDebugSession.ts +++ b/extension/src/debugger/AspireDebugSession.ts @@ -4,15 +4,18 @@ import * as fs from "fs"; import { createDebugAdapterTracker } from "./adapterTracker"; import { AspireResourceExtendedDebugConfiguration, AspireResourceDebugSession, EnvVar, AspireExtendedDebugConfiguration, ProjectLaunchConfiguration, StartAppHostOptions } from "../dcp/types"; import { extensionLogOutputChannel } from "../utils/logging"; + +export type DashboardBrowserType = 'openExternalBrowser' | 'debugChrome' | 'debugEdge' | 'debugFirefox'; import AspireDcpServer, { generateDcpIdPrefix } from "../dcp/AspireDcpServer"; import { spawnCliProcess } from "./languages/cli"; -import { disconnectingFromSession, launchingWithAppHost, launchingWithDirectory, processExceptionOccurred, processExitedWithCode } from "../loc/strings"; +import { disconnectingFromSession, launchingWithAppHost, launchingWithDirectory, processExceptionOccurred, processExitedWithCode, aspireDashboard } from "../loc/strings"; import { projectDebuggerExtension } from "./languages/dotnet"; import AspireRpcServer from "../server/AspireRpcServer"; import { createDebugSessionConfiguration } from "./debuggerExtensions"; import { AspireTerminalProvider } from "../utils/AspireTerminalProvider"; import { ICliRpcClient } from "../server/rpcClient"; import path from "path"; +import os from "os"; import { EnvironmentVariables } from "../utils/environment"; export class AspireDebugSession implements vscode.DebugAdapter { @@ -28,6 +31,7 @@ export class AspireDebugSession implements vscode.DebugAdapter { private _resourceDebugSessions: AspireResourceDebugSession[] = []; private _trackedDebugAdapters: string[] = []; private _rpcClient?: ICliRpcClient; + private _dashboardDebugSession: vscode.DebugSession | null = null; private readonly _disposables: vscode.Disposable[] = []; public readonly onDidSendMessage = this._onDidSendMessage.event; @@ -280,14 +284,116 @@ export class AspireDebugSession implements vscode.DebugAdapter { }); } + /** + * Opens the dashboard URL in the specified browser. + * For debugChrome/debugEdge/debugFirefox, launches as a child debug session that auto-closes with the Aspire debug session. + */ + async openDashboard(url: string, browserType: DashboardBrowserType): Promise { + extensionLogOutputChannel.info(`Opening dashboard in browser: ${browserType}, URL: ${url}`); + + switch (browserType) { + case 'debugChrome': + await this.launchDebugBrowser(url, 'pwa-chrome'); + break; + + case 'debugEdge': + await this.launchDebugBrowser(url, 'pwa-msedge'); + break; + + case 'debugFirefox': + await this.launchDebugBrowser(url, 'firefox'); + break; + + case 'openExternalBrowser': + default: + // Use VS Code's default external browser handling + await vscode.env.openExternal(vscode.Uri.parse(url)); + break; + } + } + + /** + * Launches a browser as a child debug session. + * The browser will automatically close when the parent Aspire debug session ends. + */ + private async launchDebugBrowser(url: string, debugType: 'pwa-chrome' | 'pwa-msedge' | 'firefox'): Promise { + const debugConfig: vscode.DebugConfiguration = { + type: debugType, + name: aspireDashboard, + request: 'launch', + url: url, + }; + + // Add type-specific options + if (debugType === 'pwa-chrome' || debugType === 'pwa-msedge') { + // Don't pause on entry for Chrome/Edge + debugConfig.pauseForSourceMap = false; + } + else if (debugType === 'firefox') { + // Firefox debugger requires webRoot; resolve to actual workspace path + debugConfig.webRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath ?? os.tmpdir(); + debugConfig.pathMappings = []; + } + + // Register listener before starting so we don't miss the event + const disposable = vscode.debug.onDidStartDebugSession((session) => { + if (session.configuration.name === aspireDashboard && session.type === debugType) { + this._dashboardDebugSession = session; + disposable.dispose(); + } + }); + + // Start as a child debug session - it will close when parent closes + const didStart = await vscode.debug.startDebugging( + undefined, + debugConfig, + this._session + ); + + if (!didStart) { + disposable.dispose(); + extensionLogOutputChannel.warn(`Failed to start debug browser (${debugType}), falling back to default browser`); + await vscode.env.openExternal(vscode.Uri.parse(url)); + } + } + dispose(): void { extensionLogOutputChannel.info('Stopping the Aspire debug session'); + this.closeDashboard(); vscode.debug.stopDebugging(this._session); this._disposables.forEach(disposable => disposable.dispose()); this._trackedDebugAdapters = []; this._rpcClient?.stopCli(); } + /** + * Closes the dashboard browser if closeDashboardOnDebugEnd is enabled. + * Supports Simple Browser (webview tab) and debug browser sessions. + */ + private closeDashboard(): void { + const aspireConfig = vscode.workspace.getConfiguration('aspire'); + const shouldClose = aspireConfig.get('closeDashboardOnDebugEnd', true); + + if (!shouldClose) { + this._dashboardDebugSession = null; + return; + } + + extensionLogOutputChannel.info('Closing dashboard browser...'); + + // For debug browsers, stop the debug session + if (this._dashboardDebugSession) { + vscode.debug.stopDebugging(this._dashboardDebugSession).then( + () => extensionLogOutputChannel.info('Dashboard debug session stopped.'), + (err) => extensionLogOutputChannel.warn(`Failed to stop dashboard debug session: ${err}`) + ); + this._dashboardDebugSession = null; + return; + } + // Debug browser sessions (debugChrome, debugEdge, debugFirefox) are child sessions + // and will automatically close when the parent Aspire session is stopped. + } + private sendResponse(request: any, body: any = {}) { this._onDidSendMessage.fire({ type: 'response', diff --git a/extension/src/loc/strings.ts b/extension/src/loc/strings.ts index 484ca92ec30..7db93d316f9 100644 --- a/extension/src/loc/strings.ts +++ b/extension/src/loc/strings.ts @@ -9,6 +9,7 @@ export const codespacesUrl = (url: string) => vscode.l10n.t('Codespaces: {0}', u export const directLink = vscode.l10n.t('Open local URL'); export const codespacesLink = vscode.l10n.t('Open codespaces URL'); export const openAspireDashboard = vscode.l10n.t('Launch Aspire Dashboard'); +export const aspireDashboard = vscode.l10n.t('Aspire Dashboard'); export const noWorkspaceOpen = vscode.l10n.t('No workspace is open. Please open a folder or workspace before running this command.'); export const failedToShowPromptEmpty = vscode.l10n.t('Failed to show prompt, text was empty.'); export const rpcServerAddressError = vscode.l10n.t('Failed to get RPC server address. The extension may not function correctly.'); diff --git a/extension/src/server/interactionService.ts b/extension/src/server/interactionService.ts index b3ab6cb3d92..6a663e2861c 100644 --- a/extension/src/server/interactionService.ts +++ b/extension/src/server/interactionService.ts @@ -8,7 +8,7 @@ import { ProgressNotifier } from './progressNotifier'; import { applyTextStyle, formatText } from '../utils/strings'; import { extensionLogOutputChannel } from '../utils/logging'; import { AspireExtendedDebugConfiguration, EnvVar } from '../dcp/types'; -import { AspireDebugSession } from '../debugger/AspireDebugSession'; +import { AspireDebugSession, DashboardBrowserType } from '../debugger/AspireDebugSession'; import { AnsiColors } from '../utils/AspireTerminalProvider'; import { isDirectory } from '../utils/io'; @@ -33,6 +33,7 @@ export interface IInteractionService { logMessage: (logLevel: CSLogLevel, message: string) => void; launchAppHost(projectFile: string, args: string[], environment: EnvVar[], debug: boolean): Promise; stopDebugging: () => void; + closeDashboard: () => void; notifyAppHostStartupCompleted: () => void; startDebugSession: (workingDirectory: string, projectFile: string | null, debug: boolean) => Promise; writeDebugSessionMessage: (message: string, stdout: boolean, textStyle?: string) => void; @@ -305,11 +306,16 @@ export class InteractionService implements IInteractionService { // If aspire.enableAspireDashboardAutoLaunch is true, the dashboard will be launched automatically and we do not need // to show an information message. - const enableDashboardAutoLaunch = vscode.workspace.getConfiguration('aspire').get('enableAspireDashboardAutoLaunch', true); + const aspireConfig = vscode.workspace.getConfiguration('aspire'); + const enableDashboardAutoLaunch = aspireConfig.get('enableAspireDashboardAutoLaunch', true); if (enableDashboardAutoLaunch) { - // Open the dashboard URL in an external browser. Prefer codespaces URL if available. + // Open the dashboard URL in the configured browser. Prefer codespaces URL if available. const urlToOpen = codespacesUrl || baseUrl; - vscode.env.openExternal(vscode.Uri.parse(urlToOpen)); + const debugSession = this._getAspireDebugSession(); + if (debugSession) { + const browserType = aspireConfig.get('dashboardBrowser', 'debugChrome'); + await debugSession.openDashboard(urlToOpen, browserType); + } return; } @@ -458,6 +464,13 @@ export class InteractionService implements IInteractionService { clearProgressNotification() { this._progressNotifier.clear(); } + + /** + * Closes the dashboard browser. Delegates to the current AspireDebugSession. + */ + closeDashboard(): void { + // No-op when called from InteractionService - the debug session handles closing in dispose() + } } function tryExecuteEndpoint(interactionService: IInteractionService, withAuthentication: (callback: (...params: any[]) => any) => (...params: any[]) => any) { From e857065791ae3a120020bc096dacb5fa94352b81 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 12:43:01 -0500 Subject: [PATCH 2/7] Update extension/src/debugger/AspireDebugSession.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extension/src/debugger/AspireDebugSession.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extension/src/debugger/AspireDebugSession.ts b/extension/src/debugger/AspireDebugSession.ts index 7dd722eba4a..63bea411410 100644 --- a/extension/src/debugger/AspireDebugSession.ts +++ b/extension/src/debugger/AspireDebugSession.ts @@ -390,8 +390,10 @@ export class AspireDebugSession implements vscode.DebugAdapter { this._dashboardDebugSession = null; return; } - // Debug browser sessions (debugChrome, debugEdge, debugFirefox) are child sessions - // and will automatically close when the parent Aspire session is stopped. + // At this point there is no tracked dashboard debug session to stop. + // Any debug browser child sessions (debugChrome, debugEdge, debugFirefox) will + // automatically close when the parent Aspire session is stopped, so no further + // cleanup is required here. } private sendResponse(request: any, body: any = {}) { From 7fa2922053ae67b4845a7c9434db8907f87c3f67 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 12:43:26 -0500 Subject: [PATCH 3/7] Update extension/src/debugger/AspireDebugSession.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extension/src/debugger/AspireDebugSession.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/extension/src/debugger/AspireDebugSession.ts b/extension/src/debugger/AspireDebugSession.ts index 63bea411410..54365a40877 100644 --- a/extension/src/debugger/AspireDebugSession.ts +++ b/extension/src/debugger/AspireDebugSession.ts @@ -359,7 +359,6 @@ export class AspireDebugSession implements vscode.DebugAdapter { dispose(): void { extensionLogOutputChannel.info('Stopping the Aspire debug session'); - this.closeDashboard(); vscode.debug.stopDebugging(this._session); this._disposables.forEach(disposable => disposable.dispose()); this._trackedDebugAdapters = []; From 817e561d43ce4b44cba10ea0b4c8ffcf9740e287 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 12:43:43 -0500 Subject: [PATCH 4/7] Update extension/src/server/interactionService.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extension/src/server/interactionService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension/src/server/interactionService.ts b/extension/src/server/interactionService.ts index 6a663e2861c..5b45597828f 100644 --- a/extension/src/server/interactionService.ts +++ b/extension/src/server/interactionService.ts @@ -313,7 +313,7 @@ export class InteractionService implements IInteractionService { const urlToOpen = codespacesUrl || baseUrl; const debugSession = this._getAspireDebugSession(); if (debugSession) { - const browserType = aspireConfig.get('dashboardBrowser', 'debugChrome'); + const browserType = aspireConfig.get('dashboardBrowser', 'openExternalBrowser'); await debugSession.openDashboard(urlToOpen, browserType); } return; From 547ded98cc2f6681218cb20ccb256eb07fa05760 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 12:43:50 -0500 Subject: [PATCH 5/7] Update extension/src/debugger/AspireDebugSession.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extension/src/debugger/AspireDebugSession.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension/src/debugger/AspireDebugSession.ts b/extension/src/debugger/AspireDebugSession.ts index 54365a40877..dc1c35bd049 100644 --- a/extension/src/debugger/AspireDebugSession.ts +++ b/extension/src/debugger/AspireDebugSession.ts @@ -367,7 +367,7 @@ export class AspireDebugSession implements vscode.DebugAdapter { /** * Closes the dashboard browser if closeDashboardOnDebugEnd is enabled. - * Supports Simple Browser (webview tab) and debug browser sessions. + * Handles closing debug browser sessions. */ private closeDashboard(): void { const aspireConfig = vscode.workspace.getConfiguration('aspire'); From 40a9d7631140bbbeb7e02349243b7914d10d1dd5 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 13:33:56 -0500 Subject: [PATCH 6/7] Revert auto-generated schema changes --- .../aspire-global-settings.schema.json | 24 ++++--------------- extension/schemas/aspire-settings.schema.json | 24 ++++--------------- 2 files changed, 8 insertions(+), 40 deletions(-) diff --git a/extension/schemas/aspire-global-settings.schema.json b/extension/schemas/aspire-global-settings.schema.json index f0fe37a321f..606b7ebd700 100644 --- a/extension/schemas/aspire-global-settings.schema.json +++ b/extension/schemas/aspire-global-settings.schema.json @@ -58,7 +58,7 @@ ] } ], - "description": "Enable or disable experimental Go language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Go language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:java": { @@ -74,7 +74,7 @@ ] } ], - "description": "Enable or disable experimental Java language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Java language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:python": { @@ -90,7 +90,7 @@ ] } ], - "description": "Enable or disable experimental Python language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Python language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:rust": { @@ -106,7 +106,7 @@ ] } ], - "description": "Enable or disable experimental Rust language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Rust language support for polyglot Aspire applications", "default": false }, "minimumSdkCheckEnabled": { @@ -157,22 +157,6 @@ "description": "Enable or disable disk caching for package search results to improve performance", "default": true }, - "polyglotSupportEnabled": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string", - "enum": [ - "true", - "false" - ] - } - ], - "description": "Enable or disable support for non-.NET (polyglot) languages and runtimes in Aspire applications", - "default": false - }, "runningInstanceDetectionEnabled": { "anyOf": [ { diff --git a/extension/schemas/aspire-settings.schema.json b/extension/schemas/aspire-settings.schema.json index 704b6826055..90cfd3abc95 100644 --- a/extension/schemas/aspire-settings.schema.json +++ b/extension/schemas/aspire-settings.schema.json @@ -62,7 +62,7 @@ ] } ], - "description": "Enable or disable experimental Go language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Go language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:java": { @@ -78,7 +78,7 @@ ] } ], - "description": "Enable or disable experimental Java language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Java language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:python": { @@ -94,7 +94,7 @@ ] } ], - "description": "Enable or disable experimental Python language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Python language support for polyglot Aspire applications", "default": false }, "experimentalPolyglot:rust": { @@ -110,7 +110,7 @@ ] } ], - "description": "Enable or disable experimental Rust language support for polyglot Aspire applications (requires polyglotSupportEnabled)", + "description": "Enable or disable experimental Rust language support for polyglot Aspire applications", "default": false }, "minimumSdkCheckEnabled": { @@ -161,22 +161,6 @@ "description": "Enable or disable disk caching for package search results to improve performance", "default": true }, - "polyglotSupportEnabled": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string", - "enum": [ - "true", - "false" - ] - } - ], - "description": "Enable or disable support for non-.NET (polyglot) languages and runtimes in Aspire applications", - "default": false - }, "runningInstanceDetectionEnabled": { "anyOf": [ { From 41df6e7cf3b2c2c567fdbdc85cb9c08e5d4e3bdc Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Mon, 2 Mar 2026 13:35:29 -0500 Subject: [PATCH 7/7] Move DashboardBrowserType export after all imports --- extension/src/debugger/AspireDebugSession.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extension/src/debugger/AspireDebugSession.ts b/extension/src/debugger/AspireDebugSession.ts index dc1c35bd049..f2ab6b5c31d 100644 --- a/extension/src/debugger/AspireDebugSession.ts +++ b/extension/src/debugger/AspireDebugSession.ts @@ -4,8 +4,6 @@ import * as fs from "fs"; import { createDebugAdapterTracker } from "./adapterTracker"; import { AspireResourceExtendedDebugConfiguration, AspireResourceDebugSession, EnvVar, AspireExtendedDebugConfiguration, ProjectLaunchConfiguration, StartAppHostOptions } from "../dcp/types"; import { extensionLogOutputChannel } from "../utils/logging"; - -export type DashboardBrowserType = 'openExternalBrowser' | 'debugChrome' | 'debugEdge' | 'debugFirefox'; import AspireDcpServer, { generateDcpIdPrefix } from "../dcp/AspireDcpServer"; import { spawnCliProcess } from "./languages/cli"; import { disconnectingFromSession, launchingWithAppHost, launchingWithDirectory, processExceptionOccurred, processExitedWithCode, aspireDashboard } from "../loc/strings"; @@ -18,6 +16,8 @@ import path from "path"; import os from "os"; import { EnvironmentVariables } from "../utils/environment"; +export type DashboardBrowserType = 'openExternalBrowser' | 'debugChrome' | 'debugEdge' | 'debugFirefox'; + export class AspireDebugSession implements vscode.DebugAdapter { private readonly _onDidSendMessage = new EventEmitter(); private _messageSeq = 1;