@paretools/github 0.8.5 → 0.9.0
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/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +112 -16
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +33 -11
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +309 -24
- package/dist/lib/parsers.js.map +1 -1
- package/dist/lib/path-validation.d.ts +13 -0
- package/dist/lib/path-validation.d.ts.map +1 -0
- package/dist/lib/path-validation.js +54 -0
- package/dist/lib/path-validation.js.map +1 -0
- package/dist/schemas/index.d.ts +126 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +116 -3
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +135 -5
- package/dist/tools/api.js.map +1 -1
- package/dist/tools/gist-create.d.ts.map +1 -1
- package/dist/tools/gist-create.js +70 -16
- package/dist/tools/gist-create.js.map +1 -1
- package/dist/tools/issue-close.d.ts.map +1 -1
- package/dist/tools/issue-close.js +31 -5
- package/dist/tools/issue-close.js.map +1 -1
- package/dist/tools/issue-comment.d.ts.map +1 -1
- package/dist/tools/issue-comment.js +43 -6
- package/dist/tools/issue-comment.js.map +1 -1
- package/dist/tools/issue-create.d.ts.map +1 -1
- package/dist/tools/issue-create.js +69 -5
- package/dist/tools/issue-create.js.map +1 -1
- package/dist/tools/issue-list.d.ts.map +1 -1
- package/dist/tools/issue-list.js +79 -3
- package/dist/tools/issue-list.js.map +1 -1
- package/dist/tools/issue-update.d.ts.map +1 -1
- package/dist/tools/issue-update.js +102 -11
- package/dist/tools/issue-update.js.map +1 -1
- package/dist/tools/issue-view.d.ts.map +1 -1
- package/dist/tools/issue-view.js +26 -6
- package/dist/tools/issue-view.js.map +1 -1
- package/dist/tools/pr-checks.d.ts.map +1 -1
- package/dist/tools/pr-checks.js +27 -7
- package/dist/tools/pr-checks.js.map +1 -1
- package/dist/tools/pr-comment.d.ts.map +1 -1
- package/dist/tools/pr-comment.js +43 -6
- package/dist/tools/pr-comment.js.map +1 -1
- package/dist/tools/pr-create.d.ts.map +1 -1
- package/dist/tools/pr-create.js +125 -3
- package/dist/tools/pr-create.js.map +1 -1
- package/dist/tools/pr-diff.d.ts.map +1 -1
- package/dist/tools/pr-diff.js +36 -4
- package/dist/tools/pr-diff.js.map +1 -1
- package/dist/tools/pr-list.d.ts.map +1 -1
- package/dist/tools/pr-list.js +83 -3
- package/dist/tools/pr-list.js.map +1 -1
- package/dist/tools/pr-merge.d.ts.map +1 -1
- package/dist/tools/pr-merge.js +77 -6
- package/dist/tools/pr-merge.js.map +1 -1
- package/dist/tools/pr-review.d.ts.map +1 -1
- package/dist/tools/pr-review.js +43 -6
- package/dist/tools/pr-review.js.map +1 -1
- package/dist/tools/pr-update.d.ts.map +1 -1
- package/dist/tools/pr-update.js +110 -5
- package/dist/tools/pr-update.js.map +1 -1
- package/dist/tools/pr-view.d.ts.map +1 -1
- package/dist/tools/pr-view.js +27 -6
- package/dist/tools/pr-view.js.map +1 -1
- package/dist/tools/release-create.d.ts.map +1 -1
- package/dist/tools/release-create.js +79 -3
- package/dist/tools/release-create.js.map +1 -1
- package/dist/tools/release-list.d.ts.map +1 -1
- package/dist/tools/release-list.js +23 -5
- package/dist/tools/release-list.js.map +1 -1
- package/dist/tools/run-list.d.ts.map +1 -1
- package/dist/tools/run-list.js +84 -3
- package/dist/tools/run-list.js.map +1 -1
- package/dist/tools/run-rerun.d.ts.map +1 -1
- package/dist/tools/run-rerun.js +20 -4
- package/dist/tools/run-rerun.js.map +1 -1
- package/dist/tools/run-view.d.ts.map +1 -1
- package/dist/tools/run-view.js +44 -4
- package/dist/tools/run-view.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/pr-review.js
CHANGED
|
@@ -8,9 +8,12 @@ import { PrReviewResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerPrReviewTool(server) {
|
|
9
9
|
server.registerTool("pr-review", {
|
|
10
10
|
title: "PR Review",
|
|
11
|
-
description: "Submits a review on a pull request (approve, request-changes, or comment). Returns structured data with the review event and
|
|
11
|
+
description: "Submits a review on a pull request (approve, request-changes, or comment). Returns structured data with the review event, URL, and body echo. Use instead of running `gh pr review` in the terminal.",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
number: z
|
|
13
|
+
number: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
16
|
+
.describe("Pull request number, URL, or branch name"),
|
|
14
17
|
event: z
|
|
15
18
|
.enum(["approve", "request-changes", "comment"])
|
|
16
19
|
.describe("Review type: approve, request-changes, or comment"),
|
|
@@ -19,6 +22,18 @@ export function registerPrReviewTool(server) {
|
|
|
19
22
|
.max(INPUT_LIMITS.STRING_MAX)
|
|
20
23
|
.optional()
|
|
21
24
|
.describe("Review body (required for request-changes and comment)"),
|
|
25
|
+
// S-gap P0: Add repo for cross-repo review
|
|
26
|
+
repo: z
|
|
27
|
+
.string()
|
|
28
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
31
|
+
// S-gap P2: Add bodyFile for reading review body from file
|
|
32
|
+
bodyFile: z
|
|
33
|
+
.string()
|
|
34
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Read review body from file (--body-file). Mutually exclusive with body."),
|
|
22
37
|
path: z
|
|
23
38
|
.string()
|
|
24
39
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -26,27 +41,49 @@ export function registerPrReviewTool(server) {
|
|
|
26
41
|
.describe("Repository path (default: cwd)"),
|
|
27
42
|
},
|
|
28
43
|
outputSchema: PrReviewResultSchema,
|
|
29
|
-
}, async ({ number, event, body, path }) => {
|
|
44
|
+
}, async ({ number, event, body, repo, bodyFile, path }) => {
|
|
30
45
|
const cwd = path || process.cwd();
|
|
31
46
|
if (body) {
|
|
32
47
|
assertNoFlagInjection(body, "body");
|
|
33
48
|
}
|
|
49
|
+
if (repo)
|
|
50
|
+
assertNoFlagInjection(repo, "repo");
|
|
51
|
+
if (bodyFile)
|
|
52
|
+
assertNoFlagInjection(bodyFile, "bodyFile");
|
|
53
|
+
if (typeof number === "string")
|
|
54
|
+
assertNoFlagInjection(number, "number");
|
|
34
55
|
// request-changes and comment require a body
|
|
35
|
-
if ((event === "request-changes" || event === "comment") && !body) {
|
|
56
|
+
if ((event === "request-changes" || event === "comment") && !body && !bodyFile) {
|
|
36
57
|
throw new Error(`Review body is required for "${event}" reviews.`);
|
|
37
58
|
}
|
|
38
|
-
const
|
|
59
|
+
const selector = String(number);
|
|
60
|
+
const prNum = typeof number === "number" ? number : 0;
|
|
61
|
+
const args = ["pr", "review", selector, `--${event}`];
|
|
62
|
+
if (repo)
|
|
63
|
+
args.push("--repo", repo);
|
|
39
64
|
// Pass body via stdin (--body-file -) to avoid shell escaping issues
|
|
40
65
|
let stdin;
|
|
41
66
|
if (body) {
|
|
42
67
|
args.push("--body-file", "-");
|
|
43
68
|
stdin = body;
|
|
44
69
|
}
|
|
70
|
+
else if (bodyFile) {
|
|
71
|
+
// S-gap P2: Read body from file
|
|
72
|
+
args.push("--body-file", bodyFile);
|
|
73
|
+
}
|
|
45
74
|
const result = await ghCmd(args, { cwd, stdin });
|
|
75
|
+
// P1-gap #146: Classify errors instead of always throwing
|
|
46
76
|
if (result.exitCode !== 0) {
|
|
77
|
+
// Return structured error output with classification
|
|
78
|
+
const data = parsePrReview(result.stdout, prNum, event, body, result.stderr);
|
|
79
|
+
if (data.errorType && data.errorType !== "unknown") {
|
|
80
|
+
// Return structured result with error classification
|
|
81
|
+
return dualOutput(data, formatPrReview);
|
|
82
|
+
}
|
|
47
83
|
throw new Error(`gh pr review failed: ${result.stderr}`);
|
|
48
84
|
}
|
|
49
|
-
|
|
85
|
+
// P1-gap #145: Pass body for echo in output (event mapped to GitHub type)
|
|
86
|
+
const data = parsePrReview(result.stdout, prNum, event, body);
|
|
50
87
|
return dualOutput(data, formatPrReview);
|
|
51
88
|
});
|
|
52
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../src/tools/pr-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../src/tools/pr-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-update.d.ts","sourceRoot":"","sources":["../../src/tools/pr-update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"pr-update.d.ts","sourceRoot":"","sources":["../../src/tools/pr-update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA+NrD"}
|
package/dist/tools/pr-update.js
CHANGED
|
@@ -8,9 +8,12 @@ import { EditResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerPrUpdateTool(server) {
|
|
9
9
|
server.registerTool("pr-update", {
|
|
10
10
|
title: "PR Update",
|
|
11
|
-
description: "Updates pull request metadata (title, body, labels, assignees). Returns structured data with PR number and URL. Use instead of running `gh pr edit` in the terminal.",
|
|
11
|
+
description: "Updates pull request metadata (title, body, labels, assignees, reviewers, milestone, base branch, projects). Returns structured data with PR number and URL. Use instead of running `gh pr edit` in the terminal.",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
number: z
|
|
13
|
+
number: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
16
|
+
.describe("Pull request number, URL, or branch name"),
|
|
14
17
|
path: z
|
|
15
18
|
.string()
|
|
16
19
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -46,12 +49,60 @@ export function registerPrUpdateTool(server) {
|
|
|
46
49
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
47
50
|
.optional()
|
|
48
51
|
.describe("Assignees to remove"),
|
|
52
|
+
addProjects: z
|
|
53
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
54
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Projects to add (--add-project)"),
|
|
57
|
+
removeProjects: z
|
|
58
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
59
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("Projects to remove (--remove-project)"),
|
|
62
|
+
// S-gap P0: Add reviewer management
|
|
63
|
+
addReviewers: z
|
|
64
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
65
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Add reviewers (--add-reviewer)"),
|
|
68
|
+
removeReviewers: z
|
|
69
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
70
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
71
|
+
.optional()
|
|
72
|
+
.describe("Remove reviewers (--remove-reviewer)"),
|
|
73
|
+
// S-gap P0: Add base branch change
|
|
74
|
+
base: z
|
|
75
|
+
.string()
|
|
76
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Change base branch (-B/--base)"),
|
|
79
|
+
// S-gap P1: Add milestone management
|
|
80
|
+
milestone: z
|
|
81
|
+
.string()
|
|
82
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Set milestone (--milestone)"),
|
|
85
|
+
removeMilestone: z.boolean().optional().describe("Remove milestone (--remove-milestone)"),
|
|
86
|
+
// S-gap P1: Add repo for cross-repo updates
|
|
87
|
+
repo: z
|
|
88
|
+
.string()
|
|
89
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
90
|
+
.optional()
|
|
91
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
49
92
|
},
|
|
50
93
|
outputSchema: EditResultSchema,
|
|
51
|
-
}, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, }) => {
|
|
94
|
+
}, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, addProjects, removeProjects, addReviewers, removeReviewers, base, milestone, removeMilestone, repo, }) => {
|
|
52
95
|
const cwd = path || process.cwd();
|
|
53
96
|
if (title)
|
|
54
97
|
assertNoFlagInjection(title, "title");
|
|
98
|
+
if (typeof number === "string")
|
|
99
|
+
assertNoFlagInjection(number, "number");
|
|
100
|
+
if (base)
|
|
101
|
+
assertNoFlagInjection(base, "base");
|
|
102
|
+
if (milestone)
|
|
103
|
+
assertNoFlagInjection(milestone, "milestone");
|
|
104
|
+
if (repo)
|
|
105
|
+
assertNoFlagInjection(repo, "repo");
|
|
55
106
|
if (addLabels) {
|
|
56
107
|
for (const label of addLabels) {
|
|
57
108
|
assertNoFlagInjection(label, "addLabels");
|
|
@@ -72,7 +123,29 @@ export function registerPrUpdateTool(server) {
|
|
|
72
123
|
assertNoFlagInjection(assignee, "removeAssignees");
|
|
73
124
|
}
|
|
74
125
|
}
|
|
75
|
-
|
|
126
|
+
if (addProjects) {
|
|
127
|
+
for (const project of addProjects) {
|
|
128
|
+
assertNoFlagInjection(project, "addProjects");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (removeProjects) {
|
|
132
|
+
for (const project of removeProjects) {
|
|
133
|
+
assertNoFlagInjection(project, "removeProjects");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (addReviewers) {
|
|
137
|
+
for (const reviewer of addReviewers) {
|
|
138
|
+
assertNoFlagInjection(reviewer, "addReviewers");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (removeReviewers) {
|
|
142
|
+
for (const reviewer of removeReviewers) {
|
|
143
|
+
assertNoFlagInjection(reviewer, "removeReviewers");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const selector = String(number);
|
|
147
|
+
const prNum = typeof number === "number" ? number : 0;
|
|
148
|
+
const args = ["pr", "edit", selector];
|
|
76
149
|
if (title)
|
|
77
150
|
args.push("--title", title);
|
|
78
151
|
if (addLabels && addLabels.length > 0) {
|
|
@@ -95,6 +168,38 @@ export function registerPrUpdateTool(server) {
|
|
|
95
168
|
args.push("--remove-assignee", assignee);
|
|
96
169
|
}
|
|
97
170
|
}
|
|
171
|
+
if (addProjects && addProjects.length > 0) {
|
|
172
|
+
for (const project of addProjects) {
|
|
173
|
+
args.push("--add-project", project);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (removeProjects && removeProjects.length > 0) {
|
|
177
|
+
for (const project of removeProjects) {
|
|
178
|
+
args.push("--remove-project", project);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// S-gap P0: Map reviewers
|
|
182
|
+
if (addReviewers && addReviewers.length > 0) {
|
|
183
|
+
for (const reviewer of addReviewers) {
|
|
184
|
+
args.push("--add-reviewer", reviewer);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (removeReviewers && removeReviewers.length > 0) {
|
|
188
|
+
for (const reviewer of removeReviewers) {
|
|
189
|
+
args.push("--remove-reviewer", reviewer);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// S-gap P0: Map base branch
|
|
193
|
+
if (base)
|
|
194
|
+
args.push("--base", base);
|
|
195
|
+
// S-gap P1: Map milestone
|
|
196
|
+
if (milestone)
|
|
197
|
+
args.push("--milestone", milestone);
|
|
198
|
+
if (removeMilestone)
|
|
199
|
+
args.push("--remove-milestone");
|
|
200
|
+
// S-gap P1: Map repo
|
|
201
|
+
if (repo)
|
|
202
|
+
args.push("--repo", repo);
|
|
98
203
|
if (body) {
|
|
99
204
|
args.push("--body-file", "-");
|
|
100
205
|
}
|
|
@@ -102,7 +207,7 @@ export function registerPrUpdateTool(server) {
|
|
|
102
207
|
if (result.exitCode !== 0) {
|
|
103
208
|
throw new Error(`gh pr edit failed: ${result.stderr}`);
|
|
104
209
|
}
|
|
105
|
-
const data = parsePrUpdate(result.stdout,
|
|
210
|
+
const data = parsePrUpdate(result.stdout, prNum);
|
|
106
211
|
return dualOutput(data, formatPrUpdate);
|
|
107
212
|
});
|
|
108
213
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-update.js","sourceRoot":"","sources":["../../src/tools/pr-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"pr-update.js","sourceRoot":"","sources":["../../src/tools/pr-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-view.d.ts","sourceRoot":"","sources":["../../src/tools/pr-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"pr-view.d.ts","sourceRoot":"","sources":["../../src/tools/pr-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QA8DnD"}
|
package/dist/tools/pr-view.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
3
|
import { ghCmd } from "../lib/gh-runner.js";
|
|
4
4
|
import { parsePrView } from "../lib/parsers.js";
|
|
5
5
|
import { formatPrView, compactPrViewMap, formatPrViewCompact } from "../lib/formatters.js";
|
|
6
6
|
import { PrViewResultSchema } from "../schemas/index.js";
|
|
7
|
-
|
|
7
|
+
// S-gap: Add author, labels, isDraft, assignees, createdAt, updatedAt, milestone, projectItems
|
|
8
|
+
// P1-gap #147: Added reviews to field list
|
|
9
|
+
const PR_VIEW_FIELDS = "number,state,title,body,mergeable,reviewDecision,statusCheckRollup,url,headRefName,baseRefName,additions,deletions,changedFiles,author,labels,isDraft,assignees,createdAt,updatedAt,milestone,projectItems,reviews";
|
|
8
10
|
/** Registers the `pr-view` tool on the given MCP server. */
|
|
9
11
|
export function registerPrViewTool(server) {
|
|
10
12
|
server.registerTool("pr-view", {
|
|
11
13
|
title: "PR View",
|
|
12
|
-
description: "Views a pull request by number. Returns structured data with state, checks, review decision,
|
|
14
|
+
description: "Views a pull request by number, URL, or branch. Returns structured data with state, checks, review decision, diff stats, author, labels, draft status, assignees, milestone, and timestamps. Use instead of running `gh pr view` in the terminal.",
|
|
13
15
|
inputSchema: {
|
|
14
|
-
number: z
|
|
16
|
+
number: z
|
|
17
|
+
.string()
|
|
18
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
19
|
+
.describe("Pull request number, URL, or branch name"),
|
|
20
|
+
comments: z.boolean().optional().describe("Include PR comments in output (-c/--comments)"),
|
|
21
|
+
// S-gap P1: Add repo for cross-repo inspection
|
|
22
|
+
repo: z
|
|
23
|
+
.string()
|
|
24
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
15
27
|
path: z
|
|
16
28
|
.string()
|
|
17
29
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -24,9 +36,18 @@ export function registerPrViewTool(server) {
|
|
|
24
36
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
25
37
|
},
|
|
26
38
|
outputSchema: PrViewResultSchema,
|
|
27
|
-
}, async ({ number, path, compact }) => {
|
|
39
|
+
}, async ({ number, comments, repo, path, compact }) => {
|
|
28
40
|
const cwd = path || process.cwd();
|
|
29
|
-
|
|
41
|
+
if (repo)
|
|
42
|
+
assertNoFlagInjection(repo, "repo");
|
|
43
|
+
if (typeof number === "string")
|
|
44
|
+
assertNoFlagInjection(number, "number");
|
|
45
|
+
const selector = String(number);
|
|
46
|
+
const args = ["pr", "view", selector, "--json", PR_VIEW_FIELDS];
|
|
47
|
+
if (comments)
|
|
48
|
+
args.push("--comments");
|
|
49
|
+
if (repo)
|
|
50
|
+
args.push("--repo", repo);
|
|
30
51
|
const result = await ghCmd(args, cwd);
|
|
31
52
|
if (result.exitCode !== 0) {
|
|
32
53
|
throw new Error(`gh pr view failed: ${result.stderr}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-view.js","sourceRoot":"","sources":["../../src/tools/pr-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pr-view.js","sourceRoot":"","sources":["../../src/tools/pr-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,+FAA+F;AAC/F,2CAA2C;AAC3C,MAAM,cAAc,GAClB,oNAAoN,CAAC;AAEvN,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,mPAAmP;QACrP,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,CAAC,0CAA0C,CAAC;YACvD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAC1F,+CAA+C;YAC/C,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;YAC/E,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,gCAAgC,CAAC;YAC7C,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEtC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-create.d.ts","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,mEAAmE;AACnE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"release-create.d.ts","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,mEAAmE;AACnE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QAwJ1D"}
|
|
@@ -8,7 +8,7 @@ import { ReleaseCreateResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerReleaseCreateTool(server) {
|
|
9
9
|
server.registerTool("release-create", {
|
|
10
10
|
title: "Release Create",
|
|
11
|
-
description: "Creates a new GitHub release. Returns structured data with tag, URL, draft, and
|
|
11
|
+
description: "Creates a new GitHub release with optional asset uploads. Returns structured data with tag, URL, draft, prerelease status, and assets uploaded count. Use instead of running `gh release create` in the terminal.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
tag: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).describe("Tag name for the release"),
|
|
14
14
|
title: z
|
|
@@ -29,6 +29,50 @@ export function registerReleaseCreateTool(server) {
|
|
|
29
29
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
30
30
|
.optional()
|
|
31
31
|
.describe("Repository in owner/repo format (default: current repo)"),
|
|
32
|
+
generateNotes: z
|
|
33
|
+
.boolean()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Auto-generate release notes (--generate-notes)"),
|
|
36
|
+
verifyTag: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Verify the tag exists before creating release (--verify-tag)"),
|
|
40
|
+
notesFromTag: z
|
|
41
|
+
.boolean()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Use the annotated tag message as release notes (--notes-from-tag)"),
|
|
44
|
+
latest: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('Control the "Latest" badge on the release (--latest/--latest=false)'),
|
|
48
|
+
failOnNoCommits: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Fail if no commits since last release (--fail-on-no-commits)"),
|
|
52
|
+
// S-gap P0: Add assets for release asset uploads
|
|
53
|
+
assets: z
|
|
54
|
+
.array(z.string().max(INPUT_LIMITS.PATH_MAX))
|
|
55
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("File paths to upload as release assets (positional args after tag)"),
|
|
58
|
+
// S-gap P1: Add notesFile for reading notes from file
|
|
59
|
+
notesFile: z
|
|
60
|
+
.string()
|
|
61
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Read release notes from file (--notes-file). Mutually exclusive with notes."),
|
|
64
|
+
// S-gap P1: Add notesStartTag
|
|
65
|
+
notesStartTag: z
|
|
66
|
+
.string()
|
|
67
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("Scope auto-generated notes to commits since this tag (--notes-start-tag)"),
|
|
70
|
+
// S-gap P2: Add discussionCategory
|
|
71
|
+
discussionCategory: z
|
|
72
|
+
.string()
|
|
73
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Start a release discussion in this category (--discussion-category)"),
|
|
32
76
|
path: z
|
|
33
77
|
.string()
|
|
34
78
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -36,7 +80,7 @@ export function registerReleaseCreateTool(server) {
|
|
|
36
80
|
.describe("Repository path (default: cwd)"),
|
|
37
81
|
},
|
|
38
82
|
outputSchema: ReleaseCreateResultSchema,
|
|
39
|
-
}, async ({ tag, title, notes, draft, prerelease, target, repo, path }) => {
|
|
83
|
+
}, async ({ tag, title, notes, draft, prerelease, target, repo, generateNotes, verifyTag, notesFromTag, latest, failOnNoCommits, assets, notesFile, notesStartTag, discussionCategory, path, }) => {
|
|
40
84
|
const cwd = path || process.cwd();
|
|
41
85
|
assertNoFlagInjection(tag, "tag");
|
|
42
86
|
if (title)
|
|
@@ -45,6 +89,17 @@ export function registerReleaseCreateTool(server) {
|
|
|
45
89
|
assertNoFlagInjection(target, "target");
|
|
46
90
|
if (repo)
|
|
47
91
|
assertNoFlagInjection(repo, "repo");
|
|
92
|
+
if (notesFile)
|
|
93
|
+
assertNoFlagInjection(notesFile, "notesFile");
|
|
94
|
+
if (notesStartTag)
|
|
95
|
+
assertNoFlagInjection(notesStartTag, "notesStartTag");
|
|
96
|
+
if (discussionCategory)
|
|
97
|
+
assertNoFlagInjection(discussionCategory, "discussionCategory");
|
|
98
|
+
if (assets) {
|
|
99
|
+
for (const asset of assets) {
|
|
100
|
+
assertNoFlagInjection(asset, "assets");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
48
103
|
const args = ["release", "create", tag];
|
|
49
104
|
if (title)
|
|
50
105
|
args.push("--title", title);
|
|
@@ -58,11 +113,32 @@ export function registerReleaseCreateTool(server) {
|
|
|
58
113
|
args.push("--target", target);
|
|
59
114
|
if (repo)
|
|
60
115
|
args.push("--repo", repo);
|
|
116
|
+
if (generateNotes)
|
|
117
|
+
args.push("--generate-notes");
|
|
118
|
+
if (verifyTag)
|
|
119
|
+
args.push("--verify-tag");
|
|
120
|
+
if (notesFromTag)
|
|
121
|
+
args.push("--notes-from-tag");
|
|
122
|
+
if (latest !== undefined)
|
|
123
|
+
args.push(`--latest=${String(latest)}`);
|
|
124
|
+
if (failOnNoCommits)
|
|
125
|
+
args.push("--fail-on-no-commits");
|
|
126
|
+
if (notesFile)
|
|
127
|
+
args.push("--notes-file", notesFile);
|
|
128
|
+
if (notesStartTag)
|
|
129
|
+
args.push("--notes-start-tag", notesStartTag);
|
|
130
|
+
if (discussionCategory)
|
|
131
|
+
args.push("--discussion-category", discussionCategory);
|
|
132
|
+
// S-gap P0: Assets are positional args after the tag
|
|
133
|
+
if (assets && assets.length > 0) {
|
|
134
|
+
args.push(...assets);
|
|
135
|
+
}
|
|
61
136
|
const result = await ghCmd(args, cwd);
|
|
62
137
|
if (result.exitCode !== 0) {
|
|
63
138
|
throw new Error(`gh release create failed: ${result.stderr}`);
|
|
64
139
|
}
|
|
65
|
-
|
|
140
|
+
// S-gap: Pass title and assets count for echo in output
|
|
141
|
+
const data = parseReleaseCreate(result.stdout, tag, !!draft, !!prerelease, title, assets?.length);
|
|
66
142
|
return dualOutput(data, formatReleaseCreate);
|
|
67
143
|
});
|
|
68
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-create.js","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,mEAAmE;AACnE,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"release-create.js","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-list.d.ts","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"release-list.d.ts","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAwExD"}
|
|
@@ -4,23 +4,35 @@ import { ghCmd } from "../lib/gh-runner.js";
|
|
|
4
4
|
import { parseReleaseList } from "../lib/parsers.js";
|
|
5
5
|
import { formatReleaseList, compactReleaseListMap, formatReleaseListCompact, } from "../lib/formatters.js";
|
|
6
6
|
import { ReleaseListResultSchema } from "../schemas/index.js";
|
|
7
|
-
|
|
7
|
+
// S-gap: Add isLatest and createdAt to JSON fields
|
|
8
|
+
const RELEASE_LIST_FIELDS = "tagName,name,isDraft,isPrerelease,publishedAt,url,isLatest,createdAt";
|
|
8
9
|
/** Registers the `release-list` tool on the given MCP server. */
|
|
9
10
|
export function registerReleaseListTool(server) {
|
|
10
11
|
server.registerTool("release-list", {
|
|
11
12
|
title: "Release List",
|
|
12
|
-
description: "Lists GitHub releases for a repository. Returns structured list with tag, name, draft/prerelease status, publish date, and URL. Use instead of running `gh release list` in the terminal.",
|
|
13
|
+
description: "Lists GitHub releases for a repository. Returns structured list with tag, name, draft/prerelease/latest status, publish date, creation date, and URL. Use instead of running `gh release list` in the terminal.",
|
|
13
14
|
inputSchema: {
|
|
15
|
+
// S-gap P1: Align default limit to CLI default (30)
|
|
14
16
|
limit: z
|
|
15
17
|
.number()
|
|
16
18
|
.optional()
|
|
17
|
-
.default(
|
|
18
|
-
.describe("Maximum number of releases to return (default:
|
|
19
|
+
.default(30)
|
|
20
|
+
.describe("Maximum number of releases to return (default: 30)"),
|
|
19
21
|
repo: z
|
|
20
22
|
.string()
|
|
21
23
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
22
24
|
.optional()
|
|
23
25
|
.describe("Repository in owner/repo format (default: current repo)"),
|
|
26
|
+
excludeDrafts: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Exclude draft releases from the list (--exclude-drafts)"),
|
|
30
|
+
excludePreReleases: z
|
|
31
|
+
.boolean()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("Exclude pre-releases from the list (--exclude-pre-releases)"),
|
|
34
|
+
// S-gap P1: Add order param
|
|
35
|
+
order: z.enum(["asc", "desc"]).optional().describe("Sort order (--order). Default: desc."),
|
|
24
36
|
path: z
|
|
25
37
|
.string()
|
|
26
38
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -33,13 +45,19 @@ export function registerReleaseListTool(server) {
|
|
|
33
45
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
34
46
|
},
|
|
35
47
|
outputSchema: ReleaseListResultSchema,
|
|
36
|
-
}, async ({ limit, repo, path, compact }) => {
|
|
48
|
+
}, async ({ limit, repo, excludeDrafts, excludePreReleases, order, path, compact }) => {
|
|
37
49
|
const cwd = path || process.cwd();
|
|
38
50
|
if (repo)
|
|
39
51
|
assertNoFlagInjection(repo, "repo");
|
|
40
52
|
const args = ["release", "list", "--json", RELEASE_LIST_FIELDS, "--limit", String(limit)];
|
|
41
53
|
if (repo)
|
|
42
54
|
args.push("--repo", repo);
|
|
55
|
+
if (excludeDrafts)
|
|
56
|
+
args.push("--exclude-drafts");
|
|
57
|
+
if (excludePreReleases)
|
|
58
|
+
args.push("--exclude-pre-releases");
|
|
59
|
+
if (order)
|
|
60
|
+
args.push("--order", order);
|
|
43
61
|
const result = await ghCmd(args, cwd);
|
|
44
62
|
if (result.exitCode !== 0) {
|
|
45
63
|
throw new Error(`gh release list failed: ${result.stderr}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-list.js","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"release-list.js","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../../src/tools/run-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../../src/tools/run-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA+IpD"}
|