@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.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/formatters.d.ts +10 -2
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +144 -16
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/gh-runner.d.ts.map +1 -1
- package/dist/lib/gh-runner.js +2 -1
- package/dist/lib/gh-runner.js.map +1 -1
- package/dist/lib/parsers.d.ts +54 -18
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +426 -38
- 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 +267 -4
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +195 -4
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +134 -8
- package/dist/tools/api.js.map +1 -1
- package/dist/tools/gist-create.d.ts.map +1 -1
- package/dist/tools/gist-create.js +91 -21
- package/dist/tools/gist-create.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/issue-close.d.ts.map +1 -1
- package/dist/tools/issue-close.js +56 -9
- 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 +60 -9
- 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 +95 -9
- 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 +139 -11
- 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 +142 -15
- 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 -14
- package/dist/tools/issue-view.js.map +1 -1
- package/dist/tools/label-create.d.ts +4 -0
- package/dist/tools/label-create.d.ts.map +1 -0
- package/dist/tools/label-create.js +73 -0
- package/dist/tools/label-create.js.map +1 -0
- package/dist/tools/label-list.d.ts +4 -0
- package/dist/tools/label-list.d.ts.map +1 -0
- package/dist/tools/label-list.js +71 -0
- package/dist/tools/label-list.js.map +1 -0
- package/dist/tools/pr-checks.d.ts.map +1 -1
- package/dist/tools/pr-checks.js +57 -11
- 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 +60 -9
- 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 +154 -9
- 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 +63 -16
- 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 +115 -11
- 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 +104 -15
- 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 +41 -8
- 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 +157 -10
- 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 -14
- 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 +106 -9
- 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 +39 -13
- 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 +111 -12
- 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 +38 -8
- 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 +64 -13
- package/dist/tools/run-view.js.map +1 -1
- 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,
|
|
1
|
+
{"version":3,"file":"release-list.js","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../../src/tools/run-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"run-list.d.ts","sourceRoot":"","sources":["../../src/tools/run-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAuJpD"}
|
package/dist/tools/run-list.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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([
|
|
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
|
-
|
|
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.
|
|
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("
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
.
|
|
37
|
-
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/tools/run-rerun.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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.
|
|
38
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
27
39
|
.optional()
|
|
28
|
-
.describe("
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/tools/run-view.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
-
|
|
16
|
-
.
|
|
17
|
-
.max(INPUT_LIMITS.PATH_MAX)
|
|
17
|
+
logFailed: z
|
|
18
|
+
.boolean()
|
|
18
19
|
.optional()
|
|
19
|
-
.describe("
|
|
20
|
-
|
|
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
|
-
.
|
|
24
|
-
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
54
|
+
"@paretools/shared": "0.10.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/node": "^25.2.3",
|