@paretools/github 0.7.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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +11 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/formatters.d.ts +99 -0
  7. package/dist/lib/formatters.d.ts.map +1 -0
  8. package/dist/lib/formatters.js +205 -0
  9. package/dist/lib/formatters.js.map +1 -0
  10. package/dist/lib/gh-runner.d.ts +3 -0
  11. package/dist/lib/gh-runner.d.ts.map +1 -0
  12. package/dist/lib/gh-runner.js +5 -0
  13. package/dist/lib/gh-runner.js.map +1 -0
  14. package/dist/lib/parsers.d.ts +38 -0
  15. package/dist/lib/parsers.d.ts.map +1 -0
  16. package/dist/lib/parsers.js +137 -0
  17. package/dist/lib/parsers.js.map +1 -0
  18. package/dist/schemas/index.d.ts +146 -0
  19. package/dist/schemas/index.d.ts.map +1 -0
  20. package/dist/schemas/index.js +110 -0
  21. package/dist/schemas/index.js.map +1 -0
  22. package/dist/tools/index.d.ts +3 -0
  23. package/dist/tools/index.d.ts.map +1 -0
  24. package/dist/tools/index.js +29 -0
  25. package/dist/tools/index.js.map +1 -0
  26. package/dist/tools/issue-create.d.ts +3 -0
  27. package/dist/tools/issue-create.d.ts.map +1 -0
  28. package/dist/tools/issue-create.js +48 -0
  29. package/dist/tools/issue-create.js.map +1 -0
  30. package/dist/tools/issue-list.d.ts +3 -0
  31. package/dist/tools/issue-list.d.ts.map +1 -0
  32. package/dist/tools/issue-list.js +62 -0
  33. package/dist/tools/issue-list.js.map +1 -0
  34. package/dist/tools/issue-view.d.ts +3 -0
  35. package/dist/tools/issue-view.d.ts.map +1 -0
  36. package/dist/tools/issue-view.js +37 -0
  37. package/dist/tools/issue-view.js.map +1 -0
  38. package/dist/tools/pr-create.d.ts +3 -0
  39. package/dist/tools/pr-create.d.ts.map +1 -0
  40. package/dist/tools/pr-create.js +54 -0
  41. package/dist/tools/pr-create.js.map +1 -0
  42. package/dist/tools/pr-list.d.ts +3 -0
  43. package/dist/tools/pr-list.d.ts.map +1 -0
  44. package/dist/tools/pr-list.js +62 -0
  45. package/dist/tools/pr-list.js.map +1 -0
  46. package/dist/tools/pr-view.d.ts +3 -0
  47. package/dist/tools/pr-view.d.ts.map +1 -0
  48. package/dist/tools/pr-view.js +37 -0
  49. package/dist/tools/pr-view.js.map +1 -0
  50. package/dist/tools/run-list.d.ts +3 -0
  51. package/dist/tools/run-list.d.ts.map +1 -0
  52. package/dist/tools/run-list.js +56 -0
  53. package/dist/tools/run-list.js.map +1 -0
  54. package/dist/tools/run-view.d.ts +3 -0
  55. package/dist/tools/run-view.d.ts.map +1 -0
  56. package/dist/tools/run-view.js +37 -0
  57. package/dist/tools/run-view.js.map +1 -0
  58. package/package.json +68 -0
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { ghCmd } from "../lib/gh-runner.js";
4
+ import { parsePrList } from "../lib/parsers.js";
5
+ import { formatPrList, compactPrListMap, formatPrListCompact } from "../lib/formatters.js";
6
+ import { PrListResultSchema } from "../schemas/index.js";
7
+ const PR_LIST_FIELDS = "number,state,title,url,headRefName,author";
8
+ export function registerPrListTool(server) {
9
+ server.registerTool("pr-list", {
10
+ title: "PR List",
11
+ description: "Lists pull requests with optional filters. Returns structured list with PR number, state, title, author, and branch. Use instead of running `gh pr list` in the terminal.",
12
+ inputSchema: {
13
+ state: z
14
+ .enum(["open", "closed", "merged", "all"])
15
+ .optional()
16
+ .default("open")
17
+ .describe("Filter by PR state (default: open)"),
18
+ limit: z
19
+ .number()
20
+ .optional()
21
+ .default(30)
22
+ .describe("Maximum number of PRs to return (default: 30)"),
23
+ author: z
24
+ .string()
25
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
26
+ .optional()
27
+ .describe("Filter by author username"),
28
+ label: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("Filter by label"),
29
+ path: z
30
+ .string()
31
+ .max(INPUT_LIMITS.PATH_MAX)
32
+ .optional()
33
+ .describe("Repository path (default: cwd)"),
34
+ compact: z
35
+ .boolean()
36
+ .optional()
37
+ .default(true)
38
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
39
+ },
40
+ outputSchema: PrListResultSchema,
41
+ }, async ({ state, limit, author, label, path, compact }) => {
42
+ const cwd = path || process.cwd();
43
+ if (author)
44
+ assertNoFlagInjection(author, "author");
45
+ if (label)
46
+ assertNoFlagInjection(label, "label");
47
+ const args = ["pr", "list", "--json", PR_LIST_FIELDS, "--limit", String(limit)];
48
+ if (state)
49
+ args.push("--state", state);
50
+ if (author)
51
+ args.push("--author", author);
52
+ if (label)
53
+ args.push("--label", label);
54
+ const result = await ghCmd(args, cwd);
55
+ if (result.exitCode !== 0) {
56
+ throw new Error(`gh pr list failed: ${result.stderr}`);
57
+ }
58
+ const data = parsePrList(result.stdout);
59
+ return compactDualOutput(data, result.stdout, formatPrList, compactPrListMap, formatPrListCompact, compact === false);
60
+ });
61
+ }
62
+ //# sourceMappingURL=pr-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-list.js","sourceRoot":"","sources":["../../src/tools/pr-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPrViewTool(server: McpServer): void;
3
+ //# sourceMappingURL=pr-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-view.d.ts","sourceRoot":"","sources":["../../src/tools/pr-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QA6CnD"}
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
3
+ import { ghCmd } from "../lib/gh-runner.js";
4
+ import { parsePrView } from "../lib/parsers.js";
5
+ import { formatPrView, compactPrViewMap, formatPrViewCompact } from "../lib/formatters.js";
6
+ import { PrViewResultSchema } from "../schemas/index.js";
7
+ const PR_VIEW_FIELDS = "number,state,title,body,mergeable,reviewDecision,statusCheckRollup,url,headRefName,baseRefName,additions,deletions,changedFiles";
8
+ export function registerPrViewTool(server) {
9
+ server.registerTool("pr-view", {
10
+ title: "PR View",
11
+ description: "Views a pull request by number. Returns structured data with state, checks, review decision, and diff stats. Use instead of running `gh pr view` in the terminal.",
12
+ inputSchema: {
13
+ number: z.number().describe("Pull request number"),
14
+ path: z
15
+ .string()
16
+ .max(INPUT_LIMITS.PATH_MAX)
17
+ .optional()
18
+ .describe("Repository path (default: cwd)"),
19
+ compact: z
20
+ .boolean()
21
+ .optional()
22
+ .default(true)
23
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
24
+ },
25
+ outputSchema: PrViewResultSchema,
26
+ }, async ({ number, path, compact }) => {
27
+ const cwd = path || process.cwd();
28
+ const args = ["pr", "view", String(number), "--json", PR_VIEW_FIELDS];
29
+ const result = await ghCmd(args, cwd);
30
+ if (result.exitCode !== 0) {
31
+ throw new Error(`gh pr view failed: ${result.stderr}`);
32
+ }
33
+ const data = parsePrView(result.stdout);
34
+ return compactDualOutput(data, result.stdout, formatPrView, compactPrViewMap, formatPrViewCompact, compact === false);
35
+ });
36
+ }
37
+ //# sourceMappingURL=pr-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-view.js","sourceRoot":"","sources":["../../src/tools/pr-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,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,cAAc,GAClB,iIAAiI,CAAC;AAEpI,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,mKAAmK;QACrK,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAClD,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,kBAAkB;KACjC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QACtE,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,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRunListTool(server: McpServer): void;
3
+ //# sourceMappingURL=run-list.d.ts.map
@@ -0,0 +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,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA+DpD"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { ghCmd } from "../lib/gh-runner.js";
4
+ import { parseRunList } from "../lib/parsers.js";
5
+ import { formatRunList, compactRunListMap, formatRunListCompact } from "../lib/formatters.js";
6
+ import { RunListResultSchema } from "../schemas/index.js";
7
+ const RUN_LIST_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,url,createdAt";
8
+ export function registerRunListTool(server) {
9
+ server.registerTool("run-list", {
10
+ title: "Run List",
11
+ 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.",
12
+ inputSchema: {
13
+ limit: z
14
+ .number()
15
+ .optional()
16
+ .default(20)
17
+ .describe("Maximum number of runs to return (default: 20)"),
18
+ branch: z
19
+ .string()
20
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
21
+ .optional()
22
+ .describe("Filter by branch name"),
23
+ status: z
24
+ .enum(["queued", "in_progress", "completed", "failure", "success"])
25
+ .optional()
26
+ .describe("Filter by run status"),
27
+ path: z
28
+ .string()
29
+ .max(INPUT_LIMITS.PATH_MAX)
30
+ .optional()
31
+ .describe("Repository path (default: cwd)"),
32
+ compact: z
33
+ .boolean()
34
+ .optional()
35
+ .default(true)
36
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
37
+ },
38
+ outputSchema: RunListResultSchema,
39
+ }, async ({ limit, branch, status, path, compact }) => {
40
+ const cwd = path || process.cwd();
41
+ if (branch)
42
+ assertNoFlagInjection(branch, "branch");
43
+ const args = ["run", "list", "--json", RUN_LIST_FIELDS, "--limit", String(limit)];
44
+ if (branch)
45
+ args.push("--branch", branch);
46
+ if (status)
47
+ args.push("--status", status);
48
+ const result = await ghCmd(args, cwd);
49
+ if (result.exitCode !== 0) {
50
+ throw new Error(`gh run list failed: ${result.stderr}`);
51
+ }
52
+ const data = parseRunList(result.stdout);
53
+ return compactDualOutput(data, result.stdout, formatRunList, compactRunListMap, formatRunListCompact, compact === false);
54
+ });
55
+ }
56
+ //# sourceMappingURL=run-list.js.map
@@ -0,0 +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,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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRunViewTool(server: McpServer): void;
3
+ //# sourceMappingURL=run-view.d.ts.map
@@ -0,0 +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,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA6CpD"}
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
3
+ import { ghCmd } from "../lib/gh-runner.js";
4
+ import { parseRunView } from "../lib/parsers.js";
5
+ import { formatRunView, compactRunViewMap, formatRunViewCompact } from "../lib/formatters.js";
6
+ import { RunViewResultSchema } from "../schemas/index.js";
7
+ const RUN_VIEW_FIELDS = "databaseId,status,conclusion,name,workflowName,headBranch,jobs,url,createdAt";
8
+ export function registerRunViewTool(server) {
9
+ server.registerTool("run-view", {
10
+ title: "Run View",
11
+ 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.",
12
+ inputSchema: {
13
+ id: z.number().describe("Workflow run ID"),
14
+ path: z
15
+ .string()
16
+ .max(INPUT_LIMITS.PATH_MAX)
17
+ .optional()
18
+ .describe("Repository path (default: cwd)"),
19
+ compact: z
20
+ .boolean()
21
+ .optional()
22
+ .default(true)
23
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
24
+ },
25
+ outputSchema: RunViewResultSchema,
26
+ }, async ({ id, path, compact }) => {
27
+ const cwd = path || process.cwd();
28
+ const args = ["run", "view", String(id), "--json", RUN_VIEW_FIELDS];
29
+ const result = await ghCmd(args, cwd);
30
+ if (result.exitCode !== 0) {
31
+ throw new Error(`gh run view failed: ${result.stderr}`);
32
+ }
33
+ const data = parseRunView(result.stdout);
34
+ return compactDualOutput(data, result.stdout, formatRunView, compactRunViewMap, formatRunViewCompact, compact === false);
35
+ });
36
+ }
37
+ //# sourceMappingURL=run-view.js.map
@@ -0,0 +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,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"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@paretools/github",
3
+ "version": "0.7.0",
4
+ "mcpName": "io.github.Dave-London/github",
5
+ "description": "MCP server for GitHub operations (PRs, issues, actions) with structured, token-efficient output",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "mcp",
9
+ "mcp-server",
10
+ "model-context-protocol",
11
+ "structured-output",
12
+ "ai",
13
+ "ai-agent",
14
+ "claude",
15
+ "cursor",
16
+ "copilot",
17
+ "token-efficient",
18
+ "devtools",
19
+ "cli",
20
+ "github",
21
+ "gh",
22
+ "pull-request",
23
+ "issues",
24
+ "actions"
25
+ ],
26
+ "homepage": "https://github.com/Dave-London/Pare/tree/main/packages/server-github",
27
+ "engines": {
28
+ "node": ">=20"
29
+ },
30
+ "type": "module",
31
+ "bin": {
32
+ "pare-github": "./dist/index.js"
33
+ },
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "default": "./dist/index.js"
38
+ }
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/Dave-London/Pare.git",
46
+ "directory": "packages/server-github"
47
+ },
48
+ "files": [
49
+ "dist"
50
+ ],
51
+ "dependencies": {
52
+ "@modelcontextprotocol/sdk": "^1.26.0",
53
+ "zod": "^4.3.6",
54
+ "@paretools/shared": "0.6.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^25.2.3",
58
+ "typescript": "^5.7.0",
59
+ "vitest": "^4.0.18",
60
+ "@paretools/tsconfig": "0.0.0"
61
+ },
62
+ "scripts": {
63
+ "build": "tsc",
64
+ "test": "vitest run",
65
+ "test:watch": "vitest",
66
+ "lint": "eslint src/"
67
+ }
68
+ }