-
Notifications
You must be signed in to change notification settings - Fork 267
Enable full figspec generation for extensions with metadata capability #6620
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Co-authored-by: JeffreyCA <9157833+JeffreyCA@users.noreply.github.com>
Co-authored-by: JeffreyCA <9157833+JeffreyCA@users.noreply.github.com>
|
@copilot can you run the Figspec snapshot tests and verify they're up to date? |
Ran the Figspec snapshot tests - they pass successfully and the snapshot file is up to date with no uncommitted changes: The test installs all extensions from the local registry, generates the figspec with full extension command trees, and verifies against the committed snapshot. Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
|
/azp run azure-dev - cli |
|
Azure Pipelines successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR extends Fig spec generation to incorporate full command trees for azd extensions that support the metadata capability and adds dynamic completion for azd config keys, improving IntelliSense in VS Code and other Fig consumers.
Changes:
- Wire the Fig spec builder to the extensions
Managerand consume extensionmetadata.jsonto generate full subcommand/flag trees for metadata-capable extensions (azure.ai.agents,azure.ai.finetune,azure.coding-agent,microsoft.azd.demo,microsoft.azd.extensions,microsoft.azd.concurx). - Add a TypeScript generator and Go wiring for dynamic completion of
azd config get/set/unsetpatharguments usingazd config options --output json. - Improve TypeScript rendering of args (indentation and array formatting) and update the snapshot-based Fig spec test to assert the end-to-end CLI-generated spec, including extension metadata.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
cli/azd/pkg/extensions/manager.go |
Refactors LoadMetadata to use a reusable LoadMetadataFromDir helper and adds HasMetadataCapability for checking whether an extension exposes metadata, enabling the Fig builder to query this via the Manager. |
cli/azd/internal/figspec/typescript_renderer.go |
Adjusts arg rendering indentation for both subcommand args and option args, fixing formatting issues in the generated TypeScript spec without changing semantics. |
cli/azd/internal/figspec/spec_builder.go |
Extends SpecBuilder with an ExtensionMetadataProvider, tracks global flag names, and adds logic to replace extension entrypoint commands with full metadata-derived command trees (and matching help trees) when available. |
cli/azd/internal/figspec/resources/generators.ts |
Introduces the AzdConfigOption type and a new listConfigKeys Fig generator that shells out to azd config options --output json, filters out envvar-type entries, and exposes config keys plus descriptions for completion. |
cli/azd/internal/figspec/fig_generators.go |
Defines the FigGenListConfigKeys constant pointing at azdGenerators.listConfigKeys, so Go-side spec generation can refer to the new generator. |
cli/azd/internal/figspec/extension_metadata.go |
Adds the ExtensionMetadataProvider interface and conversion helpers (convertExtensionCommand, convertExtensionFlag, convertExtensionArg, convertExtensionCommandForHelp) to translate extension metadata (commands, flags, args) into Fig Subcommand/Option/Arg structures, filtering out global flags. |
cli/azd/internal/figspec/extension_metadata_test.go |
Introduces unit tests that validate conversion of extension commands, flags, args, and help-only command trees to Fig structures, including handling of aliases, hidden entities, global-flag filtering, repeatable and dangerous flags, and suggestion lists. |
cli/azd/internal/figspec/customizations.go |
Wires the new config-key generator into the customization layer by returning FigGenListConfigKeys for the path argument of azd config get/set/unset, enabling dynamic completions for config keys. |
cli/azd/cmd/testdata/TestFigSpec.ts |
Updates the snapshot of the generated Fig spec to include full extension command trees for metadata-capable extensions, new listConfigKeys generator wiring, and corrected arg/option indentation. |
cli/azd/cmd/figspec_test.go |
Changes the Fig spec snapshot test to invoke azd completion fig via the CLI helper instead of calling figspec directly, thereby exercising the full wiring including extensions, metadata loading, and generators. |
cli/azd/cmd/completion.go |
Extends the completionFigAction to receive an *extensions.Manager from DI and configures the Fig SpecBuilder to use it via WithExtensionMetadata, so extension metadata is available during spec construction. |
cli/azd/.vscode/cspell.yaml |
Adds subcmd to the custom dictionary to avoid false-positive spell-check warnings on the new tests and comments. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
/azp run azure-dev - cli |
|
Azure Pipelines successfully started running 1 pipeline(s). |
Azure Dev CLI Install InstructionsInstall scriptsMacOS/Linux
bash: pwsh: WindowsPowerShell install MSI install Standalone Binary
MSI
Documentationlearn.microsoft.com documentationtitle: Azure Developer CLI reference
|
Fixes #6543
Fixes #6623
This PR enables Fig autocomplete spec generation to include full command trees for azd extensions that declare the
metadatacapability, improving VS Code terminal IntelliSense for extension commands. Previously, the generated spec only included the extension namespace and did not have any subcommand or flag information.Extensions with full completions:
azure.ai.agentsazure.ai.finetuneazure.coding-agentmicrosoft.azd.demomicrosoft.azd.extensionsmicrosoft.azd.concurxThis PR also fixes indentation issues and enables dynamic suggestions for
azd config set/get/unsetusing the newazd config options --output jsoncommand under the hood.How it works
When building figspec, the
SpecBuilder:extension.idannotationmetadatacapability viaHasMetadataCapability()Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
aka.ms/home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd /home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd extension source add -n local -t file -l /home/REDACTED/work/azure-dev/azure-dev/cli/azd/extensions/registry.json /home/REDACTED/work/azure-dev/azure-dev/cli/azd/pkg/prompt/prompt_models.go /home/REDACTED/work/azure-dev/azure-dev/cli/azd/pkg/prompt/prompt_service.go -qui�� hs9hXAu9J cfg x_amd64/vet . AD/microsoft-aut-o x86_64-linux-gnu/tmp/go-build2537574258/b738/_pkg_.a x_amd64/vet(dns block)/home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd /home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd extension list --source local --output json -importcfg /tmp/go-build2537574258/b738/importcfg -pack /home/REDACTED/work/azure-dev/azure-dev/cli/azd/pkg/infra/azure_resource_manager.go /home/REDACTED/work/azure-dev/azure-dev/cli/azd/pkg/infra/deployment_manager.go -W dMToCaQSI cfg x_amd64/vet . AD/microsoft-aut-o --64 x_amd64/vet(dns block)/home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd /home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd extension install azure.ai.agents --source local --version 0.1.8-preview -p s-go-api/azurede-atomic -lang=go1.23 x_amd64/vet -W LxQsGdGrv cfg x_amd64/vet . AD/microsoft-aut-o --64 x_amd64/vet(dns block)code.cloudfoundry.org/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)dario.cat/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)go.googlesource.com/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)go.opentelemetry.io/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)go.uber.org/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)google.golang.org/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)gopkg.in/update-job-proxy /update-job-proxy -o br-f1a9f09b2487 -j DOCKER-ISOLATION-STAGE-2 fb36b73.0 64/pkg/tool/linu-e(dns block)/update-job-proxy /update-job-proxy DROP e/git-remote-htt/etc/ssl/certs/feffd413.0 test -e C_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem e/git-remote-htt/usr/share/ca-certificates/mozilla/Hongkong_Post_Root_CA_3.crt test om/gofrs/uuid --auto /bin/git test -e oot_CA_2022.pem /usr/bin/git /usr/bin/test 88a3ebd39425b66a/usr/sbin/iptables b9711f78:go.mod e/git-remote-htt-t test(dns block)westus-0.in.applicationinsights.azure.com/home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd /home/REDACTED/work/azure-dev/azure-dev/cli/azd/azd telemetry upload 64/pkg/tool/linux_amd64/vet -uns�� c/extension_metadata.go /tmp/go-build276716392/b108/vet.cfg cfg ty@v0.0.20/doc.g/opt/hostedtoolcache/go/1.25.6/x64/pkg/tool/linux_amd64/cgo ty@v0.0.20/isatt-V=full x_amd64/compile ache/go/1.25.6/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags 4c49fdc4a8c0/bash -errorsas -ifaceassert -nilfunc ache/go/1.25.6/x-v(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.