From c176f53d9461002670cbad5b9a8ff3a002696a67 Mon Sep 17 00:00:00 2001 From: JeffreyCA Date: Wed, 4 Feb 2026 12:47:32 -0800 Subject: [PATCH] Update Fig spec for Azure Developer CLI (azd) (#292894) * Update azd fig spec Add full extension command details Add new commands Use generator for `config` commands * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../terminal-suggest/src/completions/azd.ts | 1184 ++++++++++++++++- 1 file changed, 1181 insertions(+), 3 deletions(-) diff --git a/extensions/terminal-suggest/src/completions/azd.ts b/extensions/terminal-suggest/src/completions/azd.ts index 2a4adb84d62..6a4cf535ee7 100644 --- a/extensions/terminal-suggest/src/completions/azd.ts +++ b/extensions/terminal-suggest/src/completions/azd.ts @@ -27,6 +27,15 @@ interface AzdExtensionListItem { source: string; } +interface AzdConfigOption { + Key: string; + Description: string; + Type: string; + AllowedValues?: string[] | null; + Example?: string; + EnvVar?: string; +} + const azdGenerators: Record = { listEnvironments: { script: ['azd', 'env', 'list', '--output', 'json'], @@ -181,6 +190,25 @@ const azdGenerators: Record = { } }, }, + listConfigKeys: { + script: ['azd', 'config', 'options', '--output', 'json'], + postProcess: (out) => { + try { + const options: AzdConfigOption[] = JSON.parse(out); + return options + .filter((opt) => opt.Type !== 'envvar') // Exclude environment-only options + .map((opt) => ({ + name: opt.Key, + description: opt.Description, + })); + } catch { + return []; + } + }, + cache: { + strategy: 'stale-while-revalidate', + } + }, }; const completionSpec: Fig.Spec = { @@ -193,11 +221,534 @@ const completionSpec: Fig.Spec = { }, { name: ['ai'], - description: 'Extension for the Foundry Agent Service. (Preview)', + description: 'Commands for the ai extension namespace.', subcommands: [ { name: ['agent'], description: 'Extension for the Foundry Agent Service. (Preview)', + subcommands: [ + { + name: ['init'], + description: 'Initialize a new AI agent project. (Preview)', + options: [ + { + name: ['--environment', '-e'], + description: 'The name of the azd environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + { + name: ['--host'], + description: '[Optional] For container based agents, can override the default host to target a container app instead. Accepted values: \'containerapp\'', + args: [ + { + name: 'host', + }, + ], + }, + { + name: ['--manifest', '-m'], + description: 'Path or URI to an agent manifest to add to your azd project', + args: [ + { + name: 'manifest', + }, + ], + }, + { + name: ['--project-id', '-p'], + description: 'Existing Microsoft Foundry Project Id to initialize your azd environment with', + args: [ + { + name: 'project-id', + }, + ], + }, + { + name: ['--src', '-s'], + description: '[Optional] Directory to download the agent definition to (defaults to \'src/\')', + args: [ + { + name: 'src', + }, + ], + }, + ], + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], + }, + { + name: ['finetuning'], + description: 'Extension for Foundry Fine Tuning. (Preview)', + subcommands: [ + { + name: ['init'], + description: 'Initialize a new AI Fine-tuning project. (Preview)', + options: [ + { + name: ['--environment', '-n'], + description: 'The name of the azd environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + { + name: ['--from-job', '-j'], + description: 'Clone configuration from an existing job ID', + args: [ + { + name: 'from-job', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--project-resource-id', '-p'], + description: 'ARM resource ID of the Microsoft Foundry Project (e.g., /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project})', + args: [ + { + name: 'project-resource-id', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID', + args: [ + { + name: 'subscription', + }, + ], + }, + { + name: ['--template', '-t'], + description: 'URL or path to a fine-tune job template', + args: [ + { + name: 'template', + }, + ], + }, + { + name: ['--working-directory', '-w'], + description: 'Local path for project output', + args: [ + { + name: 'working-directory', + }, + ], + }, + ], + }, + { + name: ['jobs'], + description: 'Manage fine-tuning jobs', + subcommands: [ + { + name: ['cancel'], + description: 'Cancels a running or queued fine-tuning job.', + options: [ + { + name: ['--force'], + description: 'Skip confirmation prompt', + isDangerous: true, + }, + { + name: ['--id', '-i'], + description: 'Job ID (required)', + args: [ + { + name: 'id', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + ], + }, + { + name: ['deploy'], + description: 'Deploy a fine-tuned model to Azure Cognitive Services', + options: [ + { + name: ['--capacity', '-c'], + description: 'Capacity units', + args: [ + { + name: 'capacity', + }, + ], + }, + { + name: ['--deployment-name', '-d'], + description: 'Deployment name (required)', + args: [ + { + name: 'deployment-name', + }, + ], + }, + { + name: ['--job-id', '-i'], + description: 'Fine-tuning job ID (required)', + args: [ + { + name: 'job-id', + }, + ], + }, + { + name: ['--model-format', '-m'], + description: 'Model format', + args: [ + { + name: 'model-format', + }, + ], + }, + { + name: ['--no-wait'], + description: 'Do not wait for deployment to complete', + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--sku', '-k'], + description: 'SKU for deployment', + args: [ + { + name: 'sku', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + { + name: ['--version', '-v'], + description: 'Model version', + args: [ + { + name: 'version', + }, + ], + }, + ], + }, + { + name: ['list'], + description: 'List fine-tuning jobs.', + options: [ + { + name: ['--after'], + description: 'Pagination cursor', + args: [ + { + name: 'after', + }, + ], + }, + { + name: ['--output', '-o'], + description: 'Output format: table, json', + args: [ + { + name: 'output', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + { + name: ['--top', '-t'], + description: 'Number of jobs to return', + args: [ + { + name: 'top', + }, + ], + }, + ], + }, + { + name: ['pause'], + description: 'Pauses a running fine-tuning job.', + options: [ + { + name: ['--id', '-i'], + description: 'Job ID (required)', + args: [ + { + name: 'id', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + ], + }, + { + name: ['resume'], + description: 'Resumes a paused fine-tuning job.', + options: [ + { + name: ['--id', '-i'], + description: 'Job ID (required)', + args: [ + { + name: 'id', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + ], + }, + { + name: ['show'], + description: 'Shows detailed information about a specific job.', + options: [ + { + name: ['--id', '-i'], + description: 'Job ID (required)', + args: [ + { + name: 'id', + }, + ], + }, + { + name: ['--logs'], + description: 'Include recent training logs', + }, + { + name: ['--output', '-o'], + description: 'Output format: table, json, yaml', + args: [ + { + name: 'output', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + ], + }, + { + name: ['submit'], + description: 'Submit fine-tuning job.', + options: [ + { + name: ['--file', '-f'], + description: 'Path to the config file.', + args: [ + { + name: 'file', + }, + ], + }, + { + name: ['--model', '-m'], + description: 'Base model to fine-tune. Overrides config file. Required if --file is not provided', + args: [ + { + name: 'model', + }, + ], + }, + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--seed', '-r'], + description: 'Random seed for reproducibility of the job. If a seed is not specified, one will be generated for you. Overrides config file.', + args: [ + { + name: 'seed', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + { + name: ['--suffix', '-x'], + description: 'An optional string of up to 64 characters that will be added to your fine-tuned model name. Overrides config file.', + args: [ + { + name: 'suffix', + }, + ], + }, + { + name: ['--training-file', '-t'], + description: 'Training file ID or local path. Use \'local:\' prefix for local paths. Required if --file is not provided', + args: [ + { + name: 'training-file', + }, + ], + }, + { + name: ['--validation-file', '-v'], + description: 'Validation file ID or local path. Use \'local:\' prefix for local paths.', + args: [ + { + name: 'validation-file', + }, + ], + }, + ], + }, + ], + options: [ + { + name: ['--project-endpoint', '-e'], + description: 'Azure AI Foundry project endpoint URL (e.g., https://account.services.ai.azure.com/api/projects/project-name)', + args: [ + { + name: 'project-endpoint', + }, + ], + }, + { + name: ['--subscription', '-s'], + description: 'Azure subscription ID (enables implicit init if environment not configured)', + args: [ + { + name: 'subscription', + }, + ], + }, + ], + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, ], }, @@ -282,11 +833,73 @@ const completionSpec: Fig.Spec = { name: ['logout'], description: 'Log out of Azure.', }, + { + name: ['status'], + description: 'Show the current authentication status.', + }, ], }, { name: ['coding-agent'], description: 'This extension configures GitHub Copilot Coding Agent access to Azure', + subcommands: [ + { + name: ['config'], + description: 'Configure the GitHub Copilot coding agent to access Azure resources via the Azure MCP', + options: [ + { + name: ['--branch-name'], + description: 'The branch name to use when pushing changes to the copilot-setup-steps.yml', + args: [ + { + name: 'branch-name', + }, + ], + }, + { + name: ['--github-host-name'], + description: 'The hostname to use with GitHub commands', + args: [ + { + name: 'github-host-name', + }, + ], + }, + { + name: ['--managed-identity-name'], + description: 'The name to use for the managed identity, if created.', + args: [ + { + name: 'managed-identity-name', + }, + ], + }, + { + name: ['--remote-name'], + description: 'The name of the git remote where the Copilot Coding Agent will run (ex: /)', + args: [ + { + name: 'remote-name', + }, + ], + }, + { + name: ['--roles'], + description: 'The roles to assign to the service principal or managed identity. By default, the service principal or managed identity will be granted the Reader role.', + isRepeatable: true, + args: [ + { + name: 'roles', + }, + ], + }, + ], + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, { name: ['completion'], @@ -314,6 +927,20 @@ const completionSpec: Fig.Spec = { }, ], }, + { + name: ['concurx'], + description: 'Concurrent execution for azd deployment', + subcommands: [ + { + name: ['up'], + description: 'Runs azd up in concurrent mode', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], + }, { name: ['config'], description: 'Manage azd configurations (ex: default Azure subscription, location).', @@ -323,12 +950,17 @@ const completionSpec: Fig.Spec = { description: 'Gets a configuration.', args: { name: 'path', + generators: azdGenerators.listConfigKeys, }, }, { name: ['list-alpha'], description: 'Display the list of available features in alpha stage.', }, + { + name: ['options'], + description: 'List all available configuration settings.', + }, { name: ['reset'], description: 'Resets configuration to default.', @@ -346,6 +978,7 @@ const completionSpec: Fig.Spec = { args: [ { name: 'path', + generators: azdGenerators.listConfigKeys, }, { name: 'value', @@ -361,6 +994,7 @@ const completionSpec: Fig.Spec = { description: 'Unsets a configuration.', args: { name: 'path', + generators: azdGenerators.listConfigKeys, }, }, ], @@ -368,6 +1002,46 @@ const completionSpec: Fig.Spec = { { name: ['demo'], description: 'This extension provides examples of the AZD extension framework.', + subcommands: [ + { + name: ['colors', 'colours'], + description: 'Displays all ASCII colors with their standard and high-intensity variants.', + }, + { + name: ['config'], + description: 'Set up monitoring configuration for the project and services', + }, + { + name: ['context'], + description: 'Get the context of the AZD project & environment.', + }, + { + name: ['gh-url-parse'], + description: 'Parse a GitHub URL and extract repository information.', + }, + { + name: ['listen'], + description: 'Starts the extension and listens for events.', + }, + { + name: ['mcp'], + description: 'MCP server commands for demo extension', + subcommands: [ + { + name: ['start'], + description: 'Start MCP server with demo tools', + }, + ], + }, + { + name: ['prompt'], + description: 'Examples of prompting the user for input.', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, { name: ['deploy'], @@ -434,6 +1108,71 @@ const completionSpec: Fig.Spec = { name: ['env'], description: 'Manage environments (ex: default environment, environment variables).', subcommands: [ + { + name: ['config'], + description: 'Manage environment configuration (ex: stored in .azure//config.json).', + subcommands: [ + { + name: ['get'], + description: 'Gets a configuration value from the environment.', + options: [ + { + name: ['--environment', '-e'], + description: 'The name of the environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + ], + args: { + name: 'path', + }, + }, + { + name: ['set'], + description: 'Sets a configuration value in the environment.', + options: [ + { + name: ['--environment', '-e'], + description: 'The name of the environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + ], + args: [ + { + name: 'path', + }, + { + name: 'value', + }, + ], + }, + { + name: ['unset'], + description: 'Unsets a configuration value in the environment.', + options: [ + { + name: ['--environment', '-e'], + description: 'The name of the environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + ], + args: { + name: 'path', + }, + }, + ], + }, { name: ['get-value'], description: 'Get specific environment value.', @@ -535,11 +1274,35 @@ const completionSpec: Fig.Spec = { name: 'environment', }, }, + { + name: ['remove', 'rm'], + description: 'Remove an environment.', + options: [ + { + name: ['--environment', '-e'], + description: 'The name of the environment to use.', + args: [ + { + name: 'environment', + }, + ], + }, + { + name: ['--force'], + description: 'Skips confirmation before performing removal.', + isDangerous: true, + }, + ], + args: { + name: 'environment', + }, + }, { name: ['select'], description: 'Set the default environment.', args: { name: 'environment', + isOptional: true, generators: azdGenerators.listEnvironments, }, }, @@ -607,7 +1370,7 @@ const completionSpec: Fig.Spec = { options: [ { name: ['--force', '-f'], - description: 'Force installation even if it would downgrade the current version', + description: 'Force installation, including downgrades and reinstalls', isDangerous: true, }, { @@ -1513,6 +2276,239 @@ const completionSpec: Fig.Spec = { { name: ['x'], description: 'This extension provides a set of tools for AZD extension developers to test and debug their extensions.', + subcommands: [ + { + name: ['build'], + description: 'Build the azd extension project', + options: [ + { + name: ['--all'], + description: 'When set builds for all os/platforms. Defaults to the current os/platform only.', + }, + { + name: ['--output', '-o'], + description: 'Path to the output directory. Defaults to ./bin folder.', + args: [ + { + name: 'output', + }, + ], + }, + { + name: ['--skip-install'], + description: 'When set skips reinstalling extension after successful build.', + }, + ], + }, + { + name: ['init'], + description: 'Initialize a new AZD extension project', + options: [ + { + name: ['--capabilities'], + description: 'The list of capabilities for the extension (e.g., custom-commands,lifecycle-events,mcp-server,service-target-provider).', + isRepeatable: true, + args: [ + { + name: 'capabilities', + }, + ], + }, + { + name: ['--id'], + description: 'The extension identifier (e.g., company.extension).', + args: [ + { + name: 'id', + }, + ], + }, + { + name: ['--language'], + description: 'The programming language for the extension (go, dotnet, javascript, python).', + args: [ + { + name: 'language', + }, + ], + }, + { + name: ['--name'], + description: 'The display name for the extension.', + args: [ + { + name: 'name', + }, + ], + }, + { + name: ['--namespace'], + description: 'The namespace for the extension commands.', + args: [ + { + name: 'namespace', + }, + ], + }, + { + name: ['--registry', '-r'], + description: 'When set will create a local extension source registry.', + }, + ], + }, + { + name: ['pack'], + description: 'Build and pack extension artifacts', + options: [ + { + name: ['--input', '-i'], + description: 'Path to the input directory.', + args: [ + { + name: 'input', + }, + ], + }, + { + name: ['--output', '-o'], + description: 'Path to the artifacts output directory. If not provided, will use local registry artifacts path.', + args: [ + { + name: 'output', + }, + ], + }, + { + name: ['--rebuild'], + description: 'Rebuild the extension before packaging.', + }, + ], + }, + { + name: ['publish'], + description: 'Publish the extension to the extension source', + options: [ + { + name: ['--artifacts'], + description: 'Path to artifacts to process (comma-separated glob patterns, e.g. ./artifacts/*.zip,./artifacts/*.tar.gz)', + isRepeatable: true, + args: [ + { + name: 'artifacts', + }, + ], + }, + { + name: ['--registry', '-r'], + description: 'Path to the extension source registry', + args: [ + { + name: 'registry', + }, + ], + }, + { + name: ['--repo'], + description: 'GitHub repository to create the release in (e.g. owner/repo)', + args: [ + { + name: 'repo', + }, + ], + }, + { + name: ['--version', '-v'], + description: 'Version of the release', + args: [ + { + name: 'version', + }, + ], + }, + ], + }, + { + name: ['release'], + description: 'Create a new extension release from the packaged artifacts', + options: [ + { + name: ['--artifacts'], + description: 'Path to artifacts to upload to the release (comma-separated glob patterns, e.g. ./artifacts/*.zip,./artifacts/*.tar.gz)', + isRepeatable: true, + args: [ + { + name: 'artifacts', + }, + ], + }, + { + name: ['--confirm'], + description: 'Skip confirmation prompt', + }, + { + name: ['--draft', '-d'], + description: 'Create a draft release', + }, + { + name: ['--notes', '-n'], + description: 'Release notes', + args: [ + { + name: 'notes', + }, + ], + }, + { + name: ['--notes-file', '-F'], + description: 'Read release notes from file (use "-" to read from standard input)', + args: [ + { + name: 'notes-file', + }, + ], + }, + { + name: ['--prerelease'], + description: 'Create a pre-release version', + }, + { + name: ['--repo', '-r'], + description: 'GitHub repository to create the release in (e.g. owner/repo)', + args: [ + { + name: 'repo', + }, + ], + }, + { + name: ['--title', '-t'], + description: 'Title of the release', + args: [ + { + name: 'title', + }, + ], + }, + { + name: ['--version', '-v'], + description: 'Version of the release', + args: [ + { + name: 'version', + }, + ], + }, + ], + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + { + name: ['watch'], + description: 'Watches the AZD extension project for file changes and rebuilds it.', + }, + ], }, { name: ['help'], @@ -1524,11 +2520,69 @@ const completionSpec: Fig.Spec = { }, { name: ['ai'], - description: 'Extension for the Foundry Agent Service. (Preview)', + description: 'Commands for the ai extension namespace.', subcommands: [ { name: ['agent'], description: 'Extension for the Foundry Agent Service. (Preview)', + subcommands: [ + { + name: ['init'], + description: 'Initialize a new AI agent project. (Preview)', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], + }, + { + name: ['finetuning'], + description: 'Extension for Foundry Fine Tuning. (Preview)', + subcommands: [ + { + name: ['init'], + description: 'Initialize a new AI Fine-tuning project. (Preview)', + }, + { + name: ['jobs'], + description: 'Manage fine-tuning jobs', + subcommands: [ + { + name: ['cancel'], + description: 'Cancels a running or queued fine-tuning job.', + }, + { + name: ['deploy'], + description: 'Deploy a fine-tuned model to Azure Cognitive Services', + }, + { + name: ['list'], + description: 'List fine-tuning jobs.', + }, + { + name: ['pause'], + description: 'Pauses a running fine-tuning job.', + }, + { + name: ['resume'], + description: 'Resumes a paused fine-tuning job.', + }, + { + name: ['show'], + description: 'Shows detailed information about a specific job.', + }, + { + name: ['submit'], + description: 'Submit fine-tuning job.', + }, + ], + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, ], }, @@ -1544,11 +2598,25 @@ const completionSpec: Fig.Spec = { name: ['logout'], description: 'Log out of Azure.', }, + { + name: ['status'], + description: 'Show the current authentication status.', + }, ], }, { name: ['coding-agent'], description: 'This extension configures GitHub Copilot Coding Agent access to Azure', + subcommands: [ + { + name: ['config'], + description: 'Configure the GitHub Copilot coding agent to access Azure resources via the Azure MCP', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, { name: ['completion'], @@ -1576,6 +2644,20 @@ const completionSpec: Fig.Spec = { }, ], }, + { + name: ['concurx'], + description: 'Concurrent execution for azd deployment', + subcommands: [ + { + name: ['up'], + description: 'Runs azd up in concurrent mode', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], + }, { name: ['config'], description: 'Manage azd configurations (ex: default Azure subscription, location).', @@ -1588,6 +2670,10 @@ const completionSpec: Fig.Spec = { name: ['list-alpha'], description: 'Display the list of available features in alpha stage.', }, + { + name: ['options'], + description: 'List all available configuration settings.', + }, { name: ['reset'], description: 'Resets configuration to default.', @@ -1609,6 +2695,46 @@ const completionSpec: Fig.Spec = { { name: ['demo'], description: 'This extension provides examples of the AZD extension framework.', + subcommands: [ + { + name: ['colors', 'colours'], + description: 'Displays all ASCII colors with their standard and high-intensity variants.', + }, + { + name: ['config'], + description: 'Set up monitoring configuration for the project and services', + }, + { + name: ['context'], + description: 'Get the context of the AZD project & environment.', + }, + { + name: ['gh-url-parse'], + description: 'Parse a GitHub URL and extract repository information.', + }, + { + name: ['listen'], + description: 'Starts the extension and listens for events.', + }, + { + name: ['mcp'], + description: 'MCP server commands for demo extension', + subcommands: [ + { + name: ['start'], + description: 'Start MCP server with demo tools', + }, + ], + }, + { + name: ['prompt'], + description: 'Examples of prompting the user for input.', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + ], }, { name: ['deploy'], @@ -1622,6 +2748,24 @@ const completionSpec: Fig.Spec = { name: ['env'], description: 'Manage environments (ex: default environment, environment variables).', subcommands: [ + { + name: ['config'], + description: 'Manage environment configuration (ex: stored in .azure//config.json).', + subcommands: [ + { + name: ['get'], + description: 'Gets a configuration value from the environment.', + }, + { + name: ['set'], + description: 'Sets a configuration value in the environment.', + }, + { + name: ['unset'], + description: 'Unsets a configuration value in the environment.', + }, + ], + }, { name: ['get-value'], description: 'Get specific environment value.', @@ -1642,6 +2786,10 @@ const completionSpec: Fig.Spec = { name: ['refresh'], description: 'Refresh environment values by using information from a previous infrastructure provision.', }, + { + name: ['remove', 'rm'], + description: 'Remove an environment.', + }, { name: ['select'], description: 'Set the default environment.', @@ -1829,6 +2977,36 @@ const completionSpec: Fig.Spec = { { name: ['x'], description: 'This extension provides a set of tools for AZD extension developers to test and debug their extensions.', + subcommands: [ + { + name: ['build'], + description: 'Build the azd extension project', + }, + { + name: ['init'], + description: 'Initialize a new AZD extension project', + }, + { + name: ['pack'], + description: 'Build and pack extension artifacts', + }, + { + name: ['publish'], + description: 'Publish the extension to the extension source', + }, + { + name: ['release'], + description: 'Create a new extension release from the packaged artifacts', + }, + { + name: ['version'], + description: 'Prints the version of the application', + }, + { + name: ['watch'], + description: 'Watches the AZD extension project for file changes and rebuilds it.', + }, + ], }, ], },