Skip to content

[release/13.4] Update Foundry hosted agent builder APIs - #17669

Merged
David Fowler (davidfowl) merged 15 commits into
release/13.4from
backport/pr-17545-to-release/13.4
May 29, 2026
Merged

[release/13.4] Update Foundry hosted agent builder APIs#17669
David Fowler (davidfowl) merged 15 commits into
release/13.4from
backport/pr-17545-to-release/13.4

Conversation

@davidfowl

Copy link
Copy Markdown
Collaborator

Backport of #17545 to release/13.4

/cc Tommaso Stocchi (@tommasodotNET)

Customer Impact

Customers using Aspire Foundry hosted agents get the updated project-first API and correct hosted-agent deployment configuration behavior. Local run mode no longer creates an unnecessary default Azure Container Registry resource.

Testing

  • Aspire.Hosting.Foundry.Tests: 92/92 passing on the release/13.4 backport branch.
  • Source PR updated Foundry Azure/deployment/polyglot coverage and generated baselines.

Risk

Low. The changes are localized to Aspire.Hosting.Foundry hosted-agent/project APIs and generated polyglot/API baselines, but they do affect public/generated API surface.

Regression?

No.

Consolidate AsHostedAgent usage, update Foundry icons and command rendering, and refresh playgrounds, samples, and tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Conditionally require/provision Foundry project ACR only for hosted-agent publish or explicit registry override, add regression tests for run/publish paths, and align PromptAgent Send Message icon with ChatSparkle.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid allocating a fresh JsonSerializerOptions per Send Message command
invocation, which also defeats JsonSerializer's per-options metadata cache.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- AsHostedAgent(project, HostedAgentOptions?) is now the polyglot-exported overload
- Action<HostedAgentConfiguration> overload kept as .NET-only for advanced use
- HostedAgentOptions exposes Description, Cpu, Memory, Metadata, EnvironmentVariables
- Polyglot users now get .asHostedAgent(project, { ... }) instead of
.asHostedAgent({ project, configure: async cfg => ... })
- Updated TypeScript, Go, and Java polyglot apphost fixtures to new shape
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
HostedAgentOptions exists only to give polyglot SDK generators a clean
options-bag shape. .NET callers should keep using the richer
Action<HostedAgentConfiguration> overload, so both the DTO and the
overload that takes it are now internal.
To avoid C# overload ambiguity between '.AsHostedAgent(project)' (which
should bind to the public Action overload) and the internal options
overload, the internal method is renamed to AsHostedAgentForExport. The
polyglot-facing name stays as 'asHostedAgent' via [AspireExport(MethodName)].
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove <remarks> blocks from HostedAgentOptions and AsHostedAgentForExport
that were flowing into the generated TypeScript/Go/Java SDK JSDoc and
including C#-only implementation notes plus broken <see cref> renderings
(e.g. \`AsHostedAgent\`\`1). The polyglot codegen concatenates
<summary>+<remarks>, so any C#-implementation chatter pollutes the
generated SDK docs. Replace with plain // source comments that stay in C#.
Also fix the TypeScript polyglot fixture to match the actual generated
signature: when an extension method takes a single optional DTO parameter,
the codegen wraps it in an options bag, so the call shape is
asHostedAgent(project, { options: { ... } }) — not the flat
asHostedAgent(project, { ... }) shape.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mark HostedAgentOptions as an ATS DTO so polyglot SDK generation treats it as a JSON value object instead of a live exported handle. Update the TypeScript validation fixture to use the generated flat options shape.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update Go and Java Foundry polyglot AppHosts to match the generated HostedAgentOptions DTO and AsHostedAgent optional-parameter shapes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Double literals for hosted agent CPU and memory options so the generated Java DTO setters compile.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regenerate the Foundry ATS and API baselines so the release branch backport exposes the hosted-agent options export and drops the stale withComputeEnvironmentExecutable surface.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

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

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

Or

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Backport to release/13.4 of the Foundry hosted-agent API updates in Aspire.Hosting.Foundry, moving to a clearer project-first AsHostedAgent API shape for polyglot SDKs and adjusting deployment behavior so local run mode no longer creates a default Azure Container Registry (ACR) resource.

Changes:

  • Replaces the polyglot-facing WithComputeEnvironment usage with AsHostedAgent across C#/TS/Python/Go/Java fixtures and tests, including a typed HostedAgentOptions DTO for polyglot configuration.
  • Updates Foundry project provisioning logic to only create/provision the default ACR when needed (publish/deploy / hosted-agent scenarios), and updates Azure Bicep snapshots accordingly.
  • Updates Prompt Agent and Hosted Agent dashboard command/icon behavior and adds/adjusts tests to validate the new behavior.
Show a summary per file
FileDescription
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/TypeScript/apphost.mtsUpdates TS fixture to call asHostedAgent(project, options) with DTO-style options.
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Python/apphost.pyUpdates Python fixture to use as_hosted_agent(project=...).
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Java/AppHost.javaUpdates Java fixture to construct/pass HostedAgentOptions and call asHostedAgent(...).
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Go/apphost.goUpdates Go fixture to call AsHostedAgent(...) with options object.
tests/Aspire.Hosting.Foundry.Tests/PromptAgentTests.csAdds test coverage for the Prompt Agent “Send Message” command annotation configuration.
tests/Aspire.Hosting.Foundry.Tests/ProjectResourceTests.csUpdates tests for “no default ACR in run mode” and validates default ACR removal when no hosted agents exist.
tests/Aspire.Hosting.Foundry.Tests/HostedAgentExtensionTests.csUpdates hosted-agent tests to AsHostedAgent and adds coverage for export options + run-mode behaviors.
tests/Aspire.Hosting.Azure.Tests/Snapshots/FoundryExtensionsTests.AddProject_GeneratesEndpointFromParentFoundryApiEndpoint.verified.bicepUpdates snapshot to reflect removal of ACR resources/outputs when not required.
tests/Aspire.Hosting.Azure.Tests/FoundryExtensionsTests.csUpdates Azure Foundry tests to the new hosted-agent API and run-mode ACR behavior.
tests/Aspire.Hosting.Azure.Tests/AzureDeployerTests.csUpdates deploy test to use AsHostedAgent(foundryProject).
tests/Aspire.Deployment.EndToEnd.Tests/FoundryHostedAgentDeploymentTests.csUpdates end-to-end deployment scenario to the new AsHostedAgent(...) API.
src/Aspire.Hosting.Foundry/README.mdUpdates docs sample to use AsHostedAgent(project).
src/Aspire.Hosting.Foundry/PromptAgent/PromptAgentBuilderExtensions.csAdjusts Prompt Agent resource/command icon configuration.
src/Aspire.Hosting.Foundry/Project/ProjectResource.csAdds an annotation used to determine whether default ACR provisioning is required, and removes default registry when not needed.
src/Aspire.Hosting.Foundry/Project/ProjectBuilderExtension.csCreates default ACR only in publish mode; provisions ACR dependencies only when required/overridden.
src/Aspire.Hosting.Foundry/HostedAgent/HostedAgentOptions.csIntroduces internal DTO used for polyglot configuration (subset of HostedAgentConfiguration).
src/Aspire.Hosting.Foundry/HostedAgent/HostedAgentBuilderExtension.csImplements the project-first hosted-agent API (AsHostedAgent) and improves run-mode dashboard command result handling.
src/Aspire.Hosting.Foundry/FoundryExtensions.csAdds resource icons for Foundry resources/deployments (dashboard UX).
src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.csUpdates generated public API surface to reflect the new hosted-agent API shape and other generated deltas.
src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.ats.txtUpdates ATS surface to include HostedAgentOptions and the new exported hosted-agent entrypoint.
playground/FoundryAgents/FoundryAgents.AppHost/AppHost.csUpdates playground AppHost to use AsHostedAgent(project).
playground/FoundryAgentEnterprise/FoundryAgentEnterprise.AppHost/AppHost.csUpdates enterprise playground AppHost to use the new hosted-agent API and removes redundant references.

Copilot's findings

  • Files reviewed: 22/22 changed files
  • Comments generated: 2

Comment on lines 27 to 31
/// <remarks>
/// In run mode, this configures the resource with hosted agent endpoints, health checks,
/// and OpenTelemetry settings. In publish mode, the resource is deployed as a hosted agent
/// in Microsoft Foundry.
/// This method applies in run mode. It configures the resource with the hosted agent responses endpoint,
/// a dashboard command for sending messages to the agent, and OpenTelemetry environment variables expected
/// by the Microsoft Foundry agent server SDK.
/// </remarks>
.AsHostedAgent(project);
```

In run mode, the agent runs locally with health check endpoints and OpenTelemetry instrumentation. In publish mode, the agent is deployed as a hosted agent in Microsoft Foundry.
@github-actions

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 108 passed, 0 failed, 2 unknown (commit 9f9e964)

View all recordings
StatusTestRecordingJobArtifacts
AddPackageInteractiveWhileAppHostRunningDetachedRecording#78547916719Logs
AddPackageWhileAppHostRunningDetachedRecording#78547916719Logs
AgentCommands_AllHelpOutputs_AreCorrectRecording#78547915722Logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkillsRecording#78547915722Logs
AgentInitCommand_MigratesDeprecatedConfigRecording#78547915722Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterAppRecording#78547916177Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhostRecording#78547916177Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_IsolatedRecording#78547916177Logs
AllPublishMethodsBuildDockerImagesRecording#78547916226Logs
AspireAddAndStartWorkAgainstLegacyAppHostTsRecording#78547915635Logs
AspireAddPackageVersionToDirectoryPackagesPropsRecording#78547916240Logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHostRecording#78547915614Logs
AspireInitWithExistingAppHostDirRecreatesMissingNuGetConfigAndPreservesFilesRecording#78547915713Logs
AspireInitWithSolutionFileGeneratesAppHostThatBuildsAgainstChannelHiveRecording#78547915713Logs
AspireStartUpdatesStaleTypeScriptAppHostPathRecording#78547916168Logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesPropsRecording#78547916240Logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrentRecording#78547916240Logs
Banner_DisplayedOnFirstRunRecording#78547916369Logs
Banner_DisplayedWithExplicitFlagRecording#78547916369Logs
Banner_NotDisplayedWithNoLogoFlagRecording#78547916369Logs
CertificatesClean_RemovesCertificatesRecording#78547915866Logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificateRecording#78547915866Logs
CertificatesTrust_WithUntrustedCert_TrustsCertificateRecording#78547915866Logs
ConfigSetGet_CreatesNestedJsonFormatRecording#78547915720Logs
CreateAndRunAspireStarterProjectRecording#78547916104Logs
CreateAndRunAspireStarterProjectWithBundleRecording#78547915617Logs
CreateAndRunEmptyAppHostProjectRecording#78547915973Logs
CreateAndRunJavaEmptyAppHostProjectRecording#78547916479Logs
CreateAndRunJsReactProjectRecording#78547916636Logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrlsRecording#78547916104Logs
CreateAndRunPythonReactProjectRecording#78547916440Logs
CreateAndRunTypeScriptEmptyAppHostProjectRecording#78547916568Logs
CreateAndRunTypeScriptStarterProjectRecording#78547915863Logs
CreateJavaAppHostWithViteAppRecording#78547916329Logs
CreateTypeScriptAppHostWithViteApp_AllowsGuestAppPackageManagerToDifferRecording#78547916577Logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchainRecording#78547916577Logs
DashboardRunWithAgentMcpListTracesReturnsNoTracesRecording#78547916296Logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhostRecording#78547916296Logs
DashboardRunWithOtelTracesReturnsNoTracesRecording#78547916296Logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhostRecording#78547916296Logs
DeployK8sBasicApiServiceRecording#78547915576Logs
DeployK8sWithExternalHelmChartRecording#78547916206Logs
DeployK8sWithGarnetRecording#78547915887Logs
DeployK8sWithMongoDBRecording#78547915627Logs
DeployK8sWithMySqlRecording#78547916561Logs
DeployK8sWithPostgresRecording#78547916595Logs
DeployK8sWithRabbitMQRecording#78547916307Logs
DeployK8sWithRedisRecording#78547916297Logs
DeployK8sWithSqlServerRecording#78547915650Logs
DeployK8sWithValkeyRecording#78547916023Logs
DeployTypeScriptAppToKubernetesRecording#78547916588Logs
DescribeCommandResolvesReplicaNamesRecording#78547916512Logs
DescribeCommandShowsRunningResourcesRecording#78547916512Logs
DetachFormatJsonProducesValidJsonRecording#78547916681Logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstanceRecording#78547916681Logs
DoPublishAndDeployListStepsWorkRecording#78547916749Logs
DocsCommand_RendersInteractiveMarkdownFromLocalSourceRecording#78547916630Logs
DoctorCommand_DetectsDeprecatedAgentConfigRecording#78547915722Logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchainRecording#78547916696Logs
DoctorCommand_WithSslCertDir_ShowsTrustedRecording#78547916696Logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrustedRecording#78547916696Logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidanceRecording#78547915615Logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchainRecording#78547916577Logs
GlobalMigration_HandlesCommentsAndTrailingCommasRecording#78547915720Logs
GlobalMigration_HandlesMalformedLegacyJsonRecording#78547915720Logs
GlobalMigration_PreservesAllValueTypesRecording#78547915720Logs
GlobalMigration_SkipsWhenNewConfigExistsRecording#78547915720Logs
GlobalSettings_MigratedFromLegacyFormatRecording#78547915720Logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidanceRecording#78547915615Logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectoryRecording#78547916577Logs
InteractiveCSharpInitCreatesExpectedFilesRecording#78547915802Logs
InvalidAppHostPathWithComments_IsHealedOnRunRecording#78547915679Logs
JavaScriptHostingApisRunFromTypeScriptAppHostRecording#78547916226Logs
LatestCliCanStartStableChannelAppHostRecording#78547916104Logs
LatestCliCanStartStableChannelTypeScriptAppHostRecording#78547916104Logs
LegacySettingsMigration_AdjustsRelativeAppHostPathRecording#78547916168Logs
LogsCommandShowsResourceLogsRecording#78547916417Logs
OtelLogsReturnsStructuredLogsFromStarterAppRecording#78547916229Logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolatedRecording#78547916229Logs
PsCommandListsRunningAppHostRecording#78547916639Logs
PsFormatJsonOutputsOnlyJsonToStdoutRecording#78547916639Logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifactsRecording#78547916574Logs
PublishWithConfigureEnvFileUpdatesEnvOutputRecording#78547916574Logs
PublishWithDockerComposeServiceCallbackSucceedsRecording#78547916574Logs
PublishWithoutOutputPathUsesAppHostDirectoryDefaultRecording#78547916574Logs
ResourceCommand_FailedExecution_DisplaysAppHostLogPathAndLogContainsEntriesRecording#78547916034Logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutputRecording#78547916034Logs
RestoreGeneratesSdkFilesRecording#78547915907Logs
RestoreGeneratesSdkFiles_WithConfiguredToolchainRecording#78547916236Logs
RestoreRefreshesGeneratedSdkAfterAddingIntegrationRecording#78547916236Logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypesRecording#78547916040Logs
RunFromParentDirectory_UsesExistingConfigNearAppHostRecording#78547915689Logs
RunReportsSyntaxErrorsForDotNetAppHostRecording#78547916612Logs
RunReportsSyntaxErrorsForTypeScriptAppHostRecording#78547916612Logs
SecretCrudOnDotNetAppHostRecording#78547915838Logs
SecretCrudOnTypeScriptAppHostRecording#78547915592Logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannelsRecording#78547916401Logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssetsRecording#78547915770Logs
StartReportsSyntaxErrorsForDotNetAppHostRecording#78547916612Logs
StartReportsSyntaxErrorsForTypeScriptAppHostRecording#78547916612Logs
StopAllAppHostsFromAppHostDirectoryRecording#78547915936Logs
StopJavaPolyglotAppHostUsingApphostDirectoryRecording#78547916663Logs
StopNonInteractiveSingleAppHostRecording#78547915936Logs
StopTypeScriptPolyglotAppHostUsingApphostDirectoryRecording#78547915684Logs
StopWithNoRunningAppHostExitsSuccessfullyRecording#78547916719Logs
UnAwaitedChainsCompileWithAutoResolvePromisesRecording#78547916236Logs
UpdateProjectChannelToStable_CSharpEmptyAppHost_PreservesAspireConfigChannelRecording#78547916578Logs
UpdateProjectChannelToStable_CSharpSingleFileInit_PreservesAspireConfigChannelRecording#78547916578Logs
UpdateProjectChannelToStable_TypeScriptSingleFileInit_PreservesAspireConfigChannelRecording#78547916578Logs
UpdateProjectChannelToStable_TypeScript_PreviewsStablePackagesAndPreservesChannelRecording#78547916578Logs

📹 Recordings uploaded automatically from CI run #26649968221

@sebastienrosSébastien Ros (sebastienros) added the Servicing-consider Issue for next servicing release review label May 29, 2026
@davidfowl
David Fowler (davidfowl) merged commit 0cbaf82 into release/13.4May 29, 2026
313 checks passed
@davidfowl
David Fowler (davidfowl) deleted the backport/pr-17545-to-release/13.4 branch May 29, 2026 20:20
@microsoft-github-policy-servicemicrosoft-github-policy-serviceBot added this to the 13.4 milestone May 29, 2026
aspire-repo-botBot added a commit to microsoft/aspire.dev that referenced this pull request May 29, 2026
…Agent
Documents the API rename from WithComputeEnvironment/PublishAsHostedAgent to
AsHostedAgent introduced in microsoft/aspire#17669. Updates all code examples,
section headings, and prose in the Azure AI Foundry hosting integration docs to
use the new AsHostedAgent method. Also clarifies that the default Azure Container
Registry is only created in publish mode, not local run mode.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1130

Generated by PR Documentation Check

Rene Bentes Pinto (renebentes) pushed a commit to renebentes/3054 that referenced this pull request Jun 25, 2026
Updated [Aspire.Hosting.PostgreSQL](https://github.com/microsoft/aspire)
from 13.3.5 to 13.4.6.
<details>
<summary>Release notes</summary>
_Sourced from [Aspire.Hosting.PostgreSQL's
releases](https://github.com/microsoft/aspire/releases)._
## 13.4.6
## What's New in Aspire 13.4.6
Patch release for Aspire 13.4 fixing polyglot AppHost code generation
binding when CLI and SDK versions diverge, resource service port
collision in `--isolated` mode, and a MongoDB.Driver dependency update.
### 🐛 Fixes
- 🔗 **Polyglot AppHost code generation silently failed when CLI and SDK
versions diverged** — `Aspire.TypeSystem` used a floating strong-name
`AssemblyVersion` that changed with every build. When the installed
Aspire CLI was built at a different version than the AppHost's SDK, the
CLR couldn't satisfy the strong-name bind and every code generator
(TypeScript, Python, Java, Go, Rust) was silently dropped, surfacing as
`No code generator found for language: <lang>`. The `AssemblyVersion` is
now frozen at a stable constant so any compatible CLI/SDK pair on 13.4
binds successfully. Relates to #​18110 and #​17910.
([#​18160](microsoft/aspire#18160),
`@​sebastienros`)
- 🔌 **Multiple AppHosts started with `--isolated` collided on the
resource service port** — Both instances tried to bind to the same fixed
port from `ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`, causing an "address
already in use" error on the second instance. `DashboardServiceHost` now
binds to port 0 on loopback when `RandomizePorts` is true (set by
`--isolated`), letting the OS assign a unique port per instance.
([#​18341](microsoft/aspire#18341), `@​JamesNK`)
- 🍃 **MongoDB.Driver updated to 3.9.0** — Removes a wrongly pinned
`SharpCompress` transitive dependency and uses the corrected `Snappier`
transitive. Fixes #​17981.
([#​18279](microsoft/aspire#18279),
`@​Falco20019`)
### 🏷️ Housekeeping
- 🚀 Bumped branding to 13.4.6
([#​18343](microsoft/aspire#18343))
---
_Full Changelog:
[v13.4.5...v13.4.6](microsoft/aspire@v13.4.5...v13.4.6)_
_Full commit:
[87fe259e4fc244c599019a7b1304c85a1488f248](microsoft/aspire@87fe259e4fc244c599019a7b1304c85a1488f248)_
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27855270514) ·
131 AIC · ⌖ 13.5 AIC · ⊞ 37.4K
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.60, model:
claude-sonnet-4.6, id: 27855270514, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27855270514 -->
## 13.4.5
## What's New in Aspire 13.4.5
Patch release for Aspire 13.4 clearing a transitive MessagePack security
advisory, tightening CLI validation for Playwright configuration, and
adding coding-agent detection to CLI telemetry.
### 🐛 Fixes
- 🛡️ **Bumped StreamJsonRpc to 2.25.29 to clear the MessagePack
GHSA-hv8m-jj95-wg3x (CVE-2026-48109) NU1903 advisory** — The transitive
MessagePack 2.5.192 dependency pulled in via StreamJsonRpc 2.22.23 fell
within the advisory's vulnerable LZ4 decompression range. Aspire does
not use `MessagePackFormatter` or LZ4 — all StreamJsonRpc calls use
`SystemTextJsonFormatter` over local Unix sockets — so the vulnerability
was not reachable in practice. The bump clears the NU1903 warning for
consumers of the `Aspire.Hosting` package.
([#​18204](microsoft/aspire#18204),
`@​mitchdenny`)
- 🎭 **`playwrightCliVersion` values that are not valid SemVer 2.0 now
fail fast with a clear diagnostic** — Previously an invalid override
(range expression, dist-tag like `latest`, or a `v`-prefixed string)
would surface as a generic npm resolution failure. The value is now
validated with strict SemVer parsing at startup; an error naming the
configuration key and the offending value is emitted immediately.
([#​18205](microsoft/aspire#18205),
`@​mitchdenny`)
- 🤖 **CLI telemetry now detects and reports the calling coding agent** —
When the Aspire CLI is invoked from inside a known coding agent
environment (GitHub Copilot CLI, VS Code Copilot agent, etc.) the agent
name is included in the main CLI telemetry event. GitHub Copilot CLI is
specifically identified as `copilot-cli`.
([#​18240](microsoft/aspire#18240),
`@​damianedwards`)
### 🏷️ Housekeeping
- 📄 Refreshed the `@​microsoft/aspire-cli` npm package README to be
TypeScript-only — updated examples to the current `ts-starter` template
(`apphost.mts` / `aspire.mjs`), added a backing-services snippet showing
`aspire add` for PostgreSQL and Redis, and documented `aspire dashboard
run` as a standalone dashboard option.
([#​18221](microsoft/aspire#18221), `@​adamint`)
---
_Full Changelog:
[v13.4.4...v13.4.5](microsoft/aspire@v13.4.4...v13.4.5)_
_Full commit:
[73114e86c64aeb9f3f3c7da8e37df1ae4281b27e](microsoft/aspire@73114e86c64aeb9f3f3c7da8e37df1ae4281b27e)_
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27667814104/agentic_workflow)
· ● 4.4M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27667814104, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27667814104 -->
## 13.4.4
## What's New in Aspire 13.4.4
Patch release for Aspire 13.4 with improved DCP connection reliability
during request execution and consistent `ExcludeFromMcp()` filtering
across all CLI MCP tools.
### 🐛 Fixes
* 🔌 **DCP requests could fail permanently when the connection dropped
mid-request** — If the underlying DCP channel closed while a request was
in flight, the error was surfaced directly instead of being retried.
Reconnection is now attempted as part of the DCP request retry path so
transient disconnections recover automatically without surfacing errors.
([#​18096](microsoft/aspire#18096),
`@​karolz-ms`)
* 🔍 **Resources marked with `ExcludeFromMcp()` were not consistently
filtered from CLI MCP tools** — Resources with the
`resource.excludeFromMcp` property were not excluded uniformly from all
CLI MCP tool results. `list_resources`, `list_console_logs`,
`execute_resource_command`, `list_structured_logs`, `list_traces`, and
`list_trace_structured_logs` all now honor the exclusion, preventing
excluded resources and their telemetry from appearing in agent context.
([#​18150](microsoft/aspire#18150), `@​JamesNK`)
### 🏷️ Housekeeping
* 📦 Improved npm CLI package metadata and hardened npm publish
validation in the release pipeline.
([#​18093](microsoft/aspire#18093),
`@​adamratzman`)
* * *
_Full Changelog:
[v13.4.3...v13.4.4](microsoft/aspire@v13.4.3...v13.4.4)_
_Full commit:
[ccc566c5ab3285c9beb8f38ede34734bb477c029](microsoft/aspire@ccc566c5ab3285c9beb8f38ede34734bb477c029)_
## 13.4.3
## What's New in Aspire 13.4.3
Patch release for Aspire 13.4 with a fix for persistent container
endpoint allocation regressions introduced in 13.4.
### 🐛 Fixes
- 🔌 **Persistent container endpoints had incorrect default behavior** —
Persistent containers were defaulting to proxyless endpoint behavior
instead of the proxied behavior used by normal containers. This caused
integrations that depend on endpoint allocation before resource startup
(such as the KeyVault emulator) to fail. Persistent containers now
default to proxied endpoints matching normal container behavior; opt out
with `isProxied: false` or `WithEndpointProxySupport(false)`. Proxyless
container endpoints with only a `targetPort` specified now also resolve
immediately to that port instead of waiting for delayed allocation.
(#​17960, `@​danegsta`)
### 🏷️ Housekeeping
- 🛠️ Unblocked WinGet manifest publishing on locked-down 1ES agents and
updated manifest tags (#​17958)
---
*Full Changelog:
microsoft/aspire@v13.4.2...v13.4.3*
*Full commit:
[4f218933552e18ff2874d1b6d5dc3fe671e3b6d9](microsoft/aspire@4f218933552e18ff2874d1b6d5dc3fe671e3b6d9)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27173824611/agentic_workflow)
· ● 4.7M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27173824611, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27173824611 -->
## 13.4.2
## What's New in Aspire 13.4.2
Patch release for Aspire 13.4 with a fix for Redis persistent container
deadlock on startup when using TLS.
### 🐛 Fixes
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
### 🏷️ Housekeeping
- 🚀 Bumped branding to 13.4.2 (#​17876)
---
*Full Changelog:
microsoft/aspire@v13.4.1...v13.4.2*
*Full commit:
[d7d0b6759ce4b936c76bc4775814d27db560dd6d](microsoft/aspire@d7d0b6759ce4b936c76bc4775814d27db560dd6d)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26920328099/agentic_workflow)
· ● 5M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26920328099, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26920328099 -->
## 13.4.1
## What's New in Aspire 13.4.1
Patch release for Aspire 13.4 with fixes for explicit-start resource
lifecycle callbacks, Redis persistent container startup, proxyless
endpoint allocation, and a duplicated `profiles` block in the empty C#
AppHost template.
### 🐛 Fixes
- ⏱️ **Explicit-start resources triggered lifecycle callbacks too
early** — Session-scoped resources marked with `WithExplicitStart()`
were having their execution configuration callbacks (environment
variables, arguments, certificates) evaluated at AppHost startup instead
of at manual start. This meant user-interaction callbacks such as
`WithEnvironment(ctx => PromptForValueAsync(...))` were called before
the user triggered the resource. DCP registration is now deferred until
the user manually starts the resource; persistent explicit-start
resources still register immediately but patch the existing DCP record
to `Start = true` rather than deleting and recreating it. Fixes #​17813.
(#​17825, backported via #​17826, `@​danegsta`)
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
- 🔌 **Proxyless container endpoint could hang when resolved before
container creation** — Referencing a proxyless container endpoint in an
environment variable callback (before the container port spec was
finalized) could deadlock. An on-demand allocation path now commits the
target port as the fallback host port in that case; once
`BuildContainerPorts` runs, normal DCP dynamic port assignment takes
over for any later resolution. (#​17851, backported via #​17859,
`@​danegsta`)
- 📄 **Empty C# AppHost template emitted duplicate `profiles` block** —
`aspire new aspire-empty` on 13.4 produced an `aspire.config.json` with
a `profiles` block that duplicated the content already present in
`apphost.run.json`, causing redundant launch configuration. The embedded
template now contains only the required `appHost.path` binding; profile
configuration lives exclusively in `apphost.run.json`. Fixes #​17660.
(#​17781, backported via #​17820, `@​mitchdenny`)
### 🏷️ Housekeeping
- 📦 Added Aspire CLI npm package to the release pipeline so the npm
distribution is published as part of stable releases. (#​17297,
backported via #​17766, `@​adamint`)
- 🚀 Bumped branding to 13.4.1 (#​17819)
---
*Full Changelog:
microsoft/aspire@v13.4.0...v13.4.1*
*Full commit:
[cf985fa817dd5863e7f62eb74fa1725ab5069ed2](microsoft/aspire@cf985fa817dd5863e7f62eb74fa1725ab5069ed2)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 1.0.40
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 3.9M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26909313891, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26909313891 -->
## 13.4.0
# Aspire 13.4.0
Aspire 13.4 brings major improvements to Foundry hosted agents, the
Aspire skills system, CLI reliability, and TypeScript AppHost stability
— with cross-compute-environment deployment now working end-to-end and
**TypeScript AppHost support — Aspire's polyglot story — reaching
general availability (GA)**.
## Highlights
- 🎉 **TypeScript AppHost is now GA** — First introduced as a preview in
an earlier version of Aspire, the TypeScript AppHost — Aspire's polyglot
story — has reached the quality bar for general availability and is now
officially supported for production use alongside C#. As part of GA, the
experimental markers on the Azure TypeScript AppHost (ATS) APIs have
been removed and the ATS surface area is stable for 13.4.
- 🤖 **Foundry hosted agents** — Protocol selection (`responses` /
`invocations`) is now configurable from both C# and TypeScript AppHosts.
Cross-compute-environment deployments (e.g., a Foundry hosted agent + an
AKS consumer) now wire up correctly: endpoint resolution and the
required **Azure AI User** RBAC role assignment on the Foundry account
are generated automatically — no manual `az role assignment create`
steps needed.
- 🛠️ **Aspire skills catalog from bundle** — `aspire agent init` now
drives its installable skill catalog from the bundle manifest, surfacing
all six bundled skills (previously only three were visible). An embedded
snapshot means the full catalog is available even in airgapped /
disconnected environments.
- 🔧 **CLI reliability** — Multiple CLI fixes: implicit-channel discovery
restored, `aspire stop` no longer falsely reports failure on Unix,
`aspire ps` no longer includes raw resource data (use `aspire describe`
for detailed state), `aspire new` prefers the current CLI template
version, friendly error for `aspire do --list-steps` without a step
argument, and improved `--search` option description with documentation
link.
- ⌨️ **TypeScript AppHost** — Fixed a deadlock that occurred when lazy
options callbacks invoked async methods; dev-localhost resource service
URLs are now accepted for local development without extra configuration.
- 📊 **Dashboard** — Summary log formatting improved for readability,
`dotnet watch` dashboard auto-launch signal restored, and dynamic-port
handling fixed for `DistributedApplicationTestingBuilder`.
- ☸️ **Kubernetes** — The Helm CLI minimum version (≥ 4.2.0) is now
validated before a Kubernetes deploy, giving a clear error instead of a
cryptic failure.
- ⚠️ **`Aspire.Hosting.Blazor` ships as preview in 13.4** — A packaging
issue with the Blazor gateway scripts means the package is intentionally
marked preview for this release. Full stable support is targeted for
13.5.
## ⚠️ Notable changes
- `aspire ps` no longer includes raw resource data in its output. Use
`aspire describe <resource>` to inspect detailed resource state.
- Foundry hosted agent builder API shape updated — see
[#​17545](microsoft/aspire#17545) and
[#​17669](microsoft/aspire#17669) for the
updated C# and TypeScript signatures.
- `Aspire.Hosting.Blazor` is preview-versioned in 13.4
(`SuppressFinalPackageVersion=true`). A fix for the `addBlazorGateway`
gateway script resolution error in TypeScript AppHosts is tracked in
[#​17685](microsoft/aspire#17685).
## 📖 Learn more
For the full details on everything in this release, check out the
[What's new in Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/)
documentation.
Thank you to all the community contributors who helped make Aspire 13.4
possible! 💜
---
*Full Changelog:
microsoft/aspire@v13.3.5...v13.4.0*
*Full commit:
[becb48e2d61099e35ae336d527d3875e928d6594](microsoft/aspire@becb48e2d61099e35ae336d527d3875e928d6594)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26779980139/agentic_workflow)
· ● 6.5M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26779980139, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26779980139 -->
Commits viewable in [compare
view](microsoft/aspire@v13.3.5...v13.4.6).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Rene Bentes Pinto (renebentes) pushed a commit to renebentes/3054 that referenced this pull request Jun 25, 2026
…to 13.4.6 (#208)
Updated
[Aspire.Npgsql.EntityFrameworkCore.PostgreSQL](https://github.com/microsoft/aspire)
from 13.3.5 to 13.4.6.
<details>
<summary>Release notes</summary>
_Sourced from [Aspire.Npgsql.EntityFrameworkCore.PostgreSQL's
releases](https://github.com/microsoft/aspire/releases)._
## 13.4.6
## What's New in Aspire 13.4.6
Patch release for Aspire 13.4 fixing polyglot AppHost code generation
binding when CLI and SDK versions diverge, resource service port
collision in `--isolated` mode, and a MongoDB.Driver dependency update.
### 🐛 Fixes
- 🔗 **Polyglot AppHost code generation silently failed when CLI and SDK
versions diverged** — `Aspire.TypeSystem` used a floating strong-name
`AssemblyVersion` that changed with every build. When the installed
Aspire CLI was built at a different version than the AppHost's SDK, the
CLR couldn't satisfy the strong-name bind and every code generator
(TypeScript, Python, Java, Go, Rust) was silently dropped, surfacing as
`No code generator found for language: <lang>`. The `AssemblyVersion` is
now frozen at a stable constant so any compatible CLI/SDK pair on 13.4
binds successfully. Relates to #​18110 and #​17910.
([#​18160](microsoft/aspire#18160),
`@​sebastienros`)
- 🔌 **Multiple AppHosts started with `--isolated` collided on the
resource service port** — Both instances tried to bind to the same fixed
port from `ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`, causing an "address
already in use" error on the second instance. `DashboardServiceHost` now
binds to port 0 on loopback when `RandomizePorts` is true (set by
`--isolated`), letting the OS assign a unique port per instance.
([#​18341](microsoft/aspire#18341), `@​JamesNK`)
- 🍃 **MongoDB.Driver updated to 3.9.0** — Removes a wrongly pinned
`SharpCompress` transitive dependency and uses the corrected `Snappier`
transitive. Fixes #​17981.
([#​18279](microsoft/aspire#18279),
`@​Falco20019`)
### 🏷️ Housekeeping
- 🚀 Bumped branding to 13.4.6
([#​18343](microsoft/aspire#18343))
---
_Full Changelog:
[v13.4.5...v13.4.6](microsoft/aspire@v13.4.5...v13.4.6)_
_Full commit:
[87fe259e4fc244c599019a7b1304c85a1488f248](microsoft/aspire@87fe259e4fc244c599019a7b1304c85a1488f248)_
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27855270514) ·
131 AIC · ⌖ 13.5 AIC · ⊞ 37.4K
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.60, model:
claude-sonnet-4.6, id: 27855270514, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27855270514 -->
## 13.4.5
## What's New in Aspire 13.4.5
Patch release for Aspire 13.4 clearing a transitive MessagePack security
advisory, tightening CLI validation for Playwright configuration, and
adding coding-agent detection to CLI telemetry.
### 🐛 Fixes
- 🛡️ **Bumped StreamJsonRpc to 2.25.29 to clear the MessagePack
GHSA-hv8m-jj95-wg3x (CVE-2026-48109) NU1903 advisory** — The transitive
MessagePack 2.5.192 dependency pulled in via StreamJsonRpc 2.22.23 fell
within the advisory's vulnerable LZ4 decompression range. Aspire does
not use `MessagePackFormatter` or LZ4 — all StreamJsonRpc calls use
`SystemTextJsonFormatter` over local Unix sockets — so the vulnerability
was not reachable in practice. The bump clears the NU1903 warning for
consumers of the `Aspire.Hosting` package.
([#​18204](microsoft/aspire#18204),
`@​mitchdenny`)
- 🎭 **`playwrightCliVersion` values that are not valid SemVer 2.0 now
fail fast with a clear diagnostic** — Previously an invalid override
(range expression, dist-tag like `latest`, or a `v`-prefixed string)
would surface as a generic npm resolution failure. The value is now
validated with strict SemVer parsing at startup; an error naming the
configuration key and the offending value is emitted immediately.
([#​18205](microsoft/aspire#18205),
`@​mitchdenny`)
- 🤖 **CLI telemetry now detects and reports the calling coding agent** —
When the Aspire CLI is invoked from inside a known coding agent
environment (GitHub Copilot CLI, VS Code Copilot agent, etc.) the agent
name is included in the main CLI telemetry event. GitHub Copilot CLI is
specifically identified as `copilot-cli`.
([#​18240](microsoft/aspire#18240),
`@​damianedwards`)
### 🏷️ Housekeeping
- 📄 Refreshed the `@​microsoft/aspire-cli` npm package README to be
TypeScript-only — updated examples to the current `ts-starter` template
(`apphost.mts` / `aspire.mjs`), added a backing-services snippet showing
`aspire add` for PostgreSQL and Redis, and documented `aspire dashboard
run` as a standalone dashboard option.
([#​18221](microsoft/aspire#18221), `@​adamint`)
---
_Full Changelog:
[v13.4.4...v13.4.5](microsoft/aspire@v13.4.4...v13.4.5)_
_Full commit:
[73114e86c64aeb9f3f3c7da8e37df1ae4281b27e](microsoft/aspire@73114e86c64aeb9f3f3c7da8e37df1ae4281b27e)_
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27667814104/agentic_workflow)
· ● 4.4M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27667814104, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27667814104 -->
## 13.4.4
## What's New in Aspire 13.4.4
Patch release for Aspire 13.4 with improved DCP connection reliability
during request execution and consistent `ExcludeFromMcp()` filtering
across all CLI MCP tools.
### 🐛 Fixes
* 🔌 **DCP requests could fail permanently when the connection dropped
mid-request** — If the underlying DCP channel closed while a request was
in flight, the error was surfaced directly instead of being retried.
Reconnection is now attempted as part of the DCP request retry path so
transient disconnections recover automatically without surfacing errors.
([#​18096](microsoft/aspire#18096),
`@​karolz-ms`)
* 🔍 **Resources marked with `ExcludeFromMcp()` were not consistently
filtered from CLI MCP tools** — Resources with the
`resource.excludeFromMcp` property were not excluded uniformly from all
CLI MCP tool results. `list_resources`, `list_console_logs`,
`execute_resource_command`, `list_structured_logs`, `list_traces`, and
`list_trace_structured_logs` all now honor the exclusion, preventing
excluded resources and their telemetry from appearing in agent context.
([#​18150](microsoft/aspire#18150), `@​JamesNK`)
### 🏷️ Housekeeping
* 📦 Improved npm CLI package metadata and hardened npm publish
validation in the release pipeline.
([#​18093](microsoft/aspire#18093),
`@​adamratzman`)
* * *
_Full Changelog:
[v13.4.3...v13.4.4](microsoft/aspire@v13.4.3...v13.4.4)_
_Full commit:
[ccc566c5ab3285c9beb8f38ede34734bb477c029](microsoft/aspire@ccc566c5ab3285c9beb8f38ede34734bb477c029)_
## 13.4.3
## What's New in Aspire 13.4.3
Patch release for Aspire 13.4 with a fix for persistent container
endpoint allocation regressions introduced in 13.4.
### 🐛 Fixes
- 🔌 **Persistent container endpoints had incorrect default behavior** —
Persistent containers were defaulting to proxyless endpoint behavior
instead of the proxied behavior used by normal containers. This caused
integrations that depend on endpoint allocation before resource startup
(such as the KeyVault emulator) to fail. Persistent containers now
default to proxied endpoints matching normal container behavior; opt out
with `isProxied: false` or `WithEndpointProxySupport(false)`. Proxyless
container endpoints with only a `targetPort` specified now also resolve
immediately to that port instead of waiting for delayed allocation.
(#​17960, `@​danegsta`)
### 🏷️ Housekeeping
- 🛠️ Unblocked WinGet manifest publishing on locked-down 1ES agents and
updated manifest tags (#​17958)
---
*Full Changelog:
microsoft/aspire@v13.4.2...v13.4.3*
*Full commit:
[4f218933552e18ff2874d1b6d5dc3fe671e3b6d9](microsoft/aspire@4f218933552e18ff2874d1b6d5dc3fe671e3b6d9)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27173824611/agentic_workflow)
· ● 4.7M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27173824611, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27173824611 -->
## 13.4.2
## What's New in Aspire 13.4.2
Patch release for Aspire 13.4 with a fix for Redis persistent container
deadlock on startup when using TLS.
### 🐛 Fixes
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
### 🏷️ Housekeeping
- 🚀 Bumped branding to 13.4.2 (#​17876)
---
*Full Changelog:
microsoft/aspire@v13.4.1...v13.4.2*
*Full commit:
[d7d0b6759ce4b936c76bc4775814d27db560dd6d](microsoft/aspire@d7d0b6759ce4b936c76bc4775814d27db560dd6d)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26920328099/agentic_workflow)
· ● 5M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26920328099, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26920328099 -->
## 13.4.1
## What's New in Aspire 13.4.1
Patch release for Aspire 13.4 with fixes for explicit-start resource
lifecycle callbacks, Redis persistent container startup, proxyless
endpoint allocation, and a duplicated `profiles` block in the empty C#
AppHost template.
### 🐛 Fixes
- ⏱️ **Explicit-start resources triggered lifecycle callbacks too
early** — Session-scoped resources marked with `WithExplicitStart()`
were having their execution configuration callbacks (environment
variables, arguments, certificates) evaluated at AppHost startup instead
of at manual start. This meant user-interaction callbacks such as
`WithEnvironment(ctx => PromptForValueAsync(...))` were called before
the user triggered the resource. DCP registration is now deferred until
the user manually starts the resource; persistent explicit-start
resources still register immediately but patch the existing DCP record
to `Start = true` rather than deleting and recreating it. Fixes #​17813.
(#​17825, backported via #​17826, `@​danegsta`)
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
- 🔌 **Proxyless container endpoint could hang when resolved before
container creation** — Referencing a proxyless container endpoint in an
environment variable callback (before the container port spec was
finalized) could deadlock. An on-demand allocation path now commits the
target port as the fallback host port in that case; once
`BuildContainerPorts` runs, normal DCP dynamic port assignment takes
over for any later resolution. (#​17851, backported via #​17859,
`@​danegsta`)
- 📄 **Empty C# AppHost template emitted duplicate `profiles` block** —
`aspire new aspire-empty` on 13.4 produced an `aspire.config.json` with
a `profiles` block that duplicated the content already present in
`apphost.run.json`, causing redundant launch configuration. The embedded
template now contains only the required `appHost.path` binding; profile
configuration lives exclusively in `apphost.run.json`. Fixes #​17660.
(#​17781, backported via #​17820, `@​mitchdenny`)
### 🏷️ Housekeeping
- 📦 Added Aspire CLI npm package to the release pipeline so the npm
distribution is published as part of stable releases. (#​17297,
backported via #​17766, `@​adamint`)
- 🚀 Bumped branding to 13.4.1 (#​17819)
---
*Full Changelog:
microsoft/aspire@v13.4.0...v13.4.1*
*Full commit:
[cf985fa817dd5863e7f62eb74fa1725ab5069ed2](microsoft/aspire@cf985fa817dd5863e7f62eb74fa1725ab5069ed2)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 1.0.40
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 3.9M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26909313891, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26909313891 -->
## 13.4.0
# Aspire 13.4.0
Aspire 13.4 brings major improvements to Foundry hosted agents, the
Aspire skills system, CLI reliability, and TypeScript AppHost stability
— with cross-compute-environment deployment now working end-to-end and
**TypeScript AppHost support — Aspire's polyglot story — reaching
general availability (GA)**.
## Highlights
- 🎉 **TypeScript AppHost is now GA** — First introduced as a preview in
an earlier version of Aspire, the TypeScript AppHost — Aspire's polyglot
story — has reached the quality bar for general availability and is now
officially supported for production use alongside C#. As part of GA, the
experimental markers on the Azure TypeScript AppHost (ATS) APIs have
been removed and the ATS surface area is stable for 13.4.
- 🤖 **Foundry hosted agents** — Protocol selection (`responses` /
`invocations`) is now configurable from both C# and TypeScript AppHosts.
Cross-compute-environment deployments (e.g., a Foundry hosted agent + an
AKS consumer) now wire up correctly: endpoint resolution and the
required **Azure AI User** RBAC role assignment on the Foundry account
are generated automatically — no manual `az role assignment create`
steps needed.
- 🛠️ **Aspire skills catalog from bundle** — `aspire agent init` now
drives its installable skill catalog from the bundle manifest, surfacing
all six bundled skills (previously only three were visible). An embedded
snapshot means the full catalog is available even in airgapped /
disconnected environments.
- 🔧 **CLI reliability** — Multiple CLI fixes: implicit-channel discovery
restored, `aspire stop` no longer falsely reports failure on Unix,
`aspire ps` no longer includes raw resource data (use `aspire describe`
for detailed state), `aspire new` prefers the current CLI template
version, friendly error for `aspire do --list-steps` without a step
argument, and improved `--search` option description with documentation
link.
- ⌨️ **TypeScript AppHost** — Fixed a deadlock that occurred when lazy
options callbacks invoked async methods; dev-localhost resource service
URLs are now accepted for local development without extra configuration.
- 📊 **Dashboard** — Summary log formatting improved for readability,
`dotnet watch` dashboard auto-launch signal restored, and dynamic-port
handling fixed for `DistributedApplicationTestingBuilder`.
- ☸️ **Kubernetes** — The Helm CLI minimum version (≥ 4.2.0) is now
validated before a Kubernetes deploy, giving a clear error instead of a
cryptic failure.
- ⚠️ **`Aspire.Hosting.Blazor` ships as preview in 13.4** — A packaging
issue with the Blazor gateway scripts means the package is intentionally
marked preview for this release. Full stable support is targeted for
13.5.
## ⚠️ Notable changes
- `aspire ps` no longer includes raw resource data in its output. Use
`aspire describe <resource>` to inspect detailed resource state.
- Foundry hosted agent builder API shape updated — see
[#​17545](microsoft/aspire#17545) and
[#​17669](microsoft/aspire#17669) for the
updated C# and TypeScript signatures.
- `Aspire.Hosting.Blazor` is preview-versioned in 13.4
(`SuppressFinalPackageVersion=true`). A fix for the `addBlazorGateway`
gateway script resolution error in TypeScript AppHosts is tracked in
[#​17685](microsoft/aspire#17685).
## 📖 Learn more
For the full details on everything in this release, check out the
[What's new in Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/)
documentation.
Thank you to all the community contributors who helped make Aspire 13.4
possible! 💜
---
*Full Changelog:
microsoft/aspire@v13.3.5...v13.4.0*
*Full commit:
[becb48e2d61099e35ae336d527d3875e928d6594](microsoft/aspire@becb48e2d61099e35ae336d527d3875e928d6594)*
> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26779980139/agentic_workflow)
· ● 6.5M
<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26779980139, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26779980139 -->
Commits viewable in [compare
view](microsoft/aspire@v13.3.5...v13.4.6).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This was referenced Jun 25, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 29, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Servicing-considerIssue for next servicing release review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@davidfowl@sebastienros@tommasodotNET@maddymontaquila