Skip to content

Redesign agent init around selected assets and clients - #20251

Closed
Ella Hathaway (ellahathaway) wants to merge 4 commits into
mainfrom
ellahathaway-agent-init-redesign-5f1
Closed

Ella Hathaway (ellahathaway) wants to merge 4 commits into
mainfrom
ellahathaway-agent-init-redesign-5f1

Conversation

@ellahathaway

Copy link
Copy Markdown
Contributor

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

User-facing usage

Register native Aspire content for the shared Copilot clients without configuring MCP or installing tool skills:

aspire agent init --workspace-root C:\src\my-app `
  --clients copilot-cli,copilot-app `
  --aspire-skills y --mcp n --playwright n --dotnet-inspect n `
  --non-interactive

Opt into the MCP server separately:

aspire agent init --clients copilot-cli --mcp y --aspire-skills n --non-interactive

Actual command-help excerpt:

Usage:
  aspire agent init [options]

  --workspace-root <workspace-root>
  --mcp <false|n|true|y>
  --playwright <false|n|true|y>
  --dotnet-inspect <false|n|true|y>
  --aspire-skills <false|n|true|y>
  --clients <clients>

Supported client IDs are copilot-cli, copilot-app, vscode, claude-code, and opencode; detection supplies defaults rather than restricting explicit selection. All assets disabled or an explicit empty client selection performs no agent-configuration writes. aspire new and aspire init retain their follow-up/suppression behavior and do not offer MCP configuration.

Breaking changes

--skills and --skill-locations are 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

  • CLI and CLI test project build: zero warnings/errors.
  • Selected Windows ARM64 coverage: 863 passed, 22 platform/privilege skips, zero failures. The matching installed ARM64 .NET 10 runtime was used because the repository-acquired .NET 10 runtime had an architecture mismatch.
  • Infrastructure maintenance/routing tests: 103 passed.
  • Retained archive attestation and canonical hook-source verification: passed.
  • Isolated aspire-dev smoke checks: project/user source registration, explicit MCP, shared App/CLI targets and one hook, no-op timestamps, opt-out, invalid clients, and removed flags.
  • CLI E2E project builds successfully. Linux/Hex1b scenarios were not executed because the Docker Linux daemon was unavailable.
  • The 16 PowerShell hook-script cases passed. The 17 unchanged Bash cases were excluded from the successful Windows run after confirming local 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

This PR includes UI changes. Please add screenshots or screen recordings so reviewers can evaluate the visual changes without running locally.

  • For before/after comparisons, place them side-by-side or label them clearly.
  • For interactive changes (animations, transitions, new flows), prefer a short screen recording (GIF or video).
  • If you cannot capture visuals now, note what scenario to test and mark this section as TODO.

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

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Fixes: #20247

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>
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 20251

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 20251"

@aspire-repo-bot
aspire-repo-bot Bot requested a balanced review from Copilot September 19, 2026 00:56
@ellahathaway Ella Hathaway (ellahathaway) added area-cli breaking-change Issue or PR that represents a breaking API or functional change over a prerelease. labels Sep 19, 2026
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 Medium severity

Open (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.

Comment on lines +161 to +163
// 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"))
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

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>
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 Medium severity

Open (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>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 Medium severity

Open (1)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

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>
@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

Selects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching '.gitattributes' selects ALL


Selection computed for commit 722d3b3.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

It is a broad security-sensitive draft with an unpublished OpenCode dependency and no completed formal security review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)

@ellahathaway

Copy link
Copy Markdown
Contributor Author

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.

@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.6 milestone Sep 21, 2026
Ella Hathaway (ellahathaway) added a commit that referenced this pull request Sep 21, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-cli breaking-change Issue or PR that represents a breaking API or functional change over a prerelease.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Redesign agent init around independent assets and selected clients

2 participants