[release/13.4] 13.4: Load Aspire skills catalog from bundle manifest#17673
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17673Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17673" |
There was a problem hiding this comment.
Pull request overview
Backports the 13.4 fix that makes aspire agent init derive its bundled skill catalog from the Aspire skills bundle manifest (instead of a hardcoded list), with a new opt-in feature flag to enable GitHub remote bundle fetch (default off).
Changes:
- Build the selectable/installable bundled-skill catalog from
skill-manifest.json, while keeping only CLI-local skills as static definitions. - Add
bindingChoicessupport to multi-select prompting so UX-only prompt items don’t become valid--skillsvalues; strip Spectre markup from non-interactive “Available values” output. - Add/adjust tests (unit, integration, E2E) to validate bundle-derived skill listing/selection behavior and remote-fetch feature-flag behavior.
Reviewed changes
Copilot reviewed 40 out of 41 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Aspire.Cli.Tests/TestServices/TestInteractionService.cs | Updates test interaction service to match new multi-select prompt signature. |
| tests/Aspire.Cli.Tests/TestServices/TestExtensionInteractionService.cs | Updates extension test interaction service to match new multi-select prompt signature. |
| tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs | Expands fake Aspire skills bundle fixture to include additional bundle-only skills and updated manifest shape. |
| tests/Aspire.Cli.Tests/Templating/DotNetTemplateFactoryTests.cs | Updates local test interaction service signature for multi-select prompts. |
| tests/Aspire.Cli.Tests/Projects/ExtensionGuestLauncherTests.cs | Updates local test interaction service signature for multi-select prompts. |
| tests/Aspire.Cli.Tests/Interaction/ConsoleInteractionServiceTests.cs | Adds tests for bindingChoices filtering and Spectre markup stripping in non-interactive validation output. |
| tests/Aspire.Cli.Tests/Commands/UpdateCommandTests.cs | Updates wrapper interaction service to forward the new multi-select prompt parameter. |
| tests/Aspire.Cli.Tests/Commands/PublishCommandPromptingIntegrationTests.cs | Updates test interaction service signature for multi-select prompts. |
| tests/Aspire.Cli.Tests/Commands/NewCommandTests.cs | Aligns skill-path assertions with centralized skill-name constants and updated default selection behavior. |
| tests/Aspire.Cli.Tests/Commands/InitCommandTests.cs | Updates skill selection test logic to work with bundle-derived skill definitions. |
| tests/Aspire.Cli.Tests/Commands/AgentInitCommandTests.cs | Adds/updates coverage for bundle-derived skill catalog, selection defaults, escaping/sorting, and bundle-failure fallbacks. |
| tests/Aspire.Cli.Tests/Agents/CommonAgentApplicatorsTests.cs | Updates tests to reflect that only non-bundle skills remain CLI-defined statics. |
| tests/Aspire.Cli.Tests/Agents/AspireSkillsInstallerTests.cs | Adds tests for remote-fetch feature flag default-off behavior and cache/embedded fallback semantics. |
| tests/Aspire.Cli.Tests/Agents/AspireSkillsBundleTests.cs | Adds tests for manifest-derived definitions and case-insensitive duplicate-skill detection; expands compatibility-skip coverage. |
| tests/Aspire.Cli.EndToEnd.Tests/AgentCommandTests.cs | Adds E2E regression test ensuring bundle-only skills can be installed by name via --skills. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf | Updates localized resource entry for revised --skills help text. |
| src/Aspire.Cli/Resources/AgentCommandStrings.resx | Updates --skills option description to reflect dynamic bundle catalog + CLI-defined skills. |
| src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs | Updates generated designer comment to match new --skills option description string. |
| src/Aspire.Cli/KnownFeatures.cs | Introduces aspireSkillsRemoteFetchEnabled feature flag (default off). |
| src/Aspire.Cli/Interaction/IInteractionService.cs | Extends multi-select prompt API with bindingChoices for non-interactive validation narrowing. |
| src/Aspire.Cli/Interaction/ExtensionInteractionService.cs | Applies bindingChoices for non-interactive validation and forwards parameter to console prompt fallback. |
| src/Aspire.Cli/Interaction/ConsoleInteractionService.cs | Implements bindingChoices and strips Spectre markup in non-interactive invalid-value diagnostics. |
| src/Aspire.Cli/Commands/NewCommand.cs | Calls agent-init chaining with a predicate to avoid preselecting one-time setup skills post-template. |
| src/Aspire.Cli/Commands/InitCommand.cs | Keeps aspire init behavior of preselecting all bundle skills (including the one-time setup skill). |
| src/Aspire.Cli/Commands/AgentInitCommand.cs | Resolves bundle catalog before prompting; merges bundle-derived and CLI-defined skills; improves prompt formatting, determinism, and failure messaging. |
| src/Aspire.Cli/Agents/SkillDefinition.cs | Removes hardcoded bundle skill definitions; retains only CLI-defined static skills and adds a bundle-skill factory + name helper. |
| src/Aspire.Cli/Agents/AspireSkills/SkillBundleManifest.cs | Removes obsolete IsDefault field from the manifest model. |
| src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstaller.cs | Gates GitHub remote acquisition behind feature flag; adjusts cache/embedded loading to skip supports-range checks where appropriate. |
| src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundle.cs | Adds manifest→SkillDefinition projection, optional supports-range compatibility skipping, and case-insensitive duplicate-skill validation. |
Files not reviewed (1)
- src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs: Language not supported
|
❓ CLI E2E Tests unknown — 109 passed, 0 failed, 2 unknown (commit View all recordings
📹 Recordings uploaded automatically from CI run #26654539636 |
The aspire agent init command now loads the available skill catalog from the Aspire skills bundle manifest instead of a hardcoded list. This surfaces bundle-only skills (aspire-init, aspire-monitoring, aspire-orchestration) in the interactive prompt and via --skills. Key behavior changes documented: - Available skills are loaded dynamically from the bundle manifest. - CLI-defined skills (playwright-cli, dotnet-inspect) remain as static options. - One-time setup skills (aspireify) are no longer pre-selected by default in standalone aspire agent init runs. - New aspireSkillsRemoteFetchEnabled feature flag (default: false) controls whether the CLI may download the bundle from GitHub. Documents changes from microsoft/aspire#17673. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Pull request created: #1129
|
|
📝 Documentation has been drafted in microsoft/aspire.dev#1129 targeting Updated
Note This draft PR needs human review before merging. |
Backport of #17553 to release/13.4
Customer Impact
Customers using
aspire agent initin 13.4 see an incomplete Aspire skills catalog because the CLI uses a stale hardcoded list instead of the bundled manifest. Bundle-only skills such asaspire-init,aspire-monitoring, andaspire-orchestrationare hidden from the prompt and from--skills; disconnected fallback can show only CLI-local skills.Testing
Validated this manual backport with targeted release-branch tests:
AgentInitCommandTestspassed 36/36, andAspireSkillsBundleTests+AspireSkillsInstallerTestspassed 25/25. Source PR validation also reportsAgentInitCommandTests,AspireSkillsBundleTests, andAspireSkillsInstallerTestspassing locally, plus manual PR-build verification with deleted skills cache and disconnected network.Risk
Low. The change is localized to Aspire CLI agent-init skill catalog/bundle resolution and the new remote-fetch feature flag defaults off, so normal 13.4 behavior uses cache or the embedded snapshot unless users explicitly opt in to remote fetch.
Regression?
Unknown — the source PR fixes #17551 but does not explicitly state whether this regressed from an earlier release.