Skip to content

[Automated] Update API Surface Area - #17846

Open
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
update-api-diffs
Open

[Automated] Update API Surface Area#17846
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
update-api-diffs

Conversation

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Auto-generated update to the API surface to compare current surface vs latest release. This should only be merged once this surface area ships in a new release.

Copilot AI review requested due to automatic review settings June 2, 2026 18:05
@aspire-repo-bot aspire-repo-bot Bot added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jun 2, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented Jun 2, 2026

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 -- 17846

Or

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

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 110 passed, 0 failed, 2 unknown (commit eccac94)

View all recordings
- Test Detail
AddPackageInteractiveWhileAppHostRunningDetached Recording · Job · CLI logs
AddPackageWhileAppHostRunningDetached Recording · Job · CLI logs
AgentCommands_AllHelpOutputs_AreCorrect Recording · Job · CLI logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording · Job · CLI logs
AgentInitCommand_MigratesDeprecatedConfig Recording · Job · CLI logs
AgentInit_NonInteractive_BundleOnlySkillsNotInCatalog Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording · Job · CLI logs
AllPublishMethodsBuildDockerImages Recording · Job · CLI logs
AspireAddAndStartWorkAgainstLegacyAppHostTs Recording · Job · CLI logs
AspireAddPackageVersionToDirectoryPackagesProps Recording · Job · CLI logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording · Job · CLI logs
AspireInit_ExistingAppHostDir_RecreatesNuGetConfigKeepsFiles Recording · Job · CLI logs
AspireInit_SolutionFile_BuildsAgainstChannelHive Recording · Job · CLI logs
AspireStartUpdatesStaleTypeScriptAppHostPath Recording · Job · CLI logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording · Job · CLI logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording · Job · CLI logs
Banner_DisplayedOnFirstRun Recording · Job · CLI logs
Banner_DisplayedWithExplicitFlag Recording · Job · CLI logs
Banner_NotDisplayedWithNoLogoFlag Recording · Job · CLI logs
CertificatesClean_RemovesCertificates Recording · Job · CLI logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording · Job · CLI logs
CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording · Job · CLI logs
ConfigSetGet_CreatesNestedJsonFormat Recording · Job · CLI logs
CreateAndRunAspireStarterProject Recording · Job · CLI logs
CreateAndRunAspireStarterProjectWithBundle Recording · Job · CLI logs
CreateAndRunEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJavaEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJsReactProject Recording · Job · CLI logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrls Recording · Job · CLI logs
CreateAndRunPythonReactProject Recording · Job · CLI logs
CreateAndRunTypeScriptEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunTypeScriptStarterProject Recording · Job · CLI logs
CreateJavaAppHostWithViteApp Recording · Job · CLI logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DeployK8sBasicApiService Recording · Job · CLI logs
DeployK8sWithExternalHelmChart Recording · Job · CLI logs
DeployK8sWithGarnet Recording · Job · CLI logs
DeployK8sWithMongoDB Recording · Job · CLI logs
DeployK8sWithMySql Recording · Job · CLI logs
DeployK8sWithPostgres Recording · Job · CLI logs
DeployK8sWithRabbitMQ Recording · Job · CLI logs
DeployK8sWithRedis Recording · Job · CLI logs
DeployK8sWithSqlServer Recording · Job · CLI logs
DeployK8sWithValkey Recording · Job · CLI logs
DeployTypeScriptAppToKubernetes Recording · Job · CLI logs
DescribeCommandResolvesReplicaNames Recording · Job · CLI logs
DescribeCommandShowsRunningResources Recording · Job · CLI logs
DetachFormatJsonProducesValidJson Recording · Job · CLI logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording · Job · CLI logs
DoPublishAndDeployListStepsWork Recording · Job · CLI logs
DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording · Job · CLI logs
DoctorCommand_DetectsDeprecatedAgentConfig Recording · Job · CLI logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording · Job · CLI logs
DoctorCommand_WithSslCertDir_ShowsTrusted Recording · Job · CLI logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording · Job · CLI logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording · Job · CLI logs
GlobalMigration_HandlesCommentsAndTrailingCommas Recording · Job · CLI logs
GlobalMigration_HandlesMalformedLegacyJson Recording · Job · CLI logs
GlobalMigration_PreservesAllValueTypes Recording · Job · CLI logs
GlobalMigration_SkipsWhenNewConfigExists Recording · Job · CLI logs
GlobalSettings_MigratedFromLegacyFormat Recording · Job · CLI logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording · Job · CLI logs
InteractiveCSharpInitCreatesExpectedFiles Recording · Job · CLI logs
InvalidAppHostPathWithComments_IsHealedOnRun Recording · Job · CLI logs
JavaScriptHostingApisRunFromTypeScriptAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelTypeScriptAppHost Recording · Job · CLI logs
LegacySettingsMigration_AdjustsRelativeAppHostPath Recording · Job · CLI logs
LogsCommandShowsResourceLogs Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterApp Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording · Job · CLI logs
PsCommandListsRunningAppHost Recording · Job · CLI logs
PsFormatJsonOutputsOnlyJsonToStdout Recording · Job · CLI logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording · Job · CLI logs
PublishWithConfigureEnvFileUpdatesEnvOutput Recording · Job · CLI logs
PublishWithDockerComposeServiceCallbackSucceeds Recording · Job · CLI logs
PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording · Job · CLI logs
ResourceCommand_FailedExec_ShowsLogPathAndLogHasEntries Recording · Job · CLI logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording · Job · CLI logs
RestoreGeneratesSdkFiles Recording · Job · CLI logs
RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording · Job · CLI logs
RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording · Job · CLI logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording · Job · CLI logs
RunFromParentDirectory_UsesExistingConfigNearAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
SecretCrudOnDotNetAppHost Recording · Job · CLI logs
SecretCrudOnTypeScriptAppHost Recording · Job · CLI logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording · Job · CLI logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording · Job · CLI logs
StartReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
StartReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
StopAllAppHostsFromAppHostDirectory Recording · Job · CLI logs
StopJavaPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopNonInteractiveSingleAppHost Recording · Job · CLI logs
StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopWithNoRunningAppHostExitsSuccessfully Recording · Job · CLI logs
TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallback Recording · Job · CLI logs
TypeScriptAppHostWithVite_AllowsDifferentGuestPkgManager Recording · Job · CLI logs
UnAwaitedChainsCompileWithAutoResolvePromises Recording · Job · CLI logs
UpdateToStable_CSharpEmptyAppHost_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_CSharpSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScriptSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScript_PreviewsStablePkgsAndKeepsChannel Recording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #26838658119

@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from fe197aa to ac810bc Compare June 4, 2026 17:29
@github-actions
github-actions Bot requested a review from sebastienros as a code owner June 4, 2026 17:29
@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from cfe8b79 to 346b8cc Compare June 6, 2026 16:54
@github-actions
github-actions Bot force-pushed the update-api-diffs branch 3 times, most recently from fe5a901 to 84fffd3 Compare June 9, 2026 17:24
@github-actions
github-actions Bot requested a review from eerhardt as a code owner June 9, 2026 17:24
Copilot AI review requested due to automatic review settings June 10, 2026 17:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from e88df30 to 641f06c Compare June 12, 2026 17:32
Copilot AI review requested due to automatic review settings June 12, 2026 17:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI review requested due to automatic review settings June 14, 2026 17:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions
github-actions Bot force-pushed the update-api-diffs branch from 943ee24 to a7cfcd6 Compare July 9, 2026 17:20
Copilot AI review requested due to automatic review settings July 9, 2026 17:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI review requested due to automatic review settings July 10, 2026 17:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI review requested due to automatic review settings July 11, 2026 16:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI review requested due to automatic review settings July 13, 2026 17:19

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot can't review bot-authored pull requests automatically. A user with Copilot access can request a review manually.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Comment on lines +979 to 983
[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }

[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProjectsAgentTool> Tools { get { throw null; } init { } }
Comment on lines 498 to 504
[AspireValue("FoundryModels")]
public static readonly FoundryModel CohereCommandA;
[AspireValue("FoundryModels")]
public static readonly FoundryModel CohereCommandR082024;
[AspireValue("FoundryModels")]
public static readonly FoundryModel CohereCommandRPlus082024;
public static readonly FoundryModel CohereCommandAPlus052026;
[AspireValue("FoundryModels")]
public static readonly FoundryModel CohereEmbedV3English;
[AspireValue("FoundryModels")]
Comment on lines +1984 to +1991
[AspireExport]
public required IResource Model { get { throw null; } init { } }

public required System.IServiceProvider ServiceProvider { get { throw null; } init { } }
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

[AspireExport]
public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +419 to +425
[System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
public sealed partial class KubernetesPersistentVolumeResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent<KubernetesEnvironmentResource>, ApplicationModel.IResourceWithParent, ApplicationModel.IResource
{
public KubernetesPersistentVolumeResource(string name, KubernetesEnvironmentResource environment) : base(default!) { }

public KubernetesEnvironmentResource Parent { get { throw null; } }
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 14 out of 15 changed files in this pull request and generated 3 comments.

Comment on lines +21 to 22
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
where T : Go.GoAppResource { throw null; }
Comment on lines +2686 to +2690
[System.Obsolete("Use Services instead.")]
[AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +1056 to 1057
[AspireExportIgnore(Reason = "Uses Func<EndpointAnnotation, bool> which is not ATS-compatible. The ATS-friendly implementation is in src/Aspire.Hosting/Ats/CoreExports.cs and accepts endpoint names instead of a predicate.")]
public static ApplicationModel.IResourceBuilder<ApplicationModel.ProjectResource> WithEndpointsInEnvironment(this ApplicationModel.IResourceBuilder<ApplicationModel.ProjectResource> builder, System.Func<ApplicationModel.EndpointAnnotation, bool> filter) { throw null; }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 5 comments.

Comments suppressed due to low confidence (1)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • The Experimental(ASPIREINTERACTION001) annotation was removed from IInteractionService (and many related interaction types) but is still applied to the newly added PromptProgressAsync. If the broader interaction surface is still intended to be experimental, re-apply the attribute consistently (e.g., at the interface/type level or per-member) to preserve expected compiler diagnostics and avoid implying unintended API stability.
//------------------------------------------------------------------------------

Comment on lines +3838 to +3844
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }

[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
Comment on lines +641 to +642
[System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, string? title = null, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
Comment on lines +85 to +100
public enum DevTunnelRegion : byte
{
WestEurope = 0,
UkSouth = 1,
NorthEurope = 2,
EastUs = 3,
EastUs2 = 4,
CentralIndia = 5,
WestUs3 = 6,
WestUs2 = 7,
SouthEastAsia = 8,
BrazilSouth = 9,
AustraliaCentral = 10,
AustraliaEast = 11,
JapanEast = 12
}
Comment on lines +1984 to +1991
[AspireExport]
public required IResource Model { get { throw null; } init { } }

public required System.IServiceProvider ServiceProvider { get { throw null; } init { } }
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

[AspireExport]
public required System.IServiceProvider Services { get { throw null; } init { } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 5 comments.

Comment on lines +420 to 421
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } }
Comment on lines 631 to 633
public partial interface IInteractionService
{
bool IsAvailable { get; }
Comment on lines +684 to +688
public sealed partial class InteractionFile
{
internal InteractionFile() { }

public string FilePath { get { throw null; } }
Comment on lines +85 to +87
public enum DevTunnelRegion : byte
{
WestEurope = 0,
Comment on lines +56 to +59
public static partial class RedisModules
{
[AspireValue("RedisModules")]
public const string BloomFilter = "/usr/local/lib/redis/modules/redisbloom.so";

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Comments suppressed due to low confidence (2)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • The Experimental(\"ASPIREINTERACTION001\") marker appears to have been removed from the IInteractionService type (and many related interaction types) and is now applied only to PromptProgressAsync. This changes the API contract for the rest of the interaction surface; if the intent is that the interaction API remains experimental, re-apply the Experimental attribute consistently at the appropriate type level (or apply it to all experimental members). If the intent is to make the rest stable, consider documenting that change explicitly and ensure all previously-experimental types were intentionally updated.
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • The AspireExportIgnore on InputsDialogValidationContext.Services was removed, but the property type is still System.IServiceProvider. If this type is exported to ATS (the class is [AspireExport(ExposeProperties = true)]), exporting IServiceProvider is likely to be unsupported or to leak a .NET runtime abstraction into polyglot callers. Consider restoring AspireExportIgnore on Services (or changing the exported surface to an ATS-friendly representation) to avoid breaking polyglot SDK generation/consumption.
//------------------------------------------------------------------------------

Comment on lines +1977 to 1992
[AspireExport]
public sealed partial class ContainerFileSystemCallbackContext
{
[System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "HttpsCertificateContext is an experimental certificate-specific type that is not yet part of the ATS surface.")]
public ContainerFileSystemCallbackHttpsCertificateContext? HttpsCertificateContext { get { throw null; } set { } }

[AspireExport]
public required IResource Model { get { throw null; } init { } }

public required System.IServiceProvider ServiceProvider { get { throw null; } init { } }
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

[AspireExport]
public required System.IServiceProvider Services { get { throw null; } init { } }
}
Comment on lines 3836 to 3845
public sealed partial class ResourceAnnotationCollection : System.Collections.ObjectModel.Collection<IResourceAnnotation>
{
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }
}
Comment on lines 2827 to 2831
public sealed partial class HttpCommandRequestContext
{
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +2788 to +2795
public sealed partial class HiddenAnnotation : IResourceAnnotation
{
public HiddenAnnotation(HiddenBehavior behavior) { }

public HiddenBehavior Behavior { get { throw null; } }

public System.Collections.Generic.List<int> SuccessfulExitCodes { get { throw null; } init { } }
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Comment on lines 638 to +642
System.Threading.Tasks.Task<InteractionResult<InteractionInputCollection>> PromptInputsAsync(string title, string? message, System.Collections.Generic.IReadOnlyList<InteractionInput> inputs, InputsDialogInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
System.Threading.Tasks.Task<InteractionResult<bool>> PromptMessageBoxAsync(string title, string message, MessageBoxInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
System.Threading.Tasks.Task<InteractionResult<bool>> PromptNotificationAsync(string title, string message, NotificationInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
[System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, string? title = null, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
Comment on lines 631 to 633
public partial interface IInteractionService
{
bool IsAvailable { get; }
Comment on lines +2686 to +2690
[System.Obsolete("Use Services instead.")]
[AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +3838 to +3844
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 6 comments.


[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
Comment on lines +979 to +980
[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }
Comment on lines +2916 to 2917
[AspireExportIgnore(Reason = "Password is typed as IValueProvider, which has no ATS-exported representation and no guaranteed concrete type to expose it as. The certificate paths (exposed as ReferenceExpression) cover the common configuration scenarios.")]
public required IValueProvider? Password { get { throw null; } init { } }
Comment on lines 664 to 666
public required InteractionInputCollection Inputs { get { throw null; } init { } }

[AspireExportIgnore(Reason = "IServiceProvider is not part of the polyglot validation surface.")]
public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +419 to +425
[System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
public sealed partial class KubernetesPersistentVolumeResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent<KubernetesEnvironmentResource>, ApplicationModel.IResourceWithParent, ApplicationModel.IResource
{
public KubernetesPersistentVolumeResource(string name, KubernetesEnvironmentResource environment) : base(default!) { }

public KubernetesEnvironmentResource Parent { get { throw null; } }
}
Comment on lines 1075 to 1077
[System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMMAND001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "RequiredCommandValidationContext exposes IServiceProvider — not usable from polyglot hosts.")]
[AspireExport("withRequiredCommandValidation", MethodName = "withRequiredCommandValidation")]
public static ApplicationModel.IResourceBuilder<T> WithRequiredCommand<T>(this ApplicationModel.IResourceBuilder<T> builder, string command, System.Func<ApplicationModel.RequiredCommandValidationContext, System.Threading.Tasks.Task<ApplicationModel.RequiredCommandValidationResult>> validationCallback, string? helpLink = null)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 9 comments.

Comment on lines +21 to 22
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
where T : Go.GoAppResource { throw null; }
Comment on lines +2829 to 2831
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +2841 to +2844
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +2849 to 2851
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +2861 to +2864
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +3509 to 3511
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +3523 to +3526
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +3838 to +3844
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }

[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 7 comments.

Comment on lines +21 to 22
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
where T : Go.GoAppResource { throw null; }
Comment on lines +979 to 983
[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }

[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProjectsAgentTool> Tools { get { throw null; } init { } }
Comment on lines +2829 to 2831
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +2849 to 2851
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +3509 to 3511
public InteractionInputCollection Arguments { get { throw null; } init { } }

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }
Comment on lines +420 to +423
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } }

public System.IServiceProvider Services { get { throw null; } }
Comment on lines +56 to +66
public static partial class RedisModules
{
[AspireValue("RedisModules")]
public const string BloomFilter = "/usr/local/lib/redis/modules/redisbloom.so";
[AspireValue("RedisModules")]
public const string Json = "/usr/local/lib/redis/modules/rejson.so";
[AspireValue("RedisModules")]
public const string Search = "/usr/local/lib/redis/modules/redisearch.so";
[AspireValue("RedisModules")]
public const string TimeSeries = "/usr/local/lib/redis/modules/redistimeseries.so";
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 7 comments.


[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")
Comment on lines 659 to 661
[AspireExport(ExposeProperties = true)]
public sealed partial class InputsDialogValidationContext
{
public required InteractionInputCollection Inputs { get { throw null; } init { } }

[AspireExportIgnore(Reason = "IServiceProvider is not part of the polyglot validation surface.")]
public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +1987 to +1991
[System.Obsolete("Use Services instead.")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

[AspireExport]
public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +2788 to +2789
public sealed partial class HiddenAnnotation : IResourceAnnotation
{
Comment on lines +2794 to +2795
public System.Collections.Generic.List<int> SuccessfulExitCodes { get { throw null; } init { } }
}

public static ApplicationModel.ParameterResource CreateParameter(IDistributedApplicationBuilder builder, string name, bool secret) { throw null; }

[System.Obsolete("PublishAsConnectionString only works with the manifest publisher and is obsolete. Use AddConnectionString in publish-mode app model code instead.")]

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 3 comments.

Comment on lines +2686 to +2690
[System.Obsolete("Use Services instead.")]
[AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
Comment on lines +1076 to 1077
[AspireExport("withRequiredCommandValidation", MethodName = "withRequiredCommandValidation")]
public static ApplicationModel.IResourceBuilder<T> WithRequiredCommand<T>(this ApplicationModel.IResourceBuilder<T> builder, string command, System.Func<ApplicationModel.RequiredCommandValidationContext, System.Threading.Tasks.Task<ApplicationModel.RequiredCommandValidationResult>> validationCallback, string? helpLink = null)

[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:633

  • The Experimental(\"ASPIREINTERACTION001\") marker appears to have been removed from the IInteractionService type and many related interaction types, but is still applied to PromptProgressAsync (and some new progress types). This creates inconsistent analyzer behavior where older interaction APIs may become implicitly non-experimental while new ones remain experimental. If the interaction surface is intended to remain experimental, re-apply the attribute at the interface/type level (or consistently on all relevant members); if it’s intended to be stable now, remove the experimental marker from the newly added progress APIs to match.
    public partial interface IInteractionService
    {
        bool IsAvailable { get; }

src/Aspire.Hosting/api/Aspire.Hosting.cs:643

  • The Experimental(\"ASPIREINTERACTION001\") marker appears to have been removed from the IInteractionService type and many related interaction types, but is still applied to PromptProgressAsync (and some new progress types). This creates inconsistent analyzer behavior where older interaction APIs may become implicitly non-experimental while new ones remain experimental. If the interaction surface is intended to remain experimental, re-apply the attribute at the interface/type level (or consistently on all relevant members); if it’s intended to be stable now, remove the experimental marker from the newly added progress APIs to match.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, string? title = null, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
    }

src/Aspire.Hosting/api/Aspire.Hosting.cs:157

  • The [AspireExportIgnore] reason states that ContainerFileSystemCallbackContext has factory methods (createFile/createDirectory/createCertificateFile), but in this API file the ContainerFileSystemCallbackContext type (as shown later in the diff) only contains properties and no such factory methods. If those factory methods don’t exist on the public context type, the reason string should be updated to avoid referencing non-existent API; if they do exist, they should appear on the exported surface (or the reason should reference the correct type that provides them).
        [AspireExportIgnore(Reason = "Exposed to ATS via the WithContainerFilesCallbackExport shim, which accepts integer file-mode options and lets polyglot callbacks build the IEnumerable<ContainerFileSystemItem> result through ContainerFileSystemCallbackContext factory methods (createFile/createDirectory/createCertificateFile).")]
        public static ApplicationModel.IResourceBuilder<T> WithContainerFiles<T>(this ApplicationModel.IResourceBuilder<T> builder, string destinationPath, System.Func<ApplicationModel.ContainerFileSystemCallbackContext, System.Threading.CancellationToken, System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<ApplicationModel.ContainerFileSystemItem>>> callback, int? defaultOwner = null, int? defaultGroup = null, System.IO.UnixFileMode? umask = null)

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:105

  • The ignore reason on the convenience overload says 'polyglot hosts must pass protocol and version explicitly', but the overload that does accept protocol and protocolVersion is also marked [AspireExportIgnore] in this diff hunk. If polyglot hosts are expected to be able to specify protocol/version via an exported API, consider exporting an ATS-friendly overload (or adjusting the reason text to reflect the actual supported polyglot entry point, e.g., the exported DTO/dispatcher shape).
        public static ApplicationModel.IResourceBuilder<T> AsHostedAgent<T>(this ApplicationModel.IResourceBuilder<T> builder, ApplicationModel.IResourceBuilder<Foundry.AzureCognitiveServicesProjectResource>? project, Foundry.HostedAgentProtocol protocol, string protocolVersion, System.Action<Foundry.HostedAgentConfiguration>? configure = null)
            where T : ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IComputeResource { throw null; }

        [AspireExportIgnore(Reason = "C# convenience overload; polyglot hosts must pass protocol and version explicitly.")]
        public static ApplicationModel.IResourceBuilder<T> AsHostedAgent<T>(this ApplicationModel.IResourceBuilder<T> builder, ApplicationModel.IResourceBuilder<Foundry.AzureCognitiveServicesProjectResource>? project, System.Action<Foundry.HostedAgentConfiguration>? configure = null)
            where T : ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResourceWithEnvironment, ApplicationModel.IComputeResource { throw null; }

src/Aspire.Hosting/api/Aspire.Hosting.cs:688

  • Introducing a public FilePath on InteractionFile risks unintentionally exposing server-local filesystem paths (e.g., in logs/telemetry or UI rendering), which can leak sensitive environment details. Consider avoiding the raw path in the public API (e.g., make it internal, or expose a safer identifier + OpenRead()/ReadAllBytesAsync() only), or at minimum explicitly document that FilePath is server-local and should not be surfaced to untrusted clients.
    public sealed partial class InteractionFile
    {
        internal InteractionFile() { }

        public string FilePath { get { throw null; } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:694

  • Introducing a public FilePath on InteractionFile risks unintentionally exposing server-local filesystem paths (e.g., in logs/telemetry or UI rendering), which can leak sensitive environment details. Consider avoiding the raw path in the public API (e.g., make it internal, or expose a safer identifier + OpenRead()/ReadAllBytesAsync() only), or at minimum explicitly document that FilePath is server-local and should not be surfaced to untrusted clients.
        public System.IO.Stream OpenRead() { throw null; }


[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (3)

src/Aspire.Hosting/api/Aspire.Hosting.cs:667

  • With AspireExport(ExposeProperties = true) on InputsDialogValidationContext, the Services property will be part of the exported surface. Since it is typed as IServiceProvider (a runtime .NET type), this appears to reintroduce the exact ATS/polyglot incompatibility that the previously-present AspireExportIgnore comment indicated. Consider restoring [AspireExportIgnore] for Services (or replacing it with an ATS-safe abstraction) so the exported surface remains representable.
    [AspireExport(ExposeProperties = true)]
    public sealed partial class InputsDialogValidationContext
    {

src/Aspire.Hosting/api/Aspire.Hosting.cs:672

  • With AspireExport(ExposeProperties = true) on InputsDialogValidationContext, the Services property will be part of the exported surface. Since it is typed as IServiceProvider (a runtime .NET type), this appears to reintroduce the exact ATS/polyglot incompatibility that the previously-present AspireExportIgnore comment indicated. Consider restoring [AspireExportIgnore] for Services (or replacing it with an ATS-safe abstraction) so the exported surface remains representable.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:1910

  • Marking ContainerBuildOptionsCallbackContext with AspireExport(ExposeProperties = true) risks exporting members that are inherently .NET-runtime-specific (IResource, IServiceProvider, ILogger, etc.). This conflicts with the earlier rationale for ignoring similar APIs for ATS. A safer approach is to avoid ExposeProperties = true here and instead explicitly export only ATS-safe properties/methods (and/or add AspireExportIgnore to runtime-typed members).
    [System.Diagnostics.CodeAnalysis.Experimental("ASPIREPIPELINES003", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
    [AspireExport(ExposeProperties = true)]
    public sealed partial class ContainerBuildOptionsCallbackContext
    {
        public ContainerBuildOptionsCallbackContext(IResource resource, System.IServiceProvider services, Microsoft.Extensions.Logging.ILogger logger, System.Threading.CancellationToken cancellationToken, DistributedApplicationExecutionContext executionContext) { }

Comment on lines +3851 to +3857
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }
Comment on lines +979 to +980
[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated no new comments.

Suppressed comments (8)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • These contexts now expose both ServiceProvider (obsolete) and Services but the obsolete alias isn’t marked with AspireExportIgnore (unlike ExecuteCommandContext.ServiceProvider). If these contexts are part of the exported polyglot surface, this likely results in duplicated/ambiguous service-provider bindings. Recommend consistently applying AspireExportIgnore to the obsolete ServiceProvider aliases so polyglot consumers only see Services.
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:2867

  • These contexts now expose both ServiceProvider (obsolete) and Services but the obsolete alias isn’t marked with AspireExportIgnore (unlike ExecuteCommandContext.ServiceProvider). If these contexts are part of the exported polyglot surface, this likely results in duplicated/ambiguous service-provider bindings. Recommend consistently applying AspireExportIgnore to the obsolete ServiceProvider aliases so polyglot consumers only see Services.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }
    }

    public sealed partial class HttpCommandResultContext
    {
        public InteractionInputCollection Arguments { get { throw null; } init { } }

        public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }

        public required EndpointReference Endpoint { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2004

  • In an [AspireExport] surface, keeping both ServiceProvider (obsolete) and Services risks exporting two equivalent service-provider properties to polyglot/ATS consumers, creating ambiguity and extra surface area. Consider adding AspireExportIgnore to the obsolete ServiceProvider alias (while keeping it for C# source compatibility) so Services is the single exported entry point.
    [AspireExport]
    public sealed partial class ContainerFileSystemCallbackContext
    {
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        [AspireExportIgnore(Reason = "HttpsCertificateContext is an experimental certificate-specific type that is not yet part of the ATS surface.")]
        public ContainerFileSystemCallbackHttpsCertificateContext? HttpsCertificateContext { get { throw null; } set { } }

        [AspireExport]
        public required IResource Model { get { throw null; } init { } }

        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        [AspireExport]
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2877

  • These contexts now expose both ServiceProvider (obsolete) and Services but the obsolete alias isn’t marked with AspireExportIgnore (unlike ExecuteCommandContext.ServiceProvider). If these contexts are part of the exported polyglot surface, this likely results in duplicated/ambiguous service-provider bindings. Recommend consistently applying AspireExportIgnore to the obsolete ServiceProvider aliases so polyglot consumers only see Services.
        public required System.Net.Http.HttpResponseMessage Response { get { throw null; } init { } }

        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:3525

  • As with other callback contexts, consider marking the obsolete ServiceProvider alias with AspireExportIgnore to avoid exporting both serviceProvider and services to polyglot consumers. This keeps the polyglot contract smaller and reduces confusion while retaining C# compatibility via the obsolete property.
        public InteractionInputCollection Arguments { get { throw null; } init { } }

        public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:3539

  • As with other callback contexts, consider marking the obsolete ServiceProvider alias with AspireExportIgnore to avoid exporting both serviceProvider and services to polyglot consumers. This keeps the polyglot contract smaller and reduces confusion while retaining C# compatibility via the obsolete property.
        public required string ResourceName { get { throw null; } init { } }

        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:700

  • Exposing a server-local FilePath on a publicly returned interaction result object can unintentionally leak internal filesystem details (absolute paths, usernames, directory structure) to consumers and logs. If callers only need to read file contents, consider removing FilePath from the public surface (or making it non-sensitive, e.g., a display name), and rely on OpenRead() / ReadAllBytesAsync() for access.
    public sealed partial class InteractionFile
    {
        internal InteractionFile() { }

        public string FilePath { get { throw null; } }

        public string Id { get { throw null; } }

        public string Name { get { throw null; } }

        public System.IO.Stream OpenRead() { throw null; }

src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs:21

  • The new optional logOutput = \"\" default is ambiguous: an empty string can mean either “not specified” or “explicitly specify an empty log-output value”, and downstream command-line generation can end up emitting an invalid/undesired --log-output=. Consider changing this parameter to string? logOutput = null (or moving these flags into an options DTO) so callers can omit the setting cleanly.
        public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345, bool acceptMulticlient = true, bool? onlySameUser = null, bool continueOnStart = false, bool log = false, string logOutput = "")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants