@paretools/github 0.8.0 → 0.8.2
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/lib/formatters.d.ts +52 -1
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +110 -0
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +36 -1
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +132 -0
- package/dist/lib/parsers.js.map +1 -1
- package/dist/schemas/index.d.ts +142 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +93 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/api.d.ts +3 -0
- package/dist/tools/api.d.ts.map +1 -0
- package/dist/tools/api.js +75 -0
- package/dist/tools/api.js.map +1 -0
- package/dist/tools/gist-create.d.ts +3 -0
- package/dist/tools/gist-create.d.ts.map +1 -0
- package/dist/tools/gist-create.js +52 -0
- package/dist/tools/gist-create.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pr-checks.d.ts +3 -0
- package/dist/tools/pr-checks.d.ts.map +1 -0
- package/dist/tools/pr-checks.js +39 -0
- package/dist/tools/pr-checks.js.map +1 -0
- package/dist/tools/pr-diff.d.ts +3 -0
- package/dist/tools/pr-diff.d.ts.map +1 -0
- package/dist/tools/pr-diff.js +130 -0
- package/dist/tools/pr-diff.js.map +1 -0
- package/dist/tools/release-create.d.ts +3 -0
- package/dist/tools/release-create.d.ts.map +1 -0
- package/dist/tools/release-create.js +68 -0
- package/dist/tools/release-create.js.map +1 -0
- package/dist/tools/release-list.d.ts +3 -0
- package/dist/tools/release-list.d.ts.map +1 -0
- package/dist/tools/release-list.js +50 -0
- package/dist/tools/release-list.js.map +1 -0
- package/dist/tools/run-rerun.d.ts +3 -0
- package/dist/tools/run-rerun.d.ts.map +1 -0
- package/dist/tools/run-rerun.js +45 -0
- package/dist/tools/run-rerun.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
|
|
3
|
+
import { assertNoFlagInjection } from "@paretools/shared";
|
|
4
|
+
import { ghCmd } from "../lib/gh-runner.js";
|
|
5
|
+
import { formatPrDiff, compactPrDiffMap, formatPrDiffCompact } from "../lib/formatters.js";
|
|
6
|
+
import { PrDiffResultSchema } from "../schemas/index.js";
|
|
7
|
+
export function registerPrDiffTool(server) {
|
|
8
|
+
server.registerTool("pr-diff", {
|
|
9
|
+
title: "PR Diff",
|
|
10
|
+
description: "Returns file-level diff statistics for a pull request. Use full=true for patch content. Use instead of running `gh pr diff` in the terminal.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
pr: z.number().describe("Pull request number"),
|
|
13
|
+
repo: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Repository in OWNER/REPO format (default: current repo)"),
|
|
18
|
+
full: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.optional()
|
|
21
|
+
.default(false)
|
|
22
|
+
.describe("Include full patch content in chunks"),
|
|
23
|
+
compact: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.default(true)
|
|
27
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
28
|
+
},
|
|
29
|
+
outputSchema: PrDiffResultSchema,
|
|
30
|
+
}, async ({ pr, repo, full, compact }) => {
|
|
31
|
+
if (repo) {
|
|
32
|
+
assertNoFlagInjection(repo, "repo");
|
|
33
|
+
}
|
|
34
|
+
// Get numstat for structured file-level stats
|
|
35
|
+
const numstatArgs = ["pr", "diff", String(pr), "--patch=false"];
|
|
36
|
+
if (repo)
|
|
37
|
+
numstatArgs.push("--repo", repo);
|
|
38
|
+
// We use a two-pass approach: first get numstat, then optionally get full patch
|
|
39
|
+
const diffArgs = ["pr", "diff", String(pr)];
|
|
40
|
+
if (repo)
|
|
41
|
+
diffArgs.push("--repo", repo);
|
|
42
|
+
const result = await ghCmd(diffArgs, { cwd: process.cwd() });
|
|
43
|
+
if (result.exitCode !== 0) {
|
|
44
|
+
throw new Error(`gh pr diff failed: ${result.stderr}`);
|
|
45
|
+
}
|
|
46
|
+
// Parse the unified diff output to extract numstat-like data
|
|
47
|
+
const diff = parsePrDiffFromPatch(result.stdout);
|
|
48
|
+
// If full patch requested, attach chunk data
|
|
49
|
+
if (full && diff.files.length > 0) {
|
|
50
|
+
const filePatches = result.stdout.split(/^diff --git /m).filter(Boolean);
|
|
51
|
+
for (const patch of filePatches) {
|
|
52
|
+
const fileMatch = patch.match(/b\/(.+)\n/);
|
|
53
|
+
if (fileMatch) {
|
|
54
|
+
const matchedFile = diff.files.find((f) => f.file === fileMatch[1]);
|
|
55
|
+
if (matchedFile) {
|
|
56
|
+
const chunks = patch.split(/^@@/m).slice(1);
|
|
57
|
+
matchedFile.chunks = chunks.map((chunk) => {
|
|
58
|
+
const headerEnd = chunk.indexOf("\n");
|
|
59
|
+
return {
|
|
60
|
+
header: `@@${chunk.slice(0, headerEnd)}`,
|
|
61
|
+
lines: chunk.slice(headerEnd + 1),
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return compactDualOutput(diff, result.stdout, formatPrDiff, compactPrDiffMap, formatPrDiffCompact, compact === false);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parses unified diff output from `gh pr diff` into structured file stats.
|
|
73
|
+
* Counts additions (+) and deletions (-) from diff hunks.
|
|
74
|
+
*/
|
|
75
|
+
function parsePrDiffFromPatch(patchOutput) {
|
|
76
|
+
const filePatches = patchOutput.split(/^diff --git /m).filter(Boolean);
|
|
77
|
+
const files = filePatches.map((patch) => {
|
|
78
|
+
// Extract file path from "a/path b/path" header
|
|
79
|
+
const headerMatch = patch.match(/^a\/(.+?) b\/(.+?)\n/);
|
|
80
|
+
const oldFile = headerMatch?.[1] ?? "";
|
|
81
|
+
const newFile = headerMatch?.[2] ?? "";
|
|
82
|
+
// Detect status from diff headers
|
|
83
|
+
const isNew = /^new file mode/m.test(patch);
|
|
84
|
+
const isDeleted = /^deleted file mode/m.test(patch);
|
|
85
|
+
const isRenamed = /^rename from /m.test(patch) || /^similarity index/m.test(patch);
|
|
86
|
+
// Count additions and deletions from diff lines
|
|
87
|
+
let additions = 0;
|
|
88
|
+
let deletions = 0;
|
|
89
|
+
const lines = patch.split("\n");
|
|
90
|
+
let inHunk = false;
|
|
91
|
+
for (const line of lines) {
|
|
92
|
+
if (line.startsWith("@@")) {
|
|
93
|
+
inHunk = true;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (!inHunk)
|
|
97
|
+
continue;
|
|
98
|
+
// Stop at next diff header or file boundary
|
|
99
|
+
if (line.startsWith("diff --git "))
|
|
100
|
+
break;
|
|
101
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
102
|
+
additions++;
|
|
103
|
+
}
|
|
104
|
+
else if (line.startsWith("-") && !line.startsWith("---")) {
|
|
105
|
+
deletions++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const status = isNew
|
|
109
|
+
? "added"
|
|
110
|
+
: isDeleted
|
|
111
|
+
? "deleted"
|
|
112
|
+
: isRenamed
|
|
113
|
+
? "renamed"
|
|
114
|
+
: "modified";
|
|
115
|
+
return {
|
|
116
|
+
file: newFile,
|
|
117
|
+
status,
|
|
118
|
+
additions,
|
|
119
|
+
deletions,
|
|
120
|
+
...(isRenamed && oldFile !== newFile ? { oldFile } : {}),
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
files,
|
|
125
|
+
totalAdditions: files.reduce((sum, f) => sum + f.additions, 0),
|
|
126
|
+
totalDeletions: files.reduce((sum, f) => sum + f.deletions, 0),
|
|
127
|
+
totalFiles: files.length,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=pr-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-diff.js","sourceRoot":"","sources":["../../src/tools/pr-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-create.d.ts","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA6D1D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { dualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
|
+
import { ghCmd } from "../lib/gh-runner.js";
|
|
4
|
+
import { parseReleaseCreate } from "../lib/parsers.js";
|
|
5
|
+
import { formatReleaseCreate } from "../lib/formatters.js";
|
|
6
|
+
import { ReleaseCreateResultSchema } from "../schemas/index.js";
|
|
7
|
+
export function registerReleaseCreateTool(server) {
|
|
8
|
+
server.registerTool("release-create", {
|
|
9
|
+
title: "Release Create",
|
|
10
|
+
description: "Creates a new GitHub release. Returns structured data with tag, URL, draft, and prerelease status. Use instead of running `gh release create` in the terminal.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
tag: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).describe("Tag name for the release"),
|
|
13
|
+
title: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Release title (default: tag name)"),
|
|
18
|
+
notes: z.string().max(INPUT_LIMITS.STRING_MAX).optional().describe("Release notes/body"),
|
|
19
|
+
draft: z.boolean().optional().default(false).describe("Create as draft release"),
|
|
20
|
+
prerelease: z.boolean().optional().default(false).describe("Mark as prerelease"),
|
|
21
|
+
target: z
|
|
22
|
+
.string()
|
|
23
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Target commitish (branch or commit SHA)"),
|
|
26
|
+
repo: z
|
|
27
|
+
.string()
|
|
28
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Repository in owner/repo format (default: current repo)"),
|
|
31
|
+
path: z
|
|
32
|
+
.string()
|
|
33
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Repository path (default: cwd)"),
|
|
36
|
+
},
|
|
37
|
+
outputSchema: ReleaseCreateResultSchema,
|
|
38
|
+
}, async ({ tag, title, notes, draft, prerelease, target, repo, path }) => {
|
|
39
|
+
const cwd = path || process.cwd();
|
|
40
|
+
assertNoFlagInjection(tag, "tag");
|
|
41
|
+
if (title)
|
|
42
|
+
assertNoFlagInjection(title, "title");
|
|
43
|
+
if (target)
|
|
44
|
+
assertNoFlagInjection(target, "target");
|
|
45
|
+
if (repo)
|
|
46
|
+
assertNoFlagInjection(repo, "repo");
|
|
47
|
+
const args = ["release", "create", tag];
|
|
48
|
+
if (title)
|
|
49
|
+
args.push("--title", title);
|
|
50
|
+
if (notes !== undefined)
|
|
51
|
+
args.push("--notes", notes);
|
|
52
|
+
if (draft)
|
|
53
|
+
args.push("--draft");
|
|
54
|
+
if (prerelease)
|
|
55
|
+
args.push("--prerelease");
|
|
56
|
+
if (target)
|
|
57
|
+
args.push("--target", target);
|
|
58
|
+
if (repo)
|
|
59
|
+
args.push("--repo", repo);
|
|
60
|
+
const result = await ghCmd(args, cwd);
|
|
61
|
+
if (result.exitCode !== 0) {
|
|
62
|
+
throw new Error(`gh release create failed: ${result.stderr}`);
|
|
63
|
+
}
|
|
64
|
+
const data = parseReleaseCreate(result.stdout, tag, !!draft, !!prerelease);
|
|
65
|
+
return dualOutput(data, formatReleaseCreate);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=release-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-create.js","sourceRoot":"","sources":["../../src/tools/release-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-list.d.ts","sourceRoot":"","sources":["../../src/tools/release-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA0DxD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
|
+
import { ghCmd } from "../lib/gh-runner.js";
|
|
4
|
+
import { parseReleaseList } from "../lib/parsers.js";
|
|
5
|
+
import { formatReleaseList, compactReleaseListMap, formatReleaseListCompact, } from "../lib/formatters.js";
|
|
6
|
+
import { ReleaseListResultSchema } from "../schemas/index.js";
|
|
7
|
+
const RELEASE_LIST_FIELDS = "tagName,name,isDraft,isPrerelease,publishedAt,url";
|
|
8
|
+
export function registerReleaseListTool(server) {
|
|
9
|
+
server.registerTool("release-list", {
|
|
10
|
+
title: "Release List",
|
|
11
|
+
description: "Lists GitHub releases for a repository. Returns structured list with tag, name, draft/prerelease status, publish date, and URL. Use instead of running `gh release list` in the terminal.",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
limit: z
|
|
14
|
+
.number()
|
|
15
|
+
.optional()
|
|
16
|
+
.default(10)
|
|
17
|
+
.describe("Maximum number of releases to return (default: 10)"),
|
|
18
|
+
repo: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Repository in owner/repo format (default: current repo)"),
|
|
23
|
+
path: z
|
|
24
|
+
.string()
|
|
25
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Repository path (default: cwd)"),
|
|
28
|
+
compact: z
|
|
29
|
+
.boolean()
|
|
30
|
+
.optional()
|
|
31
|
+
.default(true)
|
|
32
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
33
|
+
},
|
|
34
|
+
outputSchema: ReleaseListResultSchema,
|
|
35
|
+
}, async ({ limit, repo, path, compact }) => {
|
|
36
|
+
const cwd = path || process.cwd();
|
|
37
|
+
if (repo)
|
|
38
|
+
assertNoFlagInjection(repo, "repo");
|
|
39
|
+
const args = ["release", "list", "--json", RELEASE_LIST_FIELDS, "--limit", String(limit)];
|
|
40
|
+
if (repo)
|
|
41
|
+
args.push("--repo", repo);
|
|
42
|
+
const result = await ghCmd(args, cwd);
|
|
43
|
+
if (result.exitCode !== 0) {
|
|
44
|
+
throw new Error(`gh release list failed: ${result.stderr}`);
|
|
45
|
+
}
|
|
46
|
+
const data = parseReleaseList(result.stdout);
|
|
47
|
+
return compactDualOutput(data, result.stdout, formatReleaseList, compactReleaseListMap, formatReleaseListCompact, compact === false);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=release-list.js.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +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,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA4CrD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { dualOutput, INPUT_LIMITS } from "@paretools/shared";
|
|
3
|
+
import { ghCmd } from "../lib/gh-runner.js";
|
|
4
|
+
import { parseRunRerun } from "../lib/parsers.js";
|
|
5
|
+
import { formatRunRerun } from "../lib/formatters.js";
|
|
6
|
+
import { RunRerunResultSchema } from "../schemas/index.js";
|
|
7
|
+
export function registerRunRerunTool(server) {
|
|
8
|
+
server.registerTool("run-rerun", {
|
|
9
|
+
title: "Run Rerun",
|
|
10
|
+
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.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
runId: z.number().describe("Workflow run ID to re-run"),
|
|
13
|
+
failedOnly: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.optional()
|
|
16
|
+
.default(false)
|
|
17
|
+
.describe("Re-run only failed jobs (default: false)"),
|
|
18
|
+
repo: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Repository in OWNER/REPO format (default: detected from git remote)"),
|
|
23
|
+
path: z
|
|
24
|
+
.string()
|
|
25
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Repository path (default: cwd)"),
|
|
28
|
+
},
|
|
29
|
+
outputSchema: RunRerunResultSchema,
|
|
30
|
+
}, async ({ runId, failedOnly, repo, path }) => {
|
|
31
|
+
const cwd = path || process.cwd();
|
|
32
|
+
const args = ["run", "rerun", String(runId)];
|
|
33
|
+
if (failedOnly)
|
|
34
|
+
args.push("--failed");
|
|
35
|
+
if (repo)
|
|
36
|
+
args.push("--repo", repo);
|
|
37
|
+
const result = await ghCmd(args, cwd);
|
|
38
|
+
if (result.exitCode !== 0) {
|
|
39
|
+
throw new Error(`gh run rerun failed: ${result.stderr}`);
|
|
40
|
+
}
|
|
41
|
+
const data = parseRunRerun(result.stdout, result.stderr, runId, failedOnly ?? false);
|
|
42
|
+
return dualOutput(data, formatRunRerun);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=run-rerun.js.map
|
|
@@ -0,0 +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,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"}
|
package/package.json
CHANGED