@paretools/github 0.8.4 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +112 -16
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +33 -11
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +309 -24
- package/dist/lib/parsers.js.map +1 -1
- package/dist/lib/path-validation.d.ts +13 -0
- package/dist/lib/path-validation.d.ts.map +1 -0
- package/dist/lib/path-validation.js +54 -0
- package/dist/lib/path-validation.js.map +1 -0
- package/dist/schemas/index.d.ts +126 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +116 -3
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +135 -5
- package/dist/tools/api.js.map +1 -1
- package/dist/tools/gist-create.d.ts.map +1 -1
- package/dist/tools/gist-create.js +70 -16
- package/dist/tools/gist-create.js.map +1 -1
- package/dist/tools/issue-close.d.ts.map +1 -1
- package/dist/tools/issue-close.js +31 -5
- package/dist/tools/issue-close.js.map +1 -1
- package/dist/tools/issue-comment.d.ts.map +1 -1
- package/dist/tools/issue-comment.js +43 -6
- package/dist/tools/issue-comment.js.map +1 -1
- package/dist/tools/issue-create.d.ts.map +1 -1
- package/dist/tools/issue-create.js +69 -5
- package/dist/tools/issue-create.js.map +1 -1
- package/dist/tools/issue-list.d.ts.map +1 -1
- package/dist/tools/issue-list.js +79 -3
- package/dist/tools/issue-list.js.map +1 -1
- package/dist/tools/issue-update.d.ts.map +1 -1
- package/dist/tools/issue-update.js +102 -11
- package/dist/tools/issue-update.js.map +1 -1
- package/dist/tools/issue-view.d.ts.map +1 -1
- package/dist/tools/issue-view.js +26 -6
- package/dist/tools/issue-view.js.map +1 -1
- package/dist/tools/pr-checks.d.ts.map +1 -1
- package/dist/tools/pr-checks.js +27 -7
- package/dist/tools/pr-checks.js.map +1 -1
- package/dist/tools/pr-comment.d.ts.map +1 -1
- package/dist/tools/pr-comment.js +43 -6
- package/dist/tools/pr-comment.js.map +1 -1
- package/dist/tools/pr-create.d.ts.map +1 -1
- package/dist/tools/pr-create.js +125 -3
- package/dist/tools/pr-create.js.map +1 -1
- package/dist/tools/pr-diff.d.ts.map +1 -1
- package/dist/tools/pr-diff.js +36 -4
- package/dist/tools/pr-diff.js.map +1 -1
- package/dist/tools/pr-list.d.ts.map +1 -1
- package/dist/tools/pr-list.js +83 -3
- package/dist/tools/pr-list.js.map +1 -1
- package/dist/tools/pr-merge.d.ts.map +1 -1
- package/dist/tools/pr-merge.js +77 -6
- package/dist/tools/pr-merge.js.map +1 -1
- package/dist/tools/pr-review.d.ts.map +1 -1
- package/dist/tools/pr-review.js +43 -6
- package/dist/tools/pr-review.js.map +1 -1
- package/dist/tools/pr-update.d.ts.map +1 -1
- package/dist/tools/pr-update.js +110 -5
- package/dist/tools/pr-update.js.map +1 -1
- package/dist/tools/pr-view.d.ts.map +1 -1
- package/dist/tools/pr-view.js +27 -6
- package/dist/tools/pr-view.js.map +1 -1
- package/dist/tools/release-create.d.ts.map +1 -1
- package/dist/tools/release-create.js +79 -3
- package/dist/tools/release-create.js.map +1 -1
- package/dist/tools/release-list.d.ts.map +1 -1
- package/dist/tools/release-list.js +23 -5
- package/dist/tools/release-list.js.map +1 -1
- package/dist/tools/run-list.d.ts.map +1 -1
- package/dist/tools/run-list.js +84 -3
- package/dist/tools/run-list.js.map +1 -1
- package/dist/tools/run-rerun.d.ts.map +1 -1
- package/dist/tools/run-rerun.js +20 -4
- package/dist/tools/run-rerun.js.map +1 -1
- package/dist/tools/run-view.d.ts.map +1 -1
- package/dist/tools/run-view.js +44 -4
- package/dist/tools/run-view.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/run-list.js
CHANGED
|
@@ -4,7 +4,8 @@ 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", {
|
|
@@ -21,10 +22,64 @@ 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"),
|
|
46
|
+
all: z.boolean().optional().describe("Include runs from disabled workflows (-a/--all)"),
|
|
47
|
+
// S-gap P0: Add workflow filter
|
|
48
|
+
workflow: z
|
|
49
|
+
.string()
|
|
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)
|
|
75
|
+
.optional()
|
|
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)
|
|
81
|
+
.optional()
|
|
82
|
+
.describe("Filter by creation time (--created), e.g. '>2024-01-01'"),
|
|
28
83
|
path: z
|
|
29
84
|
.string()
|
|
30
85
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -37,15 +92,41 @@ export function registerRunListTool(server) {
|
|
|
37
92
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
38
93
|
},
|
|
39
94
|
outputSchema: RunListResultSchema,
|
|
40
|
-
}, async ({ limit, branch, status, path, compact }) => {
|
|
95
|
+
}, async ({ limit, branch, status, all, workflow, commit, repo, event, user, created, path, compact, }) => {
|
|
41
96
|
const cwd = path || process.cwd();
|
|
42
97
|
if (branch)
|
|
43
98
|
assertNoFlagInjection(branch, "branch");
|
|
99
|
+
if (workflow)
|
|
100
|
+
assertNoFlagInjection(workflow, "workflow");
|
|
101
|
+
if (commit)
|
|
102
|
+
assertNoFlagInjection(commit, "commit");
|
|
103
|
+
if (repo)
|
|
104
|
+
assertNoFlagInjection(repo, "repo");
|
|
105
|
+
if (event)
|
|
106
|
+
assertNoFlagInjection(event, "event");
|
|
107
|
+
if (user)
|
|
108
|
+
assertNoFlagInjection(user, "user");
|
|
109
|
+
if (created)
|
|
110
|
+
assertNoFlagInjection(created, "created");
|
|
44
111
|
const args = ["run", "list", "--json", RUN_LIST_FIELDS, "--limit", String(limit)];
|
|
45
112
|
if (branch)
|
|
46
113
|
args.push("--branch", branch);
|
|
47
114
|
if (status)
|
|
48
115
|
args.push("--status", status);
|
|
116
|
+
if (all)
|
|
117
|
+
args.push("--all");
|
|
118
|
+
if (workflow)
|
|
119
|
+
args.push("--workflow", workflow);
|
|
120
|
+
if (commit)
|
|
121
|
+
args.push("--commit", commit);
|
|
122
|
+
if (repo)
|
|
123
|
+
args.push("--repo", repo);
|
|
124
|
+
if (event)
|
|
125
|
+
args.push("--event", event);
|
|
126
|
+
if (user)
|
|
127
|
+
args.push("--user", user);
|
|
128
|
+
if (created)
|
|
129
|
+
args.push("--created", created);
|
|
49
130
|
const result = await ghCmd(args, cwd);
|
|
50
131
|
if (result.exitCode !== 0) {
|
|
51
132
|
throw new Error(`gh run list failed: ${result.stderr}`);
|
|
@@ -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;AAOzE,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,
|
|
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,QA2DrD"}
|
package/dist/tools/run-rerun.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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";
|
|
@@ -8,7 +8,7 @@ import { RunRerunResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerRunRerunTool(server) {
|
|
9
9
|
server.registerTool("run-rerun", {
|
|
10
10
|
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.",
|
|
11
|
+
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. Use instead of running `gh run rerun` in the terminal.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
runId: z.number().describe("Workflow run ID to re-run"),
|
|
14
14
|
failedOnly: z
|
|
@@ -21,6 +21,13 @@ export function registerRunRerunTool(server) {
|
|
|
21
21
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
22
22
|
.optional()
|
|
23
23
|
.describe("Repository in OWNER/REPO format (default: detected from git remote)"),
|
|
24
|
+
debug: z.boolean().optional().describe("Enable runner diagnostic logging (-d/--debug)"),
|
|
25
|
+
// S-gap P1: Add job for rerunning a specific job
|
|
26
|
+
job: z
|
|
27
|
+
.string()
|
|
28
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Rerun a specific job by its databaseId (-j/--job). Note: requires the job's databaseId, not the job name."),
|
|
24
31
|
path: z
|
|
25
32
|
.string()
|
|
26
33
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -28,18 +35,27 @@ export function registerRunRerunTool(server) {
|
|
|
28
35
|
.describe("Repository path (default: cwd)"),
|
|
29
36
|
},
|
|
30
37
|
outputSchema: RunRerunResultSchema,
|
|
31
|
-
}, async ({ runId, failedOnly, repo, path }) => {
|
|
38
|
+
}, async ({ runId, failedOnly, repo, debug, job, path }) => {
|
|
32
39
|
const cwd = path || process.cwd();
|
|
40
|
+
if (repo)
|
|
41
|
+
assertNoFlagInjection(repo, "repo");
|
|
42
|
+
if (job)
|
|
43
|
+
assertNoFlagInjection(job, "job");
|
|
33
44
|
const args = ["run", "rerun", String(runId)];
|
|
34
45
|
if (failedOnly)
|
|
35
46
|
args.push("--failed");
|
|
36
47
|
if (repo)
|
|
37
48
|
args.push("--repo", repo);
|
|
49
|
+
if (debug)
|
|
50
|
+
args.push("--debug");
|
|
51
|
+
if (job)
|
|
52
|
+
args.push("--job", job);
|
|
38
53
|
const result = await ghCmd(args, cwd);
|
|
39
54
|
if (result.exitCode !== 0) {
|
|
40
55
|
throw new Error(`gh run rerun failed: ${result.stderr}`);
|
|
41
56
|
}
|
|
42
|
-
|
|
57
|
+
// S-gap: Pass job for echo in output
|
|
58
|
+
const data = parseRunRerun(result.stdout, result.stderr, runId, failedOnly ?? false, job);
|
|
43
59
|
return dualOutput(data, formatRunRerun);
|
|
44
60
|
});
|
|
45
61
|
}
|
|
@@ -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;AAYzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA4EpD"}
|
package/dist/tools/run-view.js
CHANGED
|
@@ -1,17 +1,41 @@
|
|
|
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 { parseRunView } from "../lib/parsers.js";
|
|
5
5
|
import { formatRunView, 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,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. Use instead of running `gh run view` in the terminal.",
|
|
13
15
|
inputSchema: {
|
|
14
16
|
id: z.number().describe("Workflow run ID"),
|
|
17
|
+
logFailed: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
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
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
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."),
|
|
15
39
|
path: z
|
|
16
40
|
.string()
|
|
17
41
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -24,9 +48,25 @@ export function registerRunViewTool(server) {
|
|
|
24
48
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
25
49
|
},
|
|
26
50
|
outputSchema: RunViewResultSchema,
|
|
27
|
-
}, async ({ id, path, compact }) => {
|
|
51
|
+
}, async ({ id, logFailed, log, attempt, exitStatus, job, repo, path, compact }) => {
|
|
28
52
|
const cwd = path || process.cwd();
|
|
53
|
+
if (job)
|
|
54
|
+
assertNoFlagInjection(job, "job");
|
|
55
|
+
if (repo)
|
|
56
|
+
assertNoFlagInjection(repo, "repo");
|
|
29
57
|
const args = ["run", "view", String(id), "--json", RUN_VIEW_FIELDS];
|
|
58
|
+
if (logFailed)
|
|
59
|
+
args.push("--log-failed");
|
|
60
|
+
if (log)
|
|
61
|
+
args.push("--log");
|
|
62
|
+
if (attempt !== undefined)
|
|
63
|
+
args.push("--attempt", String(attempt));
|
|
64
|
+
if (exitStatus)
|
|
65
|
+
args.push("--exit-status");
|
|
66
|
+
if (job)
|
|
67
|
+
args.push("--job", job);
|
|
68
|
+
if (repo)
|
|
69
|
+
args.push("--repo", repo);
|
|
30
70
|
const result = await ghCmd(args, cwd);
|
|
31
71
|
if (result.exitCode !== 0) {
|
|
32
72
|
throw new Error(`gh run view failed: ${result.stderr}`);
|
|
@@ -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;
|
|
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.9.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.9.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/node": "^25.2.3",
|