@paretools/github 0.8.5 → 0.10.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.
Files changed (99) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/formatters.d.ts +10 -2
  4. package/dist/lib/formatters.d.ts.map +1 -1
  5. package/dist/lib/formatters.js +144 -16
  6. package/dist/lib/formatters.js.map +1 -1
  7. package/dist/lib/gh-runner.d.ts.map +1 -1
  8. package/dist/lib/gh-runner.js +2 -1
  9. package/dist/lib/gh-runner.js.map +1 -1
  10. package/dist/lib/parsers.d.ts +54 -18
  11. package/dist/lib/parsers.d.ts.map +1 -1
  12. package/dist/lib/parsers.js +426 -38
  13. package/dist/lib/parsers.js.map +1 -1
  14. package/dist/lib/path-validation.d.ts +13 -0
  15. package/dist/lib/path-validation.d.ts.map +1 -0
  16. package/dist/lib/path-validation.js +54 -0
  17. package/dist/lib/path-validation.js.map +1 -0
  18. package/dist/schemas/index.d.ts +267 -4
  19. package/dist/schemas/index.d.ts.map +1 -1
  20. package/dist/schemas/index.js +195 -4
  21. package/dist/schemas/index.js.map +1 -1
  22. package/dist/tools/api.d.ts.map +1 -1
  23. package/dist/tools/api.js +134 -8
  24. package/dist/tools/api.js.map +1 -1
  25. package/dist/tools/gist-create.d.ts.map +1 -1
  26. package/dist/tools/gist-create.js +91 -21
  27. package/dist/tools/gist-create.js.map +1 -1
  28. package/dist/tools/index.d.ts.map +1 -1
  29. package/dist/tools/index.js +6 -0
  30. package/dist/tools/index.js.map +1 -1
  31. package/dist/tools/issue-close.d.ts.map +1 -1
  32. package/dist/tools/issue-close.js +56 -9
  33. package/dist/tools/issue-close.js.map +1 -1
  34. package/dist/tools/issue-comment.d.ts.map +1 -1
  35. package/dist/tools/issue-comment.js +60 -9
  36. package/dist/tools/issue-comment.js.map +1 -1
  37. package/dist/tools/issue-create.d.ts.map +1 -1
  38. package/dist/tools/issue-create.js +95 -9
  39. package/dist/tools/issue-create.js.map +1 -1
  40. package/dist/tools/issue-list.d.ts.map +1 -1
  41. package/dist/tools/issue-list.js +139 -11
  42. package/dist/tools/issue-list.js.map +1 -1
  43. package/dist/tools/issue-update.d.ts.map +1 -1
  44. package/dist/tools/issue-update.js +142 -15
  45. package/dist/tools/issue-update.js.map +1 -1
  46. package/dist/tools/issue-view.d.ts.map +1 -1
  47. package/dist/tools/issue-view.js +26 -14
  48. package/dist/tools/issue-view.js.map +1 -1
  49. package/dist/tools/label-create.d.ts +4 -0
  50. package/dist/tools/label-create.d.ts.map +1 -0
  51. package/dist/tools/label-create.js +73 -0
  52. package/dist/tools/label-create.js.map +1 -0
  53. package/dist/tools/label-list.d.ts +4 -0
  54. package/dist/tools/label-list.d.ts.map +1 -0
  55. package/dist/tools/label-list.js +71 -0
  56. package/dist/tools/label-list.js.map +1 -0
  57. package/dist/tools/pr-checks.d.ts.map +1 -1
  58. package/dist/tools/pr-checks.js +57 -11
  59. package/dist/tools/pr-checks.js.map +1 -1
  60. package/dist/tools/pr-comment.d.ts.map +1 -1
  61. package/dist/tools/pr-comment.js +60 -9
  62. package/dist/tools/pr-comment.js.map +1 -1
  63. package/dist/tools/pr-create.d.ts.map +1 -1
  64. package/dist/tools/pr-create.js +154 -9
  65. package/dist/tools/pr-create.js.map +1 -1
  66. package/dist/tools/pr-diff.d.ts.map +1 -1
  67. package/dist/tools/pr-diff.js +63 -16
  68. package/dist/tools/pr-diff.js.map +1 -1
  69. package/dist/tools/pr-list.d.ts.map +1 -1
  70. package/dist/tools/pr-list.js +115 -11
  71. package/dist/tools/pr-list.js.map +1 -1
  72. package/dist/tools/pr-merge.d.ts.map +1 -1
  73. package/dist/tools/pr-merge.js +104 -15
  74. package/dist/tools/pr-merge.js.map +1 -1
  75. package/dist/tools/pr-review.d.ts.map +1 -1
  76. package/dist/tools/pr-review.js +41 -8
  77. package/dist/tools/pr-review.js.map +1 -1
  78. package/dist/tools/pr-update.d.ts.map +1 -1
  79. package/dist/tools/pr-update.js +157 -10
  80. package/dist/tools/pr-update.js.map +1 -1
  81. package/dist/tools/pr-view.d.ts.map +1 -1
  82. package/dist/tools/pr-view.js +27 -14
  83. package/dist/tools/pr-view.js.map +1 -1
  84. package/dist/tools/release-create.d.ts.map +1 -1
  85. package/dist/tools/release-create.js +106 -9
  86. package/dist/tools/release-create.js.map +1 -1
  87. package/dist/tools/release-list.d.ts.map +1 -1
  88. package/dist/tools/release-list.js +39 -13
  89. package/dist/tools/release-list.js.map +1 -1
  90. package/dist/tools/run-list.d.ts.map +1 -1
  91. package/dist/tools/run-list.js +111 -12
  92. package/dist/tools/run-list.js.map +1 -1
  93. package/dist/tools/run-rerun.d.ts.map +1 -1
  94. package/dist/tools/run-rerun.js +38 -8
  95. package/dist/tools/run-rerun.js.map +1 -1
  96. package/dist/tools/run-view.d.ts.map +1 -1
  97. package/dist/tools/run-view.js +64 -13
  98. package/dist/tools/run-view.js.map +1 -1
  99. package/package.json +2 -2
@@ -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
- const ISSUE_LIST_FIELDS = "number,state,title,url,labels,assignees";
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 assignees. Use instead of running `gh issue list` in the terminal.",
13
+ description: "Lists issues with optional filters. Returns structured list with issue number, state, title, labels, assignees, author, creation date, and milestone.",
13
14
  inputSchema: {
14
15
  state: z
15
16
  .enum(["open", "closed", "all"])
@@ -21,42 +22,169 @@ export function registerIssueListTool(server) {
21
22
  .optional()
22
23
  .default(30)
23
24
  .describe("Maximum number of issues to return (default: 30)"),
25
+ paginate: z
26
+ .boolean()
27
+ .optional()
28
+ .default(false)
29
+ .describe("Fetch a larger paginated set (up to 1000 issues)"),
24
30
  label: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("Filter by label"),
31
+ labels: z
32
+ .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
33
+ .max(INPUT_LIMITS.ARRAY_MAX)
34
+ .optional()
35
+ .describe("Filter by multiple labels (each maps to --label)"),
25
36
  assignee: z
26
37
  .string()
27
38
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
28
39
  .optional()
29
40
  .describe("Filter by assignee username"),
30
- path: z
41
+ // S-gap P0: Add search param
42
+ search: z
31
43
  .string()
32
- .max(INPUT_LIMITS.PATH_MAX)
44
+ .max(INPUT_LIMITS.STRING_MAX)
33
45
  .optional()
34
- .describe("Repository path (default: cwd)"),
35
- compact: z
36
- .boolean()
46
+ .describe("GitHub search syntax (-S/--search)"),
47
+ // S-gap P0: Add author filter
48
+ author: z
49
+ .string()
50
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
51
+ .optional()
52
+ .describe("Filter by author username (-A/--author)"),
53
+ // S-gap P1: Add milestone filter
54
+ milestone: z
55
+ .string()
56
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
57
+ .optional()
58
+ .describe("Filter by milestone name or number (-m/--milestone)"),
59
+ // S-gap P2: Add mention filter
60
+ mention: z
61
+ .string()
62
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
63
+ .optional()
64
+ .describe("Filter by mentioned user (--mention)"),
65
+ // S-gap P2: Add app filter
66
+ app: z
67
+ .string()
68
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
37
69
  .optional()
38
- .default(true)
39
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
70
+ .describe("Filter by GitHub App (--app)"),
71
+ // S-gap P1: Add repo for cross-repo listing
72
+ repo: z
73
+ .string()
74
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
75
+ .optional()
76
+ .describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
77
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
78
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
40
79
  },
41
80
  outputSchema: IssueListResultSchema,
42
- }, async ({ state, limit, label, assignee, path, compact }) => {
81
+ }, async ({ state, limit, paginate, label, labels, assignee, search, author, milestone, mention, app, repo, path, compact, }) => {
43
82
  const cwd = path || process.cwd();
44
83
  if (label)
45
84
  assertNoFlagInjection(label, "label");
85
+ if (labels) {
86
+ for (const l of labels) {
87
+ assertNoFlagInjection(l, "labels");
88
+ }
89
+ }
46
90
  if (assignee)
47
91
  assertNoFlagInjection(assignee, "assignee");
48
- const args = ["issue", "list", "--json", ISSUE_LIST_FIELDS, "--limit", String(limit)];
92
+ if (search)
93
+ assertNoFlagInjection(search, "search");
94
+ if (author)
95
+ assertNoFlagInjection(author, "author");
96
+ if (milestone)
97
+ assertNoFlagInjection(milestone, "milestone");
98
+ if (mention)
99
+ assertNoFlagInjection(mention, "mention");
100
+ if (app)
101
+ assertNoFlagInjection(app, "app");
102
+ if (repo)
103
+ assertNoFlagInjection(repo, "repo");
104
+ const requestedLimit = paginate ? 1000 : limit;
105
+ const args = [
106
+ "issue",
107
+ "list",
108
+ "--json",
109
+ ISSUE_LIST_FIELDS,
110
+ "--limit",
111
+ String(requestedLimit),
112
+ ];
49
113
  if (state)
50
114
  args.push("--state", state);
51
115
  if (label)
52
116
  args.push("--label", label);
117
+ if (labels && labels.length > 0) {
118
+ for (const l of labels) {
119
+ args.push("--label", l);
120
+ }
121
+ }
53
122
  if (assignee)
54
123
  args.push("--assignee", assignee);
124
+ if (search)
125
+ args.push("--search", search);
126
+ if (author)
127
+ args.push("--author", author);
128
+ if (milestone)
129
+ args.push("--milestone", milestone);
130
+ if (mention)
131
+ args.push("--mention", mention);
132
+ if (app)
133
+ args.push("--app", app);
134
+ if (repo)
135
+ args.push("--repo", repo);
55
136
  const result = await ghCmd(args, cwd);
56
137
  if (result.exitCode !== 0) {
57
138
  throw new Error(`gh issue list failed: ${result.stderr}`);
58
139
  }
59
140
  const data = parseIssueList(result.stdout);
141
+ if (!paginate) {
142
+ const probeArgs = [
143
+ "issue",
144
+ "list",
145
+ "--json",
146
+ ISSUE_LIST_FIELDS,
147
+ "--limit",
148
+ String(limit + 1),
149
+ ];
150
+ if (state)
151
+ probeArgs.push("--state", state);
152
+ if (label)
153
+ probeArgs.push("--label", label);
154
+ if (labels && labels.length > 0) {
155
+ for (const l of labels)
156
+ probeArgs.push("--label", l);
157
+ }
158
+ if (assignee)
159
+ probeArgs.push("--assignee", assignee);
160
+ if (search)
161
+ probeArgs.push("--search", search);
162
+ if (author)
163
+ probeArgs.push("--author", author);
164
+ if (milestone)
165
+ probeArgs.push("--milestone", milestone);
166
+ if (mention)
167
+ probeArgs.push("--mention", mention);
168
+ if (app)
169
+ probeArgs.push("--app", app);
170
+ if (repo)
171
+ probeArgs.push("--repo", repo);
172
+ const probeResult = await ghCmd(probeArgs, cwd);
173
+ if (probeResult.exitCode === 0) {
174
+ const probe = parseIssueList(probeResult.stdout);
175
+ const hasMore = probe.total > limit;
176
+ data.hasMore = hasMore;
177
+ data.totalAvailable = hasMore ? limit + 1 : data.total;
178
+ if (hasMore) {
179
+ data.issues = data.issues.slice(0, limit);
180
+ data.total = data.issues.length;
181
+ }
182
+ }
183
+ }
184
+ else {
185
+ data.hasMore = false;
186
+ data.totalAvailable = data.total;
187
+ }
60
188
  return compactDualOutput(data, result.stdout, formatIssueList, compactIssueListMap, formatIssueListCompact, compact === false);
61
189
  });
62
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue-list.js","sourceRoot":"","sources":["../../src/tools/issue-list.ts"],"names":[],"mappings":"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"}
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,QAiHxD"}
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;AAiBzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAmPxD"}
@@ -4,50 +4,117 @@ import { ghCmd } from "../lib/gh-runner.js";
4
4
  import { parseIssueUpdate } from "../lib/parsers.js";
5
5
  import { formatIssueUpdate } from "../lib/formatters.js";
6
6
  import { EditResultSchema } from "../schemas/index.js";
7
+ function classifyIssueUpdateError(stderr) {
8
+ const lower = stderr.toLowerCase();
9
+ if (/not found|could not resolve|no issue/.test(lower))
10
+ return "not-found";
11
+ if (/forbidden|permission|403/.test(lower))
12
+ return "permission-denied";
13
+ if (/validation|invalid|required|unprocessable/.test(lower))
14
+ return "validation";
15
+ return "unknown";
16
+ }
7
17
  /** Registers the `issue-update` tool on the given MCP server. */
8
18
  export function registerIssueUpdateTool(server) {
9
19
  server.registerTool("issue-update", {
10
20
  title: "Issue Update",
11
- description: "Updates issue metadata (title, body, labels, assignees). Returns structured data with issue number and URL. Use instead of running `gh issue edit` in the terminal.",
21
+ description: "Updates issue metadata (title, body, labels, assignees, milestone, projects). " +
22
+ "All fields except `number` are optional — only supply the fields you want to change. " +
23
+ "For list fields (labels, assignees, projects), use `add*` to append and `remove*` to " +
24
+ "delete specific items without affecting others. " +
25
+ "Returns structured data with issue number and URL.",
12
26
  inputSchema: {
13
- number: z.number().describe("Issue number"),
14
- path: z
27
+ // ── Target ──────────────────────────────────────────────────
28
+ /** Issue number (integer) or full GitHub issue URL. */
29
+ number: z
30
+ .string()
31
+ .max(INPUT_LIMITS.STRING_MAX)
32
+ .describe("Issue number or full GitHub issue URL to update"),
33
+ /** Repository path on disk. Defaults to cwd. */
34
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
35
+ // ── Content fields ──────────────────────────────────────────
36
+ /** Replace the issue title entirely. */
37
+ title: z
15
38
  .string()
16
- .max(INPUT_LIMITS.PATH_MAX)
39
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
17
40
  .optional()
18
- .describe("Repository path (default: cwd)"),
19
- title: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("New issue title"),
41
+ .describe("New issue title (replaces existing)"),
42
+ /** Replace the issue body entirely. Passed via stdin to avoid shell escaping issues. */
20
43
  body: z
21
44
  .string()
22
45
  .max(INPUT_LIMITS.STRING_MAX)
23
46
  .optional()
24
- .describe("New issue body/description"),
47
+ .describe("New issue body/description (replaces existing, sent via stdin)"),
48
+ // ── Labels (additive/subtractive) ───────────────────────────
49
+ /** Labels to add to the issue. Does not remove existing labels. */
25
50
  addLabels: z
26
51
  .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
27
52
  .max(INPUT_LIMITS.ARRAY_MAX)
28
53
  .optional()
29
- .describe("Labels to add"),
54
+ .describe("Labels to add (preserves existing labels)"),
55
+ /** Labels to remove from the issue. Ignores labels not present. */
30
56
  removeLabels: z
31
57
  .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
32
58
  .max(INPUT_LIMITS.ARRAY_MAX)
33
59
  .optional()
34
- .describe("Labels to remove"),
60
+ .describe("Labels to remove (ignores labels not currently set)"),
61
+ // ── Assignees (additive/subtractive) ────────────────────────
62
+ /** Assignees to add. Does not remove existing assignees. */
35
63
  addAssignees: z
36
64
  .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
37
65
  .max(INPUT_LIMITS.ARRAY_MAX)
38
66
  .optional()
39
- .describe("Assignees to add"),
67
+ .describe("GitHub usernames to assign (preserves existing assignees)"),
68
+ /** Assignees to remove. Ignores users not currently assigned. */
40
69
  removeAssignees: z
41
70
  .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
42
71
  .max(INPUT_LIMITS.ARRAY_MAX)
43
72
  .optional()
44
- .describe("Assignees to remove"),
73
+ .describe("GitHub usernames to unassign (ignores users not assigned)"),
74
+ // ── Milestone ───────────────────────────────────────────────
75
+ /** Set the milestone. Use `removeMilestone` to clear it instead. */
76
+ milestone: z
77
+ .string()
78
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
79
+ .optional()
80
+ .describe("Set milestone by name or number (--milestone). Mutually exclusive with removeMilestone."),
81
+ /** Remove the current milestone from the issue. */
82
+ removeMilestone: z
83
+ .boolean()
84
+ .optional()
85
+ .describe("Remove the milestone from the issue (--remove-milestone). Mutually exclusive with milestone."),
86
+ // ── Projects (additive/subtractive) ─────────────────────────
87
+ /** Projects to add. Does not remove existing project associations. */
88
+ addProjects: 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 add (--add-project)"),
93
+ /** Projects to remove. Ignores projects not currently associated. */
94
+ removeProjects: z
95
+ .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
96
+ .max(INPUT_LIMITS.ARRAY_MAX)
97
+ .optional()
98
+ .describe("Project board names to remove (--remove-project)"),
99
+ // ── Cross-repo ──────────────────────────────────────────────
100
+ /** Target a different repository than the one at `path`. */
101
+ repo: z
102
+ .string()
103
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
104
+ .optional()
105
+ .describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
45
106
  },
46
107
  outputSchema: EditResultSchema,
47
- }, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, }) => {
108
+ }, async ({ number, path, title, body, addLabels, removeLabels, addAssignees, removeAssignees, milestone, removeMilestone, addProjects, removeProjects, repo, }) => {
48
109
  const cwd = path || process.cwd();
49
110
  if (title)
50
111
  assertNoFlagInjection(title, "title");
112
+ if (typeof number === "string")
113
+ assertNoFlagInjection(number, "number");
114
+ if (milestone)
115
+ assertNoFlagInjection(milestone, "milestone");
116
+ if (repo)
117
+ assertNoFlagInjection(repo, "repo");
51
118
  if (addLabels) {
52
119
  for (const label of addLabels) {
53
120
  assertNoFlagInjection(label, "addLabels");
@@ -68,7 +135,41 @@ export function registerIssueUpdateTool(server) {
68
135
  assertNoFlagInjection(assignee, "removeAssignees");
69
136
  }
70
137
  }
71
- const args = ["issue", "edit", String(number)];
138
+ if (addProjects) {
139
+ for (const project of addProjects) {
140
+ assertNoFlagInjection(project, "addProjects");
141
+ }
142
+ }
143
+ if (removeProjects) {
144
+ for (const project of removeProjects) {
145
+ assertNoFlagInjection(project, "removeProjects");
146
+ }
147
+ }
148
+ const selector = String(number);
149
+ const issueNum = typeof number === "number" ? number : 0;
150
+ const updatedFields = [
151
+ title ? "title" : undefined,
152
+ body ? "body" : undefined,
153
+ addLabels && addLabels.length > 0 ? "labels" : undefined,
154
+ removeLabels && removeLabels.length > 0 ? "labels" : undefined,
155
+ addAssignees && addAssignees.length > 0 ? "assignees" : undefined,
156
+ removeAssignees && removeAssignees.length > 0 ? "assignees" : undefined,
157
+ milestone ? "milestone" : undefined,
158
+ removeMilestone ? "milestone" : undefined,
159
+ addProjects && addProjects.length > 0 ? "projects" : undefined,
160
+ removeProjects && removeProjects.length > 0 ? "projects" : undefined,
161
+ ].filter(Boolean);
162
+ const operations = [
163
+ addLabels && addLabels.length > 0 ? "add-label" : undefined,
164
+ removeLabels && removeLabels.length > 0 ? "remove-label" : undefined,
165
+ addAssignees && addAssignees.length > 0 ? "add-assignee" : undefined,
166
+ removeAssignees && removeAssignees.length > 0 ? "remove-assignee" : undefined,
167
+ addProjects && addProjects.length > 0 ? "add-project" : undefined,
168
+ removeProjects && removeProjects.length > 0 ? "remove-project" : undefined,
169
+ milestone ? "set-milestone" : undefined,
170
+ removeMilestone ? "remove-milestone" : undefined,
171
+ ].filter(Boolean);
172
+ const args = ["issue", "edit", selector];
72
173
  if (title)
73
174
  args.push("--title", title);
74
175
  if (addLabels && addLabels.length > 0) {
@@ -91,14 +192,40 @@ export function registerIssueUpdateTool(server) {
91
192
  args.push("--remove-assignee", assignee);
92
193
  }
93
194
  }
195
+ // Milestone: set or remove (mutually exclusive)
196
+ if (milestone)
197
+ args.push("--milestone", milestone);
198
+ if (removeMilestone)
199
+ args.push("--remove-milestone");
200
+ // Projects: add or remove
201
+ if (addProjects && addProjects.length > 0) {
202
+ for (const project of addProjects) {
203
+ args.push("--add-project", project);
204
+ }
205
+ }
206
+ if (removeProjects && removeProjects.length > 0) {
207
+ for (const project of removeProjects) {
208
+ args.push("--remove-project", project);
209
+ }
210
+ }
211
+ if (repo)
212
+ args.push("--repo", repo);
94
213
  if (body) {
95
214
  args.push("--body-file", "-");
96
215
  }
97
216
  const result = await ghCmd(args, body ? { cwd, stdin: body } : { cwd });
98
217
  if (result.exitCode !== 0) {
99
- throw new Error(`gh issue edit failed: ${result.stderr}`);
218
+ const combined = `${result.stdout}\n${result.stderr}`.trim();
219
+ return dualOutput({
220
+ number: issueNum,
221
+ url: "",
222
+ updatedFields,
223
+ operations,
224
+ errorType: classifyIssueUpdateError(combined),
225
+ errorMessage: combined || "gh issue edit failed",
226
+ }, formatIssueUpdate);
100
227
  }
101
- const data = parseIssueUpdate(result.stdout, number);
228
+ const data = parseIssueUpdate(result.stdout, issueNum, updatedFields, operations);
102
229
  return dualOutput(data, formatIssueUpdate);
103
230
  });
104
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue-update.js","sourceRoot":"","sources":["../../src/tools/issue-update.ts"],"names":[],"mappings":"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"}
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;AASzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA6CtD"}
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,QAoDtD"}
@@ -1,32 +1,44 @@
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
- const ISSUE_VIEW_FIELDS = "number,state,title,body,labels,assignees,url,createdAt";
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.",
13
14
  inputSchema: {
14
- number: z.number().describe("Issue number"),
15
- path: z
16
- .string()
17
- .max(INPUT_LIMITS.PATH_MAX)
18
- .optional()
19
- .describe("Repository path (default: cwd)"),
20
- compact: z
15
+ number: z.string().max(INPUT_LIMITS.STRING_MAX).describe("Issue number or URL"),
16
+ comments: z
21
17
  .boolean()
22
18
  .optional()
23
- .default(true)
24
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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."),
26
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
27
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
25
28
  },
26
29
  outputSchema: IssueViewResultSchema,
27
- }, async ({ number, path, compact }) => {
30
+ }, async ({ number, comments, repo, path, compact }) => {
28
31
  const cwd = path || process.cwd();
29
- const args = ["issue", "view", String(number), "--json", ISSUE_VIEW_FIELDS];
32
+ if (repo)
33
+ assertNoFlagInjection(repo, "repo");
34
+ if (typeof number === "string")
35
+ assertNoFlagInjection(number, "number");
36
+ const selector = String(number);
37
+ const args = ["issue", "view", selector, "--json", ISSUE_VIEW_FIELDS];
38
+ if (comments)
39
+ args.push("--comments");
40
+ if (repo)
41
+ args.push("--repo", repo);
30
42
  const result = await ghCmd(args, cwd);
31
43
  if (result.exitCode !== 0) {
32
44
  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;AACpE,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,wDAAwD,CAAC;AAEnF,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,oJAAoJ;QACtJ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC3C,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,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC5E,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
+ {"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,oIAAoI;QACtI,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,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAClF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAChF;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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `label-create` tool on the given MCP server. */
3
+ export declare function registerLabelCreateTool(server: McpServer): void;
4
+ //# sourceMappingURL=label-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-create.d.ts","sourceRoot":"","sources":["../../src/tools/label-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA6DxD"}
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import { dualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { ghCmd } from "../lib/gh-runner.js";
4
+ import { parseLabelCreate } from "../lib/parsers.js";
5
+ import { formatLabelCreate } from "../lib/formatters.js";
6
+ import { LabelCreateResultSchema } from "../schemas/index.js";
7
+ function classifyLabelCreateError(text) {
8
+ const lower = text.toLowerCase();
9
+ if (/already exists|label .* already/.test(lower))
10
+ return "already-exists";
11
+ if (/forbidden|permission|403/.test(lower))
12
+ return "permission-denied";
13
+ if (/validation|invalid|required|unprocessable/.test(lower))
14
+ return "validation";
15
+ return "unknown";
16
+ }
17
+ /** Registers the `label-create` tool on the given MCP server. */
18
+ export function registerLabelCreateTool(server) {
19
+ server.registerTool("label-create", {
20
+ title: "Label Create",
21
+ description: "Creates a new repository label. Returns structured data with label name, description, color, and URL.",
22
+ inputSchema: {
23
+ name: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).describe("Label name"),
24
+ description: z
25
+ .string()
26
+ .max(INPUT_LIMITS.STRING_MAX)
27
+ .optional()
28
+ .describe("Label description"),
29
+ color: z
30
+ .string()
31
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
32
+ .optional()
33
+ .describe("Label color as hex (e.g., 'ff0000' without #)"),
34
+ repo: z
35
+ .string()
36
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
37
+ .optional()
38
+ .describe("Repository in OWNER/REPO format (default: current repo)"),
39
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
40
+ },
41
+ outputSchema: LabelCreateResultSchema,
42
+ }, async ({ name, description, color, repo, path }) => {
43
+ const cwd = path || process.cwd();
44
+ assertNoFlagInjection(name, "name");
45
+ if (description)
46
+ assertNoFlagInjection(description, "description");
47
+ if (color)
48
+ assertNoFlagInjection(color, "color");
49
+ if (repo)
50
+ assertNoFlagInjection(repo, "repo");
51
+ const args = ["label", "create", name];
52
+ if (description)
53
+ args.push("--description", description);
54
+ if (color)
55
+ args.push("--color", color);
56
+ if (repo)
57
+ args.push("--repo", repo);
58
+ const result = await ghCmd(args, cwd);
59
+ if (result.exitCode !== 0) {
60
+ const combined = `${result.stdout}\n${result.stderr}`.trim();
61
+ return dualOutput({
62
+ name,
63
+ description: description ?? undefined,
64
+ color: color ?? undefined,
65
+ errorType: classifyLabelCreateError(combined),
66
+ errorMessage: combined || "gh label create failed",
67
+ }, formatLabelCreate);
68
+ }
69
+ const data = parseLabelCreate(result.stdout, result.stderr, name, description, color);
70
+ return dualOutput(data, formatLabelCreate);
71
+ });
72
+ }
73
+ //# sourceMappingURL=label-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-create.js","sourceRoot":"","sources":["../../src/tools/label-create.ts"],"names":[],"mappings":"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"}