Skip to content

Add --list-steps flag to aspire do command#16085

Merged
mitchdenny merged 8 commits into
mainfrom
feature/list-steps
Apr 14, 2026
Merged

Add --list-steps flag to aspire do command#16085
mitchdenny merged 8 commits into
mainfrom
feature/list-steps

Conversation

@mitchdenny
Copy link
Copy Markdown
Member

Description

Adds support for aspire do --list-steps flag that prints the pipeline steps that would be executed, in topological (execution) order, along with their dependencies and tags — without actually running them.

Problem

Users need a simple way to inspect what pipeline steps will run for a given target. The existing aspire do diagnostics output is too verbose and technical for typical users (see issue discussion).

Approach

The implementation spans the AppHost (Aspire.Hosting) and CLI (Aspire.Cli), connected via the backchannel RPC:

AppHost side:

  • New PipelineStepInfo DTO in BackchannelDataTypes.cs (source-shared between CLI and AppHost)
  • New ResolveStepsAsync() on DistributedApplicationPipeline that resolves all steps (collects from annotations, normalizes RequiredBy→DependsOn, validates) without executing them
  • New GetPipelineStepsAsync() RPC method on AppHostRpcTarget with pipeline-steps.v1 capability

CLI side:

  • --list-steps option added to PipelineCommandBase (available on do, publish, deploy)
  • After backchannel connects, calls GetPipelineStepsAsync instead of streaming publishing activities
  • Formats output as a numbered tree, then calls RequestStopAsync to shut down the AppHost immediately

Example output:

1. parameter-prompt
   └─ No dependencies

2. provision-redis-infra
   ├─ Depends on: parameter-prompt
   └─ Tags: provision-infra

3. build-webapi
   ├─ Depends on: parameter-prompt
   └─ Tags: build-compute

4. deploy-webapi
   ├─ Depends on: provision-redis-infra, build-webapi
   └─ Tags: deploy-compute

Validation

  • All 2009 existing CLI tests pass (0 failures)
  • 5 new DoCommand integration tests (exit code, RPC calls, no pipeline execution)
  • 9 new PrintPipelineSteps formatting tests (dependencies, tags, connectors, numbering, empty steps, full pipeline)
  • 6 new pipeline resolution tests (ResolveStepsAsync, GetTopologicalOrder)
  • 1 new E2E CLI test using Hex1b terminal automation

Fixes #12376

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
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
    • No
  • Does the change require an update in our Aspire docs?

@mitchdenny mitchdenny requested a review from JamesNK as a code owner April 12, 2026 07:18
Copilot AI review requested due to automatic review settings April 12, 2026 07:18
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 12, 2026

🚀 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 -- 16085

Or

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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new --list-steps mode for Aspire pipeline commands that queries the AppHost for resolved pipeline steps and prints them (dependencies + tags) in execution/topological order, without running the pipeline.

Changes:

  • Introduces a backchannel DTO (PipelineStepInfo) and RPC (GetPipelineStepsAsync) to retrieve resolved pipeline steps from the AppHost.
  • Refactors DistributedApplicationPipeline to separate “resolve steps” from execution, and exposes topological sorting for reuse.
  • Adds CLI support (--list-steps) with formatting/output tests plus an end-to-end validation.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/Aspire.Hosting.Tests/Pipelines/DistributedApplicationPipelineTests.cs Adds tests for step resolution behavior and topological ordering.
tests/Aspire.Cli.Tests/TestServices/TestAppHostCliBackchannel.cs Extends the test backchannel stub with GetPipelineStepsAsync.
tests/Aspire.Cli.Tests/Commands/PublishCommandPromptingIntegrationTests.cs Updates mock backchannel implementation to satisfy the new interface method.
tests/Aspire.Cli.Tests/Commands/PipelineCommandListStepsTests.cs Adds unit tests for CLI formatting/output of --list-steps.
tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs Adds integration tests verifying --list-steps RPC usage and non-execution behavior.
tests/Aspire.Cli.EndToEnd.Tests/ListStepsTests.cs Adds E2E test exercising aspire do deploy --list-steps in Docker terminal automation.
src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs Adds ResolveStepsAsync and exposes GetTopologicalOrder; execution now builds from resolved steps.
src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Adds PipelineStepInfo DTO shared between AppHost and CLI.
src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs Advertises new capability and implements GetPipelineStepsAsync RPC.
src/Aspire.Cli/Commands/PipelineCommandBase.cs Adds --list-steps option and prints steps instead of streaming publish activities.
src/Aspire.Cli/Commands/DoCommand.cs Makes step optional to support --list-steps, adds runtime enforcement when not listing.
src/Aspire.Cli/Backchannel/BackchannelJsonSerializerContext.cs Registers PipelineStepInfo for source-generated JSON serialization.
src/Aspire.Cli/Backchannel/AppHostCliBackchannel.cs Adds RPC client method GetPipelineStepsAsync.

Comment on lines 375 to 404
@@ -368,7 +388,7 @@ public async Task ExecuteAsync(PipelineContext context)

if (allSteps.Count == 0)
{
return;
return allSteps;
}

ValidateSteps(allSteps);
@@ -380,10 +400,7 @@ public async Task ExecuteAsync(PipelineContext context)
// Capture resolved pipeline data for diagnostics (before filtering)
_lastResolvedSteps = allSteps;

var (stepsToExecute, stepsByName) = FilterStepsForExecution(allSteps, context);

// Build dependency graph and execute with readiness-based scheduler
await ExecuteStepsAsTaskDag(stepsToExecute, stepsByName, context).ConfigureAwait(false);
return allSteps;
}
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

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

ResolveStepsAsync XML docs say it "returns the steps in topological order" and "validates", but the method currently returns allSteps in original insertion order and does not validate the dependency graph for cycles (cycle validation only happens during execution). This can make --list-steps output incorrect/incomplete compared to actual execution failures. Consider calling the existing dependency-graph validation and returning a topologically sorted list here (or update the docs to match the actual behavior).

Copilot uses AI. Check for mistakes.
Comment thread src/Aspire.Cli/Commands/DoCommand.cs Outdated
Comment on lines +58 to +61
// Step is required when not using --list-steps
if (string.IsNullOrEmpty(step) && !parseResult.GetValue(s_listStepsOption))
{
throw new InvalidOperationException("The 'step' argument is required when not using --list-steps.");
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

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

Throwing InvalidOperationException when step is missing (and --list-steps is not set) will be surfaced via the generic exception handler in PipelineCommandBase as an "unexpected error" rather than a normal command-line validation error. Prefer System.CommandLine validation (e.g., AddValidator on the command/argument) so users get a standard parse error + help/usage and the correct exit code, without an exception-based control flow.

Suggested change
// Step is required when not using --list-steps
if (string.IsNullOrEmpty(step) && !parseResult.GetValue(s_listStepsOption))
{
throw new InvalidOperationException("The 'step' argument is required when not using --list-steps.");
// Step is required when not using --list-steps.
if (string.IsNullOrEmpty(step) && !parseResult.GetValue(s_listStepsOption))
{
var stepResult = parseResult.GetResult(_stepArgument);
if (stepResult is not null)
{
stepResult.AddError("The 'step' argument is required when not using --list-steps.");
}
else
{
parseResult.CommandResult.AddError("The 'step' argument is required when not using --list-steps.");
}
return [];

Copilot uses AI. Check for mistakes.
Comment on lines +259 to +270
// If --list-steps was specified, get pipeline steps and print them instead of executing
var listSteps = parseResult.GetValue(s_listStepsOption);
if (listSteps)
{
StopTerminalProgressBar();

var steps = await backchannel.GetPipelineStepsAsync(cancellationToken);
PrintPipelineSteps(steps);

await backchannel.RequestStopAsync(cancellationToken).ConfigureAwait(false);
await pendingRun;
return ExitCodeConstants.Success;
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

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

The --list-steps path calls GetPipelineStepsAsync unconditionally. If the user runs a newer CLI against an older AppHost that doesn't advertise/support pipeline-steps.v1, this will likely fail with RemoteMethodNotFoundException and be reported as an "unexpected error". Consider checking backchannel.GetCapabilitiesAsync(...) for pipeline-steps.v1 (or catching RemoteMethodNotFoundException here) and converting it into an AppHostIncompatibleException with a clear message.

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +5
#pragma warning disable ASPIREPIPELINES001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.

Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

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

#pragma warning disable ASPIREPIPELINES001 is added at the top of the file but never restored/scoped. This suppresses the diagnostic for the entire RPC target, potentially masking unrelated occurrences. Consider scoping the suppression just around the code that requires it, or add a corresponding #pragma warning restore ASPIREPIPELINES001.

Copilot uses AI. Check for mistakes.
@davidfowl
Copy link
Copy Markdown
Contributor

I want to make sure that we have 2 things:

@mitchdenny
Copy link
Copy Markdown
Member Author

I want to make sure that we have 2 things:

image

@davidfowl
Copy link
Copy Markdown
Contributor

Dogfood Testing Report

CLI Version: 13.3.0-pr.16085.gcbe15d70 (commit cbe15d7)
Tested on: DigitalOcean Ubuntu 24.04, .NET 10.0.105

Results

Scenario Result
New CLI + Old AppHost (GA 13.2.2) ✅ Clean error: "The AppHost does not support --list-steps. Update the AppHost to a newer version of Aspire."
aspire do --list-steps (new AppHost) ✅ Shows 15 steps with correct dependency tree
aspire publish --list-steps ✅ Works
aspire deploy --list-steps ✅ Works
aspire do build --list-steps ⚠️ See feedback below

Feedback: --list-steps should scope to the target

Currently all three of these produce the same 15-step output:

aspire do --list-steps
aspire do build --list-steps
aspire publish --list-steps

I would expect aspire do build --list-steps to only show the build step and its transitive dependencies:

1. process-parameters
   └─ No dependencies

2. build-prereq
   └─ Depends on: process-parameters

3. build-apiservice
   ├─ Depends on: build-prereq
   └─ Tags: build-compute

4. build-webfrontend
   ├─ Depends on: build-prereq
   └─ Tags: build-compute

5. build
   └─ Depends on: build-apiservice, build-webfrontend

Not the full graph including deploy/push steps. Similarly aspire publish --list-steps should scope to the publish step and its deps. This would make the flag much more useful for understanding what a specific target will actually do.

mitchdenny and others added 8 commits April 14, 2026 09:07
Implement support for 'aspire do --list-steps' that prints pipeline steps
in execution order with their dependencies and tags, without executing them.

Changes:
- Add PipelineStepInfo DTO to BackchannelDataTypes.cs (source-shared)
- Add ResolveStepsAsync to DistributedApplicationPipeline for resolving
  steps without executing them
- Add GetPipelineStepsAsync RPC method to AppHostRpcTarget with
  'pipeline-steps.v1' capability
- Add GetPipelineStepsAsync to IAppHostCliBackchannel interface and
  implementations
- Add --list-steps option to PipelineCommandBase with formatted output
- Make DoCommand step argument optional when --list-steps is used

Testing:
- Unit tests for DoCommand with --list-steps (returns 0, calls
  GetPipelineStepsAsync, does not execute pipeline, calls RequestStopAsync)
- Unit tests for PrintPipelineSteps formatting (dependencies, tags,
  sequential numbering, empty steps, full pipeline output)
- Unit tests for ResolveStepsAsync and GetTopologicalOrder
- E2E CLI test using Hex1b terminal automation

Fixes #12376

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add color to the output: green step numbers, blue 'Depends on:' label,
yellow 'Tags:' label, dim 'No dependencies' text. Add hanging indent
for long dependency lists so wrapped items align under the first item.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Spectre.Console AnsiConsole emits ANSI escape codes even with
AnsiSupport.No in CI environments. Strip ANSI codes before asserting
on output content.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fix the continuation line indent to align wrapped dependency items
directly under the first item (19 chars), not double-indented.
Change step name color from bold white to cyan for better visibility.

Before:
   ├─ Depends on: provision-redis-infra, provision-postgres-infra,
                                          build-webapi
After:
   ├─ Depends on: provision-redis-infra, provision-postgres-infra,
                   build-webapi

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Compute the continuation prefix width from the visible length of the
first line prefix rather than hardcoding spaces. This ensures wrapped
dependency items align correctly under the first item regardless of
unicode box-drawing character widths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Use request/response objects (GetPipelineStepsRequest/Response) per
  the backchannel spec contract rules instead of raw array return
- Add capability check for 'pipeline-steps.v1' before calling
  GetPipelineStepsAsync, throwing AppHostIncompatibleException with a
  clear message if the AppHost doesn't support it
- Scope #pragma warning disable ASPIREPIPELINES001 to just the method
  that needs it instead of file-wide
- Fix ResolveStepsAsync XML doc to accurately state it returns
  collection order (not topological order)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When a target step is specified (e.g. 'aspire do build --list-steps'),
only show that step and its transitive dependencies instead of the
full pipeline graph. This makes the output much more useful for
understanding what a specific target will actually do.

- aspire do --list-steps          -> all steps (no filter)
- aspire do build --list-steps    -> build + its deps only
- aspire publish --list-steps     -> publish + its deps only
- aspire deploy --list-steps      -> deploy + its deps only

Each PipelineCommandBase subclass provides its target step name via
GetTargetStepName(). The step name is passed in GetPipelineStepsRequest
and the AppHost filters using ComputeTransitiveDependencies.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace InvalidOperationException with a proper command validator so
users get a standard parse error with help/usage output instead of an
unexpected error when running 'aspire do' without a step argument
and without --list-steps.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

🎬 CLI E2E Test Recordings — 70 recordings uploaded (commit d8c2da8)

View recordings
Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View Recording
AddPackageWhileAppHostRunningDetached ▶️ View Recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View Recording
AgentInitCommand_DefaultSelection_InstallsSkillOnly ▶️ View Recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View Recording
AllPublishMethodsBuildDockerImages ▶️ View Recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View Recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View Recording
Banner_DisplayedOnFirstRun ▶️ View Recording
Banner_DisplayedWithExplicitFlag ▶️ View Recording
Banner_NotDisplayedWithNoLogoFlag ▶️ View Recording
CertificatesClean_RemovesCertificates ▶️ View Recording
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate ▶️ View Recording
CertificatesTrust_WithUntrustedCert_TrustsCertificate ▶️ View Recording
ConfigSetGet_CreatesNestedJsonFormat ▶️ View Recording
CreateAndRunAspireStarterProject ▶️ View Recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View Recording
CreateAndRunEmptyAppHostProject ▶️ View Recording
CreateAndRunJavaEmptyAppHostProject ▶️ View Recording
CreateAndRunJsReactProject ▶️ View Recording
CreateAndRunPythonReactProject ▶️ View Recording
CreateAndRunTypeScriptEmptyAppHostProject ▶️ View Recording
CreateAndRunTypeScriptStarterProject ▶️ View Recording
CreateJavaAppHostWithViteApp ▶️ View Recording
CreateStartAndStopAspireProject ▶️ View Recording
CreateTypeScriptAppHostWithViteApp ▶️ View Recording
DashboardRunWithOtelTracesReturnsNoTraces ▶️ View Recording
DeployK8sBasicApiService ▶️ View Recording
DeployK8sWithGarnet ▶️ View Recording
DeployK8sWithMongoDB ▶️ View Recording
DeployK8sWithMySql ▶️ View Recording
DeployK8sWithPostgres ▶️ View Recording
DeployK8sWithRabbitMQ ▶️ View Recording
DeployK8sWithRedis ▶️ View Recording
DeployK8sWithSqlServer ▶️ View Recording
DeployK8sWithValkey ▶️ View Recording
DeployTypeScriptAppToKubernetes ▶️ View Recording
DescribeCommandResolvesReplicaNames ▶️ View Recording
DescribeCommandShowsRunningResources ▶️ View Recording
DetachFormatJsonProducesValidJson ▶️ View Recording
DoListStepsShowsPipelineSteps ▶️ View Recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View Recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View Recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View Recording
GlobalMigration_HandlesCommentsAndTrailingCommas ▶️ View Recording
GlobalMigration_HandlesMalformedLegacyJson ▶️ View Recording
GlobalMigration_PreservesAllValueTypes ▶️ View Recording
GlobalMigration_SkipsWhenNewConfigExists ▶️ View Recording
GlobalSettings_MigratedFromLegacyFormat ▶️ View Recording
InitTypeScriptAppHost_AugmentsExistingViteRepoAtRoot ▶️ View Recording
InvalidAppHostPathWithComments_IsHealedOnRun ▶️ View Recording
LegacySettingsMigration_AdjustsRelativeAppHostPath ▶️ View Recording
LogsCommandShowsResourceLogs ▶️ View Recording
PsCommandListsRunningAppHost ▶️ View Recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View Recording
PublishWithConfigureEnvFileUpdatesEnvOutput ▶️ View Recording
PublishWithDockerComposeServiceCallbackSucceeds ▶️ View Recording
RestoreGeneratesSdkFiles ▶️ View Recording
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes ▶️ View Recording
RunFromParentDirectory_UsesExistingConfigNearAppHost ▶️ View Recording
SecretCrudOnDotNetAppHost ▶️ View Recording
SecretCrudOnTypeScriptAppHost ▶️ View Recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View Recording
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets ▶️ View Recording
StopAllAppHostsFromAppHostDirectory ▶️ View Recording
StopAllAppHostsFromUnrelatedDirectory ▶️ View Recording
StopNonInteractiveMultipleAppHostsShowsError ▶️ View Recording
StopNonInteractiveSingleAppHost ▶️ View Recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View Recording
UnAwaitedChainsCompileWithAutoResolvePromises ▶️ View Recording

📹 Recordings uploaded automatically from CI run #24371556571

Copy link
Copy Markdown
Contributor

@davidfowl davidfowl left a comment

Choose a reason for hiding this comment

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

Approved after testing the PR build on the pr-16093-test droplet.

@davidfowl
Copy link
Copy Markdown
Contributor

Tested this on the pr-16093-test DigitalOcean droplet using the PR dogfood build 13.3.0-pr.16085.gd8c2da87 (run 24371556571).

Results:

  • New CLI + old AppHost (13.2.2): clean error: The AppHost does not support --list-steps. Update the AppHost to a newer version of Aspire.
  • .NET AppHost from the PR build: aspire do --list-steps, aspire do build --list-steps, aspire publish --list-steps, and aspire deploy --list-steps all work. do build --list-steps is properly scoped.
  • TypeScript AppHosts from the PR build: empty and starter app hosts also work.

Follow-up issues:

  1. aspire publish --list-steps and aspire deploy --list-steps still print Executing step ... instead of Listing pipeline steps. Reproduced in both .NET and TypeScript AppHosts.
  2. On TypeScript AppHosts with Aspire.Hosting.JavaScript, push-app shows duplicate dependencies. Reproduced in both aspire-ts-starter and aspire-ts-empty after aspire add Aspire.Hosting.JavaScript and wiring the same Node+Vite pattern:
    push-app -> Depends on: build-app, push-prereq, build-app, push-prereq

@mitchdenny mitchdenny merged commit 6920012 into main Apr 14, 2026
280 checks passed
@joperezr joperezr added this to the 13.3 milestone Apr 14, 2026
radical pushed a commit that referenced this pull request Apr 14, 2026
* Add --list-steps flag to aspire do command

Implement support for 'aspire do --list-steps' that prints pipeline steps
in execution order with their dependencies and tags, without executing them.

Changes:
- Add PipelineStepInfo DTO to BackchannelDataTypes.cs (source-shared)
- Add ResolveStepsAsync to DistributedApplicationPipeline for resolving
  steps without executing them
- Add GetPipelineStepsAsync RPC method to AppHostRpcTarget with
  'pipeline-steps.v1' capability
- Add GetPipelineStepsAsync to IAppHostCliBackchannel interface and
  implementations
- Add --list-steps option to PipelineCommandBase with formatted output
- Make DoCommand step argument optional when --list-steps is used

Testing:
- Unit tests for DoCommand with --list-steps (returns 0, calls
  GetPipelineStepsAsync, does not execute pipeline, calls RequestStopAsync)
- Unit tests for PrintPipelineSteps formatting (dependencies, tags,
  sequential numbering, empty steps, full pipeline output)
- Unit tests for ResolveStepsAsync and GetTopologicalOrder
- E2E CLI test using Hex1b terminal automation

Fixes #12376

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Improve --list-steps output formatting

Add color to the output: green step numbers, blue 'Depends on:' label,
yellow 'Tags:' label, dim 'No dependencies' text. Add hanging indent
for long dependency lists so wrapped items align under the first item.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix PrintPipelineSteps tests to strip ANSI escape codes

The Spectre.Console AnsiConsole emits ANSI escape codes even with
AnsiSupport.No in CI environments. Strip ANSI codes before asserting
on output content.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix hanging indent alignment and use cyan for step names

Fix the continuation line indent to align wrapped dependency items
directly under the first item (19 chars), not double-indented.
Change step name color from bold white to cyan for better visibility.

Before:
   ├─ Depends on: provision-redis-infra, provision-postgres-infra,
                                          build-webapi
After:
   ├─ Depends on: provision-redis-infra, provision-postgres-infra,
                   build-webapi

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix wrapped dependency alignment to be computed dynamically

Compute the continuation prefix width from the visible length of the
first line prefix rather than hardcoding spaces. This ensures wrapped
dependency items align correctly under the first item regardless of
unicode box-drawing character widths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address review feedback: backchannel spec compliance and versioning

- Use request/response objects (GetPipelineStepsRequest/Response) per
  the backchannel spec contract rules instead of raw array return
- Add capability check for 'pipeline-steps.v1' before calling
  GetPipelineStepsAsync, throwing AppHostIncompatibleException with a
  clear message if the AppHost doesn't support it
- Scope #pragma warning disable ASPIREPIPELINES001 to just the method
  that needs it instead of file-wide
- Fix ResolveStepsAsync XML doc to accurately state it returns
  collection order (not topological order)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Scope --list-steps output to target step and its dependencies

When a target step is specified (e.g. 'aspire do build --list-steps'),
only show that step and its transitive dependencies instead of the
full pipeline graph. This makes the output much more useful for
understanding what a specific target will actually do.

- aspire do --list-steps          -> all steps (no filter)
- aspire do build --list-steps    -> build + its deps only
- aspire publish --list-steps     -> publish + its deps only
- aspire deploy --list-steps      -> deploy + its deps only

Each PipelineCommandBase subclass provides its target step name via
GetTargetStepName(). The step name is passed in GetPipelineStepsRequest
and the AppHost filters using ComputeTransitiveDependencies.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use System.CommandLine validator for missing step argument

Replace InvalidOperationException with a proper command validator so
users get a standard parse error with help/usage output instead of an
unexpected error when running 'aspire do' without a step argument
and without --list-steps.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This was referenced Apr 24, 2026
mitchdenny added a commit to microsoft/aspire.dev that referenced this pull request May 6, 2026
#847)

The reference docs for aspire do and the deployment/pipelines conceptual
page already document the --list-steps flag, but neither shows what the
output actually looks like. Add a short, canonical numbered-tree sample
(matches the formatter in microsoft/aspire#16085 and its snapshot tests)
so readers can see at a glance what to expect — including the connectors
used for steps with deps only, deps and tags, and steps with no
dependencies.

Context: #837 (item #2), follow-up polish to #801.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
IEvangelist added a commit to microsoft/aspire.dev that referenced this pull request May 7, 2026
* Add docs for Azure Network Security Perimeter (NSP) support (#698)

Add documentation for the new NSP APIs introduced in microsoft/aspire#15711.
The new section on the Azure Virtual Network page covers:
- What NSPs are and why they're useful for PaaS service isolation
- AddNetworkSecurityPerimeter() API
- WithAccessRule() for inbound/outbound access rules
- WithNetworkSecurityPerimeter() for associating PaaS resources
- Enforced vs. Learning access modes
- List of supported Azure resources

Also adds a shell What's new in Aspire 13.3 page with an NSP highlight
and a sidebar entry.

Fixes #689

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Add --include-hidden option docs to describe, logs, and export commands (#723)

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: James Newton-King <james@newtonking.com>

* Add aspire docs api command reference pages (#715)

Documents the new aspire docs api list|search|get sub-commands
introduced in microsoft/aspire#15814.

- Add aspire-docs-api.mdx (group command overview)
- Add aspire-docs-api-list.mdx
- Add aspire-docs-api-search.mdx
- Add aspire-docs-api-get.mdx
- Update aspire-docs.mdx to include the api sub-command in the table
- Update sidebar reference.topics.ts with the new entries

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Document Azure:CredentialProcessTimeoutSeconds option (#731)

* Document Azure:CredentialProcessTimeoutSeconds option

Adds documentation for the new Azure:CredentialProcessTimeoutSeconds configuration option introduced in microsoft/aspire#16175. The option lets users override the credential subprocess timeout (range 5-600) when az login validation is slow due to antivirus, network latency, etc.

- Adds the option to the Local Azure provisioning configuration table and a new 'Credential process timeout' section.

- Adds a 'Configurable Azure credential timeout' section to the What's new in Aspire 13.3 doc.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Mention CredentialProcessTimeoutSeconds in deployment env var asides

Adds a follow-up note to each `Azure__SubscriptionId` env var list pointing at the new credential process timeout option for users hitting slow credential validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update dashboard API defaults and otel command docs (#732)

- Dashboard:Api:Enabled now defaults to true (API enabled by default)
- Dashboard:Api:AuthMode now defaults to ApiKey
- Add Dashboard:Api:Disabled as the new preferred config to disable the API
- Mark Dashboard:Api:Enabled as deprecated in docs
- Update PrimaryApiKey default to note auto-generation
- Add --dashboard-url and --api-key options to aspire otel logs/spans/traces
- Document login URL support: passing http://host/login?t=<token> auto-exchanges the token for an API key
- Update aspire otel main page description to mention standalone dashboard usage

Documents changes from microsoft/aspire#16326

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add docs for Azure Front Door integration (#730)

* Add docs for Azure Front Door integration

Adds a new integration page for Azure Front Door, adds it to the sidebar, and adds a section to the What's new in Aspire 13.3 doc.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Rewrite Kubernetes docs for Aspire 13.3 (#734)

- Add deployment/kubernetes/ folder with overview, vanilla K8s, and AKS pages
- Add aspire deploy support for vanilla Kubernetes (helm install via kubectl context)
- Add Aspire.Hosting.Azure.Kubernetes (AKS) deployment docs with full provisioning
- Add container registry configuration (AddContainerRegistry + WithContainerRegistry)
- Add AKS integration page (integrations/cloud/azure/aks/)
- Update K8s integration page with TypeScript tabs and deploy support
- Update sidebar, deployment overview table, deployment index cards
- Add integration-docs.json mapping for Aspire.Hosting.Azure.Kubernetes
- All code examples include both C# and TypeScript tabs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Support alternative TypeScript AppHost toolchains (Bun, Yarn, pnpm) (#746)

* docs: document alternative TypeScript AppHost toolchains (Bun, Yarn, pnpm)

- Add toolchain detection and declaration section to typescript-apphost.mdx
- Update prerequisites.mdx to list all supported package managers
- Update aspire-doctor.mdx to mention JavaScript toolchain environment check

Documents changes from microsoft/aspire#16162.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/frontend/src/content/docs/get-started/prerequisites.mdx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix CLI overview links in standalone dashboard docs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Mark aspire dashboard commands as preview (#773)

* chore: update release notes to Aspire 13.3 across multiple language documentation

Co-authored-by: Copilot <copilot@github.com>

* [docs] Add private endpoint support for Azure Container Registry (#770)

* docs: add private endpoint support for Azure Container Registry

Document the new private endpoint support for AzureContainerRegistryResource
added in microsoft/aspire#16132. Covers:
- Automatic SKU upgrade to Premium when a private endpoint is added
- Deployment warning about public network access being disabled
- New 'Use private endpoints' section on the ACR hosting integration page
- Service-specific note for ACR in the Virtual Network integration docs
- What's-new entry in aspire-13-3.mdx

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* PR feedback

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>

* docs: add [AspireValue] exported value catalogs to multi-language integration guide (#757)

Documents the new [AspireValue] attribute introduced in microsoft/aspire#16287
(milestone 13.3). Covers:
- How to annotate static fields/properties with [AspireValue] to export
  predefined value catalogs into guest SDKs (TypeScript, Python, Java, etc.)
- Nested static class hierarchy mapping to nested catalog namespaces
- Using catalog values in TypeScript and Python AppHosts
- Overriding exported names with the Name property
- Value catalog constraints (static, JSON-serializable, no handles)
- Updated ASPIREATS001 diagnostics page to list [AspireValue] as protected
- Updated supported types table to include exported values row

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add Kubernetes Ingress and Gateway API documentation (#781)

* Add Kubernetes Ingress and Gateway API documentation

New pages:
- kubernetes-ingress.mdx: Overview with Ingress vs Gateway API decision
  matrix, TLS overview, and parameter usage
- kubernetes-ingress-aks.mdx: Walkthrough for Ingress on AKS with AGC,
  cert-manager DNS-01, parameterized config
- kubernetes-gateway-aks.mdx: Walkthrough for Gateway API on AKS with
  AGC, cert-manager HTTP-01 (gatewayHTTPRoute) and DNS-01 options

Cross-links added to existing kubernetes.mdx and kubernetes integration
pages.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Register new pages in deployment sidebar topics

Pages must be listed in deployment.topics.ts for the
starlight-sidebar-topics plugin to render them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove AKS HTTP-01 tip from overview page

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix deploy commands: use env vars instead of hallucinated --parameter flag

Replace non-existent aspire deploy --parameter with environment
variables using the Parameters__<name> convention. Added note about
alternative config sources (appsettings.json, user secrets, interactive).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add full az CLI setup commands to Ingress walkthrough

Replace terse prerequisites with step-by-step az commands:
- Create resource group and AKS cluster with ALB/OIDC/workload identity
- Create and attach ACR
- Create ALB subnet and ApplicationLoadBalancer CRD
- Create Azure DNS zone and list name servers for delegation
- Install cert-manager with workload identity and Azure DNS
- Create managed identity, federated credential, ClusterIssuer

Gateway walkthrough cross-references the Ingress setup steps.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add BYO cluster callout and link to AddAzureKubernetesEnvironment

Both walkthroughs now clearly state they use a bring-your-own-cluster
model and link to the AKS integration page for Aspire-provisioned
clusters.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add bash/PowerShell tabs to az CLI setup commands

All multi-line az/kubectl commands now have both bash and PowerShell
tabs with correct line continuation characters and variable syntax.
Also added resource provider registration steps, updated reference
links to official Azure docs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Rewrite Gateway API walkthrough as standalone HTTP-01 focused guide

- Make Gateway API doc fully standalone with its own AKS setup steps
  (resource providers, cluster, ACR, ALB, cert-manager)
- Focus on HTTP-01 as the recommended TLS strategy (no DNS zone needed)
- Add complete ClusterIssuer setup for gatewayHTTPRoute solver
- Add DNS pointing section with az CLI commands (bash + PowerShell tabs)
- Add deploy section with both bash and PowerShell env var examples
- Add detailed 'How it works' explaining the full TLS bootstrap flow
- Add 'Why HTTP-01 works with Gateway but not Ingress' explanation
- Move DNS-01 to alternative section with cross-link to Ingress doc
- Reorder sidebar: Gateway API before Ingress (recommended first)
- Update overview page next steps to highlight Gateway as recommended

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add ASPIREDURABLETASK001 diagnostic page and document Durable Task experimental APIs (#779)

Documents changes from microsoft/aspire#16533, which marks the Durable Task scheduler
and task hub APIs in Aspire.Hosting.Azure.Functions as [Experimental] with diagnostic
ID ASPIREDURABLETASK001.

- Add new diagnostics/aspiredurabletask001.mdx page describing the warning, affected
  APIs, and suppression options.
- Update azure-functions-host.mdx to include a new 'Durable Task scheduler integration'
  section explaining the experimental APIs with code examples.
- Add ASPIREDURABLETASK001 entry to the sidebar warnings list.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Document AddEFMigrations and PublishAsMigrationBundle with publishContainer option (#774)

* docs: document AddEFMigrations and PublishAsMigrationBundle with publishContainer

Document the AddEFMigrations AppHost API and the new publishContainer: true
option for PublishAsMigrationBundle introduced in microsoft/aspire#16289.

- Add 'Automated EF migrations with AddEFMigrations' section covering:
  - Package installation
  - AppHost configuration via AddEFMigrations
  - RunDatabaseUpdateOnStart for local run mode
  - PublishAsMigrationScript and PublishAsMigrationBundle for publish pipeline
  - New publishContainer: true option to wrap bundle in a container image
  - Per-environment configuration (ACA Job, Docker Compose, Kubernetes)
  - Artifact-only (no container) usage pattern

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review feedback on migrations.mdx

Agent-Logs-Url: https://github.com/microsoft/aspire.dev/sessions/e98f02d1-22c1-45c0-bac2-d26789008422

Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com>

* docs: add AddNextJsApp and publish methods for JS apps (13.3) (#765)

Document the new JavaScript publish APIs added in Aspire 13.3:
- AddNextJsApp: Next.js hosting with next dev, standalone output, and build validation
- PublishAsStaticWebsite: YARP-based static site serving with optional API proxy
- PublishAsNodeServer: Node.js SSR container (SvelteKit, TanStack Start)
- PublishAsNpmScript: Multi-stage npm script container (Nuxt, Remix, Astro SSR)

Adds framework reference table mapping each framework to its recommended publish method.

Documents changes from microsoft/aspire#15736

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Replace dashboard Copilot and MCP server docs with AI coding agents and APIs pages (#784)

* Replace dashboard Copilot and MCP server docs with AI coding agents and APIs pages

- Delete dashboard/copilot.mdx (feature removed) and redirect to new page
- Delete dashboard/mcp-server.mdx and redirect to get-started/aspire-mcp-server
- Add dashboard/ai-coding-agents.mdx covering CLI and MCP server usage
- Add dashboard/apis.mdx with write/read API reference
- Add note to aspire-mcp-server.mdx about dashboard MCP removal
- Rename sidebar group from 'AI features' to 'Data features'
- Update all cross-references across docs and localized files

* Update Dashboard:AI:Disabled default to true, clarify it only disables Copilot UI

* Fix invalid hash link to OTLP section in apis.mdx

* Remove Copilot UI references from dashboard/explore.mdx

* Document framework-specific gotchas for JS publish methods (#787)

* Document framework-specific gotchas for JS publish methods

Expands the JavaScript apps deployment doc with framework-specific guidance
covering the three new publish methods (PublishAsStaticWebsite,
PublishAsNodeServer, PublishAsNpmScript) added in Aspire 13.3.

- Add a Dev-mode API proxying subsection covering the API_HTTP injection and
  per-framework dev-server proxy patterns (Vite, Astro, Angular).
- Expand the framework reference table with build entry points and the
  framework-side configuration each publish method requires.
- Add a Framework-specific gotchas section with verified links to the
  canonical framework docs for Nuxt, Astro SSR, SvelteKit, Next.js,
  TanStack Start, Remix / React Router, Qwik City, Angular, and Vite.
- Cross-link from AddNextJsApp and AddViteApp on the JavaScript integration
  page to the relevant deployment-page sections.
- Fix a pre-existing broken link to /fundamentals/service-discovery/overview/
  introduced in #765.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Clarify API_HTTP and API_URL env var conventions

Address PR #787 review feedback:
- Explain that API_HTTP follows the service-discovery <RESOURCENAME>_<SCHEME>
  convention and is added by WithReference (or by passing apiTarget to
  PublishAsStaticWebsite).
- Clarify that API_URL is not auto-injected — it is a custom env var that
  SSR-framework examples set explicitly via WithEnvironment.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use API_HTTP consistently; drop fictional API_URL references

API_URL is not an Aspire convention — it was a custom variable used in the
sample repo. Use the actual auto-injected service-discovery variable
API_HTTP (<RESOURCENAME>_<SCHEME>) throughout the SSR gotchas so readers
can reproduce the examples without an extra WithEnvironment call.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Add Podman support for Docker Compose deployment (#764)

* docs: add Podman support for Docker Compose deployment (aspire#16074)

- Document Podman as a supported container runtime for Docker Compose deploys
- Describe auto-detection logic (parallel probe, prefer running, Docker tiebreaker)
- Add Podman-specific behavior note (podman-compose / service discovery)
- Document breaking change: IContainerRuntime → IContainerRuntimeResolver
- Update aspire doctor docs to reflect multi-runtime reporting

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address review feedback: remove IContainerRuntime breaking change section

Per @davidfowl's review on PR #764, remove the 'Breaking change:
IContainerRuntime → IContainerRuntimeResolver' section from the Docker
Compose deployment doc. That guidance belongs elsewhere (if anywhere)
rather than in the Docker Compose deployment guide.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove DCP detection-parity sentence per review

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply doc-tester findings from end-to-end Podman validation

- aspire-doctor.mdx: replace synthetic example output with the real CLI
  format observed on Aspire CLI 13.3.0 (✅/⚠️/❌ glyphs, 'v<version>:
  running' prefix, '(<reason>) ← active' suffix, real header names).
  Add a third example showing the explicit-configuration override.
- docker-compose.mdx: document the ASPIRE_CONTAINER_RUNTIME=docker|podman
  override and call out the Podman ≥ 5.0.0 minimum (Ubuntu 24.04 ships
  4.9.x and is rejected by aspire doctor; use Fedora 42+ or another
  distro that packages Podman 5).

Verified against a clean Fedora 43 droplet with Podman 5.6.2:
aspire publish + aspire deploy completed end-to-end (25/25 steps),
podman-compose 1.5.0 was used automatically, and aspire doctor
reported each runtime/reason combination above verbatim.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* [docs] Add browser logs documentation (#775)

* docs: add browser logs documentation

Documents the BrowserLogs feature (WithBrowserLogs) and the new
Configure Tracked Browser dashboard command added in
microsoft/aspire#16531.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move browser logs to integrations/devtools and address review feedback

- Move page from /dashboard/browser-logs to /integrations/devtools/browser-logs
  (it documents an AppHost integration, not a dashboard telemetry feature)
- Use 'Aspire' branding instead of '.NET Aspire'
- Remove unused MDX imports (Aside, Steps, LearnMore)
- Drop unnecessary WithExternalHttpEndpoints from examples; clarify that
  WithBrowserLogs works on any resource with an HTTP/HTTPS endpoint
- State the child resource naming pattern explicitly (<parent>-browser-logs)
- Add command IDs (open-tracked-browser, configure-tracked-browser,
  capture-screenshot) alongside dashboard display names
- Document accepted UserDataMode config values (Shared/Isolated, case-insensitive)
- Note that per-resource keys take precedence over global keys
- Reference 'aspire secret set' for user-secrets initialization
- Add new section explaining browser process sharing and tab semantics:
  one process per (executable, user-data-directory), one tab per session,
  cross-AppHost adoption via CDP

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* Document the Aspire.Hosting.Browsers package on the browser logs page (#792)

* Document the `Aspire.Hosting.Browsers` package on the browser logs page

The browser logs feature now ships as a standalone hosting package
`Aspire.Hosting.Browsers`. The integration page didn't tell readers
which package to install — it jumped straight from the introduction
into a `WithBrowserLogs()` example, which left users guessing.

- Add an 'Install the package' section with the standard
  `InstallPackage` component pointing at `Aspire.Hosting.Browsers`.
- Update the code example titles from `AppHost/Program.cs` to
  `AppHost.cs` to match the Aspire 13.x convention.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add TypeScript AppHost samples to the browser logs page

The Aspire TypeScript codegen now exposes `withBrowserLogs(options?)`
on resources, mirroring the C# `WithBrowserLogs(...)` extension. Add
TypeScript variants alongside the C# samples following the same
`Tabs syncKey='aspire-lang'` pattern used on the PostgreSQL hosting
page, and fix the `InstallPackage` prop name to match the component
contract (`packageName`).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add TypeScript install path for the browser logs package

Mirror the PostgreSQL installation pattern: wrap install in an
`aspire-lang` Tabs block with a C# tab (CLI, file-based AppHost
directive, PackageReference) and a TypeScript tab (CLI plus the
`aspire.config.json` packages entry). The `InstallPackage` component
only covers C# install methods, so it can't represent the TypeScript
config workflow.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use AddViteApp in browser logs samples

Browser logs apply to any HTTP/HTTPS resource, but a Vite frontend
makes the example more concrete (and matches a common scenario where
console output is what readers want to see). Use `AddViteApp` /
`addViteApp` in both code blocks.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Refine browser logs page after doc-tester pass

- Lead with 'any browseable resource' framing and call out that Vite
  is just an example. Add a pointer to Aspire.Hosting.JavaScript so
  readers know AddViteApp lives in a different package.
- Annotate the '../web' path so copy-pasters know what directory the
  example expects.
- Chain the TypeScript fluent API directly off addViteApp(...) instead
  of splitting through an intermediate const, matching the rest of the
  TS code samples in the page.
- Link 'aspire secret set' to its CLI reference and clarify what
  follow-up clicks of 'Save to user secrets' do.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove accidental Playwright MCP snapshot dump

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Link to JavaScript integration page instead of NuGet

Per docs convention, link to the in-site integration page for
Aspire.Hosting.JavaScript (where the Vite resource is documented)
rather than the NuGet listing. Drop the NuGet emoji link from the
Aspire.Hosting.Browsers package mention as well.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR feedback: add ASPIREBROWSERLOGS001 article, use InstallPackage

- Create /diagnostics/aspirebrowserlogs001/ article and link the
  diagnostic ID mention in the browser-logs page to it.
- Add the new diagnostic to the diagnostics overview table.
- Replace the hand-rolled C# install tab with the shared
  <InstallPackage packageName="Aspire.Hosting.Browsers" /> component
  for consistency with other integration pages. The TypeScript tab
  keeps its hand-rolled aspire.config.json snippet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Use `aspire destroy` in deployment cleanup tutorials (#790)

* Use `aspire destroy` in deployment cleanup tutorials

Replace the legacy clean-up steps in the getting-started deploy
tutorial and the Docker Compose / Azure Container Apps deployment
guides with `aspire destroy`, which now provides a unified,
interactive teardown flow:

- get-started/deploy-first-app.mdx: drop the per-target Tabs
  (`aspire do docker-compose-down-env` / `az group delete`) in both
  the C# and TypeScript pivots and call `aspire destroy` instead.
  The command auto-detects the deployment target and shows what will
  be removed before proceeding.
- deployment/docker-compose.mdx: replace the `aspire do
  docker-compose-down-{env}` example in 'Clean up deployment' with
  `aspire destroy`.
- deployment/azure/container-apps.mdx: replace the manual
  `az group delete --name <rg>` example with `aspire destroy`.

Each cleanup step now includes a caution/danger admonition warning
that the destroy is irreversible. The default invocation prompts for
confirmation; `--yes` is mentioned only as the CI/automation override.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use `aspire deploy --list-steps` in deploy tutorial protip

The `aspire do diagnostics` subcommand was removed from the CLI in
favour of the `--list-steps` flag exposed by every pipeline command
(`aspire deploy`, `aspire publish`, `aspire destroy`, `aspire do`).

Update both pivots of the get-started deploy tutorial to point
readers at `aspire deploy --list-steps` and link to the
`aspire deploy` reference instead of `aspire do`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Replace stale `aspire do diagnostics` references with `--list-steps`

The `aspire do diagnostics` subcommand has been removed from the CLI.
The replacement is the `--list-steps` flag, which is exposed by every
pipeline command (`aspire deploy`, `aspire publish`, `aspire destroy`,
and `aspire do`) and lists the steps that would run for that command,
in execution order, without running them.

Update the explanation pages and CLI reference accordingly:

- deployment/pipelines.mdx: replace the dedicated `Discovering available
  steps` example, the migration steps under 'Pipeline steps and
  dependencies', and the post-migration tip Aside. Trim the descriptive
  bullet list to what `--list-steps` actually outputs (no orphaned-step
  detection or 'what-if' simulation language).
- whats-new/aspire-13.mdx: rewrite the 'Pipeline diagnostics' bullet to
  describe `--list-steps` instead of a now-removed subcommand.
- reference/cli/commands/aspire-do.mdx: rewrite the 'Discovering
  available steps' section and the corresponding example to use
  `aspire do --list-steps`.

Verified against `aspire do --help` / `aspire deploy --help` on Aspire
CLI 13.3.0+be8c19e: `--list-steps` is documented as 'List the pipeline
steps that would be executed, without running them.'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Document container tunnel enabled by default in Aspire 13.3 (#772)

* docs: document container tunnel enabled by default in Aspire 13.3

Add a new section to the What's new in Aspire 13.3 page describing
the container tunnel being enabled by default (aspire/aspire#14557).

- Explains what the tunnel is and why it matters
- Notes the ~3-4s startup delay for containers using host endpoints
- Shows how to opt out via ASPIRE_ENABLE_CONTAINER_TUNNEL=false

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: David Pine <david.pine@microsoft.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>

* [docs] Add ASPIREJAVASCRIPT001 diagnostic documentation (#809)

* Add ASPIREJAVASCRIPT001 diagnostic documentation

Documents the new ASPIREJAVASCRIPT001 experimental diagnostic introduced
in Aspire 13.3 for JavaScript hosting APIs (PublishAsStaticWebsite,
NextJsAppResource, PublishAsStaticWebsiteOptions).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add ASPIREJAVASCRIPT001 sidebar entry to reference.topics.ts

Agent-Logs-Url: https://github.com/microsoft/aspire.dev/sessions/6e9451d0-ae0b-4f1b-a00b-7ee333cbd3fc

Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>

* docs: document ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE env var

Add documentation for the new ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE
environment variable introduced in microsoft/aspire#15718.

- Added the env var to the Common configuration table in app-host/configuration.mdx
- Added a dedicated section in app-host/certificate-configuration.mdx
  explaining when and how to use the setting

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Document --list-steps and --no-build pipeline command options (#801)

Add shared option includes for --list-steps and --no-build, and
reference them from the aspire deploy, aspire publish, and aspire do
command pages. These options are exposed by every pipeline command
but were undocumented.

Also replace stale 'aspire do diagnostics' references in aspire-do.mdx
with 'aspire do --list-steps' (the diagnostics subcommand was removed
from the CLI; --list-steps is the replacement).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update pipeline --log-level to --pipeline-log-level in CLI docs (#789)

The pipeline commands (aspire do, aspire publish, aspire deploy) had a
--log-level option renamed to --pipeline-log-level to avoid overlap with
the global CLI --log-level / -l option.

Documents changes from microsoft/aspire#16596.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document ExcludeReferenceEndpoint for endpoint filtering

Documents the new EndpointAnnotation.ExcludeReferenceEndpoint property
introduced in microsoft/aspire#15558. Adds a subsection under
'Endpoint extension methods → Additional considerations' covering:

- How to opt an endpoint out of WithReference(resource) discovery
- Code examples for excluding and explicitly opting in by name
- Table of built-in integrations using this pattern (Keycloak,
  CosmosDB/EventHubs/ServiceBus emulators)
- Backward-compatibility note (defaults to false)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove dashboard MCP configuration docs (#825)

The dashboard MCP server and its associated configuration have been
removed from Aspire in microsoft/aspire#15528. The MCP server is now
exclusively provided by the Aspire CLI (aspire agent mcp).

- Remove ASPIRE_DASHBOARD_MCP_ENDPOINT_URL from common configuration table
- Update ASPIRE_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS description (remove MCP auth mode reference)
- Remove the entire Dashboard MCP configuration section
- Remove stale mention of HTTP-based dashboard MCP auth in aspire-mcp-server.mdx

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>

* [docs] Add ASPIREJAVASCRIPT001 diagnostic documentation (#805)

* Add ASPIREJAVASCRIPT001 diagnostic documentation

Documents the new ASPIREJAVASCRIPT001 compiler warning introduced in
Aspire 13.4 for experimental JavaScript hosting and publishing APIs
(PublishAsStaticWebsite, PublishAsNodeServer, PublishAsNpmScript,
AddNextJsApp, DisableBuildValidation). Previously these APIs used
ASPIREEXTENSION001; this rename requires users to update any
suppressions they have in their projects.

Adds aspirejavascript001.mdx and updates diagnostics/overview.mdx.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestion from @eerhardt

* Small reverts

* Revert duplication

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>

* Fix release build diagnostics sidebar (#831)

Add the missing ASPIREBROWSERLOGS001 diagnostics page to the sidebar topics config so starlight-sidebar-topics no longer rejects the page during prerender.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add --dashboard-url and --api-key options to aspire agent mcp and aspire otel command docs (#817)

Documents the new standalone dashboard connection options added in
microsoft/aspire#15595. Users can now query telemetry from a standalone
Aspire Dashboard (not managed by an AppHost) using --dashboard-url and
optionally --api-key for secured dashboards.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Document Python starter template migration to TypeScript AppHost (aspire-py-starter) (#823)

* docs: document Python starter template migration to TypeScript AppHost

The aspire-py-starter template was migrated from dotnet new (C# AppHost)
to the Aspire CLI template system (TypeScript AppHost) in aspire#15574.

- Add 13.3 what's-new entry for the Python starter template change
- Update aspire-sdk-templates.mdx to reflect TypeScript AppHost and new
  --use-redis-cache option
- Update aspire-new.mdx commands table and add py-starter-specific options

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update src/frontend/src/content/docs/reference/cli/commands/aspire-new.mdx

Co-authored-by: David Fowler <davidfowl@gmail.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* docs: add polyglot custom domain support for Azure Container Apps (#811)

The ConfigureCustomDomain API is now available in polyglot AppHosts
(TypeScript, Python, Java) following microsoft/aspire#15811.

Update the TypeScript tab in the custom domains section with working
code examples, replacing the previous note that said the API was
not yet available.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Document TypeScript validation before AppHost startup (#812)

* docs: document TypeScript validation before AppHost startup

TypeScript AppHosts now run tsc --noEmit before starting, which
stops aspire run/publish when type errors are present. Document
this behavior including watch mode recovery and startup overhead.

Documents changes from microsoft/aspire#16689.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update TypeScript validation section in documentation

Clarified TypeScript validation process and its impact on startup time.

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Sébastien Ros <sebastienros@gmail.com>

* docs: document VS Code editor indicators (gutter icons, code lens, health checks) (#816)

Documents the gutter icon shapes, code lens health check details, sidebar
health check tree nodes, and expand-all button introduced in
microsoft/aspire#15688.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document integratedBrowser as new default for aspire.dashboardBrowser (#810)

Documents the new 'integratedBrowser' setting value added in
microsoft/aspire#15896. Updates the default shown in the settings table
and adds a dedicated 'Dashboard browser options' section listing all
available values with descriptions.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add Restore command and enableAutoRestore setting for VS Code extension (#813)

Documents the auto-restore feature added in microsoft/aspire#15546:
- Add 'Restore' command to the Commands table
- Add 'aspire.enableAutoRestore' setting to the Extension settings table

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update src/frontend/src/content/docs/app-host/certificate-configuration.mdx

* Update src/frontend/src/content/docs/app-host/certificate-configuration.mdx

* Update src/frontend/src/content/docs/app-host/configuration.mdx

* [docs] Document command result output for resource commands (#822)

* docs: document command result output for resource commands

Document the new CommandResults.Success(result, format) overload and
CommandResultFormat enum introduced in microsoft/aspire#15622.

Covers:
- Returning plain-text and JSON structured output from resource commands
- How results flow through Dashboard (TextVisualizerDialog), CLI (stdout),
  and MCP tools (TextContentBlock)
- The CommandResultFormat enum values (None, Text, Json)
- Replica aggregation behavior for result data
- CLI piping tip using stderr/stdout separation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix command result output docs against actual public API

The original draft from PR #15622 codegen had several inaccuracies that
would have prevented the examples from compiling:

- ExecuteCommandResult exposes Data (CommandResultData?), not Result and
  ResultFormat. ErrorMessage is now [Obsolete]; Message replaces it for
  both success and failure messages.
- CommandResults.Success(message, result, format) takes a status message
  as the first argument; the previous samples omitted it.
- CommandResultFormat is { Text, Json, Markdown } — None was removed
  from the public API and Markdown was never documented.
- The Failure overload accepts the same payload shape, and the
  CommandResultData.DisplayImmediately flag auto-opens the dashboard
  visualizer.

Also adds parallel TypeScript examples (using the object-literal
ExecuteCommandResult / CommandResultData shape) under aspire-lang Tabs,
mirrors the existing example using Message in the property bullet list,
and documents both the toast/CLI/MCP routing and the visualizer locking
behavior for Json and Markdown.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use realistic access-token scenario and add CLI invocation section

- Replaces the placeholder `getConnectionString` / `GetConnectionStringAsync`
  helpers with a self-contained `issue-access-token` example. The text
  variant returns the raw token; the JSON variant returns token + expiresAt
  + scopes. C# uses `RandomNumberGenerator.GetBytes(32)`; TypeScript uses
  `crypto.randomUUID()`. Both variants compile/type-check verbatim.
- Adds an "Invoke commands from the CLI" subsection documenting:
  - The `aspire resource <resource> <command>` syntax.
  - The stdout/stderr split (status to stderr, payload to stdout).
  - That `Markdown` payloads are rendered in the terminal, not raw.
  - The 0/non-zero exit-code contract for scripting.
  - A realistic `jq` pipe and a script branch on the exit code.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add TypeScript code samples throughout custom-resource-commands

Wraps the C#-only walkthrough sections (Add custom commands, Execute
command logic, Update command state logic, Test the custom command,
Handle command execution results) in <Tabs syncKey="aspire-lang">
with parallel TypeScript examples. The TypeScript samples follow the
RpsArena playground pattern: inline withCommand registration, HTTP-based
command logic via getEndpoint + fetch, and plain object-literal results.

Adds <Aside> callouts where the TypeScript SDK genuinely lacks a feature
the C# AppHost has:
- UpdateCommandStateContext.resourceSnapshot (no equivalent)
- Programmatic command execution via ResourceCommandService (C# only)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* Fix build error (#843)

* [docs] Add aspire destroy command documentation (#769)

* Add aspire destroy command documentation

Documents the new aspire destroy CLI command introduced in
microsoft/aspire#16097. Adds a full command reference page with
synopsis, description, options, and examples; updates the CLI
overview to include an aspire destroy section; and registers the
new page in the sidebar.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Match aspire destroy options to release/13.3 CLI

- Rename --log-level to --pipeline-log-level (microsoft/aspire#16596)
- Add --list-steps, --no-build, and global --log-level (-l) entries
  via shared includes, matching aspire-deploy/aspire-publish docs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* [docs] Add --list-steps sample output to aspire do and pipelines pages (#847)

The reference docs for aspire do and the deployment/pipelines conceptual
page already document the --list-steps flag, but neither shows what the
output actually looks like. Add a short, canonical numbered-tree sample
(matches the formatter in microsoft/aspire#16085 and its snapshot tests)
so readers can see at a glance what to expect — including the connectors
used for steps with deps only, deps and tags, and steps with no
dependencies.

Context: microsoft/aspire.dev#837 (item #2), follow-up polish to #801.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Add Logger property to ExecuteCommandContext docs (#818)

* docs: document Logger property on ExecuteCommandContext

Add the new Logger property to the ExecuteCommandContext properties list
and update code examples to use context.Logger directly instead of
resolving ILogger from the service provider.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update Logger description to mention dashboard and aspire logs command

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: James Newton-King <james@newtonking.com>

* docs: update Kubernetes deployment docs to use WithHelm chart options (#840)

Update the Helm chart metadata section to use the new WithHelm(...)
API that consolidates chart name, version, and description configuration.
The previous WithProperties API for HelmChartName/HelmChartVersion/
HelmChartDescription is now internal.

Relates to microsoft/aspire#16759

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Document dashboard notification center (#850)

Add a Notification center section to the explore dashboard page describing the bell icon, notifications dialog, View response action, and Dismiss all. Update references from toast notifications to the notification center. Add Markdown to the text visualizer format list. Update custom-resource-commands.mdx to link to the notification center instead of referencing toasts. Add notification center screenshots.

* Update Microsoft Foundry docs (#845)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Document publish summary output (#844)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add package manager requirements for TypeScript AppHosts (#841)

Document that Yarn Classic (v1) is not supported for TypeScript AppHosts.
Users must use Yarn 4+, npm, pnpm, or Bun. Adds a Package managers section
to the TypeScript AppHost project structure page with a supported-toolchains
table and a caution callout explaining the Yarn Classic restriction and how
to upgrade.

Documents changes from microsoft/aspire#16792.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Update agent init docs for new interactive flow, skill locations, and dotnet-inspect skill (#827)

* docs: update agent init docs for new interactive flow and locations

- Update ai-coding-agents.mdx to document the new two-phase interactive
  flow: first select skill locations, then select skills to install
- Document the new Standard (.agents/skills/) location supported by
  VS Code, GitHub Copilot, and OpenCode
- Document all four skill locations with their directories
- Document the new dotnet-inspect skill and its file layout
- Update aspire-agent-init.mdx command reference to describe the new
  interactive multi-step setup flow

Documents changes from microsoft/aspire#15022

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: David Pine <david.pine@microsoft.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>

* [docs] AppHost eventing: document OnBeforeStart, OnBeforePublish, OnAfterPublish builder extension methods (#821)

* docs: add OnBeforeStart, OnBeforePublish, OnAfterPublish builder extension methods

Documents the new convenience extension methods added in microsoft/aspire#14119
that allow subscribing to AppHost-level events directly on IDistributedApplicationBuilder.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Alex Crome <afscrome@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Alex Crome <afscrome@users.noreply.github.com>

* docs: update Microsoft Foundry hosting integration to include deployment resource details

* docs: update TypeScript endpoint property samples (#854)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document duplicate polyglot capability analyzer (#856)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prep aspire.dev for Aspire 13.3 release (May 7, 2026) (#860)

* Prep aspire.dev for Aspire 13.3 release (May 7, 2026)

Cuts the docs site over to 13.3.0 stable. Lands one tooling fix
(partial-class nested types) and the matching renderer change so the
new FoundryModel provider classes surface on the API reference page,
then refreshes every generated data file from the release/13.3 darc
feed (darc-pub-microsoft-aspire-5bd693ae).

Tooling
- PackageJsonGenerator: emit `nestedTypes` (full names of public
  nested types) on every CanonicalType. Roslyn merges partials, so
  GetTypeMembers() picks up nested types contributed by every source
  file (e.g. FoundryModel + FoundryModel.Generated.cs). Filters out
  compiler-generated and non-public types.
- PackageJsonGenerator.Tests: regression test for partial-class
  nested-type collection (13/13 pass).
- update-schemas.ts: new --ref <sha|ref> flag so the aspire-config
  schema can be fetched by SHA when the release tag isn't yet
  published. Defaults to v<version> as before.

Renderer
- csharp-api-markdown.ts and pages/.../[type]/index.astro: render a
  new "Nested Types" section with kind pills and summaries when
  type.nestedTypes is populated. FoundryModel now surfaces all 14
  provider classes (AI21Labs, Anthropic, BlackForestLabs, Cohere,
  Core42, DeepSeek, Local, Meta, Microsoft, MistralAI, OpenAI,
  StabilityAI, XAI, plus the namespace root).

AppHost
- Bump Aspire.AppHost.Sdk and the two PackageReferences from 13.2.0
  to 13.3.0 in src/apphost/Aspire.Dev.AppHost.

Doc sweep (13.2.0 -> 13.3.0)
- support.mdx: 13.3 supported row + 13.2 demoted to out-of-support;
  Last updated badge -> May 7, 2026.
- aspireconf/index.mdx: branding 13.2 -> 13.3.
- Code samples in app-host/typescript-apphost, get-started/aspire-sdk,
  install-cli, add-aspire-existing-app,
  extensibility/multi-language-integration-authoring,
  reference/cli/commands/aspire-{add,init,new},
  integrations/databases/postgres/postgres-host.

Regenerated data
- aspire-integrations.json: 156 packages.
- pkgs/*.json: 94 Aspire packages at 13.3.x (deleted matching
  13.2.0 siblings); CommunityToolkit packages from nuget.org as before.
- ts-modules/*.json: 54 modules.
- twoslash/aspire.d.ts: regenerated bundle (31 DTOs, 29 enums,
  235 handle types).
- samples.json (15), github-stats.json (5),
  schemas/aspire-config.13.3.0.schema.json + index.json.

Tests
- Unit (vitest): 132/132 (one fixture-path bump for the regenerated
  Aspire.Hosting.13.3.0.json fixture).
- .NET: PackageJsonGenerator 13/13, AtsJsonGenerator 5/5.
- Lint: clean.
- Playwright: 112 passed, 6 unrelated cookie-consent failures
  (pre-existing, not touched by this change), 1 flaky WCAG case.

* Fix support page: 13.2.x latest patch is 13.2.4 (April 24, 2026)

The support table incorrectly listed 13.2.3 (April 22, 2026) as the latest 13.2.x patch. Aspire.Hosting 13.2.4 was published to nuget.org on 2026-04-24.

* docs: update CLI command docs for non-interactive options (aspire#16235) (#744)

- aspire update: add --yes/-y and --nuget-config-dir options, remove
  outdated note that non-interactive mode is unsupported
- aspire agent init: add --workspace-root, --skill-locations, and
  --skills options
- aspire new: update description for non-interactive error behavior,
  add --suppress-agent-init option, remove outdated limitation note

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>

* [release/13.3] Restructure VS Code extension page (polyglot + screenshots) (#849)

* Backport: Restructure VS Code extension page for 13.3

Ports the polyglot/13.3 restructure of the VS Code extension docs from docs/vscode-extension-polyglot:

- Restructured aspire-vscode-extension.mdx (intro, Install, Getting started, Scaffold + integrations, Live editor integration with CodeLens/gutter/title-bar buttons, Aspire view, Run/debug/deploy with launch.json examples, Language coverage, Feedback).

- Added code-extension-{codelens,sidebar,debug}{,-light}.png screenshot assets.

- Updated configuration.mdx 'Associate the schema in Visual Studio Code' note to point to the extension.

* Address Copilot review: grammar fixes and remove misleading deploy command from launch example

* Remove redundant intro sentence about live state surfaces

* Wrap Getting started in Steps; mention manual schema fallback for users without the extension

* Correct gutter icon table and editor title button labels to match shipped extension

* Update New Aspire project screenshot to show new template list

* Use distinct dark and light New Aspire project screenshots

* Use distinct light theme image for Aspire panel sidebar

* Use new image for Aspire panel dark theme

* Use new image for Aspire panel light theme

* Remove width=400 on Aspire view image so full window screenshot renders responsively

* Trim transparent padding from screenshots; ignore generated twoslash types

* Use actual dark theme screenshot for Aspire sidebar

* Add debug screenshots (dark+light) and re-trim all extension screenshots

* Remove install + live-editor screenshots

* Move Aspire view screenshot up under Live editor integration

* Replace new project screenshots and trim transparent borders

* Move debug sessions screenshot below launch.json examples

* Caption new project screenshot

* Tighten new project caption

* Remove center alignment from new project caption

* Reword intro lede

* docs: update multi-language integration guide for ATS-first API design (#756)

Documents the getter-only-to-async-method behavior introduced in
microsoft/aspire#16403 and adds a new 'Callback context types and the
ATS-first editor pattern' section explaining:

- How getter-only C# properties map to async methods in generated
  TypeScript SDKs, while mutable-collection properties remain as
  readonly getters
- The ATS-first editor/facade pattern for callback context types
  (EnvironmentEditor, etc.) that should be used instead of
  ExposeProperties = true on callback context classes
- How to define, export, and consume callback extension methods like
  withEnvironmentCallback, withArgsCallback, and withUrls

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add Durable Task Scheduler section to Azure Functions hosting docs (#820)

Documents the new DTS support added in microsoft/aspire#13711.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update TypeScript Dockerfile builder docs (#846)

* Update TypeScript Dockerfile builder docs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Clarify API examples for TypeScript AppHosts

Removed unnecessary note about C# method names in API examples.

* Update documentation for DockerfileBuilderCallbackContext

Clarify the usage of DockerfileBuilderCallbackContext in TypeScript.

* Document TypeScript Docker Compose APIs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add TypeScript Docker integration examples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update src/frontend/src/content/docs/integrations/compute/docker.mdx

Co-authored-by: David Pine <david.pine@microsoft.com>

* Update src/frontend/src/content/docs/app-host/withdockerfile.mdx

Co-authored-by: David Pine <david.pine@microsoft.com>

* Update src/frontend/src/content/docs/deployment/docker-compose.mdx

Co-authored-by: David Pine <david.pine@microsoft.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>

* [docs] Add aspire destroy command reference documentation

* Add aspire destroy command reference documentation

Documents the aspire destroy command including the new requirement
that --yes must be passed when using --non-interactive.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address aspire destroy docs review feedback

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Document aspire destroy Docker Compose output

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>

* docs: update aspire init and add-to-existing-app for skill-driven aspirification (#776)

Document the new two-phase aspire init behavior introduced in microsoft/aspire#15918:
- aspire init now drops a skeleton AppHost + aspire.config.json and installs
  the aspireify agent skill instead of performing full project wiring itself
- The --source and --version options are deprecated
- Update aspire-init.mdx: new description, aspireify skill section, updated examples
- Update add-aspire-existing-app.mdx: explain the two-phase init flow for both
  C# and TypeScript AppHosts

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Pin AppHost to Aspire 13.2.4

* Document Azure HTTPS endpoint upgrades (#867)

Covers WithHttpsUpgrade behavior for Azure App Service and Azure Container Apps deployment docs. References microsoft/aspire.dev#833 item 19 and microsoft/aspire#16060.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document HTTP command result mode (#866)

* docs: document HTTP command result mode

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: use Node app in HTTP command TS sample

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: chain TypeScript HTTP command sample

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add Express HTTP command endpoint sample

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document ASPIRE_ENVIRONMENT for AppHost (#868)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update MCP docs for Aspire 13.3 (#865)

Align the AI agent and MCP CLI reference docs with the Aspire 13.3 command surface, including current skill options and standalone dashboard MCP options.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Document unified withEnvironment API and IExpressionValue for multi-language AppHosts (Aspire 13.3) (#814)

* Document unified withEnvironment API and IExpressionValue for multi-language AppHosts

- Update multi-language-integration-authoring.mdx:
  - Expand the union types example to show the full withEnvironment union
    including IExpressionValue
  - Add new IExpressionValue section explaining the interface, its role, and
    how to implement it in custom types
  - Add migration table from old withEnvironment* aliases to unified API
  - Update supported types table to list IExpressionValue
- Update aspire-13-3.mdx whats-new with a new section covering the unified
  withEnvironment API, the IExpressionValue interface, and the deprecation
  of the per-kind alias methods

Documents changes from microsoft/aspire#15649

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address withEnvironment docs review

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: maddymontaquila <12660687+maddymontaquila@users.noreply.github.com>

* Document MaxResourceCount telemetry limit option for dashboard (#797)

Add MaxResourceCount to the TelemetryLimits configuration table in the
dashboard configuration docs. This new option (default 10,000) limits the
number of resources tracked by the dashboard to prevent unbounded memory
growth in long-running sessions with dynamic services or high-cardinality
peer addresses.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Azure AI Foundry Prompt Agents Support (#853)

* expand hosted agents, adds prompt agents

* feat: Add light mode images for agent send message and responses in Azure AI Foundry integration

Co-authored-by: Copilot <copilot@github.com>

* changes images

* adds typescript samples

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>

* Port AppHost path config docs to release/13.3 (#870)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [docs] Add AddNextJsApp and publish methods for JavaScript apps (Aspire 13.3) (#767)

* docs: add TypeScript AppHost samples for JavaScript apps

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: use JavaScript backends in JS app samples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: reorganize JavaScript deployment guidance

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: align JavaScript integration apphost samples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add JavaScript AppHost language selector

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: use synced tabs for JavaScript AppHost samples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: update AppHost language tab guidance

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: surface JavaScript deployment guidance earlier

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: clarify build-only JavaScript resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: document build-only validation escape hatch

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Maddy Montaquila <maleger@microsoft.com>

* Update Kubernetes docs to use WithHelm for Helm chart options (#858)

Replace deprecated WithProperties(k8s => k8s.HelmChartName = ...) examples
with the consolidated WithHelm(helm => helm.WithChartName(...)) API introduced
in microsoft/aspire#16759 / microsoft/aspire#16802.

Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [whats-new] Expand 13.3 release notes (#838)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Mitch Denny <mitch@mitchdenny.com>
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>

* docs: update dashboard docs to reflect removal of in-dashboard GitHub Copilot (#808)

Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Maddy Montaquila <maleger@microsoft.com>

* Remove installation images for Aspire extension (#875)

Removed images related to installing the Aspire extension and updated the documentation accordingly.

This is breaking the release/13.3 build.

* Simplify MaxResourceCount description in documentation

Removed the explanation for MaxResourceCount limit in the dashboard configuration documentation…
@github-actions github-actions Bot locked and limited conversation to collaborators May 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add support for aspire do --list-steps flag

4 participants