@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-create.js","sourceRoot":"","sources":["../../src/tools/issue-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,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"issue-create.js","sourceRoot":"","sources":["../../src/tools/issue-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-list.d.ts","sourceRoot":"","sources":["../../src/tools/issue-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"issue-list.d.ts","sourceRoot":"","sources":["../../src/tools/issue-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAgJtD"}
|
package/dist/tools/issue-list.js
CHANGED
|
@@ -4,12 +4,13 @@ import { ghCmd } from "../lib/gh-runner.js";
|
|
|
4
4
|
import { parseIssueList } from "../lib/parsers.js";
|
|
5
5
|
import { formatIssueList, compactIssueListMap, formatIssueListCompact } from "../lib/formatters.js";
|
|
6
6
|
import { IssueListResultSchema } from "../schemas/index.js";
|
|
7
|
-
|
|
7
|
+
// S-gap P1: Add author, createdAt, milestone to JSON fields
|
|
8
|
+
const ISSUE_LIST_FIELDS = "number,state,title,url,labels,assignees,author,createdAt,milestone";
|
|
8
9
|
/** Registers the `issue-list` tool on the given MCP server. */
|
|
9
10
|
export function registerIssueListTool(server) {
|
|
10
11
|
server.registerTool("issue-list", {
|
|
11
12
|
title: "Issue List",
|
|
12
|
-
description: "Lists issues with optional filters. Returns structured list with issue number, state, title, labels, and
|
|
13
|
+
description: "Lists issues with optional filters. Returns structured list with issue number, state, title, labels, assignees, author, creation date, and milestone. Use instead of running `gh issue list` in the terminal.",
|
|
13
14
|
inputSchema: {
|
|
14
15
|
state: z
|
|
15
16
|
.enum(["open", "closed", "all"])
|
|
@@ -22,11 +23,52 @@ export function registerIssueListTool(server) {
|
|
|
22
23
|
.default(30)
|
|
23
24
|
.describe("Maximum number of issues to return (default: 30)"),
|
|
24
25
|
label: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("Filter by label"),
|
|
26
|
+
labels: z
|
|
27
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
28
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Filter by multiple labels (each maps to --label)"),
|
|
25
31
|
assignee: z
|
|
26
32
|
.string()
|
|
27
33
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
28
34
|
.optional()
|
|
29
35
|
.describe("Filter by assignee username"),
|
|
36
|
+
// S-gap P0: Add search param
|
|
37
|
+
search: z
|
|
38
|
+
.string()
|
|
39
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("GitHub search syntax (-S/--search)"),
|
|
42
|
+
// S-gap P0: Add author filter
|
|
43
|
+
author: z
|
|
44
|
+
.string()
|
|
45
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("Filter by author username (-A/--author)"),
|
|
48
|
+
// S-gap P1: Add milestone filter
|
|
49
|
+
milestone: z
|
|
50
|
+
.string()
|
|
51
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Filter by milestone name or number (-m/--milestone)"),
|
|
54
|
+
// S-gap P2: Add mention filter
|
|
55
|
+
mention: z
|
|
56
|
+
.string()
|
|
57
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Filter by mentioned user (--mention)"),
|
|
60
|
+
// S-gap P2: Add app filter
|
|
61
|
+
app: z
|
|
62
|
+
.string()
|
|
63
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Filter by GitHub App (--app)"),
|
|
66
|
+
// S-gap P1: Add repo for cross-repo listing
|
|
67
|
+
repo: z
|
|
68
|
+
.string()
|
|
69
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
30
72
|
path: z
|
|
31
73
|
.string()
|
|
32
74
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -39,19 +81,53 @@ export function registerIssueListTool(server) {
|
|
|
39
81
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
40
82
|
},
|
|
41
83
|
outputSchema: IssueListResultSchema,
|
|
42
|
-
}, async ({ state, limit, label, assignee, path, compact }) => {
|
|
84
|
+
}, async ({ state, limit, label, labels, assignee, search, author, milestone, mention, app, repo, path, compact, }) => {
|
|
43
85
|
const cwd = path || process.cwd();
|
|
44
86
|
if (label)
|
|
45
87
|
assertNoFlagInjection(label, "label");
|
|
88
|
+
if (labels) {
|
|
89
|
+
for (const l of labels) {
|
|
90
|
+
assertNoFlagInjection(l, "labels");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
46
93
|
if (assignee)
|
|
47
94
|
assertNoFlagInjection(assignee, "assignee");
|
|
95
|
+
if (search)
|
|
96
|
+
assertNoFlagInjection(search, "search");
|
|
97
|
+
if (author)
|
|
98
|
+
assertNoFlagInjection(author, "author");
|
|
99
|
+
if (milestone)
|
|
100
|
+
assertNoFlagInjection(milestone, "milestone");
|
|
101
|
+
if (mention)
|
|
102
|
+
assertNoFlagInjection(mention, "mention");
|
|
103
|
+
if (app)
|
|
104
|
+
assertNoFlagInjection(app, "app");
|
|
105
|
+
if (repo)
|
|
106
|
+
assertNoFlagInjection(repo, "repo");
|
|
48
107
|
const args = ["issue", "list", "--json", ISSUE_LIST_FIELDS, "--limit", String(limit)];
|
|
49
108
|
if (state)
|
|
50
109
|
args.push("--state", state);
|
|
51
110
|
if (label)
|
|
52
111
|
args.push("--label", label);
|
|
112
|
+
if (labels && labels.length > 0) {
|
|
113
|
+
for (const l of labels) {
|
|
114
|
+
args.push("--label", l);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
53
117
|
if (assignee)
|
|
54
118
|
args.push("--assignee", assignee);
|
|
119
|
+
if (search)
|
|
120
|
+
args.push("--search", search);
|
|
121
|
+
if (author)
|
|
122
|
+
args.push("--author", author);
|
|
123
|
+
if (milestone)
|
|
124
|
+
args.push("--milestone", milestone);
|
|
125
|
+
if (mention)
|
|
126
|
+
args.push("--mention", mention);
|
|
127
|
+
if (app)
|
|
128
|
+
args.push("--app", app);
|
|
129
|
+
if (repo)
|
|
130
|
+
args.push("--repo", repo);
|
|
55
131
|
const result = await ghCmd(args, cwd);
|
|
56
132
|
if (result.exitCode !== 0) {
|
|
57
133
|
throw new Error(`gh issue list failed: ${result.stderr}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-list.js","sourceRoot":"","sources":["../../src/tools/issue-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,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"issue-list.js","sourceRoot":"","sources":["../../src/tools/issue-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-update.d.ts","sourceRoot":"","sources":["../../src/tools/issue-update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"issue-update.d.ts","sourceRoot":"","sources":["../../src/tools/issue-update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAsNxD"}
|
|
@@ -8,46 +8,107 @@ import { EditResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerIssueUpdateTool(server) {
|
|
9
9
|
server.registerTool("issue-update", {
|
|
10
10
|
title: "Issue Update",
|
|
11
|
-
description: "Updates issue metadata (title, body, labels, assignees
|
|
11
|
+
description: "Updates issue metadata (title, body, labels, assignees, milestone, projects). " +
|
|
12
|
+
"All fields except `number` are optional — only supply the fields you want to change. " +
|
|
13
|
+
"For list fields (labels, assignees, projects), use `add*` to append and `remove*` to " +
|
|
14
|
+
"delete specific items without affecting others. " +
|
|
15
|
+
"Returns structured data with issue number and URL. Use instead of running `gh issue edit` in the terminal.",
|
|
12
16
|
inputSchema: {
|
|
13
|
-
|
|
17
|
+
// ── Target ──────────────────────────────────────────────────
|
|
18
|
+
/** Issue number (integer) or full GitHub issue URL. */
|
|
19
|
+
number: z
|
|
20
|
+
.string()
|
|
21
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
22
|
+
.describe("Issue number or full GitHub issue URL to update"),
|
|
23
|
+
/** Repository path on disk. Defaults to cwd. */
|
|
14
24
|
path: z
|
|
15
25
|
.string()
|
|
16
26
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
17
27
|
.optional()
|
|
18
28
|
.describe("Repository path (default: cwd)"),
|
|
19
|
-
|
|
29
|
+
// ── Content fields ──────────────────────────────────────────
|
|
30
|
+
/** Replace the issue title entirely. */
|
|
31
|
+
title: z
|
|
32
|
+
.string()
|
|
33
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("New issue title (replaces existing)"),
|
|
36
|
+
/** Replace the issue body entirely. Passed via stdin to avoid shell escaping issues. */
|
|
20
37
|
body: z
|
|
21
38
|
.string()
|
|
22
39
|
.max(INPUT_LIMITS.STRING_MAX)
|
|
23
40
|
.optional()
|
|
24
|
-
.describe("New issue body/description"),
|
|
41
|
+
.describe("New issue body/description (replaces existing, sent via stdin)"),
|
|
42
|
+
// ── Labels (additive/subtractive) ───────────────────────────
|
|
43
|
+
/** Labels to add to the issue. Does not remove existing labels. */
|
|
25
44
|
addLabels: z
|
|
26
45
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
27
46
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
28
47
|
.optional()
|
|
29
|
-
.describe("Labels to add"),
|
|
48
|
+
.describe("Labels to add (preserves existing labels)"),
|
|
49
|
+
/** Labels to remove from the issue. Ignores labels not present. */
|
|
30
50
|
removeLabels: z
|
|
31
51
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
32
52
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
33
53
|
.optional()
|
|
34
|
-
.describe("Labels to remove"),
|
|
54
|
+
.describe("Labels to remove (ignores labels not currently set)"),
|
|
55
|
+
// ── Assignees (additive/subtractive) ────────────────────────
|
|
56
|
+
/** Assignees to add. Does not remove existing assignees. */
|
|
35
57
|
addAssignees: z
|
|
36
58
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
37
59
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
38
60
|
.optional()
|
|
39
|
-
.describe("
|
|
61
|
+
.describe("GitHub usernames to assign (preserves existing assignees)"),
|
|
62
|
+
/** Assignees to remove. Ignores users not currently assigned. */
|
|
40
63
|
removeAssignees: z
|
|
41
64
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
42
65
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
43
66
|
.optional()
|
|
44
|
-
.describe("
|
|
67
|
+
.describe("GitHub usernames to unassign (ignores users not assigned)"),
|
|
68
|
+
// ── Milestone ───────────────────────────────────────────────
|
|
69
|
+
/** Set the milestone. Use `removeMilestone` to clear it instead. */
|
|
70
|
+
milestone: z
|
|
71
|
+
.string()
|
|
72
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("Set milestone by name or number (--milestone). Mutually exclusive with removeMilestone."),
|
|
75
|
+
/** Remove the current milestone from the issue. */
|
|
76
|
+
removeMilestone: z
|
|
77
|
+
.boolean()
|
|
78
|
+
.optional()
|
|
79
|
+
.describe("Remove the milestone from the issue (--remove-milestone). Mutually exclusive with milestone."),
|
|
80
|
+
// ── Projects (additive/subtractive) ─────────────────────────
|
|
81
|
+
/** Projects to add. Does not remove existing project associations. */
|
|
82
|
+
addProjects: z
|
|
83
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
84
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
85
|
+
.optional()
|
|
86
|
+
.describe("Project board names to add (--add-project)"),
|
|
87
|
+
/** Projects to remove. Ignores projects not currently associated. */
|
|
88
|
+
removeProjects: z
|
|
89
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
90
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
91
|
+
.optional()
|
|
92
|
+
.describe("Project board names to remove (--remove-project)"),
|
|
93
|
+
// ── Cross-repo ──────────────────────────────────────────────
|
|
94
|
+
/** Target a different repository than the one at `path`. */
|
|
95
|
+
repo: z
|
|
96
|
+
.string()
|
|
97
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
98
|
+
.optional()
|
|
99
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
45
100
|
},
|
|
46
101
|
outputSchema: EditResultSchema,
|
|
47
|
-
}, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, }) => {
|
|
102
|
+
}, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, milestone, removeMilestone, addProjects, removeProjects, repo, }) => {
|
|
48
103
|
const cwd = path || process.cwd();
|
|
49
104
|
if (title)
|
|
50
105
|
assertNoFlagInjection(title, "title");
|
|
106
|
+
if (typeof number === "string")
|
|
107
|
+
assertNoFlagInjection(number, "number");
|
|
108
|
+
if (milestone)
|
|
109
|
+
assertNoFlagInjection(milestone, "milestone");
|
|
110
|
+
if (repo)
|
|
111
|
+
assertNoFlagInjection(repo, "repo");
|
|
51
112
|
if (addLabels) {
|
|
52
113
|
for (const label of addLabels) {
|
|
53
114
|
assertNoFlagInjection(label, "addLabels");
|
|
@@ -68,7 +129,19 @@ export function registerIssueUpdateTool(server) {
|
|
|
68
129
|
assertNoFlagInjection(assignee, "removeAssignees");
|
|
69
130
|
}
|
|
70
131
|
}
|
|
71
|
-
|
|
132
|
+
if (addProjects) {
|
|
133
|
+
for (const project of addProjects) {
|
|
134
|
+
assertNoFlagInjection(project, "addProjects");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (removeProjects) {
|
|
138
|
+
for (const project of removeProjects) {
|
|
139
|
+
assertNoFlagInjection(project, "removeProjects");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const selector = String(number);
|
|
143
|
+
const issueNum = typeof number === "number" ? number : 0;
|
|
144
|
+
const args = ["issue", "edit", selector];
|
|
72
145
|
if (title)
|
|
73
146
|
args.push("--title", title);
|
|
74
147
|
if (addLabels && addLabels.length > 0) {
|
|
@@ -91,6 +164,24 @@ export function registerIssueUpdateTool(server) {
|
|
|
91
164
|
args.push("--remove-assignee", assignee);
|
|
92
165
|
}
|
|
93
166
|
}
|
|
167
|
+
// Milestone: set or remove (mutually exclusive)
|
|
168
|
+
if (milestone)
|
|
169
|
+
args.push("--milestone", milestone);
|
|
170
|
+
if (removeMilestone)
|
|
171
|
+
args.push("--remove-milestone");
|
|
172
|
+
// Projects: add or remove
|
|
173
|
+
if (addProjects && addProjects.length > 0) {
|
|
174
|
+
for (const project of addProjects) {
|
|
175
|
+
args.push("--add-project", project);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (removeProjects && removeProjects.length > 0) {
|
|
179
|
+
for (const project of removeProjects) {
|
|
180
|
+
args.push("--remove-project", project);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (repo)
|
|
184
|
+
args.push("--repo", repo);
|
|
94
185
|
if (body) {
|
|
95
186
|
args.push("--body-file", "-");
|
|
96
187
|
}
|
|
@@ -98,7 +189,7 @@ export function registerIssueUpdateTool(server) {
|
|
|
98
189
|
if (result.exitCode !== 0) {
|
|
99
190
|
throw new Error(`gh issue edit failed: ${result.stderr}`);
|
|
100
191
|
}
|
|
101
|
-
const data = parseIssueUpdate(result.stdout,
|
|
192
|
+
const data = parseIssueUpdate(result.stdout, issueNum);
|
|
102
193
|
return dualOutput(data, formatIssueUpdate);
|
|
103
194
|
});
|
|
104
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-update.js","sourceRoot":"","sources":["../../src/tools/issue-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,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"issue-update.js","sourceRoot":"","sources":["../../src/tools/issue-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-view.d.ts","sourceRoot":"","sources":["../../src/tools/issue-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"issue-view.d.ts","sourceRoot":"","sources":["../../src/tools/issue-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA8DtD"}
|
package/dist/tools/issue-view.js
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
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 { parseIssueView } from "../lib/parsers.js";
|
|
5
5
|
import { formatIssueView, compactIssueViewMap, formatIssueViewCompact } from "../lib/formatters.js";
|
|
6
6
|
import { IssueViewResultSchema } from "../schemas/index.js";
|
|
7
|
-
|
|
7
|
+
// S-gap: Add stateReason, author, milestone, updatedAt, closedAt, isPinned, projectItems
|
|
8
|
+
const ISSUE_VIEW_FIELDS = "number,state,title,body,labels,assignees,url,createdAt,stateReason,author,milestone,updatedAt,closedAt,isPinned,projectItems";
|
|
8
9
|
/** Registers the `issue-view` tool on the given MCP server. */
|
|
9
10
|
export function registerIssueViewTool(server) {
|
|
10
11
|
server.registerTool("issue-view", {
|
|
11
12
|
title: "Issue View",
|
|
12
|
-
description: "Views an issue by number. Returns structured data with state, labels, assignees, and body. Use instead of running `gh issue view` in the terminal.",
|
|
13
|
+
description: "Views an issue by number or URL. Returns structured data with state, labels, assignees, author, milestone, close reason, and body. Use instead of running `gh issue view` in the terminal.",
|
|
13
14
|
inputSchema: {
|
|
14
|
-
number: z.
|
|
15
|
+
number: z.string().max(INPUT_LIMITS.STRING_MAX).describe("Issue number or URL"),
|
|
16
|
+
comments: z
|
|
17
|
+
.boolean()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Include issue comments in output (-c/--comments)"),
|
|
20
|
+
// S-gap P1: Add repo for cross-repo viewing
|
|
21
|
+
repo: z
|
|
22
|
+
.string()
|
|
23
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
15
26
|
path: z
|
|
16
27
|
.string()
|
|
17
28
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -24,9 +35,18 @@ export function registerIssueViewTool(server) {
|
|
|
24
35
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
25
36
|
},
|
|
26
37
|
outputSchema: IssueViewResultSchema,
|
|
27
|
-
}, async ({ number, path, compact }) => {
|
|
38
|
+
}, async ({ number, comments, repo, path, compact }) => {
|
|
28
39
|
const cwd = path || process.cwd();
|
|
29
|
-
|
|
40
|
+
if (repo)
|
|
41
|
+
assertNoFlagInjection(repo, "repo");
|
|
42
|
+
if (typeof number === "string")
|
|
43
|
+
assertNoFlagInjection(number, "number");
|
|
44
|
+
const selector = String(number);
|
|
45
|
+
const args = ["issue", "view", selector, "--json", ISSUE_VIEW_FIELDS];
|
|
46
|
+
if (comments)
|
|
47
|
+
args.push("--comments");
|
|
48
|
+
if (repo)
|
|
49
|
+
args.push("--repo", repo);
|
|
30
50
|
const result = await ghCmd(args, cwd);
|
|
31
51
|
if (result.exitCode !== 0) {
|
|
32
52
|
throw new Error(`gh issue view failed: ${result.stderr}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-view.js","sourceRoot":"","sources":["../../src/tools/issue-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":"issue-view.js","sourceRoot":"","sources":["../../src/tools/issue-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,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,yFAAyF;AACzF,MAAM,iBAAiB,GACrB,8HAA8H,CAAC;AAEjI,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,4LAA4L;QAC9L,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC/E,QAAQ,EAAE,CAAC;iBACR,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,kDAAkD,CAAC;YAC/D,4CAA4C;YAC5C,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,qBAAqB;KACpC,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,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACtE,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,yBAAyB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-checks.d.ts","sourceRoot":"","sources":["../../src/tools/pr-checks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"pr-checks.d.ts","sourceRoot":"","sources":["../../src/tools/pr-checks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAgErD"}
|
package/dist/tools/pr-checks.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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 { parsePrChecks } from "../lib/parsers.js";
|
|
5
5
|
import { formatPrChecks, compactPrChecksMap, formatPrChecksCompact } from "../lib/formatters.js";
|
|
@@ -9,14 +9,23 @@ const PR_CHECKS_FIELDS = "name,state,bucket,description,event,workflow,link,star
|
|
|
9
9
|
export function registerPrChecksTool(server) {
|
|
10
10
|
server.registerTool("pr-checks", {
|
|
11
11
|
title: "PR Checks",
|
|
12
|
-
description: "Lists check/status results for a pull request. Returns structured data with check names, states,
|
|
12
|
+
description: "Lists check/status results for a pull request. Returns structured data with check names, states, URLs, and summary counts (passed, failed, pending). Use instead of running `gh pr checks` in the terminal.",
|
|
13
13
|
inputSchema: {
|
|
14
|
-
|
|
14
|
+
number: z
|
|
15
|
+
.string()
|
|
16
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
17
|
+
.describe("Pull request number, URL, or branch name"),
|
|
15
18
|
repo: z
|
|
16
19
|
.string()
|
|
17
20
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
18
21
|
.optional()
|
|
19
22
|
.describe("Repository in OWNER/REPO format (default: current repo)"),
|
|
23
|
+
watch: z.boolean().optional().describe("Poll checks until they complete (-w/--watch)"),
|
|
24
|
+
// S-gap P0: Add required filter
|
|
25
|
+
required: z
|
|
26
|
+
.boolean()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Filter to show only required checks (--required)"),
|
|
20
29
|
compact: z
|
|
21
30
|
.boolean()
|
|
22
31
|
.optional()
|
|
@@ -24,16 +33,27 @@ export function registerPrChecksTool(server) {
|
|
|
24
33
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
25
34
|
},
|
|
26
35
|
outputSchema: PrChecksResultSchema,
|
|
27
|
-
}, async ({
|
|
28
|
-
|
|
36
|
+
}, async ({ number, repo, watch, required, compact }) => {
|
|
37
|
+
if (repo)
|
|
38
|
+
assertNoFlagInjection(repo, "repo");
|
|
39
|
+
if (typeof number === "string")
|
|
40
|
+
assertNoFlagInjection(number, "number");
|
|
41
|
+
const selector = String(number);
|
|
42
|
+
const prNum = typeof number === "number" ? number : 0;
|
|
43
|
+
const args = ["pr", "checks", selector, "--json", PR_CHECKS_FIELDS];
|
|
29
44
|
if (repo) {
|
|
30
45
|
args.push("--repo", repo);
|
|
31
46
|
}
|
|
47
|
+
if (watch)
|
|
48
|
+
args.push("--watch");
|
|
49
|
+
if (required)
|
|
50
|
+
args.push("--required");
|
|
32
51
|
const result = await ghCmd(args);
|
|
33
|
-
|
|
52
|
+
// Exit code 8 means checks are still pending — gh still returns valid JSON
|
|
53
|
+
if (result.exitCode !== 0 && result.exitCode !== 8) {
|
|
34
54
|
throw new Error(`gh pr checks failed: ${result.stderr}`);
|
|
35
55
|
}
|
|
36
|
-
const data = parsePrChecks(result.stdout,
|
|
56
|
+
const data = parsePrChecks(result.stdout, prNum);
|
|
37
57
|
return compactDualOutput(data, result.stdout, formatPrChecks, compactPrChecksMap, formatPrChecksCompact, compact === false);
|
|
38
58
|
});
|
|
39
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-checks.js","sourceRoot":"","sources":["../../src/tools/pr-checks.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-checks.js","sourceRoot":"","sources":["../../src/tools/pr-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-comment.d.ts","sourceRoot":"","sources":["../../src/tools/pr-comment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"pr-comment.d.ts","sourceRoot":"","sources":["../../src/tools/pr-comment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAqEtD"}
|
package/dist/tools/pr-comment.js
CHANGED
|
@@ -8,10 +8,28 @@ import { CommentResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerPrCommentTool(server) {
|
|
9
9
|
server.registerTool("pr-comment", {
|
|
10
10
|
title: "PR Comment",
|
|
11
|
-
description: "Adds a comment
|
|
11
|
+
description: "Adds, edits, or deletes a comment on a pull request. Returns structured data with the comment URL, operation type, comment ID, and body echo. Use instead of running `gh pr comment` 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
|
body: z.string().max(INPUT_LIMITS.STRING_MAX).describe("Comment text"),
|
|
18
|
+
editLast: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Edit the last comment instead of creating a new one (--edit-last)"),
|
|
22
|
+
deleteLast: z.boolean().optional().describe("Delete the last comment (--delete-last)"),
|
|
23
|
+
createIfNone: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("When used with editLast, create a new comment if no existing comment exists (--create-if-none)"),
|
|
27
|
+
// S-gap P1: Add repo for cross-repo commenting
|
|
28
|
+
repo: z
|
|
29
|
+
.string()
|
|
30
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
|
|
15
33
|
path: z
|
|
16
34
|
.string()
|
|
17
35
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -19,15 +37,34 @@ export function registerPrCommentTool(server) {
|
|
|
19
37
|
.describe("Repository path (default: cwd)"),
|
|
20
38
|
},
|
|
21
39
|
outputSchema: CommentResultSchema,
|
|
22
|
-
}, async ({ number, body, path }) => {
|
|
40
|
+
}, async ({ number, body, editLast, deleteLast, createIfNone, repo, path }) => {
|
|
23
41
|
const cwd = path || process.cwd();
|
|
24
|
-
|
|
25
|
-
|
|
42
|
+
if (repo)
|
|
43
|
+
assertNoFlagInjection(repo, "repo");
|
|
44
|
+
if (typeof number === "string")
|
|
45
|
+
assertNoFlagInjection(number, "number");
|
|
46
|
+
const selector = String(number);
|
|
47
|
+
const prNum = typeof number === "number" ? number : 0;
|
|
48
|
+
const args = ["pr", "comment", selector, "--body-file", "-"];
|
|
49
|
+
if (editLast)
|
|
50
|
+
args.push("--edit-last");
|
|
51
|
+
if (deleteLast)
|
|
52
|
+
args.push("--delete-last");
|
|
53
|
+
if (createIfNone)
|
|
54
|
+
args.push("--create-if-none");
|
|
55
|
+
if (repo)
|
|
56
|
+
args.push("--repo", repo);
|
|
26
57
|
const result = await ghCmd(args, { cwd, stdin: body });
|
|
27
58
|
if (result.exitCode !== 0) {
|
|
28
59
|
throw new Error(`gh pr comment failed: ${result.stderr}`);
|
|
29
60
|
}
|
|
30
|
-
|
|
61
|
+
// S-gap: Determine operation type and pass context
|
|
62
|
+
const operation = deleteLast ? "delete" : editLast ? "edit" : "create";
|
|
63
|
+
const data = parseComment(result.stdout, {
|
|
64
|
+
operation: operation,
|
|
65
|
+
prNumber: prNum,
|
|
66
|
+
body,
|
|
67
|
+
});
|
|
31
68
|
return dualOutput(data, formatComment);
|
|
32
69
|
});
|
|
33
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-comment.js","sourceRoot":"","sources":["../../src/tools/pr-comment.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,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"pr-comment.js","sourceRoot":"","sources":["../../src/tools/pr-comment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-create.d.ts","sourceRoot":"","sources":["../../src/tools/pr-create.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-create.d.ts","sourceRoot":"","sources":["../../src/tools/pr-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAmLrD"}
|