Change:
Issue Type: <bBug</bDebug adapters have long been able to provide uris along with error responses, and these uris add buttons to the error dialog. Now that my PR has merged these can be command uris. However it is not currently possible to prevent an extra 'Open ' button being to the error dialog. In some situations there may be no point in the user opening Instead they should use a button that the error response . would it be reasonable for us to suppress addition of the 'Open ' button when the error is adding its own command-type button(s)? Limiting the change in this way should minimize the chance of upsetting existing DAs which return uris with their errors. It's unlikely they have been returning command-type uris because until now these haven't been actionable. VS Code version: Code - Insiders 1.57.0-insider (, 2021-05-14T20:13:58.234Z) OS version: Windows_NT x64 10.0. <!-- generated by issue reporter --
this sounds reasonable. What is your exact use case? Just to check if other debug adapters might also profit here. fyi
my specific use case is that our implementation of launchRequest may determine that there is no debugging license for the target server. In this situation we want to help the user run the command which submits a request for a license. There is no point in suggesting that they edit their file. Are you happy for me to submit a PR?
Let's best wait and see feedback before you create a PR. Thanks
Yes, this request makes sense - feel free to submit a PR.
friendly ping for this, just to check if you are interested in tackling this. If not I might move out of this milestone. Thanks!
thanks for the ping. I still plan to get a PR in for August.
PR submitted
Lovely, thanks! Let me review it.
Would also be great if you double check with you debugger once we have a new Insiders on Monday. Thanks!
/verified
can you maybe also create a PR for the release notes for this feature? Here's the document And Andre and me left a TODO for you. Let me know if you do not have time and I can cover this. Thanks!
Submitted as You are welcome to edit it if you think the text needs improving.

Discussion:
private async showError(message: string, errorActions: ReadonlyArray<IAction> = []): Promise<void> { const configureAction = new Action(DEBUG_CONFIGURE_COMMAND_ID, DEBUG_CONFIGURE_LABEL, undefined, true, () => this.commandService.executeCommand(DEBUG_CONFIGURE_COMMAND_ID)); <del> const actions = [...errorActions, configureAction]; </del> <ins> // Don't append the standard command if id of any provided action indicates it is a command const actions = errorActions.filter((action) => action.id.endsWith('.command')).length > 0 ? errorActions : [...errorActions, configureAction]; </ins> const { choice } = await this.dialogService.show(severity.Error, message, actions.map(a => a.label).concat(nls.localize('cancel', "Cancel")), { cancelId: actions.length }); if (choice < actions.length) { await actions[choice].run();

import { CancellationToken } from 'vs/base/common/cancellation'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; <ins> import { Schemas } from 'vs/base/common/network'; </ins> /** * This interface represents a single command line argument split into a "prefix" and a "path" half.

const url = error?.url; if (error && url) { const label = error.urlLabel ? error.urlLabel : nls.localize('moreInfo', "More Info"); <ins> const uri = URI.parse(url); // Use a suffixed id if uri invokes a command, so default 'Open launch.json' command is suppressed on dialog const actionId = uri.scheme === Schemas.command ? 'debug.moreInfo.command' : 'debug.moreInfo'; </ins> return errors.createErrorWithActions(userMessage, { <del> actions: [new Action('debug.moreInfo', label, undefined, true, async () => { this.openerService.open(URI.parse(url), { allowCommands: true }); </del> <ins> actions: [new Action(actionId, label, undefined, true, async () => { this.openerService.open(uri, { allowCommands: true }); </ins> })] }); }