Full Code of Microsoft/vsts-agent for AI

master ce3bfe7180d1 cached
811 files
8.6 MB
2.3M tokens
5727 symbols
1 requests
Download .txt
Showing preview only (9,321K chars total). Download the full file or copy to clipboard to get everything.
Repository: Microsoft/vsts-agent
Branch: master
Commit: ce3bfe7180d1
Files: 811
Total size: 8.6 MB

Directory structure:
gitextract_26hybwmd/

├── .CodeQL.yml
├── .azure-pipelines/
│   ├── build-job.yml
│   ├── build-jobs.yml
│   ├── get-pat.yml
│   ├── package-vcredist.yml
│   ├── pipeline.yml
│   ├── scripts/
│   │   ├── Get-SigntoolPath.ps1
│   │   ├── RemoveSignatureForThirdPartyAssemlies.ps1
│   │   ├── RemoveSignatureScript.ps1
│   │   ├── run-and-verify.js
│   │   ├── switch-branch.ps1
│   │   └── switch-branch.sh
│   └── signing.yml
├── .editorconfig
├── .gdn/
│   └── .gdnbaselines
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.yml
│   │   ├── config.yml
│   │   ├── feature.yml
│   │   └── question.yml
│   ├── ISSUE_TEMPLATE.md
│   ├── copilot-instructions.md
│   ├── labelChecker/
│   │   ├── .npmrc
│   │   ├── index.js
│   │   └── package.json
│   ├── pull_request_template.md
│   └── workflows/
│       ├── autoAssignABTT.yml
│       ├── labelChecker.yml
│       ├── localization-automerge.yml
│       └── stale.yml
├── .gitignore
├── .vsts.ci.yml
├── .vsts.release.yml
├── LICENSE
├── README.md
├── SECURITY.md
├── assets.json
├── azure-pipelines-agent.sln
├── docs/
│   ├── contribute.md
│   ├── design/
│   │   ├── auth.md
│   │   ├── byos.md
│   │   ├── clientcert.md
│   │   ├── coreclr.md
│   │   ├── jobcancellation.md
│   │   ├── logprocessors.md
│   │   ├── non-glibc-containers.md
│   │   ├── percentEncoding.md
│   │   ├── proxy.md
│   │   ├── res/
│   │   │   └── AgentLogProcessors.xml
│   │   └── setMTU.md
│   ├── git.md
│   ├── jobdirectories.md
│   ├── layers.md
│   ├── node6.md
│   ├── noderunner.md
│   ├── preview/
│   │   ├── consumeoutputvariable.md
│   │   ├── latebreaking.md
│   │   ├── logdecorations.md
│   │   ├── outdated/
│   │   │   ├── conditions.md
│   │   │   ├── pipeline.md
│   │   │   ├── resources.md
│   │   │   ├── yaml/
│   │   │   │   ├── dot-net-core-template.yaml
│   │   │   │   ├── dot-net-core.yaml
│   │   │   │   ├── vsbuild-template.yaml
│   │   │   │   └── vsbuild.yaml
│   │   │   ├── yamldeserialization.md
│   │   │   └── yamlscripts.md
│   │   ├── outputvariable.md
│   │   ├── runtaskindocker.md
│   │   ├── yaml-authz-troubleshooting.md
│   │   └── yamlgettingstarted.md
│   ├── start/
│   │   ├── configonprem.md
│   │   ├── configvsts.md
│   │   ├── envlinux.md
│   │   ├── envosx.md
│   │   ├── envredhat.md
│   │   ├── envubuntu.md
│   │   ├── envwin.md
│   │   ├── moreconfig.md
│   │   ├── nixsvc.md
│   │   ├── proxyconfig.md
│   │   ├── resourceconfig.md
│   │   ├── roles.md
│   │   ├── svcosx.md
│   │   └── svcsystemd.md
│   ├── threat-model/
│   │   ├── AgentsTasks-ThreatModel.tm7
│   │   └── README.md
│   └── troubleshooting.md
├── images/
│   └── readme.md
├── open-pullrequest.ps1
├── release/
│   ├── Send-PRsNotification.ps1
│   ├── createAdoPrs.js
│   ├── createReleaseBranch.js
│   ├── fillReleaseNotesTemplate.js
│   ├── package.json
│   ├── rollrelease.js
│   └── util.js
├── releaseNote.md
├── send-notifications.ps1
├── src/
│   ├── .helpers.sh
│   ├── Agent.Listener/
│   │   ├── Agent.Listener.csproj
│   │   ├── Agent.cs
│   │   ├── CommandLine/
│   │   │   ├── BaseCommand.cs
│   │   │   ├── ConfigureAgent.cs
│   │   │   ├── ConfigureOrRemoveBase.cs
│   │   │   ├── ReAuthAgent.cs
│   │   │   ├── RemoveAgent.cs
│   │   │   ├── RunAgent.cs
│   │   │   └── WarmupAgent.cs
│   │   ├── CommandSettings.cs
│   │   ├── Configuration/
│   │   │   ├── ConfigurationManager.cs
│   │   │   ├── ConfigurationProvider.cs
│   │   │   ├── CredentialManager.cs
│   │   │   ├── CredentialProvider.cs
│   │   │   ├── FeatureFlagProvider.cs
│   │   │   ├── IRSAKeyManager.cs
│   │   │   ├── IntegratedCredential.cs
│   │   │   ├── NegotiateCredential.cs
│   │   │   ├── OAuthCredential.cs
│   │   │   ├── PromptManager.cs
│   │   │   ├── RSAFileKeyManager.cs
│   │   │   ├── ServiceControlManager.cs
│   │   │   └── Validators.cs
│   │   ├── Configuration.Linux/
│   │   │   └── SystemdControlManager.cs
│   │   ├── Configuration.Windows/
│   │   │   ├── AutoLogonManager.cs
│   │   │   ├── AutoLogonRegistryManager.cs
│   │   │   ├── NativeWindowsServiceHelper.cs
│   │   │   ├── RSAEncryptedFileKeyManager.cs
│   │   │   ├── WindowsRegistryManager.cs
│   │   │   └── WindowsServiceControlManager.cs
│   │   ├── Configuration.macOS/
│   │   │   └── MacOSServiceControlManager.cs
│   │   ├── Diagnostics/
│   │   │   ├── DiagnosticSuite.cs
│   │   │   ├── DiagnosticsTests.cs
│   │   │   ├── DiskInfo.cs
│   │   │   ├── DnsTest.cs
│   │   │   ├── FolderPermissionInfo.cs
│   │   │   ├── IDiagnosticInfo.cs
│   │   │   ├── IDiagnosticTest.cs
│   │   │   ├── MtuInfo.cs
│   │   │   └── PingTest.cs
│   │   ├── DistributedTask.Pipelines/
│   │   │   ├── TaskResources.g.cs
│   │   │   ├── Update-FromVso.ps1
│   │   │   └── Yaml/
│   │   │       ├── Contracts/
│   │   │       │   ├── CheckoutStep.cs
│   │   │       │   ├── DeploymentTarget.cs
│   │   │       │   ├── IPhase.cs
│   │   │       │   ├── IPhaseTarget.cs
│   │   │       │   ├── ISimpleStep.cs
│   │   │       │   ├── IStep.cs
│   │   │       │   ├── IVariable.cs
│   │   │       │   ├── Phase.cs
│   │   │       │   ├── PhaseSelector.cs
│   │   │       │   ├── PhasesTemplate.cs
│   │   │       │   ├── PhasesTemplateReference.cs
│   │   │       │   ├── Process.cs
│   │   │       │   ├── ProcessResource.cs
│   │   │       │   ├── ProcessTemplate.cs
│   │   │       │   ├── ProcessTemplateReference.cs
│   │   │       │   ├── QueueTarget.cs
│   │   │       │   ├── ServerTarget.cs
│   │   │       │   ├── StepGroup.cs
│   │   │       │   ├── StepsTemplate.cs
│   │   │       │   ├── StepsTemplateReference.cs
│   │   │       │   ├── TaskReference.cs
│   │   │       │   ├── TaskStep.cs
│   │   │       │   ├── Variable.cs
│   │   │       │   ├── VariablesTemplate.cs
│   │   │       │   └── VariablesTemplateReference.cs
│   │   │       ├── FileData.cs
│   │   │       ├── IFileProvider.cs
│   │   │       ├── ITraceWriter.cs
│   │   │       ├── ParseOptions.cs
│   │   │       ├── PipelineParser.cs
│   │   │       └── TypeConverters/
│   │   │           ├── ConverterUtil.general.cs
│   │   │           ├── ConverterUtil.phases.cs
│   │   │           ├── ConverterUtil.processes.cs
│   │   │           ├── ConverterUtil.steps.cs
│   │   │           ├── ConverterUtil.variables.cs
│   │   │           ├── PhasesTemplateConverter.cs
│   │   │           ├── ProcessConverter.cs
│   │   │           ├── ProcessTemplateConverter.cs
│   │   │           ├── StepsTemplateConverter.cs
│   │   │           ├── VariablesTemplateConverter.cs
│   │   │           └── YamlConstants.cs
│   │   ├── JobDispatcher.cs
│   │   ├── MessageListener.cs
│   │   ├── NuGet.Config
│   │   ├── Program.cs
│   │   ├── SelfUpdater.cs
│   │   ├── Telemetry/
│   │   │   ├── CustomerIntelligenceServer.cs
│   │   │   ├── TelemetryPublisher.cs
│   │   │   └── WorkerCrashTelemetryPublisher.cs
│   │   ├── ValidationHelper/
│   │   │   ├── InstallerVerifier.cs
│   │   │   ├── UnsafeNativeMethods.cs
│   │   │   ├── Utility.cs
│   │   │   └── VerificationException.cs
│   │   ├── net10.json
│   │   ├── net6.json
│   │   └── net8.json
│   ├── Agent.PluginHost/
│   │   ├── Agent.PluginHost.csproj
│   │   └── Program.cs
│   ├── Agent.Plugins/
│   │   ├── Agent.Plugins.csproj
│   │   ├── Artifact/
│   │   │   ├── ArtifactDownloadParameters.cs
│   │   │   ├── ArtifactItemFilters.cs
│   │   │   ├── ArtifactProviderFactory.cs
│   │   │   ├── BuildServer.cs
│   │   │   ├── FileContainerProvider.cs
│   │   │   ├── FileShareProvider.cs
│   │   │   ├── IArtifactProvider.cs
│   │   │   ├── PipelineArtifactConstants.cs
│   │   │   ├── PipelineArtifactProvider.cs
│   │   │   └── PipelineArtifactServer.cs
│   │   ├── ArtifactsTracer.cs
│   │   ├── BuildArtifact/
│   │   │   ├── BuildArtifactPluginConstants.cs
│   │   │   └── BuildArtifactPluginV1.cs
│   │   ├── GitCliManager.cs
│   │   ├── GitSourceProvider.cs
│   │   ├── ITfsVCCliManager.cs
│   │   ├── PipelineArtifact/
│   │   │   ├── FilePathServer.cs
│   │   │   ├── PipelineArtifactPlugin.cs
│   │   │   ├── PipelineArtifactPluginConstants.cs
│   │   │   ├── PipelineArtifactPluginUtil.cs
│   │   │   ├── PipelineArtifactPluginV1.cs
│   │   │   ├── PipelineArtifactPluginV2.cs
│   │   │   └── Telemetry/
│   │   │       ├── FileShareActionRecord.cs
│   │   │       └── PipelineArtifactActionRecord.cs
│   │   ├── PipelineCache/
│   │   │   ├── FingerprintCreator.cs
│   │   │   ├── PipelineCachePluginConstants.cs
│   │   │   ├── PipelineCacheServer.cs
│   │   │   ├── PipelineCacheTaskPluginBase.cs
│   │   │   ├── RestorePipelineCacheV0.cs
│   │   │   ├── SavePipelineCacheV0.cs
│   │   │   ├── TarUtils.cs
│   │   │   └── Telemetry/
│   │   │       └── PipelineCacheActionRecord.cs
│   │   ├── RepositoryPlugin.cs
│   │   ├── SvnCliManager.cs
│   │   ├── SvnSourceProvider.cs
│   │   ├── TFCliManager.cs
│   │   ├── TeeCliManager.cs
│   │   ├── TestFilePublisher/
│   │   │   ├── ClientFactory.cs
│   │   │   ├── Finder/
│   │   │   │   ├── ITestFileFinder.cs
│   │   │   │   └── TestFileFinder.cs
│   │   │   ├── PipelineConfig.cs
│   │   │   ├── Plugin/
│   │   │   │   └── TestFilePublisherLogPlugin.cs
│   │   │   ├── SimpleTimer.cs
│   │   │   ├── Telemetry/
│   │   │   │   ├── TelemetryConstants.cs
│   │   │   │   ├── TelemetryDataCollector.cs
│   │   │   │   └── TelemetryDataWrapper.cs
│   │   │   ├── TestFilePublisher.cs
│   │   │   ├── TestRunContextBuilder.cs
│   │   │   ├── TraceListener.cs
│   │   │   └── TraceLogger.cs
│   │   ├── TestResultParser/
│   │   │   ├── Bus/
│   │   │   │   └── IBus.cs
│   │   │   ├── ClientFactory.cs
│   │   │   ├── Gateway/
│   │   │   │   ├── ILogParserGateway.cs
│   │   │   │   ├── ILogPreProcessor.cs
│   │   │   │   ├── LogParserGateway.cs
│   │   │   │   └── LogPreProcessor.cs
│   │   │   ├── IEnumerableExtension.cs
│   │   │   ├── ParserFactory.cs
│   │   │   ├── PipelineConfig.cs
│   │   │   ├── PipelineTestRun.cs
│   │   │   ├── PipelineTestRunPublisher.cs
│   │   │   ├── Plugin/
│   │   │   │   └── TestResultLogPlugin.cs
│   │   │   ├── SimpleTimer.cs
│   │   │   ├── Telemetry/
│   │   │   │   ├── TelemetryConstants.cs
│   │   │   │   ├── TelemetryDataCollector.cs
│   │   │   │   └── TelemetryDataWrapper.cs
│   │   │   ├── TestRunManager.cs
│   │   │   └── TraceLogger.cs
│   │   ├── TfsVCCliManager.cs
│   │   └── TfsVCSourceProvider.cs
│   ├── Agent.Sdk/
│   │   ├── Agent.Sdk.csproj
│   │   ├── AgentClientCertificateManager.cs
│   │   ├── AgentWebProxy.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── CommandPlugin.cs
│   │   ├── CommandStringConvertor.cs
│   │   ├── ContainerInfo.cs
│   │   ├── DockerVersion.cs
│   │   ├── ExecutionTargetInfo.cs
│   │   ├── ITraceWriter.cs
│   │   ├── Knob/
│   │   │   ├── AgentKnobs.cs
│   │   │   ├── BuiltInDefaultKnobSource.cs
│   │   │   ├── CompositeKnobSource.cs
│   │   │   ├── EnvironmentKnobSource.cs
│   │   │   ├── ICompositeKnobSource.cs
│   │   │   ├── IEnvironmentKnobSource.cs
│   │   │   ├── IKnobSource.cs
│   │   │   ├── IKnobValueContext.cs
│   │   │   ├── Knob.cs
│   │   │   ├── KnobValue.cs
│   │   │   ├── PipelineFeatureSource.cs
│   │   │   └── RuntimeKnobSource.cs
│   │   ├── LogPlugin.cs
│   │   ├── MountVolume.cs
│   │   ├── PortMapping.cs
│   │   ├── ProcessInvoker.MacLinux.cs
│   │   ├── ProcessInvoker.Windows.cs
│   │   ├── ProcessInvoker.cs
│   │   ├── ScopedEnvironment.cs
│   │   ├── SecretMasking/
│   │   │   ├── ILoggedSecretMasker.cs
│   │   │   ├── IRawSecretMasker.cs
│   │   │   ├── LegacySecretMasker.cs
│   │   │   ├── LoggedSecretMasker.cs
│   │   │   └── OssSecretMasker.cs
│   │   ├── TaskPlugin.cs
│   │   └── Util/
│   │       ├── ArgUtil/
│   │       │   ├── ArgUtil.cs
│   │       │   ├── ArgUtilInstanced.cs
│   │       │   └── IArgUtilInstanced.cs
│   │       ├── AzureInstanceMetadataProvider.cs
│   │       ├── BlobStoreWarningInfoProvider.cs
│   │       ├── CertificateUtil.cs
│   │       ├── ExceptionsUtil.cs
│   │       ├── IOUtil.cs
│   │       ├── MaskingUtil.cs
│   │       ├── NetFrameworkUtil.cs
│   │       ├── NullTraceWriter.cs
│   │       ├── PathUtil.cs
│   │       ├── PlatformUtil.cs
│   │       ├── PsModulePathUtil.cs
│   │       ├── RepositoryUtil.cs
│   │       ├── SslUtil.cs
│   │       ├── StringUtil.cs
│   │       ├── TeeUtil.cs
│   │       ├── UrlUtil.cs
│   │       ├── UtilKnobValueContext.cs
│   │       ├── VssUtil.cs
│   │       ├── WellKnownSecretAliases.cs
│   │       ├── WhichUtil.cs
│   │       └── WindowsProcessUtil.cs
│   ├── Agent.Service/
│   │   └── Windows/
│   │       ├── AgentService.Designer.cs
│   │       ├── AgentService.cs
│   │       ├── AgentService.csproj
│   │       ├── App.config
│   │       ├── FinalPublicKey.snk
│   │       ├── Program.cs
│   │       ├── Properties/
│   │       │   └── AssemblyInfo.cs
│   │       ├── Resource.Designer.cs
│   │       ├── Resource.de-de.resx
│   │       ├── Resource.es-es.resx
│   │       ├── Resource.fr-fr.resx
│   │       ├── Resource.it-IT.resx
│   │       ├── Resource.ja-jp.resx
│   │       ├── Resource.ko-KR.resx
│   │       ├── Resource.resx
│   │       ├── Resource.ru-RU.resx
│   │       ├── Resource.zh-CN.resx
│   │       └── Resource.zh-TW.resx
│   ├── Agent.Worker/
│   │   ├── Agent.Worker.csproj
│   │   ├── AgentLogPlugin.cs
│   │   ├── AgentPluginManager.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── AsyncCommandContext.cs
│   │   ├── Build/
│   │   │   ├── ArtifactCommandExtension.cs
│   │   │   ├── BuildCommandExtension.cs
│   │   │   ├── BuildDirectoryManager.cs
│   │   │   ├── BuildJobExtension.cs
│   │   │   ├── BuildServer.cs
│   │   │   ├── Enums.cs
│   │   │   ├── FileContainerServer.cs
│   │   │   ├── GitCommandManager.cs
│   │   │   ├── GitSourceProvider.cs
│   │   │   ├── LegacyTrackingConfig.cs
│   │   │   ├── SourceProvider.cs
│   │   │   ├── SvnCommandManager.cs
│   │   │   ├── SvnSourceProvider.cs
│   │   │   ├── TFCommandManager.cs
│   │   │   ├── TeeCommandManager.cs
│   │   │   ├── TfsVCCommandManager.cs
│   │   │   ├── TfsVCSourceProvider.cs
│   │   │   ├── TopLevelTrackingConfig.cs
│   │   │   ├── TrackingConfig.cs
│   │   │   ├── TrackingConfigBase.cs
│   │   │   ├── TrackingConfigHashAlgorithm.cs
│   │   │   ├── TrackingManager.cs
│   │   │   ├── UploadResult.cs
│   │   │   └── WorkspaceMaintenanceProvider.cs
│   │   ├── CodeCoverage/
│   │   │   ├── CoberturaSummaryReader.cs
│   │   │   ├── CodeCoverageCommands.cs
│   │   │   ├── CodeCoverageConstants.cs
│   │   │   ├── CodeCoveragePublisher.cs
│   │   │   ├── CodeCoverageServer.cs
│   │   │   ├── CodeCoverageUtilities.cs
│   │   │   ├── FeatureFlagUtility.cs
│   │   │   ├── ICodeCoverageSummaryReader.cs
│   │   │   └── JaCoCoSummaryReader.cs
│   │   ├── Container/
│   │   │   ├── ContainerDiagnosticsManager.cs
│   │   │   ├── DockerCommandManager.cs
│   │   │   └── DockerUtil.cs
│   │   ├── ContainerOperationProvider.cs
│   │   ├── ContainerOperationProviderEnhanced.cs
│   │   ├── DiagnosticLogManager.cs
│   │   ├── ExecutionContext.cs
│   │   ├── ExpressionManager.cs
│   │   ├── GitManager.cs
│   │   ├── Handlers/
│   │   │   ├── AgentPluginHandler.cs
│   │   │   ├── Handler.cs
│   │   │   ├── HandlerFactory.cs
│   │   │   ├── LegacyPowerShellHandler.cs
│   │   │   ├── NodeHandler.cs
│   │   │   ├── PowerShell3Handler.cs
│   │   │   ├── PowerShellExeHandler.cs
│   │   │   ├── ProcessHandler/
│   │   │   │   ├── CmdArgsSanitizer.cs
│   │   │   │   ├── Exceptions.cs
│   │   │   │   ├── ProcessHandler.cs
│   │   │   │   ├── ProcessHandlerHelper.cs
│   │   │   │   └── ProcessHandlerV2.cs
│   │   │   └── StepHost.cs
│   │   ├── JobExtension.cs
│   │   ├── JobExtensionRunner.cs
│   │   ├── JobRunner.cs
│   │   ├── Maintenance/
│   │   │   └── MaintenanceJobExtension.cs
│   │   ├── ManagementScriptStep.cs
│   │   ├── NodeJsUtil.cs
│   │   ├── NodeVersionStrategies/
│   │   │   ├── CustomNodeStrategy.cs
│   │   │   ├── GlibcCompatibilityInfo.cs
│   │   │   ├── GlibcCompatibilityInfoProvider.cs
│   │   │   ├── IGlibcCompatibilityInfoProvider.cs
│   │   │   ├── INodeVersionStrategy.cs
│   │   │   ├── Node10Strategy.cs
│   │   │   ├── Node16Strategy.cs
│   │   │   ├── Node20Strategy.cs
│   │   │   ├── Node24Strategy.cs
│   │   │   ├── Node6Strategy.cs
│   │   │   ├── NodeContainerTestHelper.cs
│   │   │   ├── NodeRunnerInfo.cs
│   │   │   ├── NodeVersionOrchestrator.cs
│   │   │   └── TaskContext.cs
│   │   ├── NuGet.Config
│   │   ├── PluginInternalCommandExtension.cs
│   │   ├── Program.cs
│   │   ├── Release/
│   │   │   ├── AgentUtilities.cs
│   │   │   ├── Artifacts/
│   │   │   │   ├── ArtifactDirectoryCreationFailedException.cs
│   │   │   │   ├── ArtifactDownloadException.cs
│   │   │   │   ├── BuildArtifact.cs
│   │   │   │   ├── CommitsDownloadException.cs
│   │   │   │   ├── CustomArtifact.cs
│   │   │   │   ├── Definition/
│   │   │   │   │   ├── ArtifactDefinition.cs
│   │   │   │   │   ├── BuildArtifactDetails.cs
│   │   │   │   │   ├── CustomArtifactDetails.cs
│   │   │   │   │   ├── CustomArtifactDownloadDetails.cs
│   │   │   │   │   ├── CustomArtifactVersionDetails.cs
│   │   │   │   │   ├── GitHubArtifactDetails.cs
│   │   │   │   │   ├── IArtifactDetails.cs
│   │   │   │   │   ├── JenkinsArtifactDetails.cs
│   │   │   │   │   ├── TfsGitArtifactDetails.cs
│   │   │   │   │   ├── TfsVCArtifactDetails.cs
│   │   │   │   │   └── WellKnownStreamTypes.cs
│   │   │   │   ├── FileShareArtifact.cs
│   │   │   │   ├── GenericHttpClient.cs
│   │   │   │   ├── GitHubArtifact.cs
│   │   │   │   ├── GitHubHttpClient.cs
│   │   │   │   ├── JenkinsArtifact.cs
│   │   │   │   ├── TfsGitArtifact.cs
│   │   │   │   └── TfsVCArtifact.cs
│   │   │   ├── ContainerFetchEngine/
│   │   │   │   ├── ContainerFetchEngine.cs
│   │   │   │   ├── ContainerFetchEngineDefaultOptions.cs
│   │   │   │   ├── ContainerFetchEngineOptions.cs
│   │   │   │   ├── ContainerItem.cs
│   │   │   │   ├── FetchEngine.cs
│   │   │   │   ├── HttpRetryOnTimeoutHandler.cs
│   │   │   │   ├── HttpRetryOnTimeoutOptions.cs
│   │   │   │   ├── IConatinerFetchEngineLogger.cs
│   │   │   │   ├── IContainerProvider.cs
│   │   │   │   ├── ItemType.cs
│   │   │   │   └── NullExecutionLogger.cs
│   │   │   ├── ContainerProvider/
│   │   │   │   ├── FileContainerProvider.cs
│   │   │   │   └── Helpers/
│   │   │   │       ├── AsyncLazy.cs
│   │   │   │       ├── ContainerProviderFactory.cs
│   │   │   │       ├── ExecutionLogger.cs
│   │   │   │       └── VssConnectionFactory.cs
│   │   │   ├── DeploymentJobExtension.cs
│   │   │   ├── IArtifactExtension.cs
│   │   │   ├── IReleaseDirectoryManager.cs
│   │   │   ├── ReleaseCommandExtension.cs
│   │   │   ├── ReleaseDirectoryManager.cs
│   │   │   ├── ReleaseFileSystemManager.cs
│   │   │   ├── ReleaseJobExtension.cs
│   │   │   ├── ReleaseServer.cs
│   │   │   ├── ReleaseTrackingConfig.cs
│   │   │   ├── ReleaseTrackingManager.cs
│   │   │   ├── RetryExecutor.cs
│   │   │   └── ZipStreamDownloader.cs
│   │   ├── ResourceMetricsManager.cs
│   │   ├── RetryHelper.cs
│   │   ├── SignatureService.cs
│   │   ├── SimpleTimer.cs
│   │   ├── StepsRunner.cs
│   │   ├── TaskCommandExtension.cs
│   │   ├── TaskDecoratorManager.cs
│   │   ├── TaskManager.cs
│   │   ├── TaskRestrictionsChecker.cs
│   │   ├── TaskRestrictionsExtension.cs
│   │   ├── TaskRunner.cs
│   │   ├── Telemetry/
│   │   │   ├── CustomerIntelligenceServer.cs
│   │   │   └── TelemetryCommandExtension.cs
│   │   ├── TempDirectoryManager.cs
│   │   ├── TfManager.cs
│   │   ├── Variables.cs
│   │   ├── VsoTaskLibManager.cs
│   │   ├── Worker.cs
│   │   ├── WorkerCommandManager.cs
│   │   └── WorkerUtilties.cs
│   ├── Common.props
│   ├── Microsoft.VisualStudio.Services.Agent/
│   │   ├── AdditionalMaskingRegexes.cs
│   │   ├── AgentCertificateManager.cs
│   │   ├── AgentCredentialStore/
│   │   │   ├── LinuxAgentCredentialStore.cs
│   │   │   ├── MacOSAgentCredentialStore.cs
│   │   │   ├── NoOpAgentCredentialStore.cs
│   │   │   └── WindowsAgentCredentialStore.cs
│   │   ├── AgentServer.cs
│   │   ├── AgentService.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── AsyncManualResetEvent.cs
│   │   ├── Blob/
│   │   │   ├── BlobFileInfo.cs
│   │   │   ├── BlobStoreClientTelemetryTfs.cs
│   │   │   ├── BlobStoreUtils.cs
│   │   │   ├── BlobstoreClientSettings.cs
│   │   │   ├── BuildArtifactActionRecord.cs
│   │   │   ├── CustomerIntelligenceTelemetrySender.cs
│   │   │   ├── DedupManifestArtifactClientFactory.cs
│   │   │   ├── IDedupRecord.cs
│   │   │   ├── PipelineTelemetryRecord.cs
│   │   │   └── TimelineRecordAttachmentTelemetryRecord.cs
│   │   ├── Capabilities/
│   │   │   ├── AgentCapabilitiesProvider.cs
│   │   │   ├── CapabilitiesManager.cs
│   │   │   ├── EnvironmentCapabilitiesProvider.cs
│   │   │   ├── NixCapabilitiesProvider.cs
│   │   │   ├── PowerShellCapabilitiesProvider.cs
│   │   │   └── UserCapabilitiesProvider.cs
│   │   ├── Command.cs
│   │   ├── ConfigurationStore.cs
│   │   ├── Constants.cs
│   │   ├── CorrelationContextManager.cs
│   │   ├── CredentialData.cs
│   │   ├── DeploymentGroupServer.cs
│   │   ├── EnhancedTracing.cs
│   │   ├── EnvironmentsServer.cs
│   │   ├── Exceptions.cs
│   │   ├── ExtensionManager.cs
│   │   ├── Extensions.cs
│   │   ├── HostContext.cs
│   │   ├── HostTraceListener.cs
│   │   ├── IAgentCredentialStore.cs
│   │   ├── IExtension.cs
│   │   ├── ITracingProxy.cs
│   │   ├── JobNotification.cs
│   │   ├── JobServer.cs
│   │   ├── JobServerQueue.cs
│   │   ├── LocationServer.cs
│   │   ├── Logging.cs
│   │   ├── Microsoft.VisualStudio.Services.Agent.csproj
│   │   ├── NuGet.Config
│   │   ├── ProcessChannel.cs
│   │   ├── ProcessExtensions.cs
│   │   ├── ProcessInvoker.cs
│   │   ├── StreamString.cs
│   │   ├── TaskServer.cs
│   │   ├── Terminal.cs
│   │   ├── ThrottlingReportHandler.cs
│   │   ├── TraceManager.cs
│   │   ├── TraceSetting.cs
│   │   ├── Tracing.cs
│   │   ├── TracingProxy.cs
│   │   ├── Util/
│   │   │   ├── EnumUtil.cs
│   │   │   ├── PlanUtil.cs
│   │   │   ├── PowerShellExeUtil.cs
│   │   │   ├── ServerUtil.cs
│   │   │   ├── TaskResultUtil.cs
│   │   │   ├── UnixUtil.cs
│   │   │   └── VarUtil.cs
│   │   ├── VstsAgentWebProxy.cs
│   │   └── WindowsEnvVarHelper.cs
│   ├── Misc/
│   │   ├── BuildConstants.ch
│   │   ├── InstallAgentPackage.template.xml
│   │   ├── Publish.template.ps1
│   │   ├── UpdateAgentPackage.template.xml
│   │   ├── check-symlinks.sh
│   │   ├── externals.sh
│   │   ├── layoutbin/
│   │   │   ├── AgentService.js
│   │   │   ├── containerHandlerInvoker.js.template
│   │   │   ├── darwin.svc.sh.template
│   │   │   ├── de-DE/
│   │   │   │   └── strings.json
│   │   │   ├── en-US/
│   │   │   │   └── strings.json
│   │   │   ├── es-ES/
│   │   │   │   └── strings.json
│   │   │   ├── fr-FR/
│   │   │   │   └── strings.json
│   │   │   ├── installdependencies.sh
│   │   │   ├── it-IT/
│   │   │   │   └── strings.json
│   │   │   ├── ja-JP/
│   │   │   │   └── strings.json
│   │   │   ├── ko-KR/
│   │   │   │   └── strings.json
│   │   │   ├── powershell/
│   │   │   │   ├── Add-AndroidSdkCapabilities.ps1
│   │   │   │   ├── Add-AntCapabilities.ps1
│   │   │   │   ├── Add-ApplicationCapabilities.ps1
│   │   │   │   ├── Add-AzureGuestAgentCapabilities.ps1
│   │   │   │   ├── Add-AzurePowerShellCapabilities.ps1
│   │   │   │   ├── Add-Capabilities.ps1
│   │   │   │   ├── Add-ChefCapabilities.ps1
│   │   │   │   ├── Add-DotNetFrameworkCapabilities.ps1
│   │   │   │   ├── Add-JavaCapabilities.ps1
│   │   │   │   ├── Add-MSBuildCapabilities.ps1
│   │   │   │   ├── Add-MavenCapabilities.ps1
│   │   │   │   ├── Add-PowerShellCapabilities.ps1
│   │   │   │   ├── Add-ScvmmAdminConsoleCapabilities.ps1
│   │   │   │   ├── Add-SqlPackageCapabilities.ps1
│   │   │   │   ├── Add-VisualStudioCapabilities.ps1
│   │   │   │   ├── Add-WindowsKitCapabilities.ps1
│   │   │   │   ├── Add-WindowsSdkCapabilities.ps1
│   │   │   │   ├── Add-XamarinAndroidCapabilities.ps1
│   │   │   │   ├── CapabilityHelpers/
│   │   │   │   │   ├── CapabilityFunctions.ps1
│   │   │   │   │   ├── CapabilityHelpers.psm1
│   │   │   │   │   ├── PathFunctions.ps1
│   │   │   │   │   ├── RegistryFunctions.ps1
│   │   │   │   │   ├── VersionFunctions.ps1
│   │   │   │   │   └── VisualStudioFunctions.ps1
│   │   │   │   ├── Get-LocalGroupMembership.ps1
│   │   │   │   └── Start-AzpTask.ps1
│   │   │   ├── ru-RU/
│   │   │   │   └── strings.json
│   │   │   ├── runsvc.sh
│   │   │   ├── systemd.svc.sh.template
│   │   │   ├── tasks-exception-list.json
│   │   │   ├── update.cmd.template
│   │   │   ├── update.sh.template
│   │   │   ├── vsts.agent.plist.template
│   │   │   ├── vsts.agent.service.template
│   │   │   ├── zh-CN/
│   │   │   │   └── strings.json
│   │   │   └── zh-TW/
│   │   │       └── strings.json
│   │   ├── layoutroot/
│   │   │   ├── config.cmd
│   │   │   ├── config.sh
│   │   │   ├── env.sh
│   │   │   ├── license.html
│   │   │   ├── reauth.cmd
│   │   │   ├── reauth.sh
│   │   │   ├── run-docker.sh
│   │   │   ├── run.cmd
│   │   │   └── run.sh
│   │   └── osxsvclayout.txt
│   ├── NuGet.Config
│   ├── Test/
│   │   ├── CodeCoverage.runsettings
│   │   ├── L0/
│   │   │   ├── ConstantGenerationL0.cs
│   │   │   ├── Container/
│   │   │   │   ├── ContainerDiagnosticsManagerL0.cs
│   │   │   │   ├── ContainerInfoL0.cs
│   │   │   │   ├── DockerCommandManagerL0.cs
│   │   │   │   └── DockerUtilL0.cs
│   │   │   ├── CorrelationContextManagerL0.cs
│   │   │   ├── EnhancedTracingCorrelationL0.cs
│   │   │   ├── EnhancedTracingL0.cs
│   │   │   ├── ExtensionManagerL0.cs
│   │   │   ├── HostContextExtensionL0.cs
│   │   │   ├── HostContextL0.cs
│   │   │   ├── KnobL0.cs
│   │   │   ├── Listener/
│   │   │   │   ├── AgentL0.cs
│   │   │   │   ├── CommandSettingsL0.cs
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── AgentAutoLogonTestL0.cs
│   │   │   │   │   ├── AgentCapabilitiesProviderTestL0.cs
│   │   │   │   │   ├── AgentCredentialL0.cs
│   │   │   │   │   ├── ArgumentValidatorTestsL0.cs
│   │   │   │   │   ├── ConfigurationManagerL0.cs
│   │   │   │   │   ├── Mocks/
│   │   │   │   │   │   └── MockNativeWindowsServiceHelper.cs
│   │   │   │   │   ├── NativeWindowsServiceHelperL0.cs
│   │   │   │   │   ├── PromptManagerTestsL0.cs
│   │   │   │   │   ├── ServiceControlManagerL0.cs
│   │   │   │   │   └── UserCapabilitiesProviderTestL0.cs
│   │   │   │   ├── JobDispatcherL0.cs
│   │   │   │   ├── ListenerCorrelationIntegrationL0.cs
│   │   │   │   ├── MessageListenerL0.cs
│   │   │   │   └── PipelineParserL0.cs
│   │   │   ├── LocStringsL0.cs
│   │   │   ├── NodeHandler.GlibcTest.cs
│   │   │   ├── NodeHandlerCollections.cs
│   │   │   ├── NodeHandlerL0.AllSpecs.cs
│   │   │   ├── NodeHandlerL0.TestSpecifications.cs
│   │   │   ├── NodeHandlerL0.cs
│   │   │   ├── NodeHandlerTestBase.cs
│   │   │   ├── PagingLoggerL0.cs
│   │   │   ├── Plugin/
│   │   │   │   ├── BlobstoreClientSettingsL0.cs
│   │   │   │   ├── ChunkerTests.cs
│   │   │   │   ├── FingerprintCreatorTests.cs
│   │   │   │   ├── FingerprintTests.cs
│   │   │   │   ├── IsPathyTests.cs
│   │   │   │   ├── LogPluginHostL0.cs
│   │   │   │   ├── MatchingTests.cs
│   │   │   │   ├── RepositoryPluginL0.cs
│   │   │   │   ├── TarUtilsL0.cs
│   │   │   │   ├── TestFileContainerProvider/
│   │   │   │   │   └── TestFileContainerProviderL0.cs
│   │   │   │   ├── TestFilePublisher/
│   │   │   │   │   ├── TestFileFinderL0.cs
│   │   │   │   │   ├── TestFilePublisherL0.cs
│   │   │   │   │   └── TestFilePublisherLogPluginL0.cs
│   │   │   │   ├── TestFileShareProvider/
│   │   │   │   │   ├── MockDedupManifestArtifactClientFactory.cs
│   │   │   │   │   ├── TestFileShareProviderL0.cs
│   │   │   │   │   └── TestTelemetrySender.cs
│   │   │   │   ├── TestGitCliManager/
│   │   │   │   │   ├── MockAgentTaskPluginExecutionContext.cs
│   │   │   │   │   ├── MockGitCliManager.cs
│   │   │   │   │   └── TestGitCliManagerL0.cs
│   │   │   │   ├── TestGitSourceProvider/
│   │   │   │   │   ├── GitSourceProviderL0.cs
│   │   │   │   │   ├── MockAgentTaskPluginExecutionContext.cs
│   │   │   │   │   ├── MockGitCliManager.cs
│   │   │   │   │   └── MockGitSoureProvider.cs
│   │   │   │   └── TestResultParser/
│   │   │   │       ├── EnumerableExtensionL0.cs
│   │   │   │       ├── LogPreProcessorL0.cs
│   │   │   │       ├── PipelineTestRunPublisherL0.cs
│   │   │   │       ├── TestResultLogPluginL0.cs
│   │   │   │       └── TestRunManagerL0.cs
│   │   │   ├── ProcessExtensionL0.cs
│   │   │   ├── ProcessInvokerL0.cs
│   │   │   ├── ProxyConfigL0.cs
│   │   │   ├── SecretMaskerTests/
│   │   │   │   ├── LoggedSecretMaskerL0.cs
│   │   │   │   └── SecretMaskerL0.cs
│   │   │   ├── ServiceInterfacesL0.cs
│   │   │   ├── TestHostContext.cs
│   │   │   ├── TestUtil.cs
│   │   │   ├── TraceManagerL0.cs
│   │   │   ├── Util/
│   │   │   │   ├── ArgUtilL0.cs
│   │   │   │   ├── CertificateUtilL0.cs
│   │   │   │   ├── IOUtilL0.cs
│   │   │   │   ├── ProcessUtilL0.cs
│   │   │   │   ├── RepositoryUtilL0.cs
│   │   │   │   ├── StringUtilL0.cs
│   │   │   │   ├── TaskResultUtilL0.cs
│   │   │   │   ├── TelemetryPropsUtil.cs
│   │   │   │   ├── UrlUtilL0.cs
│   │   │   │   ├── VarUtilL0.cs
│   │   │   │   ├── VssUtilL0.cs
│   │   │   │   └── WhichUtilL0.cs
│   │   │   ├── VstsAgentWebProxyL0.cs
│   │   │   └── Worker/
│   │   │       ├── AgentPluginManagerL0.cs
│   │   │       ├── Build/
│   │   │       │   ├── BuildDirectoryManagerL0.cs
│   │   │       │   ├── BuildJobExtensionL0.cs
│   │   │       │   ├── GitCommandManagerL0.cs
│   │   │       │   ├── GitSourceProviderL0.cs
│   │   │       │   ├── TfsVCCommandManagerL0.cs
│   │   │       │   ├── TfsVCSourceProvider.WorkspaceUtilL0.cs
│   │   │       │   ├── TfsVCSourceProviderL0.cs
│   │   │       │   ├── TrackingConfigHashAlgorithmL0.cs
│   │   │       │   ├── TrackingConfigL0.cs
│   │   │       │   ├── TrackingManagerL0.cs
│   │   │       │   └── WorkspaceMaintenanceProvicerL0.cs
│   │   │       ├── CodeCoverage/
│   │   │       │   ├── CoberturaSummaryReaderTests.cs
│   │   │       │   ├── CodeCoverageCommandExtensionTests.cs
│   │   │       │   ├── CodeCoverageConstants.cs
│   │   │       │   ├── CodeCoverageUtilitiesTests.cs
│   │   │       │   ├── JacocoSummaryReaderTests.cs
│   │   │       │   ├── frame-summary.html
│   │   │       │   └── index.html
│   │   │       ├── ContainerOperationProviderEnhancedL0.cs
│   │   │       ├── ContainerOperationProviderL0.cs
│   │   │       ├── ContainerOperationProviderL0.md
│   │   │       ├── ContainerOperationProviderL0Base.cs
│   │   │       ├── ExecutionContextL0.cs
│   │   │       ├── ExpressionManagerL0.cs
│   │   │       ├── GitManagerL0.cs
│   │   │       ├── Handlers/
│   │   │       │   ├── CmdArgsSanitizerL0.cs
│   │   │       │   ├── ProcessHandlerHelperL0.cs
│   │   │       │   ├── ProcessHandlerHelperTelemetryL0.cs
│   │   │       │   └── ProcessHandlerL0.cs
│   │   │       ├── JobExtensionL0.cs
│   │   │       ├── JobRunnerL0.cs
│   │   │       ├── LoggingCommandL0.cs
│   │   │       ├── PluginInternalUpdateRepositoryPathCommandL0.cs
│   │   │       ├── Release/
│   │   │       │   ├── AgentUtlitiesL0.cs
│   │   │       │   ├── FetchEngineL0.cs
│   │   │       │   ├── GitHubArtifactL0.cs
│   │   │       │   ├── JenkinsArtifactL0.cs
│   │   │       │   ├── ReleaseDirectoryManagerL0.cs
│   │   │       │   ├── ReleaseJobExtensionL0.cs
│   │   │       │   ├── TfsGitArtifactL0.cs
│   │   │       │   └── TfsVCArtifactL0.cs
│   │   │       ├── SetVariableRestrictionsL0.cs
│   │   │       ├── StepsRunnerL0.cs
│   │   │       ├── TaskCommandExtensionL0.cs
│   │   │       ├── TaskDecoratorManagerL0.cs
│   │   │       ├── TaskManagerL0.cs
│   │   │       ├── TaskRunnerL0.cs
│   │   │       ├── Telemetry/
│   │   │       │   └── TelemetryCommandExtensionTests.cs
│   │   │       ├── TfManagerL0.cs
│   │   │       ├── VariablesL0.cs
│   │   │       ├── WorkerCommandManagerL0.cs
│   │   │       ├── WorkerCorrelationIntegrationL0.cs
│   │   │       └── WorkerL0.cs
│   │   ├── L1/
│   │   │   ├── L1HostContext.cs
│   │   │   ├── Mock/
│   │   │   │   ├── FakeAgentPluginManager.cs
│   │   │   │   ├── FakeBuildServer.cs
│   │   │   │   ├── FakeConfigurationStore.cs
│   │   │   │   ├── FakeCustomerIntelligenceServer.cs
│   │   │   │   ├── FakeJobServer.cs
│   │   │   │   ├── FakeReleaseServer.cs
│   │   │   │   ├── FakeResourceMetricsManager.cs
│   │   │   │   ├── FakeTaskManager.cs
│   │   │   │   └── FakeTaskServer.cs
│   │   │   ├── Plugins/
│   │   │   │   ├── FakeCheckoutTask.cs
│   │   │   │   └── FakeGitCliManager.cs
│   │   │   └── Worker/
│   │   │       ├── CheckoutL1Tests.cs
│   │   │       ├── ConditionsL1Tests.cs
│   │   │       ├── ConfigL1Tests.cs
│   │   │       ├── ContainerL1Tests.cs
│   │   │       ├── CoreL1Tests.cs
│   │   │       ├── CorrelationL1Tests.cs
│   │   │       ├── L1TestBase.cs
│   │   │       ├── TimeoutLogFlushingL1Tests.cs
│   │   │       └── VariableL1Tests.cs
│   │   ├── NuGet.Config
│   │   ├── Test.csproj
│   │   └── TestData/
│   │       └── TaskManagerL0/
│   │           └── task.json
│   ├── agentversion
│   ├── dev.cmd
│   ├── dev.sh
│   └── dir.proj
└── tools/
    ├── FindAgentsNotCompatibleWithAgent/
    │   ├── QueryAgentPoolsForCompatibleOS.ps1
    │   └── readme.md
    └── FindPipelinesUsingRetiredImages/
        ├── QueryJobHistoryForRetiredImages.ps1
        └── readme.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .CodeQL.yml
================================================
path_classifiers:
  test:
    # Note: use only forward slash / as a path separator.
    # *  Matches any sequence of characters except a forward slash.
    # ** Matches any sequence of characters, including a forward slash. 
    # This wildcard must either be surrounded by forward slash symbols, or used as the first segment of a path. 
    # It matches zero or more whole directory segments. There is no need to use a wildcard at the end of a directory path because all sub-directories are automatically matched. 
    # That is, /anything/ matches the anything directory and all its subdirectories.
    # Always enclose the expression in double quotes if it includes *.
    - src/Test

  # The default behavior is to tag all files created during the
  # build as `generated`. Results are hidden for generated code. You can tag 
  # further files as being generated by adding them to the `generated` section.
  generated:
    - _reports


================================================
FILE: .azure-pipelines/build-job.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
parameters:

- name: jobName
  type: string

- name: displayName
  type: string

- name: pool
  type: object

- name: container
  type: string

- name: targetFramework
  type: string

- name: timeoutInMinutes
  type: number

- name: branch
  type: string

- name: os
  type: string
  values:
  - win
  - linux
  - linux-musl
  - osx

- name: arch
  type: string
  values:
  - arm
  - arm64
  - x64
  - x86

- name: unitTests
  type: boolean

- name: functionalTests
  type: boolean

- name: codeCoverage
  type: boolean

- name: sign
  type: boolean

- name: verifySigning
  type: boolean

- name: publishArtifact
  type: boolean

- name: enableADOLogIssue
  type: boolean
  default: false

- name: packageType
  type: string
  default: agent
  values:
  - agent
  - pipelines-agent

- name: disableSdl
  type: boolean
  default: false

- name: justificationForDisablingSdl
  type: string
  default: ''

jobs:

- job: ${{ parameters.jobName }}
  displayName: ${{ parameters.displayName }}
  pool: ${{ parameters.pool }}
  timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
  ${{ if eq(parameters.targetFramework, 'all') }}:
    strategy:
      matrix:
        NET8.0:
          targetFramework: 'net8.0'
        NET10.0:
          targetFramework: 'net10.0'


  ${{ if ne(parameters.container, '') }}:
    container: ${{ parameters.container }}

  ${{ if eq(parameters.disableSdl, true) }}:
    parameters:
      sdl:
        codeql:
          compiled:
            enabled: false
            justificationForDisabling: ${{ parameters.justificationForDisablingSdl}}
  variables:
    PACKAGE_TYPE: ${{ parameters.packageType }}
    ${{ if eq(parameters.os, 'win') }}:
      devCommand: dev.cmd
    ${{ if ne(parameters.os, 'win') }}:
      devCommand: ./dev.sh
    layoutRoot: '_layout/${{ parameters.os }}-${{ parameters.arch }}'
    DisableCFSDetector: true
    DisableDockerDetector: true
    nugetMultiFeedWarnLevel: none
    CheckoutBranch: ${{ parameters.branch }}
    ${{ if ne(parameters.targetFramework, 'all') }}:
      targetFramework: ${{ parameters.targetFramework }}
  templateContext:
    outputs:
    - ${{ if or(parameters.unitTests, parameters.functionalTests) }}:
      - output: buildArtifacts
        displayName: 'Publish Test logs'
        condition: always()
        PathtoPublish: src/Test/TestLogs
        ArtifactName: ${{ parameters.os }}-${{ parameters.arch }}-$(System.JobId)
    - ${{ if eq(parameters.publishArtifact, true) }}:
      - output: buildArtifacts
        displayName: 'Publish Hash Artifact'
        PathtoPublish: _package
        ArtifactName: agent
    - ${{ if eq(parameters.publishArtifact, true) }}:
      - output: buildArtifacts
        displayName: 'Publish Agent Artifact'
        PathtoPublish: _package_hash
        ArtifactName: hash
  steps:

  - checkout: self
    clean: true

  - task: Bash@3
    displayName: Switch to target branch
    inputs:
      filePath: .azure-pipelines/scripts/switch-branch.sh
    env:
      TARGET_BRANCH: $(CheckoutBranch)
    condition: |
      and(
        eq(variables['Build.SourceBranch'], 'refs/heads/master'),
        ne(variables.CheckoutBranch, '')
      )

  # 1ES images used on the ARM pool doesn't contain unzip tool, so we need to install it before starting the build
  - ${{ if and(eq(parameters.arch, 'arm64'), ne(parameters.os, 'osx'), ne(parameters.os, 'win')) }}:
    - script: sudo dnf -y update && sudo dnf -y install unzip
      displayName: Install unzip
      retryCountOnTaskFailure: 5

  # Install nuget
  - ${{ if eq(parameters.os, 'win') }}:
    - task: NuGetToolInstaller@1
      displayName: Install NuGet for signing tests

  # Set up auth for nuget for when new packages need to be consumed
  - task: NuGetAuthenticate@1

  # Build agent layout
  - script: ${{ variables.devCommand }} layout $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }}
    workingDirectory: src
    displayName: Build & Layout Release
    retryCountOnTaskFailure: 5
    ${{ if parameters.enableADOLogIssue }}:
      env:
        ADO_ENABLE_LOGISSUE: true

  # Check if broken symlinks exist in the agent build
  - task: Bash@3
    inputs:
      filePath: src/Misc/check-symlinks.sh
    displayName: Check symlinks

  # Run l0 tests
  - ${{ if parameters.unitTests }}:
    - ${{ if and(eq(parameters.os, 'win'), eq(parameters.arch, 'x86')) }}:
      - task: UseDotNet@2
        displayName: Install .NET Core 6 Runtime
        inputs:
          version: '6.0.x'
          packageType: 'runtime'
          installationPath: 'C:\Program Files (x86)\dotnet'
        env:
          PROCESSOR_ARCHITECTURE: x86
    - script: ${{ variables.devCommand }} testl0 $(targetFramework) Debug ${{ parameters.os }}-${{ parameters.arch }}
      workingDirectory: src
      displayName: Unit tests
      timeoutInMinutes: 5

  # Run l1 tests
  - ${{ if parameters.functionalTests }}:
    - ${{ if and(eq(parameters.os, 'win'), eq(parameters.arch, 'x86')) }}:
      - task: UseDotNet@2
        displayName: Install .NET Core 6 SDK
        inputs:
          version: '6.0.424'
          packageType: sdk
          performMultiLevelLookup: true
    - script: ${{ variables.devCommand }} testl1 $(targetFramework) Debug ${{ parameters.os }}-${{ parameters.arch }}
      workingDirectory: src
      displayName: Functional tests

  - ${{ if or(parameters.unitTests, parameters.functionalTests) }}:
    # Publish test results
    - task: PublishTestResults@2
      displayName: Publish Test Results **/*.trx
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        testRunTitle: 'Agent Tests - ${{ parameters.os }}-${{ parameters.arch }}'
      condition: always()

  # Code coverage
  - ${{ if and(parameters.codeCoverage, parameters.unitTests, parameters.functionalTests) }}:
    - script: |
        dotnet tool install --global dotnet-reportgenerator-globaltool
        dotnet tool install --global dotnet-coverage
      displayName: Install Code Coverage and Report Generator

    - script: "${{ variables.devCommand }} report $(targetFramework) Debug ${{ parameters.os }}-${{ parameters.arch }}"
      displayName: Generate Code Coverage report
      workingDirectory: src

    - task: PublishCodeCoverageResults@1
      inputs:
        codeCoverageTool: 'cobertura'
        summaryFileLocation: _reports/**/Cobertura.xml
        pathToSources: src

  - ${{ if eq(parameters.os, 'osx') }}:
    - task: UseDotNet@2
      inputs:
        packageType: 'sdk'
        version: '6.0.x'

  - ${{ if parameters.sign }}:
    # Signing steps
    - template: /.azure-pipelines/signing.yml@self
      parameters:
        layoutRoot: ${{ variables.layoutRoot }}
        isWindows: ${{ eq(parameters.os, 'win') }}

  # Publish artifacts
  - ${{ if parameters.publishArtifact }}:

    # Package .NET Core Windows dependency (VC++ Redistributable)
    - ${{ if eq(parameters.os, 'win') }}:
      - template: /.azure-pipelines/package-vcredist.yml@self
        parameters:
          layoutRoot: ${{ variables.layoutRoot }}
          flavor: ${{ parameters.arch }}

    # Create agent package zip
    - script: "${{ variables.devCommand }} package $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }}"
      workingDirectory: src
      displayName: Package Release

    - script: "${{ variables.devCommand }} hash $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }}"
      workingDirectory: src
      displayName: Hash Package

  - ${{ if parameters.verifySigning }}:

    # Verify all binaries are signed (generate report)
    - task: securedevelopmentteam.vss-secure-development-tools.build-task-codesignvalidation.CodesignValidation@0
      displayName: 'Generate Codesign Report'
      inputs:
        path: ${{ variables.layoutRoot }}

    # Verify all binaries are signed (check report)
    - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@1
      displayName: 'Verify Codesign Report'
      inputs:
        CodesignValidation: true
        CodesignValidationBreakOn: WarningAbove
        ToolLogsNotFoundAction: Error

================================================
FILE: .azure-pipelines/build-jobs.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.

parameters:

- name: jobName
  type: string

- name: displayName
  type: string

- name: pool
  type: object

- name: container
  type: string
  default: ''

- name: targetFramework
  type: string

- name: timeoutInMinutes
  type: number
  default: 120

- name: branch
  type: string
  default: ''

- name: os
  type: string

- name: arch
  type: string

- name: unitTests
  type: boolean
  default: true

- name: functionalTests
  type: boolean
  default: true

- name: codeCoverage
  type: boolean
  default: false

- name: sign
  type: boolean

- name: verifySigning
  type: boolean
  default: false

- name: publishArtifacts
  type: boolean

- name: enableADOLogIssue
  type: boolean
  default: false

- name: buildAlternatePackage
  type: boolean
  default: false

- name: disableSdl
  type: boolean
  default: false

jobs:
- template: /.azure-pipelines/build-job.yml@self
  parameters:
    jobName: ${{ parameters.jobName }}
    displayName: ${{ parameters.displayName }}
    pool: ${{ parameters.pool }}
    container: ${{ parameters.container }}
    timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
    os: ${{ parameters.os }}
    arch: ${{ parameters.arch }}
    branch: ${{ parameters.branch }}
    codeCoverage: ${{ parameters.codeCoverage }}
    unitTests: ${{ parameters.unitTests }}
    functionalTests: ${{ parameters.functionalTests }}
    sign: ${{ parameters.sign }}
    verifySigning: ${{ parameters.verifySigning }}
    publishArtifact: ${{ parameters.publishArtifacts }}
    packageType: agent
    targetFramework: ${{ parameters.targetFramework }}

- ${{ if parameters.buildAlternatePackage }}:
  - template: /.azure-pipelines/build-job.yml@self
    parameters:
      jobName: ${{ parameters.jobName }}_alternate
      displayName: ${{ parameters.displayName }} (without Node 6, Node 10)
      pool: ${{ parameters.pool }}
      container: ${{ parameters.container }}
      timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
      os: ${{ parameters.os }}
      arch: ${{ parameters.arch }}
      branch: ${{ parameters.branch }}
      codeCoverage: false
      unitTests: false
      functionalTests: false
      sign: ${{ parameters.sign }}
      verifySigning: ${{ parameters.verifySigning }}
      publishArtifact: ${{ parameters.publishArtifacts }}
      packageType: pipelines-agent
      targetFramework: ${{ parameters.targetFramework }}

================================================
FILE: .azure-pipelines/get-pat.yml
================================================
steps:
- task: AzureCLI@2
  inputs:
    azureSubscription: ARM - WIF - manual
    scriptType: pscore
    scriptLocation: inlineScript
    inlineScript: |
      az account set --subscription $(SUBSCRIPTION_ID)
      $accessToken = az account get-access-token --resource $(RESOURCE_ID) --query accessToken --output tsv
      echo "##vso[task.setvariable variable=ACCESS_TOKEN;issecret=true]$accessToken"
  displayName: Get Access Token


================================================
FILE: .azure-pipelines/package-vcredist.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
parameters:
- name: layoutRoot
  type: string
- name: flavor
  type: string

steps:

# Package .NET Core Windows dependency (VC++ Redistributable)
- powershell: |
    Write-Host "Downloading 'VC++ Redistributable' package."
    $outDir = Join-Path -Path $env:TMP -ChildPath ([Guid]::NewGuid())
    New-Item -Path $outDir -ItemType directory 
    $outFile = Join-Path -Path $outDir -ChildPath "ucrt.zip"
    Invoke-WebRequest -Uri https://vstsagenttools.blob.core.windows.net/tools/ucrt/ucrt_${{ parameters.flavor }}.zip -OutFile $outFile
    Write-Host "Unzipping 'VC++ Redistributable' package to agent layout."
    $unzipDir = Join-Path -Path $outDir -ChildPath "unzip"
    Add-Type -AssemblyName System.IO.Compression.FileSystem
    [System.IO.Compression.ZipFile]::ExtractToDirectory($outFile, $unzipDir)
    $agentLayoutBin = Join-Path -Path $(Build.SourcesDirectory) -ChildPath "${{ parameters.layoutRoot }}\bin"
    Copy-Item -Path $unzipDir -Destination $agentLayoutBin -Force
  displayName: Package UCRT

================================================
FILE: .azure-pipelines/pipeline.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
# This pipeline will be extended to the OneESPT template
parameters:
- name: targetFramework
  type: string
  default: all
- name: preBuildStages
  type: stageList
  default: []
- name: postBuildStages
  type: stageList
  default: []
- name: test
  type: boolean
  default: true
- name: sign
  type: boolean
  default: false
- name: publishArtifacts
  type: boolean
  default: false
- name: buildAlternatePackage
  type: boolean
  default: true
- name: branch
  type: string
  default: ''
- name: testProxyAgent
  type: boolean
  default: false
- name: stageDependencies
  type: object
  default: []
- name: stageCondition
  type: string
  default: ''

# Targets
- name: win_x64
  type: boolean
  default: true
- name: win_x86
  type: boolean
  default: true
- name: win_arm64
  type: boolean
  default: true
- name: linux_x64
  type: boolean
  default: true
- name: linux_arm
  type: boolean
  default: true
- name: linux_arm64
  type: boolean
  default: true
- name: alpine_x64
  type: boolean
  default: true
- name: alpine_arm64
  type: boolean
  default: true
- name: macOS_x64
  type: boolean
  default: true
- name: macOS_arm64
  type: boolean
  default: true
resources:
  repositories:
  - repository: 1ESPipelineTemplates
    type: git
    name: 1ESPipelineTemplates/1ESPipelineTemplates
    ref: refs/tags/release
extends:
  template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
  parameters:
    settings:
      skipBuildTagsForGitHubPullRequests: true
    featureFlags:
      autoBaseline: false
    sdl:
      binskim:
        preReleaseVersion: '4.3.1'
      # do not fail on CG
      componentgovernance:
        failOnAlert: false
        alertWarningLevel: "Never"
      baseline:
        baselineSet: default
        baselineFile: $(Build.SourcesDirectory)/.gdn/.gdnbaselines
      sourceAnalysisPool:
        name: 1ES-ABTT-Shared-Pool
        image: abtt-windows-2022
        os: windows
    customBuildTags:
    - ES365AIMigrationTooling
    stages:

    - ${{ parameters.preBuildStages }}

    - stage: build
      displayName: Build
      ${{ if ne(length(parameters.stageDependencies), 0)}}:
        dependsOn: ${{ parameters.stageDependencies }}
      ${{ if ne(parameters.stageCondition, '') }}:
        condition: ${{ parameters.stageCondition }}
      jobs:
      # Test Proxy Agent
      - ${{ if parameters.testProxyAgent }}:
        - job: test_proxy_agent
          displayName: Test Proxy Agent
          ${{ if eq(parameters.targetFramework, 'all') }}:
            strategy:
              matrix:
                NET8.0:
                  targetFramework: 'net8.0'
                NET10.0:
                  targetFramework: 'net10.0'
          pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-ubuntu-2404
              os: linux
          variables:
            DisableDockerDetector: true
            nugetMultiFeedWarnLevel: none
            ${{ if ne(parameters.targetFramework, 'all') }}:
              targetFramework: ${{ parameters.targetFramework }}
          timeoutInMinutes: 300
          steps:
          - template: /.azure-pipelines/get-pat.yml@self
          - bash: |
              cd ./.azure-pipelines/scripts/
              npm install axios minimist

              releaseBranch="${{ parameters.branch }}"
              sourceBranch="$(Build.SourceBranch)"
              branch="${releaseBranch:-"${sourceBranch}"}"
              echo "Canary \"branch\" parameter: \"${branch}\""
              echo "Canary \"target_framework\" parameter: \"$(targetFramework)\""

              node ./run-and-verify.js \
                  --projectUrl "$(CANARY_PROJECT_URL)" \
                  --pipelineId "$(CANARY_PIPELINE_ID)" \
                  --token "$(ACCESS_TOKEN)" \
                  --templateParameters "{ \"branch\": \"${branch}\", \"target_framework\": \"$(targetFramework)\"}"
            displayName: Test Proxy Agent

  # Windows (x64)
      - ${{ if parameters.win_x64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_windows_x64
            displayName: Windows (x64)
            pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-windows-2022
              os: windows
            os: win
            arch: x64
            branch: ${{ parameters.branch }}
            codeCoverage: true
            unitTests: ${{ parameters.test }}
            functionalTests: ${{ parameters.test }}
            sign: ${{ parameters.sign }}
            verifySigning: ${{ parameters.sign }}
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}

  # Windows (x86)
      - ${{ if parameters.win_x86 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_windows_x86
            displayName: Windows (x86)
            pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-windows-2022
              os: windows
            os: win
            arch: x86
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: ${{ parameters.test }}
            sign: ${{ parameters.sign }}
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}
  
  # Windows (ARM64)
      - ${{ if parameters.win_arm64 }}:
          - template: /.azure-pipelines/build-jobs.yml@self
            parameters:
              jobName: build_windows_arm64
              displayName: Windows (ARM64)
              pool:
                name: 1ES-ABTT-Shared-Pool
                image: abtt-windows-2022
                os: windows
              os: win
              arch: arm64
              branch: ${{ parameters.branch }}
              unitTests: false
              functionalTests: false
              sign: ${{ parameters.sign }}
              publishArtifacts: ${{ parameters.publishArtifacts }}
              buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
              targetFramework: ${{ parameters.targetFramework }}

  # Linux (x64)
      - ${{ if parameters.linux_x64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_linux_x64
            displayName: Linux (x64)
            pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-ubuntu-2404
              os: linux
            os: linux
            arch: x64
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: ${{ parameters.test }}
            sign: ${{ parameters.sign }}
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}

  # Linux (ARM)
      - ${{ if parameters.linux_arm }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_linux_arm
            displayName: Linux (ARM)
            pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-ubuntu-2404
              os: linux
            timeoutInMinutes: 75
            os: linux
            arch: arm
            branch: ${{ parameters.branch }}
            unitTests: false
            functionalTests: false
            sign: false
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}

  # Linux (ARM64)
      - ${{ if parameters.linux_arm64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_linux_arm64
            displayName: Linux (ARM64)
            pool:
              name: 1ES-ABTT-Shared-ARM-64-Pool
              vmImage: abtt-azurelinux3_arm64
              os: linux
            timeoutInMinutes: 75
            os: linux
            arch: arm64
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: ${{ parameters.test }}
            sign: false
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}

  # Alpine (x64)
      - ${{ if parameters.alpine_x64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_alpine_x64
            displayName: Alpine (x64)
            pool:
              name: 1ES-ABTT-Shared-Pool
              image: abtt-ubuntu-2404
              os: linux
            #container: alpine
            os: linux-musl
            arch: x64
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: false
            sign: false
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: false
            targetFramework: ${{ parameters.targetFramework }}

  # Alpine (ARM64)
      - ${{ if parameters.alpine_arm64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            jobName: build_alpine_arm64
            displayName: Alpine (ARM64)
            pool:
              name: 1ES-ABTT-Shared-ARM-64-Pool
              vmImage: abtt-azurelinux3_arm64
              os: linux
            # container: # arm64v8/alpine (N/A)
            os: linux-musl
            arch: arm64
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: false
            sign: false
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: false
            targetFramework: ${{ parameters.targetFramework }}

  # macOS (x64)
      - ${{ if parameters.macOS_x64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            disableSdl: true
            jobName: build_osx
            displayName: macOS (x64)
            pool:
              name: Azure Pipelines
              image: macos-15
              os: macOS
            os: osx
            arch: x64
            branch: ${{ parameters.branch }}
            unitTests: ${{ parameters.test }}
            functionalTests: ${{ parameters.test }}
            sign: ${{ parameters.sign }}
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}

  # macOS (ARM64)
      - ${{ if parameters.macOS_arm64 }}:
        - template: /.azure-pipelines/build-jobs.yml@self
          parameters:
            disableSdl: true
            jobName: build_osx_arm64
            displayName: macOS (ARM64)
            pool:
              name: Azure Pipelines
              image: macos-15-arm64
              os: macOS
            os: osx
            arch: arm64
            branch: ${{ parameters.branch }}
            unitTests: false
            functionalTests: false
            sign: ${{ parameters.sign }}
            publishArtifacts: ${{ parameters.publishArtifacts }}
            buildAlternatePackage: ${{ parameters.buildAlternatePackage }}
            targetFramework: ${{ parameters.targetFramework }}
    - ${{ parameters.postBuildStages }}

================================================
FILE: .azure-pipelines/scripts/Get-SigntoolPath.ps1
================================================
function Get-Signtool() {
  <#
    .SYNOPSIS
    Function used to get signtool from windows SDK
  #>

  $systemBit = "x64"
  $programFiles = ${Env:ProgramFiles(x86)}

  if((Get-WmiObject Win32_Processor).AddressWidth -ne 64) {
    $systemBit = "x86"
    $programFiles = ${Env:ProgramFiles}
  }

  Write-Host "##[debug]System architecture is $systemBit"

  $signtoolPath = ""
  try {
    $windowsSdkPath=Get-ChildItem "$programFiles\Windows Kits\10\bin\1*" | Select-Object FullName | Sort-Object -Descending { [version](Split-Path $_.FullName -leaf)} | Select-Object -first 1

    $signtoolPath = "$($windowsSdkPath.FullName)\$systemBit\signtool.exe"
    return $signtoolPath
  } catch {
    Write-Host "##[error]Unbable to get signtool in $signtoolPath"
    exit 1
  }
}


================================================
FILE: .azure-pipelines/scripts/RemoveSignatureForThirdPartyAssemlies.ps1
================================================
<#
  .SYNOPSIS
    Script is used as a start point for the process of removing signature from the third party assemlies

  .PARAMETER LayoutRoot
    Parameter that contains path to the _layout directory for current agent build
#>

[CmdletBinding()]
param(
  [Parameter(Mandatory = $true)]
  [string]$LayoutRoot
)

. $PSScriptRoot\Get-SigntoolPath.ps1
. $PSScriptRoot\RemoveSignatureScript.ps1

$signtoolPath = Get-Signtool | Select -Last 1

if ( ($signToolPath -ne "") -and (Test-Path -Path $signtoolPath) ) {
  Remove-ThirdPartySignatures -SigntoolPath "$signToolPath" -LayoutRoot "$LayoutRoot"
} else {
  Write-Host "##[error]$signToolPath is not a valid path"
  exit 1
}


================================================
FILE: .azure-pipelines/scripts/RemoveSignatureScript.ps1
================================================
function Remove-ThirdPartySignatures() {
  <#
    .SYNOPSIS
      The script is used to perform signature removal of third party assemblies

    .PARAMETER SigntoolPath
      Path to signtool.exe

    .PARAMETER LayoutRoot
      Parameter that contains path to the _layout directory for current agent build
  #>
  [CmdletBinding()]
  param(
      [Parameter(Mandatory = $true)]
      [string]$SigntoolPath,
      [Parameter(Mandatory = $true)]
      [string]$LayoutRoot)

  $failedToUnsign = New-Object Collections.Generic.List[String]
  $succesfullyUnsigned = New-Object Collections.Generic.List[String]
  $filesWithoutSignatures = New-Object Collections.Generic.List[String]
  $filesCounter = 0
  foreach ($tree in Get-ChildItem -Path "$LayoutRoot" -Include "*.dll","*.exe" -Recurse | select FullName) {
    $filesCounter = $filesCounter + 1
    try {
      # check that file contain a signature before removal
      $verificationOutput = & "$SigntoolPath" verify /pa "$($tree.FullName)" 2>&1 | Write-Output
      $fileDoesntContainSignature = $false;

      if ($verificationOutput -match "No signature found.") {
        $fileDoesntContainSignature = $true;
        $filesWithoutSignatures.Add("$($tree.FullName)")
        $Error.clear()
      }

      if ($fileDoesntContainSignature -ne $true) {
        $removeOutput = & "$SigntoolPath" remove /s "$($tree.FullName)" 2>&1 | Write-Output
        if ($lastExitcode -ne 0) {
          $failedToUnsign.Add("$($tree.FullName)")
          $Error.clear()
        } else {
          $succesfullyUnsigned.Add("$($tree.FullName)")
        }
      }
    } catch {
        $failedToUnsign.Add("$($tree.FullName)")
        $Error.clear()
    }
  }

  Write-host "Failed to unsign - $($failedtounsign.Count)"
  Write-host "Succesfully unsigned - $($succesfullyUnsigned.Count)"
  Write-host "Files without signature - $($filesWithoutSignatures.Count)"
  foreach ($s in $filesWithoutSignatures) {
    Write-Host "File $s doesn't contain signature"
  }
  foreach ($s in $succesfullyunsigned) {
    Write-Host "Signature succefully removed for $s file"
  }

  if ($failedToUnsign.Count -gt 0) {
    foreach ($f in $failedtounsign) {
      Write-Host "##[error]Something went wrong, failed to process $f file"
    }
    exit 1
  }

  exit 0
}


================================================
FILE: .azure-pipelines/scripts/run-and-verify.js
================================================
/*

Script arguments:
    * Required:
        - projectUrl
        - pipelineId
        - token
    * Optional:
        - templateParameters (JSON)
        - intervalInSeconds (20 by default)

*/

const axios = require('axios');
const minimist = require('minimist');

const args = minimist(process.argv.slice(2));

const apiUrl = `${args.projectUrl}/_apis/pipelines/${args.pipelineId}/runs?api-version=7.0`;

const data = {};

if (args.templateParameters) {
    data.templateParameters = JSON.parse(args.templateParameters);
}

const config = {
    auth: {
        username: 'Basic',
        password: args.token
    }
};

(async () => {
    const run = (
        await axios.post(apiUrl, data, config)
    ).data;

    const webUrl = run._links.web.href;

    console.log(`Pipeline run URL: ${webUrl}`);

    const interval = setInterval(async () => {
        const { state, result } = (
            await axios.get(run.url, config)
        ).data;

        console.log(`Current state: "${state}"`);

        if (state != 'completed') return;

        clearInterval(interval);

        const message = `Pipeline run completed with result "${result}"; URL: ${webUrl}`;

        if (result == 'succeeded') {
            console.log(message);
        } else {
            console.log(`##vso[task.logissue type=error]${message}`);
            console.log('##vso[task.complete result=Failed]');
        }
    }, (args.intervalInSeconds || 20) * 1000);
})();


================================================
FILE: .azure-pipelines/scripts/switch-branch.ps1
================================================
git config user.email "azure-pipelines-bot@microsoft.com"
git config user.name "azure-pipelines-bot"

git checkout -f origin/$env:TARGET_BRANCH

if ($LASTEXITCODE -ne 0){
    Write-Error "git checkout failed with exit code $LASTEXITCODE" -ErrorAction Stop
}


================================================
FILE: .azure-pipelines/scripts/switch-branch.sh
================================================
git config user.email "azure-pipelines-bot@microsoft.com"
git config user.name "azure-pipelines-bot"

git checkout -f origin/$TARGET_BRANCH

last_exit_code=$?

if [[ $last_exit_code != 0 ]]; then
    echo "git checkout failed with exit code $last_exit_code"
    exit 1
fi


================================================
FILE: .azure-pipelines/signing.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
parameters:
- name: layoutRoot
  type: string
- name: isWindows
  type: boolean
  default: true
steps:
- ${{ if parameters.isWindows }}:
  - task: PowerShell@2
    inputs:
      targetType: 'filePath'
      filePath: ./.azure-pipelines/scripts/RemoveSignatureForThirdPartyAssemlies.ps1
      arguments: '-LayoutRoot ${{ parameters.layoutRoot }}'
      errorActionPreference: 'continue'
    displayName: Remove signatures from the third party packages
    condition: ne(variables['DISABLE_SIGNATURE_REMOVAL'], 'true')

  - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
    inputs:
      ConnectedServiceName: $(ConnectedServiceName)
      UseMSIAuthentication: true
      AppRegistrationClientId: $(AppRegistrationClientId)
      AppRegistrationTenantId: $(AppRegistrationTenantId)
      EsrpClientId: $(EsrpClientId)
      AuthAKVName: $(AuthAKVName)
      AuthSignCertName: $(AuthSignCertName)
      FolderPath: '${{ parameters.layoutRoot }}/bin'
      Pattern: AgentService.exe
      signConfigType: inlineSignParams
      inlineOperation: |
        [{
        "keyCode": "CP-235845-SN",
        "operationSetCode": "StrongNameSign",
        "parameters": [],
        "toolName": "sign",
        "toolVersion": "1.0"
        },
        {
        "keyCode": "CP-235845-SN",
        "operationSetCode": "StrongNameVerify",
        "parameters": [],
        "toolName": "sign",
        "toolVersion": "1.0"
        }
        ]
    displayName: Sign Agent Assemblies (Strong Name Signing)

- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
  inputs:
    ConnectedServiceName: $(ConnectedServiceName)
    UseMSIAuthentication: true
    AppRegistrationClientId: $(AppRegistrationClientId)
    AppRegistrationTenantId: $(AppRegistrationTenantId)
    EsrpClientId: $(EsrpClientId)
    AuthAKVName: $(AuthAKVName)
    AuthSignCertName: $(AuthSignCertName)
    FolderPath: '${{ parameters.layoutRoot }}/bin'
    Pattern: |
      Agent.*.dll
      Agent.*.exe
      Microsoft.VisualStudio.Services.Agent.dll
      AgentService.exe
      **\AgentService.resources.dll
    UseMinimatch: true
    signConfigType: inlineSignParams
    inlineOperation: |
      [{
      "keyCode": "CP-230012",
      "operationSetCode": "SigntoolSign",
      "parameters": [{
      "parameterName": "OpusName",
      "parameterValue": "Microsoft"
      },
      {
      "parameterName": "OpusInfo",
      "parameterValue": "http://www.microsoft.com"
      },
      {
      "parameterName": "FileDigest",
      "parameterValue": "/fd \"SHA256\""
      },
      {
      "parameterName": "PageHash",
      "parameterValue": "/NPH"
      },
      {
      "parameterName": "TimeStamp",
      "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
      }
      ],
      "toolName": "sign",
      "toolVersion": "1.0"
      },
      {
      "keyCode": "CP-230012",
      "operationSetCode": "SigntoolVerify",
      "parameters": [],
      "toolName": "sign",
      "toolVersion": "1.0"
      }
      ]
  displayName: Sign Agent Assemblies (Authenticode Signing)

- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
  inputs:
    ConnectedServiceName: $(ConnectedServiceName)
    UseMSIAuthentication: true
    AppRegistrationClientId: $(AppRegistrationClientId)
    AppRegistrationTenantId: $(AppRegistrationTenantId)
    EsrpClientId: $(EsrpClientId)
    AuthAKVName: $(AuthAKVName)
    AuthSignCertName: $(AuthSignCertName)
    FolderPath: '${{ parameters.layoutRoot }}'
    Pattern: |
      bin\powershell\**\*.ps1
      bin\powershell\**\*.psm1
      externals\vstshost\**\*.ps1
      externals\vstshost\**\*.psd1
      externals\vstshost\**\*.psm1
    UseMinimatch: true
    signConfigType: inlineSignParams
    inlineOperation: |
      [{
      "keyCode": "CP-230012",
      "operationSetCode": "SigntoolSign",
      "parameters": [{
      "parameterName": "OpusName",
      "parameterValue": "Microsoft"
      },
      {
      "parameterName": "OpusInfo",
      "parameterValue": "http://www.microsoft.com"
      },
      {
      "parameterName": "FileDigest",
      "parameterValue": "/fd \"SHA256\""
      },
      {
      "parameterName": "PageHash",
      "parameterValue": "/NPH"
      },
      {
      "parameterName": "TimeStamp",
      "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
      }
      ],
      "toolName": "sign",
      "toolVersion": "1.0"
      },
      {
      "keyCode": "CP-230012",
      "operationSetCode": "SigntoolVerify",
      "parameters": [],
      "toolName": "sign",
      "toolVersion": "1.0"
      }
      ]
  displayName: Sign PowerShell Scripts (Authenticode Signing)

- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
  inputs:
    ConnectedServiceName: $(ConnectedServiceName)
    UseMSIAuthentication: true
    AppRegistrationClientId: $(AppRegistrationClientId)
    AppRegistrationTenantId: $(AppRegistrationTenantId)
    EsrpClientId: $(EsrpClientId)
    AuthAKVName: $(AuthAKVName)
    AuthSignCertName: $(AuthSignCertName)
    FolderPath: '${{ parameters.layoutRoot }}'
    Pattern: |
      bin\**\*.dll
      bin\**\*.exe
      externals\**\*.exe
      externals\**\*.dll
      externals\**\*.pyd
    UseMinimatch: true
    signConfigType: inlineSignParams
    inlineOperation: |
      [{
      "keyCode": "CP-231522",
      "operationSetCode": "SigntoolSign",
      "parameters": [{
      "parameterName": "OpusName",
      "parameterValue": "Microsoft"
      },
      {
      "parameterName": "OpusInfo",
      "parameterValue": "http://www.microsoft.com"
      },
      {
      "parameterName": "Append",
      "parameterValue": "/as"
      },
      {
      "parameterName": "FileDigest",
      "parameterValue": "/fd \"SHA256\""
      },
      {
      "parameterName": "PageHash",
      "parameterValue": "/NPH"
      },
      {
      "parameterName": "TimeStamp",
      "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
      }
      ],
      "toolName": "sign",
      "toolVersion": "1.0"
      },
      {
      "keyCode": "CP-231522",
      "operationSetCode": "SigntoolVerify",
      "parameters": [],
      "toolName": "sign",
      "toolVersion": "1.0"
      }
      ]
  displayName: Sign Agent Assemblies (3rd Party Assemblies Signing)

- task: DeleteFiles@1
  inputs:
    SourceFolder: '${{ parameters.layoutRoot }}'
    Contents: '**\CodeSignSummary-*.md'
  displayName: Delete CodeSignSummary.md
  retryCountOnTaskFailure: 4

================================================
FILE: .editorconfig
================================================
# NOTE: Requires **VS2019 16.3** or later

# All Rules Enabled with default severity
# Description: All Rules are enabled with default severity. Rules with IsEnabledByDefault = false are force enabled with default severity.

[*]
indent_style = space

# XML project files
[*.{csproj,proj,j}]
indent_size = 2

[*.json]
indent_size = 2

# Powershell files
[*.ps1]
indent_size = 2

# Shell script files
[*.sh]
end_of_line = lf
indent_size = 4

# Code files
[*.{cs,vb}]

indent_size = 4
# insert_final_newline = true

# TODO: Enable as warning/error and clean unused imports in the next PR
# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0005#overview
dotnet_diagnostic.CS8019.severity = warning
# https://github.com/dotnet/format/issues/1623
dotnet_diagnostic.IDE0130.severity = none
dotnet_analyzer_diagnostic.category-Style.severity = error

# Code style rules

# IDE0001: Simplify Names
dotnet_diagnostic.IDE0001.severity = suggestion

# IDE0002: Simplify Member Access
dotnet_diagnostic.IDE0002.severity = suggestion

# IDE0003: Remove qualification
dotnet_diagnostic.IDE0003.severity = suggestion

# IDE0004: Remove Unnecessary Cast
dotnet_diagnostic.IDE0004.severity = warning

# Remove unnecessary using directives
dotnet_diagnostic.IDE0005.severity = warning

# Enforce 'var' used
dotnet_diagnostic.IDE0007.severity = none

# Use explicit type instead of 'var'
dotnet_diagnostic.IDE0008.severity = none

# IDE0010: Add missing cases
dotnet_diagnostic.IDE0010.severity = none

# IDE0011: Add braces
dotnet_diagnostic.IDE0011.severity = suggestion

# IDE0017: Simplify object initialization
dotnet_diagnostic.IDE0017.severity = suggestion

# IDE0018: Variable declaration can be inlined
dotnet_diagnostic.IDE0018.severity = suggestion

# IDE0019: Use pattern matching to avoid as followed by a null check
dotnet_diagnostic.IDE0019.severity = warning

# IDE0020: Use pattern matching to avoid 'is' check followed by a cast (with variable)
dotnet_diagnostic.IDE0020.severity = warning

# IDE0022: Use block body for method
dotnet_diagnostic.IDE0022.severity = none

# IDE0025: Use expression body for property
dotnet_diagnostic.IDE0025.severity = suggestion

# IDE0027: Use expression body for accessor
dotnet_diagnostic.IDE0027.severity = suggestion

# IDE0028: Simplify collection initialization
dotnet_diagnostic.IDE0028.severity = suggestion

# IDE0029: Null check can be simplified (ternary conditional check)
dotnet_diagnostic.IDE0029.severity = suggestion

# IDE0030: Null check can be simplified (nullable ternary conditional check)
dotnet_diagnostic.IDE0030.severity = suggestion

# IDE0031: Use null propagation
dotnet_diagnostic.IDE0031.severity = suggestion

# IDE0032: Use auto property
dotnet_diagnostic.IDE0032.severity = suggestion

# IDE0036: Order modifiers
dotnet_diagnostic.IDE0036.severity = warning

# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
dotnet_diagnostic.IDE0038.severity = warning

# IDE0040: Add accessibility modifiers
dotnet_diagnostic.IDE0040.severity = warning

# IDE0041 Use 'is null' check
dotnet_diagnostic.IDE0041.severity = suggestion

# IDE0042: Deconstruct variable declaration
dotnet_diagnostic.IDE0042.severity = suggestion

# IDE0044: Add readonly modifier
dotnet_diagnostic.IDE0044.severity = warning

# IDE0045: Use conditional expression for assignment
dotnet_diagnostic.IDE0045.severity = suggestion

# IDE0046: Convert to conditional expression
dotnet_diagnostic.IDE0046.severity = suggestion

# IDE0047: Remove unnecessary parentheses
dotnet_diagnostic.IDE0047.severity = suggestion

# IDE0048
dotnet_diagnostic.IDE0048.severity = suggestion

# IDE0049: Simplify Names
dotnet_diagnostic.IDE0049.severity = suggestion

# IDE0034: Simplify 'default' expression
dotnet_diagnostic.IDE0034.severity = suggestion

# IDE0054: Use compound assignment
dotnet_diagnostic.IDE0054.severity = suggestion

# IDE0055: Formatting rule
dotnet_diagnostic.IDE0055.severity = warning

# IDE0056: Use index operator
dotnet_diagnostic.IDE0056.severity = suggestion

# IDE0057: Substring can be simplified
dotnet_diagnostic.IDE0057.severity = suggestion

# IDE0058: Remove unnecessary expression value
dotnet_diagnostic.IDE0058.severity = none

# IDE0059: Unnecessary assignment of a value
dotnet_diagnostic.IDE0059.severity = suggestion

# IDE0060: Remove unused parameter
dotnet_diagnostic.IDE0060.severity = warning

# IDE0063: Use simple 'using' statement
dotnet_diagnostic.IDE0063.severity = suggestion

# IDE0066: Use switch expression
dotnet_diagnostic.IDE0066.severity = suggestion

# IDE0071: Simplify interpolation
dotnet_diagnostic.IDE0071.severity = suggestion

# IDE0074: Use compound assignment
dotnet_diagnostic.IDE0074.severity = suggestion

# IDE0078: Use pattern matching
dotnet_diagnostic.IDE0078.severity = suggestion

# IDE0083: Use pattern matching
dotnet_diagnostic.IDE0083.severity = suggestion

# IDE0090: Use 'new(...)'
dotnet_diagnostic.IDE0090.severity = suggestion

# IDE0100: Remove unnecessary equality operator
dotnet_diagnostic.IDE0100.severity = warning

# IDE0120: Simplify LINQ expression
dotnet_diagnostic.IDE0120.severity = warning

# IDE0270: Null check can be simplified (if null check)
dotnet_diagnostic.IDE0270.severity = suggestion

# IDE1005: Delegate invocation can be simplified.
dotnet_diagnostic.IDE1005.severity = suggestion

# IDE1006: Code-style naming rules
dotnet_diagnostic.IDE1006.severity = warning

# IDE0160: Convert to block scoped namespace
dotnet_diagnostic.IDE0160.severity = none

dotnet_code_quality.ca1711.allowed_suffixes = Flag|Flags

# Do not declare static members on generic types
dotnet_diagnostic.CA1000.severity = error

# Types that own disposable fields should be disposable
dotnet_diagnostic.CA1001.severity = error

# Use generic event handler instances
dotnet_diagnostic.CA1003.severity = error

# Enums should have zero value
dotnet_diagnostic.CA1008.severity = error

# Collections should implement generic interface
dotnet_diagnostic.CA1010.severity = error

# Abstract types should not have constructors
dotnet_diagnostic.CA1012.severity = silent

# Mark assemblies with CLSCompliant
dotnet_diagnostic.CA1014.severity = silent

# Mark assemblies with assembly version
dotnet_diagnostic.CA1016.severity = error

# Mark assemblies with ComVisible
dotnet_diagnostic.CA1017.severity = error

# Mark attributes with AttributeUsageAttribute
dotnet_diagnostic.CA1018.severity = error

# Define accessors for attribute arguments
dotnet_diagnostic.CA1019.severity = error

# Use properties where appropriate
dotnet_diagnostic.CA1024.severity = silent

# Mark enums with FlagsAttribute
dotnet_diagnostic.CA1027.severity = error

# Enum Storage should be Int32
dotnet_diagnostic.CA1028.severity = error

# Use events where appropriate
dotnet_diagnostic.CA1030.severity = silent

# Do not catch general exception types
dotnet_diagnostic.CA1031.severity = silent

# Implement standard exception constructors
dotnet_diagnostic.CA1032.severity = suggestion

# Interface methods should be callable by child types
dotnet_diagnostic.CA1033.severity = silent

# Nested types should not be visible
dotnet_diagnostic.CA1034.severity = silent

# Override methods on comparable types
dotnet_diagnostic.CA1036.severity = error

# Avoid empty interfaces
dotnet_diagnostic.CA1040.severity = error

# Provide ObsoleteAttribute message
dotnet_diagnostic.CA1041.severity = error

# Use Integral Or String Argument For Indexers
dotnet_diagnostic.CA1043.severity = error

# Properties should not be write only
dotnet_diagnostic.CA1044.severity = suggestion

# Declare types in namespaces
dotnet_diagnostic.CA1050.severity = error

# Do not declare visible instance fields
dotnet_diagnostic.CA1051.severity = silent

# Static holder types should be Static or NotInheritable
dotnet_diagnostic.CA1052.severity = suggestion

# Uri parameters should not be strings
dotnet_diagnostic.CA1054.severity = silent

# Uri return values should not be strings
dotnet_diagnostic.CA1055.severity = silent

# Uri properties should not be strings
dotnet_diagnostic.CA1056.severity = silent

# Types should not extend certain base types
dotnet_diagnostic.CA1058.severity = error

# Move pinvokes to native methods class
dotnet_diagnostic.CA1060.severity = silent

# Do not hide base class methods
dotnet_diagnostic.CA1061.severity = error

# Validate arguments of public methods
# PARTIALLY COMPLETE
dotnet_diagnostic.CA1062.severity = suggestion

# Implement IDisposable Correctly
dotnet_diagnostic.CA1063.severity = error

# Exceptions should be public
dotnet_diagnostic.CA1064.severity = error

# Do not raise exceptions in unexpected locations
dotnet_diagnostic.CA1065.severity = error

# Type {0} should implement IEquatable<T> because it overrides Equals
dotnet_diagnostic.CA1066.severity = error

# Override Object.Equals(object) when implementing IEquatable<T>
dotnet_diagnostic.CA1067.severity = error

# CancellationToken parameters must come last
dotnet_diagnostic.CA1068.severity = error

# Avoid using cref tags with a prefix
dotnet_diagnostic.CA1200.severity = error

# Do not pass literals as localized parameters
dotnet_diagnostic.CA1303.severity = silent

# Specify CultureInfo
dotnet_diagnostic.CA1304.severity = silent

# Specify IFormatProvider
dotnet_diagnostic.CA1305.severity = silent

# Specify StringComparison
dotnet_diagnostic.CA1307.severity = suggestion

# Normalize strings to uppercase
dotnet_diagnostic.CA1308.severity = suggestion

# Use ordinal stringcomparison
dotnet_diagnostic.CA1309.severity = suggestion

# P/Invokes should not be visible
dotnet_diagnostic.CA1401.severity = suggestion

# Avoid excessive inheritance
dotnet_diagnostic.CA1501.severity = error

# Avoid excessive complexity
dotnet_diagnostic.CA1502.severity = silent

# Avoid unmaintainable code
dotnet_diagnostic.CA1505.severity = error

# Avoid excessive class coupling
dotnet_diagnostic.CA1506.severity = silent

# Use nameof to express symbol names
dotnet_diagnostic.CA1507.severity = error

# Avoid dead conditional code
# TOO MANY FALSE POSITIVES
dotnet_diagnostic.CA1508.severity = silent

# Invalid entry in code metrics rule specification file
dotnet_diagnostic.CA1509.severity = error

# Identifiers should not contain underscores
# Too much work to change now
dotnet_diagnostic.CA1707.severity = silent

# Identifiers should differ by more than case
dotnet_diagnostic.CA1708.severity = suggestion

# Identifiers should have correct suffix
dotnet_diagnostic.CA1710.severity = error

# Identifiers should not have incorrect suffix
dotnet_diagnostic.CA1711.severity = error

# Do not prefix enum values with type name
dotnet_diagnostic.CA1712.severity = error

# Flags enums should have plural names
dotnet_diagnostic.CA1714.severity = error

# Identifiers should have correct prefix
dotnet_diagnostic.CA1715.severity = error

# Identifiers should not match keywords
dotnet_diagnostic.CA1716.severity = error

# Only FlagsAttribute enums should have plural names
dotnet_diagnostic.CA1717.severity = error

# Identifier contains type name
dotnet_diagnostic.CA1720.severity = error

# Property names should not match get methods
dotnet_diagnostic.CA1721.severity = error

# Type names should not match namespaces
dotnet_diagnostic.CA1724.severity = silent

# Parameter names should match base declaration
dotnet_diagnostic.CA1725.severity = silent

# Review unused parameters
dotnet_diagnostic.CA1801.severity = suggestion

# Use literals where appropriate
# this flags 'static readonly' as should be 'const'
dotnet_diagnostic.CA1802.severity = silent

# Do not ignore method results
dotnet_diagnostic.CA1806.severity = suggestion

# Initialize reference type static fields inline
dotnet_diagnostic.CA1810.severity = error

# Avoid uninstantiated internal classes
dotnet_diagnostic.CA1812.severity = error

# Avoid unsealed attributes
dotnet_diagnostic.CA1813.severity = error

# Prefer jagged arrays over multidimensional
dotnet_diagnostic.CA1814.severity = error

# Override equals and operator equals on value types
dotnet_diagnostic.CA1815.severity = suggestion

# Dispose methods should call SuppressFinalize
dotnet_diagnostic.CA1816.severity = suggestion

# Properties should not return arrays
dotnet_diagnostic.CA1819.severity = silent

# Test for empty strings using string length
dotnet_diagnostic.CA1820.severity = suggestion

# Remove empty Finalizers
dotnet_diagnostic.CA1821.severity = error

# Mark members as static
dotnet_diagnostic.CA1822.severity = silent

# Avoid unused private fields
dotnet_diagnostic.CA1823.severity = error

# Mark assemblies with NeutralResourcesLanguageAttribute
dotnet_diagnostic.CA1824.severity = error

# Avoid zero-length array allocations.
dotnet_diagnostic.CA1825.severity = suggestion

# Do not use Enumerable methods on indexable collections. Instead use the collection directly
dotnet_diagnostic.CA1826.severity = suggestion

# Do not use Count() or LongCount() when Any() can be used
dotnet_diagnostic.CA1827.severity = suggestion

# Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
dotnet_diagnostic.CA1828.severity = error

# Use Length/Count property instead of Count() when available
dotnet_diagnostic.CA1829.severity = suggestion

# Dispose objects before losing scope
dotnet_diagnostic.CA2000.severity = error

# Do not lock on objects with weak identity
dotnet_diagnostic.CA2002.severity = error

# Consider calling ConfigureAwait on the awaited task
dotnet_diagnostic.CA2007.severity = silent

# Do not create tasks without passing a TaskScheduler
dotnet_diagnostic.CA2008.severity = suggestion

# Do not call ToImmutableCollection on an ImmutableCollection value
dotnet_diagnostic.CA2009.severity = error

# Always consume the value returned by methods marked with PreserveSigAttribute
dotnet_diagnostic.CA2010.severity = error

# Review SQL queries for security vulnerabilities
dotnet_diagnostic.CA2100.severity = error

# Specify marshaling for P/Invoke string arguments
dotnet_diagnostic.CA2101.severity = silent

# Seal methods that satisfy private interfaces
dotnet_diagnostic.CA2119.severity = error

# Do Not Catch Corrupted State Exceptions
dotnet_diagnostic.CA2153.severity = error

# Rethrow to preserve stack details.
dotnet_diagnostic.CA2200.severity = error

# Do not raise reserved exception types
dotnet_diagnostic.CA2201.severity = suggestion

# Initialize value type static fields inline
dotnet_diagnostic.CA2207.severity = error

# Instantiate argument exceptions correctly
dotnet_diagnostic.CA2208.severity = suggestion

# Non-constant fields should not be visible
dotnet_diagnostic.CA2211.severity = suggestion

# Disposable fields should be disposed
dotnet_diagnostic.CA2213.severity = error

# Do not call overridable methods in constructors
dotnet_diagnostic.CA2214.severity = error

# Disposable types should declare finalizer
dotnet_diagnostic.CA2216.severity = error

# Do not mark enums with FlagsAttribute
dotnet_diagnostic.CA2217.severity = suggestion

# Override GetHashCode on overriding Equals
dotnet_diagnostic.CA2218.severity = error

# Do not raise exceptions in finally clauses
dotnet_diagnostic.CA2219.severity = error

# Override Equals on overloading operator equals
dotnet_diagnostic.CA2224.severity = error

# Operator overloads have named alternates
dotnet_diagnostic.CA2225.severity = error

# Operators should have symmetrical overloads
dotnet_diagnostic.CA2226.severity = error

# Collection properties should be read only
dotnet_diagnostic.CA2227.severity = suggestion

# Implement serialization constructors
dotnet_diagnostic.CA2229.severity = error

# Overload operator equals on overriding value type Equals
dotnet_diagnostic.CA2231.severity = error

# Pass system uri objects instead of strings
dotnet_diagnostic.CA2234.severity = suggestion

# Mark all non-serializable fields
dotnet_diagnostic.CA2235.severity = error

# Mark ISerializable types with serializable
dotnet_diagnostic.CA2237.severity = error

# Provide correct arguments to formatting methods
dotnet_diagnostic.CA2241.severity = error

# Test for NaN correctly
dotnet_diagnostic.CA2242.severity = error

# Attribute string literals should parse correctly
dotnet_diagnostic.CA2243.severity = error

# Do not duplicate indexed element initializations
dotnet_diagnostic.CA2244.severity = error

# Do not assign a property to itself.
dotnet_diagnostic.CA2245.severity = error

# Assigning symbol and its member in the same statement.
dotnet_diagnostic.CA2246.severity = error

# Do not use insecure deserializer BinaryFormatter
dotnet_diagnostic.CA2300.severity = error

# Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder
dotnet_diagnostic.CA2301.severity = error

# Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize
dotnet_diagnostic.CA2302.severity = error

# Do not use insecure deserializer LosFormatter
dotnet_diagnostic.CA2305.severity = error

# Do not use insecure deserializer NetDataContractSerializer
dotnet_diagnostic.CA2310.severity = error

# Do not deserialize without first setting NetDataContractSerializer.Binder
dotnet_diagnostic.CA2311.severity = error

# Ensure NetDataContractSerializer.Binder is set before deserializing
dotnet_diagnostic.CA2312.severity = error

# Do not use insecure deserializer ObjectStateFormatter
dotnet_diagnostic.CA2315.severity = error

# Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver
dotnet_diagnostic.CA2321.severity = error

# Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing
dotnet_diagnostic.CA2322.severity = error

# Do not use TypeNameHandling values other than None
dotnet_diagnostic.CA2326.severity = error

# Do not use insecure JsonSerializerSettings
dotnet_diagnostic.CA2327.severity = error

# Ensure that JsonSerializerSettings are secure
dotnet_diagnostic.CA2328.severity = error

# Do not deserialize with JsonSerializer using an insecure configuration
dotnet_diagnostic.CA2329.severity = error

# Ensure that JsonSerializer has a secure configuration when deserializing
dotnet_diagnostic.CA2330.severity = error

# Review code for SQL injection vulnerabilities
dotnet_diagnostic.CA3001.severity = error

# Review code for XSS vulnerabilities
dotnet_diagnostic.CA3002.severity = error

# Review code for file path injection vulnerabilities
dotnet_diagnostic.CA3003.severity = error

# Review code for information disclosure vulnerabilities
dotnet_diagnostic.CA3004.severity = error

# Review code for LDAP injection vulnerabilities
dotnet_diagnostic.CA3005.severity = error

# Review code for process command injection vulnerabilities
dotnet_diagnostic.CA3006.severity = error

# Review code for open redirect vulnerabilities
dotnet_diagnostic.CA3007.severity = error

# Review code for XPath injection vulnerabilities
dotnet_diagnostic.CA3008.severity = error

# Review code for XML injection vulnerabilities
dotnet_diagnostic.CA3009.severity = error

# Review code for XAML injection vulnerabilities
dotnet_diagnostic.CA3010.severity = error

# Review code for DLL injection vulnerabilities
dotnet_diagnostic.CA3011.severity = error

# Review code for regex injection vulnerabilities
dotnet_diagnostic.CA3012.severity = error

# Do Not Add Schema By URL
dotnet_diagnostic.CA3061.severity = error

# Insecure DTD processing in XML
dotnet_diagnostic.CA3075.severity = error

# Insecure XSLT script processing.
dotnet_diagnostic.CA3076.severity = error

# Insecure Processing in API Design, XmlDocument and XmlTextReader
dotnet_diagnostic.CA3077.severity = error

# Mark Verb Handlers With Validate Antiforgery Token
dotnet_diagnostic.CA3147.severity = error

# Do Not Use Weak Cryptographic Algorithms
dotnet_diagnostic.CA5350.severity = error

# Do Not Use Broken Cryptographic Algorithms
dotnet_diagnostic.CA5351.severity = error

# Do Not Use Unsafe Cipher Modes
dotnet_diagnostic.CA5358.severity = error

# Do Not Disable Certificate Validation
dotnet_diagnostic.CA5359.severity = error

# Do Not Call Dangerous Methods In Deserialization
dotnet_diagnostic.CA5360.severity = error

# Do Not Disable SChannel Use of Strong Crypto
dotnet_diagnostic.CA5361.severity = error

# Do Not Refer Self In Serializable Class
dotnet_diagnostic.CA5362.severity = error

# Do Not Disable Request Validation
dotnet_diagnostic.CA5363.severity = error

# Do Not Use Deprecated Security Protocols
dotnet_diagnostic.CA5364.severity = error

# Do Not Disable HTTP Header Checking
dotnet_diagnostic.CA5365.severity = error

# Use XmlReader For DataSet Read Xml
dotnet_diagnostic.CA5366.severity = error

# Do Not Serialize Types With Pointer Fields
dotnet_diagnostic.CA5367.severity = error

# Set ViewStateUserKey For Classes Derived From Page
dotnet_diagnostic.CA5368.severity = error

# Use XmlReader For Deserialize
dotnet_diagnostic.CA5369.severity = suggestion

# Use XmlReader For Validating Reader
dotnet_diagnostic.CA5370.severity = error

# Use XmlReader For Schema Read
dotnet_diagnostic.CA5371.severity = error

# Use XmlReader For XPathDocument
dotnet_diagnostic.CA5372.severity = error

# Do not use obsolete key derivation function
dotnet_diagnostic.CA5373.severity = error

# Do Not Use XslTransform
dotnet_diagnostic.CA5374.severity = error

# Do Not Use Account Shared Access Signature
dotnet_diagnostic.CA5375.severity = error

# Use SharedAccessProtocol HttpsOnly
dotnet_diagnostic.CA5376.severity = error

# Use Container Level Access Policy
dotnet_diagnostic.CA5377.severity = error

# Do not disable ServicePointManagerSecurityProtocols
dotnet_diagnostic.CA5378.severity = error

# Do Not Use Weak Key Derivation Function Algorithm
dotnet_diagnostic.CA5379.severity = error

# Do Not Add Certificates To Root Store
dotnet_diagnostic.CA5380.severity = error

# Ensure Certificates Are Not Added To Root Store
dotnet_diagnostic.CA5381.severity = error

# Use Secure Cookies In ASP.Net Core
dotnet_diagnostic.CA5382.severity = error

# Ensure Use Secure Cookies In ASP.Net Core
dotnet_diagnostic.CA5383.severity = error

# Do Not Use Digital Signature Algorithm (DSA)
dotnet_diagnostic.CA5384.severity = error

# Use Rivest–Shamir–Adleman (RSA) Algorithm With Sufficient Key Size
dotnet_diagnostic.CA5385.severity = error

# Avoid hardcoding SecurityProtocolType value
dotnet_diagnostic.CA5386.severity = error

# Do Not Use Weak Key Derivation Function With Insufficient Iteration Count
dotnet_diagnostic.CA5387.severity = error

# Ensure Sufficient Iteration Count When Using Weak Key Derivation Function
dotnet_diagnostic.CA5388.severity = error

# Do Not Add Archive Item's Path To The Target File System Path
dotnet_diagnostic.CA5389.severity = error

# Do not hard-code encryption key
dotnet_diagnostic.CA5390.severity = error

# Use antiforgery tokens in ASP.NET Core MVC controllers
dotnet_diagnostic.CA5391.severity = error

# Use DefaultDllImportSearchPaths attribute for P/Invokes
dotnet_diagnostic.CA5392.severity = silent

# Do not use unsafe DllImportSearchPath value
dotnet_diagnostic.CA5393.severity = error

# Do not use insecure randomness
dotnet_diagnostic.CA5394.severity = error

# Miss HttpVerb attribute for action methods
dotnet_diagnostic.CA5395.severity = error

# Set HttpOnly to true for HttpCookie
dotnet_diagnostic.CA5396.severity = error

# Do not use deprecated SslProtocols values
dotnet_diagnostic.CA5397.severity = error

# Avoid hardcoded SslProtocols values
dotnet_diagnostic.CA5398.severity = error

# HttpClients should enable certificate revocation list checks
dotnet_diagnostic.CA5399.severity = error

# Ensure HttpClient certificate revocation list check is not disabled
dotnet_diagnostic.CA5400.severity = error

# Do not use CreateEncryptor with non-default IV
dotnet_diagnostic.CA5401.severity = suggestion

# Use CreateEncryptor with the default IV
dotnet_diagnostic.CA5402.severity = error

# Do not hard-code certificate
dotnet_diagnostic.CA5403.severity = error

# Analyzer version mismatch
dotnet_diagnostic.CA9999.severity = error

dotnet_naming_style.underscored_camel_case.capitalization = camel_case
dotnet_naming_style.underscored_camel_case.required_prefix = _

# Rule to force private fields to be underscored camel case
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

dotnet_naming_rule.private_fields_underscored.symbols = private_fields
dotnet_naming_rule.private_fields_underscored.style = underscored_camel_case
dotnet_naming_rule.private_fields_underscored.severity = suggestion


================================================
FILE: .gdn/.gdnbaselines
================================================
{
  "hydrated": false,
  "properties": {
    "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines",
    "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance."
  },
  "version": "1.0.0",
  "baselines": {
    "default": {
      "name": "default",
      "createdDate": "2024-02-20 10:22:13Z",
      "lastUpdatedDate": "2024-02-20 10:22:13Z"
    }
  },
  "results": {
    "24c3ac3899a30f6cc0775a00314ef848344ec59d6429bfa50d42fd4ea866cae2": {
      "signature": "24c3ac3899a30f6cc0775a00314ef848344ec59d6429bfa50d42fd4ea866cae2",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Example in docs",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "8d297344c1e1bf3e258d1b2ca4afb5c06636a18e5f21a336b76668c3cf8992e0": {
      "signature": "8d297344c1e1bf3e258d1b2ca4afb5c06636a18e5f21a336b76668c3cf8992e0",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "f9fad72c2307e7267d7c6b3b34b728a7eb5552ab3fbe26e1f3d8432de62fe8e5": {
      "signature": "f9fad72c2307e7267d7c6b3b34b728a7eb5552ab3fbe26e1f3d8432de62fe8e5",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "2bccc624deb3e079e5ec8f549a788ef9f8afc9cd2a00d7921e2ebc81ffc62fef": {
      "signature": "2bccc624deb3e079e5ec8f549a788ef9f8afc9cd2a00d7921e2ebc81ffc62fef",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "cd2a3f2e3843934826515e4f92b5bb47485d6728cf43adfb6be002b1f39b46d0": {
      "signature": "cd2a3f2e3843934826515e4f92b5bb47485d6728cf43adfb6be002b1f39b46d0",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "ad90cfc89d359b0392b75f577f9a61d68cb9d09d303e7e60e5bafdbdbf8f88ff": {
      "signature": "ad90cfc89d359b0392b75f577f9a61d68cb9d09d303e7e60e5bafdbdbf8f88ff",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "63c639fec8bb7c8c06b0fe22589d7f2e95fd3a1b9bb4010961d3c94486a91b4e": {
      "signature": "63c639fec8bb7c8c06b0fe22589d7f2e95fd3a1b9bb4010961d3c94486a91b4e",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "2e1df57b20080483b99c3d0aa1de7bfb007cbbbd45343560f0ea2f1477cdda7f": {
      "signature": "2e1df57b20080483b99c3d0aa1de7bfb007cbbbd45343560f0ea2f1477cdda7f",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "60fd239d334298ee57982ad36171899470733b0565f9bc00e4b559055bb4b65c": {
      "signature": "60fd239d334298ee57982ad36171899470733b0565f9bc00e4b559055bb4b65c",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "cb0545311ac45e0b78b48f086b5ab75612bb6c8a92bf4115f2f70c66bfff6ee6": {
      "signature": "cb0545311ac45e0b78b48f086b5ab75612bb6c8a92bf4115f2f70c66bfff6ee6",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "020b01b4118ec031d8cc6925ebf1df0aa73ff1691eabed38c71f8e032971b4b7": {
      "signature": "020b01b4118ec031d8cc6925ebf1df0aa73ff1691eabed38c71f8e032971b4b7",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "0e722333a0cb7a1c68f4f23bb6a2cd55f51e197cb0fce079901be64258777d9b": {
      "signature": "0e722333a0cb7a1c68f4f23bb6a2cd55f51e197cb0fce079901be64258777d9b",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "a5d9c9fbcf9e89b1c0b173e56bc5c36bcc1d2706fbc02253109b266428c628dd": {
      "signature": "a5d9c9fbcf9e89b1c0b173e56bc5c36bcc1d2706fbc02253109b266428c628dd",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "7b69a473e0bf71b21c85fd488b7078d34d3e7c8be3ab7fd3cef0d8e3af69ac64": {
      "signature": "7b69a473e0bf71b21c85fd488b7078d34d3e7c8be3ab7fd3cef0d8e3af69ac64",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "d4a48c94f2e9feb9ac86451e56cf788f42442371f9eee17eb33a75ff174fe93f": {
      "signature": "d4a48c94f2e9feb9ac86451e56cf788f42442371f9eee17eb33a75ff174fe93f",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "01462e1d7e4c0bbe58b525a90f718a86b40e0e07c1e52f6b70783d3d82bb1819": {
      "signature": "01462e1d7e4c0bbe58b525a90f718a86b40e0e07c1e52f6b70783d3d82bb1819",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "d295cac3872ea43d805ece11f6f89ad1e73c525c6fd1dd20a70486a362ac35b2": {
      "signature": "d295cac3872ea43d805ece11f6f89ad1e73c525c6fd1dd20a70486a362ac35b2",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    },
    "85b71727a6d63622ddd1e13b79d79161e65ffe16c08f0a422f4957e2f527860d": {
      "signature": "85b71727a6d63622ddd1e13b79d79161e65ffe16c08f0a422f4957e2f527860d",
      "alternativeSignatures": [],
      "memberOf": [
        "default"
      ],
      "justification": "Unit test data",
      "createdDate": "2024-02-20 10:22:13Z"
    }
  }
}

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
*           text=auto

# Shell scripts should always use line feed not crlf
*.sh text eol=lf

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
*.js         text
*.json       text
*.resjson    text
*.htm        text
*.html       text
*.xml        text
*.txt        text
*.ini        text
*.inc        text
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
*.png     binary
*.jpg     binary
*.jpeg    binary
*.gif     binary
*.ico     binary
*.mov     binary
*.mp4     binary
*.mp3     binary
*.flv     binary
*.fla     binary
*.swf     binary
*.gz      binary
*.zip     binary
*.7z      binary
*.ttf     binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
*.doc   diff=astextplain
*.DOC   diff=astextplain
*.docx  diff=astextplain
*.DOCX  diff=astextplain
*.dot   diff=astextplain
*.DOT   diff=astextplain
*.pdf   diff=astextplain
*.PDF   diff=astextplain
*.rtf   diff=astextplain
*.RTF   diff=astextplain


================================================
FILE: .github/CODEOWNERS
================================================
# Global rule:
* @microsoft/azure-pipelines-tasks-and-agent @microsoft/azure-pipelines-platform


================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: Bug
description: File a bug report
title: "[BUG]: "
labels: ["bug"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: markdown
    attributes:
      value: |
        ## Having issue with Tasks?
        Log an issue at [Azure-Pipelines-Tasks](https://github.com/Microsoft/azure-pipelines-tasks). It contains all of the in-box tasks we ship with Azure-Pipelines/VSTS/TFS. If you're having issues with tasks in Build/Release jobs (e.g. unreasonable task failure) please log an issue there.
  - type: textarea
    id: what-happened
    attributes:
      label: What happened?
      description: What did you do? What happened? What did you expect to happen?
      placeholder: Put your description of the bug here.
    validations:
      required: true
  - type: textarea
    id: versions
    attributes:
      label: Versions
      description: Specify the agent version and operation system version
      placeholder: Azure DevOps version 2.100.1 / Windows 10
    validations:
      required: true
  - type: checkboxes
    id: environment-type
    attributes:
      label: Environment type (Please select at least one enviroment where you face this issue)
      options:
        - label: Self-Hosted
        - label: Microsoft Hosted
        - label: VMSS Pool
        - label: Container
  - type: dropdown
    id: azure-devops-type
    attributes:
      label: Azure DevOps Server type
      options:
        - dev.azure.com (formerly visualstudio.com)
        - Azure DevOps Server (Please specify exact version in the textbox below)
    validations:
      required: true
  - type: input
    id: azure-devops-server-datails
    attributes:
      label: Azure DevOps Server Version (if applicable)
      placeholder: Azure DevOps Server 2019.1
  - type: input
    id: operation-system
    attributes:
      label: Operation system
      placeholder: Windows 11, Ubuntu 20.04...
  - type: input
    id: version-control-type
    attributes:
      label: Version controll system
  - type: textarea
    id: logs
    attributes:
      label: Relevant log output
      description: |
        Please copy and paste any relevant log output. You can find it in the _diag folder or on the pipelines logs on ADO side
      render: shell


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Developer Community
    url: https://developercommunity.visualstudio.com/AzureDevOps
    about: For other Azure DevOps issues
  - name: Tasks issue
    url: https://github.com/microsoft/azure-pipelines-tasks/issues/new
    about: If you have issues with tasks, please place your issues here.
  - name: Security issue
    url: https://github.com/microsoft/azure-pipelines-agent/security/policy
    about: For security issues, please check our policy
  - name: Issue with YAML
    url: https://github.com/Microsoft/azure-pipelines-yaml
    about: Over there we discuss YAML templates, samples for Azure Pipelines, and designs for upcoming YAML features. Also a place for the community to share best practices, ideas, and so on. File suggestions and issues here if they're specific to YAML pipelines.

================================================
FILE: .github/ISSUE_TEMPLATE/feature.yml
================================================
name: Feature request
description: Use this template to submit a feature request
title: "[enhancement]: "
labels: ["enhancement"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to raise a question
  - type: markdown
    attributes:
      value: |
        ## Having issue with Tasks?
        Log an issue at [Azure-Pipelines-Tasks](https://github.com/Microsoft/azure-pipelines-tasks). It contains all of the in-box tasks we ship with Azure-Pipelines/VSTS/TFS. If you're having issues with tasks in Build/Release jobs (e.g. unreasonable task failure) please log an issue there.
  - type: textarea
    id: what-happened
    attributes:
      label: Describe your feature request here
      placeholder: Put your question here.
      description: Please try to provide as much details as possible
    validations:
      required: true

================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: Help needed
description: Raise a question
title: "[Question]: "
labels: ["helpwanted"]
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to raise a question
  - type: markdown
    attributes:
      value: |
        ## Having issue with Tasks?
        Log an issue at [Azure-Pipelines-Tasks](https://github.com/Microsoft/azure-pipelines-tasks). It contains all of the in-box tasks we ship with Azure-Pipelines/VSTS/TFS. If you're having issues with tasks in Build/Release jobs (e.g. unreasonable task failure) please log an issue there.
  - type: textarea
    id: what-happened
    attributes:
      label: Describe your question
      placeholder: Put your question here.
    validations:
      required: true
  - type: textarea
    id: versions
    attributes:
      label: Versions
      description: Specify the agent version and operation system version
      placeholder: Azure DevOps version 2.100.1 / Windows 10
    validations:
      required: true
  - type: checkboxes
    id: environment-type
    attributes:
      label: Environment type (Please select at least one enviroment where you face this issue)
      options:
        - label: Self-Hosted
        - label: Microsoft Hosted
        - label: VMSS Pool
        - label: Container
  - type: dropdown
    id: azure-devops-type
    attributes:
      label: Azure DevOps Server type
      options:
        - dev.azure.com (formerly visualstudio.com)
        - Azure DevOps Server (Please specify exact version in the textbox below)
    validations:
      required: true
  - type: input
    id: operation-system
    attributes:
      label: Operation system
      placeholder: Windows 11, Ubuntu 20.04...
  - type: input
    id: version-control-type
    attributes:
      label: Version controll system
  - type: input
    id: azure-devops-server-datails
    attributes:
      label: Azure DevOps Server Version (if applicable)
      placeholder: Azure DevOps Server 2019.1


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
## Having issue with YAML?
Please log an issue at [Azure-Pipelines-YAML](https://github.com/Microsoft/azure-pipelines-yaml). Over there we discuss YAML templates, samples for Azure Pipelines, and designs for upcoming YAML features. Also a place for the community to share best practices, ideas, and so on. File suggestions and issues here if they're specific to YAML pipelines.

## Having issue with Tasks?
Log an issue at [Azure-Pipelines-Tasks](https://github.com/Microsoft/azure-pipelines-tasks). It contains all of the in-box tasks we ship with Azure-Pipelines/VSTS/TFS. If you're having issues with tasks in Build/Release jobs (e.g. unreasonable task failure) please log an issue there.

## Having issue with software on Hosted Agent?
Log an issue at [Hosted Agent Image Repository](https://github.com/actions/virtual-environments). It contains the VM image used in the Azure Pipelines Hosted Agent Pool. If you're having Build/Release failures that seems like they are related to software installed on the Hosted Agent (e.g. the `dotnet` SDK is missing or the Azure SDK is not on the latest version) please log an issue there.

## Having generic issue with Azure-Pipelines/VSTS/TFS?
Please report it on [Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html)

## Have you tried troubleshooting?
[Troubleshooting doc](https://www.visualstudio.com/en-us/docs/build/troubleshooting)

## Agent Version and Platform
Version of your agent? 2.144.0/2.144.1/...

OS of the machine running the agent? OSX/Windows/Linux/...

## Azure DevOps Type and Version
dev.azure.com (formerly visualstudio.com) or on-premises TFS/Azure DevOps Server?

If on-premises, which release? 2015.0, 2017.1, 2019 RC2, etc.

If dev.azure.com, what is your organization name? https://dev.azure.com/{organization} or https://{organization}.visualstudio.com

## What's not working?
Please include error messages and screenshots.

## Agent and Worker's Diagnostic Logs
Logs are located in the agent's `_diag` folder. The agent logs are prefixed with `Agent_` and the worker logs are prefixed with `Worker_`. All sensitive information should already be masked out, but please double-check before pasting here.


================================================
FILE: .github/copilot-instructions.md
================================================
# GitHub Copilot Instructions for Azure Pipelines Agent

This repository contains the Azure Pipelines Agent, a cross-platform build and release agent written in C# for .NET Core. When working with this codebase, follow these guidelines and use the provided development tools.

## Project Structure

- **Source Code**: All source code is in the `src/` directory
- **Build Scripts**: Use `src/dev.sh` (Linux/macOS) or `src/dev.cmd` (Windows)
- **Agent Layout**: Built agent is placed in `{root}/{runtime_id}/_layout`
- **Documentation**: Available in `docs/` directory

## Development Workflow

### Initial Setup
```bash
# Clone and navigate to source
git clone https://github.com/microsoft/azure-pipelines-agent
cd ./src

# First time setup - creates full agent layout
./dev.sh layout
```

### Build Commands

All commands should be run from the `src/` directory:

#### Linux/macOS
```bash
./dev.sh {command} [target_framework] [build_config] [runtime_id] [test_filters]
```

#### Windows
```cmd
dev {command} [target_framework] [build_config] [runtime_id] [test_filters]
```

### Available Commands

| Command | Short | Description |
|---------|-------|-------------|
| `layout` | `l` | Create full agent layout in `{root}/{runtime_id}/_layout` (run first time) |
| `build` | `b` | Build everything and update agent layout folder |
| `test` | `t` | Build agent binaries and run unit tests for current platform |
| `testl0` | `l0` | Run L0 (unit) tests only |
| `testl1` | `l1` | Run L1 (integration) tests only |
| `package` | `p` | Create distribution packages |
| `hash` | | Generate hash files |
| `report` | | Generate test reports |
| `lint` | | Run code linting |
| `lint-verify` | | Verify linting rules |

### Normal Development Flow
```bash
# 1. Initial layout (first time only)
./dev.sh layout

# 2. Make code changes
# ... edit files ...

# 3. Build and test
./dev.sh build
./dev.sh test

# 4. Commit changes
git add .
git commit -m "Your changes"
git push
```

## Project Details

### Technology Stack
- **Language**: C# (.NET Core)
- **Target Framework**: net6.0 (default), net8.0 supported
- **Platforms**: Windows (x64, x86, ARM64), macOS (x64, ARM64), Linux (x64, ARM)
- **Build System**: MSBuild with custom scripts

### Key Components
- **Agent.Listener**: Main agent listener service
- **Agent.Worker**: Task execution worker
- **Agent.PluginHost**: Plugin hosting environment
- **Agent.Plugins**: Built-in plugins
- **Agent.Sdk**: SDK for agent development

### Dependencies
- **.NET SDK**: Automatically downloaded if not present
- **Git**: Required for development (Git for Windows on Windows)
- **Node.js**: For certain pipeline tasks

## Testing

### Test Types
- **L0 Tests**: Unit tests (`./dev.sh testl0`)
- **L1 Tests**: Integration tests (`./dev.sh testl1`)

### Test Filters
Add custom test filters as the 5th parameter:
```bash
./dev.sh test net6.0 Debug osx-arm64 "TestCategory=YourCategory"
```

## Debugging

### Debug Mode
Run the agent with debug mode:
```bash
./config.sh --debug
./run.sh --debug
```

### Environment Variables for Debugging
- `VSTSAGENT_DEBUG_TASK`: Debug specific tasks by ID or name+version

## Build Configurations

### Available Configurations
- **Debug**: Development builds with debug symbols
- **Release**: Production builds optimized for performance

### Runtime IDs
Common runtime identifiers:
- `win-x64`, `win-x86`, `win-arm64`
- `osx-x64`, `osx-arm64`  
- `linux-x64`, `linux-arm`, `linux-arm64`
- `rhel.6-x64`

### Package Types
- `agent` (default): Full agent package
- `pipelines-agent`: Pipelines-specific package (excludes Node 6/10)

## Code Style

Follow the [.NET Foundation coding guidelines](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md):

- Use PascalCase for public members
- Use camelCase for private fields
- Use meaningful names
- Keep methods focused and small
- Include XML documentation for public APIs

## Common Tasks

### Adding New Features
1. Create/modify source files in appropriate `src/` subdirectories
2. Add unit tests in `src/Test/`
3. Build and test: `./dev.sh build && ./dev.sh test`
4. Update documentation if needed

### Troubleshooting Build Issues
- **"unzip not found"**: Install unzip (`sudo apt install unzip` on WSL)
- **Missing dependencies**: Run `./dev.sh layout` to restore
- **Test failures**: Check platform-specific test filters

### Working with Agent Layout
The built agent in `_layout/` can be used for:
- Local testing and debugging
- Manual agent installation
- Testing pipeline integration

To configure and run the built agent:
```bash
cd {root}/{runtime_id}/_layout
./config.sh
./run.sh
```

## Best Practices

1. **Always run layout first** when starting development
2. **Build before testing** to ensure latest changes are included
3. **Run tests** before committing to catch regressions
4. **Use appropriate runtime ID** for your target platform
5. **Follow the normal dev flow** for consistent results

## Additional Resources

- [Contributing Guide](../docs/contribute.md)
- [Azure DevOps Agent Documentation](https://docs.microsoft.com/azure/devops/pipelines/agents/)
- [Self-hosted Agent Installation](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/windows-agent?view=azure-devops)


================================================
FILE: .github/labelChecker/.npmrc
================================================
registry=https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/

always-auth=true


================================================
FILE: .github/labelChecker/index.js
================================================
const rm = require('typed-rest-client/RestClient');
const core = require('@actions/core');
const github = require('@actions/github');

async function main() {
    try {
        const issueTypes = ['bug', 'enhancement', 'misc', 'internal'];
        const pullRequestNumber = github.context.issue.number;
        console.log(`Running for PR: ${pullRequestNumber}\n`);
        let rest = new rm.RestClient('labelChecker');
        console.log('Getting label info\n');
        let res = await rest.get(`https://api.github.com/repos/microsoft/azure-pipelines-agent/issues/${pullRequestNumber}/labels`);
        console.log(`Labels: ${JSON.stringify(res.result)}`);
        let labelCount = 0;
        res.result.forEach(tag => {
            let name = tag.name.toLowerCase();
            if (issueTypes.indexOf(name) > -1) {
                console.log(`Found tag: ${name}`);
                labelCount++;
            }
        });

        if (labelCount === 0) {
            throw `Must be labeled one of ${issueTypes.join(', ')}`
        }
        if (labelCount > 1) {
            throw `Cannot contain more than one label of ${issueTypes.join(', ')}. Currently contains ${labelCount}`
        }
    } catch (err) {
        core.setFailed(err);
    }

}

main();


================================================
FILE: .github/labelChecker/package.json
================================================
{
  "name": "labelchecker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@actions/core": "1.2.6",
    "@actions/github": "2.1.1",
    "typed-rest-client": "2.3.0"
  }
}


================================================
FILE: .github/pull_request_template.md
================================================
### **Context**
_Explain the context or motivation behind this PR. Include links to any related Azure DevOps Work Items or GitHub issues._  
📌 [How to link to ADO Work Items](https://learn.microsoft.com/en-us/azure/devops/boards/github/link-to-from-github?view=azure-devops)

---

### **Description**
_Provide a concise summary of the changes introduced in this PR._

---

### **Risk Assessment** (Low / Medium / High)  
_Assess the risk level and justify your assessment. For example: code path sensitivity, usage scope, or backward compatibility concerns._

---

### **Unit Tests Added or Updated** (Yes / No)  
_Indicate whether unit tests were added or modified to reflect the changes._

---

### **Additional Testing Performed**
_List manual or automated tests performed beyond unit tests (e.g., integration, scenario, regression)._

--- 

### **Change Behind Feature Flag** (Yes / No)
_Can this change be behine feature flag, if not why?_

---

### **Tech Design / Approach**
- Design has been written and reviewed. 
- Any architectural decisions, trade-offs, and alternatives are captured. 

---

### **Documentation Changes Required** (Yes/No)
_Indicate whether related documentation needs to be updated._
- User guides, API specs, system diagrams, or runbooks are updated. 

---
### **Logging Added/Updated** (Yes/No)
- Appropriate log statements are added with meaningful messages. 
- Logging does not expose sensitive data. 
- Log levels are used correctly (e.g., info, warn, error). 

--- 

### **Telemetry Added/Updated** (Yes/No) 
- Custom telemetry (e.g., counters, timers, error tracking) is added as needed. 
- Events are tagged with proper metadata for filtering and analysis. 
- Telemetry is validated in staging or test environments.

---

### **Rollback Scenario and Process** (Yes/No)
- Rollback plan is documented. 

---

### **Dependency Impact Assessed and Regression Tested** (Yes/No)
- All impacted internal modules, APIs, services, and third-party libraries are analyzed. 
- Results are reviewed and confirmed to not break existing functionality.


================================================
FILE: .github/workflows/autoAssignABTT.yml
================================================
name: Auto Assign ABTT to Project Board

on:
  issues:
    types:
      - opened

jobs:
  assign_one_project:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    name: Assign to ABTT Project
    steps:
    - name: "Add triage and area labels"
      uses: actions-ecosystem/action-add-labels@v1
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        labels: |
          Area: Agent
          triage

    - name: "Assign issues with 'Area: ABTT' label to project board"
      uses: actions/add-to-project@v0.4.1
      with:
        project-url: https://github.com/orgs/microsoft/projects/755
        github-token: ${{ secrets.ABTT_TOKEN }}


================================================
FILE: .github/workflows/labelChecker.yml
================================================
# This workflow ensures that all PRs are correctly labeled

name: LabelChecker
on: [pull_request]

jobs:
  label:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - run: |
        cd .github/labelChecker
        npm install
        node index.js


================================================
FILE: .github/workflows/localization-automerge.yml
================================================
name: 'LEGO automerge'

on:
  pull_request:
    types:
      - opened
    branches:
      - Localization

jobs:
  worker:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    if: github.actor == 'csigs'
    steps:
      - uses: actions-ecosystem/action-add-labels@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          labels: enhancement
              
      - uses: actions/github-script@v3
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            github.pulls.merge({
              owner: context.payload.repository.owner.login,
              repo: context.payload.repository.name,
              pull_number: context.payload.pull_request.number,
              merge_method: 'squash'
            })


================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests

on:
  schedule:
  - cron: "0 * * * *"

jobs:
  stale:

    runs-on: ubuntu-latest
    permissions:
      issues: write
    steps:
    - uses: actions/stale@v3
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-issue-message: 'This issue has had no activity in 180 days. Please comment if it is not actually stale'
        stale-issue-label: 'stale'
        days-before-stale: 180
        days-before-close: 7
        exempt-pr-label: 'no-stale'
        exempt-issue-label: 'no-stale'


================================================
FILE: .gitignore
================================================
**/bin
**/obj
**/libs
**/*.xproj
**/*.xproj.user
**/.vs
**/.vscode
**/*.error
**/*.json.pretty
**/.taskkey
node_modules
**/node_modules
_downloads
_hashes
_l1
_layout
_package
_package_hash
_reports
_dotnetsdk
TestResults
TestLogs
.DS_Store
**/*.DotSettings.user
src/Misc/dotnet-install.*

#generated
src/Microsoft.VisualStudio.Services.Agent/BuildConstants.cs


================================================
FILE: .vsts.ci.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
parameters:
- name: testProxyAgent
  type: boolean
  displayName: Test Proxy Agent
  default: true

# Targets
- name: win_x64
  type: boolean
  displayName: Windows (x64)
  default: true
- name: win_x86
  type: boolean
  displayName: Windows (x86)
  default: true
- name: win_arm64
  type: boolean
  displayName: Windows (ARM64)
  default: true
- name: linux_x64
  type: boolean
  displayName: Linux (x64)
  default: true
- name: linux_arm
  type: boolean
  displayName: Linux (ARM)
  default: false
- name: linux_arm64
  type: boolean
  displayName: Linux (ARM64)
  default: false
- name: alpine_x64
  type: boolean
  displayName: Alpine (x64)
  default: true
- name: alpine_arm64
  type: boolean
  displayName: Alpine (ARM64)
  default: true
- name: macOS_x64
  type: boolean
  displayName: macOS (x64)
  default: true
- name: macOS_arm64
  type: boolean
  displayName: macOS (ARM64)
  default: true

pr:
  branches:
    include:
    - '*'
  paths:
    exclude:
    - 'docs/*'

extends:
  template: /.azure-pipelines/pipeline.yml@self
  parameters:
    publishArtifacts: ${{ ne(variables['Build.Reason'], 'PullRequest') }}
    buildAlternatePackage: false
    testProxyAgent: ${{ parameters.testProxyAgent }}
    targetFramework: 'all'
    win_x64: ${{ parameters.win_x64 }}
    win_x86: ${{ parameters.win_x86 }}
    win_arm64: ${{ parameters.win_arm64 }}
    linux_x64: ${{ parameters.linux_x64 }}
    linux_arm: ${{ parameters.linux_arm }}
    linux_arm64: ${{ parameters.linux_arm64 }}
    alpine_x64: ${{ parameters.alpine_x64 }}
    alpine_arm64: ${{ parameters.alpine_arm64 }}
    macOS_x64: ${{ parameters.macOS_x64 }}
    macOS_arm64: ${{ parameters.macOS_arm64 }}


================================================
FILE: .vsts.release.yml
================================================
# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.
trigger:
  branches:
    include:
    - '*'
  paths:
    include:
    - release
    - .azure-pipelines
    - .vsts.release.yml

pr:
  branches:
    include:
    - '*'
  paths:
    include:
    - release
    - .azure-pipelines
    - .vsts.release.yml

parameters:
- name: version
  type: string
  displayName: Version
  default: 'NotSet'
- name: targetFramework
  displayName: Target framework
  type: string
  default: net8.0
  values:
  - net8.0
  - net10.0
  
- name: derivedFrom
  type: string
  displayName: Derived From Version
  default: 'lastMinorRelease'
  values:
  - 'lastMinorRelease'
  
- name: skipTests
  type: boolean
  default: false
  displayName: Skip Tests
# buildStageOnly is useful for testing changes of the build stage which cannot be tested
# in the ci project, like signing, without actually doing a release
- name: buildStageOnly
  type: boolean
  default: false
  displayName: Build Stage Only

- name: onlyGitHubRelease
  type: boolean
  default: false
  displayName: Release only for GitHub

- name: testProxyAgent
  type: boolean
  default: true
  displayName: Test Proxy Agent

- name: disableNotifications
  type: boolean
  default: false
  displayName: Disable Teams Notifications

# Skip CG
variables:
  - name: OneES_JobScannedCount
    value: 1

extends:
  template: /.azure-pipelines/pipeline.yml@self
  parameters:
    branch: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.releaseBranch'] ]
    test: ${{ not(parameters.skipTests) }}
    sign: true
    publishArtifacts: true
    targetFramework: ${{ parameters.targetFramework }}
    testProxyAgent: ${{ parameters.testProxyAgent }}
    stageDependencies:
      - Verify_release
      - Create_Release_Branch
    stageCondition: |
      and(
        succeeded('Verify_release'),
        in(dependencies.Create_Release_Branch.result, 'Succeeded', 'Skipped')
      )

    preBuildStages:
    - stage: Verify_release
      displayName: Verify it's a release run
      pool:
        name: 1ES-ABTT-Shared-Pool
        image: abtt-ubuntu-2404
        os: linux
      jobs:
      - job: Set_variables
        displayName: Set release-specific variables
        steps:
        - pwsh: |
            $isBuildStageOnly = [System.Convert]::ToBoolean('${{ parameters.buildStageOnly }}')
            $buildReason = '$(Build.Reason)'

            $currentSprint = (Invoke-WebRequest https://whatsprintis.it -Headers @{"Accept" = "application/json" } | ConvertFrom-Json)

            $isReleaseWeek = $currentSprint.week -eq 3
            Write-Host "isReleaseWeek = $isReleaseWeek"

            $isRelease = ($buildReason -eq 'Manual' -and !$isBuildStageOnly) -or ($buildReason -eq 'Schedule' -and $isReleaseWeek)
            Write-Host "isRelease = $isRelease"
            Write-Host "##vso[task.setVariable variable=isRelease;isOutput=true]$isRelease"

            $isTestRun = ($buildReason -eq 'IndividualCI' -or $buildReason -eq 'PullRequest')
            Write-Host "isTestRun = $isTestRun"
            Write-Host "##vso[task.setVariable variable=isTestRun;isOutput=true]$isTestRun"

            $isScheduledRelease = $isRelease -and $buildReason -eq 'Schedule'
            Write-Host "isScheduledRelease = $isScheduledRelease"

            if ($isRelease -or $isTestRun) {
              if ($isScheduledRelease -or $isTestRun) {
                $majorAndMinorVersion = "3.$($currentSprint.sprint)"
                $patchVersion = 0
                ## Looking for a free patch version
                while ($true) {
                  $agentVersion = "$majorAndMinorVersion.$patchVersion"
                  git ls-remote --exit-code --heads origin refs/heads/releases/$agentVersion
                  if ($LASTEXITCODE -ne 0) {
                    if ($LASTEXITCODE -eq 2) {
                        $LASTEXITCODE = 0
                        break
                    }
                    else {
                        Write-Error "git ls-remote failed with exit code $LASTEXITCODE" -ErrorAction Stop
                    }
                  }
                  $patchVersion++
                }
              } else {
                $agentVersion = "${{ parameters.version }}"
                if ($agentVersion -eq 'NotSet') {
                  Write-Error "Version parameter is required for manual release." -ErrorAction Stop
                }

                ## Verify target framework for specified version
                $majorVersion = $agentVersion.Split('.')[0]
                if (("${{ parameters.targetFramework }}" -eq "net8.0" -and $majorVersion -ne "4") -or
                   ("${{ parameters.targetFramework }}" -eq "net10.0" -and $majorVersion -ne "5")) {
                  Write-Error "The major version should be 4 for net8.0 and 5 for net10.0" -ErrorAction Stop
                }
              }
              if ($isTestRun) {
                $agentVersion = '3.000.999'
              }
              Write-Host "agentVersion = $agentVersion"
              Write-Host "##vso[task.setVariable variable=agentVersion;isOutput=true]$agentVersion"

              $releaseBranch = "releases/$agentVersion"
              Write-Host "releaseBranch = $releaseBranch"
              Write-Host "##vso[task.setVariable variable=releaseBranch;isOutput=true]$releaseBranch"
            }

          name: SetReleaseVariables
          displayName: Set release-specific variables

    - stage: Create_Release_Branch
      displayName: Create Release Branch
      dependsOn:
      - Verify_release
      jobs:
      ################################################################################
      - job: Create_Release_Branch
      ################################################################################
        displayName: Create Release Branch
        variables:
          IsTestRun: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isTestRun'] ]
          IsRelease: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isRelease'] ]
          ReleaseBranch: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.releaseBranch'] ]
          AgentVersion: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.agentVersion'] ]
        condition: and(succeeded(), or(eq(variables.IsRelease, 'True'), eq(variables.IsTestRun, 'True')))

        pool:
          name: 1ES-ABTT-Shared-Pool
          image: abtt-ubuntu-2404
          os: linux
        steps:

        - checkout: self

        - task: NodeTool@0
          displayName: Use node 20.20.0
          inputs:
            versionSpec: "20.20.0"

        - script: |
            cd release
            npm ci

            node createReleaseBranch.js $(AgentVersion) --derivedFrom=${{ parameters.derivedFrom }} --targetCommitId=$(Build.SourceVersion)
          env:
            EDITOR: cat
            PAT: $(GithubToken)
          displayName: Push release branch to GitHub

    postBuildStages:
      - stage: Release
        dependsOn:
          - build
          - Verify_release
        jobs:
        ################################################################################
        - job: publish_agent_packages
        ################################################################################
          displayName: Publish Agents (Windows/Linux/OSX)
          pool:
            name: 1ES-ABTT-Shared-Pool
            image: abtt-windows-2025
            os: windows
            demands: AzurePS
          variables:
            IsTestRun: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isTestRun'] ]
            IsRelease: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isRelease'] ]
            ReleaseBranch: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.releaseBranch'] ]
            AgentVersion: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.agentVersion'] ]
          condition: and(succeeded(), or(eq(variables.IsRelease, 'True'), eq(variables.IsTestRun, 'True')))
          steps:

          # Clean
          - checkout: self
            clean: true

          - task: PowerShell@2
            displayName: Switch to release branch
            inputs:
              filePath: .azure-pipelines/scripts/switch-branch.ps1
            env:
              TARGET_BRANCH: $(ReleaseBranch)

          # Download all agent packages from all previous phases
          - task: DownloadBuildArtifacts@0
            displayName: Download Agent Packages
            inputs:
              artifactName: agent

          # Upload agent packages to Azure blob storage and refresh Azure CDN
          - task: AzurePowerShell@5
            displayName: Upload to Azure Blob
            inputs:
              pwsh: true
              azurePowerShellVersion: 'LatestVersion'
              azureSubscription: 'azure-pipelines-agent-vstsagentpackage-oauth'
              scriptType: 'InlineScript'
              inline: |
                Write-Host "Preloading Azure modules." # This is for better performance, to avoid module-autoloading.
                Import-Module Azure, Az.Accounts, Az.Storage, Az.Cdn -ErrorAction Ignore -PassThru
                $uploadFiles = New-Object System.Collections.ArrayList
                Select-AzSubscription -SubscriptionId $(SubscriptionId)
                $storageContext = New-AzStorageContext -StorageAccountName vstsagentpackage -UseConnectedAccount
                $versionDir = "$(AgentVersion)"
                
                $container = "agent"
                $isTestContainer = "$(IsTestRun)"
                Write-Host "isTestContainer = $isTestContainer"

                if ($isTestContainer -eq "True") { 
                  $container = "testagent"
                  New-AzStorageContainer -Context $storageContext -Name $container -Permission Off
                }
                Write-Host "container = $container"
                
                Get-ChildItem -LiteralPath "$(System.ArtifactsDirectory)/agent" | ForEach-Object {
                  $target=$_
                  $fullPath = $target.FullName
                  Get-ChildItem -LiteralPath "$fullPath" -Include "*.zip","*.tar.gz" | ForEach-Object {
                    $executable = $_
                    $execFullPath = $executable.FullName
                    $execName = $executable.Name
                    Write-Host "Uploading $execName to BlobStorage vstsagentpackage/$container/$versionDir"
                    Set-AzStorageBlobContent -Context $storageContext -Container $container -File "$execFullPath" -Blob "$versionDir/$execName" -Force
                    $uploadFiles.Add("/$container/$versionDir/$execName")
                  }
                }

          # Clean up blob container with test agent version
          - task: AzurePowerShell@5
            displayName: Delete Azure Blob container with test agent version
            condition: and(succeeded(), eq(variables.IsTestRun, 'True'))
            inputs:
              pwsh: true
              azurePowerShellVersion: 'LatestVersion'
              azureSubscription: 'azure-pipelines-agent-vstsagentpackage-oauth'
              scriptType: 'InlineScript'
              inline: |
                Import-Module Azure, Az.Accounts, Az.Storage -ErrorAction Ignore -PassThru
                Select-AzSubscription -SubscriptionId $(SubscriptionId)
                $storageContext = New-AzStorageContext -StorageAccountName vstsagentpackage -UseConnectedAccount
                $container = 'testagent'
                Remove-AzStorageContainer -Name $container -Context $storageContext -Force
                
          # Download all agent hashes created in previous phases
          - task: DownloadBuildArtifacts@0
            displayName: Download Agent Hashes
            inputs:
              artifactName: hash
              downloadPath: $(Build.SourcesDirectory)/_hashes

          # Fill release notes with agent version and package hashes
          - script: |
              cd release
              node fillReleaseNotesTemplate.js $(AgentVersion)
            displayName: Fill release notes

          # Create agent release on Github
          - powershell: |
              Write-Host "Creating github release."
              $releaseNotes = [System.IO.File]::ReadAllText("$(Build.SourcesDirectory)\releaseNote.md")
              $releaseData = @{
                tag_name = "v$(AgentVersion)";
                target_commitish = "$(Build.SourceVersion)";
                name = "v$(AgentVersion)";
                body = $releaseNotes;
                draft = $false;
                prerelease = $true;
              }
              $releaseParams = @{
                Uri = "https://api.github.com/repos/Microsoft/azure-pipelines-agent/releases";
                Method = 'POST';
                Headers = @{
                  Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("vsts:$(GithubToken)"));
                }
                ContentType = 'application/json';
                Body = (ConvertTo-Json $releaseData -Compress)
              }
              [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
              $releaseCreated = Invoke-RestMethod @releaseParams
              Write-Host $releaseCreated
              $releaseId = $releaseCreated.id
              Write-Host "##vso[task.setVariable variable=releaseId;isoutput=true]$releaseId"
              $assets = [System.IO.File]::ReadAllText("$(Build.SourcesDirectory)\assets.json").Replace("<AGENT_VERSION>","$(AgentVersion)")
              $assetsParams = @{
                Uri = "https://uploads.github.com/repos/Microsoft/azure-pipelines-agent/releases/$releaseId/assets?name=assets.json"
                Method = 'POST';
                Headers = @{
                  Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("vsts:$(GithubToken)"));
                }
                ContentType = 'application/octet-stream';
                Body = [system.Text.Encoding]::UTF8.GetBytes($assets)
              }
              Invoke-RestMethod @assetsParams
            displayName: Create agent release on Github
            name: create_github_release

          # Delete test agent release
          - powershell: |
              Write-Host "Deleting test github release."
              $releaseId = $(create_github_release.releaseId) 
              
              $releaseParams = @{
                Uri = "https://api.github.com/repos/Microsoft/azure-pipelines-agent/releases/$releaseId";
                Method = 'DELETE';
                Headers = @{
                  Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("vsts:$(GithubToken)"));
                }
                ContentType = 'application/json';
              }
              [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
              $releaseDeleted = Invoke-RestMethod @releaseParams
              Write-Host $releaseDeleted.Id
            displayName: Delete test agent release from Github
            condition: and(succeeded(), eq(variables.IsTestRun, 'True'))

      - stage: Cleanup_Release_Branch
        displayName: Cleanup Release Branch
        dependsOn:
        - Verify_release
        - Create_Release_Branch
        - Release
        condition: always()
        jobs:
        - job: Delete_Release_Branch
          displayName: Delete Release Branch
          variables:
            IsTestRun: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isTestRun'] ]
          condition: eq(variables.IsTestRun, 'True')

          pool:
            name: 1ES-ABTT-Shared-Pool
            image: abtt-ubuntu-2404
            os: linux
          steps:
          - checkout: self

          - powershell: |
              git config --global user.email "azure-pipelines-bot@microsoft.com"
              git config --global user.name "azure-pipelines-bot"
              git status

              $testBranch = "releases/3.000.999"
              $testTag = "v3.000.999"
              
              if (git ls-remote --heads origin $testBranch) { 
                git -c credential.helper='!f() { echo "username=pat"; echo "password=$(GithubToken)"; };f' push origin --delete $testBranch
              }
              
              if (git ls-remote --tags origin $testTag) { 
                git -c credential.helper='!f() { echo "username=pat"; echo "password=$(GithubToken)"; };f' push --delete origin $testTag
              }
            displayName: Clean up test release branch

      - stage: CreatePRs
        dependsOn:
        - Release
        - Verify_release
        condition: and(succeeded(), not(${{ parameters.onlyGitHubRelease }}))
        pool:
          name: 1ES-ABTT-Shared-Pool
          image: abtt-ubuntu-2404
          os: linux
        jobs:
        ################################################################################
        - job: create_ado_prs
        ################################################################################
          displayName: Create PRs in AzureDevOps and ConfigChange
          variables:
            IsTestRun: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isTestRun'] ]
            IsRelease: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isRelease'] ]
            ReleaseBranch: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.releaseBranch'] ]
            AgentVersion: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.agentVersion'] ]
          condition: and(succeeded(), or(eq(variables.IsRelease, 'True'), eq(variables.IsTestRun, 'True')))
          steps:
          - checkout: self

          - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
            - script: git checkout $(ReleaseBranch)
              displayName: Checkout release branch

          # Download all agent hashes created in previous phases
          - task: DownloadBuildArtifacts@0
            displayName: Download Agent Hashes
            inputs:
              artifactName: hash
              downloadPath: $(Build.SourcesDirectory)/_hashes

          - template: /.azure-pipelines/get-pat.yml@self

          - bash: |
              set -x
              cd release
              npm install
              ls
              node createAdoPrs.js $(AgentVersion) --dryrun="$(IsTestRun)"
            name: s_CreateAdoPrs
            displayName: Create PRs in AzureDevOps and ConfigChange
            env:
              USERNAME: $(User)
              PAT: $(ACCESS_TOKEN)
              USEREMAIL: $(Email)

      - stage: S_Notifications
        displayName: Notifications
        dependsOn:
        - Verify_release
        - CreatePRs
        pool:
          name: 1ES-ABTT-Shared-Pool
          image: abtt-ubuntu-2404
          os: linux
        jobs:
        - job: j_SendPRsNotifications
          displayName: Send Release PRs notifications
          variables:
            IsTestRun: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isTestRun'] ]
            IsRelease: $[ stageDependencies.Verify_release.Set_variables.outputs['SetReleaseVariables.isRelease'] ]
            AdoPrId: $[ stageDependencies.CreatePRs.create_ado_prs.outputs['s_CreateAdoPrs.AdoPrId'] ]
            AdoPrLink: $[ stageDependencies.CreatePRs.create_ado_prs.outputs['s_CreateAdoPrs.AdoPrLink'] ]
            CcPrId: $[ stageDependencies.CreatePRs.create_ado_prs.outputs['s_CreateAdoPrs.CcPrId'] ]
            CcPrLink: $[ stageDependencies.CreatePRs.create_ado_prs.outputs['s_CreateAdoPrs.CcPrLink'] ]
          condition: |
            and(
              not(${{ parameters.disableNotifications }}),
              eq(variables.IsRelease, 'True'),
              eq(variables.IsTestRun, 'False'),
              not(${{ parameters.onlyGitHubRelease }})
            )
          steps:
          - task: PowerShell@2
            inputs:
              targetType: 'filePath'
              filePath: ./release/Send-PRsNotification.ps1
            displayName: Send MS Teams notification
            env:
              TEAMS_WEBHOOK: $(MsTeamsWebhook)
              ADO_PR_ID: $(AdoPrId)
              ADO_PR_LINK: $(AdoPrLink)
              CC_PR_ID: $(CcPrId)
              CC_PR_LINK: $(CcPrLink)


================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) Microsoft Corporation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: README.md
================================================
# Azure Pipelines Agent

## Announcement -  `AZP_AGENT_USE_LEGACY_HTTP` agent knob future deprecation

We are working on pipeline agent migration to .NET 6. One of the side effect of this migration is that the legacy HTTP handler will be no longer available for use due to changes in the .NET runtime itself.

Thus the related agent knob will not work once the migration will be completed. We recommend stopping using the `AZP_AGENT_USE_LEGACY_HTTP` knob.

## Overview

The cross-platform build and release agent for Azure Pipelines and Team Foundation Server 2015 and beyond.
This replaced the deprecated closed source windows build agent and the previous [cross-platform agent](https://github.com/Microsoft/vso-agent).

Supported on Windows, macOS, and several Linux flavors.
Written for .NET Core in C#.

## Status

|   | Build & Test |
|---|:-----:|
|![Win-x64](docs/res/win_med.png) **Windows x64**|[![Build & Test][win-x64-build-badge]][build]| 
|![Win-x86](docs/res/win_med.png) **Windows x86**|[![Build & Test][win-x86-build-badge]][build]| 
|![Win-arm64](docs/res/win_med.png) **Windows ARM64**|[![Build & Test][win-arm64-build-badge]][build]| 
|![macOS](docs/res/apple_med.png) **macOS**|[![Build & Test][macOS-build-badge]][build]| 
|![Linux-x64](docs/res/linux_med.png) **Linux x64**|[![Build & Test][linux-x64-build-badge]][build]| 
|![Linux-arm](docs/res/linux_med.png) **Linux ARM**|[![Build & Test][linux-arm-build-badge]][build]| 
|![RHEL6-x64](docs/res/redhat_med.png) **RHEL 6 x64**|[![Build & Test][rhel6-x64-build-badge]][build]| 

[win-x64-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=Windows%20(x64)
[win-x86-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=Windows%20(x86)
[win-arm64-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=Windows%20(ARM64)
[macOS-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=macOS%20(x64)
[linux-x64-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=Linux%20(x64)
[linux-arm-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=Linux%20(ARM)
[rhel6-x64-build-badge]: https://mseng.visualstudio.com/pipelinetools/_apis/build/status/VSTS.Agent/azure-pipelines-agent.ci?branchName=master&jobname=RHEL6%20(x64)
[build]: https://mseng.visualstudio.com/PipelineTools/_build?_a=completed&definitionId=7502

## Get the Agent

[Get started with the agent](https://docs.microsoft.com/azure/devops/pipelines/agents/agents?view=azure-devops#install).

## Supported Usage

This agent can be used for both Azure Pipelines and Azure DevOps Server (Team Foundation Server).
Support is extended to all on-premise solutions [based on their lifecycle (including extended support)](https://learn.microsoft.com/lifecycle/products/).

The only exception is the Windows version of the agent for TFS 2015 since it is distributed along with a separate Node-based agent.

## Latest and Pre-release labels for releases

Releases have labels **Latest** and **Pre-release**. Please make a note that the labels mean:
- **Latest** - this is the current release of the agent, available to all clients or partially available (in case it is an active release that is currently under deployment).
- **Pre-release** - Next version, release process of the agent version was started and it's already available for some of the users. And will be available soon for the rest.

Each new version of agent is released for users by groups during several days. And usually it becomes available for all users within 6-8 days after start of release. The release has label "Pre-release" during all these days. So it's expected behavior if specific release is used by builds in pipelines but it's marked as "Pre-release".

## Troubleshooting

Troubleshooting tips are [located here](docs/troubleshooting.md)

## Contribute

For developers that want to contribute, [read here](docs/contribute.md) on how to build and test.

## Issues

We accept issue reports both here (file a GitHub issue) and in [Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html).

Do you think there might be a security issue? Have you been phished or identified a security vulnerability? Please don't report it here - let us know by sending an email to secure@microsoft.com.


================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->

## Security

Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).

If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).

If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).

You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 

Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:

  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
  * Full paths of source file(s) related to the manifestation of the issue
  * The location of the affected source code (tag/branch/commit or direct URL)
  * Any special configuration required to reproduce the issue
  * Step-by-step instructions to reproduce the issue
  * Proof-of-concept or exploit code (if possible)
  * Impact of the issue, including how an attacker might exploit the issue

This information will help us triage your report more quickly.

If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.

## Preferred Languages

We prefer all communications to be in English.

## Policy

Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).

<!-- END MICROSOFT SECURITY.MD BLOCK -->


================================================
FILE: assets.json
================================================
[
    {
        "name": "vsts-agent-win-x64-<AGENT_VERSION>.zip",
        "platform": "win-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-win-x64-<AGENT_VERSION>.zip"
    },
    {
        "name": "pipelines-agent-win-x64-<AGENT_VERSION>.zip",
        "platform": "win-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-win-x64-<AGENT_VERSION>.zip"
    },
    {
        "name": "vsts-agent-win-x86-<AGENT_VERSION>.zip",
        "platform": "win-x86",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-win-x86-<AGENT_VERSION>.zip"
    },
    {
        "name": "pipelines-agent-win-x86-<AGENT_VERSION>.zip",
        "platform": "win-x86",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-win-x86-<AGENT_VERSION>.zip"
    },
    {
        "name": "vsts-agent-win-arm64-<AGENT_VERSION>.zip",
        "platform": "win-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-win-arm64-<AGENT_VERSION>.zip"
    },
    {
        "name": "pipelines-agent-win-arm64-<AGENT_VERSION>.zip",
        "platform": "win-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-win-arm64-<AGENT_VERSION>.zip"
    },
    {
        "name": "vsts-agent-osx-x64-<AGENT_VERSION>.tar.gz",
        "platform": "osx-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-osx-x64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "pipelines-agent-osx-x64-<AGENT_VERSION>.tar.gz",
        "platform": "osx-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-osx-x64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-osx-arm64-<AGENT_VERSION>.tar.gz",
        "platform": "osx-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-osx-arm64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "pipelines-agent-osx-arm64-<AGENT_VERSION>.tar.gz",
        "platform": "osx-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-osx-arm64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-linux-x64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-linux-x64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "pipelines-agent-linux-x64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-linux-x64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-linux-arm-<AGENT_VERSION>.tar.gz",
        "platform": "linux-arm",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-linux-arm-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "pipelines-agent-linux-arm-<AGENT_VERSION>.tar.gz",
        "platform": "linux-arm",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-linux-arm-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-linux-arm64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-linux-arm64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "pipelines-agent-linux-arm64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/pipelines-agent-linux-arm64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-linux-musl-x64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-musl-x64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-linux-musl-x64-<AGENT_VERSION>.tar.gz"
    },
    {
        "name": "vsts-agent-linux-musl-arm64-<AGENT_VERSION>.tar.gz",
        "platform": "linux-musl-arm64",
        "version": "<AGENT_VERSION>",
        "downloadUrl": "https://download.agent.dev.azure.com/agent/<AGENT_VERSION>/vsts-agent-linux-musl-arm64-<AGENT_VERSION>.tar.gz"
    }
]


================================================
FILE: azure-pipelines-agent.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29509.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Agent.Listener", "src\Agent.Listener\Agent.Listener.csproj", "{17104EA4-EE2D-45DA-9B30-E31981274230}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Agent.Sdk", "src\Agent.Sdk\Agent.Sdk.csproj", "{B13C8033-A4AD-4963-ABE5-19BE0F5BA812}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgentService", "src\Agent.Service\Windows\AgentService.csproj", "{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Agent.Worker", "src\Agent.Worker\Agent.Worker.csproj", "{F095D0DA-C40F-4774-BE6C-D43928064A70}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Services.Agent", "src\Microsoft.VisualStudio.Services.Agent\Microsoft.VisualStudio.Services.Agent.csproj", "{4CA8B96D-7F1D-4A34-8CF5-688D403FFB0D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Agent.Plugins", "src\Agent.Plugins\Agent.Plugins.csproj", "{2B383622-0D80-465E-8311-63F9B05D67D0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Agent.PluginHost", "src\Agent.PluginHost\Agent.PluginHost.csproj", "{CC3EDFC9-EE30-43C9-B2DA-34587F0A3D4A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "src\Test\Test.csproj", "{7EF822B7-532B-4E34-8A28-8549D1C007F7}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{17104EA4-EE2D-45DA-9B30-E31981274230}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{17104EA4-EE2D-45DA-9B30-E31981274230}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{17104EA4-EE2D-45DA-9B30-E31981274230}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{17104EA4-EE2D-45DA-9B30-E31981274230}.Release|Any CPU.Build.0 = Release|Any CPU
		{B13C8033-A4AD-4963-ABE5-19BE0F5BA812}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B13C8033-A4AD-4963-ABE5-19BE0F5BA812}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B13C8033-A4AD-4963-ABE5-19BE0F5BA812}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B13C8033-A4AD-4963-ABE5-19BE0F5BA812}.Release|Any CPU.Build.0 = Release|Any CPU
		{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Release|Any CPU.Build.0 = Release|Any CPU
		{F095D0DA-C40F-4774-BE6C-D43928064A70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F095D0DA-C40F-4774-BE6C-D43928064A70}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F095D0DA-C40F-4774-BE6C-D43928064A70}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F095D0DA-C40F-4774-BE6C-D43928064A70}.Release|Any CPU.Build.0 = Release|Any CPU
		{4CA8B96D-7F1D-4A34-8CF5-688D403FFB0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4CA8B96D-7F1D-4A34-8CF5-688D403FFB0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4CA8B96D-7F1D-4A34-8CF5-688D403FFB0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4CA8B96D-7F1D-4A34-8CF5-688D403FFB0D}.Release|Any CPU.Build.0 = Release|Any CPU
		{2B383622-0D80-465E-8311-63F9B05D67D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{2B383622-0D80-465E-8311-63F9B05D67D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{2B383622-0D80-465E-8311-63F9B05D67D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2B383622-0D80-465E-8311-63F9B05D67D0}.Release|Any CPU.Build.0 = Release|Any CPU
		{CC3EDFC9-EE30-43C9-B2DA-34587F0A3D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{CC3EDFC9-EE30-43C9-B2DA-34587F0A3D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{CC3EDFC9-EE30-43C9-B2DA-34587F0A3D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{CC3EDFC9-EE30-43C9-B2DA-34587F0A3D4A}.Release|Any CPU.Build.0 = Release|Any CPU
		{7EF822B7-532B-4E34-8A28-8549D1C007F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7EF822B7-532B-4E34-8A28-8549D1C007F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7EF822B7-532B-4E34-8A28-8549D1C007F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7EF822B7-532B-4E34-8A28-8549D1C007F7}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {773FE1BE-2DE4-42F8-B87E-1C634BDD76A5}
	EndGlobalSection
EndGlobal


================================================
FILE: docs/contribute.md
================================================
# Contribute (Dev)

## Dev Dependencies

![Win](res/win_sm.png) Git for Windows [Install Here](https://git-scm.com/downloads) (needed for dev sh script)

## Build, Test, Layout 

From src:

![Win](res/win_sm.png) `dev {command}`  

![*nix](res/linux_sm.png) `./dev.sh {command}`
  
**Commands:**  

`layout` (`l`):  Run first time to create a full agent layout in {root}/{runtime_id}/_layout  

`build` (`b`):   build everything and update agent layout folder  

`test` (`t`):    build agent binaries, run unit tests applicable to the current platform

Normal dev flow:
```bash
git clone https://github.com/microsoft/azure-pipelines-agent
cd ./src
./dev.(sh/cmd) layout # the agent that build from source is in {root}/{runtime_id}/_layout
<make code changes>
./dev.(sh/cmd) build # {root}/{runtime_id}/_layout will get updated
./dev.(sh/cmd) test # run unit tests before git commit/push
```

To test the agent in a pipeline, follow the [self-hosted agent installation steps](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/windows-agent?view=azure-devops). You will use the agent built from source in the `_layout` folder at the repository root to run the `config` and `run` commands.

## Debugging

The agent can be run in debug mode by providing the parameter `--debug` to the `run` command.
This will make the agent recognize the following environment variables:

- `VSTSAGENT_DEBUG_TASK` - for remote debugging node-based pipeline tasks

Note that all of these variables need to be defined on the node that is used to run the agent.
Also, do not run production agents with this mode as it can cause pipelines to appear stuck.

### `VSTSAGENT_DEBUG_TASK` environment variable

When enabled, the agent will start the Node process with specific parameters. These parameters cause the process to wait for the debugger to attach before continuing with the execution of the pipeline task script. The value must be set to either:
- Task `id`, which is an unique GUID identifier to be found in `task.json` definition of the task
- Task `name` and major `version`, e.g. AzureCLIV2

Only one task can be debugged at one time and all other tasks in the same pipeline will proceed as usual.
If you wish to stop debugging this task either restart that agent without `--debug` option, or unset the variables from above.

## Editors

[Using Visual Studio 2017](https://www.visualstudio.com/vs/)  
[Using Visual Studio Code](https://code.visualstudio.com/)

## Styling

We use the dotnet foundation and CoreCLR style guidelines [located here](
https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md)

## Troubleshooting build or test problems

'unzip' not found
- if you see this while building or testing on Windows, you need to install unzip for the Windows bash shell
- open a command window, run bash, and run `sudo apt install unzip` to get that tool installed




================================================
FILE: docs/design/auth.md
================================================
# Agent Authentication and Authorization

## Goals
  - Support agent installs in untrusted domains
  - The account that configures or runs the agent process is not relevant for accessing Azure DevOps resources.
  - Accessing Azure DevOps resources is done with a per-job token which expires when job completes.
  - The token is granted to trusted parts of the system including the agent, installed tasks and script steps specified by the build admin as trusted. 
  - Protect the token from developer contributions such as unit tests, msbuild targets (not designated as trusted by the build admin). 
  - Same code and scheme for agents connecting to either Azure DevOps in the cloud or deployed on-prem.

## Configuration

Configuring an agent registers an agent with a pool using your identity.  
Configuring an agent is [covered here in the documentation](https://www.visualstudio.com/en-us/docs/build/actions/agents/v2-windows).

![Config](res/01AgentConfig.png)

Configuration is done with the user being authenticated via a PAT (or AAD).
On-premisis deployments also support integrated auth (domain logged on credentials) or NTLM (supply username and password from non domain joined machine - typically Linux or OSX).

*Your credentials are not stored and are only relevant for registering the agent with the service.*

During configuration an RSA public/private key pair is created, the private key is stored in file on disk, on windows the content is protected with DPAPI (machine level encrypted - agent only valid on that machine) and on Linux/OSX with chmod permissions.

Using your credentials, the agent is registered with the service by sending the public key to the service which adds that agent to the pool and stores the public key, STS will generate clientId associated with the public key.

## Start and Listen

After configuring the agent, the agent can be started interactively (./run.cmd or ./run.sh) or as a service.

![Start](res/02AgentStartListen.png)

On start, the agent listener process loads the RSA private key (on windows decrypting with machine key DPAPI), sends a JWT token which signed by the private key to the service.
The server response with an OAuth token that grants permission to access the message queue (http long poll), allowing the agent to acquire the messages it will eventually run.

## Queue Build

When a build is queued, its demands are evaluated, it is matched to an agent and a message is placed in a queue of messages for that agent.  
The agent is listening for jobs via the message queue http long poll.  
The message encrypted with the agent's public key, stored during agent configuration.  

![Queue](res/03AgentQueueBuild.png)

A build is queued manually or as the result of a check-in trigger or build schedule.  
A [JWT token](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) is generated, granting limited access to the project or collection level build service account (see options tab of build definition).  
The lifetime of the JWT token is the lifetime of the build or at most the build timeout (options tab).

## Accessing Azure DevOps Resources

The job message sent to the agent contains the token to talk back to Azure DevOps.  
The agent listener parent process will spawn an agent worker process for that job and send it the job message over IPC.
The token is never persisted.

Each task is run as a unique subprocess. 
The encrypted access token will be provided as an environment variable in each task subprocess.  
The token is registered with the agent as a secret and scrubbed from the logs as they are written.

There is an option to make the token accessible to ad-hoc scripts during the build (powershell, bash, and batch task scripts).

NOTE: The point is to make the token not *readily* available to developer contributed assets like unit tests and build (msbuild etc..) targets and scripts.  
The token is meant for tasks and scripts that are trusted by the build admin by (1) installing the task or (2) directing a build definition to run that script.  
The goal is to avoid having the token accidentally leak in scripts.  
Even then, the token will expire at the end of the job which helps mitigate any accidental exposure.

## Keeping RSA private key - security implications
Agent stores RSA private key in a '.credentials_rsaparams' file in the agent root directory.
For Windows host - it is protected by [DPAPI](https://docs.microsoft.com/dotnet/standard/security/how-to-use-data-protection).
On Linux/OSX - it sets up chmod permissions (read & write) to the user which configured the agent (by calling 'chmod 600' command) - so this user will be able to reconfigure the agent.

For user which runs the agent - there should be permissions to read '.credentials_rsaparams' file. 
No other permissions are required for this file - please make sure that you don't grant any additional permissions since this file stores sensitive connection data.

An RSA private key is being created during agent configuration and removed only after running of 'config remove' command.
If this file will be removed - you need to run 'config remove' command and configure it again to register the agent.

This is actual for all agent modes (running as interactive, 'run once' mode, running as a service).

## StoreAgentKeyInCSPContainer (Windows)

A knob is available that enables generation and storge of the RSA private key in a named container .  When the agent is registered, the name of the container is written to
.credentials_rsaparams (which is still encrypted by DPAPI) instead of the key parameters.

More information about CNG key storage is here: https://learn.microsoft.com/en-us/windows/win32/seccng/key-storage-and-retrieval

e.g. set STORE_AGENT_KEY_IN_CSP_CONTAINER=true

### AgentKeyUseCng (Windows)

Specifies that the Key is created using Cng (Cryptography Next Generation)

They key is created as User Private, so it will not be located if the agent is run as a different user.

e.g. set AGENT_KEY_USE_CNG=true


================================================
FILE: docs/design/byos.md
================================================
# Elastic Self-hosted Agent Pools (formerly "BYOS: Bring Your Own Subscription Agent Pools")

Microsoft-hosted agents are extremely convenient: low/no cost, no infrastructure to maintain, and elastic with demand.
In return, customers must give up control over tools, capacity, and speed.
On the other end of the spectrum, self-hosted agents offer the exact opposite set of trade-offs: full control over everything, at the expense of maintaining and paying for infrastructure.
With self-hosted agents, elasticity is difficult to achieve.

Elastic self-hosted pools represent a middle ground:
they pair the convenience and elastic capacity of the Microsoft-hosted pool with the control and flexibility of self-hosted agents.
**Azure Pipelines will manage agents to the customer's specification, completely automated, in the customer's Azure subscription.**

## State of this spec

This is in the early design phase and we are looking for feedback in the PR (or as issues in the repo).

## Customer scenarios

The theme throughout these scenarios is that the customer wants hosted elasticity but customization beyond what Microsoft-hosted offers.

General themes are around:
- VM specs (memory, CPU, disk) and network environment
- Preinstalled software
- Agent lifecycle
- Auto-scaling
- On-premises customers have often asked us for access to the Microsoft-hosted pools.
In lieu of that (which complicates billing and technical design), this feature must be available to Azure DevOps Server customers.

### VM specs and environment

1. Customer wants more memory, more processor, or more IO than our native images.
2. [Customer](https://github.com/MicrosoftDocs/vsts-docs/issues/2985) wants an NCv2 VM with particular instruction sets for machine learning. (It's niche enough that we won't stand up dedicated hosted pools, but broad enough to be very interesting for our business.)
3. Customer wants additional storage attached to the VM.
4. Customer wants to deploy to a private App Service. It's in a private VNET with no inbound connectivity.
5. Customer wants to open corporate firewall to specific IP addresses so that Microsoft-hosted agents can communicate with their servers. The IP address range for Microsoft-hosted agents changes every week.
6. Customer wants to restrict network connectivity of agent machines and allow them to reach only approved sites.

### Preinstalled software

1. Customer wants Windows 2016 with VS 2019 Preview. (We only offer certain combos like Win2016 + VS2017 and Win2019 + VS2019.)
2. Customer wants to pin a specific set of tools and dependencies, preconfigured on the image.
3. Customer wants extreme control over the exact OS build, settings, versions, and so on.

### Agent lifecycle

1. Customer wants to run several consecutive jobs on an agent to take advantage of incremental source and machine-level package caches.
2. Customer wants to recycle agent machines every night or after every N jobs to clean up the accumulated "detritus" and reduce flakiness in build.
3. Customer uses agents to build untrusted code and hence wants to recycle the agent after every job.
4. Customer wants to run a cleanup script after every job instead of a full-blown recycle.
5. Customer wants to run additional configuration or cache warmup before an agent beings accepting jobs.
6. Customer wants to keep the agent machines for some time after a failure in order to debug the failure.

### Auto-scaling

1. Customer wants to de-provision agents machines that are not being used for running jobs.
1. At the same time, customer does not want us to wait to provision new agents until after a job has been scheduled. Customer wants to get this flexibility by setting some limits:
   - Minimum number of idle machines (to ensure that there are machines readily available to service new jobs as they arrive).
   - Maximum number of machines (to ensure that we do not exceed the max budget constraints).
1. Customer wants to set different limits for different times in the day to handle peak and off-peak loads.

### On-premises customers

1. Customer wants to use Azure DevOps Server with elastic agent pools.

## Industry review

Similar problem spaces:
- [Jenkins can use Azure agents](https://docs.microsoft.com/en-us/azure/jenkins/jenkins-azure-vm-agents) this way
- [AppVeyor](https://www.appveyor.com/docs/server/running-builds-on-azure/) offers instructions for solving a similar problem on several cloud providers
- GitLab CI/CD offers auto-scaling of builder containers using [Docker Machine](https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/autoscale.md) or [Kubernetes](https://docs.gitlab.com/runner/executors/kubernetes.html).

Not offered:
- [Travis CI](https://docs.travis-ci.com/user/enterprise/setting-up-travis-ci-enterprise/) offers an enterprise product that you can install on your own infrastructure. While you can choose what kind of VM to run it on, there's no elasticity.
- [CircleCI](https://circleci.com/docs/2.0/aws/#nomad-clients) offers an on-your-infrastructure product. You must scale up and down the workers manually, there's no elasticity.

## Solution

For starters, this is about running agents on VMs in Azure.
Later, we may consider whether this same solution works for:
- AKS
- Any Kubernetes
- Other clouds

### VM scale sets

The mechanism under the hood being considered for managing virtual machines in Azure is VM scale sets (VMSS). 

[VM scale sets](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview) have the following benefits:

•	Easy to create and manage a large number of virtual machines with the same base OS image and configuration.
•	Customer can pick one of the standard images, create their own [custom image](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/tutorial-use-custom-image-cli), or install their own software on top of a standard image using [script extensions](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/tutorial-install-apps-cli).
•	Customer can pick a [size](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes?toc=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fvirtual-machine-scale-sets%2FTOC.json&bc=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fbread%2Ftoc.json) for their virtual machines.
•	Customer can use [availability zones](https://docs.microsoft.com/en-us/azure/availability-zones/az-overview) to distribute VM instances in a scale set across multiple data centers.
•	Customer can configure [networking](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-networking) for VMs in their scale set.
•	Customer can schedule automatic [OS image updates](https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade).
•	Customer can use standard Azure policies to control various settings in the scale set.
•	Azure Pipelines can easily grow or shrink the number of virtual machines in the scale set.

Azure has a good [marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps?filters=virtual-machine-images) of images that customers can start with for their base images. These include Windows Server, Ubuntu, Debian based images, Windows server with Visual Studio, etc.
In addition, wherever possible, we should publish our Microsoft-hosted images to this marketplace. There are some licensing constraints that prevent us from publishing all the software though.

### Setup

For a lot of customers, it would be enough to have them
- go to pool setup
- create a new pool, and select the option to use Azure VMs
- pick an Azure subscription, a VM scale set + a few different agent lifetime policies
- have Azure Pipelines configure it all for them

Some initial conceptual designs:

![BYOS1](res/byos1.png)

![BYOS2](res/byos2.png)


================================================
FILE: docs/design/clientcert.md
================================================
# Support Ssl Client Certificate in Build/Release Job (TFS On-Prem Only)

## Goals

  - Support agent configure and connect to TFS use ssl client certificate
  - Support get source in Build job and download artifact in Release job works with ssl client certificate
  - Provide documentation and scripts to help customer prepare all pre-requrements before configuration
  - Expose ssl client certificate information in vsts-task-lib for task author

## Pre-requirements

  - CA certificate(s) in `.pem` format (This should contains the public key and signature of the CA certificate, you need put the root ca certificate and all your intermediate ca certificates into one `.pem` file)  
  - Client certificate in `.pem` format (This should contains the public key and signature of the Client certificate)  
  - Client certificate private key in `.pem` format (This should contains only the private key of the Client certificate)  
  - Client certificate archive package in `.pfx` format (This should contains the signature, public key and private key of the Client certificate)  
  - Use `SAME` password to protect Client certificate private key and Client certificate archive package, since they both have client certificate's private key  
  
The Build/Release agent is just xplat tool runner, base on what user defined in their Build/Release definition, invoke different tools to finish user's job. So the client certificate support is not only for the agent infrastructure but most important for all different tools and technologies user might use during a Build/Release job.
```
   Ex:
      Clone Git repository from TFS use Git
      Sync TFVC repository from TFS use Tf.exe on Windows and Tf on Linux/OSX
      Write customer Build/Release task that make REST call to TFS use VSTS-Task-Lib (PowerShell or Node.js)
      Consume Nuget/NPM packages from TFS package management use Nuget.exe and Npm
      [Future] Publish and consume artifacts from TFS artifact service use Drop.exe (artifact) and PDBSTR.exe (symbol)
```


You can use `OpenSSL` to get all pre-required certificates format ready easily as long as you have all pieces of information.

### Windows

Windows has a pretty good built-in certificate manger, the `Windows Certificate Manager`, it will make most Windows based application deal with certificate problem easily. However, most Linux background application (Git) and technologies (Node.js) won't check the `Windows Certificate Manager`, they just expect all certificates are just a file on disk.  

Use the following step to setup pre-reqs on Windows, assume you already installed your corporation's `CA root cert` into local machine's `Trusted CA Store`, and you have your client cert `clientcert.pfx` file on disk and you know the `password` for it.  
  - Export CA cert from `Trusted Root CA Store`, use `Base64 Encoding X.509 (.CER)` format, name the export cert to something like `ca.pem`.  
  - Export any intermediate CA cert from `Intermediate CA Store`, use `Base64 Encoding X.509 (.CER)` format, name the export cert to something like `ca_inter_1/2/3.pem`. Concatenate all intermediate ca certs into `ca.pem`, your `ca.pem` might looks like following:  
```
-----BEGIN CERTIFICATE----- 
(Your Root CA certificate: ca.pem) 
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- 
(Your Intermediate CA certificate: ca_inter_1.pem) 
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE----- 
(Your Intermediate CA certificate: ca_inter_n.pem) 
-----END CERTIFICATE-----
```  
  - Extract Client cert and Client cert private key from `.pfx` file. You need `OpenSSL` to do this, you either install `OpenSSL for Windows` or just use `Git Bash`, since `Git Bash` has `OpenSSL` baked in.
```
Inside Git Bash:    
  Extract client-cert.pem
  openssl pkcs12 -in clientcert.pfx -passin pass:<YOURCERTPASSWORD> -nokeys -clcerts -out client-cert.pem
      
  Extract client-cert-key.pem, this will get password protected
  openssl pkcs12 -in clientcert.pfx -passin pass:<YOURCERTPASSWORD> -nocerts -out client-cert-key.pem -passout pass:<YOURCERTPASSWORD> 
```
    
At this point, you should have all required pieces `ca.pem`, `client-cert.pem`, `client-cert-key.pem` and `clientcert.pfx`.

### No-Windows

As I mentioned before, most Linux backgroud application just expect all certificate related files are on disk, and use `OpenSSL` to deal with cert is quiet common on Linux, so I assume for customer who wants to setup Build/Release agent on Linux already has `ca.pem`, `client-cert.pem` and `client-cert-key.pem` in place. So the only missing piece should be the client cert archive `.pfx` file.  
```
From Terminal:
openssl pkcs12 -export -out client-cert-archive.pfx -passout pass:<YOURCERTPASSWORD> -inkey client-cert-key.pem -in client-cert.pem -passin pass:<YOURCERTPASSWORD> -certfile CA.pem
```

## Configuration  

**In order to get directory/file ACL setup correctly, make sure you put all certificates files under agent root directory**

Pass `--sslcacert`, `--sslclientcert`, `--sslclientcertkey`. `--sslclientcertarchive` and `--sslclientcertpassword` during agent configuration.   
Ex:
```batch
.\config.cmd --sslcacert enterprise.pem --sslclientcert client.pem --sslclientcertkey clientcert-key-pass.pem --sslclientcertarchive clientcert-2.pfx --sslclientcertpassword "test123"
```  

We store your client cert private key password securely on each platform.  
Ex:
```
Windows: Windows Credential Store
OSX: OSX Keychain
Linux: Encrypted with symmetric key based on machine id
```

## How agent handle client cert within a Build/Release job

After configuring client cert for agent, agent infrastructure will start talk to VSTS/TFS service using the client cert configured.  

Since the code for `Get Source` step in build job and `Download Artifact` step in release job are also bake into agent, those steps will also follow the agent client cert configuration.  

Agent will expose client cert configuration via environment variables for every task execution, task author need to use `vsts-task-lib` methods to retrieve back client cert configuration and handle client cert with their task.

## Get client cert configuration by using [VSTS-Task-Lib](https://github.com/Microsoft/vsts-task-lib) method

Please reference [VSTS-Task-Lib doc](https://github.com/Microsoft/vsts-task-lib/blob/master/node/docs/cert.md) for detail

## Progress
 - Agent infrastructure (you can configure and queue a build/release) [DONE]
 - Fetch git repository [DONE]
 - Fetch tfvc repository [Only supported in Windows agent]
 - Expose client cert info to task sdk [DONE]

## Self-Signed CA Certificates

I would assume there are some self-signed CA certificates along with the client certificate, however the current agent doesn't has a good way to handle self-signed CA certificates.  

The work of the client certificate support do add a `--sslcacert` option to agent configuration, but it currentlly just for some of the downstream tools your Build/Release job and not for the agent infrastructure. In order to use self-signed CA certificates with the agent, you need to maunally install all self-signed CA certificates into your OS's certificate store, like: `Windows certificate manager` on `Windows`, `OpenSSL CA store` on `Linux`. Just like you have to manually configure your browser to take those certificates. We might be able to improve this when we consume netcore 2.0 in the agent.  

The next problem is about all different downstream tools you used in your Build/Release job, the way they find CA certificates might all different.  
Ex:
 - Git (version < 2.14.x) expect a `--cainfo` option and point to the CA file.  
 - Git (version >= 2.14.x) has a config option to let Git to read CA from `Windows Certificate Manager` on `Windows`.  
 - Tf.exe expect read CA from `Windows Certificate Manager`.  
 - TEE (tf on linux) expect read CA from `Java Certificate Store`.  
 - PowerShell expect read CA from `Windows Certificate Manager`.  
 - Node.js expect a `ca` parameter on `tls.options`.  
 - Node.js (version >= 7.3) also expect an environment vairble to point to the CA file `NODE_EXTRA_CA_CERTS`, however the agent current use Node.js version 6.x which mean we can't use that envirinment variable.  

At this point, I would sugguest when you have a self-signed CA cert, please make sure the tools or technologies you used within your Build/Release works with your self-signed CA cert first, then try to configure the agent.  
In this way, even you get an error within your build/release job, you might have better idea of where is the error coming from.  

## Dev notes

I use following commands to generate certificates for testing(all commands needs to be run on same machine in admin command prompt)  

Root CA cert:  
`MakeCert -n "CN=Enterprise_issuer_2" -pe -ss Root -sr LocalMachine -sky exchange -m 6 -a sha1 -len 2048 -r -eku 1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1`  

Server cert:  
`MakeCert -n "CN=TFSAT.mycompany.com" -pe -ss My -sr LocalMachine -sky exchange -m 6 -in Enterprise_issuer_2 -is Root -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1 -len 2048`  

Client cert:  
`MakeCert -n "CN=mycompany\ting" -pe -ss My -sr CurrentUser -sky exchange -m 6 -in Enterprise_issuer_2 -is Root -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.2 -len 2048`


================================================
FILE: docs/design/coreclr.md
================================================

# Agent Platform Plans

## Goals

  - Expand our Linux support: Right now we only support RedHat 7.2 and Ubuntu 14.04/16.04.  We routinely get requests versions like RedHat 6 and new distros like SUSE.  
  - Produce a minimal number of agent packages: Right now we drop [5 agents for every build](https://github.com/Microsoft/vsts-agent/releases).  This won't scale.  Ideally, only Windows, Mac, and Linux
  - Allow task authors to create core-CLR tasks and package core clr assets: Right now we only [support typescript (via node) and powershell](https://github.com/Microsoft/vsts-task-lib/blob/master/README.md). 
  - Rationalize all of this with emerging [Docker initiative](https://youtu.be/OOV5bXcJHpc)

## Phases

We must first move the agent to 2.0 core CLR and figure out the linux-x64 single target before we can implement core CLR tasks which can run in a container of any other linux distro and version.

For that reason, we have separated the work into two clear phases.  Move the agent to core CLR with one linux-x64 target and then support writing tasks in core CLR.

## Phase One: Core CLR 2.0 Agent

### Officially Supported and Tested

**Windows**: Windows 7 SP1+, Server 2008 R2 SP1+  
**Mac OS**: 10.12 (Sierra)+ (reduction)  
**Fedora Based Linux**: RedHat/CentOS/Oracle Linux 7+ and Fedora 25+  
**Debian Based Linux**: Ubuntu 17.04/16.04/14.04, Debian 8.7+ and Linux Mint 17+  
**openSUSE Linux**: 42.2+

### Expanding Linux

We are currently building an agent per Linux distro and version that we support: RedHat 7.2, Ubuntu 14.04, Ubuntu 16.04.   We need to expand to officially supported SUSE and other enterprise distros like Oracle.

.Net Core 2.0 will allow us to only build a **portable linux x64** package which will work across [these supported OS distros and versions](https://github.com/dotnet/core/blob/master/roadmap.md#supported-os-versions). 

### Expanding Linux: Unsupported CoreCLR 2.0 Versions

We need to expand the versions (RedHat 6) and expand the distros (SUSE).  Some of the supported version restrictions are soft limits (official support, encouraging moving forward, RedHat) and others are hard limits (won't technically work, Mac OS and openssl).  

We will attempt to make versions like RedHat 6 work, but the ultimate Linux solution is [our container story](https://youtu.be/OOV5bXcJHpc).  With our container story, the agent runs in the host and it's jobs and tasks in any linux image you select.  The limits will only come from our task story.  See Phase 2 below.

### OS Dependencies

Customers need to install OS dependencies.  Getting the OS dependencies installed [has been a pain point for customers](https://github.com/Microsoft/vsts-agent/issues/232).  
In order to improve the customer experience around getting OS dependencies, we will add OS dependencies check as part of agent configuration.  
When a required .net core dependency is missing, customer can just run another script we added to install all missing dependencies.  

Here is a [list of the OS dependencies](https://github.com/dotnet/core/blob/master/Documentation/prereqs.md).

For OSX, openssl via homebrew will no longer be required in core clr 2.0.  For Linux, core CLR 2.0 has a new feature to allow loading OS dependencies from a folder for [self contained linux apps](https://github.com/dotnet/core/blob/master/Documentation/self-contained-linux-apps.md).  
However we can't really levage this feature since we can't redistribute those native OS binary due to legal issue. 

### Reducing Supported Versions Implications

Core CLR 2.0, while expanding distros, is contracting supported versions.  Most impactful to us is RedHat 7.2 and OSX 10.10 (Yosemite) and 10.11 (El Capitan) which we currently support today with our agent.  It only supports the recently released 10.12 (Sierra).

RedHat is a soft limit so we will attempt to work back to RH6.  OSX is a hard technical limit (openssl) so we will only support 10.12+

### Agent Builds and Updates

Customers can update their agents from our web UI.  New tasks and new features can demand a new agent version.  *Customers will find themselves stuck as they are potentially surprised they need to update yet updates will not work until they upgrade their OS*.  This is a mac OS and Redhat 7.2 issue.

The backend holds a registry of agents by platform and version.  It will currently download from github releases by version and platform.  For example: https://github.com/Microsoft/vsts-agent/releases/download/v2.114.0/vsts-agent-win7-x64-2.114.0.zip

Currently, we advertise these platforms in the UI and APIs.

  - win7-x64
  - osx.10.11-x64
  - rhel.7.2-x64
  - ubuntu.14.04-x64
  - ubuntu.16.04-x64
  
When customers request agent update from web UI, the service will base the agent's current version and the latest version has been registered in the backend to decide whether to send an `Agent Update` message to the agent.  

With Consuming CoreCLR 2.0 in the agent, we will change to have only 3 agent packages instead of 5.  

  - win-x64
  - osx-x64
  - linux-x64

We will change download urls to an Azure CDN url backed by Azure blob storage (firewall considerations and github throttling during agent update) but we will continue to offer [release metadata](https://github.com/Microsoft/vsts-agent/releases) along with the source.  

The agent major version will remain 2.x.  Agents will still update along major version lines if we choose to register the appropriate paths.

The UI will only show **Windows, Mac OS and Linux** tabs (drop distro specific tabs).

If 2.125.0 is the first agent version that build from CoreCLR 2.0, then here is what will happen during agent updates:

**Existing Installed Agent (version < 2.125.0)  --> 2.125.0 Drops**    
win7-x64  --> win-x64-2.125.zip  
osx.10.11-x64 --> osx-x64-2.125.0.zip (Darwin version >= 16.0.0)  
osx.10.11-x64 --> Deadend. (Darwin version < 16.0.0, about 10% of all osx agents in VSTS)  
rhel.7.2-x64 --> linux-x64-2.125.0.zip.  Redirection for old agents  
ubuntu.14.04-x64 --> linux-x64-2.125.0.zip.  Redirection for old agents  
ubuntu.16.04-x64 --> linux-x64-2.125.0.zip.  Redirection for old agents  

In order to make the agent update experience smoothly to most of customers, the service will start tracking the agent OS information as first class concept. So anytime customers request agent updates, the service will not only base on the agent's current version but also base on agent's OS to decide whether to send `Agent Update` message to the agent.  

**Alternatives**  

We considered moving the version to 3.0 which requires an explicit 'migration' from customers due to the OS constraints but that will cause too much friction as new tasks and features demand 3.0.  On premise upgrades will upgrade only to find their builds are failing.  This can still happen for OSX 10.10 and 10.11 but we shouldn't push the pain to all our platforms (especially windows) due to this.

This will also require mac OS users to manually migrate after that sprint which is better than requiring all platforms (windows being the majority) to migrate manually.  We have also discussed whether there's a way to detect server side if OS version is 10.12 and redirect them to osx.10.12-x64 agent download and platform.

### Timeline

Core CLR 2.0 releases Q3 2017 (soon).  We have a [branch ready to go](https://github.com/Microsoft/vsts-agent/tree/users/tihuang/netcore20).  We will target the 2.01 core CLR release which contains critical fixes.

## Phase Two: Core CLR Tasks

A guiding principle from the inception of the build.vNext is that the agent needs to carry everything it needs to be able to execute any task from the market place.

It is important to separate

For Linux, that's node which [goes back to RH5](https://nodesource.com/blog/node-binaries-for-enterprise-linux/), although RedHat 6 is the important one that we get repeated requests for. 

### Tool Runner Task

For a typical tool runner task (msbuild, gradle) the user is bringing the environment in the form of a machine, VM or docker image.  The agent carries the task script engine (node)
```bash
         AGENT             +    User 
                           |
+---------+   +--------+   |
| Handler|----->Node   |   |
+-------+-+   +--------+   |
        |                  |
       +v-------+    which |  +---------+
       | Script +-------------> Gradle  |
       +--------+          |  +---------+
         +---------+       |   +------+
         | Modules |       |   | Java |
         +---------+       |   +------+
                           |
                           +

```

### Utility Task

```bash
                           +
                           |
+---------+   +--------+   | run
| Handler|----->Node   +------->
+-------+-+   +--------+   |
        |                  |
       +v-------+          |
       | Script |          |
       +--------+          |
         +---------+       |
         | Modules |       |
         +---------+       |
                           |
         +---------+       |  run
         |  deps   +-------+---->
         +---------+

```





================================================
FILE: docs/design/jobcancellation.md
================================================

# Agent jobs cancellation

Agent receives cancellation signal from server - which initiates job cancellation process.

## How agent cancells job execution in details?

When agent receives cancellation signal from server (this usually happens when job execution is timed out, or it was cancelled manually by user) - it sends SIGINT signal to the child process responsible for task execution.

If child process has been successfully stopped by SIGINT signal - agent considers that task has been cancelled; otherwise, the agent will send SIGTERM signal to this process.

You can find relevant source code [here](https://github.com/microsoft/azure-pipelines-agent/blob/master/src/Agent.Sdk/ProcessInvoker.cs#L418).


================================================
FILE: docs/design/logprocessors.md
================================================
# Agent Log Processors RFC

## Goals

Provide an extensibility mechanism which offers other teams and partners to do additional processing on log output cooperatively as part of the job (as opposed to post job log processing).

Performance and reliability will be critical.  

## Scenarios 

### Publishing Test Results

In addition to our tasks, testing tools can be invoked from command lines. Since many test frameworks do not have reporters by default, we need to scan the output looking for well known output patterns and publish test results to our test management service. We will also search for well known test result file on disk and publish those to our test management service.

These test tools can be called from our tasks but also via command lines and scripts such as `PowerShell`, `ShellScripts`, `python`, `javascript` or any scripting technology.  They can also be called via `npm test` which is simply an indirection to a set of cmd lines and script calls. 

### Telemetry on Tool Usage

It is useful to know the usage and trends of certain scenarios being leverage via Azure Pipelines.  For example, we may want to know the numbers and trends of packages published to `npm` or `nuget`, docker images published or kubernetes configurations applied using our pipelines.

Since we redirect all STDOUT/STDERR, we can identify tool invocation base on each tools output pattern.

Once again, these may be called via tasks, cmd lines, scripts and even runners like `npm run publish`.

### Send Output to Another Service

Output could be processed and sent to another service for storage and processing.  Alternatively, via config, writing back logs to Azure Pipelines can be disabled with the plugin logger offering a message to be substituted.

## Log Processing Plugins

We will introduce a log processing plugins very similar to other agent plugins.

Currently the Worker process will generate an `IList<IStep> steps` base on the job message server send down. Each `IStep` contains an `IExecutionContext`, the execution context is the core component which sends final output message (after mask secrets) to the live console circular buffer and permanent log storage in pages. In addition, `IExecutionContext` will also send the output message to the `log plugin host` through STDIN. 

In a companion out of proc log processing extensibility point, output can be processed in parallel with our log processing.  Since not keeping up with stdin can cause it to fail.  In order to avoid having every plugin to get that right (and to reduce risk), we will create one `log plugin host` which buffers STDIN.

All log plugins are best effort, plugins can't change the result of customer's job.
Plugin can produce outputs back to user, but it can't log error/warning issues back to job.

Plugins will be written in net core and loaded in-proc of the `log plugin host`. It will not block our live console and log publishing.

Each plugin needs to implement the following interface:
```C#
public interface IAgentLogPlugin
{
  // Used for prefix outputs
  string FriendlyName { get;}

  // Invoke on every line of the log output
  Task ProcessLineAsync(IAgentLogPluginContext context, TaskStepDefinitionReference step, string line);
  
  // Invoke after all tasks finished on worker side and all output lines finished process on plugin.
  Task FinalizeAsync(IAgentLogPluginContext context);
}
```

The context will looks like:
```C#
public interface IAgentLogPluginContext
{
  // SystemConnection back to Azure DevOps Service
  public VssConnection VssConnection { get; }

  // Job variables
  public IDictionary<String, VariableValue> Variables { get; }

  // Job endpoints
  public IList<ServiceEndpoint> Endpoints { get; }

  // Job repositories
  public IList<RepositoryResource> Repositories { get; }

  // Tasks that's going to run
  public IDictionary<Guid, TaskStepDefinitionReference> Steps { get; }

  // goes to agent diag log
  void Trace(string message);

  // goes to user's build log in `Job Finalize` node
  void Output(string message);
}
```

General flow looks like:

![layers](res/AgentLogProcessors.png)

## Log Processing Host

To ensure log processing plugins do not block stdin, the host will take care of buffering output, processing that buffer or queue of log lines and processing that queue.  That buffering may start out as in memory similar to our other queues but we could consider backing it by files if required.

As it's processed each plugin will be called with `ProcessLineAsync(AgentLogPluginContext context, TaskStepDefinitionReference step, string line)`.  That will be a blocking call per plugin which would ideally do light processing or alter internal tracking state and return.

If a plugin writes transient state data, it should do it in the agent temp folder so it gets cleaned up automatically by the agent.  To encourage this, the host plugin will provide context that contains all job variables worker setup at the beginning of the build, so plugin can get the temp folder base on `$(Agent.TempDirectory)`.

It is a requirement that plugins process output in a stream SAX style processing style.  Buffering the full log and then processing will not be efficient and may get you flagged in telemetry or terminated by the plugin host.

Each plugin will prefer a friendly user message on it's role used in user feedback (see below).

The processing host will also have deep tracing in agent diagnostics.

## Lifetime

Worker will start the log processing plugin host at the end of `Job Initialize` along with a `LogPluginHostContext` send through STDIN in JSON format.


```C#
public class LogPluginHostContext
{
  // Job variables
  public IDictionary<String, VariableValue> Variables { get; }

  // Job endpoints
  public IList<ServiceEndpoint> Endpoints { get; }

  // Job repositories
  public IList<RepositoryResource> Repositories { get; }

  // Tasks that's going to run
  public IDictionary<Guid, TaskStepDefinitionReference> Steps { get; }
}
```

After plugin host started, the plugin host will start async plugin process task for each plugin in separate threads. Then, the plugin host will sit in a loop of reading STDIN and redirect the input to each plugin.

When worker finish running all job steps (tasks defined by user in their definition), the worker will enter `Job Finalize` mode. Worker will send a special string `##vso[logPlugin.finish]` to the plugin host, so each plugin can start their finalize process. The worker will start stream output from plugin host to user, so user can figure out what's going on.

```C#

AgentLogPluginHost pluginHost = new AgentLogPluginHost(context, plugins);
Task pluginHostTask = pluginHost.Run();
while(true)
{
  var input = Console.ReadLine();
  if(string.Equals(input, "##vso[loglugin.finish]"))
  {
    pluginHost.Finish();
    break;
  }
  else
  {
    pluginHost.EnqueueConsoleOutput(input);
  }
}

await pluginHostTask;
```

## Circuit Breaking

The worker will monitor the log host process.  If it crashes or returns a non success code, report the error to log.  

The agent and worker should continue reliably in the even of any issues with side processing.

The plugin host will short-circuit the plugin if the plugin is not able to catch up processing outputs.

For now, we will circuit break on memory usage, if the plugin has more than 10MB pending strings for more than 100 sec, we will stop let that plugin process anymore.

## Telemetry (TODO)

We need telemetry on:  

  - Disabling log hosts
  - Failure to load a plugin: it will be disabled
  - Memory usage of the out of proc log host processor (plugins are in proc to that)
  - Add more here

## Testing  

Since this work has the potential to be impactful on performance and reliability we will do heavy L0 testing around both the positive cases and the negative scenarios (getting circuit breaks etc...).  In the negative case testing, we can simply set the thresholds extremely low.  For example, set memory consumption or processor utilization very low to avoid taking down the box running the tests.  We are testing the circuit breaking functionality.

Each plugin should be heavily tested in L0 fashion by contributing a set of output files and baseline results.  The tests will feed the output test files into the log processing host with the plugin writing it's conclusions to an output file that we baseline and automate.

## Scope and Delivery

Initially this will be first party plugins packaged with the agent.  Eventually, this may be opened to external third party plugins.  Achieving that would require service side features to deliver as an extension.  It would also introduce another compatibility issue moving independently of the agent.

If we expose externally (not delivered as part of the agent), we will offer the ability to be your own log processing host because of the compat and dependency problems (agents stay back and get auto updated).  This is a long discussion out of the scope of this design document.


## Sample

A sample log plugin implementation might looks like following:

```C#
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Agent.Sdk;
using Pipelines = Microsoft.TeamFoundation.DistributedTask.Pipelines;
using Microsoft.VisualStudio.Services.Agent.Util;
using System.IO;
using Microsoft.VisualStudio.Services.Common;

namespace Agent.Plugins.Log
{
    public class SampleLogPlugin : IAgentLogPlugin
    {
        public string FriendlyName => "Re-save Log";

        private string _fileName = $"{Guid.NewGuid().ToString("N")}.log";

        public Task<bool> InitializeAsync(IAgentLogPluginContext context)
        {
            return Task.FromResult(true);
        }

        public Task ProcessLineAsync(IAgentLogPluginContext context, Pipelines.TaskStepDefinitionReference step, string output)
        {
            context.Trace("DEBUG_PROCESS");
            var file = Path.Combine(context.Variables.GetValueOrDefault("agent.homedirectory").Value, "_diag", _fileName);
            context.Output($"{step.Name}: {output}");
            return Task.CompletedTask;
        }

        public async Task FinalizeAsync(IAgentLogPluginContext context)
        {
            context.Trace("DEBUG_FINISH");
            var file = Path.Combine(context.Variables.GetValueOrDefault("agent.homedirectory").Value, "_diag", _fileName);
            await File.AppendAllTextAsync(file, StringUtil.ConvertToJson(context.Variables));
        }
    }
}

```

================================================
FILE: docs/design/non-glibc-containers.md
================================================
# Non-glibc Containers

If you want to use a non-glibc-based container, such as Alpine Linux, you will need to arrange a few things on your own.
First, you must supply your own copy of Node.js.
Second, you must add a label to your image telling the agent where to find the Node.js binary.
Finally, stock Alpine doesn't come with other dependencies that Azure Pipelines depends on:
bash, sudo, which, and groupadd.

## Bring your own Node.js
You are responsible for adding a Node LTS binary to your container.
As of November 2018, we expect that to be Node 10 LTS.
You can start from the `node:10-alpine` image.

## Tell the agent about Node.js
The agent will read a container label "com.azure.dev.pipelines.handler.node.path".
If it exists, it must be the path to the Node.js binary.
For example, in an image based on `node:10-alpine`, add this line to your Dockerfile:
```
LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"
```

## Add requirements
Azure Pipelines assumes a bash-based system with common administration packages installed.
Alpine Linux in particular doesn't come with several of the packages needed.
Installing `bash`, `sudo`, and `shadow` will cover the basic needs.
```
RUN apk add bash sudo shadow
```

If you depend on any in-box or Marketplace tasks, you'll also need to supply the binaries they require.

## Full example of a Dockerfile

```
FROM node:10-alpine

RUN apk add --no-cache --virtual .pipeline-deps readline linux-pam \
  && apk add bash sudo shadow \
  && apk del .pipeline-deps

LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"

CMD [ "node" ]

```


================================================
FILE: docs/design/percentEncoding.md
================================================
# Percent Encoding

### Problem

As the agent currently works, there is no way to pass certain reserved values (%3B, %0D, %0A, and %5D) through the agent without using a custom encoding/decoding scheme. This is hard because you have to control the scheme used by the sender and receiver.

The reason this is impossible is because we escape certain values needed for the ##vso commands to function: `; -> %3B, \r -> %0D, \n -> %0A, ] -> %5D`. The agent then automatically decodes these values. We use `%` to encode these, but don't provide an option for encoding `%` itself

### Solution

We've introduced encoding for `%` which will map to `%AZP25`. This means that any time the agent receives `%AZP25` as part of a command, it will automatically decode it to `%`. So `##vso[task.setvariable variable=test%AZP25]a%AZP25` will now set a variable `test%: a%`.

NOTE: This was previously designed to use %25 instead of %AZP25 as the escape sequence. We decided to go with %AZP25 instead since %25 was used somewhat often
because of its role in url encoding. Some agents may continue to emit warnings for %25 as this change rolls out (or if you haven't updated to the most recent agent).
These warnings are safe to ignore.

This behavior will be enabled by default in March 2021. To disable it, you can set a job level variable DECODE_PERCENTS to false. To avoid getting warnings about it and opt into the behavior early, set a job level variable DECODE_PERCENTS to true.

```
jobs:
- job:
  variables:
  - name: DECODE_PERCENTS
    value: true

  steps:
  - powershell: Write-Host '##vso[task.setvariable variable=test]a%AZP25'
    displayName: 'Set Variable'

  # This will print the a% correctly as the value of test
  - powershell: 'Get-ChildItem env:'
    displayName: 'printenv'
```


================================================
FILE: docs/design/proxy.md
================================================
# How Proxy Works in Agent and Task Execution

## Goals

  - Support agent configure and connect to VSTS/TFS behind web proxy
  - Support get source in Build job and download artifact in Release job works behind web proxy
  - Expose proxy agent configuration in vsts-task-lib for task author

## Configuration

Documentation for configuring agent to follow web proxy can be found [here](https://www.visualstudio.com/en-us/docs/build/actions/agents/v2-windows#how-do-i-configure-the-agent-to-work-through-a-web-proxy-and-connect-to-team-services).  
In short:  
Agent version 2.122.0 or above  
  - Pass `--proxyurl`, `--proxyusername` and `--proxypassword` during agent configuration.  
    Ex:
    ```
    ./config.cmd --proxyurl http://127.0.0.1:8888 --proxyusername "1" --proxypassword "1"
    ```
    We store your proxy credential securely on each platform.  
    Ex:
    ```
      Windows: Windows Credential Store
      OSX: OSX Keychain
      Linux: Encrypted with symmetric key based on machine id
    ```
    
  - Create a `.proxybypass` file under agent root to specify proxy bypass Url's Regex (ECMAScript syntax).  
    Ex:
    ```
    github\.com
    bitbucket\.com
    ```
Before 2.122.0
  - Create a `.proxy` file under agent root to specify proxy url.  
    Ex:
    ```
    http://127.0.0.1:8888
    ```
  - For authenticate proxy set environment variables `VSTS_HTTP_PROXY_USERNAME` and `VSTS_HTTP_PROXY_PASSWORD` for proxy credential before start agent process.
  - Create a `.proxybypass` file under agent root to specify proxy bypass Url's Regex (ECMAScript syntax).  
    Ex:
    ```
    github\.com
    bitbucket\.com
    ```

## How agent handle proxy within a Build/Release job

After configuring proxy for agent, agent infrastructure will start talk to VSTS/TFS service through the web proxy specified in the `.proxy` file.  

Since the code for `Get Source` step in build job and `Download Artifact` step in release job are also bake into agent, those steps will also follow the agent proxy configuration from `.proxy` file.  

Agent will expose proxy configuration via environment variables for every task execution, task author need to use `vsts-task-lib` methods to retrieve back proxy configuration and handle proxy with their task.

## Get proxy configuration by using [VSTS-Task-Lib](https://github.com/Microsoft/vsts-task-lib) method

Please reference [VSTS-Task-Lib doc](https://github.com/Microsoft/vsts-task-lib/blob/master/node/docs/proxy.md) for detail


================================================
FILE: docs/design/res/AgentLogProcessors.xml
================================================
<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" version="9.4.6" editor="www.draw.io" type="device"><diagram id="1573eb5b-146a-a906-d01e-f159e9961af0" name="Page-1">3VpRc5s4EP41nrl7SAYkhPFjEqdtZnJtps5Nr48YZEyDkQ/kxu6vPwkksCSwsY3j9PxiWAkhfbv77WrFAN4t1h8zfzn/i4Q4GQArXA/geACA7QCX/XHJppR4nlMKoiwORadaMIl/YSG0hHQVhzhXOlJCEhovVWFA0hQHVJH5WUZe1W4zkqhvXfoRNgSTwE9M6bc4pHOxCmTV8k84jubyzbYlWqZ+8BJlZJWK9w0AnBW/snnhy7FE/3zuh+R1SwTvB/AuI4SWV4v1HU44thK28rkPLa3VvDOc0i4PCLX89JOVWPpNxB8F1jeSveBMzJJuJDLF2jB/2h7A29d5TPFk6Qe89ZXZApPN6SIRzeZsxAR/4ozi9ZZIzO4jJgtMsw3rIluHAilpSeL2tVaLI7vMt1TiCJkvLCGqRq7RYBcCkBY0gYGOgQdX9rL7OiuT9adyBGvn+h3bu0YKArZTSbZAsEEDCAidDsJoPwa1TVhH2QRoAcsEZXvBVsOCYQ8Llhz0Pla8Vie1UW/fBA/bwOPZz1/yy4MCVFDAW4ICL08NwEI6NaAGCJwmYuiBHd3zuwlsgWo3MTQxIexhwcP3tODuvHAuODwDjsc4Z5mD6y/4QhP2qtuHCcXLShTRYtUWF/ZPHwdj14E+zoWdjfbbEksNl/xyluD1Dc9p2bJxGorLcZD4eR4HKiyzOEnuSEKyYgiZeu5IxHCoJMI7HQvtIJIMJz6Nf6rpcxNC4g1PJC6yTKEK6EKdyoYjdZCcrLIAi+e2M1ptKMfaOxT1swhTY6hCadXSu+mxAydIPQabJGYGnu037mnpCY/TSlDtKr6sKBsFC3lGKEOdpOz2amTt0H9OM/KCt1qs4le1yE0O7CdpdxDQdABd1/CuprS9YrCTvMvMWaer2axhNyN1s8xIgPO8g2paNKHCCHqC0bU1GB3UMfPvg6S6pP77CAmvY/oPp/TrIRK332VTyuZTto08Vwq+FwIXVj2ecBazqXO/KQJDVyoDVunmqqOWLCLhvSTlIS38QM89jvD0gariS/90B82twOR5/PCZRfgi3E+Zh7kiypsSzXSYE1DVWDKcx79E9stVveRTLhaBbgdozCT+ipK8rBbxB/wkjjj5JXjGh+KeFQd+ciPElHDvzZkzx2n0zG/GV04/romAwXCe6ZpN5tOHZ0Jg6MGA96B06jz0BfXSBUJmFDgbfcEOW7R3AJJjgNQQKs8HklkAXCarKE5PzM/PgxUysBq+JVYdkva98bAOeq7lKUHv1IB3sUBm61kKsp0jQ5k5FNKG6jGYNRUwyqg1I8Wsar26/66IbLgqA9AN62B7y3XdaMQ+KeB54h9/SjGb11TvymTlO/+fsdI0kJHhtm7TbqAPrzXrFAa8/W+1jWTUQPBi7uqq6SLbHV9rBdGu7urq1SdP01eLszJc/c1WN2G77VMetU25toFyzGO5wDGp/TMJ8fUPNqsPT+QVZ5N58cQpMbHFbzrZhkRcy/Vt1zbjn90U/7QSyDGe5JiE+XC/xsGKlyDuGH1xkro0Qg5QqQY4JtU0ZghuD1zjHFAOYkHhRV39D0zpRpyFc/JmIpLROYlI6iePpOBk+zdgGMfTVKCfNnQu5XmOFjhAXdzrPyFwOkSKzvlddVMWNNABelMrF5etUrja8btRn+uc2mlhB5wpVhgT9pQPIE6PFGZRbPI8/vL3M3uQXdx//WrYjJm8qeXYlPAyopJQCJHM2QJmIEXhWM/aFnEY8tc0EqtKvX1EH1vHtqEa2RR9+sjjpEFvAc9iTk7Y8oH1yCuxhq8mSbzMOTpVCT4hq/BNwhCwNKhAx8Kt7hZHQWWW6Z74B08MJxK1BqSU0DZL6lIAFzsNryf8jLIIlOfY28TnNMTxHk73EegxEljXI626Pdy91T80QqCWzwTeKNrrCZenDdE1QsCR/jmD8f1Sf7EedSgOdj/bAK1nGyelAeZhhab4y6Z5tn7QCofg2K1kdbAlDzH0PKOn9EB/DxxCzZJOSw8kI21/FcE513oqqqrs4hMpPpI4/HTkd00atEjouCaPN0bCI5IGdlt/Oltqr/4+Gd7/Bw==</diagram></mxfile>

================================================
FILE: docs/design/setMTU.md
================================================
# Set custom MTU parameter

## Goals
  - Allow specifying MTU value for networks used by container jobs (useful for docker-in-docker scenarios in k8s cluster).
 
## Configuration

You need to set the environment variable AGENT_MTU_VALUE to set the MTU value, after that restart the self-hosted agent. You can find more about agent restart [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops#how-do-i-restart-the-agent) and about setting different environment variables for each individual agent [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops#how-do-i-set-different-environment-variables-for-each-individual-agent).

This allows you to set up a network parameter for the job container, the use of this command is similar to the use of the next command while container network configuration:

```-o com.docker.network.driver.mtu=AGENT_MTU_VALUE```


================================================
FILE: docs/git.md
================================================
# Git

VSTS and TFS require git >= 2.9.  For windows, the agent bundles portable git.  For OSX and Linux, it is a pre-requisite.

## OSX

If you use git, git >= 2.9.0 is a pre-requisite for OSX agents.

We recommend using [home brew](http://brew.sh) to install

```bash
$ brew update
$ brew install git
==> Downloading https://homebrew.bintray.com/bottles/git-2.9.0.el_capitan.bottle.tar.gz
...
(restart terminal)
$ git --version
git version 2.9.0
$ which git
/usr/local/bin/git
$ ls -la /usr/local/bin/git
... /usr/local/bin/git -> ../Cellar/git/2.9.0/bin/git
```

## Ubuntu

If you use git, git >= 2.9.0 is a pre-requisite for Ubuntu agents.

[Install Latest Git on Ubuntu](http://askubuntu.com/questions/568591/how-do-i-install-the-latest-version-of-git-with-apt/568596)

```bash
$ sudo apt-add-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git
```

## Redhat and CentOS

If you use git, git >= 2.9.0 is a pre-requisite for Redhat/CentOS agents.

[Based on Install Latest Git on Redhat/Centos](http://tecadmin.net/install-git-2-x-on-centos-rhel-and-fedora/#)

```bash
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ yum install gcc perl-ExtUtils-MakeMaker

$ cd /usr/src
$ wget https://www.kernel.org/pub/software/scm/git/git-2.9.2.tar.gz
$ tar xzf git-2.9.2.tar.gz

$ cd git-2.9.2
$ make prefix=/usr/local/git all
$ make prefix=/usr/local/git install
```

In /etc/bashrc
```bash
export PATH=$PATH:/usr/local/git/bin
```


================================================
FILE: docs/jobdirectories.md
================================================

# Job directories

## Overview

## Work Folder Layout

The agent keeps working files and folders in a directory named _work under the agent by default but can be configured for another location.

This is available to scripts and tasks as:

```
Variable: Agent.WorkFolder
EnvVar:   AGENT_WORKFOLDER
```

*IMPORTANT*: Variables should always be used to locate a specific directory.  Do not hard code assumptions about the layout as it may change.

## Build

Build maintains source files from the source control systems for building.

Example layout:

```
_work
│
├───1
│   ├───a
│   ├───b
│   ├───s
│   └───TestResults
├───2
│   ├───a
│   ├───b
│   ├───s
│   └───TestResults
└───SourceRootMapping
    │   Mappings.json
    ├───7ca83873-9ab2-43be-86ac-bfb844bf5232
    │   ├───11
    │   │       SourceFolder.json
    │   └───7
    │           SourceFolder.json
    └───GC
```

Each repository is an in incrementing int folder.

### _work/\<#\>

Each definition gets it's own build directory. The build directory is the number directory above the sources and artifacts.  This is typically used if you want to create folders and work outside of the repo sources to avoid local uncommitted changes.

```
Variable: Agent.BuildDirectory
EnvVar:   AGENT_BUILDDIRECTORY
```

Under that folder is ...

### s: source folder

The source repository is downloaded to this folder. This is the root of the repository.

```
Variable: Build.SourcesDirectory
EnvVar:   BUILD_SOURCESDIRECTORY
```

### b: binaries

The binaries folder is useful as an output folder for building outside of the source repo folders.

```
Variable: build.binariesdirectory
EnvVar:   BUILD_BINARIESDIRECTORY
```

### a: artifacts

Copying files to this directory

```
Variable: Build.ArtifactStagingDirectory
EnvVar:   BUILD_ARTIFACTSTAGINGDIRECTORY
```

### TestResults

```
Variable: Common.TestResultsDirectory
EnvVar:   COMMON_TESTRESULTSDIRECTORY
```

## Source Mappings

Location of sources is maintained in the SourceRootMapping folder directly under the root folder.  These files are used by the agent to define the variables that tasks and build scripts use.

*IMPORTANT*: Do not directly access these files or manipulate them.  Use variables.

SourceRootMapping layout:

```
└───SourceRootMapping
    │   Mappings.json
    ├───7ca83873-9ab2-43be-86ac-bfb844bf5232
    │   ├───11
    │   │       SourceFolder.json
    │   └───7
    │           SourceFolder.json
    └───GC
```

### Mappings.json

This maintains an incrementing counter for source folder creation.  This is incremented when a new repository is encountered.

```
{
  "lastBuildFolderCreatedOn": "09/15/2015 00:44:53 -04:00",
  "lastBuildFolderNumber": 4
}
```

### SourceFolder.json

Detailed information about each build working folder is kept in a SourcesFolder.json file.  It is stored under the collectionId (guid) and definitionId (int) folder.

Locations are stored as relative paths relative to the root of the working folder.  This allows for (1) moving of a working folder without rewriting and (2) changing the layout scheme without forcing sources to get pulled unnecessarily.

```
{
  "build_artifactstagingdirectory": "4\\a",
  "agent_builddirectory": "4",
  "collectionName": "DefaultCollection",
  "definitionName": "M87_PrintEnvVars",
  "fileFormatVersion": 2,
  "lastRunOn": "09/15/2015 00:44:53 -04:00",
  "build_sourcesdirectory": "4\\s",
  "common_testresultsdirectory": "4\\TestResults",
  "collectionId": "7ca83873-9ab2-43be-86ac-bfb844bf5232",
  "definitionId": "7",
  "hashKey": "88255a024f3b92da0b6939a240b3b1c3e65e30c7",
  "repositoryUrl": "http://sample.visual
Download .txt
gitextract_26hybwmd/

├── .CodeQL.yml
├── .azure-pipelines/
│   ├── build-job.yml
│   ├── build-jobs.yml
│   ├── get-pat.yml
│   ├── package-vcredist.yml
│   ├── pipeline.yml
│   ├── scripts/
│   │   ├── Get-SigntoolPath.ps1
│   │   ├── RemoveSignatureForThirdPartyAssemlies.ps1
│   │   ├── RemoveSignatureScript.ps1
│   │   ├── run-and-verify.js
│   │   ├── switch-branch.ps1
│   │   └── switch-branch.sh
│   └── signing.yml
├── .editorconfig
├── .gdn/
│   └── .gdnbaselines
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.yml
│   │   ├── config.yml
│   │   ├── feature.yml
│   │   └── question.yml
│   ├── ISSUE_TEMPLATE.md
│   ├── copilot-instructions.md
│   ├── labelChecker/
│   │   ├── .npmrc
│   │   ├── index.js
│   │   └── package.json
│   ├── pull_request_template.md
│   └── workflows/
│       ├── autoAssignABTT.yml
│       ├── labelChecker.yml
│       ├── localization-automerge.yml
│       └── stale.yml
├── .gitignore
├── .vsts.ci.yml
├── .vsts.release.yml
├── LICENSE
├── README.md
├── SECURITY.md
├── assets.json
├── azure-pipelines-agent.sln
├── docs/
│   ├── contribute.md
│   ├── design/
│   │   ├── auth.md
│   │   ├── byos.md
│   │   ├── clientcert.md
│   │   ├── coreclr.md
│   │   ├── jobcancellation.md
│   │   ├── logprocessors.md
│   │   ├── non-glibc-containers.md
│   │   ├── percentEncoding.md
│   │   ├── proxy.md
│   │   ├── res/
│   │   │   └── AgentLogProcessors.xml
│   │   └── setMTU.md
│   ├── git.md
│   ├── jobdirectories.md
│   ├── layers.md
│   ├── node6.md
│   ├── noderunner.md
│   ├── preview/
│   │   ├── consumeoutputvariable.md
│   │   ├── latebreaking.md
│   │   ├── logdecorations.md
│   │   ├── outdated/
│   │   │   ├── conditions.md
│   │   │   ├── pipeline.md
│   │   │   ├── resources.md
│   │   │   ├── yaml/
│   │   │   │   ├── dot-net-core-template.yaml
│   │   │   │   ├── dot-net-core.yaml
│   │   │   │   ├── vsbuild-template.yaml
│   │   │   │   └── vsbuild.yaml
│   │   │   ├── yamldeserialization.md
│   │   │   └── yamlscripts.md
│   │   ├── outputvariable.md
│   │   ├── runtaskindocker.md
│   │   ├── yaml-authz-troubleshooting.md
│   │   └── yamlgettingstarted.md
│   ├── start/
│   │   ├── configonprem.md
│   │   ├── configvsts.md
│   │   ├── envlinux.md
│   │   ├── envosx.md
│   │   ├── envredhat.md
│   │   ├── envubuntu.md
│   │   ├── envwin.md
│   │   ├── moreconfig.md
│   │   ├── nixsvc.md
│   │   ├── proxyconfig.md
│   │   ├── resourceconfig.md
│   │   ├── roles.md
│   │   ├── svcosx.md
│   │   └── svcsystemd.md
│   ├── threat-model/
│   │   ├── AgentsTasks-ThreatModel.tm7
│   │   └── README.md
│   └── troubleshooting.md
├── images/
│   └── readme.md
├── open-pullrequest.ps1
├── release/
│   ├── Send-PRsNotification.ps1
│   ├── createAdoPrs.js
│   ├── createReleaseBranch.js
│   ├── fillReleaseNotesTemplate.js
│   ├── package.json
│   ├── rollrelease.js
│   └── util.js
├── releaseNote.md
├── send-notifications.ps1
├── src/
│   ├── .helpers.sh
│   ├── Agent.Listener/
│   │   ├── Agent.Listener.csproj
│   │   ├── Agent.cs
│   │   ├── CommandLine/
│   │   │   ├── BaseCommand.cs
│   │   │   ├── ConfigureAgent.cs
│   │   │   ├── ConfigureOrRemoveBase.cs
│   │   │   ├── ReAuthAgent.cs
│   │   │   ├── RemoveAgent.cs
│   │   │   ├── RunAgent.cs
│   │   │   └── WarmupAgent.cs
│   │   ├── CommandSettings.cs
│   │   ├── Configuration/
│   │   │   ├── ConfigurationManager.cs
│   │   │   ├── ConfigurationProvider.cs
│   │   │   ├── CredentialManager.cs
│   │   │   ├── CredentialProvider.cs
│   │   │   ├── FeatureFlagProvider.cs
│   │   │   ├── IRSAKeyManager.cs
│   │   │   ├── IntegratedCredential.cs
│   │   │   ├── NegotiateCredential.cs
│   │   │   ├── OAuthCredential.cs
│   │   │   ├── PromptManager.cs
│   │   │   ├── RSAFileKeyManager.cs
│   │   │   ├── ServiceControlManager.cs
│   │   │   └── Validators.cs
│   │   ├── Configuration.Linux/
│   │   │   └── SystemdControlManager.cs
│   │   ├── Configuration.Windows/
│   │   │   ├── AutoLogonManager.cs
│   │   │   ├── AutoLogonRegistryManager.cs
│   │   │   ├── NativeWindowsServiceHelper.cs
│   │   │   ├── RSAEncryptedFileKeyManager.cs
│   │   │   ├── WindowsRegistryManager.cs
│   │   │   └── WindowsServiceControlManager.cs
│   │   ├── Configuration.macOS/
│   │   │   └── MacOSServiceControlManager.cs
│   │   ├── Diagnostics/
│   │   │   ├── DiagnosticSuite.cs
│   │   │   ├── DiagnosticsTests.cs
│   │   │   ├── DiskInfo.cs
│   │   │   ├── DnsTest.cs
│   │   │   ├── FolderPermissionInfo.cs
│   │   │   ├── IDiagnosticInfo.cs
│   │   │   ├── IDiagnosticTest.cs
│   │   │   ├── MtuInfo.cs
│   │   │   └── PingTest.cs
│   │   ├── DistributedTask.Pipelines/
│   │   │   ├── TaskResources.g.cs
│   │   │   ├── Update-FromVso.ps1
│   │   │   └── Yaml/
│   │   │       ├── Contracts/
│   │   │       │   ├── CheckoutStep.cs
│   │   │       │   ├── DeploymentTarget.cs
│   │   │       │   ├── IPhase.cs
│   │   │       │   ├── IPhaseTarget.cs
│   │   │       │   ├── ISimpleStep.cs
│   │   │       │   ├── IStep.cs
│   │   │       │   ├── IVariable.cs
│   │   │       │   ├── Phase.cs
│   │   │       │   ├── PhaseSelector.cs
│   │   │       │   ├── PhasesTemplate.cs
│   │   │       │   ├── PhasesTemplateReference.cs
│   │   │       │   ├── Process.cs
│   │   │       │   ├── ProcessResource.cs
│   │   │       │   ├── ProcessTemplate.cs
│   │   │       │   ├── ProcessTemplateReference.cs
│   │   │       │   ├── QueueTarget.cs
│   │   │       │   ├── ServerTarget.cs
│   │   │       │   ├── StepGroup.cs
│   │   │       │   ├── StepsTemplate.cs
│   │   │       │   ├── StepsTemplateReference.cs
│   │   │       │   ├── TaskReference.cs
│   │   │       │   ├── TaskStep.cs
│   │   │       │   ├── Variable.cs
│   │   │       │   ├── VariablesTemplate.cs
│   │   │       │   └── VariablesTemplateReference.cs
│   │   │       ├── FileData.cs
│   │   │       ├── IFileProvider.cs
│   │   │       ├── ITraceWriter.cs
│   │   │       ├── ParseOptions.cs
│   │   │       ├── PipelineParser.cs
│   │   │       └── TypeConverters/
│   │   │           ├── ConverterUtil.general.cs
│   │   │           ├── ConverterUtil.phases.cs
│   │   │           ├── ConverterUtil.processes.cs
│   │   │           ├── ConverterUtil.steps.cs
│   │   │           ├── ConverterUtil.variables.cs
│   │   │           ├── PhasesTemplateConverter.cs
│   │   │           ├── ProcessConverter.cs
│   │   │           ├── ProcessTemplateConverter.cs
│   │   │           ├── StepsTemplateConverter.cs
│   │   │           ├── VariablesTemplateConverter.cs
│   │   │           └── YamlConstants.cs
│   │   ├── JobDispatcher.cs
│   │   ├── MessageListener.cs
│   │   ├── NuGet.Config
│   │   ├── Program.cs
│   │   ├── SelfUpdater.cs
│   │   ├── Telemetry/
│   │   │   ├── CustomerIntelligenceServer.cs
│   │   │   ├── TelemetryPublisher.cs
│   │   │   └── WorkerCrashTelemetryPublisher.cs
│   │   ├── ValidationHelper/
│   │   │   ├── InstallerVerifier.cs
│   │   │   ├── UnsafeNativeMethods.cs
│   │   │   ├── Utility.cs
│   │   │   └── VerificationException.cs
│   │   ├── net10.json
│   │   ├── net6.json
│   │   └── net8.json
│   ├── Agent.PluginHost/
│   │   ├── Agent.PluginHost.csproj
│   │   └── Program.cs
│   ├── Agent.Plugins/
│   │   ├── Agent.Plugins.csproj
│   │   ├── Artifact/
│   │   │   ├── ArtifactDownloadParameters.cs
│   │   │   ├── ArtifactItemFilters.cs
│   │   │   ├── ArtifactProviderFactory.cs
│   │   │   ├── BuildServer.cs
│   │   │   ├── FileContainerProvider.cs
│   │   │   ├── FileShareProvider.cs
│   │   │   ├── IArtifactProvider.cs
│   │   │   ├── PipelineArtifactConstants.cs
│   │   │   ├── PipelineArtifactProvider.cs
│   │   │   └── PipelineArtifactServer.cs
│   │   ├── ArtifactsTracer.cs
│   │   ├── BuildArtifact/
│   │   │   ├── BuildArtifactPluginConstants.cs
│   │   │   └── BuildArtifactPluginV1.cs
│   │   ├── GitCliManager.cs
│   │   ├── GitSourceProvider.cs
│   │   ├── ITfsVCCliManager.cs
│   │   ├── PipelineArtifact/
│   │   │   ├── FilePathServer.cs
│   │   │   ├── PipelineArtifactPlugin.cs
│   │   │   ├── PipelineArtifactPluginConstants.cs
│   │   │   ├── PipelineArtifactPluginUtil.cs
│   │   │   ├── PipelineArtifactPluginV1.cs
│   │   │   ├── PipelineArtifactPluginV2.cs
│   │   │   └── Telemetry/
│   │   │       ├── FileShareActionRecord.cs
│   │   │       └── PipelineArtifactActionRecord.cs
│   │   ├── PipelineCache/
│   │   │   ├── FingerprintCreator.cs
│   │   │   ├── PipelineCachePluginConstants.cs
│   │   │   ├── PipelineCacheServer.cs
│   │   │   ├── PipelineCacheTaskPluginBase.cs
│   │   │   ├── RestorePipelineCacheV0.cs
│   │   │   ├── SavePipelineCacheV0.cs
│   │   │   ├── TarUtils.cs
│   │   │   └── Telemetry/
│   │   │       └── PipelineCacheActionRecord.cs
│   │   ├── RepositoryPlugin.cs
│   │   ├── SvnCliManager.cs
│   │   ├── SvnSourceProvider.cs
│   │   ├── TFCliManager.cs
│   │   ├── TeeCliManager.cs
│   │   ├── TestFilePublisher/
│   │   │   ├── ClientFactory.cs
│   │   │   ├── Finder/
│   │   │   │   ├── ITestFileFinder.cs
│   │   │   │   └── TestFileFinder.cs
│   │   │   ├── PipelineConfig.cs
│   │   │   ├── Plugin/
│   │   │   │   └── TestFilePublisherLogPlugin.cs
│   │   │   ├── SimpleTimer.cs
│   │   │   ├── Telemetry/
│   │   │   │   ├── TelemetryConstants.cs
│   │   │   │   ├── TelemetryDataCollector.cs
│   │   │   │   └── TelemetryDataWrapper.cs
│   │   │   ├── TestFilePublisher.cs
│   │   │   ├── TestRunContextBuilder.cs
│   │   │   ├── TraceListener.cs
│   │   │   └── TraceLogger.cs
│   │   ├── TestResultParser/
│   │   │   ├── Bus/
│   │   │   │   └── IBus.cs
│   │   │   ├── ClientFactory.cs
│   │   │   ├── Gateway/
│   │   │   │   ├── ILogParserGateway.cs
│   │   │   │   ├── ILogPreProcessor.cs
│   │   │   │   ├── LogParserGateway.cs
│   │   │   │   └── LogPreProcessor.cs
│   │   │   ├── IEnumerableExtension.cs
│   │   │   ├── ParserFactory.cs
│   │   │   ├── PipelineConfig.cs
│   │   │   ├── PipelineTestRun.cs
│   │   │   ├── PipelineTestRunPublisher.cs
│   │   │   ├── Plugin/
│   │   │   │   └── TestResultLogPlugin.cs
│   │   │   ├── SimpleTimer.cs
│   │   │   ├── Telemetry/
│   │   │   │   ├── TelemetryConstants.cs
│   │   │   │   ├── TelemetryDataCollector.cs
│   │   │   │   └── TelemetryDataWrapper.cs
│   │   │   ├── TestRunManager.cs
│   │   │   └── TraceLogger.cs
│   │   ├── TfsVCCliManager.cs
│   │   └── TfsVCSourceProvider.cs
│   ├── Agent.Sdk/
│   │   ├── Agent.Sdk.csproj
│   │   ├── AgentClientCertificateManager.cs
│   │   ├── AgentWebProxy.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── CommandPlugin.cs
│   │   ├── CommandStringConvertor.cs
│   │   ├── ContainerInfo.cs
│   │   ├── DockerVersion.cs
│   │   ├── ExecutionTargetInfo.cs
│   │   ├── ITraceWriter.cs
│   │   ├── Knob/
│   │   │   ├── AgentKnobs.cs
│   │   │   ├── BuiltInDefaultKnobSource.cs
│   │   │   ├── CompositeKnobSource.cs
│   │   │   ├── EnvironmentKnobSource.cs
│   │   │   ├── ICompositeKnobSource.cs
│   │   │   ├── IEnvironmentKnobSource.cs
│   │   │   ├── IKnobSource.cs
│   │   │   ├── IKnobValueContext.cs
│   │   │   ├── Knob.cs
│   │   │   ├── KnobValue.cs
│   │   │   ├── PipelineFeatureSource.cs
│   │   │   └── RuntimeKnobSource.cs
│   │   ├── LogPlugin.cs
│   │   ├── MountVolume.cs
│   │   ├── PortMapping.cs
│   │   ├── ProcessInvoker.MacLinux.cs
│   │   ├── ProcessInvoker.Windows.cs
│   │   ├── ProcessInvoker.cs
│   │   ├── ScopedEnvironment.cs
│   │   ├── SecretMasking/
│   │   │   ├── ILoggedSecretMasker.cs
│   │   │   ├── IRawSecretMasker.cs
│   │   │   ├── LegacySecretMasker.cs
│   │   │   ├── LoggedSecretMasker.cs
│   │   │   └── OssSecretMasker.cs
│   │   ├── TaskPlugin.cs
│   │   └── Util/
│   │       ├── ArgUtil/
│   │       │   ├── ArgUtil.cs
│   │       │   ├── ArgUtilInstanced.cs
│   │       │   └── IArgUtilInstanced.cs
│   │       ├── AzureInstanceMetadataProvider.cs
│   │       ├── BlobStoreWarningInfoProvider.cs
│   │       ├── CertificateUtil.cs
│   │       ├── ExceptionsUtil.cs
│   │       ├── IOUtil.cs
│   │       ├── MaskingUtil.cs
│   │       ├── NetFrameworkUtil.cs
│   │       ├── NullTraceWriter.cs
│   │       ├── PathUtil.cs
│   │       ├── PlatformUtil.cs
│   │       ├── PsModulePathUtil.cs
│   │       ├── RepositoryUtil.cs
│   │       ├── SslUtil.cs
│   │       ├── StringUtil.cs
│   │       ├── TeeUtil.cs
│   │       ├── UrlUtil.cs
│   │       ├── UtilKnobValueContext.cs
│   │       ├── VssUtil.cs
│   │       ├── WellKnownSecretAliases.cs
│   │       ├── WhichUtil.cs
│   │       └── WindowsProcessUtil.cs
│   ├── Agent.Service/
│   │   └── Windows/
│   │       ├── AgentService.Designer.cs
│   │       ├── AgentService.cs
│   │       ├── AgentService.csproj
│   │       ├── App.config
│   │       ├── FinalPublicKey.snk
│   │       ├── Program.cs
│   │       ├── Properties/
│   │       │   └── AssemblyInfo.cs
│   │       ├── Resource.Designer.cs
│   │       ├── Resource.de-de.resx
│   │       ├── Resource.es-es.resx
│   │       ├── Resource.fr-fr.resx
│   │       ├── Resource.it-IT.resx
│   │       ├── Resource.ja-jp.resx
│   │       ├── Resource.ko-KR.resx
│   │       ├── Resource.resx
│   │       ├── Resource.ru-RU.resx
│   │       ├── Resource.zh-CN.resx
│   │       └── Resource.zh-TW.resx
│   ├── Agent.Worker/
│   │   ├── Agent.Worker.csproj
│   │   ├── AgentLogPlugin.cs
│   │   ├── AgentPluginManager.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── AsyncCommandContext.cs
│   │   ├── Build/
│   │   │   ├── ArtifactCommandExtension.cs
│   │   │   ├── BuildCommandExtension.cs
│   │   │   ├── BuildDirectoryManager.cs
│   │   │   ├── BuildJobExtension.cs
│   │   │   ├── BuildServer.cs
│   │   │   ├── Enums.cs
│   │   │   ├── FileContainerServer.cs
│   │   │   ├── GitCommandManager.cs
│   │   │   ├── GitSourceProvider.cs
│   │   │   ├── LegacyTrackingConfig.cs
│   │   │   ├── SourceProvider.cs
│   │   │   ├── SvnCommandManager.cs
│   │   │   ├── SvnSourceProvider.cs
│   │   │   ├── TFCommandManager.cs
│   │   │   ├── TeeCommandManager.cs
│   │   │   ├── TfsVCCommandManager.cs
│   │   │   ├── TfsVCSourceProvider.cs
│   │   │   ├── TopLevelTrackingConfig.cs
│   │   │   ├── TrackingConfig.cs
│   │   │   ├── TrackingConfigBase.cs
│   │   │   ├── TrackingConfigHashAlgorithm.cs
│   │   │   ├── TrackingManager.cs
│   │   │   ├── UploadResult.cs
│   │   │   └── WorkspaceMaintenanceProvider.cs
│   │   ├── CodeCoverage/
│   │   │   ├── CoberturaSummaryReader.cs
│   │   │   ├── CodeCoverageCommands.cs
│   │   │   ├── CodeCoverageConstants.cs
│   │   │   ├── CodeCoveragePublisher.cs
│   │   │   ├── CodeCoverageServer.cs
│   │   │   ├── CodeCoverageUtilities.cs
│   │   │   ├── FeatureFlagUtility.cs
│   │   │   ├── ICodeCoverageSummaryReader.cs
│   │   │   └── JaCoCoSummaryReader.cs
│   │   ├── Container/
│   │   │   ├── ContainerDiagnosticsManager.cs
│   │   │   ├── DockerCommandManager.cs
│   │   │   └── DockerUtil.cs
│   │   ├── ContainerOperationProvider.cs
│   │   ├── ContainerOperationProviderEnhanced.cs
│   │   ├── DiagnosticLogManager.cs
│   │   ├── ExecutionContext.cs
│   │   ├── ExpressionManager.cs
│   │   ├── GitManager.cs
│   │   ├── Handlers/
│   │   │   ├── AgentPluginHandler.cs
│   │   │   ├── Handler.cs
│   │   │   ├── HandlerFactory.cs
│   │   │   ├── LegacyPowerShellHandler.cs
│   │   │   ├── NodeHandler.cs
│   │   │   ├── PowerShell3Handler.cs
│   │   │   ├── PowerShellExeHandler.cs
│   │   │   ├── ProcessHandler/
│   │   │   │   ├── CmdArgsSanitizer.cs
│   │   │   │   ├── Exceptions.cs
│   │   │   │   ├── ProcessHandler.cs
│   │   │   │   ├── ProcessHandlerHelper.cs
│   │   │   │   └── ProcessHandlerV2.cs
│   │   │   └── StepHost.cs
│   │   ├── JobExtension.cs
│   │   ├── JobExtensionRunner.cs
│   │   ├── JobRunner.cs
│   │   ├── Maintenance/
│   │   │   └── MaintenanceJobExtension.cs
│   │   ├── ManagementScriptStep.cs
│   │   ├── NodeJsUtil.cs
│   │   ├── NodeVersionStrategies/
│   │   │   ├── CustomNodeStrategy.cs
│   │   │   ├── GlibcCompatibilityInfo.cs
│   │   │   ├── GlibcCompatibilityInfoProvider.cs
│   │   │   ├── IGlibcCompatibilityInfoProvider.cs
│   │   │   ├── INodeVersionStrategy.cs
│   │   │   ├── Node10Strategy.cs
│   │   │   ├── Node16Strategy.cs
│   │   │   ├── Node20Strategy.cs
│   │   │   ├── Node24Strategy.cs
│   │   │   ├── Node6Strategy.cs
│   │   │   ├── NodeContainerTestHelper.cs
│   │   │   ├── NodeRunnerInfo.cs
│   │   │   ├── NodeVersionOrchestrator.cs
│   │   │   └── TaskContext.cs
│   │   ├── NuGet.Config
│   │   ├── PluginInternalCommandExtension.cs
│   │   ├── Program.cs
│   │   ├── Release/
│   │   │   ├── AgentUtilities.cs
│   │   │   ├── Artifacts/
│   │   │   │   ├── ArtifactDirectoryCreationFailedException.cs
│   │   │   │   ├── ArtifactDownloadException.cs
│   │   │   │   ├── BuildArtifact.cs
│   │   │   │   ├── CommitsDownloadException.cs
│   │   │   │   ├── CustomArtifact.cs
│   │   │   │   ├── Definition/
│   │   │   │   │   ├── ArtifactDefinition.cs
│   │   │   │   │   ├── BuildArtifactDetails.cs
│   │   │   │   │   ├── CustomArtifactDetails.cs
│   │   │   │   │   ├── CustomArtifactDownloadDetails.cs
│   │   │   │   │   ├── CustomArtifactVersionDetails.cs
│   │   │   │   │   ├── GitHubArtifactDetails.cs
│   │   │   │   │   ├── IArtifactDetails.cs
│   │   │   │   │   ├── JenkinsArtifactDetails.cs
│   │   │   │   │   ├── TfsGitArtifactDetails.cs
│   │   │   │   │   ├── TfsVCArtifactDetails.cs
│   │   │   │   │   └── WellKnownStreamTypes.cs
│   │   │   │   ├── FileShareArtifact.cs
│   │   │   │   ├── GenericHttpClient.cs
│   │   │   │   ├── GitHubArtifact.cs
│   │   │   │   ├── GitHubHttpClient.cs
│   │   │   │   ├── JenkinsArtifact.cs
│   │   │   │   ├── TfsGitArtifact.cs
│   │   │   │   └── TfsVCArtifact.cs
│   │   │   ├── ContainerFetchEngine/
│   │   │   │   ├── ContainerFetchEngine.cs
│   │   │   │   ├── ContainerFetchEngineDefaultOptions.cs
│   │   │   │   ├── ContainerFetchEngineOptions.cs
│   │   │   │   ├── ContainerItem.cs
│   │   │   │   ├── FetchEngine.cs
│   │   │   │   ├── HttpRetryOnTimeoutHandler.cs
│   │   │   │   ├── HttpRetryOnTimeoutOptions.cs
│   │   │   │   ├── IConatinerFetchEngineLogger.cs
│   │   │   │   ├── IContainerProvider.cs
│   │   │   │   ├── ItemType.cs
│   │   │   │   └── NullExecutionLogger.cs
│   │   │   ├── ContainerProvider/
│   │   │   │   ├── FileContainerProvider.cs
│   │   │   │   └── Helpers/
│   │   │   │       ├── AsyncLazy.cs
│   │   │   │       ├── ContainerProviderFactory.cs
│   │   │   │       ├── ExecutionLogger.cs
│   │   │   │       └── VssConnectionFactory.cs
│   │   │   ├── DeploymentJobExtension.cs
│   │   │   ├── IArtifactExtension.cs
│   │   │   ├── IReleaseDirectoryManager.cs
│   │   │   ├── ReleaseCommandExtension.cs
│   │   │   ├── ReleaseDirectoryManager.cs
│   │   │   ├── ReleaseFileSystemManager.cs
│   │   │   ├── ReleaseJobExtension.cs
│   │   │   ├── ReleaseServer.cs
│   │   │   ├── ReleaseTrackingConfig.cs
│   │   │   ├── ReleaseTrackingManager.cs
│   │   │   ├── RetryExecutor.cs
│   │   │   └── ZipStreamDownloader.cs
│   │   ├── ResourceMetricsManager.cs
│   │   ├── RetryHelper.cs
│   │   ├── SignatureService.cs
│   │   ├── SimpleTimer.cs
│   │   ├── StepsRunner.cs
│   │   ├── TaskCommandExtension.cs
│   │   ├── TaskDecoratorManager.cs
│   │   ├── TaskManager.cs
│   │   ├── TaskRestrictionsChecker.cs
│   │   ├── TaskRestrictionsExtension.cs
│   │   ├── TaskRunner.cs
│   │   ├── Telemetry/
│   │   │   ├── CustomerIntelligenceServer.cs
│   │   │   └── TelemetryCommandExtension.cs
│   │   ├── TempDirectoryManager.cs
│   │   ├── TfManager.cs
│   │   ├── Variables.cs
│   │   ├── VsoTaskLibManager.cs
│   │   ├── Worker.cs
│   │   ├── WorkerCommandManager.cs
│   │   └── WorkerUtilties.cs
│   ├── Common.props
│   ├── Microsoft.VisualStudio.Services.Agent/
│   │   ├── AdditionalMaskingRegexes.cs
│   │   ├── AgentCertificateManager.cs
│   │   ├── AgentCredentialStore/
│   │   │   ├── LinuxAgentCredentialStore.cs
│   │   │   ├── MacOSAgentCredentialStore.cs
│   │   │   ├── NoOpAgentCredentialStore.cs
│   │   │   └── WindowsAgentCredentialStore.cs
│   │   ├── AgentServer.cs
│   │   ├── AgentService.cs
│   │   ├── AssemblyInfo.cs
│   │   ├── AsyncManualResetEvent.cs
│   │   ├── Blob/
│   │   │   ├── BlobFileInfo.cs
│   │   │   ├── BlobStoreClientTelemetryTfs.cs
│   │   │   ├── BlobStoreUtils.cs
│   │   │   ├── BlobstoreClientSettings.cs
│   │   │   ├── BuildArtifactActionRecord.cs
│   │   │   ├── CustomerIntelligenceTelemetrySender.cs
│   │   │   ├── DedupManifestArtifactClientFactory.cs
│   │   │   ├── IDedupRecord.cs
│   │   │   ├── PipelineTelemetryRecord.cs
│   │   │   └── TimelineRecordAttachmentTelemetryRecord.cs
│   │   ├── Capabilities/
│   │   │   ├── AgentCapabilitiesProvider.cs
│   │   │   ├── CapabilitiesManager.cs
│   │   │   ├── EnvironmentCapabilitiesProvider.cs
│   │   │   ├── NixCapabilitiesProvider.cs
│   │   │   ├── PowerShellCapabilitiesProvider.cs
│   │   │   └── UserCapabilitiesProvider.cs
│   │   ├── Command.cs
│   │   ├── ConfigurationStore.cs
│   │   ├── Constants.cs
│   │   ├── CorrelationContextManager.cs
│   │   ├── CredentialData.cs
│   │   ├── DeploymentGroupServer.cs
│   │   ├── EnhancedTracing.cs
│   │   ├── EnvironmentsServer.cs
│   │   ├── Exceptions.cs
│   │   ├── ExtensionManager.cs
│   │   ├── Extensions.cs
│   │   ├── HostContext.cs
│   │   ├── HostTraceListener.cs
│   │   ├── IAgentCredentialStore.cs
│   │   ├── IExtension.cs
│   │   ├── ITracingProxy.cs
│   │   ├── JobNotification.cs
│   │   ├── JobServer.cs
│   │   ├── JobServerQueue.cs
│   │   ├── LocationServer.cs
│   │   ├── Logging.cs
│   │   ├── Microsoft.VisualStudio.Services.Agent.csproj
│   │   ├── NuGet.Config
│   │   ├── ProcessChannel.cs
│   │   ├── ProcessExtensions.cs
│   │   ├── ProcessInvoker.cs
│   │   ├── StreamString.cs
│   │   ├── TaskServer.cs
│   │   ├── Terminal.cs
│   │   ├── ThrottlingReportHandler.cs
│   │   ├── TraceManager.cs
│   │   ├── TraceSetting.cs
│   │   ├── Tracing.cs
│   │   ├── TracingProxy.cs
│   │   ├── Util/
│   │   │   ├── EnumUtil.cs
│   │   │   ├── PlanUtil.cs
│   │   │   ├── PowerShellExeUtil.cs
│   │   │   ├── ServerUtil.cs
│   │   │   ├── TaskResultUtil.cs
│   │   │   ├── UnixUtil.cs
│   │   │   └── VarUtil.cs
│   │   ├── VstsAgentWebProxy.cs
│   │   └── WindowsEnvVarHelper.cs
│   ├── Misc/
│   │   ├── BuildConstants.ch
│   │   ├── InstallAgentPackage.template.xml
│   │   ├── Publish.template.ps1
│   │   ├── UpdateAgentPackage.template.xml
│   │   ├── check-symlinks.sh
│   │   ├── externals.sh
│   │   ├── layoutbin/
│   │   │   ├── AgentService.js
│   │   │   ├── containerHandlerInvoker.js.template
│   │   │   ├── darwin.svc.sh.template
│   │   │   ├── de-DE/
│   │   │   │   └── strings.json
│   │   │   ├── en-US/
│   │   │   │   └── strings.json
│   │   │   ├── es-ES/
│   │   │   │   └── strings.json
│   │   │   ├── fr-FR/
│   │   │   │   └── strings.json
│   │   │   ├── installdependencies.sh
│   │   │   ├── it-IT/
│   │   │   │   └── strings.json
│   │   │   ├── ja-JP/
│   │   │   │   └── strings.json
│   │   │   ├── ko-KR/
│   │   │   │   └── strings.json
│   │   │   ├── powershell/
│   │   │   │   ├── Add-AndroidSdkCapabilities.ps1
│   │   │   │   ├── Add-AntCapabilities.ps1
│   │   │   │   ├── Add-ApplicationCapabilities.ps1
│   │   │   │   ├── Add-AzureGuestAgentCapabilities.ps1
│   │   │   │   ├── Add-AzurePowerShellCapabilities.ps1
│   │   │   │   ├── Add-Capabilities.ps1
│   │   │   │   ├── Add-ChefCapabilities.ps1
│   │   │   │   ├── Add-DotNetFrameworkCapabilities.ps1
│   │   │   │   ├── Add-JavaCapabilities.ps1
│   │   │   │   ├── Add-MSBuildCapabilities.ps1
│   │   │   │   ├── Add-MavenCapabilities.ps1
│   │   │   │   ├── Add-PowerShellCapabilities.ps1
│   │   │   │   ├── Add-ScvmmAdminConsoleCapabilities.ps1
│   │   │   │   ├── Add-SqlPackageCapabilities.ps1
│   │   │   │   ├── Add-VisualStudioCapabilities.ps1
│   │   │   │   ├── Add-WindowsKitCapabilities.ps1
│   │   │   │   ├── Add-WindowsSdkCapabilities.ps1
│   │   │   │   ├── Add-XamarinAndroidCapabilities.ps1
│   │   │   │   ├── CapabilityHelpers/
│   │   │   │   │   ├── CapabilityFunctions.ps1
│   │   │   │   │   ├── CapabilityHelpers.psm1
│   │   │   │   │   ├── PathFunctions.ps1
│   │   │   │   │   ├── RegistryFunctions.ps1
│   │   │   │   │   ├── VersionFunctions.ps1
│   │   │   │   │   └── VisualStudioFunctions.ps1
│   │   │   │   ├── Get-LocalGroupMembership.ps1
│   │   │   │   └── Start-AzpTask.ps1
│   │   │   ├── ru-RU/
│   │   │   │   └── strings.json
│   │   │   ├── runsvc.sh
│   │   │   ├── systemd.svc.sh.template
│   │   │   ├── tasks-exception-list.json
│   │   │   ├── update.cmd.template
│   │   │   ├── update.sh.template
│   │   │   ├── vsts.agent.plist.template
│   │   │   ├── vsts.agent.service.template
│   │   │   ├── zh-CN/
│   │   │   │   └── strings.json
│   │   │   └── zh-TW/
│   │   │       └── strings.json
│   │   ├── layoutroot/
│   │   │   ├── config.cmd
│   │   │   ├── config.sh
│   │   │   ├── env.sh
│   │   │   ├── license.html
│   │   │   ├── reauth.cmd
│   │   │   ├── reauth.sh
│   │   │   ├── run-docker.sh
│   │   │   ├── run.cmd
│   │   │   └── run.sh
│   │   └── osxsvclayout.txt
│   ├── NuGet.Config
│   ├── Test/
│   │   ├── CodeCoverage.runsettings
│   │   ├── L0/
│   │   │   ├── ConstantGenerationL0.cs
│   │   │   ├── Container/
│   │   │   │   ├── ContainerDiagnosticsManagerL0.cs
│   │   │   │   ├── ContainerInfoL0.cs
│   │   │   │   ├── DockerCommandManagerL0.cs
│   │   │   │   └── DockerUtilL0.cs
│   │   │   ├── CorrelationContextManagerL0.cs
│   │   │   ├── EnhancedTracingCorrelationL0.cs
│   │   │   ├── EnhancedTracingL0.cs
│   │   │   ├── ExtensionManagerL0.cs
│   │   │   ├── HostContextExtensionL0.cs
│   │   │   ├── HostContextL0.cs
│   │   │   ├── KnobL0.cs
│   │   │   ├── Listener/
│   │   │   │   ├── AgentL0.cs
│   │   │   │   ├── CommandSettingsL0.cs
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── AgentAutoLogonTestL0.cs
│   │   │   │   │   ├── AgentCapabilitiesProviderTestL0.cs
│   │   │   │   │   ├── AgentCredentialL0.cs
│   │   │   │   │   ├── ArgumentValidatorTestsL0.cs
│   │   │   │   │   ├── ConfigurationManagerL0.cs
│   │   │   │   │   ├── Mocks/
│   │   │   │   │   │   └── MockNativeWindowsServiceHelper.cs
│   │   │   │   │   ├── NativeWindowsServiceHelperL0.cs
│   │   │   │   │   ├── PromptManagerTestsL0.cs
│   │   │   │   │   ├── ServiceControlManagerL0.cs
│   │   │   │   │   └── UserCapabilitiesProviderTestL0.cs
│   │   │   │   ├── JobDispatcherL0.cs
│   │   │   │   ├── ListenerCorrelationIntegrationL0.cs
│   │   │   │   ├── MessageListenerL0.cs
│   │   │   │   └── PipelineParserL0.cs
│   │   │   ├── LocStringsL0.cs
│   │   │   ├── NodeHandler.GlibcTest.cs
│   │   │   ├── NodeHandlerCollections.cs
│   │   │   ├── NodeHandlerL0.AllSpecs.cs
│   │   │   ├── NodeHandlerL0.TestSpecifications.cs
│   │   │   ├── NodeHandlerL0.cs
│   │   │   ├── NodeHandlerTestBase.cs
│   │   │   ├── PagingLoggerL0.cs
│   │   │   ├── Plugin/
│   │   │   │   ├── BlobstoreClientSettingsL0.cs
│   │   │   │   ├── ChunkerTests.cs
│   │   │   │   ├── FingerprintCreatorTests.cs
│   │   │   │   ├── FingerprintTests.cs
│   │   │   │   ├── IsPathyTests.cs
│   │   │   │   ├── LogPluginHostL0.cs
│   │   │   │   ├── MatchingTests.cs
│   │   │   │   ├── RepositoryPluginL0.cs
│   │   │   │   ├── TarUtilsL0.cs
│   │   │   │   ├── TestFileContainerProvider/
│   │   │   │   │   └── TestFileContainerProviderL0.cs
│   │   │   │   ├── TestFilePublisher/
│   │   │   │   │   ├── TestFileFinderL0.cs
│   │   │   │   │   ├── TestFilePublisherL0.cs
│   │   │   │   │   └── TestFilePublisherLogPluginL0.cs
│   │   │   │   ├── TestFileShareProvider/
│   │   │   │   │   ├── MockDedupManifestArtifactClientFactory.cs
│   │   │   │   │   ├── TestFileShareProviderL0.cs
│   │   │   │   │   └── TestTelemetrySender.cs
│   │   │   │   ├── TestGitCliManager/
│   │   │   │   │   ├── MockAgentTaskPluginExecutionContext.cs
│   │   │   │   │   ├── MockGitCliManager.cs
│   │   │   │   │   └── TestGitCliManagerL0.cs
│   │   │   │   ├── TestGitSourceProvider/
│   │   │   │   │   ├── GitSourceProviderL0.cs
│   │   │   │   │   ├── MockAgentTaskPluginExecutionContext.cs
│   │   │   │   │   ├── MockGitCliManager.cs
│   │   │   │   │   └── MockGitSoureProvider.cs
│   │   │   │   └── TestResultParser/
│   │   │   │       ├── EnumerableExtensionL0.cs
│   │   │   │       ├── LogPreProcessorL0.cs
│   │   │   │       ├── PipelineTestRunPublisherL0.cs
│   │   │   │       ├── TestResultLogPluginL0.cs
│   │   │   │       └── TestRunManagerL0.cs
│   │   │   ├── ProcessExtensionL0.cs
│   │   │   ├── ProcessInvokerL0.cs
│   │   │   ├── ProxyConfigL0.cs
│   │   │   ├── SecretMaskerTests/
│   │   │   │   ├── LoggedSecretMaskerL0.cs
│   │   │   │   └── SecretMaskerL0.cs
│   │   │   ├── ServiceInterfacesL0.cs
│   │   │   ├── TestHostContext.cs
│   │   │   ├── TestUtil.cs
│   │   │   ├── TraceManagerL0.cs
│   │   │   ├── Util/
│   │   │   │   ├── ArgUtilL0.cs
│   │   │   │   ├── CertificateUtilL0.cs
│   │   │   │   ├── IOUtilL0.cs
│   │   │   │   ├── ProcessUtilL0.cs
│   │   │   │   ├── RepositoryUtilL0.cs
│   │   │   │   ├── StringUtilL0.cs
│   │   │   │   ├── TaskResultUtilL0.cs
│   │   │   │   ├── TelemetryPropsUtil.cs
│   │   │   │   ├── UrlUtilL0.cs
│   │   │   │   ├── VarUtilL0.cs
│   │   │   │   ├── VssUtilL0.cs
│   │   │   │   └── WhichUtilL0.cs
│   │   │   ├── VstsAgentWebProxyL0.cs
│   │   │   └── Worker/
│   │   │       ├── AgentPluginManagerL0.cs
│   │   │       ├── Build/
│   │   │       │   ├── BuildDirectoryManagerL0.cs
│   │   │       │   ├── BuildJobExtensionL0.cs
│   │   │       │   ├── GitCommandManagerL0.cs
│   │   │       │   ├── GitSourceProviderL0.cs
│   │   │       │   ├── TfsVCCommandManagerL0.cs
│   │   │       │   ├── TfsVCSourceProvider.WorkspaceUtilL0.cs
│   │   │       │   ├── TfsVCSourceProviderL0.cs
│   │   │       │   ├── TrackingConfigHashAlgorithmL0.cs
│   │   │       │   ├── TrackingConfigL0.cs
│   │   │       │   ├── TrackingManagerL0.cs
│   │   │       │   └── WorkspaceMaintenanceProvicerL0.cs
│   │   │       ├── CodeCoverage/
│   │   │       │   ├── CoberturaSummaryReaderTests.cs
│   │   │       │   ├── CodeCoverageCommandExtensionTests.cs
│   │   │       │   ├── CodeCoverageConstants.cs
│   │   │       │   ├── CodeCoverageUtilitiesTests.cs
│   │   │       │   ├── JacocoSummaryReaderTests.cs
│   │   │       │   ├── frame-summary.html
│   │   │       │   └── index.html
│   │   │       ├── ContainerOperationProviderEnhancedL0.cs
│   │   │       ├── ContainerOperationProviderL0.cs
│   │   │       ├── ContainerOperationProviderL0.md
│   │   │       ├── ContainerOperationProviderL0Base.cs
│   │   │       ├── ExecutionContextL0.cs
│   │   │       ├── ExpressionManagerL0.cs
│   │   │       ├── GitManagerL0.cs
│   │   │       ├── Handlers/
│   │   │       │   ├── CmdArgsSanitizerL0.cs
│   │   │       │   ├── ProcessHandlerHelperL0.cs
│   │   │       │   ├── ProcessHandlerHelperTelemetryL0.cs
│   │   │       │   └── ProcessHandlerL0.cs
│   │   │       ├── JobExtensionL0.cs
│   │   │       ├── JobRunnerL0.cs
│   │   │       ├── LoggingCommandL0.cs
│   │   │       ├── PluginInternalUpdateRepositoryPathCommandL0.cs
│   │   │       ├── Release/
│   │   │       │   ├── AgentUtlitiesL0.cs
│   │   │       │   ├── FetchEngineL0.cs
│   │   │       │   ├── GitHubArtifactL0.cs
│   │   │       │   ├── JenkinsArtifactL0.cs
│   │   │       │   ├── ReleaseDirectoryManagerL0.cs
│   │   │       │   ├── ReleaseJobExtensionL0.cs
│   │   │       │   ├── TfsGitArtifactL0.cs
│   │   │       │   └── TfsVCArtifactL0.cs
│   │   │       ├── SetVariableRestrictionsL0.cs
│   │   │       ├── StepsRunnerL0.cs
│   │   │       ├── TaskCommandExtensionL0.cs
│   │   │       ├── TaskDecoratorManagerL0.cs
│   │   │       ├── TaskManagerL0.cs
│   │   │       ├── TaskRunnerL0.cs
│   │   │       ├── Telemetry/
│   │   │       │   └── TelemetryCommandExtensionTests.cs
│   │   │       ├── TfManagerL0.cs
│   │   │       ├── VariablesL0.cs
│   │   │       ├── WorkerCommandManagerL0.cs
│   │   │       ├── WorkerCorrelationIntegrationL0.cs
│   │   │       └── WorkerL0.cs
│   │   ├── L1/
│   │   │   ├── L1HostContext.cs
│   │   │   ├── Mock/
│   │   │   │   ├── FakeAgentPluginManager.cs
│   │   │   │   ├── FakeBuildServer.cs
│   │   │   │   ├── FakeConfigurationStore.cs
│   │   │   │   ├── FakeCustomerIntelligenceServer.cs
│   │   │   │   ├── FakeJobServer.cs
│   │   │   │   ├── FakeReleaseServer.cs
│   │   │   │   ├── FakeResourceMetricsManager.cs
│   │   │   │   ├── FakeTaskManager.cs
│   │   │   │   └── FakeTaskServer.cs
│   │   │   ├── Plugins/
│   │   │   │   ├── FakeCheckoutTask.cs
│   │   │   │   └── FakeGitCliManager.cs
│   │   │   └── Worker/
│   │   │       ├── CheckoutL1Tests.cs
│   │   │       ├── ConditionsL1Tests.cs
│   │   │       ├── ConfigL1Tests.cs
│   │   │       ├── ContainerL1Tests.cs
│   │   │       ├── CoreL1Tests.cs
│   │   │       ├── CorrelationL1Tests.cs
│   │   │       ├── L1TestBase.cs
│   │   │       ├── TimeoutLogFlushingL1Tests.cs
│   │   │       └── VariableL1Tests.cs
│   │   ├── NuGet.Config
│   │   ├── Test.csproj
│   │   └── TestData/
│   │       └── TaskManagerL0/
│   │           └── task.json
│   ├── agentversion
│   ├── dev.cmd
│   ├── dev.sh
│   └── dir.proj
└── tools/
    ├── FindAgentsNotCompatibleWithAgent/
    │   ├── QueryAgentPoolsForCompatibleOS.ps1
    │   └── readme.md
    └── FindPipelinesUsingRetiredImages/
        ├── QueryJobHistoryForRetiredImages.ps1
        └── readme.md
Download .txt
Showing preview only (567K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5727 symbols across 606 files)

FILE: .github/labelChecker/index.js
  function main (line 5) | async function main() {

FILE: release/createAdoPrs.js
  constant INTEGRATION_DIR (line 8) | const INTEGRATION_DIR = path.join(__dirname, '..', '_layout', 'integrati...
  constant GIT (line 9) | const GIT = 'git';
  function createIntegrationFiles (line 33) | function createIntegrationFiles(agentVersion) {
  function clearEmptyXmlNodes (line 56) | function clearEmptyXmlNodes(filePath) {
  function clearEmptyHashValueLine (line 63) | function clearEmptyHashValueLine(filePath) {
  function openPR (line 81) | async function openPR(repo, project, sourceBranch, targetBranch, commitM...
  function getCurrentSprint (line 151) | async function getCurrentSprint() {
  function main (line 160) | async function main() {

FILE: release/createReleaseBranch.js
  constant OWNER (line 11) | const OWNER = 'microsoft';
  constant REPO (line 12) | const REPO = 'azure-pipelines-agent';
  constant GIT (line 13) | const GIT = 'git';
  constant VALID_RELEASE_RE (line 14) | const VALID_RELEASE_RE = /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/;
  function verifyNewReleaseTagOk (line 43) | async function verifyNewReleaseTagOk(newRelease) {
  function writeAgentVersionFile (line 64) | function writeAgentVersionFile(newRelease) {
  function filterCommitsUpToTarget (line 72) | function filterCommitsUpToTarget(commitList) {
  function fetchPRsForSHAsGraphQL (line 90) | async function fetchPRsForSHAsGraphQL(commitSHAs) {
  function fetchPRsSincePreviousReleaseAndEditReleaseNotes (line 133) | async function fetchPRsSincePreviousReleaseAndEditReleaseNotes(newReleas...
  function fetchPRsSinceLastReleaseAndEditReleaseNotes (line 197) | async function fetchPRsSinceLastReleaseAndEditReleaseNotes(newRelease, c...
  function editReleaseNotesFile (line 257) | function editReleaseNotesFile(body) {
  function commitAndPush (line 309) | function commitAndPush(directory, release, branch) {
  function commitAgentChanges (line 315) | function commitAgentChanges(directory, release) {
  function checkGitStatus (line 324) | function checkGitStatus() {
  function main (line 339) | async function main() {

FILE: release/fillReleaseNotesTemplate.js
  function addHashesToReleaseNotes (line 9) | function addHashesToReleaseNotes(releaseNotes) {
  function removeMissingBuild (line 38) | function removeMissingBuild(releaseNotes) {
  function containBuildDescriptionHeader (line 80) | function containBuildDescriptionHeader(line, buildNames) {
  function addAgentVersionToReleaseNotes (line 89) | function addAgentVersionToReleaseNotes(releaseNotes, agentVersion) {
  function main (line 98) | function main() {

FILE: release/rollrelease.js
  function main (line 22) | async function main()

FILE: release/util.js
  constant GIT (line 5) | const GIT = 'git';
  constant GIT_RELEASE_RE (line 6) | const GIT_RELEASE_RE = /([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/;

FILE: src/Agent.Listener/Agent.cs
  type IAgent (line 27) | [ServiceLocator(Default = typeof(Agent))]
    method ExecuteCommand (line 30) | Task<int> ExecuteCommand(CommandSettings command);
  class Agent (line 33) | public sealed class Agent : AgentService, IAgent, IDisposable
    method Initialize (line 40) | public override void Initialize(IHostContext hostContext)
    method ExecuteCommand (line 46) | public async Task<int> ExecuteCommand(CommandSettings command)
    method Dispose (line 312) | public void Dispose()
    method Agent_Unloading (line 318) | private void Agent_Unloading(object sender, EventArgs e)
    method CtrlCHandler (line 327) | private void CtrlCHandler(object sender, EventArgs e)
    method InitializeRuntimeFeatures (line 361) | private async Task InitializeRuntimeFeatures()
    method RunAsync (line 407) | private async Task<int> RunAsync(AgentSettings settings, bool runOnce ...
    method PrintUsage (line 701) | private void PrintUsage(CommandSettings command)
    method PrintBanner (line 724) | private void PrintBanner()

FILE: src/Agent.Listener/CommandLine/BaseCommand.cs
  class BaseCommand (line 6) | public class BaseCommand

FILE: src/Agent.Listener/CommandLine/ConfigureAgent.cs
  class ConfigureAgent (line 6) | [Verb(Constants.Agent.CommandLine.Commands.Configure)]

FILE: src/Agent.Listener/CommandLine/ConfigureOrRemoveBase.cs
  class ConfigureOrRemoveBase (line 6) | public class ConfigureOrRemoveBase : BaseCommand

FILE: src/Agent.Listener/CommandLine/ReAuthAgent.cs
  class ReAuthAgent (line 6) | [Verb(Constants.Agent.CommandLine.Commands.ReAuth)]

FILE: src/Agent.Listener/CommandLine/RemoveAgent.cs
  class RemoveAgent (line 6) | [Verb(Constants.Agent.CommandLine.Commands.Remove)]

FILE: src/Agent.Listener/CommandLine/RunAgent.cs
  class RunAgent (line 7) | [Verb(Constants.Agent.CommandLine.Commands.Run)]

FILE: src/Agent.Listener/CommandLine/WarmupAgent.cs
  class WarmupAgent (line 6) | [Verb(Constants.Agent.CommandLine.Commands.Warmup)]

FILE: src/Agent.Listener/CommandSettings.cs
  class CommandSettings (line 20) | public sealed class CommandSettings
    method CommandSettings (line 57) | public CommandSettings(IHostContext context, string[] args, IScopedEnv...
    method GetAcceptTeeEula (line 136) | public bool GetAcceptTeeEula()
    method GetAlwaysExtractTask (line 145) | public bool GetAlwaysExtractTask()
    method GetReplace (line 150) | public bool GetReplace()
    method GetRunAsService (line 159) | public bool GetRunAsService()
    method GetPreventServiceStart (line 168) | public bool GetPreventServiceStart()
    method GetRunAsAutoLogon (line 178) | public bool GetRunAsAutoLogon()
    method GetOverwriteAutoLogon (line 187) | public bool GetOverwriteAutoLogon(string logonAccount)
    method GetNoRestart (line 196) | public bool GetNoRestart()
    method GetDeploymentGroupTagsRequired (line 205) | public bool GetDeploymentGroupTagsRequired()
    method GetAutoLaunchBrowser (line 215) | public bool GetAutoLaunchBrowser()
    method GetClientId (line 224) | public string GetClientId()
    method GetClientSecret (line 234) | public string GetClientSecret()
    method GetTenantId (line 244) | public string GetTenantId()
    method GetEnableServiceSidTypeUnrestricted (line 258) | public bool GetEnableServiceSidTypeUnrestricted()
    method GetAgentName (line 269) | public string GetAgentName()
    method GetAuth (line 279) | public string GetAuth(string defaultValue)
    method GetPassword (line 289) | public string GetPassword()
    method GetPool (line 299) | public string GetPool()
    method GetToken (line 309) | public string GetToken()
    method GetUrl (line 319) | public string GetUrl(bool suppressPromptIfEmpty = false)
    method GetDeploymentGroupName (line 336) | public string GetDeploymentGroupName()
    method GetDeploymentPoolName (line 351) | public string GetDeploymentPoolName()
    method GetProjectName (line 361) | public string GetProjectName(string defaultValue)
    method GetCollectionName (line 371) | public string GetCollectionName()
    method GetDeploymentGroupTags (line 381) | public string GetDeploymentGroupTags()
    method GetEnvironmentName (line 398) | public string GetEnvironmentName()
    method GetEnvironmentVirtualMachineResourceTagsRequired (line 413) | public bool GetEnvironmentVirtualMachineResourceTagsRequired()
    method GetEnvironmentVirtualMachineResourceTags (line 423) | public string GetEnvironmentVirtualMachineResourceTags()
    method GetUserName (line 438) | public string GetUserName()
    method GetWindowsLogonAccount (line 448) | [SupportedOSPlatform("windows")]
    method GetWindowsLogonPassword (line 459) | public string GetWindowsLogonPassword(string accountName)
    method GetWork (line 469) | public string GetWork()
    method GetMonitorSocketAddress (line 479) | public string GetMonitorSocketAddress()
    method GetNotificationPipeName (line 484) | public string GetNotificationPipeName()
    method GetNotificationSocketAddress (line 489) | public string GetNotificationSocketAddress()
    method GetStartupType (line 495) | public string GetStartupType()
    method GetProxyUrl (line 500) | public string GetProxyUrl()
    method GetProxyUserName (line 505) | public string GetProxyUserName()
    method GetProxyPassword (line 510) | public string GetProxyPassword()
    method GetUseBasicAuthForProxy (line 515) | public bool GetUseBasicAuthForProxy()
    method GetSkipCertificateValidation (line 520) | public bool GetSkipCertificateValidation()
    method GetCACertificate (line 525) | public string GetCACertificate()
    method GetClientCertificate (line 530) | public string GetClientCertificate()
    method GetClientCertificatePrivateKey (line 535) | public string GetClientCertificatePrivateKey()
    method GetClientCertificateArchrive (line 540) | public string GetClientCertificateArchrive()
    method GetClientCertificatePassword (line 545) | public string GetClientCertificatePassword()
    method GetGitUseSChannel (line 550) | public bool GetGitUseSChannel()
    method GetEnvironmentVMResource (line 555) | public bool GetEnvironmentVMResource()
    method GetRunOnce (line 560) | public bool GetRunOnce()
    method GetDebugMode (line 566) | public bool GetDebugMode()
    method GetDeploymentPool (line 571) | public bool GetDeploymentPool()
    method GetDeploymentOrMachineGroup (line 576) | public bool GetDeploymentOrMachineGroup()
    method GetDisableLogUploads (line 587) | public bool GetDisableLogUploads()
    method GetReStreamLogsToFiles (line 592) | public bool GetReStreamLogsToFiles()
    method Unattended (line 597) | public bool Unattended()
    method IsRunCommand (line 610) | public bool IsRunCommand()
    method IsVersion (line 620) | public bool IsVersion()
    method IsHelp (line 634) | public bool IsHelp()
    method IsCommit (line 648) | public bool IsCommit()
    method IsDiagnostics (line 653) | public bool IsDiagnostics()
    method IsConfigureCommand (line 658) | public bool IsConfigureCommand()
    method IsRemoveCommand (line 668) | public bool IsRemoveCommand()
    method IsWarmupCommand (line 678) | public bool IsWarmupCommand()
    method IsReAuthCommand (line 688) | public bool IsReAuthCommand() => ReAuth != null;
    method GetArg (line 694) | private string GetArg(string value, string envName)
    method GetArgOrPrompt (line 704) | private string GetArgOrPrompt(
    method GetEnvArg (line 737) | private string GetEnvArg(string name)
    method TestFlag (line 749) | private bool TestFlag(bool? value, string name)
    method TestFlagOrPrompt (line 770) | private bool TestFlagOrPrompt(
    method AddDefaultVerbIfNecessary (line 789) | private string[] AddDefaultVerbIfNecessary(string[] args)
    method ParseArguments (line 808) | private void ParseArguments(string[] args)
    method ParseArguments (line 820) | private void ParseArguments(string[] args, bool ignoreErrors)
    method PrintArguments (line 872) | private void PrintArguments()
    method ObjectAsJson (line 900) | private string ObjectAsJson(object obj)
    method GetConfigureOrRemoveBase (line 907) | private ConfigureOrRemoveBase GetConfigureOrRemoveBase()

FILE: src/Agent.Listener/Configuration.Linux/SystemdControlManager.cs
  type ILinuxServiceControlManager (line 14) | [ServiceLocator(Default = typeof(SystemDControlManager))]
    method GenerateScripts (line 18) | void GenerateScripts(AgentSettings settings);
  class SystemDControlManager (line 22) | [SupportedOSPlatform("linux")]
    method GenerateScripts (line 31) | public void GenerateScripts(AgentSettings settings)

FILE: src/Agent.Listener/Configuration.Windows/AutoLogonManager.cs
  type IAutoLogonManager (line 15) | [ServiceLocator(Default = typeof(AutoLogonManager))]
    method ConfigureAsync (line 19) | Task ConfigureAsync(CommandSettings command);
    method Unconfigure (line 20) | void Unconfigure();
  class AutoLogonManager (line 23) | [SupportedOSPlatform("windows")]
    method Initialize (line 31) | public override void Initialize(IHostContext hostContext)
    method ConfigureAsync (line 41) | public async Task ConfigureAsync(CommandSettings command)
    method Unconfigure (line 120) | public void Unconfigure()
    method SaveAutoLogonSettings (line 142) | private void SaveAutoLogonSettings(string domainName, string userName)
    method ConfigurePowerOptions (line 154) | private async Task ConfigurePowerOptions()
    method RestartBasedOnUserInput (line 194) | private void RestartBasedOnUserInput(CommandSettings command)
    method GetAccountSegments (line 239) | private void GetAccountSegments(string account, out string domain, out...

FILE: src/Agent.Listener/Configuration.Windows/AutoLogonRegistryManager.cs
  type IAutoLogonRegistryManager (line 14) | [ServiceLocator(Default = typeof(AutoLogonRegistryManager))]
    method GetAutoLogonUserDetails (line 18) | void GetAutoLogonUserDetails(out string domainName, out string userName);
    method UpdateRegistrySettings (line 19) | void UpdateRegistrySettings(CommandSettings command, string domainName...
    method ResetRegistrySettings (line 20) | void ResetRegistrySettings(string domainName, string userName);
    method DumpAutoLogonRegistrySettings (line 22) | void DumpAutoLogonRegistrySettings();
  class AutoLogonRegistryManager (line 25) | [SupportedOSPlatform("windows")]
    method Initialize (line 32) | public override void Initialize(IHostContext hostContext)
    method GetAutoLogonUserDetails (line 41) | public void GetAutoLogonUserDetails(out string domainName, out string ...
    method UpdateRegistrySettings (line 61) | public void UpdateRegistrySettings(CommandSettings command, string dom...
    method ResetRegistrySettings (line 103) | public void ResetRegistrySettings(string domainName, string userName)
    method DumpAutoLogonRegistrySettings (line 119) | public void DumpAutoLogonRegistrySettings()
    method ResetAutoLogon (line 195) | private void ResetAutoLogon(string domainName, string userName)
    method UpdateMachineSpecificRegistrySettings (line 221) | private void UpdateMachineSpecificRegistrySettings(string domainName, ...
    method InspectAutoLogonRelatedPolicies (line 236) | private void InspectAutoLogonRelatedPolicies()
    method UpdateUserSpecificRegistrySettings (line 285) | private void UpdateUserSpecificRegistrySettings(CommandSettings comman...
    method UpdateScreenSaverSettings (line 295) | private void UpdateScreenSaverSettings(CommandSettings command, string...
    method GetStartupCommand (line 326) | private string GetStartupCommand(bool runOnce)
    method ResetUserSpecificSettings (line 348) | private void ResetUserSpecificSettings(string securityId)
    method DeleteStartupCommand (line 368) | private void DeleteStartupCommand(RegistryHive targetHive, string secu...
    method RevertOriginalValue (line 387) | private void RevertOriginalValue(RegistryHive targetHive, string subKe...
    method GetBackupValueName (line 411) | private string GetBackupValueName(string valueName)
  class RegistryConstants (line 417) | public class RegistryConstants
    class MachineSettings (line 421) | public class MachineSettings
      class SubKeys (line 423) | public class SubKeys
      class ValueNames (line 430) | public class ValueNames
    class UserSettings (line 444) | public class UserSettings
      class SubKeys (line 446) | public class SubKeys
      class ValueNames (line 453) | public class ValueNames

FILE: src/Agent.Listener/Configuration.Windows/NativeWindowsServiceHelper.cs
  type INativeWindowsServiceHelper (line 22) | [ServiceLocator(Default = typeof(NativeWindowsServiceHelper))]
    method GetUniqueBuildGroupName (line 26) | string GetUniqueBuildGroupName();
    method LocalGroupExists (line 28) | bool LocalGroupExists(string groupName);
    method CreateLocalGroup (line 30) | void CreateLocalGroup(string groupName);
    method DeleteLocalGroup (line 32) | void DeleteLocalGroup(string groupName);
    method AddMemberToLocalGroup (line 34) | void AddMemberToLocalGroup(string accountName, string groupName);
    method GrantFullControlToGroup (line 36) | void GrantFullControlToGroup(string path, string groupName);
    method RemoveGroupFromFolderSecuritySetting (line 38) | void RemoveGroupFromFolderSecuritySetting(string folderPath, string gr...
    method IsUserHasLogonAsServicePrivilege (line 40) | bool IsUserHasLogonAsServicePrivilege(string domain, string userName);
    method GrantUserLogonAsServicePrivilage (line 42) | bool GrantUserLogonAsServicePrivilage(string domain, string userName);
    method IsValidCredential (line 44) | bool IsValidCredential(string domain, string userName, string logonPas...
    method GetDefaultServiceAccount (line 46) | NTAccount GetDefaultServiceAccount();
    method GetDefaultAdminServiceAccount (line 48) | NTAccount GetDefaultAdminServiceAccount();
    method IsServiceExists (line 50) | bool IsServiceExists(string serviceName);
    method InstallService (line 52) | void InstallService(string serviceName, string serviceDisplayName, str...
    method UninstallService (line 54) | void UninstallService(string serviceName);
    method StartService (line 56) | void StartService(string serviceName);
    method StopService (line 58) | void StopService(string serviceName);
    method CreateVstsAgentRegistryKey (line 60) | void CreateVstsAgentRegistryKey();
    method DeleteVstsAgentRegistryKey (line 62) | void DeleteVstsAgentRegistryKey();
    method GetSecurityId (line 64) | string GetSecurityId(string domainName, string userName);
    method SetAutoLogonPassword (line 66) | void SetAutoLogonPassword(string password);
    method ResetAutoLogonPassword (line 68) | void ResetAutoLogonPassword();
    method IsRunningInElevatedMode (line 70) | bool IsRunningInElevatedMode();
    method LoadUserProfile (line 72) | void LoadUserProfile(string domain, string userName, string logonPassw...
    method UnloadUserProfile (line 74) | void UnloadUserProfile(IntPtr tokenHandle, PROFILEINFO userProfile);
    method IsValidAutoLogonCredential (line 76) | bool IsValidAutoLogonCredential(string domain, string userName, string...
    method GrantDirectoryPermissionForAccount (line 78) | void GrantDirectoryPermissionForAccount(string accountName, IList<stri...
    method RevokeDirectoryPermissionForAccount (line 80) | void RevokeDirectoryPermissionForAccount(IList<string> folders);
    method IsWellKnownIdentity (line 82) | bool IsWellKnownIdentity(string accountName);
    method IsManagedServiceAccount (line 84) | bool IsManagedServiceAccount(string accountName);
  class NativeWindowsServiceHelper (line 87) | [SupportedOSPlatform("windows")]
    method Initialize (line 93) | public override void Initialize(IHostContext hostContext)
    method GetUniqueBuildGroupName (line 100) | public string GetUniqueBuildGroupName()
    method LocalGroupExists (line 106) | public bool LocalGroupExists(string groupName)
    method CreateLocalGroup (line 152) | public void CreateLocalGroup(string groupName)
    method DeleteLocalGroup (line 189) | public void DeleteLocalGroup(string groupName)
    method AddMemberToLocalGroup (line 218) | public void AddMemberToLocalGroup(string accountName, string groupName)
    method GrantFullControlToGroup (line 261) | public void GrantFullControlToGroup(string path, string groupName)
    method IsGroupHasFullControl (line 288) | private bool IsGroupHasFullControl(string path, string groupName)
    method IsUserHasLogonAsServicePrivilege (line 311) | public bool IsUserHasLogonAsServicePrivilege(string domain, string use...
    method GrantUserLogonAsServicePrivilage (line 359) | public bool GrantUserLogonAsServicePrivilage(string domain, string use...
    method IsWellKnownIdentity (line 380) | public bool IsWellKnownIdentity(string accountName)
    method IsValidCredential (line 394) | public bool IsValidCredential(string domain, string userName, string l...
    method IsValidAutoLogonCredential (line 399) | public bool IsValidAutoLogonCredential(string domain, string userName,...
    method GetDefaultServiceAccount (line 404) | public NTAccount GetDefaultServiceAccount()
    method GetDefaultAdminServiceAccount (line 417) | public NTAccount GetDefaultAdminServiceAccount()
    method RemoveGroupFromFolderSecuritySetting (line 430) | public void RemoveGroupFromFolderSecuritySetting(string folderPath, st...
    method IsServiceExists (line 452) | public bool IsServiceExists(string serviceName)
    method InstallService (line 459) | public void InstallService(string serviceName, string serviceDisplayNa...
    method UninstallService (line 678) | public void UninstallService(string serviceName)
    method StartService (line 725) | public void StartService(string serviceName)
    method StopService (line 752) | public void StopService(string serviceName)
    method CreateVstsAgentRegistryKey (line 792) | public void CreateVstsAgentRegistryKey()
    method DeleteVstsAgentRegistryKey (line 823) | public void DeleteVstsAgentRegistryKey()
    method GetSecurityId (line 851) | public string GetSecurityId(string domainName, string userName)
    method SetAutoLogonPassword (line 858) | public void SetAutoLogonPassword(string password)
    method ResetAutoLogonPassword (line 866) | public void ResetAutoLogonPassword()
    method IsRunningInElevatedMode (line 874) | public bool IsRunningInElevatedMode()
    method LoadUserProfile (line 879) | public void LoadUserProfile(string domain, string userName, string log...
    method UnloadUserProfile (line 901) | public void UnloadUserProfile(IntPtr tokenHandle, PROFILEINFO userProf...
    method GrantDirectoryPermissionForAccount (line 918) | public void GrantDirectoryPermissionForAccount(string accountName, ILi...
    method RevokeDirectoryPermissionForAccount (line 945) | public void RevokeDirectoryPermissionForAccount(IList<string> folders)
    method IsManagedServiceAccount (line 978) | public bool IsManagedServiceAccount(string accountName)
    method CheckNetIsServiceAccount (line 999) | public virtual uint CheckNetIsServiceAccount(string ServerName, string...
    method IsValidCredentialInternal (line 1004) | private bool IsValidCredentialInternal(string domain, string userName,...
    method GetSidBinaryFromWindows (line 1034) | private byte[] GetSidBinaryFromWindows(string domain, string user)
    method SanitizeManagedServiceAccountName (line 1055) | private string SanitizeManagedServiceAccountName(string accountName)
    class LsaPolicy (line 1063) | internal class LsaPolicy : IDisposable
      method LsaPolicy (line 1067) | public LsaPolicy()
      method LsaPolicy (line 1072) | public LsaPolicy(LSA_AccessPolicy access)
      method SetSecretData (line 1094) | public void SetSecretData(string key, string value)
      method Dispose (line 1129) | void IDisposable.Dispose()
    type LSA_AccessPolicy (line 1139) | internal enum LSA_AccessPolicy : long
    method LsaStorePrivateData (line 1157) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    method LsaNtStatusToWinError (line 1164) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    type ReturnCode (line 1203) | public struct ReturnCode
    type LocalGroupInfo (line 1220) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    type LSA_UNICODE_STRING (line 1229) | [StructLayout(LayoutKind.Sequential)]
    type LocalGroupMemberInfo (line 1239) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    type LSA_OBJECT_ATTRIBUTES (line 1246) | [StructLayout(LayoutKind.Sequential)]
    type SERVICE_FAILURE_ACTIONS (line 1257) | [StructLayout(LayoutKind.Sequential)]
    type SERVICE_DELAYED_AUTO_START_INFO (line 1267) | [StructLayout(LayoutKind.Sequential)]
    type SERVICE_SID_INFO (line 1273) | [StructLayout(LayoutKind.Sequential)]
    class FailureAction (line 1281) | private class FailureAction
      method FailureAction (line 1289) | public FailureAction(RecoverAction actionType, int actionDelay)
    type ServiceManagerRights (line 1296) | [Flags]
    type ServiceRights (line 1311) | [Flags]
    type ServiceError (line 1330) | public enum ServiceError
    type ServiceStartType (line 1338) | public enum ServiceStartType
    type RecoverAction (line 1348) | private enum RecoverAction
    method NetIsServiceAccount (line 1356) | [DllImport("Logoncli.dll", SetLastError = true, CharSet = CharSet.Auto)]
    method NetLocalGroupGetInfo (line 1359) | [DllImport("Netapi32.dll")]
    method NetApiBufferFree (line 1365) | [DllImport("Netapi32.dll")]
    method NetLocalGroupAdd (line 1369) | [DllImport("Netapi32.dll")]
    method NetLocalGroupAddMembers (line 1375) | [DllImport("Netapi32.dll")]
    method NetLocalGroupDel (line 1382) | [DllImport("Netapi32.dll")]
    method LsaClose (line 1385) | [DllImport("advapi32.dll")]
    method LsaOpenPolicy (line 1388) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    method LsaAddAccountRights (line 1395) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    method LsaEnumerateAccountRights (line 1402) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    method LsaFreeMemory (line 1409) | [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)]
    method LogonUser (line 1412) | [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = t...
    method LoadUserProfile (line 1415) | [DllImport("userenv.dll", SetLastError = true, CharSet = CharSet.Unico...
    method UnloadUserProfile (line 1418) | [DllImport("userenv.dll", SetLastError = true, CharSet = CharSet.Unico...
    method CloseHandle (line 1421) | [DllImport("kernel32", SetLastError = true)]
    method CreateService (line 1424) | [DllImport("advapi32.dll", EntryPoint = "CreateServiceA")]
    method OpenSCManager (line 1440) | [DllImport("advapi32.dll")]
    method OpenService (line 1443) | [DllImport("advapi32.dll", SetLastError = true)]
    method DeleteService (line 1446) | [DllImport("advapi32.dll", SetLastError = true)]
    method CloseServiceHandle (line 1449) | [DllImport("advapi32.dll")]
    method LockServiceDatabase (line 1452) | [DllImport("advapi32.dll")]
    method UnlockServiceDatabase (line 1455) | [DllImport("advapi32.dll")]
    method ChangeServiceFailureActions (line 1458) | [DllImport("advapi32.dll", EntryPoint = "ChangeServiceConfig2")]
    method ChangeServiceSidType (line 1461) | [DllImport("advapi32.dll", EntryPoint = "ChangeServiceConfig2")]
    method ChangeServiceDelayedAutoStart (line 1464) | [DllImport("advapi32.dll", EntryPoint = "ChangeServiceConfig2")]
    method GetLastError (line 1467) | [DllImport("kernel32.dll")]
    method setServiceSidTypeAsUnrestricted (line 1474) | private void setServiceSidTypeAsUnrestricted(IntPtr svcHndl, string se...
  type PROFILEINFO (line 1503) | [StructLayout(LayoutKind.Sequential)]

FILE: src/Agent.Listener/Configuration.Windows/RSAEncryptedFileKeyManager.cs
  class RSAEncryptedFileKeyManager (line 13) | [SupportedOSPlatform("windows")]
    method CreateKey (line 19) | public RSA CreateKey(bool enableAgentKeyStoreInNamedContainer, bool us...
    method CreateKeyStoreKeyInNamedContainer (line 31) | private RSA CreateKeyStoreKeyInNamedContainer(bool useCng)
    method CreateKeyStoreKeyInFile (line 94) | private RSA CreateKeyStoreKeyInFile(bool useCng)
    method DeleteKey (line 126) | public void DeleteKey()
    method GetKey (line 135) | public RSA GetKey()
    method GetKeyFromNamedContainer (line 140) | private RSA GetKeyFromNamedContainer()
    method GetKeyFromFile (line 179) | private RSA GetKeyFromFile()
    method LoadParameters (line 201) | private (string containerName, bool useCng, RSAParameters rsaParameter...
    method SaveParameters (line 209) | private void SaveParameters(RSAParameters parameters, string container...
    method Initialize (line 217) | void IAgentService.Initialize(IHostContext context)

FILE: src/Agent.Listener/Configuration.Windows/WindowsRegistryManager.cs
  type IWindowsRegistryManager (line 10) | [ServiceLocator(Default = typeof(WindowsRegistryManager))]
    method GetValue (line 14) | string GetValue(RegistryHive hive, string subKeyName, string name);
    method SetValue (line 15) | void SetValue(RegistryHive hive, string subKeyName, string name, strin...
    method DeleteValue (line 16) | void DeleteValue(RegistryHive hive, string subKeyName, string name);
    method SubKeyExists (line 17) | bool SubKeyExists(RegistryHive hive, string subKeyName);
  class WindowsRegistryManager (line 20) | [SupportedOSPlatform("windows")]
    method DeleteValue (line 23) | public void DeleteValue(RegistryHive hive, string subKeyName, string n...
    method GetValue (line 34) | public string GetValue(RegistryHive hive, string subKeyName, string name)
    method SetValue (line 48) | public void SetValue(RegistryHive hive, string subKeyName, string name...
    method SubKeyExists (line 68) | public bool SubKeyExists(RegistryHive hive, string subKeyName)
    method OpenRegistryKey (line 76) | private RegistryKey OpenRegistryKey(RegistryHive hive, string subKeyNa...
    method CreateRegistryKey (line 94) | private RegistryKey CreateRegistryKey(RegistryHive hive, string subKey...

FILE: src/Agent.Listener/Configuration.Windows/WindowsServiceControlManager.cs
  type IWindowsServiceControlManager (line 14) | [ServiceLocator(Default = typeof(WindowsServiceControlManager))]
    method ConfigureService (line 18) | void ConfigureService(AgentSettings settings, CommandSettings command);
    method UnconfigureService (line 20) | void UnconfigureService();
  class WindowsServiceControlManager (line 23) | [SupportedOSPlatform("windows")]
    method Initialize (line 34) | public override void Initialize(IHostContext hostContext)
    method ConfigureService (line 41) | public void ConfigureService(AgentSettings settings, CommandSettings c...
    method UnconfigureService (line 158) | public void UnconfigureService()
    method SaveServiceSettings (line 185) | private void SaveServiceSettings(string serviceName)
    method GetAccountSegments (line 197) | private void GetAccountSegments(string account, out string domain, out...

FILE: src/Agent.Listener/Configuration.macOS/MacOSServiceControlManager.cs
  type IMacOSServiceControlManager (line 13) | [ServiceLocator(Default = typeof(MacOSServiceControlManager))]
    method GenerateScripts (line 17) | void GenerateScripts(AgentSettings settings);
  class MacOSServiceControlManager (line 20) | [SupportedOSPlatform("macos")]
    method GenerateScripts (line 29) | public void GenerateScripts(AgentSettings settings)

FILE: src/Agent.Listener/Configuration/ConfigurationManager.cs
  type IConfigurationManager (line 30) | [ServiceLocator(Default = typeof(ConfigurationManager))]
    method IsConfigured (line 33) | bool IsConfigured();
    method ConfigureAsync (line 34) | Task ConfigureAsync(CommandSettings command);
    method UnconfigureAsync (line 35) | Task UnconfigureAsync(CommandSettings command);
    method ReAuthAsync (line 36) | Task ReAuthAsync(CommandSettings command);
    method LoadSettings (line 37) | AgentSettings LoadSettings();
  class ConfigurationManager (line 40) | public sealed class ConfigurationManager : AgentService, IConfigurationM...
    method Initialize (line 52) | public override void Initialize(IHostContext hostContext)
    method IsConfigured (line 64) | public bool IsConfigured()
    method LoadSettings (line 71) | public AgentSettings LoadSettings()
    method ConfigureAsync (line 85) | public async Task ConfigureAsync(CommandSettings command)
    method UpdateAgentWithRetryAsync (line 471) | private async Task<T> UpdateAgentWithRetryAsync<T>(
    method UnconfigureAsync (line 523) | public async Task UnconfigureAsync(CommandSettings command)
    method ReAuthAsync (line 681) | public async Task ReAuthAsync(CommandSettings command)
    method UpdateCredentialData (line 797) | private void UpdateCredentialData(
    method GetCredentialProvider (line 856) | private ICredentialProvider GetCredentialProvider(CommandSettings comm...
    method UpdateExistingAgent (line 889) | private TaskAgent UpdateExistingAgent(TaskAgent agent, RSAParameters p...
    method CreateNewAgent (line 908) | private TaskAgent CreateNewAgent(string agentName, RSAParameters publi...
    method WriteSection (line 930) | private void WriteSection(string message)
    method AddVSTelemetryRegKey (line 937) | [SupportedOSPlatform("windows")]
    method DeleteVSTelemetryRegKey (line 958) | [SupportedOSPlatform("windows")]
    method CheckAgentRootDirectorySecure (line 979) | [SupportedOSPlatform("windows")]
    method SetupVstsProxySetting (line 1029) | private bool SetupVstsProxySetting(IVstsAgentWebProxy vstsProxy, Comma...
    method SetupCertSettings (line 1054) | private bool SetupCertSettings(IAgentCertificateManager agentCertManag...
    method GetAgentTypeFromCommand (line 1105) | private string GetAgentTypeFromCommand(CommandSettings command)
    method CheckIsHostedServer (line 1125) | private async Task<bool> CheckIsHostedServer(IConfigurationProvider ag...

FILE: src/Agent.Listener/Configuration/ConfigurationProvider.cs
  type IConfigurationProvider (line 18) | public interface IConfigurationProvider : IExtension, IAgentService
    method GetServerUrl (line 24) | void GetServerUrl(AgentSettings agentSettings, CommandSettings command);
    method GetCollectionName (line 26) | void GetCollectionName(AgentSettings agentSettings, CommandSettings co...
    method TestConnectionAsync (line 28) | Task TestConnectionAsync(AgentSettings agentSettings, VssCredentials c...
    method GetPoolIdAndName (line 30) | Task GetPoolIdAndName(AgentSettings agentSettings, CommandSettings com...
    method GetFailedToFindPoolErrorString (line 32) | string GetFailedToFindPoolErrorString();
    method UpdateAgentAsync (line 34) | Task<TaskAgent> UpdateAgentAsync(AgentSettings agentSettings, TaskAgen...
    method AddAgentAsync (line 36) | Task<TaskAgent> AddAgentAsync(AgentSettings agentSettings, TaskAgent a...
    method DeleteAgentAsync (line 38) | Task DeleteAgentAsync(AgentSettings agentSettings);
    method GetAgentAsync (line 40) | Task<TaskAgent> GetAgentAsync(AgentSettings agentSettings);
    method ThrowTaskAgentExistException (line 42) | void ThrowTaskAgentExistException(AgentSettings agentSettings);
  class BuildReleasesAgentConfigProvider (line 45) | public class BuildReleasesAgentConfigProvider : AgentService, IConfigura...
    method Initialize (line 57) | public override void Initialize(IHostContext hostContext)
    method GetServerUrl (line 65) | public void GetServerUrl(AgentSettings agentSettings, CommandSettings ...
    method GetCollectionName (line 72) | public void GetCollectionName(AgentSettings agentSettings, CommandSett...
    method GetPoolIdAndName (line 77) | public virtual async Task GetPoolIdAndName(AgentSettings agentSettings...
    method GetFailedToFindPoolErrorString (line 96) | public string GetFailedToFindPoolErrorString() => StringUtil.Loc("Fail...
    method ThrowTaskAgentExistException (line 98) | public void ThrowTaskAgentExistException(AgentSettings agentSettings)
    method UpdateAgentAsync (line 104) | public Task<TaskAgent> UpdateAgentAsync(AgentSettings agentSettings, T...
    method AddAgentAsync (line 110) | public Task<TaskAgent> AddAgentAsync(AgentSettings agentSettings, Task...
    method DeleteAgentAsync (line 116) | public Task DeleteAgentAsync(AgentSettings agentSettings)
    method TestConnectionAsync (line 122) | public async Task TestConnectionAsync(AgentSettings agentSettings, Vss...
    method GetAgentAsync (line 129) | public async Task<TaskAgent> GetAgentAsync(AgentSettings agentSettings)
  class DeploymentGroupAgentConfigProvider (line 138) | public class DeploymentGroupAgentConfigProvider : AgentService, IConfigu...
    method Initialize (line 149) | public override void Initialize(IHostContext hostContext)
    method GetServerUrl (line 157) | public void GetServerUrl(AgentSettings agentSettings, CommandSettings ...
    method GetCollectionName (line 165) | public void GetCollectionName(AgentSettings agentSettings, CommandSett...
    method GetPoolIdAndName (line 177) | public virtual async Task GetPoolIdAndName(AgentSettings agentSettings...
    method GetFailedToFindPoolErrorString (line 194) | public virtual string GetFailedToFindPoolErrorString() => StringUtil.L...
    method ThrowTaskAgentExistException (line 196) | public virtual void ThrowTaskAgentExistException(AgentSettings agentSe...
    method UpdateAgentAsync (line 202) | public virtual async Task<TaskAgent> UpdateAgentAsync(AgentSettings ag...
    method AddAgentAsync (line 215) | public virtual async Task<TaskAgent> AddAgentAsync(AgentSettings agent...
    method DeleteAgentAsync (line 232) | public virtual async Task DeleteAgentAsync(AgentSettings agentSettings)
    method TestConnectionAsync (line 251) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method GetAgentAsync (line 273) | public virtual async Task<TaskAgent> GetAgentAsync(AgentSettings agent...
    method GetAndAddTags (line 287) | private async Task GetAndAddTags(DeploymentMachine deploymentMachine, ...
    method GetDeploymentGroupAsync (line 323) | private async Task<DeploymentGroup> GetDeploymentGroupAsync(string pro...
    method GetDeploymentTargetsAsync (line 338) | private async Task<List<DeploymentMachine>> GetDeploymentTargetsAsync(...
    method GetAzureSubscriptionIdAsync (line 353) | private async Task<string> GetAzureSubscriptionIdAsync()
  class SharedDeploymentAgentConfigProvider (line 400) | public class SharedDeploymentAgentConfigProvider : BuildReleasesAgentCon...
    method GetPoolIdAndName (line 405) | public override async Task GetPoolIdAndName(AgentSettings agentSetting...
  class EnvironmentVMResourceConfigProvider (line 425) | public class EnvironmentVMResourceConfigProvider : DeploymentGroupAgentC...
    method Initialize (line 431) | public override void Initialize(IHostContext hostContext)
    method TestConnectionAsync (line 437) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method GetPoolIdAndName (line 459) | public override async Task GetPoolIdAndName(AgentSettings agentSetting...
    method GetFailedToFindPoolErrorString (line 476) | public override string GetFailedToFindPoolErrorString() => StringUtil....
    method ThrowTaskAgentExistException (line 478) | public override void ThrowTaskAgentExistException(AgentSettings agentS...
    method AddAgentAsync (line 484) | public override async Task<TaskAgent> AddAgentAsync(AgentSettings agen...
    method GetVirtualMachineResourceTags (line 505) | private IList<String> GetVirtualMachineResourceTags(CommandSettings co...
    method DeleteAgentAsync (line 528) | public override async Task DeleteAgentAsync(AgentSettings agentSettings)
    method GetAgentAsync (line 543) | public override async Task<TaskAgent> GetAgentAsync(AgentSettings agen...
    method UpdateAgentAsync (line 557) | public override async Task<TaskAgent> UpdateAgentAsync(AgentSettings a...
    method GetEnvironmentAsync (line 579) | private async Task<EnvironmentInstance> GetEnvironmentAsync(string pro...
    method GetEnvironmentVMsAsync (line 594) | private async Task<List<VirtualMachineResource>> GetEnvironmentVMsAsyn...

FILE: src/Agent.Listener/Configuration/CredentialManager.cs
  type ICredentialManager (line 15) | [ServiceLocator(Default = typeof(CredentialManager))]
    method GetCredentialProvider (line 18) | ICredentialProvider GetCredentialProvider(string credType);
    method LoadCredentials (line 19) | VssCredentials LoadCredentials();
  class CredentialManager (line 22) | public class CredentialManager : AgentService, ICredentialManager
    method GetCredentialProvider (line 36) | public ICredentialProvider GetCredentialProvider(string credType)
    method LoadCredentials (line 52) | public VssCredentials LoadCredentials()

FILE: src/Agent.Listener/Configuration/CredentialProvider.cs
  type ICredentialProvider (line 26) | public interface ICredentialProvider
    method GetVssCredentials (line 30) | VssCredentials GetVssCredentials(IHostContext context);
    method EnsureCredential (line 31) | void EnsureCredential(IHostContext context, CommandSettings command, s...
  class CredentialProvider (line 34) | public abstract class CredentialProvider : ICredentialProvider
    method CredentialProvider (line 36) | public CredentialProvider(string scheme)
    method GetVssCredentials (line 45) | public abstract VssCredentials GetVssCredentials(IHostContext context);
    method EnsureCredential (line 46) | public abstract void EnsureCredential(IHostContext context, CommandSet...
  class AadDeviceCodeAccessToken (line 49) | public sealed class AadDeviceCodeAccessToken : CredentialProvider
    method AadDeviceCodeAccessToken (line 56) | public AadDeviceCodeAccessToken() : base(Constants.Configuration.AAD) { }
    method GetVssCredentials (line 58) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 83) | public override void EnsureCredential(IHostContext context, CommandSet...
    method AcquireATokenFromCacheOrDeviceCodeFlowAsync (line 92) | private async Task<AuthenticationResult> AcquireATokenFromCacheOrDevic...
    method GetTenantAuthorityUrl (line 115) | private Uri GetTenantAuthorityUrl(IHostContext context, string serverUrl)
    method GetTokenUsingDeviceCodeFlowAsync (line 162) | private async Task<AuthenticationResult> GetTokenUsingDeviceCodeFlowAs...
  class PersonalAccessToken (line 199) | public sealed class PersonalAccessToken : CredentialProvider
    method PersonalAccessToken (line 201) | public PersonalAccessToken() : base(Constants.Configuration.PAT) { }
    method GetVssCredentials (line 203) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 227) | public override void EnsureCredential(IHostContext context, CommandSet...
  class ServiceIdentityCredential (line 237) | public sealed class ServiceIdentityCredential : CredentialProvider
    method ServiceIdentityCredential (line 239) | public ServiceIdentityCredential() : base(Constants.Configuration.Serv...
    method GetVssCredentials (line 241) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 273) | public override void EnsureCredential(IHostContext context, CommandSet...
  class AlternateCredential (line 284) | public sealed class AlternateCredential : CredentialProvider
    method AlternateCredential (line 286) | public AlternateCredential() : base(Constants.Configuration.Alternate)...
    method GetVssCredentials (line 288) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 319) | public override void EnsureCredential(IHostContext context, CommandSet...
  class ServicePrincipalCredential (line 330) | public sealed class ServicePrincipalCredential : CredentialProvider
    method ServicePrincipalCredential (line 332) | public ServicePrincipalCredential() : base(Constants.Configuration.Ser...
    method GetVssCredentials (line 334) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 365) | public override void EnsureCredential(IHostContext context, CommandSet...

FILE: src/Agent.Listener/Configuration/FeatureFlagProvider.cs
  type IFeatureFlagProvider (line 17) | [ServiceLocator(Default = typeof(FeatureFlagProvider))]
    method GetFeatureFlagAsync (line 29) | public Task<FeatureFlag> GetFeatureFlagAsync(IHostContext context, str...
    method GetFeatureFlagWithCred (line 31) | public Task<FeatureFlag> GetFeatureFlagWithCred(IHostContext context, ...
  class FeatureFlagProvider (line 34) | public class FeatureFlagProvider : AgentService, IFeatureFlagProvider
    method GetFeatureFlagAsync (line 37) | public async Task<FeatureFlag> GetFeatureFlagAsync(IHostContext contex...
    method GetFeatureFlagWithCred (line 51) | public async Task<FeatureFlag> GetFeatureFlagWithCred(IHostContext con...

FILE: src/Agent.Listener/Configuration/IRSAKeyManager.cs
  type IRSAKeyManager (line 19) | [ServiceLocator(
    method CreateKey (line 30) | RSA CreateKey(bool enableAgentKeyStoreInNamedContainer, bool useCng);
    method DeleteKey (line 35) | void DeleteKey();
    method GetKey (line 42) | RSA GetKey();
  class IRSAKeyManagerExtensions (line 45) | public static class IRSAKeyManagerExtensions
    method GetStoreAgentTokenInNamedContainerFF (line 47) | public static async Task<(bool useNamedContainer, bool useCng)> GetSto...
    method GetStoreAgentTokenConfig (line 64) | public static (bool useNamedContainer, bool useCng) GetStoreAgentToken...
  class RSAParametersSerializable (line 78) | [Serializable]
    method RSAParametersSerializable (line 95) | public RSAParametersSerializable(string containerName, bool useCng, RS...
    method RSAParametersSerializable (line 102) | private RSAParametersSerializable()
    method RSAParametersSerializable (line 126) | public RSAParametersSerializable(SerializationInfo information, Stream...
    method GetObjectData (line 170) | public void GetObjectData(SerializationInfo info, StreamingContext con...

FILE: src/Agent.Listener/Configuration/IntegratedCredential.cs
  class IntegratedCredential (line 9) | public sealed class IntegratedCredential : CredentialProvider
    method IntegratedCredential (line 11) | public IntegratedCredential() : base(Constants.Configuration.Integrate...
    method GetVssCredentials (line 13) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 27) | public override void EnsureCredential(IHostContext context, CommandSet...

FILE: src/Agent.Listener/Configuration/NegotiateCredential.cs
  class NegotiateCredential (line 12) | public sealed class NegotiateCredential : CredentialProvider
    method NegotiateCredential (line 14) | public NegotiateCredential() : base(Constants.Configuration.Negotiate)...
    method GetVssCredentials (line 16) | public override VssCredentials GetVssCredentials(IHostContext context)
    method EnsureCredential (line 72) | public override void EnsureCredential(IHostContext context, CommandSet...

FILE: src/Agent.Listener/Configuration/OAuthCredential.cs
  class OAuthCredential (line 12) | public class OAuthCredential : CredentialProvider
    method OAuthCredential (line 14) | public OAuthCredential()
    method EnsureCredential (line 19) | public override void EnsureCredential(
    method GetVssCredentials (line 28) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...

FILE: src/Agent.Listener/Configuration/PromptManager.cs
  type IPromptManager (line 9) | [ServiceLocator(Default = typeof(PromptManager))]
    method ReadBool (line 12) | bool ReadBool(
    method ReadValue (line 18) | string ReadValue(
  class PromptManager (line 27) | public sealed class PromptManager : AgentService, IPromptManager
    method Initialize (line 31) | public override void Initialize(IHostContext hostContext)
    method ReadBool (line 37) | public bool ReadBool(
    method ReadValue (line 54) | public string ReadValue(

FILE: src/Agent.Listener/Configuration/RSAFileKeyManager.cs
  class RSAFileKeyManager (line 12) | public class RSAFileKeyManager : AgentService, IRSAKeyManager
    method CreateKey (line 17) | public RSA CreateKey(bool enableAgentKeyStoreInNamedContainer, bool us...
    method DeleteKey (line 64) | public void DeleteKey()
    method GetKey (line 73) | public RSA GetKey()
    method Initialize (line 88) | void IAgentService.Initialize(IHostContext context)

FILE: src/Agent.Listener/Configuration/ServiceControlManager.cs
  class ServiceControlManager (line 10) | public class ServiceControlManager : AgentService
    method CalculateServiceName (line 12) | public void CalculateServiceName(AgentSettings settings, string servic...

FILE: src/Agent.Listener/Configuration/Validators.cs
  class Validators (line 12) | public static class Validators
    method ServerUrlValidator (line 17) | public static bool ServerUrlValidator(string value)
    method AuthSchemeValidator (line 39) | public static bool AuthSchemeValidator(string value)
    method FilePathValidator (line 44) | public static bool FilePathValidator(string value)
    method BoolValidator (line 63) | public static bool BoolValidator(string value)
    method NonEmptyValidator (line 71) | public static bool NonEmptyValidator(string value)
    method NTAccountValidator (line 76) | [SupportedOSPlatform("windows")]

FILE: src/Agent.Listener/Diagnostics/DiagnosticSuite.cs
  class DiagnosticSuite (line 8) | class DiagnosticSuite

FILE: src/Agent.Listener/Diagnostics/DiagnosticsTests.cs
  class DiagnosticTests (line 7) | public class DiagnosticTests
    method DiagnosticTests (line 9) | public DiagnosticTests(ITerminal terminal)
    method Execute (line 40) | public void Execute()

FILE: src/Agent.Listener/Diagnostics/DiskInfo.cs
  class DiskInfo (line 5) | class DiskInfo : IDiagnosticInfo
    method Execute (line 7) | public void Execute(ITerminal terminal)

FILE: src/Agent.Listener/Diagnostics/DnsTest.cs
  class DnsTest (line 6) | class DnsTest : IDiagnosticTest
    method Execute (line 8) | public bool Execute(ITerminal terminal)

FILE: src/Agent.Listener/Diagnostics/FolderPermissionInfo.cs
  class FolderPermissionInfo (line 8) | class FolderPermissionInfo : IDiagnosticInfo
    method Execute (line 10) | public void Execute(ITerminal terminal)
    method HasFolderWritePermission (line 40) | private bool HasFolderWritePermission(ITerminal terminal, string dirPath)
    method HasFileReadWritePermission (line 58) | private bool HasFileReadWritePermission(ITerminal terminal, FileInfo f...

FILE: src/Agent.Listener/Diagnostics/IDiagnosticInfo.cs
  type IDiagnosticInfo (line 3) | public interface IDiagnosticInfo
    method Execute (line 5) | void Execute(ITerminal terminal);

FILE: src/Agent.Listener/Diagnostics/IDiagnosticTest.cs
  type IDiagnosticTest (line 3) | public interface IDiagnosticTest
    method Execute (line 5) | bool Execute(ITerminal terminal);

FILE: src/Agent.Listener/Diagnostics/MtuInfo.cs
  class MtuInfo (line 5) | class MtuInfo : IDiagnosticInfo
    method Execute (line 7) | public void Execute(ITerminal terminal)

FILE: src/Agent.Listener/Diagnostics/PingTest.cs
  class PingTest (line 5) | class PingTest : IDiagnosticTest
    method Execute (line 7) | public bool Execute(ITerminal terminal)

FILE: src/Agent.Listener/DistributedTask.Pipelines/TaskResources.g.cs
  class TaskResources (line 8) | internal static class TaskResources
    method PlanNotFound (line 10) | internal static string PlanNotFound(params object[] args)
    method PlanSecurityDeleteError (line 20) | internal static string PlanSecurityDeleteError(params object[] args)
    method PlanSecurityWriteError (line 30) | internal static string PlanSecurityWriteError(params object[] args)
    method HubExtensionNotFound (line 40) | internal static string HubExtensionNotFound(params object[] args)
    method SecurityTokenNotFound (line 50) | internal static string SecurityTokenNotFound(params object[] args)
    method TimelineNotFound (line 60) | internal static string TimelineNotFound(params object[] args)
    method LogWithNoContentError (line 70) | internal static string LogWithNoContentError(params object[] args)
    method LogWithNoContentLengthError (line 80) | internal static string LogWithNoContentLengthError(params object[] args)
    method UnsupportedRollbackContainers (line 90) | internal static string UnsupportedRollbackContainers(params object[] a...
    method HubNotFound (line 100) | internal static string HubNotFound(params object[] args)
    method MultipleHubResolversNotSupported (line 110) | internal static string MultipleHubResolversNotSupported(params object[...
    method HubExists (line 120) | internal static string HubExists(params object[] args)
    method TimelineRecordInvalid (line 130) | internal static string TimelineRecordInvalid(params object[] args)
    method TimelineRecordNotFound (line 140) | internal static string TimelineRecordNotFound(params object[] args)
    method FailedToObtainJobAuthorization (line 150) | internal static string FailedToObtainJobAuthorization(params object[] ...
    method TaskInputRequired (line 160) | internal static string TaskInputRequired(params object[] args)
    method PlanOrchestrationTerminated (line 170) | internal static string PlanOrchestrationTerminated(params object[] args)
    method PlanAlreadyStarted (line 180) | internal static string PlanAlreadyStarted(params object[] args)
    method TimelineExists (line 190) | internal static string TimelineExists(params object[] args)
    method InvalidContainer (line 200) | internal static string InvalidContainer(params object[] args)
    method EndpointNotFound (line 210) | internal static string EndpointNotFound(params object[] args)
    method ShouldStartWithEndpointUrl (line 220) | internal static string ShouldStartWithEndpointUrl(params object[] args)
    method TaskExecutionDefinitionInvalid (line 230) | internal static string TaskExecutionDefinitionInvalid(params object[] ...
    method ServerExecutionFailure (line 240) | internal static string ServerExecutionFailure(params object[] args)
    method UnsupportedTaskCountForServerJob (line 250) | internal static string UnsupportedTaskCountForServerJob(params object[...
    method TaskServiceBusPublishFailed (line 260) | internal static string TaskServiceBusPublishFailed(params object[] args)
    method TaskServiceBusExecutionFailure (line 270) | internal static string TaskServiceBusExecutionFailure(params object[] ...
    method TimeoutFormatNotValid (line 280) | internal static string TimeoutFormatNotValid(params object[] args)
    method JobNotFound (line 290) | internal static string JobNotFound(params object[] args)
    method PlanGroupNotFound (line 300) | internal static string PlanGroupNotFound(params object[] args)
    method PlanSecurityReadError (line 310) | internal static string PlanSecurityReadError(params object[] args)
    method SaveJobOutputVariablesError (line 320) | internal static string SaveJobOutputVariablesError(params object[] args)
    method VstsAccessTokenCacheKeyLookupResultIsInvalidError (line 330) | internal static string VstsAccessTokenCacheKeyLookupResultIsInvalidErr...
    method VstsAccessTokenKeyNotFoundError (line 340) | internal static string VstsAccessTokenKeyNotFoundError(params object[]...
    method VstsAccessTokenCacheKeyLookupResultIsNullError (line 350) | internal static string VstsAccessTokenCacheKeyLookupResultIsNullError(...
    method VstsAccessTokenIsNullError (line 360) | internal static string VstsAccessTokenIsNullError(params object[] args)
    method VstsIdTokenKeyNotFoundError (line 370) | internal static string VstsIdTokenKeyNotFoundError(params object[] args)
    method VstsNonceNotFoundError (line 380) | internal static string VstsNonceNotFoundError(params object[] args)
    method FailedToGenerateToken (line 390) | internal static string FailedToGenerateToken(params object[] args)
    method FailedToObtainToken (line 400) | internal static string FailedToObtainToken(params object[] args)
    method InvalidAzureEndpointAuthorizer (line 410) | internal static string InvalidAzureEndpointAuthorizer(params object[] ...
    method InvalidAzureManagementCertificate (line 420) | internal static string InvalidAzureManagementCertificate(params object...
    method InvalidEndpointAuthorizer (line 430) | internal static string InvalidEndpointAuthorizer(params object[] args)
    method InvalidEndpointId (line 440) | internal static string InvalidEndpointId(params object[] args)
    method InvalidScopeId (line 450) | internal static string InvalidScopeId(params object[] args)
    method ResourceUrlNotSupported (line 460) | internal static string ResourceUrlNotSupported(params object[] args)
    method NoAzureCertificate (line 470) | internal static string NoAzureCertificate(params object[] args)
    method NoAzureServicePrincipal (line 480) | internal static string NoAzureServicePrincipal(params object[] args)
    method NoUsernamePassword (line 490) | internal static string NoUsernamePassword(params object[] args)
    method NullSessionToken (line 500) | internal static string NullSessionToken(params object[] args)
    method MissingProperty (line 510) | internal static string MissingProperty(params object[] args)
    method ServiceEndPointNotFound (line 520) | internal static string ServiceEndPointNotFound(params object[] args)
    method InvalidLicenseHub (line 530) | internal static string InvalidLicenseHub(params object[] args)
    method HttpMethodNotRecognized (line 540) | internal static string HttpMethodNotRecognized(params object[] args)
    method TaskDefinitionInvalid (line 550) | internal static string TaskDefinitionInvalid(params object[] args)
    method UrlCannotBeEmpty (line 560) | internal static string UrlCannotBeEmpty(params object[] args)
    method UrlIsNotCorrect (line 570) | internal static string UrlIsNotCorrect(params object[] args)
    method UrlShouldComeFromEndpointOrExplicitelySpecified (line 580) | internal static string UrlShouldComeFromEndpointOrExplicitelySpecified...
    method WaitForCompletionInvalid (line 590) | internal static string WaitForCompletionInvalid(params object[] args)
    method HttpRequestTimeoutError (line 600) | internal static string HttpRequestTimeoutError(params object[] args)
    method UnableToAcquireLease (line 610) | internal static string UnableToAcquireLease(params object[] args)
    method UnableToCompleteOperationSecurely (line 620) | internal static string UnableToCompleteOperationSecurely(params object...
    method CancellingHttpRequestException (line 630) | internal static string CancellingHttpRequestException(params object[] ...
    method EncryptionKeyNotFound (line 640) | internal static string EncryptionKeyNotFound(params object[] args)
    method ProcessingHttpRequestException (line 650) | internal static string ProcessingHttpRequestException(params object[] ...
    method AzureKeyVaultTaskName (line 660) | internal static string AzureKeyVaultTaskName(params object[] args)
    method AzureKeyVaultServiceEndpointIdMustBeValidGuid (line 670) | internal static string AzureKeyVaultServiceEndpointIdMustBeValidGuid(p...
    method AzureKeyVaultKeyVaultNameMustBeValid (line 680) | internal static string AzureKeyVaultKeyVaultNameMustBeValid(params obj...
    method AzureKeyVaultLastRefreshedOnMustBeValid (line 690) | internal static string AzureKeyVaultLastRefreshedOnMustBeValid(params ...
    method InvalidAzureKeyVaultVariableGroupProviderData (line 700) | internal static string InvalidAzureKeyVaultVariableGroupProviderData(p...
    method VariableGroupTypeNotSupported (line 710) | internal static string VariableGroupTypeNotSupported(params object[] a...
    method TaskRequestMessageTypeNotSupported (line 720) | internal static string TaskRequestMessageTypeNotSupported(params objec...
    method HttpHandlerUnableToProcessError (line 730) | internal static string HttpHandlerUnableToProcessError(params object[]...
    method YamlFrontMatterNotClosed (line 740) | internal static string YamlFrontMatterNotClosed(params object[] args)
    method YamlFrontMatterNotValid (line 750) | internal static string YamlFrontMatterNotValid(params object[] args)
    method YamlFileCount (line 760) | internal static string YamlFileCount(params object[] args)
    method MustacheEvaluationTimeout (line 770) | internal static string MustacheEvaluationTimeout(params object[] args)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/CheckoutStep.cs
  class CheckoutStep (line 11) | internal sealed class CheckoutStep : ISimpleStep
    method Clone (line 21) | public ISimpleStep Clone()
    method GetVariables (line 32) | internal IList<Variable> GetVariables(IList<ProcessResource> resources)
    method TryGetDataValue (line 80) | private static String TryGetDataValue(ProcessResource repo, String key)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/DeploymentTarget.cs
  class DeploymentTarget (line 9) | internal sealed class DeploymentTarget : IPhaseTarget

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IPhase.cs
  type IPhase (line 6) | internal interface IPhase

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IPhaseTarget.cs
  type IPhaseTarget (line 9) | internal interface IPhaseTarget

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ISimpleStep.cs
  type ISimpleStep (line 6) | internal interface ISimpleStep : IStep
    method Clone (line 8) | ISimpleStep Clone();

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IStep.cs
  type IStep (line 8) | internal interface IStep

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IVariable.cs
  type IVariable (line 6) | internal interface IVariable

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Phase.cs
  class Phase (line 9) | internal class Phase : IPhase

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhaseSelector.cs
  class PhaseSelector (line 9) | internal sealed class PhaseSelector

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhasesTemplate.cs
  class PhasesTemplate (line 11) | internal class PhasesTemplate : StepsTemplate

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhasesTemplateReference.cs
  class PhasesTemplateReference (line 9) | internal class PhasesTemplateReference : StepsTemplateReference, IPhase

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Process.cs
  class Process (line 8) | internal sealed class Process : Phase

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessResource.cs
  class ProcessResource (line 9) | internal sealed class ProcessResource

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessTemplate.cs
  class ProcessTemplate (line 10) | internal sealed class ProcessTemplate : PhasesTemplate

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessTemplateReference.cs
  class ProcessTemplateReference (line 6) | internal sealed class ProcessTemplateReference : PhasesTemplateReference

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/QueueTarget.cs
  class QueueTarget (line 9) | internal sealed class QueueTarget : IPhaseTarget

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ServerTarget.cs
  class ServerTarget (line 9) | internal sealed class ServerTarget : IPhaseTarget

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepGroup.cs
  class StepGroup (line 9) | internal sealed class StepGroup : IStep

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepsTemplate.cs
  class StepsTemplate (line 9) | internal class StepsTemplate

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepsTemplateReference.cs
  class StepsTemplateReference (line 9) | internal class StepsTemplateReference : IStep

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/TaskReference.cs
  class TaskReference (line 8) | internal sealed class TaskReference
    method Clone (line 14) | internal TaskReference Clone()

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/TaskStep.cs
  class TaskStep (line 9) | internal sealed class TaskStep : ISimpleStep
    method Clone (line 30) | public ISimpleStep Clone()

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Variable.cs
  class Variable (line 8) | internal sealed class Variable : IVariable

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/VariablesTemplate.cs
  class VariablesTemplate (line 8) | internal sealed class VariablesTemplate

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/VariablesTemplateReference.cs
  class VariablesTemplateReference (line 9) | internal sealed class VariablesTemplateReference : IVariable

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/FileData.cs
  class FileData (line 9) | [EditorBrowsable(EditorBrowsableState.Never)]

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/IFileProvider.cs
  type IFileProvider (line 9) | [EditorBrowsable(EditorBrowsableState.Never)]
    method GetFile (line 12) | FileData GetFile(String path);
    method ResolvePath (line 14) | String ResolvePath(String defaultRoot, String path);

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/ITraceWriter.cs
  type ITraceWriter (line 9) | [EditorBrowsable(EditorBrowsableState.Never)]
    method Info (line 12) | void Info(String format, params Object[] args);
    method Verbose (line 14) | void Verbose(String format, params Object[] args);

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/ParseOptions.cs
  class ParseOptions (line 9) | [EditorBrowsable(EditorBrowsableState.Never)]
    method ParseOptions (line 12) | public ParseOptions()
    method ParseOptions (line 16) | internal ParseOptions(ParseOptions copy)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/PipelineParser.cs
  class PipelineParser (line 20) | [EditorBrowsable(EditorBrowsableState.Never)]
    method PipelineParser (line 23) | public PipelineParser(ITraceWriter trace, IFileProvider fileProvider, ...
    method DeserializeAndSerialize (line 48) | [EditorBrowsable(EditorBrowsableState.Never)]
    method LoadInternal (line 68) | internal Process LoadInternal(String defaultRoot, String path, IDictio...
    method LoadFile (line 168) | private PipelineFile<TObject> LoadFile<TObject, TConverter>(String pat...
    method ResolveTemplates (line 293) | private void ResolveTemplates(Process process, String defaultRoot, Can...
    method ResolveTemplates (line 338) | private void ResolveTemplates(IList<IPhase> phases, String defaultRoot...
    method ResolveTemplates (line 394) | private void ResolveTemplates(IList<IVariable> variables, String defau...
    method ResolveTemplates (line 425) | private void ResolveTemplates(IList<IStep> steps, String defaultRoot, ...
    method ApplyStepOverrides (line 457) | private static void ApplyStepOverrides(PhasesTemplateReference referen...
    method ApplyStepOverrides (line 487) | private static void ApplyStepOverrides(IDictionary<String, IList<ISimp...
    method MergeResources (line 520) | private static List<ProcessResource> MergeResources(IList<ProcessResou...
    class PipelineFile (line 530) | private sealed class PipelineFile<T>
    type TraceFileContent (line 539) | private struct TraceFileContent
      method TraceFileContent (line 541) | public TraceFileContent(String header, String value)
      method ToString (line 547) | public override String ToString()
    type TraceObject (line 574) | private struct TraceObject<TObject, TConverter>
      method TraceObject (line 577) | public TraceObject(String header, TObject value)
      method ToString (line 583) | public override String ToString()

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.general.cs
  class ConverterUtil (line 16) | internal static partial class ConverterUtil
    method ReadBoolean (line 18) | internal static Boolean ReadBoolean(IParser parser)
    method ReadExactString (line 39) | internal static void ReadExactString(IParser parser, String expected)
    method ReadInt32 (line 49) | internal static Int32 ReadInt32(IParser parser)
    method ReadNonEmptyString (line 65) | internal static String ReadNonEmptyString(IParser parser)
    method ReadMappingOfStringString (line 82) | internal static IDictionary<String, String> ReadMappingOfStringString(...
    method ReadMapping (line 95) | internal static IDictionary<String, Object> ReadMapping(IParser parser...
    method ReadSequenceOfString (line 129) | internal static IList<String> ReadSequenceOfString(IParser parser)
    method ReadSequence (line 141) | internal static IList<Object> ReadSequence(IParser parser, Int32 depth...
    method ValidateNull (line 171) | internal static void ValidateNull(Object prevObj, String prevName, Str...
    method WriteMapping (line 179) | internal static void WriteMapping(IEmitter emitter, IDictionary<String...
    method WriteMapping (line 207) | internal static void WriteMapping(IEmitter emitter, IDictionary<String...
    method WriteSequence (line 220) | internal static void WriteSequence(IEmitter emitter, IEnumerable value)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.phases.cs
  class ConverterUtil (line 17) | internal static partial class ConverterUtil
    method ReadPhases (line 19) | internal static IList<IPhase> ReadPhases(IParser parser, Boolean simpl...
    method ReadPhase (line 31) | internal static IPhase ReadPhase(IParser parser, Boolean simpleOnly)
    method ReadDeploymentTarget (line 145) | internal static DeploymentTarget ReadDeploymentTarget(IParser parser)
    method ReadQueueTarget (line 209) | internal static QueueTarget ReadQueueTarget(IParser parser)
    method ReadServerTarget (line 276) | internal static ServerTarget ReadServerTarget(IParser parser)
    method SetProperty (line 328) | internal static void SetProperty(IParser parser, PhasesTemplateReferen...
    method SetProperty (line 355) | internal static void SetProperty(IParser parser, PhaseSelector selecto...
    method WritePhases (line 367) | internal static void WritePhases(IEmitter emitter, IList<IPhase> phases)
    method WritePhase (line 378) | internal static void WritePhase(IEmitter emitter, IPhase phase, Boolea...
    method WritePhasesTemplate (line 678) | internal static void WritePhasesTemplate(IEmitter emitter, PhasesTempl...

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.processes.cs
  class ConverterUtil (line 17) | internal static partial class ConverterUtil
    method ReadProcessResources (line 19) | internal static IList<ProcessResource> ReadProcessResources(IParser pa...
    method ReadProcessTemplateReference (line 61) | internal static ProcessTemplateReference ReadProcessTemplateReference(...
    method WriteProcessResources (line 75) | internal static void WriteProcessResources(IEmitter emitter, IList<Pro...

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.steps.cs
  class ConverterUtil (line 17) | internal static partial class ConverterUtil
    method ReadSteps (line 19) | internal static IList<IStep> ReadSteps(IParser parser, Boolean simpleO...
    method ReadStep (line 31) | internal static IStep ReadStep(IParser parser, Boolean simpleOnly = fa...
    method ReadStepOverrides (line 274) | internal static IDictionary<String, IList<ISimpleStep>> ReadStepOverri...
    method SetProperty (line 287) | internal static void SetProperty(IParser parser, StepsTemplateReferenc...
    method SetTaskControlProperty (line 304) | internal static void SetTaskControlProperty(IParser parser, TaskStep t...
    method WriteSteps (line 331) | internal static void WriteSteps(IEmitter emitter, IList<IStep> steps)
    method WriteStep (line 342) | internal static void WriteStep(IEmitter emitter, IStep step, Boolean n...
    method WriteStepOverrides (line 552) | internal static void WriteStepOverrides(IEmitter emitter, IDictionary<...
    method WriteStepsTemplate (line 564) | internal static void WriteStepsTemplate(IEmitter emitter, StepsTemplat...
    method WriteTaskPreInputProperties (line 583) | private static void WriteTaskPreInputProperties(IEmitter emitter, Task...
    method WriteTaskPostInputProperties (line 616) | private static void WriteTaskPostInputProperties(IEmitter emitter, Tas...

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.variables.cs
  class ConverterUtil (line 17) | internal static partial class ConverterUtil
    method ReadVariables (line 19) | internal static IList<IVariable> ReadVariables(IParser parser, Boolean...
    method WriteVariables (line 100) | internal static void WriteVariables(IEmitter emitter, IList<IVariable>...

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/PhasesTemplateConverter.cs
  class PhasesTemplateConverter (line 17) | internal sealed class PhasesTemplateConverter : IYamlTypeConverter
    method Accepts (line 19) | public Boolean Accepts(Type type)
    method ReadYaml (line 24) | public Object ReadYaml(IParser parser, Type type)
    method WriteYaml (line 59) | public void WriteYaml(IEmitter emitter, Object value, Type type)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ProcessConverter.cs
  class ProcessConverter (line 17) | internal sealed class ProcessConverter : IYamlTypeConverter
    method Accepts (line 19) | public Boolean Accepts(Type type)
    method ReadYaml (line 24) | public Object ReadYaml(IParser parser, Type type)
    method WriteYaml (line 150) | public void WriteYaml(IEmitter emitter, Object value, Type type)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ProcessTemplateConverter.cs
  class ProcessTemplateConverter (line 17) | internal sealed class ProcessTemplateConverter : IYamlTypeConverter
    method Accepts (line 19) | public Boolean Accepts(Type type)
    method ReadYaml (line 24) | public Object ReadYaml(IParser parser, Type type)
    method WriteYaml (line 67) | public void WriteYaml(IEmitter emitter, Object value, Type type)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/StepsTemplateConverter.cs
  class StepsTemplateConverter (line 17) | internal sealed class StepsTemplateConverter : IYamlTypeConverter
    method Accepts (line 19) | public Boolean Accepts(Type type)
    method ReadYaml (line 24) | public Object ReadYaml(IParser parser, Type type)
    method WriteYaml (line 45) | public void WriteYaml(IEmitter emitter, Object value, Type type)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/VariablesTemplateConverter.cs
  class VariablesTemplateConverter (line 17) | internal sealed class VariablesTemplateConverter : IYamlTypeConverter
    method Accepts (line 19) | public Boolean Accepts(Type type)
    method ReadYaml (line 24) | public Object ReadYaml(IParser parser, Type type)
    method WriteYaml (line 45) | public void WriteYaml(IEmitter emitter, Object value, Type type)

FILE: src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/YamlConstants.cs
  class YamlConstants (line 8) | internal static class YamlConstants

FILE: src/Agent.Listener/JobDispatcher.cs
  type IJobDispatcher (line 27) | [ServiceLocator(Default = typeof(JobDispatcher))]
    method Run (line 31) | void Run(Pipelines.AgentJobRequestMessage message, bool runOnce = false);
    method Cancel (line 32) | bool Cancel(JobCancelMessage message);
    method MetadataUpdate (line 33) | void MetadataUpdate(JobMetadataMessage message);
    method WaitAsync (line 34) | Task WaitAsync(CancellationToken token);
    method ShutdownAsync (line 35) | Task ShutdownAsync();
  class JobDispatcher (line 43) | public sealed class JobDispatcher : AgentService, IJobDispatcher
    method Initialize (line 59) | public override void Initialize(IHostContext hostContext)
    method Run (line 78) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method MetadataUpdate (line 116) | public void MetadataUpdate(JobMetadataMessage jobMetadataMessage)
    method Cancel (line 133) | public bool Cancel(JobCancelMessage jobCancelMessage)
    method WaitAsync (line 155) | public async Task WaitAsync(CancellationToken token)
    method ShutdownAsync (line 200) | public async Task ShutdownAsync()
    method EnsureDispatchFinished (line 234) | private async Task EnsureDispatchFinished(WorkerDispatcher jobDispatch...
    method RunOnceAsync (line 347) | private async Task RunOnceAsync(Pipelines.AgentJobRequestMessage messa...
    method RunAsync (line 364) | private async Task RunAsync(Pipelines.AgentJobRequestMessage message, ...
    method RenewJobRequestAsync (line 804) | public async Task RenewJobRequestAsync(int poolId, long requestId, Gui...
    method CompleteJobRequestAsync (line 935) | private async Task CompleteJobRequestAsync(int poolId, Pipelines.Agent...
    method ShouldUseEnhancedCrashHandling (line 991) | private bool ShouldUseEnhancedCrashHandling(Pipelines.AgentJobRequestM...
    method CreateJobServerConnectionAsync (line 1003) | private async Task<VssConnection> CreateJobServerConnectionAsync(Pipel...
    method ReportJobCompletionEventAsync (line 1051) | private async Task ReportJobCompletionEventAsync(Pipelines.AgentJobReq...
    method LogWorkerProcessUnhandledException (line 1114) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method PublishTelemetry (line 1142) | private async Task PublishTelemetry(Pipelines.AgentJobRequestMessage m...
    class WorkerDispatcher (line 1169) | private class WorkerDispatcher : IDisposable
      method WorkerDispatcher (line 1184) | public WorkerDispatcher(Guid jobId, long requestId)
      method Cancel (line 1194) | public bool Cancel(TimeSpan timeout)
      method UpdateMetadata (line 1230) | public void UpdateMetadata(JobMetadataMessage message)
      method ResetMetadataSource (line 1238) | public void ResetMetadataSource()
      method Dispose (line 1243) | public void Dispose()
      method Dispose (line 1249) | private void Dispose(bool disposing)
    method HandleWorkerTimeoutAsync (line 1280) | private async Task HandleWorkerTimeoutAsync(

FILE: src/Agent.Listener/MessageListener.cs
  type IMessageListener (line 27) | [ServiceLocator(Default = typeof(MessageListener))]
    method CreateSessionAsync (line 30) | Task<Boolean> CreateSessionAsync(CancellationToken token);
    method DeleteSessionAsync (line 31) | Task DeleteSessionAsync();
    method GetNextMessageAsync (line 32) | Task<TaskAgentMessage> GetNextMessageAsync(CancellationToken token);
    method KeepAlive (line 33) | Task KeepAlive(CancellationToken token);
    method DeleteMessageAsync (line 34) | Task DeleteMessageAsync(TaskAgentMessage message);
  class MessageListener (line 37) | public sealed class MessageListener : AgentService, IMessageListener
    method Initialize (line 56) | public override void Initialize(IHostContext hostContext)
    method GetRetryInterval (line 72) | private TimeSpan GetRetryInterval(
    method CreateSessionAsync (line 100) | public async Task<Boolean> CreateSessionAsync(CancellationToken token)
    method DeleteSessionAsync (line 218) | public async Task DeleteSessionAsync()
    method GetNextMessageAsync (line 229) | public async Task<TaskAgentMessage> GetNextMessageAsync(CancellationTo...
    method DeleteMessageAsync (line 343) | public async Task DeleteMessageAsync(TaskAgentMessage message)
    method KeepAlive (line 357) | public async Task KeepAlive(CancellationToken token)
    method DecryptMessage (line 392) | private TaskAgentMessage DecryptMessage(TaskAgentMessage message)
    method GetMessageDecryptor (line 415) | private ICryptoTransform GetMessageDecryptor(
    method IsGetNextMessageExceptionRetriable (line 434) | private bool IsGetNextMessageExceptionRetriable(Exception ex)
    method IsSessionCreationExceptionRetriable (line 452) | private bool IsSessionCreationExceptionRetriable(Exception ex)

FILE: src/Agent.Listener/Program.cs
  class Program (line 19) | public static class Program
    method Main (line 23) | public static int Main(string[] args)
    method MainAsync (line 41) | private static async Task<int> MainAsync(IHostContext context, string[...

FILE: src/Agent.Listener/SelfUpdater.cs
  type ISelfUpdater (line 25) | [ServiceLocator(Default = typeof(SelfUpdater))]
    method SelfUpdate (line 28) | Task<bool> SelfUpdate(AgentRefreshMessage updateMessage, IJobDispatche...
  class SelfUpdater (line 31) | public class SelfUpdater : AgentService, ISelfUpdater
    method Initialize (line 47) | public override void Initialize(IHostContext hostContext)
    method SelfUpdate (line 65) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method UpdateNeeded (line 122) | private async Task<bool> UpdateNeeded(string targetVersion, Cancellati...
    method HashValidation (line 179) | private bool HashValidation(string archiveFile)
    method DownloadLatestAgent (line 231) | private async Task DownloadLatestAgent(CancellationToken token)
    method DeletePreviousVersionAgentBackup (line 486) | private void DeletePreviousVersionAgentBackup(CancellationToken token)
    method GenerateUpdateScript (line 564) | private string GenerateUpdateScript(bool restartInteractiveAgent)
    method UpdateAgentUpdateStateAsync (line 603) | private async Task UpdateAgentUpdateStateAsync(string currentState)
    method VerifyAgentAuthenticode (line 627) | private bool VerifyAgentAuthenticode(string agentFolderPath)
  class UpdaterKnobValueContext (line 659) | public class UpdaterKnobValueContext : IKnobValueContext
    method GetVariableValueOrDefault (line 661) | public string GetVariableValueOrDefault(string variableName)
    method GetScopedEnvironment (line 666) | public IScopedEnvironment GetScopedEnvironment()

FILE: src/Agent.Listener/Telemetry/CustomerIntelligenceServer.cs
  type ICustomerIntelligenceServer (line 12) | [ServiceLocator(Default = typeof(CustomerIntelligenceServer))]
    method Initialize (line 15) | void Initialize(VssConnection connection);
    method PublishEventsAsync (line 16) | Task PublishEventsAsync(CustomerIntelligenceEvent[] ciEvents);
  class CustomerIntelligenceServer (line 20) | public class CustomerIntelligenceServer : AgentService, ICustomerIntelli...
    method Initialize (line 24) | public void Initialize(VssConnection connection)
    method PublishEventsAsync (line 30) | public Task PublishEventsAsync(CustomerIntelligenceEvent[] ciEvents)

FILE: src/Agent.Listener/Telemetry/TelemetryPublisher.cs
  type IAgenetListenerTelemetryPublisher (line 17) | [ServiceLocator(Default = typeof(TelemetryPublisher))]
    method PublishEvent (line 20) | public Task PublishEvent(IHostContext context, Command command);
  class TelemetryPublisher (line 23) | public sealed class TelemetryPublisher : AgentService, IAgenetListenerTe...
    method PublishEvent (line 31) | public async Task PublishEvent(IHostContext context, Command command)
    method PublishEventsAsync (line 102) | private async Task PublishEventsAsync(IHostContext context, CustomerIn...
  class WellKnownEventTrackProperties (line 112) | internal static class WellKnownEventTrackProperties

FILE: src/Agent.Listener/Telemetry/WorkerCrashTelemetryPublisher.cs
  type IWorkerCrashTelemetryPublisher (line 13) | [ServiceLocator(Default = typeof(WorkerCrashTelemetryPublisher))]
    method PublishWorkerCrashTelemetryAsync (line 16) | Task PublishWorkerCrashTelemetryAsync(IHostContext hostContext, Guid j...
  class WorkerCrashTelemetryPublisher (line 19) | public sealed class WorkerCrashTelemetryPublisher : AgentService, IWorke...
    method PublishWorkerCrashTelemetryAsync (line 21) | public async Task PublishWorkerCrashTelemetryAsync(IHostContext hostCo...

FILE: src/Agent.Listener/ValidationHelper/InstallerVerifier.cs
  class InstallerVerifier (line 12) | public static class InstallerVerifier
    method VerifyFileSignedByMicrosoft (line 29) | public static void VerifyFileSignedByMicrosoft(string filePath, Tracin...
    method VerifyFileAuthenticodeSignatureHelper (line 137) | private static WinTrustData VerifyFileAuthenticodeSignatureHelper(stri...
    method GetVerboseWinVerifyTrustResultErrorString (line 205) | private static string GetVerboseWinVerifyTrustResultErrorString(WinVer...
    method ConvertWinVerifyTrustResultToHex (line 226) | private static string ConvertWinVerifyTrustResultToHex(WinVerifyTrustR...

FILE: src/Agent.Listener/ValidationHelper/UnsafeNativeMethods.cs
  type WinVerifyTrustResult (line 12) | internal enum WinVerifyTrustResult : uint
  type CRYPT_PROVIDER_SGNR (line 26) | [StructLayout(LayoutKind.Sequential)]
  type CERT_CHAIN_POLICY_PARA (line 45) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method CERT_CHAIN_POLICY_PARA (line 52) | public CERT_CHAIN_POLICY_PARA(int size)
  type CERT_CHAIN_POLICY_STATUS (line 64) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method CERT_CHAIN_POLICY_STATUS (line 73) | public CERT_CHAIN_POLICY_STATUS(int size)
  type CERT_STRONG_SIGN_PARA (line 86) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method CERT_STRONG_SIGN_PARA (line 95) | public CERT_STRONG_SIGN_PARA(string oId)
  type WinTrustFileInfo (line 106) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method WinTrustFileInfo (line 114) | public WinTrustFileInfo(string filePath)
  type CRYPT_PROVIDER_CERT (line 126) | [StructLayout(LayoutKind.Sequential)]
  class UnsafeNativeMethods (line 149) | internal static class UnsafeNativeMethods
    method WinVerifyTrust (line 157) | [DllImport("wintrust.dll", ExactSpelling = true, SetLastError = false,...
    method Win8VerifyTrust (line 164) | [DllImport("wintrust.dll", EntryPoint = "WinVerifyTrust", ExactSpellin...
    method WTHelperProvDataFromStateData (line 172) | [DllImport("wintrust.dll", SetLastError = false, CharSet = CharSet.Uni...
    method WTHelperGetProvSignerFromChain (line 177) | [DllImport("wintrust.dll", SetLastError = false, CharSet = CharSet.Uni...
    method CertVerifyCertificateChainPolicy (line 185) | [DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    method WTHelperGetProvCertFromChain (line 193) | [DllImport("wintrust.dll", SetLastError = false, CharSet = CharSet.Uni...
  class FileInfoSafeHandle (line 202) | internal class FileInfoSafeHandle : SafeHandleZeroOrMinusOneIsInvalid
    method FileInfoSafeHandle (line 204) | public FileInfoSafeHandle(WinTrustFileInfo info)
    method ReleaseHandle (line 211) | protected override bool ReleaseHandle()
  class WINTRUST_SIGNATURE_SETTINGS (line 227) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method WINTRUST_SIGNATURE_SETTINGS (line 237) | public WINTRUST_SIGNATURE_SETTINGS(CERT_STRONG_SIGN_PARA strongSignParam)
    method Dispose (line 248) | public void Dispose()
    method Dispose (line 254) | protected virtual void Dispose(bool disposing)
  class WinTrustData (line 267) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method WinTrustData (line 284) | public WinTrustData()
    method WinTrustData (line 288) | public WinTrustData(string fileName)
    method Dispose (line 299) | public void Dispose()
    method Dispose (line 305) | protected virtual void Dispose(bool disposing)
  class Win8TrustData (line 342) | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    method Win8TrustData (line 347) | public Win8TrustData(WinTrustFileInfo fileInfo, WINTRUST_SIGNATURE_SET...
    method Dispose (line 361) | protected override void Dispose(bool disposing)

FILE: src/Agent.Listener/ValidationHelper/Utility.cs
  class Utility (line 5) | public class Utility
    method IsWin8OrAbove (line 10) | public static bool IsWin8OrAbove()

FILE: src/Agent.Listener/ValidationHelper/VerificationException.cs
  class VerificationException (line 10) | [SerializableAttribute]
    method VerificationException (line 13) | public VerificationException(string message) : base(message)
    method VerificationException (line 17) | public VerificationException(string message, Exception ex)
    method VerificationException (line 23) | protected VerificationException(SerializationInfo info, StreamingConte...

FILE: src/Agent.PluginHost/Program.cs
  class Program (line 22) | public static class Program
    method Main (line 27) | public static int Main(string[] args)
    method ResolveAssembly (line 204) | private static Assembly ResolveAssembly(AssemblyLoadContext context, A...
    method Console_CancelKeyPress (line 214) | private static void Console_CancelKeyPress(object sender, ConsoleCance...

FILE: src/Agent.Plugins/Artifact/ArtifactDownloadParameters.cs
  class ArtifactDownloadParameters (line 9) | internal class ArtifactDownloadParameters
  type BuildArtifactRetrievalOptions (line 39) | internal enum BuildArtifactRetrievalOptions

FILE: src/Agent.Plugins/Artifact/ArtifactItemFilters.cs
  class ArtifactItemFilters (line 22) | class ArtifactItemFilters
    method ArtifactItemFilters (line 27) | public ArtifactItemFilters(VssConnection connection, IAppTraceSource t...
    method GetMapToFilterItems (line 40) | public dynamic GetMapToFilterItems(List<string> paths, string[] minima...
    method ExpandBraces (line 152) | private string[] ExpandBraces(string pattern, Options matchOptions)
    method UpdatePatternsMap (line 168) | private void UpdatePatternsMap(bool isIncludePattern, List<string> pat...
    method ApplyPatternsMapToContainerItems (line 200) | public List<FileContainerItem> ApplyPatternsMapToContainerItems(List<F...
    method ApplyPatternsMapToFileShareItems (line 221) | public List<FileInfo> ApplyPatternsMapToFileShareItems(IEnumerable<Fil...
    method FilterItemsByPatterns (line 245) | private List<string> FilterItemsByPatterns(List<string> paths, IEnumer...
    method RemoveSourceDirFromPath (line 266) | public string RemoveSourceDirFromPath(FileInfo file, string sourcePath)
    method CloneMiniMatchOptions (line 276) | private Options CloneMiniMatchOptions(Options currentMiniMatchOptions)

FILE: src/Agent.Plugins/Artifact/ArtifactProviderFactory.cs
  class ArtifactProviderFactory (line 14) | internal class ArtifactProviderFactory
    method ArtifactProviderFactory (line 24) | public ArtifactProviderFactory(AgentTaskPluginExecutionContext context...
    method GetProvider (line 31) | public IArtifactProvider GetProvider(BuildArtifact buildArtifact)

FILE: src/Agent.Plugins/Artifact/BuildServer.cs
  class BuildServer (line 16) | public class BuildServer
    method BuildServer (line 20) | public BuildServer(VssConnection connection)
    method AssociateArtifactAsync (line 27) | public async Task<BuildArtifact> AssociateArtifactAsync(
    method GetArtifact (line 53) | public async Task<BuildArtifact> GetArtifact(
    method GetArtifactsAsync (line 62) | public async Task<List<BuildArtifact>> GetArtifactsAsync(
    method GetArtifactWithProjectNameAsync (line 71) | public async Task<BuildArtifact> GetArtifactWithProjectNameAsync(
    method GetArtifactsWithProjectNameAsync (line 80) | public async Task<List<BuildArtifact>> GetArtifactsWithProjectNameAsync(
    method GetDefinitionsAsync (line 88) | public async Task<List<BuildDefinitionReference>> GetDefinitionsAsync(

FILE: src/Agent.Plugins/Artifact/FileContainerProvider.cs
  class FileContainerProvider (line 35) | internal class FileContainerProvider : IArtifactProvider
    method FileContainerProvider (line 41) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method DownloadSingleArtifactAsync (line 55) | public async Task DownloadSingleArtifactAsync(
    method DownloadMultipleArtifactsAsync (line 74) | public async Task DownloadMultipleArtifactsAsync(
    method ParseContainerId (line 103) | private (long, string) ParseContainerId(string resourceData)
    method DownloadFileContainerAsync (line 129) | private async Task DownloadFileContainerAsync(IEnumerable<FileContaine...
    method GetArtifactItems (line 258) | private async Task<IEnumerable<FileContainerItem>> GetArtifactItems(Ar...
    method CheckDownloads (line 312) | private void CheckDownloads(IEnumerable<FileContainerItem> items, stri...
    method DownloadFileAsync (line 336) | private async Task<Stream> DownloadFileAsync(
    method GetDomainIdAndDedupIdFromArtifactHash (line 358) | private static (IDomainId domainId, DedupIdentifier dedupId) GetDomain...
    method DownloadFileFromBlobAsync (line 374) | private async Task DownloadFileFromBlobAsync(
    method ResolveTargetPath (line 418) | private string ResolveTargetPath(string rootPath, FileContainerItem it...
    method ExtractTarsIfPresent (line 446) | private void ExtractTarsIfPresent(AgentTaskPluginExecutionContext cont...
    method ExtractTar (line 499) | private void ExtractTar(string tarArchivePath, string extractedFilesDir)
    method MoveDirectory (line 524) | private void MoveDirectory(string sourcePath, string targetPath)

FILE: src/Agent.Plugins/Artifact/FileShareProvider.cs
  class FileShareProvider (line 30) | internal class FileShareProvider : IArtifactProvider
    method FileShareProvider (line 41) | public FileShareProvider(AgentTaskPluginExecutionContext context, VssC...
    method DownloadSingleArtifactAsync (line 49) | public async Task DownloadSingleArtifactAsync(
    method DownloadMultipleArtifactsAsync (line 58) | public async Task DownloadMultipleArtifactsAsync(
    method DownloadArtifactsAsync (line 92) | private async Task<FileShareDownloadResult> DownloadArtifactsAsync(Art...
    method PublishArtifactAsync (line 111) | public async Task PublishArtifactAsync(
    method PublishArtifactUsingRobocopyAsync (line 144) | private async Task<FileSharePublishResult> PublishArtifactUsingRobocop...
    method DownloadFileShareArtifactAsync (line 202) | private async Task<ArtifactRecord> DownloadFileShareArtifactAsync(
    method WriteStreamToFile (line 304) | private async Task WriteStreamToFile(Stream stream, string filePath, i...
    method GetFileReader (line 316) | private StreamReader GetFileReader(string filePath)
    method EnsureDirectoryExists (line 327) | private void EnsureDirectoryExists(string directoryPath)
    method ValidatePath (line 336) | private string ValidatePath(string path)

FILE: src/Agent.Plugins/Artifact/IArtifactProvider.cs
  type IArtifactProvider (line 13) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA...
    method DownloadSingleArtifactAsync (line 16) | Task DownloadSingleArtifactAsync(
    method DownloadMultipleArtifactsAsync (line 22) | Task DownloadMultipleArtifactsAsync(

FILE: src/Agent.Plugins/Artifact/PipelineArtifactConstants.cs
  class PipelineArtifactConstants (line 7) | public class PipelineArtifactConstants

FILE: src/Agent.Plugins/Artifact/PipelineArtifactProvider.cs
  class PipelineArtifactProvider (line 22) | internal class PipelineArtifactProvider : IArtifactProvider
    method PipelineArtifactProvider (line 28) | public PipelineArtifactProvider(AgentTaskPluginExecutionContext contex...
    method DownloadSingleArtifactAsync (line 35) | public async Task DownloadSingleArtifactAsync(
    method DownloadMultipleArtifactsAsync (line 90) | public async Task DownloadMultipleArtifactsAsync(

FILE: src/Agent.Plugins/Artifact/PipelineArtifactServer.cs
  class PipelineArtifactServer (line 26) | public class PipelineArtifactServer
    method PipelineArtifactServer (line 30) | public PipelineArtifactServer(IAppTraceSource tracer)
    method UploadAsync (line 36) | internal async Task UploadAsync(
    method DownloadAsync (line 128) | internal Task DownloadAsync(
    method DownloadAsync (line 149) | internal async Task DownloadAsync(
    method DownloadAsyncV2 (line 228) | internal async Task DownloadAsyncV2(
  type DownloadOptions (line 327) | internal enum DownloadOptions

FILE: src/Agent.Plugins/ArtifactsTracer.cs
  class ArtifactsTracer (line 18) | public static class ArtifactsTracer
    method CreateArtifactsTracer (line 20) | public static IAppTraceSource CreateArtifactsTracer(this AgentTaskPlug...

FILE: src/Agent.Plugins/BuildArtifact/BuildArtifactPluginConstants.cs
  class BuildArtifactPluginConstants (line 8) | public class BuildArtifactPluginConstants

FILE: src/Agent.Plugins/BuildArtifact/BuildArtifactPluginV1.cs
  class BuildArtifactTaskPluginBaseV1 (line 24) | public abstract class BuildArtifactTaskPluginBaseV1 : IAgentTaskPlugin
    method RunAsync (line 30) | public Task RunAsync(AgentTaskPluginExecutionContext context, Cancella...
    method ProcessCommandInternalAsync (line 37) | protected abstract Task ProcessCommandInternalAsync(
    class TaskProperties (line 42) | protected static class TaskProperties
  class DownloadBuildArtifactTaskV1_0_0 (line 68) | public class DownloadBuildArtifactTaskV1_0_0 : BuildArtifactTaskPluginBa...
    method ProcessCommandInternalAsync (line 85) | protected override async Task ProcessCommandInternalAsync(
    method CreateDirectoryIfDoesntExist (line 341) | private string CreateDirectoryIfDoesntExist(string targetPath)
    method CleanDirectory (line 352) | private void CleanDirectory(AgentTaskPluginExecutionContext context, s...
    method GetPipelineIdAsync (line 419) | private async Task<int> GetPipelineIdAsync(AgentTaskPluginExecutionCon...
    method GetResultFilter (line 468) | private BuildResult GetResultFilter(bool allowPartiallySucceededBuilds...
    method GetProjectIdAsync (line 490) | private async Task<Guid> GetProjectIdAsync(AgentTaskPluginExecutionCon...
    method OutputBuildInfo (line 509) | private void OutputBuildInfo(AgentTaskPluginExecutionContext context, ...

FILE: src/Agent.Plugins/GitCliManager.cs
  type IGitCliManager (line 21) | public interface IGitCliManager
    method GitConfig (line 23) | Task<int> GitConfig(AgentTaskPluginExecutionContext context, string re...
  class GitCliManager (line 26) | public class GitCliManager : IGitCliManager
    method GitCliManager (line 45) | public GitCliManager(Dictionary<string, string> envs = null)
    method EnsureGitVersion (line 59) | public bool EnsureGitVersion(Version requiredVersion, bool throwOnNotM...
    method EnsureGitLFSVersion (line 72) | public bool EnsureGitLFSVersion(Version requiredVersion, bool throwOnN...
    method GetInternalGitPaths (line 85) | public (string gitPath, string gitLfsPath) GetInternalGitPaths(AgentTa...
    method LoadGitExecutionInfo (line 121) | public virtual async Task LoadGitExecutionInfo(AgentTaskPluginExecutio...
    method GitInit (line 190) | public async Task<int> GitInit(AgentTaskPluginExecutionContext context...
    method GitFetch (line 198) | public async Task<int> GitFetch(AgentTaskPluginExecutionContext contex...
    method GitLFSFetch (line 282) | public async Task<int> GitLFSFetch(AgentTaskPluginExecutionContext con...
    method GitSparseCheckout (line 324) | public async Task<int> GitSparseCheckout(AgentTaskPluginExecutionConte...
    method GitSparseCheckoutDisable (line 350) | public async Task<int> GitSparseCheckoutDisable(AgentTaskPluginExecuti...
    method GitCheckout (line 358) | public async Task<int> GitCheckout(AgentTaskPluginExecutionContext con...
    method GitClean (line 377) | public async Task<int> GitClean(AgentTaskPluginExecutionContext contex...
    method GitReset (line 396) | public async Task<int> GitReset(AgentTaskPluginExecutionContext contex...
    method GitRemoteAdd (line 403) | public async Task<int> GitRemoteAdd(AgentTaskPluginExecutionContext co...
    method GitRemoteSetUrl (line 410) | public async Task<int> GitRemoteSetUrl(AgentTaskPluginExecutionContext...
    method GitRemoteSetPushUrl (line 417) | public async Task<int> GitRemoteSetPushUrl(AgentTaskPluginExecutionCon...
    method GitSubmoduleClean (line 424) | public async Task<int> GitSubmoduleClean(AgentTaskPluginExecutionConte...
    method GitSubmoduleReset (line 443) | public async Task<int> GitSubmoduleReset(AgentTaskPluginExecutionConte...
    method GitSubmoduleUpdate (line 450) | public async Task<int> GitSubmoduleUpdate(AgentTaskPluginExecutionCont...
    method GitSubmoduleSync (line 472) | public async Task<int> GitSubmoduleSync(AgentTaskPluginExecutionContex...
    method GitGetFetchUrl (line 485) | public async Task<Uri> GitGetFetchUrl(AgentTaskPluginExecutionContext ...
    method GitConfig (line 524) | public async Task<int> GitConfig(AgentTaskPluginExecutionContext conte...
    method GitConfigExist (line 531) | public async Task<bool> GitConfigExist(AgentTaskPluginExecutionContext...
    method GitConfigExist (line 551) | public async Task<bool> GitConfigExist(AgentTaskPluginExecutionContext...
    method GitConfigRegexExist (line 570) | public async Task<bool> GitConfigRegexExist(AgentTaskPluginExecutionCo...
    method GitConfigUnset (line 583) | public async Task<int> GitConfigUnset(AgentTaskPluginExecutionContext ...
    method GitDisableAutoGC (line 590) | public async Task<int> GitDisableAutoGC(AgentTaskPluginExecutionContex...
    method GitRepack (line 597) | public async Task<int> GitRepack(AgentTaskPluginExecutionContext conte...
    method GitPrune (line 604) | public async Task<int> GitPrune(AgentTaskPluginExecutionContext contex...
    method GitLFSPrune (line 611) | public async Task<int> GitLFSPrune(AgentTaskPluginExecutionContext con...
    method GitCountObjects (line 620) | public async Task<int> GitCountObjects(AgentTaskPluginExecutionContext...
    method GitLFSInstall (line 627) | public async Task<int> GitLFSInstall(AgentTaskPluginExecutionContext c...
    method GitLFSLogs (line 634) | public async Task<int> GitLFSLogs(AgentTaskPluginExecutionContext cont...
    method GitStatus (line 641) | public async Task<int> GitStatus(AgentTaskPluginExecutionContext conte...
    method GitVersion (line 650) | public virtual async Task<Version> GitVersion(AgentTaskPluginExecution...
    method GitLfsVersion (line 683) | public virtual async Task<Version> GitLfsVersion(AgentTaskPluginExecut...
    method ExecuteGitCommandAsync (line 715) | protected virtual async Task<int> ExecuteGitCommandAsync(AgentTaskPlug...
    method ExecuteGitCommandAsync (line 743) | protected virtual async Task<int> ExecuteGitCommandAsync(AgentTaskPlug...
    method ExecuteGitCommandAsync (line 776) | protected virtual async Task<int> ExecuteGitCommandAsync(AgentTaskPlug...

FILE: src/Agent.Plugins/GitSourceProvider.cs
  class ExternalGitSourceProvider (line 25) | public class ExternalGitSourceProvider : GitSourceProvider
    method GitSupportsFetchingCommitBySha1Hash (line 27) | public override bool GitSupportsFetchingCommitBySha1Hash(GitCliManager...
    method GitSupportUseAuthHeader (line 33) | public override bool GitSupportUseAuthHeader(AgentTaskPluginExecutionC...
    method GitLfsSupportUseAuthHeader (line 38) | public override bool GitLfsSupportUseAuthHeader(AgentTaskPluginExecuti...
    method GitSupportsConfigEnv (line 43) | public override bool GitSupportsConfigEnv(AgentTaskPluginExecutionCont...
    method RequirementCheck (line 48) | public override void RequirementCheck(AgentTaskPluginExecutionContext ...
  class AuthenticatedGitSourceProvider (line 59) | public abstract class AuthenticatedGitSourceProvider : GitSourceProvider
    method GitSupportUseAuthHeader (line 61) | public override bool GitSupportUseAuthHeader(AgentTaskPluginExecutionC...
    method GitLfsSupportUseAuthHeader (line 67) | public override bool GitLfsSupportUseAuthHeader(AgentTaskPluginExecuti...
    method GitSupportsConfigEnv (line 73) | public override bool GitSupportsConfigEnv(AgentTaskPluginExecutionCont...
    method RequirementCheck (line 79) | public override void RequirementCheck(AgentTaskPluginExecutionContext ...
  class BitbucketGitSourceProvider (line 90) | public class BitbucketGitSourceProvider : AuthenticatedGitSourceProvider
    method GitSupportsFetchingCommitBySha1Hash (line 92) | public override bool GitSupportsFetchingCommitBySha1Hash(GitCliManager...
  class GitHubSourceProvider (line 98) | public class GitHubSourceProvider : AuthenticatedGitSourceProvider
    method GitSupportsFetchingCommitBySha1Hash (line 100) | public override bool GitSupportsFetchingCommitBySha1Hash(GitCliManager...
  class TfsGitSourceProvider (line 112) | public class TfsGitSourceProvider : GitSourceProvider
    method GitSupportsFetchingCommitBySha1Hash (line 114) | public override bool GitSupportsFetchingCommitBySha1Hash(GitCliManager...
    method UseBearerAuthenticationForOAuth (line 119) | public override bool UseBearerAuthenticationForOAuth()
    method GitSupportUseAuthHeader (line 124) | public override bool GitSupportUseAuthHeader(AgentTaskPluginExecutionC...
    method GitLfsSupportUseAuthHeader (line 130) | public override bool GitLfsSupportUseAuthHeader(AgentTaskPluginExecuti...
    method GitSupportsConfigEnv (line 136) | public override bool GitSupportsConfigEnv(AgentTaskPluginExecutionCont...
    method RequirementCheck (line 145) | public override void RequirementCheck(AgentTaskPluginExecutionContext ...
  class GitSourceProvider (line 185) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainabil...
    method GitSupportUseAuthHeader (line 227) | public abstract bool GitSupportUseAuthHeader(AgentTaskPluginExecutionC...
    method GitLfsSupportUseAuthHeader (line 228) | public abstract bool GitLfsSupportUseAuthHeader(AgentTaskPluginExecuti...
    method RequirementCheck (line 229) | public abstract void RequirementCheck(AgentTaskPluginExecutionContext ...
    method GitSupportsFetchingCommitBySha1Hash (line 230) | public abstract bool GitSupportsFetchingCommitBySha1Hash(GitCliManager...
    method GitSupportsConfigEnv (line 232) | public abstract bool GitSupportsConfigEnv(AgentTaskPluginExecutionCont...
    method UseBearerAuthenticationForOAuth (line 234) | public virtual bool UseBearerAuthenticationForOAuth()
    method GenerateAuthHeader (line 239) | public string GenerateAuthHeader(AgentTaskPluginExecutionContext execu...
    method GetSourceAsync (line 259) | public async Task GetSourceAsync(
    method PostJobCleanupAsync (line 1429) | public async Task PostJobCleanupAsync(AgentTaskPluginExecutionContext ...
    method SetGitFeatureFlagsConfiguration (line 1476) | public async void SetGitFeatureFlagsConfiguration(
    method GetCliManager (line 1502) | protected virtual GitCliManager GetCliManager(Dictionary<string, strin...
    method IsRepositoryOriginUrlMatch (line 1507) | private async Task<bool> IsRepositoryOriginUrlMatch(AgentTaskPluginExe...
    method ParseFetchFilterOptions (line 1541) | private IEnumerable<string> ParseFetchFilterOptions(AgentTaskPluginExe...
    method IsPartialCloneRepository (line 1594) | private async Task<bool> IsPartialCloneRepository(AgentTaskPluginExecu...
    method RunGitStatusIfSystemDebug (line 1629) | private async Task RunGitStatusIfSystemDebug(AgentTaskPluginExecutionC...
    method RemoveGitConfig (line 1642) | private async Task RemoveGitConfig(AgentTaskPluginExecutionContext exe...
    method ReplaceTokenPlaceholder (line 1677) | private async Task ReplaceTokenPlaceholder(AgentTaskPluginExecutionCon...
    method RemoveCachedCredential (line 1703) | private async Task RemoveCachedCredential(AgentTaskPluginExecutionCont...
    method IsPullRequest (line 1732) | private bool IsPullRequest(string sourceBranch)
    method GetRemoteRefName (line 1739) | private string GetRemoteRefName(string refName)
    method ComposeGitArgs (line 1765) | private string ComposeGitArgs(AgentTaskPluginExecutionContext executio...
    method GetWISCToken (line 1793) | protected virtual string GetWISCToken(ServiceEndpoint endpoint, AgentT...
    method SetAuthTokenInGitConfig (line 1826) | private async Task SetAuthTokenInGitConfig(AgentTaskPluginExecutionCon...

FILE: src/Agent.Plugins/ITfsVCCliManager.cs
  type ITfsVCCliManager (line 12) | public interface ITfsVCCliManager
    method SetupProxy (line 20) | void SetupProxy(string proxyUrl, string proxyUsername, string proxyPas...
    method SetupClientCertificate (line 21) | void SetupClientCertificate(string clientCert, string clientCertKey, s...
    method TestEulaAccepted (line 22) | bool TestEulaAccepted();
    method EulaAsync (line 23) | Task EulaAsync();
    method WorkspacesAsync (line 24) | Task<ITfsVCWorkspace[]> WorkspacesAsync(bool matchWorkspaceNameOnAnyCo...
    method StatusAsync (line 25) | Task<ITfsVCStatus> StatusAsync(string localPath);
    method UndoAsync (line 26) | Task UndoAsync(string localPath);
    method ScorchAsync (line 27) | Task ScorchAsync();
    method TryWorkspaceDeleteAsync (line 28) | Task<bool> TryWorkspaceDeleteAsync(ITfsVCWorkspace workspace);
    method WorkspaceDeleteAsync (line 29) | Task WorkspaceDeleteAsync(ITfsVCWorkspace workspace);
    method WorkspacesRemoveAsync (line 30) | Task WorkspacesRemoveAsync(ITfsVCWorkspace workspace);
    method WorkspaceNewAsync (line 31) | Task WorkspaceNewAsync();
    method WorkfoldUnmapAsync (line 32) | Task WorkfoldUnmapAsync(string serverPath);
    method WorkfoldMapAsync (line 33) | Task WorkfoldMapAsync(string serverPath, string localPath);
    method WorkfoldCloakAsync (line 34) | Task WorkfoldCloakAsync(string serverPath);
    method GetAsync (line 35) | Task GetAsync(string localPath, bool quiet = false);
    method AddAsync (line 36) | Task AddAsync(string localPath);
    method ShelveAsync (line 37) | Task ShelveAsync(string shelveset, string commentFile, bool move);
    method ShelvesetsAsync (line 38) | Task<ITfsVCShelveset> ShelvesetsAsync(string shelveset);
    method UnshelveAsync (line 39) | Task UnshelveAsync(string shelveset, bool failOnNonZeroExitCode);
    method CleanupProxySetting (line 40) | void CleanupProxySetting();

FILE: src/Agent.Plugins/PipelineArtifact/FilePathServer.cs
  class FilePathServer (line 19) | public class FilePathServer
    method UploadAsync (line 21) | internal async Task UploadAsync(
    class FileShareArtifactUploadEventProperties (line 64) | internal static class FileShareArtifactUploadEventProperties
    method GetParallelCount (line 75) | private int GetParallelCount(AgentTaskPluginExecutionContext context, ...

FILE: src/Agent.Plugins/PipelineArtifact/PipelineArtifactPlugin.cs
  class PipelineArtifactTaskPluginBase (line 20) | public abstract class PipelineArtifactTaskPluginBase : IAgentTaskPlugin
    method RunAsync (line 26) | public async Task RunAsync(AgentTaskPluginExecutionContext context, Ca...
    method ProcessCommandInternalAsync (line 39) | protected abstract Task ProcessCommandInternalAsync(
    class ArtifactEventProperties (line 46) | protected static class ArtifactEventProperties
    method GetArtifactName (line 53) | protected virtual string GetArtifactName(AgentTaskPluginExecutionConte...
  class PublishPipelineArtifactTask (line 61) | public class PublishPipelineArtifactTask : PipelineArtifactTaskPluginBase
    method ProcessCommandInternalAsync (line 71) | protected override async Task ProcessCommandInternalAsync(
    method ParseCustomProperties (line 122) | private IDictionary<string, string> ParseCustomProperties(string prope...
    method NormalizeJobIdentifier (line 146) | private string NormalizeJobIdentifier(string jobIdentifier)
  class DownloadPipelineArtifactTask (line 156) | public class DownloadPipelineArtifactTask : PipelineArtifactTaskPluginBase
    method ProcessCommandInternalAsync (line 161) | protected override async Task ProcessCommandInternalAsync(
  class PublishPipelineArtifactTaskV0_140_0 (line 227) | public class PublishPipelineArtifactTaskV0_140_0 : PublishPipelineArtifa...
    method GetArtifactName (line 229) | protected override string GetArtifactName(AgentTaskPluginExecutionCont...

FILE: src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginConstants.cs
  class PipelineArtifactPluginConstants (line 8) | public static class PipelineArtifactPluginConstants

FILE: src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginUtil.cs
  class PipelineArtifactPathHelper (line 10) | public static class PipelineArtifactPathHelper
    method IsValidArtifactName (line 24) | public static bool IsValidArtifactName(string artifactName)

FILE: src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV1.cs
  class PipelineArtifactTaskPluginBaseV1 (line 23) | public abstract class PipelineArtifactTaskPluginBaseV1 : IAgentTaskPlugin
    method RunAsync (line 31) | public Task RunAsync(AgentTaskPluginExecutionContext context, Cancella...
    method ProcessCommandInternalAsync (line 37) | protected abstract Task ProcessCommandInternalAsync(
    class ArtifactEventProperties (line 42) | protected static class ArtifactEventProperties
  class PublishPipelineArtifactTaskV1 (line 60) | public class PublishPipelineArtifactTaskV1 : PipelineArtifactTaskPluginB...
    method ProcessCommandInternalAsync (line 69) | protected override async Task ProcessCommandInternalAsync(
    method ParseCustomProperties (line 169) | private IDictionary<string, string> ParseCustomProperties(string prope...
    method NormalizeJobIdentifier (line 193) | private string NormalizeJobIdentifier(string jobIdentifier)
  class DownloadPipelineArtifactTaskV1 (line 201) | public class DownloadPipelineArtifactTaskV1 : PipelineArtifactTaskPlugin...
    method ProcessCommandInternalAsync (line 211) | protected override async Task ProcessCommandInternalAsync(
    method GetArtifactName (line 360) | protected virtual string GetArtifactName(AgentTaskPluginExecutionConte...
    method CreateDirectoryIfDoesntExist (line 365) | private string CreateDirectoryIfDoesntExist(string targetPath)
    method GetpipelineIdAsync (line 376) | private async Task<int> GetpipelineIdAsync(AgentTaskPluginExecutionCon...
  class DownloadPipelineArtifactTaskV1_1_0 (line 406) | public class DownloadPipelineArtifactTaskV1_1_0 : DownloadPipelineArtifa...
    method GetArtifactName (line 411) | protected override string GetArtifactName(AgentTaskPluginExecutionCont...
  class DownloadPipelineArtifactTaskV1_1_1 (line 417) | public class DownloadPipelineArtifactTaskV1_1_1 : DownloadPipelineArtifa...
    method GetArtifactName (line 419) | protected override string GetArtifactName(AgentTaskPluginExecutionCont...
  class DownloadPipelineArtifactTaskV1_1_2 (line 426) | public class DownloadPipelineArtifactTaskV1_1_2 : DownloadPipelineArtifa...
  class DownloadPipelineArtifactTaskV1_1_3 (line 431) | public class DownloadPipelineArtifactTaskV1_1_3 : DownloadPipelineArtifa...

FILE: src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV2.cs
  class PipelineArtifactTaskPluginBaseV2 (line 23) | public abstract class PipelineArtifactTaskPluginBaseV2 : IAgentTaskPlugin
    method RunAsync (line 32) | public Task RunAsync(AgentTaskPluginExecutionContext context, Cancella...
    method ProcessCommandInternalAsync (line 39) | protected abstract Task ProcessCommandInternalAsync(
    class ArtifactEventProperties (line 44) | protected static class ArtifactEventProperties
  class DownloadPipelineArtifactTaskV2_0_0 (line 62) | public class DownloadPipelineArtifactTaskV2_0_0 : PipelineArtifactTaskPl...
    method ProcessCommandInternalAsync (line 73) | protected override async Task ProcessCommandInternalAsync(
    method GetArtifactName (line 305) | protected virtual string GetArtifactName(AgentTaskPluginExecutionConte...
    method CreateDirectoryIfDoesntExist (line 310) | private string CreateDirectoryIfDoesntExist(string targetPath)
    method GetPipelineIdAsync (line 321) | private async Task<int> GetPipelineIdAsync(
    method GetResultFilter (line 412) | private BuildResult GetResultFilter(bool allowPartiallySucceededBuilds...
    method GetProjectIdAsync (line 434) | private async Task<Guid> GetProjectIdAsync(AgentTaskPluginExecutionCon...
    method OutputBuildInfo (line 456) | private void OutputBuildInfo(AgentTaskPluginExecutionContext context, ...

FILE: src/Agent.Plugins/PipelineArtifact/Telemetry/FileShareActionRecord.cs
  class FileShareActionRecord (line 14) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainabil...
    method FileShareActionRecord (line 23) | public FileShareActionRecord(TelemetryInformationLevel level, Uri base...
    method SetMeasuredActionResult (line 28) | protected override void SetMeasuredActionResult<T>(T value)
  class FileSharePublishResult (line 46) | public sealed class FileSharePublishResult
    method FileSharePublishResult (line 50) | public FileSharePublishResult(int exitCode)
  class FileShareDownloadResult (line 56) | public sealed class FileShareDownloadResult
    method FileShareDownloadResult (line 62) | public FileShareDownloadResult(IList<ArtifactRecord> records, int file...
  class ArtifactRecord (line 70) | public sealed class ArtifactRecord
    method ArtifactRecord (line 77) | public ArtifactRecord(string artifactName, int fileCount, long content...

FILE: src/Agent.Plugins/PipelineArtifact/Telemetry/PipelineArtifactActionRecord.cs
  class PipelineArtifactActionRecord (line 15) | public class PipelineArtifactActionRecord : PipelineTelemetryRecord
    method PipelineArtifactActionRecord (line 19) | public PipelineArtifactActionRecord(TelemetryInformationLevel level, U...
    method SetMeasuredActionResult (line 24) | protected override void SetMeasuredActionResult<T>(T value)

FILE: src/Agent.Plugins/PipelineCache/FingerprintCreator.cs
  class FingerprintCreator (line 21) | public static class FingerprintCreator
    method IsPathyChar (line 39) | private static bool IsPathyChar(char c)
    method IsPathyKeySegment (line 48) | internal static bool IsPathyKeySegment(string keySegment)
    method CreateMinimatchFilter (line 59) | internal static Func<string, bool> CreateMinimatchFilter(AgentTaskPlug...
    method MakePathCanonical (line 72) | internal static string MakePathCanonical(string defaultWorkingDirector...
    method CreateFilter (line 85) | internal static Func<string, bool> CreateFilter(
    type Enumeration (line 98) | internal struct Enumeration
    class MatchedFile (line 105) | internal class MatchedFile
      method MatchedFile (line 109) | public MatchedFile(string displayPath, long fileLength, string hash)
      method MatchedFile (line 116) | public MatchedFile(string displayPath, FileStream fs) :
      method GetHash (line 125) | public string GetHash()
      method GenerateHash (line 130) | public static string GenerateHash(IEnumerable<MatchedFile> matches)
    type KeySegmentType (line 140) | internal enum KeySegmentType
    method DetermineFileEnumerationFromGlob (line 157) | internal static Enumeration DetermineFileEnumerationFromGlob(string in...
    method CheckKeySegment (line 184) | internal static void CheckKeySegment(string keySegment)
    method EvaluateKeyToFingerprint (line 204) | public static Fingerprint EvaluateKeyToFingerprint(

FILE: src/Agent.Plugins/PipelineCache/PipelineCachePluginConstants.cs
  class PipelineCachePluginConstants (line 8) | public static class PipelineCachePluginConstants

FILE: src/Agent.Plugins/PipelineCache/PipelineCacheServer.cs
  class PipelineCacheServer (line 27) | public class PipelineCacheServer
    method PipelineCacheServer (line 31) | public PipelineCacheServer(AgentTaskPluginExecutionContext context)
    method UploadAsync (line 36) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "...
    method DownloadAsync (line 173) | internal async Task DownloadAsync(
    method CreateClientWithRetryAsync (line 283) | private Task<PipelineCacheClient> CreateClientWithRetryAsync(
    method CreateClientAsync (line 299) | private async Task<PipelineCacheClient> CreateClientAsync(
    method GetUploadPathAsync (line 313) | private async Task<string> GetUploadPathAsync(ContentFormat contentFor...
    method DownloadPipelineCacheAsync (line 323) | private async Task DownloadPipelineCacheAsync(

FILE: src/Agent.Plugins/PipelineCache/PipelineCacheTaskPluginBase.cs
  type ContentFormat (line 17) | public enum ContentFormat
  class PipelineCacheTaskPluginBase (line 23) | public abstract class PipelineCacheTaskPluginBase : IAgentTaskPlugin
    method ParseIntoSegments (line 34) | internal static (bool isOldFormat, string[] keySegments, IEnumerable<s...
    method RunAsync (line 85) | public async virtual Task RunAsync(AgentTaskPluginExecutionContext con...
    method ProcessCommandInternalAsync (line 131) | protected abstract Task ProcessCommandInternalAsync(
    class PipelineCacheTaskPluginConstants (line 139) | protected static class PipelineCacheTaskPluginConstants

FILE: src/Agent.Plugins/PipelineCache/RestorePipelineCacheV0.cs
  class RestorePipelineCacheV0 (line 13) | public class RestorePipelineCacheV0 : PipelineCacheTaskPluginBase
    method ProcessCommandInternalAsync (line 17) | protected override async Task ProcessCommandInternalAsync(

FILE: src/Agent.Plugins/PipelineCache/SavePipelineCacheV0.cs
  class SavePipelineCacheV0 (line 14) | public class SavePipelineCacheV0 : PipelineCacheTaskPluginBase
    method RunAsync (line 20) | public override async Task RunAsync(AgentTaskPluginExecutionContext co...
    method ProcessCommandInternalAsync (line 58) | protected override async Task ProcessCommandInternalAsync(

FILE: src/Agent.Plugins/PipelineCache/TarUtils.cs
  class TarUtils (line 18) | public static class TarUtils
    method ArchiveFilesToTarAsync (line 29) | public static async Task<string> ArchiveFilesToTarAsync(
    method DownloadAndExtractTarAsync (line 68) | public static Task DownloadAndExtractTarAsync(
    method RunProcessAsync (line 111) | internal static async Task RunProcessAsync(
    method CreateProcessStartInfo (line 159) | private static void CreateProcessStartInfo(ProcessStartInfo processSta...
    method GetCreateTarProcessInfo (line 171) | private static ProcessStartInfo GetCreateTarProcessInfo(AgentTaskPlugi...
    method GetTar (line 196) | private static string GetTar(AgentTaskPluginExecutionContext context)
    method GetExtractStartProcessInfo (line 203) | private static ProcessStartInfo GetExtractStartProcessInfo(AgentTaskPl...
    method ValidateTarManifest (line 238) | private static void ValidateTarManifest(Manifest manifest)
    method TryDeleteFile (line 246) | private static void TryDeleteFile(string fileName)
    method CreateArchiveFileName (line 258) | private static string CreateArchiveFileName()
    method CheckIf7ZExists (line 263) | private static bool CheckIf7ZExists()

FILE: src/Agent.Plugins/PipelineCache/Telemetry/PipelineCacheActionRecord.cs
  class PipelineCacheActionRecord (line 18) | public class PipelineCacheActionRecord : PipelineCacheTelemetryRecord
    method PipelineCacheActionRecord (line 22) | public PipelineCacheActionRecord(TelemetryInformationLevel level, Uri ...
    method SetMeasuredActionResult (line 35) | protected override void SetMeasuredActionResult<T>(T value)

FILE: src/Agent.Plugins/RepositoryPlugin.cs
  type ISourceProvider (line 19) | public interface ISourceProvider
    method GetSourceAsync (line 21) | Task GetSourceAsync(AgentTaskPluginExecutionContext executionContext, ...
    method PostJobCleanupAsync (line 23) | Task PostJobCleanupAsync(AgentTaskPluginExecutionContext executionCont...
  class RepositoryTask (line 26) | public abstract class RepositoryTask : IAgentTaskPlugin
    method RepositoryTask (line 37) | protected RepositoryTask()
    method RepositoryTask (line 42) | protected RepositoryTask(ISourceProviderFactory sourceProviderFactory)
    method RunAsync (line 53) | public abstract Task RunAsync(AgentTaskPluginExecutionContext executio...
    method MergeCheckoutOptions (line 55) | protected void MergeCheckoutOptions(AgentTaskPluginExecutionContext ex...
    method HasMultipleCheckouts (line 90) | protected bool HasMultipleCheckouts(AgentTaskPluginExecutionContext ex...
    method initializeTeeUtil (line 96) | protected void initializeTeeUtil(AgentTaskPluginExecutionContext execu...
  class CheckoutTask (line 108) | public class CheckoutTask : RepositoryTask
    method CheckoutTask (line 110) | public CheckoutTask()
    method CheckoutTask (line 114) | public CheckoutTask(ISourceProviderFactory sourceProviderFactory)
    method RunAsync (line 121) | public override async Task RunAsync(AgentTaskPluginExecutionContext ex...
  class CleanupTask (line 236) | public class CleanupTask : RepositoryTask
    method RunAsync (line 240) | public override async Task RunAsync(AgentTaskPluginExecutionContext ex...
  type ISourceProviderFactory (line 270) | public interface ISourceProviderFactory
    method GetSourceProvider (line 272) | ISourceProvider GetSourceProvider(string repositoryType);
  class SourceProviderFactory (line 275) | public class SourceProviderFactory : ISourceProviderFactory
    method GetSourceProvider (line 277) | public virtual ISourceProvider GetSourceProvider(string repositoryType)

FILE: src/Agent.Plugins/SvnCliManager.cs
  class SvnCliManager (line 21) | public class SvnCliManager
    method Init (line 29) | public void Init(
    method UpdateWorkspace (line 89) | public async Task<string> UpdateWorkspace(
    method GetOldMappings (line 129) | private async Task<Dictionary<string, Uri>> GetOldMappings(string root...
    method GetSvnWorkingCopyPaths (line 154) | private List<string> GetSvnWorkingCopyPaths(string rootPath)
    method BuildNewMappings (line 172) | private Dictionary<string, SvnMappingDetails> BuildNewMappings(string ...
    method GetLatestRevisionAsync (line 218) | public async Task<long> GetLatestRevisionAsync(string serverPath, stri...
    method ResolveServerPath (line 254) | public string ResolveServerPath(string serverPath, string rootPath)
    method GetRootUrlAsync (line 304) | private async Task<Uri> GetRootUrlAsync(string localPath)
    method UpdateToRevisionAsync (line 338) | private async Task UpdateToRevisionAsync(Dictionary<string, Uri> oldMa...
    method EffectiveRevision (line 385) | private string EffectiveRevision(string mappingRevision, long maxRevis...
    method CleanUpSvnWorkspace (line 403) | private void CleanUpSvnWorkspace(Dictionary<string, Uri> oldMappings, ...
    method UpdateAsync (line 420) | private async Task UpdateAsync(SvnMappingDetails mapping)
    method SwitchAsync (line 436) | private async Task SwitchAsync(SvnMappingDetails mapping)
    method CheckoutAsync (line 454) | private async Task CheckoutAsync(SvnMappingDetails mapping)
    method BuildSvnUri (line 466) | private string BuildSvnUri(string serverPath)
    method FormatArgumentsWithDefaults (line 482) | private string FormatArgumentsWithDefaults(params string[] args)
    method QuotedArgument (line 550) | private string QuotedArgument(string arg)
    method ToDepthArgument (line 564) | private string ToDepthArgument(int depth)
    method RunCommandAsync (line 579) | private async Task RunCommandAsync(params string[] args)
    method RunPorcelainCommandAsync (line 615) | private async Task<string> RunPorcelainCommandAsync(params string[] args)
    method NormalizeMappings (line 672) | public Dictionary<string, SvnMappingDetails> NormalizeMappings(List<Sv...
    method NormalizeRelativePath (line 726) | public string NormalizeRelativePath(string path, char pathSeparator, c...
  class SvnInfo (line 765) | [XmlRoot(ElementName = "info", Namespace = "")]
  class SvnInfoEntry (line 772) | public sealed class SvnInfoEntry
  class SvnInfoRepository (line 799) | public sealed class SvnInfoRepository
  class SvnInfoWorkingCopy (line 811) | public sealed class SvnInfoWorkingCopy
  class SvnInfoCommit (line 820) | public sealed class SvnInfoCommit

FILE: src/Agent.Plugins/SvnSourceProvider.cs
  class SvnSourceProvider (line 15) | public sealed class SvnSourceProvider : ISourceProvider
    method GetSourceAsync (line 17) | public async Task GetSourceAsync(
    method PostJobCleanupAsync (line 78) | public Task PostJobCleanupAsync(AgentTaskPluginExecutionContext execut...

FILE: src/Agent.Plugins/TFCliManager.cs
  class TFCliManager (line 20) | public sealed class TFCliManager : TfsVCCliManager, ITfsVCCliManager
    method AddAsync (line 51) | public async Task AddAsync(string localPath)
    method CleanupProxySetting (line 57) | public void CleanupProxySetting()
    method EulaAsync (line 65) | public Task EulaAsync()
    method GetAsync (line 70) | public async Task GetAsync(string localPath, bool quiet = false)
    method ResolvePath (line 76) | public string ResolvePath(string serverPath)
    method ScorchAsync (line 91) | public async Task ScorchAsync() => await RunCommandAsync(FormatTags.Om...
    method SetupProxy (line 93) | public void SetupProxy(string proxyUrl, string proxyUsername, string p...
    method SetupClientCertificate (line 161) | public void SetupClientCertificate(string clientCert, string clientCer...
    method ShelveAsync (line 175) | public async Task ShelveAsync(string shelveset, string commentFile, bo...
    method ShelvesetsAsync (line 190) | public async Task<ITfsVCShelveset> ShelvesetsAsync(string shelveset)
    method StatusAsync (line 210) | public async Task<ITfsVCStatus> StatusAsync(string localPath)
    method TestEulaAccepted (line 228) | public bool TestEulaAccepted()
    method TryWorkspaceDeleteAsync (line 233) | public override async Task<bool> TryWorkspaceDeleteAsync(ITfsVCWorkspa...
    method UndoAsync (line 248) | public async Task UndoAsync(string localPath)
    method UnshelveAsync (line 254) | public async Task UnshelveAsync(string shelveset, bool failOnNonZeroEx...
    method WorkfoldCloakAsync (line 260) | public async Task WorkfoldCloakAsync(string serverPath)
    method WorkfoldMapAsync (line 266) | public async Task WorkfoldMapAsync(string serverPath, string localPath)
    method WorkfoldUnmapAsync (line 273) | public async Task WorkfoldUnmapAsync(string serverPath)
    method WorkspaceDeleteAsync (line 279) | public async Task WorkspaceDeleteAsync(ITfsVCWorkspace workspace)
    method WorkspaceNewAsync (line 285) | public async Task WorkspaceNewAsync()
    method WorkspacesAsync (line 300) | public async Task<ITfsVCWorkspace[]> WorkspacesAsync(bool matchWorkspa...
    method WorkspacesRemoveAsync (line 328) | public override async Task WorkspacesRemoveAsync(ITfsVCWorkspace works...
  class TFShelvesets (line 338) | [XmlRoot(ElementName = "Shelvesets", Namespace = "")]
  class TFShelveset (line 345) | public sealed class TFShelveset : ITfsVCShelveset
  class TFStatus (line 365) | [XmlRoot(ElementName = "Status", Namespace = "")]
  class TFPendingSet (line 388) | public sealed class TFPendingSet
  class TFPendingChange (line 412) | public sealed class TFPendingChange : ITfsVCPendingChange
  class TFWorkspaces (line 467) | [XmlRoot(ElementName = "Workspaces", Namespace = "")]
  class TFWorkspace (line 474) | public sealed class TFWorkspace : ITfsVCWorkspace
  class TFMapping (line 511) | public sealed class TFMapping : ITfsVCMapping

FILE: src/Agent.Plugins/TeeCliManager.cs
  class TeeCliManager (line 17) | public sealed class TeeCliManager : TfsVCCliManager, ITfsVCCliManager
    method AddAsync (line 28) | public async Task AddAsync(string localPath)
    method CleanupProxySetting (line 34) | public void CleanupProxySetting()
    method EulaAsync (line 39) | public async Task EulaAsync()
    method GetAsync (line 44) | public async Task GetAsync(string localPath, bool quiet = false)
    method ResolvePath (line 50) | public string ResolvePath(string serverPath)
    method ScorchAsync (line 67) | public Task ScorchAsync()
    method SetupProxy (line 72) | public void SetupProxy(string proxyUrl, string proxyUsername, string p...
    method SetupClientCertificate (line 81) | public void SetupClientCertificate(string clientCert, string clientCer...
    method ShelveAsync (line 130) | public async Task ShelveAsync(string shelveset, string commentFile, bo...
    method ShelvesetsAsync (line 145) | public async Task<ITfsVCShelveset> ShelvesetsAsync(string shelveset)
    method StatusAsync (line 166) | public async Task<ITfsVCStatus> StatusAsync(string localPath)
    method TestEulaAccepted (line 178) | public bool TestEulaAccepted()
    method TryWorkspaceDeleteAsync (line 213) | public override async Task<bool> TryWorkspaceDeleteAsync(ITfsVCWorkspa...
    method UndoAsync (line 228) | public async Task UndoAsync(string localPath)
    method UnshelveAsync (line 234) | public async Task UnshelveAsync(string shelveset, bool failOnNonZeroEx...
    method WorkfoldCloakAsync (line 240) | public async Task WorkfoldCloakAsync(string serverPath)
    method WorkfoldMapAsync (line 246) | public async Task WorkfoldMapAsync(string serverPath, string localPath)
    method WorkfoldUnmapAsync (line 253) | public Task WorkfoldUnmapAsync(string serverPath)
    method WorkspaceDeleteAsync (line 258) | public async Task WorkspaceDeleteAsync(ITfsVCWorkspace workspace)
    method WorkspaceNewAsync (line 264) | public async Task WorkspaceNewAsync()
    method WorkspacesAsync (line 269) | public async Task<ITfsVCWorkspace[]> WorkspacesAsync(bool matchWorkspa...
    method WorkspacesRemoveAsync (line 314) | public override async Task WorkspacesRemoveAsync(ITfsVCWorkspace works...
    method ExtractXml (line 320) | private static string ExtractXml(string output)
    class ProductIdData (line 341) | [XmlRoot(ElementName = "ProductIdData", Namespace = "")]
    class Eula (line 348) | public sealed class Eula
  class TeeShelvesets (line 358) | [XmlRoot(ElementName = "shelvesets", Namespace = "")]
  class TeeShelveset (line 365) | public sealed class TeeShelveset : ITfsVCShelveset
  class TeeStatus (line 383) | [XmlRoot(ElementName = "status", Namespace = "")]
  class TeePendingChange (line 409) | public sealed class TeePendingChange : ITfsVCPendingChange
  class TeeWorkspaces (line 445) | [XmlRoot(ElementName = "workspaces", Namespace = "")]
  class TeeWorkspace (line 452) | public sealed class TeeWorkspace : ITfsVCWorkspace
  class TeeMapping (line 479) | public sealed class TeeMapping : ITfsVCMapping

FILE: src/Agent.Plugins/TestFilePublisher/ClientFactory.cs
  type IClientFactory (line 8) | public interface IClientFactory
    method GetClient (line 13) | T GetClient<T>() where T : VssHttpClientBase;
  class ClientFactory (line 16) | public class ClientFactory : IClientFactory
    method ClientFactory (line 18) | public ClientFactory(VssConnection vssConnection)
    method GetClient (line 24) | public T GetClient<T>() where T : VssHttpClientBase

FILE: src/Agent.Plugins/TestFilePublisher/Finder/ITestFileFinder.cs
  type ITestFileFinder (line 9) | public interface ITestFileFinder
    method FindAsync (line 11) | Task<IEnumerable<string>> FindAsync(IList<string> patterns);

FILE: src/Agent.Plugins/TestFilePublisher/Finder/TestFileFinder.cs
  class TestFileFinder (line 11) | public class TestFileFinder : ITestFileFinder
    method TestFileFinder (line 15) | public TestFileFinder(IList<string> searchFolders)
    method FindAsync (line 20) | public async Task<IEnumerable<string>> FindAsync(IList<string> patterns)
    method GetFiles (line 25) | protected virtual IEnumerable<string> GetFiles(string path, string[] s...
    method Find (line 32) | protected IEnumerable<string> Find(IList<string> patterns)

FILE: src/Agent.Plugins/TestFilePublisher/PipelineConfig.cs
  class PipelineConfig (line 9) | public class PipelineConfig

FILE: src/Agent.Plugins/TestFilePublisher/Plugin/TestFilePublisherLogPlugin.cs
  class TestFilePublisherLogPlugin (line 16) | public class TestFilePublisherLogPlugin : IAgentLogPlugin
    method TestFilePublisherLogPlugin (line 21) | public TestFilePublisherLogPlugin()
    method TestFilePublisherLogPlugin (line 29) | public TestFilePublisherLogPlugin(ITraceLogger logger, ITelemetryDataC...
    method InitializeAsync (line 37) | public async Task<bool> InitializeAsync(IAgentLogPluginContext context)
    method ProcessLineAsync (line 87) | public async Task ProcessLineAsync(IAgentLogPluginContext context, Pip...
    method FinalizeAsync (line 93) | public async Task FinalizeAsync(IAgentLogPluginContext context)
    method DisablePlugin (line 115) | private bool DisablePlugin(IAgentLogPluginContext context)
    method PopulatePipelineConfig (line 176) | private async Task PopulatePipelineConfig(IAgentLogPluginContext context)
    method PopulateSearchFolders (line 272) | private void PopulateSearchFolders(IAgentLogPluginContext context, str...
    method PopulateSearchPatterns (line 284) | private void PopulateSearchPatterns(IAgentLogPluginContext context, st...

FILE: src/Agent.Plugins/TestFilePublisher/SimpleTimer.cs
  class SimpleTimer (line 18) | public class SimpleTimer : IDisposable
    method SimpleTimer (line 24) | public SimpleTimer(string timerName, ITraceLogger logger, TimeSpan thr...
    method Dispose (line 36) | public void Dispose()
    method StopAndLog (line 45) | public void StopAndLog()
    method Dispose (line 52) | protected virtual void Dispose(bool disposing)

FILE: src/Agent.Plugins/TestFilePublisher/Telemetry/TelemetryConstants.cs
  class TelemetryConstants (line 6) | public class TelemetryConstants

FILE: src/Agent.Plugins/TestFilePublisher/Telemetry/TelemetryDataCollector.cs
  class TelemetryDataCollector (line 19) | public class TelemetryDataCollector : ITelemetryDataCollector
    method TelemetryDataCollector (line 29) | public TelemetryDataCollector(IClientFactory clientFactory, ITraceLogg...
    method AddOrUpdate (line 35) | public void AddOrUpdate(string property, object value, string subArea ...
    method AddAndAggregate (line 50) | public void AddAndAggregate(string property, object value, string subA...
    method PublishCumulativeTelemetryAsync (line 101) | public Task PublishCumulativeTelemetryAsync()
    method PublishTelemetryAsync (line 129) | public Task PublishTelemetryAsync(string feature, Dictionary<string, o...

FILE: src/Agent.Plugins/TestFilePublisher/Telemetry/TelemetryDataWrapper.cs
  class TelemetryDataWrapper (line 8) | public class TelemetryDataWrapper
    method TelemetryDataWrapper (line 10) | public TelemetryDataWrapper(ITelemetryDataCollector telemetry, string ...
    method AddAndAggregate (line 17) | public void AddAndAggregate(object value)

FILE: src/Agent.Plugins/TestFilePublisher/TestFilePublisher.cs
  type ITestFilePublisher (line 18) | public interface ITestFilePublisher
    method InitializeAsync (line 20) | Task InitializeAsync();
    method PublishAsync (line 21) | Task PublishAsync();
  class TestFilePublisher (line 24) | public class TestFilePublisher : ITestFilePublisher
    method TestFilePublisher (line 35) | public TestFilePublisher(VssConnection vssConnection, PipelineConfig p...
    method TestFilePublisher (line 45) | public TestFilePublisher(VssConnection vssConnection, PipelineConfig p...
    method InitializeAsync (line 55) | public async Task InitializeAsync()
    method PublishAsync (line 60) | public async Task PublishAsync()
    method FindTestFilesAsync (line 133) | protected async Task<IEnumerable<string>> FindTestFilesAsync()
    method Initialize (line 138) | private void Initialize()

FILE: src/Agent.Plugins/TestFilePublisher/TestRunContextBuilder.cs
  type ITestRunContextBuilder (line 9) | public interface ITestRunContextBuilder
    method WithBuildId (line 11) | TestRunContextBuilder WithBuildId(int buildId);
    method WithBuildUri (line 12) | TestRunContextBuilder WithBuildUri(string buildUri);
  class TestRunContextBuilder (line 15) | public class TestRunContextBuilder : ITestRunContextBuilder
    method TestRunContextBuilder (line 27) | public TestRunContextBuilder(string testRunName)
    method Build (line 32) | public TestRunContext Build()
    method WithBuildId (line 47) | public TestRunContextBuilder WithBuildId(int buildId)
    method WithBuildUri (line 53) | public TestRunContextBuilder WithBuildUri(string buildUri)
    method WithStageName (line 59) | public TestRunContextBuilder WithStageName(string stageName)
    method WithStageAttempt (line 65) | public TestRunContextBuilder WithStageAttempt(int stageAttempt)
    method WithPhaseName (line 71) | public TestRunContextBuilder WithPhaseName(string phaseName)
    method WithPhaseAttempt (line 77) | public TestRunContextBuilder WithPhaseAttempt(int phaseAttempt)
    method WithJobName (line 83) | public TestRunContextBuilder WithJobName(string jobName)
    method WithJobAttempt (line 89) | public TestRunContextBuilder WithJobAttempt(int jobAttempt)

FILE: src/Agent.Plugins/TestFilePublisher/TraceListener.cs
  class TestFileTraceListener (line 9) | public class TestFileTraceListener : TraceListener
    method TestFileTraceListener (line 13) | public TestFileTraceListener(IAgentLogPluginContext context)
    method Write (line 18) | public override void Write(string message)
    method WriteLine (line 23) | public override void WriteLine(string message)

FILE: src/Agent.Plugins/TestFilePublisher/TraceLogger.cs
  class TraceLogger (line 9) | public class TraceLogger : ITraceLogger
    method TraceLogger (line 11) | public TraceLogger(IAgentLogPluginContext context)
    method Warning (line 25) | void ITraceLogger.Warning(string text)
    method Error (line 31) | void ITraceLogger.Error(string error)
    method Verbose (line 37) | void ITraceLogger.Verbose(string text)
    method Info (line 46) | void ITraceLogger.Info(string text)

FILE: src/Agent.Plugins/TestResultParser/Bus/IBus.cs
  type IBus (line 8) | public interface IBus<out TMessage>
    method Subscribe (line 13) | Guid Subscribe(Action<TMessage> handlerAction);
    method Unsubscribe (line 18) | void Unsubscribe(Guid subscriptionId);

FILE: src/Agent.Plugins/TestResultParser/ClientFactory.cs
  type IClientFactory (line 8) | public interface IClientFactory
    method GetClient (line 13) | T GetClient<T>() where T : VssHttpClientBase;
  class ClientFactory (line 16) | public class ClientFactory : IClientFactory
    method ClientFactory (line 18) | public ClientFactory(VssConnection vssConnection)
    method GetClient (line 24) | public T GetClient<T>() where T : VssHttpClientBase

FILE: src/Agent.Plugins/TestResultParser/Gateway/ILogParserGateway.cs
  type ILogParserGateway (line 9) | public interface ILogParserGateway
    method InitializeAsync (line 14) | Task InitializeAsync(IClientFactory clientFactory, IPipelineConfig pip...
    method ProcessDataAsync (line 19) | Task ProcessDataAsync(string data);
    method CompleteAsync (line 24) | Task CompleteAsync();

FILE: src/Agent.Plugins/TestResultParser/Gateway/ILogPreProcessor.cs
  type ILogPreProcessor (line 6) | public interface ILogPreProcessor
    method ProcessData (line 12) | string ProcessData(string data);

FILE: src/Agent.Plugins/TestResultParser/Gateway/LogParserGateway.cs
  class LogParserGateway (line 13) | public class LogParserGateway : ILogParserGateway, IBus<LogData>
    method InitializeAsync (line 16) | public async Task InitializeAsync(IClientFactory clientFactory, IPipel...
    method ProcessDataAsync (line 37) | public async Task ProcessDataAsync(string data)
    method CompleteAsync (line 57) | public async Task CompleteAsync()
    method Subscribe (line 80) | public Guid Subscribe(Action<LogData> handlerAction)
    method Unsubscribe (line 90) | public void Unsubscribe(Guid subscriptionId)
    method AddSubscription (line 98) | private Guid AddSubscription(ITargetBlock<LogData> subscription)

FILE: src/Agent.Plugins/TestResultParser/Gateway/LogPreProcessor.cs
  class LogPreProcessor (line 6) | public class LogPreProcessor : ILogPreProcessor
    method ProcessData (line 13) | public string ProcessData(string data)

FILE: src/Agent.Plugins/TestResultParser/IEnumerableExtension.cs
  class EnumerableExtension (line 9) | public static class EnumerableExtension
    method Batch (line 11) | public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IE...

FILE: src/Agent.Plugins/TestResultParser/ParserFactory.cs
  class ParserFactory (line 13) | public class ParserFactory
    method GetTestResultParsers (line 15) | public static IEnumerable<AbstractTestResultParser> GetTestResultParse...

FILE: src/Agent.Plugins/TestResultParser/PipelineConfig.cs
  class PipelineConfig (line 9) | public class PipelineConfig : IPipelineConfig

FILE: src/Agent.Plugins/TestResultParser/PipelineTestRun.cs
  class PipelineTestRun (line 8) | public class PipelineTestRun : TestRun
    method PipelineTestRun (line 10) | public PipelineTestRun(string parserUri, string runNamePrefix, int tes...

FILE: src/Agent.Plugins/TestResultParser/PipelineTestRunPublisher.cs
  class PipelineTestRunPublisher (line 16) | public class PipelineTestRunPublisher : ITestRunPublisher
    method PipelineTestRunPublisher (line 18) | public PipelineTestRunPublisher(IClientFactory clientFactory, IPipelin...
    method PublishAsync (line 27) | public async Task<TestRun> PublishAsync(TestRun testRun)

FILE: src/Agent.Plugins/TestResultParser/Plugin/TestResultLogPlugin.cs
  class TestResultLogPlugin (line 17) | public class TestResultLogPlugin : IAgentLogPlugin
    method TestResultLogPlugin (line 22) | public TestResultLogPlugin()
    method TestResultLogPlugin (line 30) | public TestResultLogPlugin(ILogParserGateway inputDataParser, ITraceLo...
    method InitializeAsync (line 38) | public async Task<bool> InitializeAsync(IAgentLogPluginContext context)
    method ProcessLineAsync (line 85) | public async Task ProcessLineAsync(IAgentLogPluginContext context, Pip...
    method FinalizeAsync (line 91) | public async Task FinalizeAsync(IAgentLogPluginContext context)
    method DisablePlugin (line 106) | private bool DisablePlugin(IAgentLogPluginContext context)
    method PopulatePipelineConfig (line 153) | private async Task PopulatePipelineConfig(IAgentLogPluginContext context)

FILE: src/Agent.Plugins/TestResultParser/SimpleTimer.cs
  class SimpleTimer (line 18) | public class SimpleTimer : IDisposable
    method SimpleTimer (line 24) | public SimpleTimer(string timerName, ITraceLogger logger, TelemetryDat...
    method Dispose (line 36) | public void Dispose()
    method StopAndLog (line 45) | public void StopAndLog()
    method Dispose (line 52) | protected virtual void Dispose(bool disposing)

FILE: src/Agent.Plugins/TestResultParser/Telemetry/TelemetryConstants.cs
  class TelemetryConstants (line 6) | public class TelemetryConstants

FILE: src/Agent.Plugins/TestResultParser/Telemetry/TelemetryDataCollector.cs
  class TelemetryDataCollector (line 19) | public class TelemetryDataCollector : ITelemetryDataCollector
    method TelemetryDataCollector (line 29) | public TelemetryDataCollector(IClientFactory clientFactory, ITraceLogg...
    method AddOrUpdate (line 35) | public void AddOrUpdate(string property, object value, string subArea ...
    method AddAndAggregate (line 50) | public void AddAndAggregate(string property, object value, string subA...
    method PublishCumulativeTelemetryAsync (line 101) | public Task PublishCumulativeTelemetryAsync()
    method PublishTelemetryAsync (line 129) | public Task PublishTelemetryAsync(string feature, Dictionary<string, o...

FILE: src/Agent.Plugins/TestResultParser/Telemetry/TelemetryDataWrapper.cs
  class TelemetryDataWrapper (line 8) | public class TelemetryDataWrapper
    method TelemetryDataWrapper (line 10) | public TelemetryDataWrapper(ITelemetryDataCollector telemetry, string ...
    method AddAndAggregate (line 17) | public void AddAndAggregate(object value)

FILE: src/Agent.Plugins/TestResultParser/TestRunManager.cs
  class TestRunManager (line 15) | public class TestRunManager : ITestRunManager
    method TestRunManager (line 25) | public TestRunManager(ITestRunPublisher testRunPublisher, ITraceLogger...
    method PublishAsync (line 35) | public async Task PublishAsync(TestRun testRun)
    method FinalizeAsync (line 52) | public async Task FinalizeAsync()
    method ValidateAndPrepareForPublish (line 66) | private TestRun ValidateAndPrepareForPublish(TestRun testRun)

FILE: src/Agent.Plugins/TestResultParser/TraceLogger.cs
  class TraceLogger (line 9) | public class TraceLogger : ITraceLogger
    method TraceLogger (line 11) | public TraceLogger(IAgentLogPluginContext context)
    method Warning (line 25) | void ITraceLogger.Warning(string text)
    method Error (line 31) | void ITraceLogger.Error(string error)
    method Verbose (line 37) | void ITraceLogger.Verbose(string text)
    method Info (line 46) | void ITraceLogger.Info(string text)

FILE: src/Agent.Plugins/TfsVCCliManager.cs
  class TfsVCCliManager (line 19) | public abstract class TfsVCCliManager
    method TryWorkspaceDeleteAsync (line 33) | public abstract Task<bool> TryWorkspaceDeleteAsync(ITfsVCWorkspace wor...
    method WorkspacesRemoveAsync (line 34) | public abstract Task WorkspacesRemoveAsync(ITfsVCWorkspace workspace);
    method RunCommandAsync (line 70) | protected Task RunCommandAsync(params string[] args)
    method RunCommandAsync (line 75) | protected Task RunCommandAsync(int retriesOnFailure, params string[] a...
    method RunCommandAsync (line 80) | protected Task RunCommandAsync(FormatTags formatFlags, params string[]...
    method RunCommandAsync (line 85) | protected Task RunCommandAsync(FormatTags formatFlags, bool quiet, par...
    method RunCommandAsync (line 90) | protected async Task RunCommandAsync(FormatTags formatFlags, bool quie...
    method WriteCommandToFile (line 113) | private string WriteCommandToFile(string command)
    method RunCommandAsync (line 122) | protected async Task<int> RunCommandAsync(FormatTags formatFlags, bool...
    method RunPorcelainCommandAsync (line 191) | protected Task<string> RunPorcelainCommandAsync(FormatTags formatFlags...
    method RunPorcelainCommandAsync (line 196) | protected Task<string> RunPorcelainCommandAsync(params string[] args)
    method RunPorcelainCommandAsync (line 201) | protected Task<string> RunPorcelainCommandAsync(int retriesOnFailure, ...
    method RunPorcelainCommandAsync (line 206) | protected async Task<string> RunPorcelainCommandAsync(FormatTags forma...
    method TryRunPorcelainCommandAsync (line 223) | protected async Task<TfsVCPorcelainCommandResult> TryRunPorcelainComma...
    method TryRunPorcelainCommandAsync (line 237) | protected async Task<TfsVCPorcelainCommandResult> TryRunPorcelainComma...
    method CleanupTfsVCOutput (line 314) | private void CleanupTfsVCOutput(ref TfsVCPorcelainCommandResult comman...
    method FormatArguments (line 324) | private string FormatArguments(FormatTags formatFlags, params string[]...

FILE: src/Agent.Plugins/TfsVCSourceProvider.cs
  class TfsVCSourceProvider (line 19) | public sealed class TfsVCSourceProvider : ISourceProvider
    method GetSourceAsync (line 21) | public async Task GetSourceAsync(
    method PostJobCleanupAsync (line 448) | public async Task PostJobCleanupAsync(AgentTaskPluginExecutionContext ...
    method RemoveConflictingWorkspacesAsync (line 548) | private async Task RemoveConflictingWorkspacesAsync(ITfsVCCliManager t...
    class WorkspaceUtil (line 602) | public static class WorkspaceUtil
      method MatchExactWorkspace (line 604) | public static ITfsVCWorkspace MatchExactWorkspace(
    class DefinitionWorkspaceMapping (line 748) | public sealed class DefinitionWorkspaceMapping
      method GetRootedLocalPath (line 796) | public string GetRootedLocalPath(string sourcesDirectory)
    type DefinitionMappingType (line 810) | public enum DefinitionMappingType

FILE: src/Agent.Sdk/AgentClientCertificateManager.cs
  class AgentCertificateSettings (line 10) | public class AgentCertificateSettings
  class AgentClientCertificateManager (line 21) | public class AgentClientCertificateManager : IVssClientCertificateManager
    method AgentClientCertificateManager (line 26) | public AgentClientCertificateManager()
    method AgentClientCertificateManager (line 30) | public AgentClientCertificateManager(string clientCertificateArchiveFi...
    method AddClientCertificate (line 35) | public void AddClientCertificate(string clientCertificateArchiveFile, ...

FILE: src/Agent.Sdk/AgentWebProxy.cs
  class AgentWebProxySettings (line 12) | public class AgentWebProxySettings
  class AgentWebProxy (line 27) | public class AgentWebProxy : IWebProxy
    method AgentWebProxy (line 35) | public AgentWebProxy()
    method AgentWebProxy (line 39) | public AgentWebProxy(string proxyAddress, string proxyUsername, string...
    method AgentWebProxy (line 44) | public AgentWebProxy(string proxyAddress, string proxyUsername, string...
    method Update (line 49) | public void Update(string proxyAddress, string proxyUsername, string p...
    method GetProxy (line 101) | public Uri GetProxy(Uri destination)
    method IsBypassed (line 113) | public bool IsBypassed(Uri uri)
    method IsMatchInBypassList (line 119) | private bool IsMatchInBypassList(Uri input)

FILE: src/Agent.Sdk/CommandPlugin.cs
  type IAgentCommandPlugin (line 22) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA...
    method ProcessCommandAsync (line 28) | Task ProcessCommandAsync(AgentCommandPluginExecutionContext executionC...
  class AgentCommandPluginExecutionContext (line 31) | public class AgentCommandPluginExecutionContext : ITraceWriter, IKnobVal...
    method AgentCommandPluginExecutionContext (line 37) | public AgentCommandPluginExecutionContext()
    method Info (line 62) | public void Info(string message, [CallerMemberName] string operation =...
    method Verbose (line 67) | public void Verbose(string message, [CallerMemberName] string operatio...
    method Debug (line 76) | public void Debug(string message)
    method Output (line 84) | public void Output(string message)
    method Error (line 92) | public void Error(string message)
    method InitializeVssConnection (line 100) | public VssConnection InitializeVssConnection()
    method GetCertConfiguration (line 155) | private AgentCertificateSettings GetCertConfiguration()
    method GetProxyConfiguration (line 187) | private AgentWebProxySettings GetProxyConfiguration()
    method GetVariableValueOrDefault (line 212) | string IKnobValueContext.GetVariableValueOrDefault(string variableName)
    method GetScopedEnvironment (line 217) | IScopedEnvironment IKnobValueContext.GetScopedEnvironment()

FILE: src/Agent.Sdk/CommandStringConvertor.cs
  class CommandStringConvertor (line 8) | public sealed class CommandStringConvertor
    method Escape (line 10) | public static string Escape(string input, bool unescapePercents)
    method Unescape (line 32) | public static string Unescape(string escaped, bool unescapePercents)
    class EscapeMapping (line 62) | private sealed class EscapeMapping
      method EscapeMapping (line 67) | public EscapeMapping(string token, string replacement)

FILE: src/Agent.Sdk/ContainerInfo.cs
  class ContainerInfo (line 13) | public class ContainerInfo : ExecutionTargetInfo
    method ContainerInfo (line 26) | public ContainerInfo()
    method ContainerInfo (line 39) | public ContainerInfo(Pipelines.ContainerResource container, Boolean is...
    method isReadOnlyVolume (line 194) | public bool isReadOnlyVolume(string volumeName)
    method TranslateToContainerPath (line 212) | public string TranslateToContainerPath(string path)
    method TranslateToHostPath (line 237) | public string TranslateToHostPath(string path)
    method TranslateContainerPathForImageOS (line 279) | public string TranslateContainerPathForImageOS(PlatformUtil.OS running...
    method AddPortMappings (line 291) | public void AddPortMappings(List<PortMapping> portMappings)
    method AddPathMappings (line 300) | public void AddPathMappings(Dictionary<string, string> pathMappings)

FILE: src/Agent.Sdk/DockerVersion.cs
  class DockerVersion (line 8) | public class DockerVersion
    method DockerVersion (line 10) | public DockerVersion()
    method DockerVersion (line 15) | public DockerVersion(Version serverVersion, Version clientVersion)

FILE: src/Agent.Sdk/ExecutionTargetInfo.cs
  type ExecutionTargetInfo (line 6) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA...
    method TranslateContainerPathForImageOS (line 13) | string TranslateContainerPathForImageOS(PlatformUtil.OS runningOs, str...
    method TranslateToContainerPath (line 14) | string TranslateToContainerPath(string path);
    method TranslateToHostPath (line 15) | string TranslateToHostPath(string path);
  class HostInfo (line 18) | public class HostInfo : ExecutionTargetInfo
    method TranslateToContainerPath (line 24) | public string TranslateToContainerPath(string path)
    method TranslateToHostPath (line 29) | public string TranslateToHostPath(string path)
    method TranslateContainerPathForImageOS (line 34) | public string TranslateContainerPathForImageOS(PlatformUtil.OS running...

FILE: src/Agent.Sdk/ITraceWriter.cs
  type ITraceWriter (line 8) | public interface ITraceWriter
    method Info (line 10) | void Info(string message, [CallerMemberName] string operation = "");
    method Verbose (line 11) | void Verbose(string message, [CallerMemberName] string operation = "");

FILE: src/Agent.Sdk/Knob/AgentKnobs.cs
  class AgentKnobs (line 6) | public class AgentKnobs

FILE: src/Agent.Sdk/Knob/BuiltInDefaultKnobSource.cs
  class BuiltInDefaultKnobSource (line 6) | public class BuiltInDefaultKnobSource : IKnobSource
    method BuiltInDefaultKnobSource (line 10) | public BuiltInDefaultKnobSource(string value)
    method GetValue (line 15) | public KnobValue GetValue(IKnobValueContext context)
    method GetDisplayString (line 20) | public string GetDisplayString()

FILE: src/Agent.Sdk/Knob/CompositeKnobSource.cs
  class CompositeKnobSource (line 10) | public class CompositeKnobSource : ICompositeKnobSource
    method CompositeKnobSource (line 14) | public CompositeKnobSource(params IKnobSource[] sources)
    method GetValue (line 19) | public KnobValue GetValue(IKnobValueContext context)
    method GetValue (line 36) | public KnobValue GetValue<T>(IKnobValueContext context)
    method GetDisplayString (line 49) | public string GetDisplayString()
    method HasSourceWithTypeEnvironmentByName (line 64) | public bool HasSourceWithTypeEnvironmentByName(string name)

FILE: src/Agent.Sdk/Knob/EnvironmentKnobSource.cs
  class EnvironmentKnobSource (line 8) | public class EnvironmentKnobSource : IEnvironmentKnobSource
    method EnvironmentKnobSource (line 12) | public EnvironmentKnobSource(string envVar)
    method GetValue (line 17) | public KnobValue GetValue(IKnobValueContext context)
    method GetDisplayString (line 29) | public string GetDisplayString()
    method GetEnvironmentVariableName (line 34) | public string GetEnvironmentVariableName()

FILE: src/Agent.Sdk/Knob/ICompositeKnobSource.cs
  type ICompositeKnobSource (line 6) | public interface ICompositeKnobSource : IKnobSource
    method HasSourceWithTypeEnvironmentByName (line 8) | bool HasSourceWithTypeEnvironmentByName(string name);
    method GetValue (line 10) | KnobValue GetValue<T>(IKnobValueContext context);

FILE: src/Agent.Sdk/Knob/IEnvironmentKnobSource.cs
  type IEnvironmentKnobSource (line 6) | public interface IEnvironmentKnobSource : IKnobSource
    method GetEnvironmentVariableName (line 8) | string GetEnvironmentVariableName();

FILE: src/Agent.Sdk/Knob/IKnobSource.cs
  type IKnobSource (line 6) | public interface IKnobSource
    method GetValue (line 8) | KnobValue GetValue(IKnobValueContext context);
    method GetDisplayString (line 10) | string GetDisplayString();

FILE: src/Agent.Sdk/Knob/IKnobValueContext.cs
  type IKnobValueContext (line 6) | public interface IKnobValueContext
    method GetVariableValueOrDefault (line 8) | string GetVariableValueOrDefault(string variableName);
    method GetScopedEnvironment (line 10) | IScopedEnvironment GetScopedEnvironment();

FILE: src/Agent.Sdk/Knob/Knob.cs
  class DeprecatedKnob (line 10) | public class DeprecatedKnob : Knob
    method DeprecatedKnob (line 14) | public DeprecatedKnob(string name, string description, params IKnobSou...
    method DeprecatedKnob (line 19) | public DeprecatedKnob(string name, string description, string deprecat...
  class ExperimentalKnob (line 25) | public class ExperimentalKnob : Knob
    method ExperimentalKnob (line 28) | public ExperimentalKnob(string name, string description, params IKnobS...
  class SecretKnob (line 33) | public class SecretKnob : Knob
    method SecretKnob (line 35) | public SecretKnob(string name, string description, params IKnobSource[...
  class Knob (line 40) | public class Knob
    method Knob (line 48) | public Knob(string name, string description, params IKnobSource[] sour...
    method Knob (line 55) | public Knob()
    method GetValue (line 59) | public KnobValue GetValue(IKnobValueContext context)
    method GetValue (line 67) | public KnobValue GetValue<T>(IKnobValueContext context)
    method GetAllKnobsFor (line 75) | public static List<Knob> GetAllKnobsFor<T>()

FILE: src/Agent.Sdk/Knob/KnobValue.cs
  class KnobValue (line 8) | public class KnobValue
    method KnobValue (line 13) | public KnobValue(string value, IKnobSource source)
    method AsString (line 19) | public string AsString()
    method AsBoolean (line 24) | public bool AsBoolean()
    method AsBooleanStrict (line 29) | public bool AsBooleanStrict()
    method AsInt (line 34) | public int AsInt()

FILE: src/Agent.Sdk/Knob/PipelineFeatureSource.cs
  class PipelineFeatureSource (line 9) | public class PipelineFeatureSource : RuntimeKnobSource
    method PipelineFeatureSource (line 11) | public PipelineFeatureSource(string featureName) : base($"DistributedT...

FILE: src/Agent.Sdk/Knob/RuntimeKnobSource.cs
  class RuntimeKnobSource (line 8) | public class RuntimeKnobSource : IKnobSource
    method RuntimeKnobSource (line 12) | public RuntimeKnobSource(string runTimeVar)
    method GetValue (line 17) | public KnobValue GetValue(IKnobValueContext context)
    method GetDisplayString (line 37) | public string GetDisplayString()

FILE: src/Agent.Sdk/LogPlugin.cs
  type IAgentLogPlugin (line 22) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA...
    method InitializeAsync (line 31) | Task<bool> InitializeAsync(IAgentLogPluginContext context);
    method ProcessLineAsync (line 34) | Task ProcessLineAsync(IAgentLogPluginContext context, Pipelines.TaskSt...
    method FinalizeAsync (line 37) | Task FinalizeAsync(IAgentLogPluginContext context);
  type IAgentLogPluginTrace (line 40) | public interface IAgentLogPluginTrace
    method Trace (line 43) | void Trace(string message);
    method Output (line 46) | void Output(string message);
  type IAgentLogPluginContext (line 49) | public interface IAgentLogPluginContext
    method Trace (line 67) | void Trace(string message);
    method Output (line 70) | void Output(string message);
  class AgentLogPluginTrace (line 73) | public class AgentLogPluginTrace : IAgentLogPluginTrace
    method Trace (line 76) | public void Trace(string message)
    method Output (line 82) | public void Output(string message)
  class AgentLogPluginContext (line 88) | public class AgentLogPluginContext : IAgentLogPluginContext
    method AgentLogPluginContext (line 109) | public AgentLogPluginContext(
    method Trace (line 128) | public void Trace(string message)
    method Output (line 134) | public void Output(string message)
  class AgentLogPluginHostContext (line 140) | public class AgentLogPluginHostContext
    method InitializeVssConnection (line 164) | private VssConnection InitializeVssConnection()
    method GetCertConfiguration (line 209) | private AgentCertificateSettings GetCertConfiguration()
    method GetProxyConfiguration (line 243) | private AgentWebProxySettings GetProxyConfiguration()
  class AgentLogPluginHost (line 269) | public class AgentLogPluginHost
    method AgentLogPluginHost (line 286) | public AgentLogPluginHost(
    method Run (line 310) | public async Task Run()
    method EnqueueOutput (line 383) | public void EnqueueOutput(string output)
    method Finish (line 398) | public void Finish()
    method StartMemoryUsageMonitor (line 404) | private async Task StartMemoryUsageMonitor(CancellationToken token)
    method RunAsync (line 447) | private async Task RunAsync(IAgentLogPlugin plugin, CancellationToken ...
    method ProcessOutputQueue (line 515) | private async Task ProcessOutputQueue(IAgentLogPluginContext context, ...

FILE: src/Agent.Sdk/MountVolume.cs
  class MountVolume (line 10) | public class MountVolume
    method MountVolume (line 12) | public MountVolume()
    method MountVolume (line 17) | public MountVolume(string sourceVolumePath, string targetVolumePath, b...
    method MountVolume (line 24) | public MountVolume(string fromString)
    method AutoEscapeWindowsDriveInPath (line 31) | private string AutoEscapeWindowsDriveInPath(string path)
    method ParseVolumeString (line 36) | private void ParseVolumeString(string volume)

FILE: src/Agent.Sdk/PortMapping.cs
  class PortMapping (line 6) | public class PortMapping
    method PortMapping (line 9) | public PortMapping()
    method PortMapping (line 14) | public PortMapping(string hostPort, string containerPort, string proto...

FILE: src/Agent.Sdk/ProcessInvoker.MacLinux.cs
  class ProcessInvoker (line 12) | public partial class ProcessInvoker : IDisposable
    method SendPosixSignal (line 14) | private async Task<bool> SendPosixSignal(PosixSignals signal, TimeSpan...
    method NixKillProcessTree (line 46) | private void NixKillProcessTree()
    method WriteProcessOomScoreAdj (line 62) | private void WriteProcessOomScoreAdj(int processId, int oomScoreAdj)
    type PosixSignals (line 86) | private enum PosixSignals : int
    method kill (line 92) | [DllImport("libc", SetLastError = true)]

FILE: src/Agent.Sdk/ProcessInvoker.Windows.cs
  class ProcessInvoker (line 14) | public partial class ProcessInvoker : IDisposable
    method SendCtrlSignal (line 16) | private async Task<bool> SendCtrlSignal(ConsoleCtrlEvent signal, TimeS...
    method ConsoleCtrlHandler (line 76) | private bool ConsoleCtrlHandler(ConsoleCtrlEvent ctrlType)
    method WindowsKillProcessTree (line 95) | private void WindowsKillProcessTree()
    class ProcessTerminationInfo (line 204) | private class ProcessTerminationInfo
      method ProcessTerminationInfo (line 206) | public ProcessTerminationInfo(int pid, bool expanded)
    type ConsoleCtrlEvent (line 216) | private enum ConsoleCtrlEvent
    type PROCESSINFOCLASS (line 222) | private enum PROCESSINFOCLASS : int
    type PROCESS_BASIC_INFORMATION (line 227) | [StructLayout(LayoutKind.Sequential)]
    method NtQueryInformationProcess (line 239) | [DllImport("ntdll.dll", SetLastError = true)]
    method GenerateConsoleCtrlEvent (line 242) | [DllImport("kernel32.dll", SetLastError = true)]
    method FreeConsole (line 245) | [DllImport("kernel32.dll", SetLastError = true)]
    method AttachConsole (line 248) | [DllImport("kernel32.dll", SetLastError = true)]
    method SetConsoleCtrlHandler (line 251) | [DllImport("kernel32.dll", SetLastError = true)]

FILE: src/Agent.Sdk/ProcessInvoker.cs
  class ProcessInvoker (line 23) | public partial class ProcessInvoker : IDisposable
    class AsyncManualResetEvent (line 39) | private class AsyncManualResetEvent
      method WaitAsync (line 43) | public Task WaitAsync() { return m_tcs.Task; }
      method Set (line 45) | public void Set()
      method Reset (line 53) | public void Reset()
    method ProcessInvoker (line 73) | public ProcessInvoker(ITraceWriter trace, bool disableWorkerCommands =...
    method ExecuteAsync (line 81) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 97) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 115) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 135) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 157) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 181) | public Task<int> ExecuteAsync(
    method ExecuteAsync (line 209) | public async Task<int> ExecuteAsync(
    method Dispose (line 405) | public void Dispose()
    method Dispose (line 411) | protected virtual void Dispose(bool disposing)
    method ProcessOutput (line 423) | private void ProcessOutput()
    method CancelAndKillProcessTree (line 468) | internal protected virtual async Task CancelAndKillProcessTree(bool ki...
    method SendSIGINT (line 501) | private async Task<bool> SendSIGINT(TimeSpan timeout)
    method SendSIGTERM (line 511) | private async Task<bool> SendSIGTERM(TimeSpan timeout)
    method ProcessExitedHandler (line 521) | private void ProcessExitedHandler(object sender, EventArgs e)
    method StartReadStream (line 542) | private void StartReadStream(StreamReader reader, ConcurrentQueue<stri...
    method StartWriteStream (line 569) | private void StartWriteStream(InputQueue<string> redirectStandardIn, S...
    method KillProcessTree (line 602) | private void KillProcessTree()
    method DecreaseProcessPriority (line 614) | private void DecreaseProcessPriority(Process process)
  class ProcessExitCodeException (line 643) | public sealed class ProcessExitCodeException : Exception
    method ProcessExitCodeException (line 647) | public ProcessExitCodeException(int exitCode, string fileName, string ...
  class ProcessDataReceivedEventArgs (line 654) | public sealed class ProcessDataReceivedEventArgs : EventArgs
    method ProcessDataReceivedEventArgs (line 656) | public ProcessDataReceivedEventArgs(string data)

FILE: src/Agent.Sdk/ScopedEnvironment.cs
  type IScopedEnvironment (line 10) | public interface IScopedEnvironment
    method GetEnvironmentVariables (line 12) | IDictionary GetEnvironmentVariables();
    method SetEnvironmentVariable (line 13) | void SetEnvironmentVariable(string key, string value);
    method GetEnvironmentVariable (line 14) | string GetEnvironmentVariable(string key);
  class SystemEnvironment (line 17) | public class SystemEnvironment : IScopedEnvironment
    method GetEnvironmentVariables (line 19) | public IDictionary GetEnvironmentVariables()
    method SetEnvironmentVariable (line 24) | public void SetEnvironmentVariable(string key, string value)
    method GetEnvironmentVariable (line 29) | public string GetEnvironmentVariable(string key)
  class LocalEnvironment (line 35) | public class LocalEnvironment : IScopedEnvironment
    method LocalEnvironment (line 39) | public LocalEnvironment() : this(null)
    method LocalEnvironment (line 44) | public LocalEnvironment(Dictionary<string, string> data)
    method GetEnvironmentVariables (line 53) | public IDictionary GetEnvironmentVariables()
    method SetEnvironmentVariable (line 62) | public void SetEnvironmentVariable(string key, string value)
    method GetEnvironmentVariable (line 67) | public string GetEnvironmentVariable(string key)

FILE: src/Agent.Sdk/SecretMasking/ILoggedSecretMasker.cs
  type ILoggedSecretMasker (line 19) | public interface ILoggedSecretMasker : IDisposable
    method AddRegex (line 23) | void AddRegex(string pattern, string origin);
    method AddValue (line 24) | void AddValue(string value, string origin);
    method AddValueEncoder (line 25) | void AddValueEncoder(Func<string, string> encoder, string origin);
    method MaskSecrets (line 26) | string MaskSecrets(string input);
    method RemoveShortSecretsFromDictionary (line 27) | void RemoveShortSecretsFromDictionary();
    method SetTrace (line 28) | void SetTrace(ITraceWriter trace);
    method StartTelemetry (line 42) | void StartTelemetry(int maxUniqueCorrelatingIds);
    method StopAndPublishTelemetry (line 57) | void StopAndPublishTelemetry(int maxCorrelatingIdsPerEvent, PublishSec...

FILE: src/Agent.Sdk/SecretMasking/IRawSecretMasker.cs
  type IRawSecretMasker (line 11) | public interface IRawSecretMasker : IDisposable
    method AddRegex (line 15) | void AddRegex(string pattern);
    method AddValue (line 16) | void AddValue(string value);
    method AddValueEncoder (line 17) | void AddValueEncoder(Func<string, string> encoder);
    method MaskSecrets (line 18) | string MaskSecrets(string input);
    method RemoveShortSecretsFromDictionary (line 19) | void RemoveShortSecretsFromDictionary();

FILE: src/Agent.Sdk/SecretMasking/LegacySecretMasker.cs
  class LegacySecretMasker (line 12) | public sealed class LegacySecretMasker : IRawSecretMasker
    method LegacySecretMasker (line 16) | public LegacySecretMasker()
    method LegacySecretMasker (line 21) | private LegacySecretMasker(ISecretMasker secretMasker)
    method AddRegex (line 32) | public void AddRegex(string pattern)
    method AddValue (line 37) | public void AddValue(string value)
    method AddValueEncoder (line 42) | public void AddValueEncoder(Func<string, string> encoder)
    method Dispose (line 47) | public void Dispose()
    method MaskSecrets (line 53) | public string MaskSecrets(string input)
    method RemoveShortSecretsFromDictionary (line 58) | public void RemoveShortSecretsFromDictionary()
    method Clone (line 63) | public LegacySecretMasker Clone()

FILE: src/Agent.Sdk/SecretMasking/LoggedSecretMasker.cs
  class LoggedSecretMasker (line 18) | public class LoggedSecretMasker : ILoggedSecretMasker
    method Trace (line 23) | private void Trace(string msg)
    method LoggedSecretMasker (line 28) | private LoggedSecretMasker(IRawSecretMasker secretMasker)
    method Create (line 33) | public static LoggedSecretMasker Create(IRawSecretMasker secretMasker)
    method SetTrace (line 42) | public void SetTrace(ITraceWriter trace)
    method AddValue (line 52) | public void AddValue(string value, string origin)
    method AddRegex (line 70) | public void AddRegex(string pattern, string origin)
    method RemoveShortSecretsFromDictionary (line 106) | public void RemoveShortSecretsFromDictionary()
    method AddValueEncoder (line 112) | public void AddValueEncoder(Func<string, string> encoder)
    method AddValueEncoder (line 122) | public void AddValueEncoder(Func<string, string> encoder, string origin)
    method MaskSecrets (line 134) | public string MaskSecrets(string input)
    method Dispose (line 139) | public void Dispose()
    method StartTelemetry (line 145) | public void StartTelemetry(int maxDetections)
    method StopAndPublishTelemetry (line 150) | public void StopAndPublishTelemetry(int maxDetectionsPerEvent, Publish...
    method Dispose (line 155) | protected virtual void Dispose(bool disposing)
    class LegacyLoggedSecretMasker (line 168) | private sealed class LegacyLoggedSecretMasker : LoggedSecretMasker, IS...
      method LegacyLoggedSecretMasker (line 170) | public LegacyLoggedSecretMasker(LegacySecretMasker secretMasker) : b...
      method AddRegex (line 172) | void ISecretMasker.AddRegex(string pattern)
      method AddValue (line 177) | void ISecretMasker.AddValue(string value)
      method AddValueEncoder (line 182) | void ISecretMasker.AddValueEncoder(ValueEncoder encoder)
      method Clone (line 187) | ISecretMasker ISecretMasker.Clone()

FILE: src/Agent.Sdk/SecretMasking/OssSecretMasker.cs
  class OssSecretMasker (line 14) | public sealed class OssSecretMasker : IRawSecretMasker
    method OssSecretMasker (line 19) | public OssSecretMasker(IEnumerable<RegexPattern> patterns = null)
    method AddRegex (line 35) | public void AddRegex(string pattern)
    method AddValue (line 53) | public void AddValue(string test)
    method AddValueEncoder (line 58) | public void AddValueEncoder(Func<string, string> encoder)
    method Dispose (line 63) | public void Dispose()
    method MaskSecrets (line 70) | public string MaskSecrets(string input)
    method StartTelemetry (line 84) | public void StartTelemetry(int maxUniqueCorrelatingIds)
    method StopAndPublishTelemetry (line 97) | public void StopAndPublishTelemetry(PublishSecretMaskerTelemetryAction...
    class Telemetry (line 115) | private sealed class Telemetry
      method Telemetry (line 131) | public Telemetry(int maxDetections)
      method ProcessInput (line 138) | public void ProcessInput(string input)
      method ProcessDetectionImplementation (line 146) | private void ProcessDetectionImplementation(Detection detection)
      method Publish (line 165) | public void Publish(PublishSecretMaskerTelemetryAction publishAction...
    method RemoveShortSecretsFromDictionary (line 237) | void IRawSecretMasker.RemoveShortSecretsFromDictionary() { }

FILE: src/Agent.Sdk/TaskPlugin.cs
  type IAgentTaskPlugin (line 24) | public interface IAgentTaskPlugin
    method RunAsync (line 28) | Task RunAsync(AgentTaskPluginExecutionContext executionContext, Cancel...
  class WellKnownJobSettings (line 31) | public class WellKnownJobSettings
  class AgentTaskPluginExecutionContext (line 40) | public class AgentTaskPluginExecutionContext : ITraceWriter, IKnobValueC...
    method AgentTaskPluginExecutionContext (line 47) | public AgentTaskPluginExecutionContext()
    method AgentTaskPluginExecutionContext (line 51) | public AgentTaskPluginExecutionContext(ITraceWriter trace)
    method InitializeVssConnection (line 83) | public VssConnection InitializeVssConnection()
    method GetInput (line 138) | public string GetInput(string name, bool required = false)
    method Info (line 154) | public void Info(string message, [CallerMemberName] string operation =...
    method Verbose (line 160) | public void Verbose(string message, [CallerMemberName] string operatio...
    method Error (line 170) | public void Error(string message)
    method Debug (line 177) | public void Debug(string message)
    method Warning (line 183) | public void Warning(string message)
    method PublishTelemetry (line 189) | public void PublishTelemetry(string area, string feature, Dictionary<s...
    method PublishTelemetry (line 198) | public void PublishTelemetry(string area, string feature, Dictionary<s...
    method PublishTelemetry (line 207) | public void PublishTelemetry(string area, string feature, TelemetryRec...
    method Output (line 210) | public void Output(string message)
    method IsSystemDebugTrue (line 226) | public bool IsSystemDebugTrue()
    method PrependPath (line 235) | public virtual void PrependPath(string directory)
    method Progress (line 242) | public void Progress(int progress, string operation)
    method SetSecret (line 253) | public void SetSecret(string secret)
    method SetVariable (line 259) | public void SetVariable(string variable, string value, bool isSecret =...
    method SetTaskVariable (line 267) | public void SetTaskVariable(string variable, string value, bool isSecr...
    method Command (line 275) | public void Command(string command)
    method UpdateRepositoryPath (line 281) | public void UpdateRepositoryPath(string alias, string path)
    method GetCertConfiguration (line 288) | public AgentCertificateSettings GetCertConfiguration()
    method GetProxyConfiguration (line 322) | public AgentWebProxySettings GetProxyConfiguration()
    method Escape (line 364) | private string Escape(string input)
    method GetVariableValueOrDefault (line 372) | string IKnobValueContext.GetVariableValueOrDefault(string variableName)
    method GetScopedEnvironment (line 377) | IScopedEnvironment IKnobValueContext.GetScopedEnvironment()

FILE: src/Agent.Sdk/Util/ArgUtil/ArgUtil.cs
  class ArgUtil (line 12) | public static class ArgUtil
    method Directory (line 15) | public static void Directory([ValidatedNotNull] string directory, stri...
    method Equal (line 20) | public static void Equal<T>(T expected, T actual, string name)
    method File (line 25) | public static void File(string fileName, string name)
    method NotNull (line 30) | public static void NotNull([ValidatedNotNull] object value, string name)
    method NotNullOrEmpty (line 35) | public static void NotNullOrEmpty([ValidatedNotNull] string value, str...
    method ListNotNullOrEmpty (line 40) | public static void ListNotNullOrEmpty<T>([ValidatedNotNull] IEnumerabl...
    method NotEmpty (line 45) | public static void NotEmpty(Guid value, string name)
    method Null (line 50) | public static void Null(object value, string name)
  class ValidatedNotNullAttribute (line 56) | [AttributeUsage(AttributeTargets.Parameter)]

FILE: src/Agent.Sdk/Util/ArgUtil/ArgUtilInstanced.cs
  class ArgUtilInstanced (line 9) | public class ArgUtilInstanced : IArgUtilInstanced
    method ArgUtilInstanced (line 11) | public ArgUtilInstanced() { }
    method Directory (line 13) | public virtual void Directory([ValidatedNotNull] string directory, str...
    method Equal (line 23) | public void Equal<T>(T expected, T actual, string name)
    method File (line 40) | public virtual void File(string fileName, string name)
    method NotNull (line 51) | public void NotNull([ValidatedNotNull] object value, string name)
    method NotNullOrEmpty (line 59) | public void NotNullOrEmpty([ValidatedNotNull] string value, string name)
    method ListNotNullOrEmpty (line 67) | public void ListNotNullOrEmpty<T>([ValidatedNotNull] IEnumerable<T> va...
    method NotEmpty (line 79) | public void NotEmpty(Guid value, string name)
    method Null (line 87) | public void Null(object value, string name)

FILE: src/Agent.Sdk/Util/ArgUtil/IArgUtilInstanced.cs
  type IArgUtilInstanced (line 7) | public interface IArgUtilInstanced
    method Directory (line 9) | public void Directory([ValidatedNotNull] string directory, string name);
    method Equal (line 11) | public void Equal<T>(T expected, T actual, string name);
    method File (line 13) | public void File(string fileName, string name);
    method NotNull (line 15) | public void NotNull([ValidatedNotNull] object value, string name);
    method NotNullOrEmpty (line 17) | public void NotNullOrEmpty([ValidatedNotNull] string value, string name);
    method ListNotNullOrEmpty (line 19) | public void ListNotNullOrEmpty<T>([ValidatedNotNull] IEnumerable<T> va...
    method NotEmpty (line 20) | public void NotEmpty(Guid value, string name);
    method Null (line 21) | public void Null(object value, string name);

FILE: src/Agent.Sdk/Util/AzureInstanceMetadataProvider.cs
  class AzureInstanceMetadataProvider (line 10) | class AzureInstanceMetadataProvider : IDisposable
    method AzureInstanceMetadataProvider (line 16) | public AzureInstanceMetadataProvider()
    method Dispose (line 22) | public void Dispose()
    method BuildRequest (line 28) | private HttpRequestMessage BuildRequest(string url, Dictionary<string,...
    method GetMetadata (line 52) | public string GetMetadata(string category, Dictionary<string, string> ...
    method HasMetadata (line 71) | public bool HasMetadata()

FILE: src/Agent.Sdk/Util/BlobStoreWarningInfoProvider.cs
  class BlobStoreWarningInfoProvider (line 8) | public static class BlobStoreWarningInfoProvider
    method GetAllowListLinkForCurrentPlatform (line 13) | public static string GetAllowListLinkForCurrentPlatform()
    class PlatformSpecificAllowList (line 37) | internal static class PlatformSpecificAllowList

FILE: src/Agent.Sdk/Util/CertificateUtil.cs
  class CertificateUtil (line 8) | public static class CertificateUtil
    method LoadCertificate (line 18) | public static X509Certificate2 LoadCertificate(string certificatePath,...

FILE: src/Agent.Sdk/Util/ExceptionsUtil.cs
  class ExceptionsUtil (line 10) | public class ExceptionsUtil
    method HandleAggregateException (line 12) | public static void HandleAggregateException(AggregateException e, Acti...
    method HandleSocketException (line 22) | public static void HandleSocketException(SocketException e, string url...

FILE: src/Agent.Sdk/Util/IOUtil.cs
  class IOUtil (line 19) | public static class IOUtil
    method SaveObject (line 41) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "...
    method LoadObject (line 47) | public static T LoadObject<T>(string path)
    method GetPathHash (line 53) | public static string GetPathHash(string path)
    method GetFileHash (line 71) | public static string GetFileHash(string path)
    method Delete (line 90) | public static void Delete(string path, CancellationToken cancellationT...
    method DeleteDirectory (line 96) | public static void DeleteDirectory(string path, CancellationToken canc...
    method DeleteDirectory (line 101) | public static void DeleteDirectory(string path, bool contentsOnly, boo...
    method DeleteFile (line 222) | public static void DeleteFile(string path)
    method DeleteDirectoryWithRetry (line 233) | public static async Task DeleteDirectoryWithRetry(string path, Cancell...
    method DeleteFileWithRetry (line 259) | public static async Task DeleteFileWithRetry(string path, Cancellation...
    method MoveDirectory (line 283) | public static void MoveDirectory(string sourceDir, string targetDir, s...
    method MakeRelative (line 319) | public static string MakeRelative(string path, string folder)
    method ResolvePath (line 356) | public static string ResolvePath(String rootPath, String relativePath)
    method CopyDirectory (line 434) | public static void CopyDirectory(string source, string target, Cancell...
    method ValidateExecutePermission (line 471) | public static void ValidateExecutePermission(string directory)
    method Enumerate (line 504) | private static IEnumerable<FileSystemInfo> Enumerate(DirectoryInfo dir...
    method GetAttributesAsBinary (line 532) | private static string GetAttributesAsBinary(FileAttributes attributes)
    method SetAttributesWithDiagnostics (line 537) | private static void SetAttributesWithDiagnostics(FileSystemInfo item, ...
    method RemoveReadOnly (line 562) | private static void RemoveReadOnly(FileSystemInfo item)
    method GetDirectoryName (line 572) | public static string GetDirectoryName(string path, PlatformUtil.OS pla...

FILE: src/Agent.Sdk/Util/MaskingUtil.cs
  class MaskingUtil (line 6) | public static class MaskingUtil
    method IsEndpointAuthorizationParametersSecret (line 14) | public static bool IsEndpointAuthorizationParametersSecret(string key)

FILE: src/Agent.Sdk/Util/NetFrameworkUtil.cs
  class NetFrameworkUtil (line 15) | [SupportedOSPlatform("windows")]
    method Test (line 20) | public static bool Test(Version minVersion, ITraceWriter trace)
    method InitVersions (line 28) | private static void InitVersions(ITraceWriter trace)
    method GetHklmSubKeyNames (line 190) | private static string[] GetHklmSubKeyNames(string keyName, ITraceWrite...
    method GetHklmValue (line 216) | private static object GetHklmValue(string keyName, string valueName, I...

FILE: src/Agent.Sdk/Util/NullTraceWriter.cs
  class NullTraceWriter (line 5) | internal class NullTraceWriter : ITraceWriter
    method Info (line 7) | public void Info(string message, [CallerMemberName] string operation =...
    method Verbose (line 11) | public void Verbose(string message, [CallerMemberName] string operatio...

FILE: src/Agent.Sdk/Util/PathUtil.cs
  class PathUtil (line 10) | public static class PathUtil
    method PrependPath (line 21) | public static string PrependPath(string path, string currentPath)
    method PrependPath (line 43) | public static void PrependPath(string directory)

FILE: src/Agent.Sdk/Util/PlatformUtil.cs
  class PlatformUtil (line 26) | public static class PlatformUtil
    type OS (line 35) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "...
    method IsRunningOnAppleSiliconAsX64Async (line 87) | public static async Task<bool> IsRunningOnAppleSiliconAsX64Async(Cance...
    method ExecuteShCommand (line 107) | private static async Task<string> ExecuteShCommand(string command, Can...
    method GetSystemId (line 139) | public static string GetSystemId()
    method GetSystemVersion (line 152) | public static SystemVersion GetSystemVersion()
    method DetectRHEL6 (line 165) | private static void DetectRHEL6()
    method GetLinuxReleaseFilePath (line 193) | private static string GetLinuxReleaseFilePath()
    method GetLinuxId (line 204) | private static string GetLinuxId()
    method GetLinuxName (line 231) | private static string GetLinuxName()
    method GetOSxName (line 258) | private static string GetOSxName()
    method GetWindowsId (line 272) | [SupportedOSPlatform("windows")]
    method GetWindowsName (line 293) | [SupportedOSPlatform("windows")]
    method GetWindowsVersion (line 315) | [SupportedOSPlatform("windows")]
    method IsNetVersionSupported (line 371) | public static async Task<bool> IsNetVersionSupported(string netVersion)
    method DetectDockerContainer (line 388) | public static bool DetectDockerContainer()
    method DetectAzureVM (line 424) | public static bool DetectAzureVM()
    method IsAgentCdnAccessibleAsync (line 462) | public static async Task<bool> IsAgentCdnAccessibleAsync(IWebProxy? we...
  class SystemVersion (line 487) | public class SystemVersion
    method SystemVersion (line 494) | [JsonConstructor]
    method Equals (line 513) | public override bool Equals(object obj)
    method ToString (line 527) | public override string ToString()
  class ParsedVersion (line 549) | public class ParsedVersion
    method ParsedVersion (line 561) | public ParsedVersion(string version)
    method Equals (line 584) | public override bool Equals(object obj)
    method ToString (line 599) | public override string ToString()
  class OperatingSystem (line 605) | public class OperatingSystem
    method OperatingSystem (line 611) | public OperatingSystem() { }
    method Equals (line 613) | public bool Equals(string systemId) =>
    method Equals (line 616) | public bool Equals(string systemId, SystemVersion systemVersion) =>

FILE: src/Agent.Sdk/Util/PsModulePathUtil.cs
  class PsModulePathUtil (line 9) | public static class PsModulePathUtil
    method ContainsPowershellCoreLocations (line 11) | [SupportedOSPlatform("windows")]

FILE: src/Agent.Sdk/Util/RepositoryUtil.cs
  class RepositoryUtil (line 13) | public static class RepositoryUtil
    method TrimStandardBranchPrefix (line 21) | public static string TrimStandardBranchPrefix(string branchName)
    method HasMultipleCheckouts (line 34) | public static bool HasMultipleCheckouts(Dictionary<string, string> job...
    method IsPrimaryRepositoryName (line 47) | public static bool IsPrimaryRepositoryName(string repoAlias)
    method GetPrimaryRepository (line 58) | public static RepositoryResource GetPrimaryRepository(IList<Repository...
    method GetTriggeringRepository (line 69) | public static RepositoryResource GetTriggeringRepository(IList<Reposit...
    method GetWellKnownRepository (line 74) | private static RepositoryResource GetWellKnownRepository(IList<Reposit...
    method IsWellKnownRepository (line 99) | public static bool IsWellKnownRepository(RepositoryResource repository...
    method GetRepositoryForLocalPath (line 114) | public static RepositoryResource GetRepositoryForLocalPath(IList<Repos...
    method GetRepository (line 147) | public static RepositoryResource GetRepository(IList<RepositoryResourc...
    method GuessRepositoryType (line 161) | public static string GuessRepositoryType(string repositoryUrl)
    method GetCloneDirectory (line 196) | public static string GetCloneDirectory(RepositoryResource repository)
    method GetCloneDirectory (line 213) | public static string GetCloneDirectory(string repoName)
    method TrimPortNumber (line 254) | private static int TrimPortNumber(string buffer, int endIndex, int sta...
    method TrimSlashesAndExtension (line 266) | private static int TrimSlashesAndExtension(string buffer, int endIndex)
    method SkipLastIndexOf (line 296) | private static int SkipLastIndexOf(this string buffer, char charToSear...
    method FinalIndexOf (line 310) | private static int FinalIndexOf(this string buffer, char charToSearchF...
    method SubstringIsNumber (line 320) | private static bool SubstringIsNumber(this string buffer, int startInd...

FILE: src/Agent.Sdk/Util/SslUtil.cs
  class SslUtil (line 11) | public sealed class SslUtil
    method SslUtil (line 16) | public SslUtil(ITraceWriter trace, bool IgnoreCertificateErrors = false)
    method RequestStatusCustomValidation (line 24) | public bool RequestStatusCustomValidation(HttpRequestMessage requestMe...
    method LoggingRequestDiagnosticData (line 41) | private void LoggingRequestDiagnosticData(HttpRequestMessage requestMe...
  class SslDiagnosticDataProvider (line 57) | public static class SslDiagnosticDataProvider
    method GetRequestMessageData (line 81) | public static string GetRequestMessageData(HttpRequestMessage requestM...
    method GetCertificateData (line 136) | public static string GetCertificateData(X509Certificate2 certificate)
    method GetChainData (line 159) | public static string GetChainData(X509Chain chain)
    method ResolveSslPolicyErrorsMessage (line 184) | public static string ResolveSslPolicyErrorsMessage(SslPolicyErrors ssl...
    method GetFormattedData (line 217) | private static string GetFormattedData(string diagInfoHeader, List<Key...

FILE: src/Agent.Sdk/Util/StringUtil.cs
  class StringUtil (line 18) | public static class StringUtil
    method StringUtil (line 24) | static StringUtil()
    method SubstringPrefix (line 40) | public static string SubstringPrefix(string value, int count)
    method ConvertFromJson (line 45) | public static T ConvertFromJson<T>(string value)
    method ConvertToBoolean (line 56) | public static bool ConvertToBoolean(string value, bool defaultValue = ...
    method ConvertToBooleanStrict (line 85) | public static bool ConvertToBooleanStrict(string value)
    method ConvertToJson (line 109) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "...
    method EnsureRegisterEncodings (line 115) | public static void EnsureRegisterEncodings()
    method Format (line 120) | public static string Format(string format, params object[] args)
    method GetSystemEncoding (line 125) | public static Encoding GetSystemEncoding()
    method Loc (line 141) | public static string Loc(string locKey)
    method Loc (line 185) | public static string Loc(string locKey, params object[] args)
    method Format (line 190) | private static string Format(CultureInfo culture, string format, param...
    method LoadExternalLocalization (line 218) | public static void LoadExternalLocalization(string stringsPath)
    method EnsureLoaded (line 231) | private static void EnsureLoaded()
    method HashNormalizer (line 269) | public static string HashNormalizer(string hash)
    method AreHashesEqual (line 276) | public static bool AreHashesEqual(string leftValue, string rightValue)
    method DeactivateVsoCommands (line 287) | public static string DeactivateVsoCommands(string input)

FILE: src/Agent.Sdk/Util/TeeUtil.cs
  class TeeUtil (line 14) | public class TeeUtil
    method TeeUtil (line 28) | public TeeUtil(
    method DownloadTeeIfAbsent (line 44) | public async Task DownloadTeeIfAbsent()
    method DownloadAndExtractTee (line 75) | private async Task DownloadAndExtractTee()
    method DownloadTee (line 105) | private async Task DownloadTee(string zipPath)
    method SetPermissions (line 122) | private void SetPermissions(string path, string permissions, bool recu...
    method DeleteTee (line 146) | public void DeleteTee()
    method GetTeePath (line 158) | private string GetTeePath()

FILE: src/Agent.Sdk/Util/UrlUtil.cs
  class UrlUtil (line 8) | public static class UrlUtil
    method GetCredentialEmbeddedUrl (line 10) | public static Uri GetCredentialEmbeddedUrl(Uri baseUrl, string usernam...

FILE: src/Agent.Sdk/Util/UtilKnobValueContext.cs
  class UtilKnobValueContext (line 7) | public class UtilKnobValueContext : IKnobValueContext
    method UtilKnobValueContext (line 11) | protected UtilKnobValueContext()
    method Instance (line 15) | public static UtilKnobValueContext Instance()
    method GetVariableValueOrDefault (line 25) | public string GetVariableValueOrDefault(string variableName)
    method GetScopedEnvironment (line 30) | public IScopedEnvironment GetScopedEnvironment()

FILE: src/Agent.Sdk/Util/VssUtil.cs
  class VssUtil (line 21) | public static class VssUtil
    method InitializeVssClientSettings (line 29) | public static void InitializeVssClientSettings(ProductInfoHeaderValue ...
    method PushTaskIntoAgentInfo (line 59) | public static void PushTaskIntoAgentInfo(string taskName, string taskV...
    method RemoveTaskFromAgentInfo (line 73) | public static void RemoveTaskFromAgentInfo()
    method CreateConnection (line 93) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainab...
    method GetVssCredential (line 132) | public static VssCredentials GetVssCredential(ServiceEndpoint serviceE...
    method IsCustomServerCertificateValidationSupported (line 154) | public static bool IsCustomServerCertificateValidationSupported(ITrace...
    method CheckSupportOfCustomServerCertificateValidation (line 168) | private static bool CheckSupportOfCustomServerCertificateValidation(IT...

FILE: src/Agent.Sdk/Util/WellKnownSecretAliases.cs
  class WellKnownSecretAliases (line 6) | public static class WellKnownSecretAliases

FILE: src/Agent.Sdk/Util/WhichUtil.cs
  class WhichUtil (line 11) | public static class WhichUtil
    method Which (line 13) | public static string Which(string command, bool require = false, ITrac...

FILE: src/Agent.Sdk/Util/WindowsProcessUtil.cs
  type ProcessInfo (line 11) | internal record ProcessInfo(int ProcessId, string ProcessName);
  class WindowsProcessUtil (line 13) | public static class WindowsProcessUtil
    method GetParentProcessInformation (line 15) | internal static ProcessInfo GetParentProcessInformation(int processId)
    method GetProcessList (line 45) | internal static List<ProcessInfo> GetProcessList()
    method IsAgentRunningInPowerShellCore (line 70) | public static bool IsAgentRunningInPowerShellCore()

FILE: src/Agent.Service/Windows/AgentService.Designer.cs
  class AgentService (line 6) | partial class AgentService
    method Dispose (line 17) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 32) | private void InitializeComponent()

FILE: src/Agent.Service/Windows/AgentService.cs
  class AgentService (line 17) | public partial class AgentService : ServiceBase
    method AgentService (line 28) | public AgentService(string serviceName)
    method OnStart (line 35) | protected override void OnStart(string[] args)
    method AgentListener_ErrorDataReceived (line 137) | private void AgentListener_ErrorDataReceived(object sender, DataReceiv...
    method AgentListener_OutputDataReceived (line 145) | private void AgentListener_OutputDataReceived(object sender, DataRecei...
    method CreateAgentListener (line 153) | private Process CreateAgentListener()
    method OnShutdown (line 167) | protected override void OnShutdown()
    method OnStop (line 173) | protected override void OnStop()
    method SendCtrlSignalToAgentListener (line 193) | private void SendCtrlSignalToAgentListener(uint signal)
    method HandleAgentUpdate (line 237) | private AgentUpdateResult HandleAgentUpdate()
    method WriteToEventLog (line 303) | private void WriteToEventLog(string eventText, EventLogEntryType entry...
    method GetDiagnosticFolderPath (line 308) | private string GetDiagnosticFolderPath()
    method WriteError (line 313) | private void WriteError(int exitCode)
    method WriteInfo (line 325) | private void WriteInfo(string message)
    method WriteException (line 330) | private void WriteException(Exception exception)
    type AgentUpdateResult (line 335) | private enum AgentUpdateResult
    method GenerateConsoleCtrlEvent (line 342) | [DllImport("kernel32.dll", SetLastError = true)]
    method AttachConsole (line 345) | [DllImport("kernel32.dll", SetLastError = true)]
    method FreeConsole (line 348) | [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
    method SetConsoleCtrlHandler (line 351) | [DllImport("kernel32.dll", SetLastError = true)]

FILE: src/Agent.Service/Windows/Program.cs
  class Program (line 11) | static class Program
    method Main (line 16) | static int Main(String[] args)

FILE: src/Agent.Service/Windows/Resource.Designer.cs
  class Resource (line 25) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Resource (line 34) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: src/Agent.Worker/AgentLogPlugin.cs
  type IAgentLogPlugin (line 21) | [ServiceLocator(Default = typeof(AgentLogPlugin))]
    method Sta
Condensed preview — 811 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,466K chars).
[
  {
    "path": ".CodeQL.yml",
    "chars": 938,
    "preview": "path_classifiers:\n  test:\n    # Note: use only forward slash / as a path separator.\n    # *  Matches any sequence of cha"
  },
  {
    "path": ".azure-pipelines/build-job.yml",
    "chars": 8197,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\nparameters:\n\n- name: jobName\n  type: stri"
  },
  {
    "path": ".azure-pipelines/build-jobs.yml",
    "chars": 2454,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\n\nparameters:\n\n- name: jobName\n  type: str"
  },
  {
    "path": ".azure-pipelines/get-pat.yml",
    "chars": 434,
    "preview": "steps:\n- task: AzureCLI@2\n  inputs:\n    azureSubscription: ARM - WIF - manual\n    scriptType: pscore\n    scriptLocation:"
  },
  {
    "path": ".azure-pipelines/package-vcredist.yml",
    "chars": 1091,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\nparameters:\n- name: layoutRoot\n  type: st"
  },
  {
    "path": ".azure-pipelines/pipeline.yml",
    "chars": 11783,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\n# This pipeline will be extended to the O"
  },
  {
    "path": ".azure-pipelines/scripts/Get-SigntoolPath.ps1",
    "chars": 771,
    "preview": "function Get-Signtool() {\n  <#\n    .SYNOPSIS\n    Function used to get signtool from windows SDK\n  #>\n\n  $systemBit = \"x6"
  },
  {
    "path": ".azure-pipelines/scripts/RemoveSignatureForThirdPartyAssemlies.ps1",
    "chars": 674,
    "preview": "<#\n  .SYNOPSIS\n    Script is used as a start point for the process of removing signature from the third party assemlies\n"
  },
  {
    "path": ".azure-pipelines/scripts/RemoveSignatureScript.ps1",
    "chars": 2281,
    "preview": "function Remove-ThirdPartySignatures() {\n  <#\n    .SYNOPSIS\n      The script is used to perform signature removal of thi"
  },
  {
    "path": ".azure-pipelines/scripts/run-and-verify.js",
    "chars": 1454,
    "preview": "/*\n\nScript arguments:\n    * Required:\n        - projectUrl\n        - pipelineId\n        - token\n    * Optional:\n        "
  },
  {
    "path": ".azure-pipelines/scripts/switch-branch.ps1",
    "chars": 258,
    "preview": "git config user.email \"azure-pipelines-bot@microsoft.com\"\ngit config user.name \"azure-pipelines-bot\"\n\ngit checkout -f or"
  },
  {
    "path": ".azure-pipelines/scripts/switch-branch.sh",
    "chars": 272,
    "preview": "git config user.email \"azure-pipelines-bot@microsoft.com\"\ngit config user.name \"azure-pipelines-bot\"\n\ngit checkout -f or"
  },
  {
    "path": ".azure-pipelines/signing.yml",
    "chars": 6615,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\nparameters:\n- name: layoutRoot\n  type: st"
  },
  {
    "path": ".editorconfig",
    "chars": 24583,
    "preview": "# NOTE: Requires **VS2019 16.3** or later\n\n# All Rules Enabled with default severity\n# Description: All Rules are enable"
  },
  {
    "path": ".gdn/.gdnbaselines",
    "chars": 6681,
    "preview": "{\n  \"hydrated\": false,\n  \"properties\": {\n    \"helpUri\": \"https://eng.ms/docs/microsoft-security/security/azure-security/"
  },
  {
    "path": ".gitattributes",
    "chars": 2958,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 96,
    "preview": "# Global rule:\n* @microsoft/azure-pipelines-tasks-and-agent @microsoft/azure-pipelines-platform\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "chars": 2311,
    "preview": "name: Bug\ndescription: File a bug report\ntitle: \"[BUG]: \"\nlabels: [\"bug\"]\nbody:\n  - type: markdown\n    attributes:\n     "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 850,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Developer Community\n    url: https://developercommunity.visualstudi"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.yml",
    "chars": 874,
    "preview": "name: Feature request\ndescription: Use this template to submit a feature request\ntitle: \"[enhancement]: \"\nlabels: [\"enha"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yml",
    "chars": 1983,
    "preview": "name: Help needed\ndescription: Raise a question\ntitle: \"[Question]: \"\nlabels: [\"helpwanted\"]\nbody:\n  - type: markdown\n  "
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 2212,
    "preview": "## Having issue with YAML?\nPlease log an issue at [Azure-Pipelines-YAML](https://github.com/Microsoft/azure-pipelines-ya"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 5276,
    "preview": "# GitHub Copilot Instructions for Azure Pipelines Agent\n\nThis repository contains the Azure Pipelines Agent, a cross-pla"
  },
  {
    "path": ".github/labelChecker/.npmrc",
    "chars": 128,
    "preview": "registry=https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/\n\nalways-au"
  },
  {
    "path": ".github/labelChecker/index.js",
    "chars": 1262,
    "preview": "const rm = require('typed-rest-client/RestClient');\nconst core = require('@actions/core');\nconst github = require('@acti"
  },
  {
    "path": ".github/labelChecker/package.json",
    "chars": 328,
    "preview": "{\n  \"name\": \"labelchecker\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": "
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 2139,
    "preview": "### **Context**\r\n_Explain the context or motivation behind this PR. Include links to any related Azure DevOps Work Items"
  },
  {
    "path": ".github/workflows/autoAssignABTT.yml",
    "chars": 669,
    "preview": "name: Auto Assign ABTT to Project Board\n\non:\n  issues:\n    types:\n      - opened\n\njobs:\n  assign_one_project:\n    runs-o"
  },
  {
    "path": ".github/workflows/labelChecker.yml",
    "chars": 273,
    "preview": "# This workflow ensures that all PRs are correctly labeled\n\nname: LabelChecker\non: [pull_request]\n\njobs:\n  label:\n\n    r"
  },
  {
    "path": ".github/workflows/localization-automerge.yml",
    "chars": 781,
    "preview": "name: 'LEGO automerge'\n\non:\n  pull_request:\n    types:\n      - opened\n    branches:\n      - Localization\n\njobs:\n  worker"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 550,
    "preview": "name: Mark stale issues and pull requests\n\non:\n  schedule:\n  - cron: \"0 * * * *\"\n\njobs:\n  stale:\n\n    runs-on: ubuntu-la"
  },
  {
    "path": ".gitignore",
    "chars": 361,
    "preview": "**/bin\n**/obj\n**/libs\n**/*.xproj\n**/*.xproj.user\n**/.vs\n**/.vscode\n**/*.error\n**/*.json.pretty\n**/.taskkey\nnode_modules\n"
  },
  {
    "path": ".vsts.ci.yml",
    "chars": 1755,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\nparameters:\n- name: testProxyAgent\n  type"
  },
  {
    "path": ".vsts.release.yml",
    "chars": 20685,
    "preview": "# This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool.\ntrigger:\n  branches:\n    include:\n    - '"
  },
  {
    "path": "LICENSE",
    "chars": 1081,
    "preview": "The MIT License (MIT)\nCopyright (c) Microsoft Corporation\n\nPermission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "README.md",
    "chars": 4734,
    "preview": "# Azure Pipelines Agent\n\n## Announcement -  `AZP_AGENT_USE_LEGACY_HTTP` agent knob future deprecation\n\nWe are working on"
  },
  {
    "path": "SECURITY.md",
    "chars": 2757,
    "preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
  },
  {
    "path": "assets.json",
    "chars": 5009,
    "preview": "[\n    {\n        \"name\": \"vsts-agent-win-x64-<AGENT_VERSION>.zip\",\n        \"platform\": \"win-x64\",\n        \"version\": \"<AG"
  },
  {
    "path": "azure-pipelines-agent.sln",
    "chars": 4605,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.2950"
  },
  {
    "path": "docs/contribute.md",
    "chars": 2910,
    "preview": "# Contribute (Dev)\n\n## Dev Dependencies\n\n![Win](res/win_sm.png) Git for Windows [Install Here](https://git-scm.com/downl"
  },
  {
    "path": "docs/design/auth.md",
    "chars": 6018,
    "preview": "# Agent Authentication and Authorization\n\n## Goals\n  - Support agent installs in untrusted domains\n  - The account that "
  },
  {
    "path": "docs/design/byos.md",
    "chars": 7860,
    "preview": "# Elastic Self-hosted Agent Pools (formerly \"BYOS: Bring Your Own Subscription Agent Pools\")\n\nMicrosoft-hosted agents ar"
  },
  {
    "path": "docs/design/clientcert.md",
    "chars": 9301,
    "preview": "# Support Ssl Client Certificate in Build/Release Job (TFS On-Prem Only)\n\n## Goals\n\n  - Support agent configure and conn"
  },
  {
    "path": "docs/design/coreclr.md",
    "chars": 9125,
    "preview": "\n# Agent Platform Plans\n\n## Goals\n\n  - Expand our Linux support: Right now we only support RedHat 7.2 and Ubuntu 14.04/1"
  },
  {
    "path": "docs/design/jobcancellation.md",
    "chars": 712,
    "preview": "\n# Agent jobs cancellation\n\nAgent receives cancellation signal from server - which initiates job cancellation process.\n\n"
  },
  {
    "path": "docs/design/logprocessors.md",
    "chars": 10499,
    "preview": "# Agent Log Processors RFC\n\n## Goals\n\nProvide an extensibility mechanism which offers other teams and partners to do add"
  },
  {
    "path": "docs/design/non-glibc-containers.md",
    "chars": 1643,
    "preview": "# Non-glibc Containers\n\nIf you want to use a non-glibc-based container, such as Alpine Linux, you will need to arrange a"
  },
  {
    "path": "docs/design/percentEncoding.md",
    "chars": 1785,
    "preview": "# Percent Encoding\n\n### Problem\n\nAs the agent currently works, there is no way to pass certain reserved values (%3B, %0D"
  },
  {
    "path": "docs/design/proxy.md",
    "chars": 2492,
    "preview": "# How Proxy Works in Agent and Task Execution\n\n## Goals\n\n  - Support agent configure and connect to VSTS/TFS behind web "
  },
  {
    "path": "docs/design/res/AgentLogProcessors.xml",
    "chars": 2343,
    "preview": "<mxfile userAgent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102"
  },
  {
    "path": "docs/design/setMTU.md",
    "chars": 945,
    "preview": "# Set custom MTU parameter\n\n## Goals\n  - Allow specifying MTU value for networks used by container jobs (useful for dock"
  },
  {
    "path": "docs/git.md",
    "chars": 1481,
    "preview": "# Git\n\nVSTS and TFS require git >= 2.9.  For windows, the agent bundles portable git.  For OSX and Linux, it is a pre-re"
  },
  {
    "path": "docs/jobdirectories.md",
    "chars": 4509,
    "preview": "\n# Job directories\n\n## Overview\n\n## Work Folder Layout\n\nThe agent keeps working files and folders in a directory named _"
  },
  {
    "path": "docs/layers.md",
    "chars": 1151,
    "preview": "# Architectural Layers of the Agent Code\n\n`Agent.Listener`, `Agent.Worker`, `Agent.PluginHost`, and `Agent.Plugins` are "
  },
  {
    "path": "docs/node6.md",
    "chars": 1045,
    "preview": "# Agent Packages and Node versions\n\nAgent tasks can be implemented in PowerShell or Node. The agent ships with multiple "
  },
  {
    "path": "docs/noderunner.md",
    "chars": 3172,
    "preview": "# Node 6 support\n\nAgent tasks can be implemented in PowerShell or Node. The agent currently ships with multiple versions"
  },
  {
    "path": "docs/preview/consumeoutputvariable.md",
    "chars": 3225,
    "preview": "\n# How to Set/Publish Output Variables in Task\n\n## Overview\n\nThe feature is to allow a given task to publish a set of va"
  },
  {
    "path": "docs/preview/latebreaking.md",
    "chars": 435,
    "preview": "# VSTS Agent System Pre-Requisites\n\n## ![win](../res/win_med.png) Windows\n\n[Windows System Pre-Requisties](../start/envw"
  },
  {
    "path": "docs/preview/logdecorations.md",
    "chars": 7222,
    "preview": "\n# Log decorations\n\n\nTask authors should be able to control how the log output is displayed to the end user.\nThis outlin"
  },
  {
    "path": "docs/preview/outdated/conditions.md",
    "chars": 11472,
    "preview": "\n# Task Conditions\n\n## Overview\n\nTeam build provides users with the capability to create a single definition with multip"
  },
  {
    "path": "docs/preview/outdated/pipeline.md",
    "chars": 26788,
    "preview": "# Pipelines\n\n#### Note to readers: This is still in flight so some concepts appear that are not fully flushed out\n\n## Go"
  },
  {
    "path": "docs/preview/outdated/resources.md",
    "chars": 14738,
    "preview": "# Resources\n## Goals\n- **Provide generic construct for data flow through a pipeline**: Consume and publish resources whi"
  },
  {
    "path": "docs/preview/outdated/yaml/dot-net-core-template.yaml",
    "chars": 3958,
    "preview": "---\n# Agent queue\nqueue: \"Default\"\n\n# Additional variables\nvariables: {}\n\n# Restore\nrestoreArguments: \"\"\n\n# Build\nbuild"
  },
  {
    "path": "docs/preview/outdated/yaml/dot-net-core.yaml",
    "chars": 159,
    "preview": "template:\n  name: dot-net-core-template.yaml\n  parameters:\n    buildProjects: \"**/*.sln\"\n    buildConfiguration: \"Debug"
  },
  {
    "path": "docs/preview/outdated/yaml/vsbuild-template.yaml",
    "chars": 3935,
    "preview": "---\n# Agent queue\nqueue: \"\"\n\n# Job expansion\nmatrix:\n  - buildConfiguration: release\n    buildPlatform: any cpu\n\n# Addi"
  },
  {
    "path": "docs/preview/outdated/yaml/vsbuild.yaml",
    "chars": 417,
    "preview": "# target:\n#   type: queue\n#   name: myQueue\ntemplate:\n  name: vsbuild-template.yaml\n  parameters:\n    queue: myQueue\n  "
  },
  {
    "path": "docs/preview/outdated/yamldeserialization.md",
    "chars": 11373,
    "preview": "# VSTS YAML deserialization\n\nThis document describes the details of the YAML deserialization process. This is not a \"get"
  },
  {
    "path": "docs/preview/outdated/yamlscripts.md",
    "chars": 12821,
    "preview": "# VSTS YAML simplified script syntax\n\nThe goal of this document is to define a simplified syntax for running scripts and"
  },
  {
    "path": "docs/preview/outputvariable.md",
    "chars": 5380,
    "preview": "\n# Output Variables\n\n## Overview\n\nThe feature is to allow a given task to publish a set of variables back to server, so "
  },
  {
    "path": "docs/preview/runtaskindocker.md",
    "chars": 2775,
    "preview": "\n# Run Job Inside Container (PREVIEW for Linux Agent)\n\n## Overview\n\nThe feature is to allow a given build/release job ex"
  },
  {
    "path": "docs/preview/yaml-authz-troubleshooting.md",
    "chars": 113,
    "preview": "# Moved!\n\nMoved to [the official docs site](https://docs.microsoft.com/azure/devops/pipelines/process/resources)."
  },
  {
    "path": "docs/preview/yamlgettingstarted.md",
    "chars": 453,
    "preview": "# Moved!\n\nWe've moved the YAML documentation out of preview and over to the official [docs site](https://docs.microsoft."
  },
  {
    "path": "docs/start/configonprem.md",
    "chars": 2488,
    "preview": "# Configure Agent for On-Premises TFS\n\n## Support\n\nThis agent is supported for:  \n![osx](../res/apple_sm.png) ![linux](."
  },
  {
    "path": "docs/start/configvsts.md",
    "chars": 1524,
    "preview": "# Configure Agent for VSTS Service\n\n## Key Points\n\n  - Use https account URL (https://contoso.visualstudio.com)  \n  - Sh"
  },
  {
    "path": "docs/start/envlinux.md",
    "chars": 140,
    "preview": "# System requirements: Linux\n\n[This page has moved.](https://docs.microsoft.com/azure/devops/pipelines/agents/v2-linux#c"
  },
  {
    "path": "docs/start/envosx.md",
    "chars": 138,
    "preview": "# System requirements: macOS\n\n[This page has moved.](https://docs.microsoft.com/azure/devops/pipelines/agents/v2-osx#che"
  },
  {
    "path": "docs/start/envredhat.md",
    "chars": 1379,
    "preview": "\n\n# ![redhat](../res/redhat_med.png) Red Hat/CentOS System Prerequisites [2.124.0 or below]\n\n## Versions\n\nTested on Red "
  },
  {
    "path": "docs/start/envubuntu.md",
    "chars": 1308,
    "preview": "\n\n# ![Ubuntu](../res/ubuntu_med.png) Ubuntu System Prerequisites [2.124.0 or below]\n\n## Versions\n\nTested on 18.04 LTS (B"
  },
  {
    "path": "docs/start/envwin.md",
    "chars": 144,
    "preview": "# System requirements: Windows\n\n[This page has moved.](https://docs.microsoft.com/azure/devops/pipelines/agents/v2-windo"
  },
  {
    "path": "docs/start/moreconfig.md",
    "chars": 1467,
    "preview": "# Replacing an agent\n\nIf an agent already exists, configuration will ask you if you want to replace it.  The name will d"
  },
  {
    "path": "docs/start/nixsvc.md",
    "chars": 4104,
    "preview": "# Running As A Service On Unix and OSX\n\nKey Points:\n  - This is a convenience which only creates OS specific service fil"
  },
  {
    "path": "docs/start/proxyconfig.md",
    "chars": 2146,
    "preview": "# Using VSTS Agent behind Proxy\n\n## Key Points\n  - Create .proxy file with proxy url under agent root directory.  \n  - I"
  },
  {
    "path": "docs/start/resourceconfig.md",
    "chars": 4988,
    "preview": "# Configure Resource Limits for Azure Pipelines Agent\n\n## Linux\n\n### Memory\nWhen the agent on a Linux system that is und"
  },
  {
    "path": "docs/start/roles.md",
    "chars": 1316,
    "preview": "# Configure Account and Roles\n\n## VSTS\n\nCreate a PAT token.  [Step by Step here](https://www.visualstudio.com/en-us/docs"
  },
  {
    "path": "docs/start/svcosx.md",
    "chars": 3835,
    "preview": "# Running As A Service OSX\n\nKey Points:\n  - This is a convenience which only creates OS specific service files.\n  - Crea"
  },
  {
    "path": "docs/start/svcsystemd.md",
    "chars": 2478,
    "preview": "# Running As A Service On Unix with systemd\n\nKey Points:\n  - This is a convenience which only creates OS specific servic"
  },
  {
    "path": "docs/threat-model/AgentsTasks-ThreatModel.tm7",
    "chars": 2065029,
    "preview": "<ThreatModel xmlns=\"http://schemas.datacontract.org/2004/07/ThreatModeling.Model\" xmlns:i=\"http://www.w3.org/2001/XMLSch"
  },
  {
    "path": "docs/threat-model/README.md",
    "chars": 783,
    "preview": "# Threat Model\n\nA threat model provides a visual representation of how components in the stack interact. When the model "
  },
  {
    "path": "docs/troubleshooting.md",
    "chars": 4064,
    "preview": "# Troubleshooting\n\nThe agent sends logs to the server but some failures such as configuration, networking or permissions"
  },
  {
    "path": "images/readme.md",
    "chars": 322,
    "preview": "# Docker Images for the Agent CI/CD Pipeline\n\n## Docker Hub\n\nIn order to publish these images, you need to be a member o"
  },
  {
    "path": "open-pullrequest.ps1",
    "chars": 1098,
    "preview": "param(\n    [Parameter(Mandatory)]\n    [string]\n    $SourceBranch\n) \n\n# Getting a created PR. Result object has interface"
  },
  {
    "path": "release/Send-PRsNotification.ps1",
    "chars": 1738,
    "preview": "# Send notifications by POST method to MS Teams webhook\n# Body of message is compiled as Office 365 connector card\n# Mor"
  },
  {
    "path": "release/createAdoPrs.js",
    "chars": 8941,
    "preview": "const azdev = require('azure-devops-node-api');\nconst fs = require('fs');\nconst path = require('path');\nconst tl = requi"
  },
  {
    "path": "release/createReleaseBranch.js",
    "chars": 13170,
    "preview": "const cp = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\nconst tl = require('azure-p"
  },
  {
    "path": "release/fillReleaseNotesTemplate.js",
    "chars": 3976,
    "preview": "const fs = require('fs');\nconst path = require('path');\nconst util = require('./util');\n\n/**\n * @param {*} releaseNotes "
  },
  {
    "path": "release/package.json",
    "chars": 249,
    "preview": "{\n  \"private\": true,\n  \"devDependencies\": {\n    \"@octokit/rest\": \"^16.43.2\",\n    \"@octokit/graphql\": \"^7.1.1\",\n    \"azur"
  },
  {
    "path": "release/rollrelease.js",
    "chars": 2278,
    "preview": "\nconst { Octokit } = require(\"@octokit/rest\");\nconst owner = 'microsoft';\nconst repo  = 'azure-pipelines-agent';\n\nvar op"
  },
  {
    "path": "release/util.js",
    "chars": 3800,
    "preview": "const cp = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\nconst GIT = 'git';\nconst G"
  },
  {
    "path": "releaseNote.md",
    "chars": 4893,
    "preview": "\n## Agent Downloads\n\n|                | Package | SHA-256 |\n| -------------- | ------- | ------- |\n| Windows x64    | [v"
  },
  {
    "path": "send-notifications.ps1",
    "chars": 1836,
    "preview": "param(\n    [Parameter(Mandatory = $true)]\n    [bool]$IsPRCreated,\n    [Parameter(Mandatory = $true)]\n    [string]$RepoNa"
  },
  {
    "path": "src/.helpers.sh",
    "chars": 493,
    "preview": "function failed()\n{\n   local error=${1:-Undefined error}\n   echo \"Failed: $error\" >&2\n   popd\n   exit 1\n}\n\nfunction warn"
  },
  {
    "path": "src/Agent.Listener/Agent.Listener.csproj",
    "chars": 2025,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\Common.props\" />\n\n  <PropertyGroup>\n    <OutputType>Exe</Outpu"
  },
  {
    "path": "src/Agent.Listener/Agent.cs",
    "chars": 40344,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Agent.Sdk.Util;\nusing"
  },
  {
    "path": "src/Agent.Listener/CommandLine/BaseCommand.cs",
    "chars": 347,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    public clas"
  },
  {
    "path": "src/Agent.Listener/CommandLine/ConfigureAgent.cs",
    "chars": 6054,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    [Verb(Const"
  },
  {
    "path": "src/Agent.Listener/CommandLine/ConfigureOrRemoveBase.cs",
    "chars": 1131,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    public clas"
  },
  {
    "path": "src/Agent.Listener/CommandLine/ReAuthAgent.cs",
    "chars": 228,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    [Verb(Const"
  },
  {
    "path": "src/Agent.Listener/CommandLine/RemoveAgent.cs",
    "chars": 228,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    [Verb(Const"
  },
  {
    "path": "src/Agent.Listener/CommandLine/RunAgent.cs",
    "chars": 775,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    // Default "
  },
  {
    "path": "src/Agent.Listener/CommandLine/WarmupAgent.cs",
    "chars": 218,
    "preview": "using CommandLine;\nusing Microsoft.VisualStudio.Services.Agent;\n\nnamespace Agent.Listener.CommandLine\n{\n    [Verb(Const"
  },
  {
    "path": "src/Agent.Listener/CommandSettings.cs",
    "chars": 32779,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration/ConfigurationManager.cs",
    "chars": 54633,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Agent.Sdk.Util;\nusing"
  },
  {
    "path": "src/Agent.Listener/Configuration/ConfigurationProvider.cs",
    "chars": 30427,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.TeamFoundation.DistributedTa"
  },
  {
    "path": "src/Agent.Listener/Configuration/CredentialManager.cs",
    "chars": 2834,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/Configuration/CredentialProvider.cs",
    "chars": 17379,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/Configuration/FeatureFlagProvider.cs",
    "chars": 3443,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Microsoft.VisualStud"
  },
  {
    "path": "src/Agent.Listener/Configuration/IRSAKeyManager.cs",
    "chars": 7959,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Listener.Configuration;\nusing Ag"
  },
  {
    "path": "src/Agent.Listener/Configuration/IntegratedCredential.cs",
    "chars": 1128,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration/NegotiateCredential.cs",
    "chars": 3476,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Microsoft.VisualStudi"
  },
  {
    "path": "src/Agent.Listener/Configuration/OAuthCredential.cs",
    "chars": 2548,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing Microsoft.VisualStudio.S"
  },
  {
    "path": "src/Agent.Listener/Configuration/PromptManager.cs",
    "chars": 3984,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration/RSAFileKeyManager.cs",
    "chars": 3792,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.IO;\nusing System."
  },
  {
    "path": "src/Agent.Listener/Configuration/ServiceControlManager.cs",
    "chars": 3428,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Linq;\nusing Micro"
  },
  {
    "path": "src/Agent.Listener/Configuration/Validators.cs",
    "chars": 3498,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration.Linux/SystemdControlManager.cs",
    "chars": 2520,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/AutoLogonManager.cs",
    "chars": 11740,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Diagnostics;\nusin"
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/AutoLogonRegistryManager.cs",
    "chars": 25988,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/NativeWindowsServiceHelper.cs",
    "chars": 62011,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/RSAEncryptedFileKeyManager.cs",
    "chars": 9426,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.VisualStudio.Services.Agent."
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/WindowsRegistryManager.cs",
    "chars": 3886,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Runtime.Versioning;\nusing Micro"
  },
  {
    "path": "src/Agent.Listener/Configuration.Windows/WindowsServiceControlManager.cs",
    "chars": 9673,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.IO;\nusing System."
  },
  {
    "path": "src/Agent.Listener/Configuration.macOS/MacOSServiceControlManager.cs",
    "chars": 2644,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.IO;\nusing System."
  },
  {
    "path": "src/Agent.Listener/Diagnostics/DiagnosticSuite.cs",
    "chars": 393,
    "preview": "using Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics;\nusing System;\nusing System.Collections.Generic;\nusing"
  },
  {
    "path": "src/Agent.Listener/Diagnostics/DiagnosticsTests.cs",
    "chars": 4054,
    "preview": "using Agent.Listener.Diagnostics;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.VisualStudio.Ser"
  },
  {
    "path": "src/Agent.Listener/Diagnostics/DiskInfo.cs",
    "chars": 1760,
    "preview": "using System.IO;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    class DiskInfo : IDiagnost"
  },
  {
    "path": "src/Agent.Listener/Diagnostics/DnsTest.cs",
    "chars": 804,
    "preview": "using System;\nusing System.Net;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    class DnsTe"
  },
  {
    "path": "src/Agent.Listener/Diagnostics/FolderPermissionInfo.cs",
    "chars": 2765,
    "preview": "using System;\nusing System.IO;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace Microso"
  },
  {
    "path": "src/Agent.Listener/Diagnostics/IDiagnosticInfo.cs",
    "chars": 165,
    "preview": "namespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    public interface IDiagnosticInfo\n    {\n     "
  },
  {
    "path": "src/Agent.Listener/Diagnostics/IDiagnosticTest.cs",
    "chars": 165,
    "preview": "namespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    public interface IDiagnosticTest\n    {\n     "
  },
  {
    "path": "src/Agent.Listener/Diagnostics/MtuInfo.cs",
    "chars": 1948,
    "preview": "using System.Net.NetworkInformation;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    class "
  },
  {
    "path": "src/Agent.Listener/Diagnostics/PingTest.cs",
    "chars": 1417,
    "preview": "using System.Net.NetworkInformation;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener.Diagnostics\n{\n    class "
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/TaskResources.g.cs",
    "chars": 33094,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Globalization;\n\nnamespace Micro"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Update-FromVso.ps1",
    "chars": 1609,
    "preview": "[CmdletBinding()]\nparam(\n    [Parameter(Mandatory = $true)]\n    [string]$VsoSrcPath,\n    \n    [switch]$SkipCopy)\n\n$Error"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/CheckoutStep.cs",
    "chars": 3289,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/DeploymentTarget.cs",
    "chars": 733,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IPhase.cs",
    "chars": 219,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.TeamFoundation.Distribut"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IPhaseTarget.cs",
    "chars": 274,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ISimpleStep.cs",
    "chars": 261,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.TeamFoundation.Distribut"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IStep.cs",
    "chars": 267,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\n\nnamespace Microsoft.TeamFound"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/IVariable.cs",
    "chars": 222,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.TeamFoundation.Distribut"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Phase.cs",
    "chars": 694,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhaseSelector.cs",
    "chars": 407,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhasesTemplate.cs",
    "chars": 453,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/PhasesTemplateReference.cs",
    "chars": 381,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Process.cs",
    "chars": 449,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Collections.Generic;\n\nnamespace"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessResource.cs",
    "chars": 730,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessTemplate.cs",
    "chars": 471,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Collections.Generic;\n\nnamespace"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ProcessTemplateReference.cs",
    "chars": 266,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.TeamFoundation.Distribut"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/QueueTarget.cs",
    "chars": 635,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/ServerTarget.cs",
    "chars": 538,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepGroup.cs",
    "chars": 380,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepsTemplate.cs",
    "chars": 403,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Collections.Generic;\n\nnamespace"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/StepsTemplateReference.cs",
    "chars": 486,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/TaskReference.cs",
    "chars": 524,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\n\nnamespace Microsoft.TeamFound"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/TaskStep.cs",
    "chars": 1571,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/Variable.cs",
    "chars": 339,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\n\nnamespace Microsoft.TeamFound"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/VariablesTemplate.cs",
    "chars": 326,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Collections.Generic;\n\nnamespace"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/Contracts/VariablesTemplateReference.cs",
    "chars": 417,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/FileData.cs",
    "chars": 439,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.ComponentModel;\n\n"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/IFileProvider.cs",
    "chars": 409,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.ComponentModel;\n\n"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/ITraceWriter.cs",
    "chars": 423,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.ComponentModel;\n\n"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/ParseOptions.cs",
    "chars": 1701,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.ComponentModel;\n\n"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/PipelineParser.cs",
    "chars": 26084,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.general.cs",
    "chars": 9617,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.phases.cs",
    "chars": 30225,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.processes.cs",
    "chars": 4139,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.steps.cs",
    "chars": 26908,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.variables.cs",
    "chars": 6153,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/PhasesTemplateConverter.cs",
    "chars": 2235,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ProcessConverter.cs",
    "chars": 10370,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ProcessTemplateConverter.cs",
    "chars": 2910,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/StepsTemplateConverter.cs",
    "chars": 1637,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/VariablesTemplateConverter.cs",
    "chars": 1978,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections;\nusin"
  },
  {
    "path": "src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/YamlConstants.cs",
    "chars": 2634,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\n\nnamespace Microsoft.TeamFound"
  },
  {
    "path": "src/Agent.Listener/JobDispatcher.cs",
    "chars": 76109,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk.Knob;\nusing Agent.Sdk.Util;\n"
  },
  {
    "path": "src/Agent.Listener/MessageListener.cs",
    "chars": 25019,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Microsoft.TeamFoundation.DistributedTa"
  },
  {
    "path": "src/Agent.Listener/NuGet.Config",
    "chars": 340,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <!--To inherit the global NuGet package s"
  },
  {
    "path": "src/Agent.Listener/Program.cs",
    "chars": 8918,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Agent.Sdk.Knob;\nusing"
  },
  {
    "path": "src/Agent.Listener/SelfUpdater.cs",
    "chars": 32423,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing Agent.Sdk;\nusing Agent.Sdk.Knob;\nusing"
  },
  {
    "path": "src/Agent.Listener/Telemetry/CustomerIntelligenceServer.cs",
    "chars": 1299,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System.Threading.Tasks;\nusing Microsof"
  },
  {
    "path": "src/Agent.Listener/Telemetry/TelemetryPublisher.cs",
    "chars": 4583,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/Telemetry/WorkerCrashTelemetryPublisher.cs",
    "chars": 1945,
    "preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nusing System;\nusing System.Collections.Gener"
  },
  {
    "path": "src/Agent.Listener/ValidationHelper/InstallerVerifier.cs",
    "chars": 12222,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Runtime.InteropServices;\nusing Syst"
  },
  {
    "path": "src/Agent.Listener/ValidationHelper/UnsafeNativeMethods.cs",
    "chars": 13557,
    "preview": "using System;\nusing System.Runtime.InteropServices;\nusing System.Security.Cryptography.X509Certificates;\nusing Microsof"
  },
  {
    "path": "src/Agent.Listener/ValidationHelper/Utility.cs",
    "chars": 452,
    "preview": "using System;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener\n{\n    public class Utility\n    {\n        /// <s"
  },
  {
    "path": "src/Agent.Listener/ValidationHelper/VerificationException.cs",
    "chars": 698,
    "preview": "using System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.VisualStudio.Services.Agent.Listener\n{\n\n    /// "
  },
  {
    "path": "src/Agent.Listener/net10.json",
    "chars": 1910,
    "preview": "[\n  {\n    \"id\": \"alpine\",\n    \"versions\": [\n      {\n        \"name\": \"3.22+\"\n      }\n    ]\n  },\n  {\n    \"id\": \"amzn\",\n   "
  },
  {
    "path": "src/Agent.Listener/net6.json",
    "chars": 1818,
    "preview": "[\n  {\n    \"id\": \"alpine\",\n    \"versions\": [\n      {\n        \"name\": \"3.13+\"\n      }\n    ]\n  },\n  {\n    \"id\": \"amzn\",\n   "
  },
  {
    "path": "src/Agent.Listener/net8.json",
    "chars": 1908,
    "preview": "[\n  {\n    \"id\": \"alpine\",\n    \"versions\": [\n      {\n        \"name\": \"3.20+\"\n      }\n    ]\n  },\n  {\n    \"id\": \"amzn\",\n   "
  },
  {
    "path": "src/Agent.PluginHost/Agent.PluginHost.csproj",
    "chars": 1093,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\Common.props\" />\n\n  <PropertyGroup>\n    <OutputType>Exe</Outpu"
  }
]

// ... and 611 more files (download for full content)

About this extraction

This page contains the full source code of the Microsoft/vsts-agent GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 811 files (8.6 MB), approximately 2.3M tokens, and a symbol index with 5727 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!