@achieveai/azuredevops-mcp 1.3.14 → 1.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Services/BuildService.project.test.js +91 -0
- package/dist/Services/BuildService.project.test.js.map +1 -0
- package/dist/Services/EntraAuthHandler.js +24 -0
- package/dist/Services/EntraAuthHandler.js.map +1 -1
- package/dist/Services/GitService.js +118 -83
- package/dist/Services/GitService.js.map +1 -1
- package/dist/Services/GitService.project.test.js +407 -0
- package/dist/Services/GitService.project.test.js.map +1 -0
- package/dist/Services/WorkItemService.js +2 -2
- package/dist/Services/WorkItemService.js.map +1 -1
- package/dist/index.js +45 -24
- package/dist/index.js.map +1 -1
- package/dist/utils/formatHelpers.js +19 -0
- package/dist/utils/formatHelpers.js.map +1 -1
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -194,7 +194,7 @@ async function main() {
|
|
|
194
194
|
});
|
|
195
195
|
allowedTools.has("addWorkItemComment") && server.tool("addWorkItemComment", "Add a comment to a work item. Supports markdown formatting by default. Use #ID to reference work items, @user to mention people.", {
|
|
196
196
|
id: zId().describe("ID of the work item"),
|
|
197
|
-
text: zod_1.z.string().describe("Comment text
|
|
197
|
+
text: zod_1.z.string().describe("Comment text. Supports full markdown — use #ID to link work items, @user to mention people. IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text."),
|
|
198
198
|
format: zod_1.z.enum(['markdown', 'html']).optional().default('markdown').describe("Comment format: 'markdown' (default) or 'html'")
|
|
199
199
|
}, async (params, extra) => {
|
|
200
200
|
const result = await workItemTools.addWorkItemComment(params);
|
|
@@ -208,7 +208,7 @@ async function main() {
|
|
|
208
208
|
allowedTools.has("manageWorkItemComment") && server.tool("manageWorkItemComment", "Add or update a comment on a work item. Use action 'add' for new comments, 'update' to edit existing ones. Markdown supported. Use #ID to reference work items, @user to mention people.", {
|
|
209
209
|
action: zod_1.z.enum(['add', 'update']).describe("'add' for new comment, 'update' to edit existing"),
|
|
210
210
|
id: zId().describe("Work item ID"),
|
|
211
|
-
text: zod_1.z.string().describe("Comment text
|
|
211
|
+
text: zod_1.z.string().describe("Comment text. Supports full markdown. IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text."),
|
|
212
212
|
format: zod_1.z.enum(['markdown', 'html']).optional().default('markdown').describe("Comment format"),
|
|
213
213
|
commentId: zIdOptional().describe("Comment ID — required for 'update' action"),
|
|
214
214
|
}, async (params, extra) => {
|
|
@@ -598,7 +598,8 @@ async function main() {
|
|
|
598
598
|
allowedTools.has("listBranches") && server.tool("listBranches", "List all branches in a Git repository with optional name pattern filtering and pagination. Returns branch details including name, commit ID, and object ID. Results can be filtered using wildcards (e.g., 'feature/*' for all feature branches). Supports both repository names and IDs.", {
|
|
599
599
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) to list branches from. Repository names are case-insensitive."),
|
|
600
600
|
filter: zod_1.z.string().optional().describe("Optional wildcard pattern to filter branch names (e.g., 'feature/*', 'release/*'). Use this to narrow down results to specific branch types."),
|
|
601
|
-
top: zod_1.z.coerce.number().optional().describe("Maximum number of branches to return in the response. Use this to limit large result sets, especially for repositories with many branches.")
|
|
601
|
+
top: zod_1.z.coerce.number().optional().describe("Maximum number of branches to return in the response. Use this to limit large result sets, especially for repositories with many branches."),
|
|
602
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
602
603
|
}, async (params, extra) => {
|
|
603
604
|
const result = await gitTools.listBranches(params);
|
|
604
605
|
return {
|
|
@@ -628,7 +629,8 @@ async function main() {
|
|
|
628
629
|
version: zod_1.z.string().optional().describe("The name of the branch (e.g., 'main'), tag, or commit ID to browse. Defaults to the default branch if not specified."),
|
|
629
630
|
versionOptions: zod_1.z.string().optional().describe("Additional version options: 'None', 'PreviousChange', 'FirstParent'. Usually leave this undefined."),
|
|
630
631
|
versionType: zod_1.z.string().optional().describe("Type of version: 'Branch', 'Tag', 'Commit'. Usually inferred automatically from the version parameter.")
|
|
631
|
-
}).optional().describe("Optional specification for which version of the repository to browse. Use this to view files at a specific branch, tag, or commit.")
|
|
632
|
+
}).optional().describe("Optional specification for which version of the repository to browse. Use this to view files at a specific branch, tag, or commit."),
|
|
633
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
632
634
|
}, async (params, extra) => {
|
|
633
635
|
const result = await gitTools.browseRepository(params);
|
|
634
636
|
return {
|
|
@@ -646,7 +648,8 @@ async function main() {
|
|
|
646
648
|
version: zod_1.z.string().optional().describe("The name of the branch (e.g., 'main'), tag, or commit ID to retrieve the file from. Defaults to the default branch if not specified."),
|
|
647
649
|
versionOptions: zod_1.z.string().optional().describe("Additional version options: 'None', 'PreviousChange', 'FirstParent'. Usually leave this undefined."),
|
|
648
650
|
versionType: zod_1.z.string().optional().describe("Type of version: 'Branch', 'Tag', 'Commit'. Usually inferred automatically from the version parameter.")
|
|
649
|
-
}).optional().describe("Optional specification for which version of the file to retrieve. Use this to view file content at a specific branch, tag, or commit.")
|
|
651
|
+
}).optional().describe("Optional specification for which version of the file to retrieve. Use this to view file content at a specific branch, tag, or commit."),
|
|
652
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
650
653
|
}, async (params, extra) => {
|
|
651
654
|
const result = await gitTools.getFileContent(params);
|
|
652
655
|
return {
|
|
@@ -669,13 +672,15 @@ async function main() {
|
|
|
669
672
|
structuredContent: result.structuredContent
|
|
670
673
|
};
|
|
671
674
|
});
|
|
672
|
-
allowedTools.has("listPullRequests") && server.tool("listPullRequests", "Retrieve a list of pull requests in a Git repository with comprehensive filtering options. Returns a concise table with PR details including ID, title, author, status, and branches, along with a summary of PRs by status. Filter by status, creator, or reviewer to find specific PRs. Supports both repository names and IDs.", {
|
|
675
|
+
allowedTools.has("listPullRequests") && server.tool("listPullRequests", "Retrieve a list of pull requests in a Git repository with comprehensive filtering options. Returns a concise table with PR details including ID, title, author, status, and branches, along with a summary of PRs by status. Filter by status, creator, or reviewer to find specific PRs. Supports both repository names and IDs. By default only active (open) PRs are returned.", {
|
|
673
676
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) to list pull requests from. Repository names are case-insensitive."),
|
|
674
|
-
status: zod_1.z.enum(['abandoned', 'active', 'all', 'completed', 'notSet']).optional().describe("Filter pull requests by their current status
|
|
675
|
-
creatorId: zod_1.z.string().optional().describe("Filter pull requests to only those created by a specific user ID or email address."),
|
|
677
|
+
status: zod_1.z.enum(['abandoned', 'active', 'all', 'completed', 'notSet']).optional().describe("Filter pull requests by their current status. Defaults to 'active' (open PRs). Use 'completed' for merged PRs, 'abandoned' for closed/rejected PRs, 'all' for all PRs regardless of status."),
|
|
678
|
+
creatorId: zod_1.z.string().optional().describe("Filter pull requests to only those created by a specific user ID or email address. Use 'creatorIds' for multiple developers."),
|
|
679
|
+
creatorIds: zod_1.z.array(zod_1.z.string()).optional().describe("Filter pull requests to those created by any of the specified user IDs or email addresses. Example: ['user1@example.com', 'user2@example.com']"),
|
|
676
680
|
reviewerId: zod_1.z.string().optional().describe("Filter pull requests to only those where a specific user ID or email address has been assigned as a reviewer."),
|
|
677
681
|
top: zod_1.z.coerce.number().optional().describe("Maximum number of pull requests to return in the response. Use this for pagination to handle repositories with many PRs."),
|
|
678
|
-
skip: zod_1.z.coerce.number().optional().describe("Number of pull requests to skip before starting to return results. Use with 'top' for implementing pagination.")
|
|
682
|
+
skip: zod_1.z.coerce.number().optional().describe("Number of pull requests to skip before starting to return results. Use with 'top' for implementing pagination."),
|
|
683
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
679
684
|
}, async (params, extra) => {
|
|
680
685
|
const result = await gitTools.listPullRequests(params);
|
|
681
686
|
return {
|
|
@@ -689,7 +694,8 @@ async function main() {
|
|
|
689
694
|
targetRefName: zod_1.z.string().describe("The name of the target branch where changes will be merged into, in full reference format (e.g., 'refs/heads/main')."),
|
|
690
695
|
title: zod_1.z.string().describe("A concise, descriptive title for the pull request that summarizes the changes being proposed."),
|
|
691
696
|
description: zod_1.z.string().optional().describe("A detailed description of the changes in the pull request. Can include markdown formatting for rich text, lists, code blocks, etc."),
|
|
692
|
-
reviewers: zod_1.z.array(zod_1.z.string()).optional().describe("An array of user IDs or email addresses to assign as reviewers to the pull request. These users will be notified about the PR.")
|
|
697
|
+
reviewers: zod_1.z.array(zod_1.z.string()).optional().describe("An array of user IDs or email addresses to assign as reviewers to the pull request. These users will be notified about the PR."),
|
|
698
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
693
699
|
}, async (params, extra) => {
|
|
694
700
|
const result = await gitTools.createPullRequest(params);
|
|
695
701
|
return {
|
|
@@ -709,7 +715,8 @@ async function main() {
|
|
|
709
715
|
"Supports both repository names and IDs.", {
|
|
710
716
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
711
717
|
pullRequestId: zId().describe("The numeric ID of the pull request to retrieve. This is the PR number shown in the Azure DevOps UI (e.g., PR #123)."),
|
|
712
|
-
include: zod_1.z.array(zod_1.z.enum(['policies', 'description', 'reviewers', 'workItems', 'completionOptions', 'files'])).optional().describe("Sections to return in full detail. When omitted, returns compact overview with all sections truncated. Specify sections you need full data for.")
|
|
718
|
+
include: zod_1.z.array(zod_1.z.enum(['policies', 'description', 'reviewers', 'workItems', 'completionOptions', 'files'])).optional().describe("Sections to return in full detail. When omitted, returns compact overview with all sections truncated. Specify sections you need full data for."),
|
|
719
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
713
720
|
}, async (params, extra) => {
|
|
714
721
|
const result = await gitTools.getPullRequest(params);
|
|
715
722
|
return {
|
|
@@ -725,7 +732,8 @@ async function main() {
|
|
|
725
732
|
status: zod_1.z.enum(['active', 'fixed', 'wontFix', 'closed', 'byDesign', 'pending']).optional().describe("Filter threads by status. Use 'active' to see only unresolved threads, 'fixed' for resolved ones, etc."),
|
|
726
733
|
authorName: zod_1.z.string().optional().describe("Filter threads by author display name or email (case-insensitive partial match). Only threads where the root comment was authored by a matching user are returned."),
|
|
727
734
|
top: zod_1.z.coerce.number().optional().describe("Maximum number of comment threads to return in the response. Use this for pagination in PRs with many comments."),
|
|
728
|
-
skip: zod_1.z.coerce.number().optional().describe("Number of comment threads to skip before starting to return results. Use with 'top' for implementing pagination.")
|
|
735
|
+
skip: zod_1.z.coerce.number().optional().describe("Number of comment threads to skip before starting to return results. Use with 'top' for implementing pagination."),
|
|
736
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
729
737
|
}, async (params, extra) => {
|
|
730
738
|
const result = await gitTools.getPullRequestComments(params);
|
|
731
739
|
return {
|
|
@@ -737,7 +745,8 @@ async function main() {
|
|
|
737
745
|
});
|
|
738
746
|
allowedTools.has("approvePullRequest") && server.tool("approvePullRequest", "Cast an 'Approve' vote on a pull request on behalf of the current authenticated user. This marks the PR as approved by the user and contributes toward satisfying approval requirements defined in branch policies. Equivalent to clicking 'Approve' in the Azure DevOps UI. Supports both repository names and IDs.", {
|
|
739
747
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
740
|
-
pullRequestId: zId().describe("The numeric ID of the pull request to approve. This is the PR number shown in the Azure DevOps UI (e.g., PR #123).")
|
|
748
|
+
pullRequestId: zId().describe("The numeric ID of the pull request to approve. This is the PR number shown in the Azure DevOps UI (e.g., PR #123)."),
|
|
749
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
741
750
|
}, async (params, extra) => {
|
|
742
751
|
const result = await gitTools.approvePullRequest(params);
|
|
743
752
|
return {
|
|
@@ -750,7 +759,8 @@ async function main() {
|
|
|
750
759
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
751
760
|
pullRequestId: zId().describe("The numeric ID of the pull request to merge. This is the PR number shown in the Azure DevOps UI (e.g., PR #123)."),
|
|
752
761
|
mergeStrategy: zod_1.z.enum(['noFastForward', 'rebase', 'rebaseMerge', 'squash']).optional().describe("The strategy to use when merging changes: 'noFastForward' creates a merge commit, 'rebase' updates the source branch commits onto the target branch, 'rebaseMerge' combines rebase with a merge commit, 'squash' combines all changes into a single commit."),
|
|
753
|
-
comment: zod_1.z.string().optional().describe("Optional comment to include in the merge commit message. Use this to provide additional context about the merge beyond the default message.")
|
|
762
|
+
comment: zod_1.z.string().optional().describe("Optional comment to include in the merge commit message. Use this to provide additional context about the merge beyond the default message."),
|
|
763
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
754
764
|
}, async (params, extra) => {
|
|
755
765
|
const result = await gitTools.mergePullRequest(params);
|
|
756
766
|
return {
|
|
@@ -763,7 +773,7 @@ async function main() {
|
|
|
763
773
|
allowedTools.has("addPullRequestInlineComment") && server.tool("addPullRequestInlineComment", "Add an inline code comment anchored to a SPECIFIC LINE of code in a file. The comment appears directly on that line in the Files tab. WHEN TO USE: Point out specific code issues, suggest improvements to a particular line, or ask questions about specific implementation details. EXAMPLES: 'This variable should be null-checked here', 'Consider using async/await on line 45', 'Why is this hardcoded?'. The system automatically retrieves the correct change tracking ID from the PR diff.", {
|
|
764
774
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
765
775
|
pullRequestId: zId().describe("The numeric ID of the pull request where the comment will be added. This is the PR number shown in the Azure DevOps UI."),
|
|
766
|
-
comment: zod_1.z.string().describe("The text content of the comment
|
|
776
|
+
comment: zod_1.z.string().describe("The text content of the comment. Supports full markdown (headers, lists, code blocks, bold, etc.). IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text. Example: \"## Issue\\n\\nMissing null check\" where \\n is a real JSON newline escape."),
|
|
767
777
|
position: zod_1.z.object({
|
|
768
778
|
line: zod_1.z.coerce.number().describe("The 1-based line number in the file where the comment starts. Must be a line visible in the PR diff (added, removed, or context line)."),
|
|
769
779
|
offset: zod_1.z.coerce.number().describe("The character offset within the start line. Typically use 1 for beginning of line."),
|
|
@@ -771,7 +781,8 @@ async function main() {
|
|
|
771
781
|
endOffset: zod_1.z.coerce.number().optional().describe("Optional character offset within the end line. Required when endLine is provided. Typically use 1 for end of selection.")
|
|
772
782
|
}).describe("The position within the file where the comment will be anchored. Use line/offset for single-line comments, add endLine/endOffset for multi-line range comments."),
|
|
773
783
|
path: zod_1.z.string().describe("The full path to the file within the repository that the comment relates to. Must be a file changed in the PR (e.g., '/src/Services/UserService.cs')."),
|
|
774
|
-
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering.")
|
|
784
|
+
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering."),
|
|
785
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
775
786
|
}, async (params, extra) => {
|
|
776
787
|
const result = await gitTools.addPullRequestInlineComment(params);
|
|
777
788
|
return {
|
|
@@ -784,8 +795,9 @@ async function main() {
|
|
|
784
795
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
785
796
|
pullRequestId: zId().describe("The numeric ID of the pull request where the comment will be added. This is the PR number shown in the Azure DevOps UI."),
|
|
786
797
|
path: zod_1.z.string().describe("The full path to the file within the repository that the comment relates to. Must be a file changed in the PR (e.g., '/src/Models/User.cs')."),
|
|
787
|
-
comment: zod_1.z.string().describe("The text content of the comment about the entire file.
|
|
788
|
-
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering.")
|
|
798
|
+
comment: zod_1.z.string().describe("The text content of the comment about the entire file. Supports full markdown (headers, lists, code blocks, bold, etc.). IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text. Example: \"## Summary\\n\\nThis file needs refactoring\" where \\n is a real JSON newline escape."),
|
|
799
|
+
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering."),
|
|
800
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
789
801
|
}, async (params, extra) => {
|
|
790
802
|
const result = await gitTools.addPullRequestFileComment(params);
|
|
791
803
|
return {
|
|
@@ -797,8 +809,9 @@ async function main() {
|
|
|
797
809
|
allowedTools.has("addPullRequestComment") && server.tool("addPullRequestComment", "Add a GENERAL comment about the entire pull request (not tied to any file or code). Appears in the Overview/Conversation tab. WHEN TO USE: Provide overall feedback, discuss architecture, approve/reject the PR, ask general questions, or comment on the PR description. EXAMPLES: 'This feature looks great! LGTM after CI passes', 'Can you add integration tests for this feature?', 'What's the performance impact of these changes?', 'Please update the documentation before merging'.", {
|
|
798
810
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
799
811
|
pullRequestId: zId().describe("The numeric ID of the pull request where the comment will be added. This is the PR number shown in the Azure DevOps UI."),
|
|
800
|
-
comment: zod_1.z.string().describe("The text content of the general comment about the PR.
|
|
801
|
-
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering.")
|
|
812
|
+
comment: zod_1.z.string().describe("The text content of the general comment about the PR. Supports full markdown (headers, lists, code blocks, bold, etc.). IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text. Example: \"## Review Summary\\n\\n- Looks good\\n- One issue found\" where \\n is a real JSON newline escape."),
|
|
813
|
+
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering."),
|
|
814
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
802
815
|
}, async (params, extra) => {
|
|
803
816
|
const result = await gitTools.addPullRequestComment(params);
|
|
804
817
|
return {
|
|
@@ -811,7 +824,8 @@ async function main() {
|
|
|
811
824
|
allowedTools.has("getPullRequestFileChanges") && server.tool("getPullRequestFileChanges", "Retrieve detailed file diff information for a specific file changed within a pull request. Returns change metadata including change type (add, edit, delete), before/after content identifiers, and file path information. Optionally filter to a specific file path.", {
|
|
812
825
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
813
826
|
pullRequestId: zId().describe("The numeric ID of the pull request to examine. This is the PR number shown in the Azure DevOps UI."),
|
|
814
|
-
path: zod_1.z.string().optional().describe("Optional path to a specific file to return changes for. If omitted, changes for all files will be returned but filtered to match this specific path.")
|
|
827
|
+
path: zod_1.z.string().optional().describe("Optional path to a specific file to return changes for. If omitted, changes for all files will be returned but filtered to match this specific path."),
|
|
828
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
815
829
|
}, async (params, extra) => {
|
|
816
830
|
const result = await gitTools.getPullRequestFileChanges(params);
|
|
817
831
|
return {
|
|
@@ -822,7 +836,8 @@ async function main() {
|
|
|
822
836
|
});
|
|
823
837
|
allowedTools.has("getPullRequestChangesCount") && server.tool("getPullRequestChangesCount", "Get statistical summary of changes in a pull request, including total count of files changed and breakdowns by change type (added, modified, deleted). Useful for understanding the scope of changes in a PR at a glance.", {
|
|
824
838
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
825
|
-
pullRequestId: zId().describe("The numeric ID of the pull request to analyze. This is the PR number shown in the Azure DevOps UI.")
|
|
839
|
+
pullRequestId: zId().describe("The numeric ID of the pull request to analyze. This is the PR number shown in the Azure DevOps UI."),
|
|
840
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
826
841
|
}, async (params, extra) => {
|
|
827
842
|
const result = await gitTools.getPullRequestChangesCount(params);
|
|
828
843
|
return {
|
|
@@ -835,7 +850,8 @@ async function main() {
|
|
|
835
850
|
repository: zod_1.z.string().describe("The repository name (e.g., 'MyProject') or ID (GUID) containing the pull request. Repository names are case-insensitive."),
|
|
836
851
|
pullRequestId: zId().describe("The numeric ID of the pull request to retrieve changes for. This is the PR number shown in the Azure DevOps UI."),
|
|
837
852
|
top: zod_1.z.coerce.number().optional().describe("Maximum number of change entries to return in a single request. Use this for pagination to avoid large response payloads."),
|
|
838
|
-
skip: zod_1.z.coerce.number().optional().describe("Number of change entries to skip before starting to return results. Use with 'top' for implementing pagination.")
|
|
853
|
+
skip: zod_1.z.coerce.number().optional().describe("Number of change entries to skip before starting to return results. Use with 'top' for implementing pagination."),
|
|
854
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project.")
|
|
839
855
|
}, async (params, extra) => {
|
|
840
856
|
const result = await gitTools.getAllPullRequestChanges(params);
|
|
841
857
|
return {
|
|
@@ -856,6 +872,7 @@ async function main() {
|
|
|
856
872
|
deleteSourceBranch: zod_1.z.boolean().optional().describe("Delete source branch on completion"),
|
|
857
873
|
isDraft: zod_1.z.boolean().optional().describe("Set PR as draft or publish it"),
|
|
858
874
|
targetRefName: zod_1.z.string().optional().describe("Change target branch (e.g., 'refs/heads/main')"),
|
|
875
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project."),
|
|
859
876
|
}, async (params) => {
|
|
860
877
|
const result = await gitTools.updatePullRequest(params);
|
|
861
878
|
return { content: result.content, rawData: result.rawData, isError: result.isError, structuredContent: result.structuredContent };
|
|
@@ -866,6 +883,7 @@ async function main() {
|
|
|
866
883
|
reviewersToAdd: zod_1.z.array(zod_1.z.string()).optional().describe("User IDs or email addresses to add as reviewers"),
|
|
867
884
|
reviewersToRemove: zod_1.z.array(zod_1.z.string()).optional().describe("User IDs or email addresses to remove from reviewers"),
|
|
868
885
|
makeRequired: zod_1.z.boolean().optional().describe("Make added reviewers required (default false)"),
|
|
886
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project."),
|
|
869
887
|
}, async (params) => {
|
|
870
888
|
const result = await gitTools.updatePullRequestReviewers(params);
|
|
871
889
|
return { content: result.content, rawData: result.rawData, isError: result.isError, structuredContent: result.structuredContent };
|
|
@@ -874,8 +892,9 @@ async function main() {
|
|
|
874
892
|
repository: zod_1.z.string().describe("Repository name or ID"),
|
|
875
893
|
pullRequestId: zId().describe("Pull request ID"),
|
|
876
894
|
threadId: zId().describe("Thread ID to reply to"),
|
|
877
|
-
comment: zod_1.z.string().describe("Reply text content
|
|
895
|
+
comment: zod_1.z.string().describe("Reply text content. Supports full markdown. IMPORTANT: Use actual newline characters in the JSON string for line breaks — do NOT send literal backslash-n text."),
|
|
878
896
|
format: zod_1.z.enum(['markdown', 'html']).optional().describe("Content format: 'markdown' (default) or 'html'. When markdown, HTML entities are unescaped for correct rendering."),
|
|
897
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project."),
|
|
879
898
|
}, async (params) => {
|
|
880
899
|
const result = await gitTools.replyToComment(params);
|
|
881
900
|
return { content: result.content, rawData: result.rawData, isError: result.isError, structuredContent: result.structuredContent };
|
|
@@ -885,6 +904,7 @@ async function main() {
|
|
|
885
904
|
pullRequestId: zId().describe("Pull request ID"),
|
|
886
905
|
threadId: zId().describe("Thread ID to update"),
|
|
887
906
|
status: zod_1.z.enum(['active', 'byDesign', 'closed', 'fixed', 'pending', 'unknown', 'wontFix']).describe("New thread status"),
|
|
907
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project."),
|
|
888
908
|
}, async (params) => {
|
|
889
909
|
const result = await gitTools.updatePullRequestThread(params);
|
|
890
910
|
return { content: result.content, rawData: result.rawData, isError: result.isError, structuredContent: result.structuredContent };
|
|
@@ -893,6 +913,7 @@ async function main() {
|
|
|
893
913
|
repository: zod_1.z.string().describe("Repository name or ID"),
|
|
894
914
|
branchName: zod_1.z.string().describe("New branch name (e.g., 'feature/my-feature')"),
|
|
895
915
|
sourceRef: zod_1.z.string().describe("Source branch name (e.g., 'main') or commit SHA to branch from"),
|
|
916
|
+
project: zod_1.z.string().optional().describe("Azure DevOps project name or ID. Defaults to the configured project."),
|
|
896
917
|
}, async (params) => {
|
|
897
918
|
const result = await gitTools.createBranch(params);
|
|
898
919
|
return { content: result.content, rawData: result.rawData, isError: result.isError, structuredContent: result.structuredContent };
|