Add Personal Access Token management and Oh-My-Posh integration#262
Conversation
…ble synchronization
…confirmation patterns - Introduced RemovePersonalAccessToken cmdlet for revoking PATs, supporting admin and self-revocation scenarios. - Added SetPersonalAccessToken cmdlet to edit properties of existing PATs without regenerating them. - Implemented UpdatePersonalAccessToken cmdlet to regenerate PATs, preserving or overriding properties. - Created ITokenAdminHttpClient and ITokensHttpClient interfaces for token management. - Documented ShouldProcess and ShouldContinue guidelines for cmdlet confirmation support. - Added comprehensive architecture documentation for the TfsCmdlets project.
There was a problem hiding this comment.
Pull request overview
Adds Personal Access Token (PAT) lifecycle cmdlets and improves shell/prompt integration by exposing connection state via process environment variables and bundling an Oh-My-Posh theme, plus supporting documentation/tests.
Changes:
- Introduces
Get/New/Set/Update/Remove-TfsPersonalAccessTokencmdlets (including Token Admin support for other-user operations) and unit tests. - Adds Oh-My-Posh integration to
Enter-TfsShellwith a bundled theme and opt-out/custom-theme switches. - Synchronizes connection state to
TFSCMDLETS_*process environment variables and clears them on module unload.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| RELEASENOTES.md | Documents new PAT cmdlets, env var sync, and Oh-My-Posh integration. |
| PS/_Themes/azuredevops.omp.json | Adds a bundled Oh-My-Posh theme that reads TFSCMDLETS_* env vars. |
| Docs/ShouldProcess.md | Adds confirmation/ShouldProcess/ShouldContinue guidelines for mutation cmdlets. |
| Docs/ARCHITECTURE.md | Adds architecture documentation (currently includes several inaccurate/outdated repo details). |
| CSharp/TfsCmdlets/Services/Impl/CurrentConnectionsImpl.cs | Syncs connection state to TFSCMDLETS_* env vars; adds cleanup helper. |
| CSharp/TfsCmdlets/ModuleInitializer.cs | Clears TFSCMDLETS_* env vars on module unload via IModuleAssemblyCleanup. |
| CSharp/TfsCmdlets/HttpClients/ITokensHttpClient.cs | Adds generated HttpClient interface for PAT lifecycle API. |
| CSharp/TfsCmdlets/HttpClients/ITokenAdminHttpClient.cs | Adds generated HttpClient interface for Token Admin API. |
| CSharp/TfsCmdlets/Cmdlets/Shell/EnterShell.cs | Adds Oh-My-Posh detection/init and theme selection logic. |
| CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/GetPersonalAccessToken.cs | Implements PAT listing/getting for self and admin (Token Admin) scenarios. |
| CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/NewPersonalAccessToken.cs | Implements PAT creation. |
| CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/SetPersonalAccessToken.cs | Implements PAT metadata updates. |
| CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/UpdatePersonalAccessToken.cs | Implements PAT rotation (revoke + recreate). |
| CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/RemovePersonalAccessToken.cs | Implements PAT revocation for self/admin scenarios with -Force gated confirmation. |
| CSharp/TfsCmdlets.Tests.UnitTests/TfsCmdlets.Tests.UnitTests.csproj | Updates unit test target framework to net8.0-windows. |
| CSharp/TfsCmdlets.Tests.UnitTests/Controllers/Identity/PersonalAccessToken_Tests.cs | Adds unit tests for new PAT controllers. |
| AGENTS.md | Adds contributor/build/testing guidance (contains inaccurate controller-structure guidance). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Test Results 2 files 80 suites 2m 1s ⏱️ Results for commit 8b9e0ea. ♻️ This comment has been updated with latest results. |
…ersonalAccessToken.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…n for PAT cmdlets Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/164820b0-9985-4925-a619-1afcecaf647d Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…AGENTS.md controller guidance Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/65725977-f624-46f4-9f02-d76da0245657 Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 18 out of 18 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…trollers path - Pass null for optional API filters (DisplayFilter/SortBy/IsSortAscending) when user didn't explicitly provide them, so the API uses its server-side defaults instead of potentially invalid C# enum defaults (e.g. SortByOptions=0) - Add null-safety for result.PatTokens in ListPats loop - Update unit test to use nullable type matchers (Arg.Any<DisplayFilterOptions?>() etc.) - Fix ARCHITECTURE.md project tree: remove non-existent Controllers/ dir under TfsCmdlets/, move ControllerBase.cs into Cmdlets/, correct TfsCmdlets.Legacy/ layout Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/dc0900e8-42a9-43a0-bfed-f1a6e568991c Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com>
…sion.yml to streamline workflow configuration
…tiple locations and restore tools from the manifest
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
…ease note extraction
…tion with on-premises Servers
… Terminal support
…ws Terminal support and add color scheme fragments
…ation for improved handling
…cense.rtf to Setup directory
|
* Add support for Oh-My-Posh prompt customization and environment variable synchronization * Add cmdlets for managing Personal Access Tokens (PATs) and implement confirmation patterns - Introduced RemovePersonalAccessToken cmdlet for revoking PATs, supporting admin and self-revocation scenarios. - Added SetPersonalAccessToken cmdlet to edit properties of existing PATs without regenerating them. - Implemented UpdatePersonalAccessToken cmdlet to regenerate PATs, preserving or overriding properties. - Created ITokenAdminHttpClient and ITokensHttpClient interfaces for token management. - Documented ShouldProcess and ShouldContinue guidelines for cmdlet confirmation support. - Added comprehensive architecture documentation for the TfsCmdlets project. * Update CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/RemovePersonalAccessToken.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix RELEASENOTES.md: replace -AsAdmin with -User parameter description for PAT cmdlets Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/164820b0-9985-4925-a619-1afcecaf647d Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Enhance ShouldContinue method to check for interactive mode before prompting * Fix build error, project SessionToken to PatToken in admin path, fix AGENTS.md controller guidance Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/65725977-f624-46f4-9f02-d76da0245657 Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Update CSharp/TfsCmdlets/Cmdlets/Shell/EnterShell.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix GetPersonalAccessToken returning nothing; fix ARCHITECTURE.md Controllers path - Pass null for optional API filters (DisplayFilter/SortBy/IsSortAscending) when user didn't explicitly provide them, so the API uses its server-side defaults instead of potentially invalid C# enum defaults (e.g. SortByOptions=0) - Add null-safety for result.PatTokens in ListPats loop - Update unit test to use nullable type matchers (Arg.Any<DisplayFilterOptions?>() etc.) - Fix ARCHITECTURE.md project tree: remove non-existent Controllers/ dir under TfsCmdlets/, move ControllerBase.cs into Cmdlets/, correct TfsCmdlets.Legacy/ layout Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/dc0900e8-42a9-43a0-bfed-f1a6e568991c Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Refactor EnterShell parameters and integrate Oh-My-Posh theme configuration * Add PAT Scope argument completer for TFS Personal Access Token commands * Refactor GetPersonalAccessToken parameters for clarity and consistency * Enhance NewPersonalAccessToken to support multiple scopes and default expiration * Add guidelines for using extension methods and formatting output in AGENTS.md * Update release notes for version 2.11.0 to reflect changes in Enter-TfsShell integration and environment variable controls * Add documentation for the `Items` pattern in mutation controllers * Add aliases for PersonalAccessToken parameters to support "Pat" in cmdlets * Update SetPersonalAccessToken and UpdatePersonalAccessToken to support multiple scopes and add force option for regeneration * Enhance Enter-TfsShell documentation and update release notes for Oh-My-Posh integration * Refactor ShouldContinue method to remove IsInteractive check for improved functionality * Update AGENTS.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactor CurrentConnectionsImpl.Set() to avoid redundant SyncEnvironmentVariables() calls Each Set(...) overload now directly assigns all fields instead of chaining to a shorter overload, so SyncEnvironmentVariables() is called exactly once per Set/Reset invocation instead of multiple times due to chaining. Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/aca670c1-4ebd-4f8d-9639-783b5e985e8f Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Bump actions/download-artifact from 4 to 8 (#259) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v4...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump github/codeql-action from 3 to 4 (#258) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@v3...v4) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump actions/checkout from 4 to 6 (#256) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump actions/upload-artifact from 4 to 7 (#257) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump System.Composition and System.Composition.Hosting (#260) Bumps System.Composition from 6.0.0 to 10.0.5 Bumps System.Composition.Hosting from 6.0.0 to 10.0.5 --- updated-dependencies: - dependency-name: System.Composition dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Composition.Hosting dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Update release notes +semver:minor * Refactor Build.ps1 to enhance dependency management and update gitversion.yml to streamline workflow configuration * Add dotnet-tools.json for GitVersion tool configuration * Refactor main GitHub Actions workflow configuration * Enhance Install-DotNetTool function to check for tool manifest in multiple locations and restore tools from the manifest * Refactor Build.ps1 to use ordered dictionaries for dependency versions * Update action versions in workflows for consistency and security * Refactor build workflow to use PowerShell for asset packaging and release note extraction * Update gitversion.yml to change 'tag' to 'label' for pull-request configuration * Update pull-request mode in gitversion.yml to ContinuousDeployment * Enhance build versioning to include pre-release tags and commit count * Add input tag support to draft release finder in release workflow * Update release date for version 2.11.0 in changelog * Fix authentication errors when using Personal Access Token authentication with on-premises Servers * Add Install and Uninstall cmdlets for Azure DevOps Shell with Windows Terminal support * Update versioning in packaging tasks to use ThreePartVersion instead of NugetVersion * Enhance Azure DevOps Shell installation and uninstallation with Windows Terminal support and add color scheme fragments * Refactor Pester invocation in AllTests task to use New-PesterConfiguration for improved handling * Add Pester minimum version requirement and improve module installation logic * Remove obsolete License.rtf and TfsCmdletsShell.ico files; add new License.rtf to Setup directory * Update git add command to include all changes in release workflow --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Add support for Oh-My-Posh prompt customization and environment variable synchronization * Add cmdlets for managing Personal Access Tokens (PATs) and implement confirmation patterns - Introduced RemovePersonalAccessToken cmdlet for revoking PATs, supporting admin and self-revocation scenarios. - Added SetPersonalAccessToken cmdlet to edit properties of existing PATs without regenerating them. - Implemented UpdatePersonalAccessToken cmdlet to regenerate PATs, preserving or overriding properties. - Created ITokenAdminHttpClient and ITokensHttpClient interfaces for token management. - Documented ShouldProcess and ShouldContinue guidelines for cmdlet confirmation support. - Added comprehensive architecture documentation for the TfsCmdlets project. * Update CSharp/TfsCmdlets/Cmdlets/Identity/PersonalAccessToken/RemovePersonalAccessToken.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix RELEASENOTES.md: replace -AsAdmin with -User parameter description for PAT cmdlets Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/164820b0-9985-4925-a619-1afcecaf647d Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Enhance ShouldContinue method to check for interactive mode before prompting * Fix build error, project SessionToken to PatToken in admin path, fix AGENTS.md controller guidance Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/65725977-f624-46f4-9f02-d76da0245657 Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Update CSharp/TfsCmdlets/Cmdlets/Shell/EnterShell.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Docs/ARCHITECTURE.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix GetPersonalAccessToken returning nothing; fix ARCHITECTURE.md Controllers path - Pass null for optional API filters (DisplayFilter/SortBy/IsSortAscending) when user didn't explicitly provide them, so the API uses its server-side defaults instead of potentially invalid C# enum defaults (e.g. SortByOptions=0) - Add null-safety for result.PatTokens in ListPats loop - Update unit test to use nullable type matchers (Arg.Any<DisplayFilterOptions?>() etc.) - Fix ARCHITECTURE.md project tree: remove non-existent Controllers/ dir under TfsCmdlets/, move ControllerBase.cs into Cmdlets/, correct TfsCmdlets.Legacy/ layout Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/dc0900e8-42a9-43a0-bfed-f1a6e568991c Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Refactor EnterShell parameters and integrate Oh-My-Posh theme configuration * Add PAT Scope argument completer for TFS Personal Access Token commands * Refactor GetPersonalAccessToken parameters for clarity and consistency * Enhance NewPersonalAccessToken to support multiple scopes and default expiration * Add guidelines for using extension methods and formatting output in AGENTS.md * Update release notes for version 2.11.0 to reflect changes in Enter-TfsShell integration and environment variable controls * Add documentation for the `Items` pattern in mutation controllers * Add aliases for PersonalAccessToken parameters to support "Pat" in cmdlets * Update SetPersonalAccessToken and UpdatePersonalAccessToken to support multiple scopes and add force option for regeneration * Enhance Enter-TfsShell documentation and update release notes for Oh-My-Posh integration * Refactor ShouldContinue method to remove IsInteractive check for improved functionality * Update AGENTS.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactor CurrentConnectionsImpl.Set() to avoid redundant SyncEnvironmentVariables() calls Each Set(...) overload now directly assigns all fields instead of chaining to a shorter overload, so SyncEnvironmentVariables() is called exactly once per Set/Reset invocation instead of multiple times due to chaining. Agent-Logs-Url: https://github.com/igoravl/TfsCmdlets/sessions/aca670c1-4ebd-4f8d-9639-783b5e985e8f Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> * Bump actions/download-artifact from 4 to 8 (#259) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v4...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump github/codeql-action from 3 to 4 (#258) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@v3...v4) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump actions/checkout from 4 to 6 (#256) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump actions/upload-artifact from 4 to 7 (#257) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Bump System.Composition and System.Composition.Hosting (#260) Bumps System.Composition from 6.0.0 to 10.0.5 Bumps System.Composition.Hosting from 6.0.0 to 10.0.5 --- updated-dependencies: - dependency-name: System.Composition dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Composition.Hosting dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Igor Abade <igoravl@gmail.com> * Update release notes +semver:minor * Refactor Build.ps1 to enhance dependency management and update gitversion.yml to streamline workflow configuration * Add dotnet-tools.json for GitVersion tool configuration * Refactor main GitHub Actions workflow configuration * Enhance Install-DotNetTool function to check for tool manifest in multiple locations and restore tools from the manifest * Refactor Build.ps1 to use ordered dictionaries for dependency versions * Update action versions in workflows for consistency and security * Refactor build workflow to use PowerShell for asset packaging and release note extraction * Update gitversion.yml to change 'tag' to 'label' for pull-request configuration * Update pull-request mode in gitversion.yml to ContinuousDeployment * Enhance build versioning to include pre-release tags and commit count * Add input tag support to draft release finder in release workflow * Update release date for version 2.11.0 in changelog * Fix authentication errors when using Personal Access Token authentication with on-premises Servers * Add Install and Uninstall cmdlets for Azure DevOps Shell with Windows Terminal support * Update versioning in packaging tasks to use ThreePartVersion instead of NugetVersion * Enhance Azure DevOps Shell installation and uninstallation with Windows Terminal support and add color scheme fragments * Refactor Pester invocation in AllTests task to use New-PesterConfiguration for improved handling * Add Pester minimum version requirement and improve module installation logic * Remove obsolete License.rtf and TfsCmdletsShell.ico files; add new License.rtf to Setup directory * Update git add command to include all changes in release workflow --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: igoravl <725797+igoravl@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>




-AsAdminmode references with the actual-Userparameter forGet-TfsPersonalAccessTokenandRemove-TfsPersonalAccessTokenRemovePersonalAccessToken.cs(extra{from bad reviewer suggestion in commit 8a2f0b0)SessionToken→PatTokenin admin path ofGetPersonalAccessToken.csto ensure consistentOutputType = typeof(PatToken)across all parameter sets; added unit testAGENTS.mdControllers section, Project structure, and "Adding a new cmdlet" steps to correctly reflect that controllers are partial classes in the same file as their cmdlet underCSharp/TfsCmdlets/Cmdlets/{Domain}/Get-TfsPersonalAccessTokenreturning no results:ListPatsnow passesnullfor unspecified optional filter parameters (DisplayFilter,SortBy,IsSortAscending) so the API uses server-side defaults instead of potentially mismatched C# enum zero-values; added null guard forPatTokensDocs/ARCHITECTURE.mdproject structure tree: remove non-existentControllers/directory underCSharp/TfsCmdlets/, moveControllerBase.csinsideCmdlets/where it actually lives, and correctTfsCmdlets.Legacy/layoutCurrentConnectionsImpl.Set()overloads to avoid redundantSyncEnvironmentVariables()calls — each overload now assigns all fields directly instead of chaining, so env vars are synced exactly once per call