Repository navigation
Redesign agent init around selected assets and clients - #20251
Ella Hathaway (ellahathaway) wants to merge 4 commits into
Conversation
Separate discovery, native configuration, and managed skill delivery. Preserve native settings and hook provenance while retiring the Aspire skills bundle runtime, and add focused regression coverage. Co-authored-by: Copilot App <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 -- 20251Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 20251" |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Managed multi-file skill updates can leave an existing Playwright skill partially upgraded after a later file publication fails.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 1
What changed in this PR
Redesigns aspire agent init around independently selected assets and clients, replacing CLI-managed Aspire bundles with native client registration.
Changes:
- Adds client-aware configuration, discovery, safe file publication, and managed tool-skill installation.
- Updates prompts, localization, chained init flows, hooks, documentation, and CI routing.
- Adds extensive unit, snapshot, and CLI E2E coverage.
| File | Description |
|---|---|
.github/workflows/update-aspire-skills-bundle.yml |
Updates maintenance validation. |
docs/specs/safe-npm-tool-install.md |
Documents skill publication. |
eng/github-ci/test-trigger-map.yml |
Routes maintenance tests. |
eng/scripts/update-aspire-skills-bundle.ps1 |
Removes installer version updates. |
src/Aspire.Cli/Agents/AgentClientCatalog.cs |
Defines supported clients. |
src/Aspire.Cli/Agents/AgentConfigurationServiceCollectionExtensions.cs |
Registers configuration services. |
src/Aspire.Cli/Agents/AgentEnvironmentApplicator.cs |
Removes old applicator model. |
src/Aspire.Cli/Agents/AgentEnvironmentDetector.cs |
Returns client detections. |
src/Aspire.Cli/Agents/AgentEnvironmentScanContext.cs |
Simplifies discovery context. |
src/Aspire.Cli/Agents/AgentFileCommitter.cs |
Adds atomic file publication. |
src/Aspire.Cli/Agents/AgentInitModels.cs |
Adds setup models. |
src/Aspire.Cli/Agents/AgentInitService.cs |
Orchestrates agent setup. |
src/Aspire.Cli/Agents/AgentSkillInstaller.cs |
Publishes managed skills. |
src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundle.cs |
Removes bundle model. |
src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs |
Removes bundle provider. |
src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstallResult.cs |
Removes bundle result. |
src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstaller.cs |
Removes runtime acquisition. |
src/Aspire.Cli/Agents/AspireSkills/EmbeddedAspireSkillsBundleProvider.cs |
Removes embedded provider. |
src/Aspire.Cli/Agents/AspireSkills/GitHubArtifactAttestationVerifier.cs |
Removes runtime verifier. |
src/Aspire.Cli/Agents/AspireSkills/IAspireSkillsInstaller.cs |
Removes installer contract. |
src/Aspire.Cli/Agents/AspireSkills/SkillBundleManifest.cs |
Removes bundle manifest. |
src/Aspire.Cli/Agents/AspireSkills/TemporaryCacheDirectory.cs |
Removes bundle cache helper. |
src/Aspire.Cli/Agents/ClaudeCode/ClaudeCodeAgentEnvironmentScanner.cs |
Detects Claude Code. |
src/Aspire.Cli/Agents/CommonAgentApplicators.cs |
Retains tool bootstrap content. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationJson.cs |
Adds JSON validation helpers. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationPath.cs |
Resolves physical paths safely. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationPaths.cs |
Resolves native client locations. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationPlanner.cs |
Deduplicates configuration targets. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationReadContext.cs |
Tracks configuration reads. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationTarget.cs |
Defines mutations and targets. |
src/Aspire.Cli/Agents/Configuration/AgentConfigurationWriter.cs |
Applies guarded JSON edits. |
src/Aspire.Cli/Agents/Configuration/ClaudeCodeConfigurationHandler.cs |
Configures Claude Code. |
src/Aspire.Cli/Agents/Configuration/CopilotConfigurationHandler.cs |
Configures Copilot clients. |
src/Aspire.Cli/Agents/Configuration/McpConfiguration.cs |
Merges MCP entries. |
src/Aspire.Cli/Agents/Configuration/OpenCodeConfigurationHandler.cs |
Configures OpenCode schemas. |
src/Aspire.Cli/Agents/Configuration/PluginConfiguration.cs |
Registers Aspire sources. |
src/Aspire.Cli/Agents/Configuration/VsCodeConfigurationHandler.cs |
Configures VS Code MCP. |
src/Aspire.Cli/Agents/Copilot/CopilotAgentEnvironmentScanner.cs |
Detects Copilot clients. |
src/Aspire.Cli/Agents/DeprecatedMcpCommandScanner.cs |
Removes legacy scanner. |
src/Aspire.Cli/Agents/Hooks/ITelemetryHookConfigurator.cs |
Updates hook contract. |
src/Aspire.Cli/Agents/Hooks/TelemetryHookConfigurator.cs |
Plans client hooks. |
src/Aspire.Cli/Agents/Hooks/TelemetryHookInstaller.cs |
Safely publishes hook scripts. |
src/Aspire.Cli/Agents/IAgentEnvironmentDetector.cs |
Updates detection contract. |
src/Aspire.Cli/Agents/IAgentEnvironmentScanner.cs |
Updates scanner contract. |
src/Aspire.Cli/Agents/McpConfigFileHelper.cs |
Removes legacy configuration helper. |
src/Aspire.Cli/Agents/McpInitPromptGroup.cs |
Removes old prompt grouping. |
src/Aspire.Cli/Agents/OpenCode/OpenCodeAgentEnvironmentScanner.cs |
Detects OpenCode versions. |
src/Aspire.Cli/Agents/Playwright/PlaywrightCliInstaller.cs |
Captures generated skill payload. |
src/Aspire.Cli/Agents/README.md |
Documents native setup architecture. |
src/Aspire.Cli/Agents/SkillAssetFile.cs |
Removes old asset model. |
src/Aspire.Cli/Agents/SkillDefinition.cs |
Removes bundle skill catalog. |
src/Aspire.Cli/Agents/SkillLocation.cs |
Removes location selection. |
src/Aspire.Cli/Agents/VsCode/VsCodeAgentEnvironmentScanner.cs |
Detects VS Code editions. |
src/Aspire.Cli/Aspire.Cli.csproj |
Registers resources and retained archive. |
src/Aspire.Cli/Commands/AgentInitCommand.cs |
Implements asset/client selection. |
src/Aspire.Cli/Commands/InitCommand.cs |
Updates chained setup. |
src/Aspire.Cli/Commands/McpInitCommand.cs |
Delegates legacy command. |
src/Aspire.Cli/Commands/NewCommand.cs |
Updates post-create setup. |
src/Aspire.Cli/Configuration/KnownFeatures.cs |
Removes bundle feature flags. |
src/Aspire.Cli/Interaction/PromptBinding.cs |
Supports prompt defaults. |
src/Aspire.Cli/Program.cs |
Registers new services. |
src/Aspire.Cli/README.md |
Documents user-facing behavior. |
src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs |
Updates generated resources. |
src/Aspire.Cli/Resources/AgentCommandStrings.resx |
Updates command text. |
src/Aspire.Cli/Resources/AgentConfigurationStrings.Designer.cs |
Adds generated configuration resources. |
src/Aspire.Cli/Resources/AgentConfigurationStrings.resx |
Adds configuration messages. |
src/Aspire.Cli/Resources/AgentInitStrings.Designer.cs |
Adds generated setup resources. |
src/Aspire.Cli/Resources/AgentInitStrings.resx |
Adds setup messages. |
src/Aspire.Cli/Resources/AgentSkillInstallerStrings.Designer.cs |
Adds generated installer resources. |
src/Aspire.Cli/Resources/AgentSkillInstallerStrings.resx |
Adds installer messages. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf |
Updates Czech localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf |
Updates German localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf |
Updates Spanish localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf |
Updates French localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf |
Updates Italian localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf |
Updates Japanese localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf |
Updates Korean localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf |
Updates Polish localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf |
Updates Portuguese localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf |
Updates Russian localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf |
Updates Turkish localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf |
Updates simplified Chinese localization. |
src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf |
Updates traditional Chinese localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.cs.xlf |
Adds Czech localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.de.xlf |
Adds German localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.es.xlf |
Adds Spanish localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.fr.xlf |
Adds French localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.it.xlf |
Adds Italian localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.ja.xlf |
Adds Japanese localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.ko.xlf |
Adds Korean localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.pl.xlf |
Adds Polish localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.pt-BR.xlf |
Adds Portuguese localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.ru.xlf |
Adds Russian localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.tr.xlf |
Adds Turkish localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.zh-Hans.xlf |
Adds simplified Chinese localization. |
src/Aspire.Cli/Resources/xlf/AgentConfigurationStrings.zh-Hant.xlf |
Adds traditional Chinese localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.cs.xlf |
Adds Czech setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.de.xlf |
Adds German setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.es.xlf |
Adds Spanish setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.fr.xlf |
Adds French setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.it.xlf |
Adds Italian setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.ja.xlf |
Adds Japanese setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.ko.xlf |
Adds Korean setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.pl.xlf |
Adds Polish setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.pt-BR.xlf |
Adds Portuguese setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.ru.xlf |
Adds Russian setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.tr.xlf |
Adds Turkish setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.zh-Hans.xlf |
Adds simplified Chinese setup localization. |
src/Aspire.Cli/Resources/xlf/AgentInitStrings.zh-Hant.xlf |
Adds traditional Chinese setup localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.cs.xlf |
Adds Czech installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.de.xlf |
Adds German installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.es.xlf |
Adds Spanish installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.fr.xlf |
Adds French installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.it.xlf |
Adds Italian installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.ja.xlf |
Adds Japanese installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.ko.xlf |
Adds Korean installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.pl.xlf |
Adds Polish installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.pt-BR.xlf |
Adds Portuguese installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.ru.xlf |
Adds Russian installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.tr.xlf |
Adds Turkish installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.zh-Hans.xlf |
Adds simplified Chinese installer localization. |
src/Aspire.Cli/Resources/xlf/AgentSkillInstallerStrings.zh-Hant.xlf |
Adds traditional Chinese installer localization. |
tests/Aspire.Cli.EndToEnd.Tests/AgentCommandTests.cs |
Adds agent-init E2E scenarios. |
tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj |
Includes new snapshots. |
tests/Aspire.Cli.EndToEnd.Tests/NewWithAgentInitTests.cs |
Updates chained-flow coverage. |
tests/Aspire.Cli.EndToEnd.Tests/PlaywrightCliInstallTests.cs |
Updates Playwright coverage. |
tests/Aspire.Cli.EndToEnd.Tests/README.md |
Documents E2E scenarios. |
tests/Aspire.Cli.EndToEnd.Tests/Snapshots/AgentCommandTests.AgentInitCommand_DefaultSelection_RegistersNativeSourceWithoutInstallingSkills.verified.json |
Verifies default registration. |
tests/Aspire.Cli.EndToEnd.Tests/Snapshots/AgentCommandTests.AgentInitCommand_MigratesOnlySelectedMcpConfiguration.verified.json |
Verifies MCP migration. |
tests/Aspire.Cli.EndToEnd.Tests/Snapshots/AgentCommandTests.AgentInit_NonInteractive_RegistersSharedCopilotTargetsIdempotently.verified.json |
Verifies shared targets. |
tests/Aspire.Cli.EndToEnd.Tests/Snapshots/AgentCommandTests.AspireInit_ChainedAgentInit_RegistersSourceWithoutOfferingMcp.verified.json |
Verifies init chaining. |
tests/Aspire.Cli.EndToEnd.Tests/Snapshots/AgentCommandTests.AspireNew_ChainedAgentInit_RegistersAtOutputRootWithoutOfferingMcp.verified.json |
Verifies new chaining. |
tests/Aspire.Cli.Tests/Agents/AgentConfigurationJsonTests.cs |
Tests JSON handling. |
tests/Aspire.Cli.Tests/Agents/AgentConfigurationPathsTests.cs |
Tests native paths. |
tests/Aspire.Cli.Tests/Agents/AgentConfigurationTestContext.cs |
Adds test harness. |
tests/Aspire.Cli.Tests/Agents/AgentConfigurationWriterTests.cs |
Tests guarded writes. |
tests/Aspire.Cli.Tests/Agents/AgentEnvironmentApplicatorTests.cs |
Removes obsolete tests. |
tests/Aspire.Cli.Tests/Agents/AgentEnvironmentDetectorTests.cs |
Tests detection aggregation. |
tests/Aspire.Cli.Tests/Agents/AgentEnvironmentScanContextTests.cs |
Removes obsolete tests. |
tests/Aspire.Cli.Tests/Agents/AgentFileCommitterTests.cs |
Tests atomic publication. |
tests/Aspire.Cli.Tests/Agents/AgentInitServiceTests.cs |
Tests orchestration. |
tests/Aspire.Cli.Tests/Agents/AgentSkillInstallerTests.cs |
Tests managed skills. |
tests/Aspire.Cli.Tests/Agents/AspireSkillsBundleTests.cs |
Removes bundle tests. |
tests/Aspire.Cli.Tests/Agents/AspireSkillsInstallerTests.cs |
Removes acquisition tests. |
tests/Aspire.Cli.Tests/Agents/ClaudeCodeAgentEnvironmentScannerTests.cs |
Tests Claude detection. |
tests/Aspire.Cli.Tests/Agents/CommonAgentApplicatorsTests.cs |
Tests bootstrap content. |
tests/Aspire.Cli.Tests/Agents/CopilotAgentEnvironmentScannerTests.cs |
Tests Copilot detection. |
tests/Aspire.Cli.Tests/Agents/NativeAgentConfigurationTests.cs |
Tests native clients. |
tests/Aspire.Cli.Tests/Agents/OpenCodeAgentEnvironmentScannerTests.cs |
Tests OpenCode detection. |
tests/Aspire.Cli.Tests/Agents/OpenCodeConfigurationTests.cs |
Tests OpenCode schemas. |
tests/Aspire.Cli.Tests/Agents/PlaywrightCliInstallerTests.cs |
Tests isolated generation. |
tests/Aspire.Cli.Tests/Agents/TelemetryHookArchiveIntegrityTests.cs |
Retains archive verification. |
tests/Aspire.Cli.Tests/Agents/TelemetryHookConfiguratorTests.cs |
Tests hook planning. |
tests/Aspire.Cli.Tests/Agents/TelemetryHookInstallerTests.cs |
Tests hook publication. |
tests/Aspire.Cli.Tests/Agents/VsCodeAgentEnvironmentScannerTests.cs |
Tests VS Code detection. |
tests/Aspire.Cli.Tests/Commands/AgentInitCommandTests.cs |
Tests command behavior. |
tests/Aspire.Cli.Tests/Commands/ConfigCommandTests.cs |
Updates feature expectations. |
tests/Aspire.Cli.Tests/Commands/InitCommandTests.cs |
Tests chained init. |
tests/Aspire.Cli.Tests/Commands/McpInitCommandTests.cs |
Tests legacy delegation. |
tests/Aspire.Cli.Tests/Commands/NewCommandTests.cs |
Tests chained new flow. |
tests/Aspire.Cli.Tests/Snapshots/AgentConfigurationWriterTests.GroupedEdits_AreNotWrittenUntilEveryContributionHasRun.verified.json |
Verifies grouped edits. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_Help_DescribesIndependentAssetsAndClients.verified.txt |
Verifies help output. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_HookFailure_IsAdvisoryWithQualifiedCompletion_status=Blocked.verified.txt |
Verifies blocked hook output. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_HookFailure_IsAdvisoryWithQualifiedCompletion_status=Failed.verified.txt |
Verifies failed hook output. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_NonInteractive_NoDetectedClients_RequiresExplicitClients.verified.txt |
Verifies unattended validation. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsManagedPayloadsAsInstalled.verified.txt |
Verifies installation reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsNativeRegistrationStatusWithoutClaimingAcquisition_status=Blocked_expectedExitCode=1.verified.txt |
Verifies blocked reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsNativeRegistrationStatusWithoutClaimingAcquisition_status=Configured_expectedExitCode=0.verified.txt |
Verifies configured reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsNativeRegistrationStatusWithoutClaimingAcquisition_status=Failed_expectedExitCode=1.verified.txt |
Verifies failed reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsNativeRegistrationStatusWithoutClaimingAcquisition_status=Skipped_expectedExitCode=0.verified.txt |
Verifies skipped reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_ReportsNativeRegistrationStatusWithoutClaimingAcquisition_status=Unchanged_expectedExitCode=0.verified.txt |
Verifies unchanged reporting. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_UnknownClient_FailsBeforeDiscoveryOrConfiguration_clients=copilot-cli,unknown.verified.txt |
Verifies mixed invalid clients. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitCommandTests.AgentInitCommand_UnknownClient_FailsBeforeDiscoveryOrConfiguration_clients=unknown.verified.txt |
Verifies invalid clients. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitServiceTests.ClaudeSettingsAndHook.Unix.verified.json |
Verifies Unix Claude settings. |
tests/Aspire.Cli.Tests/Snapshots/AgentInitServiceTests.ClaudeSettingsAndHook.Windows.verified.json |
Verifies Windows Claude settings. |
tests/Aspire.Cli.Tests/Snapshots/AgentSkillInstallerTests.InstallAsync_AllClients_InstallsAndGeneratesPlaywrightOnceForBothScopes.verified.txt |
Verifies deduplicated installation. |
tests/Aspire.Cli.Tests/Snapshots/CommonAgentApplicatorsTests.DotnetInspectBootstrapMatchesSnapshot.verified.md |
Verifies dotnet-inspect bootstrap. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_Help_ShowsFileBasedOption.verified.txt |
Updates init help snapshot. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_PartialRegistrationFailure_DoesNotPrintSuccessfulHandoff.verified.txt |
Verifies partial failure. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WhenNativeSourceIsRegistered_PrintsAspireifyHandoff_status=Configured.verified.txt |
Verifies configured handoff. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WhenNativeSourceIsRegistered_PrintsAspireifyHandoff_status=Unchanged.verified.txt |
Verifies unchanged handoff. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WithoutSuccessfulNativeRegistration_DoesNotPrintAspireifyHandoff_asset=AspireSkills_status=Blocked_expectedExitCode=1.verified.txt |
Verifies blocked handoff. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WithoutSuccessfulNativeRegistration_DoesNotPrintAspireifyHandoff_asset=AspireSkills_status=Failed_expectedExitCode=1.verified.txt |
Verifies failed handoff. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WithoutSuccessfulNativeRegistration_DoesNotPrintAspireifyHandoff_asset=AspireSkills_status=Skipped_expectedExitCode=0.verified.txt |
Verifies skipped handoff. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WithoutSuccessfulNativeRegistration_DoesNotPrintAspireifyHandoff_asset=DotnetInspect_status=Configured_expectedExitCode=0.verified.txt |
Verifies tool-only behavior. |
tests/Aspire.Cli.Tests/Snapshots/InitCommandTests.InitCommand_WithoutSuccessfulNativeRegistration_DoesNotPrintAspireifyHandoff_asset=Playwright_status=Configured_expectedExitCode=0.verified.txt |
Verifies Playwright-only behavior. |
tests/Aspire.Cli.Tests/Snapshots/McpInitCommandTests.McpInitCommand_ShowsDeprecationAndPropagatesConfigurationFailure.verified.txt |
Verifies legacy command output. |
tests/Aspire.Cli.Tests/Snapshots/NativeAgentConfigurationTests.Claude_PreservesPinsPreferencesAndExistingBytes.verified.json |
Verifies Claude preservation. |
tests/Aspire.Cli.Tests/Snapshots/NativeAgentConfigurationTests.Copilot_RegistersOneSharedSourcePerScope.verified.json |
Verifies Copilot registration. |
tests/Aspire.Cli.Tests/Snapshots/NativeAgentConfigurationTests.Mcp_RepairsOnlyTheDeprecatedPrefix.verified.json |
Verifies conservative migration. |
tests/Aspire.Cli.Tests/Snapshots/NativeAgentConfigurationTests.Mcp_UsesSharedCopilotClaudeProjectAndSeparateNativeUserFiles.verified.json |
Verifies shared MCP targets. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.DetectedV2_UsesArrayCatalogAndNestedMcpServers.verified.json |
Verifies OpenCode V2. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.ExistingV2Jsonc_EstablishesTheSchemaWithoutVersionDetection.verified.json |
Verifies JSONC schema evidence. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.FreshUndetectedClient_UsesStableV1CatalogAndMcp.verified.json |
Verifies OpenCode V1 fallback. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.McpMigration_PreservesOpenCodeCommandSuffixAndEnvironment.verified.json |
Verifies OpenCode migration. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.OlderV1_CanConfigureAndRepairMcpWithoutAddingCatalog.verified.json |
Verifies older OpenCode MCP. |
tests/Aspire.Cli.Tests/Snapshots/OpenCodeConfigurationTests.Registration_PreservesPinnedCatalogsInsteadOfAddingMain.verified.json |
Verifies catalog pins. |
tests/Aspire.Cli.Tests/Snapshots/PlaywrightCliInstallerTests.InstallAsync_CapturesCompleteSkillFromIsolatedWorkspace.verified.txt |
Verifies captured payload. |
tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs |
Updates Playwright fakes. |
tests/Aspire.Cli.Tests/TestServices/TelemetryHookArchiveReader.cs |
Reads retained archive hooks. |
tests/Aspire.Cli.Tests/TestServices/TelemetryHookArchiveTestData.cs |
Generates archive fixtures. |
tests/Aspire.Cli.Tests/TestServices/TestAgentCliRunner.cs |
Adds client runner fake. |
tests/Aspire.Cli.Tests/TestServices/TestAgentEnvironmentDetector.cs |
Updates detector fake. |
tests/Aspire.Cli.Tests/TestServices/TestAgentEnvironmentScanner.cs |
Adds scanner fake. |
tests/Aspire.Cli.Tests/TestServices/TestAgentInitService.cs |
Adds setup-service fake. |
tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs |
Registers test services. |
tests/Infrastructure.Tests/TestTriggerMap/TestTriggerMapTests.cs |
Updates routing expectations. |
tests/Infrastructure.Tests/WorkflowScripts/AspireSkillsBundleMaintenanceTests.cs |
Updates maintenance validation. |
tests/Shared/Hex1bAutomatorTestHelpers.cs |
Updates chained-flow documentation. |
| // Supporting files precede SKILL.md so a failed reference copy does not publish | ||
| // a new entry point. Do not prune files: extras can belong to the user. | ||
| foreach (var file in files.OrderBy(static file => file.RelativePath == "SKILL.md")) |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Managed skill publication can still leave mixed payload versions after a partial failure, and the draft retains unresolved external and security-review dependencies.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 1
Replace repetitive status and flow baselines with focused assertions, retain distinct generated-format coverage, and remove E2E snapshot infrastructure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The draft makes broad security-sensitive configuration and acquisition changes, depends on unreleased OpenCode endpoints, and has not received a formal security review.
Review effort: Balanced
Findings: 1
This comment has been minimized.
This comment has been minimized.
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
Pin canonical hook source and hashes independently, reject stale updates, remove archive maintenance and verification inputs, and keep release policy version-agnostic. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Tests selectorSelects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching '.gitattributes' selects ALL Selection computed for commit |
|
Superseded by the verified two-layer native stack: #20283 (version-agnostic hook-only maintenance) followed by #20287 (native plugin/agent-init setup), targeting main through the lower branch. Both replacement PRs are drafts. The upper layer remains gated on microsoft/aspire-skills#72 and the actual 0.0.3 release/source synchronization. |
Extract the native agent setup layer from #20251 above the standalone hook maintenance layer. Keep asset selection independent, register selected clients at native project/user targets, retire legacy bundle acquisition, and retain the real 0.0.3 release/catalog synchronization merge gate. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Description
Make agent setup asset-first and client-aware instead of selecting directories and copying an Aspire skills bundle.
Users choose MCP, Playwright, dotnet-inspect, and native Aspire content independently, then select clients. Only Aspire content is enabled by default. Setup automatically configures applicable project and user targets, shares Copilot CLI/App configuration, preserves pins and disabled choices, and reports registration separately from client-owned acquisition.
The implementation separates read-only discovery, a small client catalog, setup orchestration, native handlers, and managed tool skills. Architectural follow-up consolidated native path resolution and JSON validation, added shared failure-safe file publication, and removed obsolete configuration and acquisition APIs.
Contributes to #20247 and #20245. This is a draft, not a claim that the full delivery transition is ready to ship.
Remaining dependencies
main. Their schema and paths are implemented, but the endpoints were still unavailable during validation.User-facing usage
Register native Aspire content for the shared Copilot clients without configuring MCP or installing tool skills:
Opt into the MCP server separately:
Actual command-help excerpt:
Supported client IDs are
copilot-cli,copilot-app,vscode,claude-code, andopencode; detection supplies defaults rather than restricting explicit selection. All assets disabled or an explicit empty client selection performs no agent-configuration writes.aspire newandaspire initretain their follow-up/suppression behavior and do not offer MCP configuration.Breaking changes
--skillsand--skill-locationsare replaced by the independent asset options and--clients. Aspire no longer installs individual Aspire skill payloads; native clients acquire skills and supported canvases. There is no scope/location selector. Existing user files, pins, and caches are not silently removed.JSONC settings are merged with
JsonNode; comments/formatting can be normalized on changed files. Semantic no-ops preserve existing bytes and timestamps.Validation
aspire-devsmoke checks: project/user source registration, explicit MCP, shared App/CLI targets and one hook, no-op timestamps, opt-out, invalid clients, and removed flags.Process.Start("bash")resolves WSL and cannot open the Windows script paths. Linux CI is still needed for those cases and Unix/symlink coverage.Screenshots / Recordings
TODO: record the asset confirmations, client multi-select, and per-scope result summary. Actual non-interactive help and behavior were checked; no interactive recording is attached.
Security considerations
Setup writes selected clients' project/user configuration and usage hooks. It preserves known policy, pins, disabled choices, unrelated settings, and telemetry opt-out, and uses guarded atomic replacement. Native clients now own Aspire content acquisition and trust; registration does not assert equivalent bundle-attestation guarantees or grant client trust. Playwright's existing npm/Sigstore verification remains intact. The architectural review is not a formal security review.
Checklist
<remarks />and<code />elements on your triple slash comments?Fixes: #20247