@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
@@ -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,mDAAmD,CAAC;AAEhF,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,2LAA2L;QAC7L,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,oDAAoD,CAAC;YACjE,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,yDAAyD,CAAC;YACtE,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,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEpC,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,2BAA2B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
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;AASzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA+DpD"}
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,QAuJpD"}
@@ -4,12 +4,13 @@ import { ghCmd } from "../lib/gh-runner.js";
4
4
  import { parseRunList } from "../lib/parsers.js";
5
5
  import { formatRunList, compactRunListMap, formatRunListCompact } from "../lib/formatters.js";
6
6
  import { RunListResultSchema } from "../schemas/index.js";
7
- const RUN_LIST_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,url,createdAt";
7
+ // P1-gap #148: Expanded fields
8
+ const RUN_LIST_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,url,createdAt,headSha,event,startedAt,attempt";
8
9
  /** Registers the `run-list` tool on the given MCP server. */
9
10
  export function registerRunListTool(server) {
10
11
  server.registerTool("run-list", {
11
12
  title: "Run List",
12
- description: "Lists workflow runs with optional filters. Returns structured list with run ID, status, conclusion, and workflow details. Use instead of running `gh run list` in the terminal.",
13
+ description: "Lists workflow runs with optional filters. Returns structured list with run ID, status, conclusion, and workflow details.",
13
14
  inputSchema: {
14
15
  limit: z
15
16
  .number()
@@ -21,36 +22,134 @@ export function registerRunListTool(server) {
21
22
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
22
23
  .optional()
23
24
  .describe("Filter by branch name"),
25
+ // S-gap P0: Expand status enum to all 16 upstream values
24
26
  status: z
25
- .enum(["queued", "in_progress", "completed", "failure", "success"])
27
+ .enum([
28
+ "queued",
29
+ "in_progress",
30
+ "completed",
31
+ "failure",
32
+ "success",
33
+ "cancelled",
34
+ "timed_out",
35
+ "waiting",
36
+ "action_required",
37
+ "neutral",
38
+ "skipped",
39
+ "stale",
40
+ "startup_failure",
41
+ "pending",
42
+ "requested",
43
+ ])
26
44
  .optional()
27
45
  .describe("Filter by run status"),
28
- path: z
46
+ all: z.boolean().optional().describe("Include runs from disabled workflows (-a/--all)"),
47
+ // S-gap P0: Add workflow filter
48
+ workflow: z
29
49
  .string()
30
- .max(INPUT_LIMITS.PATH_MAX)
50
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
51
+ .optional()
52
+ .describe("Filter by workflow file name or ID (-w/--workflow)"),
53
+ // S-gap P0: Add commit filter
54
+ commit: z
55
+ .string()
56
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
57
+ .optional()
58
+ .describe("Filter by commit SHA (-c/--commit)"),
59
+ // S-gap P0: Add repo for cross-repo listing
60
+ repo: z
61
+ .string()
62
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
63
+ .optional()
64
+ .describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
65
+ // S-gap P1: Add event filter
66
+ event: z
67
+ .string()
68
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
69
+ .optional()
70
+ .describe("Filter by trigger event type (-e/--event), e.g. push, pull_request"),
71
+ // S-gap P1: Add user filter
72
+ user: z
73
+ .string()
74
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
31
75
  .optional()
32
- .describe("Repository path (default: cwd)"),
33
- compact: z
34
- .boolean()
76
+ .describe("Filter by triggering user (-u/--user)"),
77
+ // S-gap P1: Add created filter
78
+ created: z
79
+ .string()
80
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
35
81
  .optional()
36
- .default(true)
37
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
82
+ .describe("Filter by creation time (--created), e.g. '>2024-01-01'"),
83
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
84
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
38
85
  },
39
86
  outputSchema: RunListResultSchema,
40
- }, async ({ limit, branch, status, path, compact }) => {
87
+ }, async ({ limit, branch, status, all, workflow, commit, repo, event, user, created, path, compact, }) => {
41
88
  const cwd = path || process.cwd();
42
89
  if (branch)
43
90
  assertNoFlagInjection(branch, "branch");
91
+ if (workflow)
92
+ assertNoFlagInjection(workflow, "workflow");
93
+ if (commit)
94
+ assertNoFlagInjection(commit, "commit");
95
+ if (repo)
96
+ assertNoFlagInjection(repo, "repo");
97
+ if (event)
98
+ assertNoFlagInjection(event, "event");
99
+ if (user)
100
+ assertNoFlagInjection(user, "user");
101
+ if (created)
102
+ assertNoFlagInjection(created, "created");
44
103
  const args = ["run", "list", "--json", RUN_LIST_FIELDS, "--limit", String(limit)];
45
104
  if (branch)
46
105
  args.push("--branch", branch);
47
106
  if (status)
48
107
  args.push("--status", status);
108
+ if (all)
109
+ args.push("--all");
110
+ if (workflow)
111
+ args.push("--workflow", workflow);
112
+ if (commit)
113
+ args.push("--commit", commit);
114
+ if (repo)
115
+ args.push("--repo", repo);
116
+ if (event)
117
+ args.push("--event", event);
118
+ if (user)
119
+ args.push("--user", user);
120
+ if (created)
121
+ args.push("--created", created);
49
122
  const result = await ghCmd(args, cwd);
50
123
  if (result.exitCode !== 0) {
51
124
  throw new Error(`gh run list failed: ${result.stderr}`);
52
125
  }
53
- const data = parseRunList(result.stdout);
126
+ let totalAvailable;
127
+ if (limit < 1000) {
128
+ const countArgs = ["run", "list", "--json", RUN_LIST_FIELDS, "--limit", "1000"];
129
+ if (branch)
130
+ countArgs.push("--branch", branch);
131
+ if (status)
132
+ countArgs.push("--status", status);
133
+ if (all)
134
+ countArgs.push("--all");
135
+ if (workflow)
136
+ countArgs.push("--workflow", workflow);
137
+ if (commit)
138
+ countArgs.push("--commit", commit);
139
+ if (repo)
140
+ countArgs.push("--repo", repo);
141
+ if (event)
142
+ countArgs.push("--event", event);
143
+ if (user)
144
+ countArgs.push("--user", user);
145
+ if (created)
146
+ countArgs.push("--created", created);
147
+ const countResult = await ghCmd(countArgs, cwd);
148
+ if (countResult.exitCode === 0) {
149
+ totalAvailable = parseRunList(countResult.stdout).total;
150
+ }
151
+ }
152
+ const data = parseRunList(result.stdout, totalAvailable);
54
153
  return compactDualOutput(data, result.stdout, formatRunList, compactRunListMap, formatRunListCompact, compact === false);
55
154
  });
56
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-list.js","sourceRoot":"","sources":["../../src/tools/run-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,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,eAAe,GAAG,yEAAyE,CAAC;AAElG,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,iLAAiL;QACnL,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;YACpC,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;iBAClE,QAAQ,EAAE;iBACV,QAAQ,CAAC,sBAAsB,CAAC;YACnC,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,mBAAmB;KAClC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE1C,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,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-list.js","sourceRoot":"","sources":["../../src/tools/run-list.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-rerun.d.ts","sourceRoot":"","sources":["../../src/tools/run-rerun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA4CrD"}
1
+ {"version":3,"file":"run-rerun.d.ts","sourceRoot":"","sources":["../../src/tools/run-rerun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA8DrD"}
@@ -1,14 +1,24 @@
1
1
  import { z } from "zod";
2
- import { dualOutput, INPUT_LIMITS } from "@paretools/shared";
2
+ import { dualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { ghCmd } from "../lib/gh-runner.js";
4
4
  import { parseRunRerun } from "../lib/parsers.js";
5
5
  import { formatRunRerun } from "../lib/formatters.js";
6
6
  import { RunRerunResultSchema } from "../schemas/index.js";
7
+ function classifyRunRerunError(text) {
8
+ const lower = text.toLowerCase();
9
+ if (/not found|could not resolve|no workflow run/.test(lower))
10
+ return "not-found";
11
+ if (/forbidden|permission|403/.test(lower))
12
+ return "permission-denied";
13
+ if (/in progress|already running|cannot rerun while/.test(lower))
14
+ return "in-progress";
15
+ return "unknown";
16
+ }
7
17
  /** Registers the `run-rerun` tool on the given MCP server. */
8
18
  export function registerRunRerunTool(server) {
9
19
  server.registerTool("run-rerun", {
10
20
  title: "Run Rerun",
11
- description: "Re-runs a workflow run by ID. Optionally re-runs only failed jobs. Returns structured result with run ID, status, and URL. Use instead of running `gh run rerun` in the terminal.",
21
+ description: "Re-runs a workflow run by ID. Optionally re-runs only failed jobs or a specific job. Returns structured result with run ID, status, and URL.",
12
22
  inputSchema: {
13
23
  runId: z.number().describe("Workflow run ID to re-run"),
14
24
  failedOnly: z
@@ -21,25 +31,45 @@ export function registerRunRerunTool(server) {
21
31
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
22
32
  .optional()
23
33
  .describe("Repository in OWNER/REPO format (default: detected from git remote)"),
24
- path: z
34
+ debug: z.boolean().optional().describe("Enable runner diagnostic logging (-d/--debug)"),
35
+ // S-gap P1: Add job for rerunning a specific job
36
+ job: z
25
37
  .string()
26
- .max(INPUT_LIMITS.PATH_MAX)
38
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
27
39
  .optional()
28
- .describe("Repository path (default: cwd)"),
40
+ .describe("Rerun a specific job by its databaseId (-j/--job). Note: requires the job's databaseId, not the job name."),
41
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
29
42
  },
30
43
  outputSchema: RunRerunResultSchema,
31
- }, async ({ runId, failedOnly, repo, path }) => {
44
+ }, async ({ runId, failedOnly, repo, debug, job, path }) => {
32
45
  const cwd = path || process.cwd();
46
+ if (repo)
47
+ assertNoFlagInjection(repo, "repo");
48
+ if (job)
49
+ assertNoFlagInjection(job, "job");
33
50
  const args = ["run", "rerun", String(runId)];
34
51
  if (failedOnly)
35
52
  args.push("--failed");
36
53
  if (repo)
37
54
  args.push("--repo", repo);
55
+ if (debug)
56
+ args.push("--debug");
57
+ if (job)
58
+ args.push("--job", job);
38
59
  const result = await ghCmd(args, cwd);
60
+ const rerun = parseRunRerun(result.stdout, result.stderr, runId, failedOnly ?? false, job);
39
61
  if (result.exitCode !== 0) {
40
- throw new Error(`gh run rerun failed: ${result.stderr}`);
62
+ const combined = `${result.stdout}\n${result.stderr}`.trim();
63
+ const data = {
64
+ ...rerun,
65
+ status: "error",
66
+ errorType: classifyRunRerunError(combined),
67
+ errorMessage: combined || "gh run rerun failed",
68
+ };
69
+ return dualOutput(data, formatRunRerun);
41
70
  }
42
- const data = parseRunRerun(result.stdout, result.stderr, runId, failedOnly ?? false);
71
+ // S-gap: Pass job for echo in output
72
+ const data = rerun;
43
73
  return dualOutput(data, formatRunRerun);
44
74
  });
45
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-rerun.js","sourceRoot":"","sources":["../../src/tools/run-rerun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,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,mLAAmL;QACrL,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACvD,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,0CAA0C,CAAC;YACvD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,qEAAqE,CAAC;YAClF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,gCAAgC,CAAC;SAC9C;QACD,YAAY,EAAE,oBAAoB;KACnC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,IAAI,UAAU;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEpC,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,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC;QACrF,OAAO,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-rerun.js","sourceRoot":"","sources":["../../src/tools/run-rerun.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-view.d.ts","sourceRoot":"","sources":["../../src/tools/run-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA6CpD"}
1
+ {"version":3,"file":"run-view.d.ts","sourceRoot":"","sources":["../../src/tools/run-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAuFpD"}
@@ -1,36 +1,87 @@
1
1
  import { z } from "zod";
2
- import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
2
+ import { compactDualOutput, dualOutput, assertNoFlagInjection, INPUT_LIMITS, } from "@paretools/shared";
3
3
  import { ghCmd } from "../lib/gh-runner.js";
4
4
  import { parseRunView } from "../lib/parsers.js";
5
- import { formatRunView, compactRunViewMap, formatRunViewCompact } from "../lib/formatters.js";
5
+ import { formatRunView, formatRunViewLog, compactRunViewMap, formatRunViewCompact, } from "../lib/formatters.js";
6
6
  import { RunViewResultSchema } from "../schemas/index.js";
7
- const RUN_VIEW_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,jobs,url,createdAt";
7
+ // S-gap: Request steps in jobs for step-level detail
8
+ // P0: Added headSha, event, startedAt, attempt for richer run metadata
9
+ const RUN_VIEW_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,jobs,url,createdAt,headSha,event,startedAt,updatedAt,attempt";
8
10
  /** Registers the `run-view` tool on the given MCP server. */
9
11
  export function registerRunViewTool(server) {
10
12
  server.registerTool("run-view", {
11
13
  title: "Run View",
12
- description: "Views a workflow run by ID. Returns structured data with status, conclusion, jobs, and workflow details. Use instead of running `gh run view` in the terminal.",
14
+ description: "Views a workflow run by ID. Returns structured data with status, conclusion, jobs (with steps), and workflow details.",
13
15
  inputSchema: {
14
16
  id: z.number().describe("Workflow run ID"),
15
- path: z
16
- .string()
17
- .max(INPUT_LIMITS.PATH_MAX)
17
+ logFailed: z
18
+ .boolean()
18
19
  .optional()
19
- .describe("Repository path (default: cwd)"),
20
- compact: z
20
+ .describe("Retrieve logs for failed steps only (--log-failed)"),
21
+ log: z.boolean().optional().describe("Retrieve full run logs (--log)"),
22
+ attempt: z.number().optional().describe("View a specific rerun attempt (-a/--attempt)"),
23
+ exitStatus: z
21
24
  .boolean()
22
25
  .optional()
23
- .default(true)
24
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
26
+ .describe("Exit with non-zero status if run failed (--exit-status)"),
27
+ // S-gap P0: Add job filter for focused single-job inspection
28
+ job: z
29
+ .string()
30
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
31
+ .optional()
32
+ .describe("View a specific job by ID (-j/--job)"),
33
+ // S-gap P0: Add repo for cross-repo inspection
34
+ repo: z
35
+ .string()
36
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
37
+ .optional()
38
+ .describe("Repository in OWNER/REPO format (--repo). Default: current repo."),
39
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Repository path"),
40
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
25
41
  },
26
42
  outputSchema: RunViewResultSchema,
27
- }, async ({ id, path, compact }) => {
43
+ }, async ({ id, logFailed, log, attempt, exitStatus, job, repo, path, compact }) => {
28
44
  const cwd = path || process.cwd();
29
- const args = ["run", "view", String(id), "--json", RUN_VIEW_FIELDS];
45
+ if (job)
46
+ assertNoFlagInjection(job, "job");
47
+ if (repo)
48
+ assertNoFlagInjection(repo, "repo");
49
+ const wantsLogs = logFailed || log;
50
+ // --log and --log-failed are mutually exclusive with --json in gh CLI.
51
+ // When requesting logs, skip --json and return raw log text.
52
+ const args = ["run", "view", String(id)];
53
+ if (!wantsLogs) {
54
+ args.push("--json", RUN_VIEW_FIELDS);
55
+ }
56
+ if (logFailed)
57
+ args.push("--log-failed");
58
+ if (log)
59
+ args.push("--log");
60
+ if (attempt !== undefined)
61
+ args.push("--attempt", String(attempt));
62
+ if (exitStatus)
63
+ args.push("--exit-status");
64
+ if (job)
65
+ args.push("--job", job);
66
+ if (repo)
67
+ args.push("--repo", repo);
30
68
  const result = await ghCmd(args, cwd);
31
69
  if (result.exitCode !== 0) {
32
70
  throw new Error(`gh run view failed: ${result.stderr}`);
33
71
  }
72
+ // Log mode: return raw logs as text in the logs field
73
+ if (wantsLogs) {
74
+ const data = {
75
+ id,
76
+ status: "completed",
77
+ conclusion: null,
78
+ workflowName: "",
79
+ headBranch: "",
80
+ url: "",
81
+ logs: result.stdout,
82
+ };
83
+ return dualOutput(data, formatRunViewLog);
84
+ }
34
85
  const data = parseRunView(result.stdout);
35
86
  return compactDualOutput(data, result.stdout, formatRunView, compactRunViewMap, formatRunViewCompact, compact === false);
36
87
  });
@@ -1 +1 @@
1
- {"version":3,"file":"run-view.js","sourceRoot":"","sources":["../../src/tools/run-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,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,eAAe,GACnB,8EAA8E,CAAC;AAEjF,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,gKAAgK;QAClK,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC1C,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,mBAAmB;KAClC,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACpE,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,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-view.js","sourceRoot":"","sources":["../../src/tools/run-view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paretools/github",
3
- "version": "0.8.5",
3
+ "version": "0.10.0",
4
4
  "mcpName": "io.github.Dave-London/pare-github",
5
5
  "description": "MCP server for GitHub operations (PRs, issues, actions) with structured, token-efficient output",
6
6
  "license": "MIT",
@@ -51,7 +51,7 @@
51
51
  "dependencies": {
52
52
  "@modelcontextprotocol/sdk": "^1.26.0",
53
53
  "zod": "^4.3.6",
54
- "@paretools/shared": "0.8.5"
54
+ "@paretools/shared": "0.10.0"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/node": "^25.2.3",