@noushad999/github-mcp-server 1.0.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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +659 -0
  3. package/dist/github-client.d.ts +5 -0
  4. package/dist/github-client.d.ts.map +1 -0
  5. package/dist/github-client.js +53 -0
  6. package/dist/github-client.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +73 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/middleware/tokenGuard.d.ts +2 -0
  12. package/dist/middleware/tokenGuard.d.ts.map +1 -0
  13. package/dist/middleware/tokenGuard.js +75 -0
  14. package/dist/middleware/tokenGuard.js.map +1 -0
  15. package/dist/tools/add_comment.d.ts +21 -0
  16. package/dist/tools/add_comment.d.ts.map +1 -0
  17. package/dist/tools/add_comment.js +24 -0
  18. package/dist/tools/add_comment.js.map +1 -0
  19. package/dist/tools/assign_issue.d.ts +24 -0
  20. package/dist/tools/assign_issue.d.ts.map +1 -0
  21. package/dist/tools/assign_issue.js +32 -0
  22. package/dist/tools/assign_issue.js.map +1 -0
  23. package/dist/tools/create_branch.d.ts +21 -0
  24. package/dist/tools/create_branch.d.ts.map +1 -0
  25. package/dist/tools/create_branch.js +28 -0
  26. package/dist/tools/create_branch.js.map +1 -0
  27. package/dist/tools/create_issue.d.ts +24 -0
  28. package/dist/tools/create_issue.d.ts.map +1 -0
  29. package/dist/tools/create_issue.js +29 -0
  30. package/dist/tools/create_issue.js.map +1 -0
  31. package/dist/tools/create_pr.d.ts +27 -0
  32. package/dist/tools/create_pr.d.ts.map +1 -0
  33. package/dist/tools/create_pr.js +31 -0
  34. package/dist/tools/create_pr.js.map +1 -0
  35. package/dist/tools/create_release.d.ts +33 -0
  36. package/dist/tools/create_release.d.ts.map +1 -0
  37. package/dist/tools/create_release.js +41 -0
  38. package/dist/tools/create_release.js.map +1 -0
  39. package/dist/tools/delete_branch.d.ts +21 -0
  40. package/dist/tools/delete_branch.d.ts.map +1 -0
  41. package/dist/tools/delete_branch.js +17 -0
  42. package/dist/tools/delete_branch.js.map +1 -0
  43. package/dist/tools/get_file.d.ts +21 -0
  44. package/dist/tools/get_file.d.ts.map +1 -0
  45. package/dist/tools/get_file.js +33 -0
  46. package/dist/tools/get_file.js.map +1 -0
  47. package/dist/tools/get_pr_diff.d.ts +18 -0
  48. package/dist/tools/get_pr_diff.d.ts.map +1 -0
  49. package/dist/tools/get_pr_diff.js +32 -0
  50. package/dist/tools/get_pr_diff.js.map +1 -0
  51. package/dist/tools/get_release.d.ts +18 -0
  52. package/dist/tools/get_release.d.ts.map +1 -0
  53. package/dist/tools/get_release.js +42 -0
  54. package/dist/tools/get_release.js.map +1 -0
  55. package/dist/tools/get_repo.d.ts +15 -0
  56. package/dist/tools/get_repo.d.ts.map +1 -0
  57. package/dist/tools/get_repo.js +35 -0
  58. package/dist/tools/get_repo.js.map +1 -0
  59. package/dist/tools/list_commits.d.ts +21 -0
  60. package/dist/tools/list_commits.d.ts.map +1 -0
  61. package/dist/tools/list_commits.js +31 -0
  62. package/dist/tools/list_commits.js.map +1 -0
  63. package/dist/tools/list_issues.d.ts +18 -0
  64. package/dist/tools/list_issues.d.ts.map +1 -0
  65. package/dist/tools/list_issues.js +34 -0
  66. package/dist/tools/list_issues.js.map +1 -0
  67. package/dist/tools/list_prs.d.ts +18 -0
  68. package/dist/tools/list_prs.d.ts.map +1 -0
  69. package/dist/tools/list_prs.js +31 -0
  70. package/dist/tools/list_prs.js.map +1 -0
  71. package/dist/tools/list_repos.d.ts +15 -0
  72. package/dist/tools/list_repos.d.ts.map +1 -0
  73. package/dist/tools/list_repos.js +33 -0
  74. package/dist/tools/list_repos.js.map +1 -0
  75. package/dist/tools/list_workflows.d.ts +15 -0
  76. package/dist/tools/list_workflows.d.ts.map +1 -0
  77. package/dist/tools/list_workflows.js +30 -0
  78. package/dist/tools/list_workflows.js.map +1 -0
  79. package/dist/tools/merge_pr.d.ts +24 -0
  80. package/dist/tools/merge_pr.d.ts.map +1 -0
  81. package/dist/tools/merge_pr.js +30 -0
  82. package/dist/tools/merge_pr.js.map +1 -0
  83. package/dist/tools/search_code.d.ts +15 -0
  84. package/dist/tools/search_code.d.ts.map +1 -0
  85. package/dist/tools/search_code.js +30 -0
  86. package/dist/tools/search_code.js.map +1 -0
  87. package/dist/tools/trigger_workflow.d.ts +28 -0
  88. package/dist/tools/trigger_workflow.d.ts.map +1 -0
  89. package/dist/tools/trigger_workflow.js +24 -0
  90. package/dist/tools/trigger_workflow.js.map +1 -0
  91. package/dist/utils/cache.d.ts +5 -0
  92. package/dist/utils/cache.d.ts.map +1 -0
  93. package/dist/utils/cache.js +36 -0
  94. package/dist/utils/cache.js.map +1 -0
  95. package/package.json +38 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_release.js","sourceRoot":"","sources":["../../src/tools/create_release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,kEAAkE,CAAC;AAE9F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;CACpH,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,WAAW,EAAE;QAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IACnB,WAAW,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ export declare const name = "delete_branch";
3
+ export declare const description = "Delete a branch from a repository (use after merging a PR)";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ branch: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ branch: string;
10
+ owner: string;
11
+ repo: string;
12
+ }, {
13
+ branch: string;
14
+ owner: string;
15
+ repo: string;
16
+ }>;
17
+ export declare function handler(args: z.infer<typeof schema>): Promise<{
18
+ deleted: boolean;
19
+ branch: string;
20
+ }>;
21
+ //# sourceMappingURL=delete_branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_branch.d.ts","sourceRoot":"","sources":["../../src/tools/delete_branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,WAAW,+DAA+D,CAAC;AAExF,eAAO,MAAM,MAAM;;;;;;;;;;;;EAIjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;;;GAOzD"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheDelete } from "../utils/cache.js";
4
+ export const name = "delete_branch";
5
+ export const description = "Delete a branch from a repository (use after merging a PR)";
6
+ export const schema = z.object({
7
+ owner: z.string().describe("Repository owner"),
8
+ repo: z.string().describe("Repository name"),
9
+ branch: z.string().describe("Branch name to delete"),
10
+ });
11
+ export async function handler(args) {
12
+ const client = getGitHubClient();
13
+ await client.delete(`/repos/${args.owner}/${args.repo}/git/refs/heads/${args.branch}`);
14
+ cacheDelete(`commits:${args.owner}/${args.repo}:${args.branch}`);
15
+ return { deleted: true, branch: args.branch };
16
+ }
17
+ //# sourceMappingURL=delete_branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_branch.js","sourceRoot":"","sources":["../../src/tools/delete_branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,4DAA4D,CAAC;AAExF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvF,WAAW,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ export declare const name = "get_file";
3
+ export declare const description = "Get file content by path and branch";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ path: z.ZodString;
8
+ branch: z.ZodDefault<z.ZodOptional<z.ZodString>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ path: string;
11
+ branch: string;
12
+ owner: string;
13
+ repo: string;
14
+ }, {
15
+ path: string;
16
+ owner: string;
17
+ repo: string;
18
+ branch?: string | undefined;
19
+ }>;
20
+ export declare function handler(args: z.infer<typeof schema>): Promise<{}>;
21
+ //# sourceMappingURL=get_file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_file.d.ts","sourceRoot":"","sources":["../../src/tools/get_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,WAAW,wCAAwC,CAAC;AAEjE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;EAKjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,eA0BzD"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ export const name = "get_file";
5
+ export const description = "Get file content by path and branch";
6
+ export const schema = z.object({
7
+ owner: z.string().describe("Repository owner"),
8
+ repo: z.string().describe("Repository name"),
9
+ path: z.string().describe("File path in the repository"),
10
+ branch: z.string().optional().default("main").describe("Branch name"),
11
+ });
12
+ export async function handler(args) {
13
+ const cacheKey = `file:${args.owner}/${args.repo}:${args.path}:${args.branch}`;
14
+ const cached = cacheGet(cacheKey);
15
+ if (cached)
16
+ return cached;
17
+ const client = getGitHubClient();
18
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/contents/${args.path}`, { params: { ref: args.branch } });
19
+ const file = res.data;
20
+ const content = Buffer.from(file.content, "base64").toString("utf-8");
21
+ const lines = content.split("\n");
22
+ const truncated = lines.length > 100;
23
+ // Content is already manually truncated — skip tokenGuard to avoid double-cutting
24
+ const result = {
25
+ path: file.path,
26
+ size: file.size,
27
+ truncated,
28
+ content: truncated ? lines.slice(0, 100).join("\n") + "\n... [truncated]" : content,
29
+ };
30
+ cacheSet(cacheKey, result);
31
+ return result;
32
+ }
33
+ //# sourceMappingURL=get_file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_file.js","sourceRoot":"","sources":["../../src/tools/get_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,EAAE,EACzD,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CACjC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAErC,kFAAkF;IAClF,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS;QACT,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO;KACpF,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export declare const name = "get_pr_diff";
3
+ export declare const description = "Get the unified diff of a pull request";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ pull_number: z.ZodNumber;
8
+ }, "strip", z.ZodTypeAny, {
9
+ owner: string;
10
+ repo: string;
11
+ pull_number: number;
12
+ }, {
13
+ owner: string;
14
+ repo: string;
15
+ pull_number: number;
16
+ }>;
17
+ export declare function handler(args: z.infer<typeof schema>): Promise<{}>;
18
+ //# sourceMappingURL=get_pr_diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_pr_diff.d.ts","sourceRoot":"","sources":["../../src/tools/get_pr_diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAClC,eAAO,MAAM,WAAW,2CAA2C,CAAC;AAEpE,eAAO,MAAM,MAAM;;;;;;;;;;;;EAIjB,CAAC;AAIH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,eAyBzD"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ export const name = "get_pr_diff";
5
+ export const description = "Get the unified diff of a pull request";
6
+ export const schema = z.object({
7
+ owner: z.string().describe("Repository owner"),
8
+ repo: z.string().describe("Repository name"),
9
+ pull_number: z.number().int().describe("Pull request number"),
10
+ });
11
+ const MAX_DIFF_LINES = 200;
12
+ export async function handler(args) {
13
+ const cacheKey = `pr_diff:${args.owner}/${args.repo}:${args.pull_number}`;
14
+ const cached = cacheGet(cacheKey);
15
+ if (cached)
16
+ return cached;
17
+ const client = getGitHubClient();
18
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/pulls/${args.pull_number}`, { headers: { Accept: "application/vnd.github.diff" }, responseType: "text" });
19
+ const diff = res.data;
20
+ const lines = diff.split("\n");
21
+ const truncated = lines.length > MAX_DIFF_LINES;
22
+ const result = {
23
+ pull_number: args.pull_number,
24
+ truncated,
25
+ diff: truncated
26
+ ? lines.slice(0, MAX_DIFF_LINES).join("\n") + "\n... [truncated]"
27
+ : diff,
28
+ };
29
+ cacheSet(cacheKey, result);
30
+ return result;
31
+ }
32
+ //# sourceMappingURL=get_pr_diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_pr_diff.js","sourceRoot":"","sources":["../../src/tools/get_pr_diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAEpE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE,EAC7D,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAC7E,CAAC;IAEF,MAAM,IAAI,GAAW,GAAG,CAAC,IAAc,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;IAEhD,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS;QACT,IAAI,EAAE,SAAS;YACb,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,mBAAmB;YACjE,CAAC,CAAC,IAAI;KACT,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export declare const name = "get_release";
3
+ export declare const description = "Get the latest release or a specific release by tag";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ tag: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ owner: string;
10
+ repo: string;
11
+ tag?: string | undefined;
12
+ }, {
13
+ owner: string;
14
+ repo: string;
15
+ tag?: string | undefined;
16
+ }>;
17
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
18
+ //# sourceMappingURL=get_release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_release.d.ts","sourceRoot":"","sources":["../../src/tools/get_release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAClC,eAAO,MAAM,WAAW,wDAAwD,CAAC;AAEjF,eAAO,MAAM,MAAM;;;;;;;;;;;;EAIjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAgCzD"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "get_release";
6
+ export const description = "Get the latest release or a specific release by tag";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner"),
9
+ repo: z.string().describe("Repository name"),
10
+ tag: z.string().optional().describe("Release tag (omit to get the latest release)"),
11
+ });
12
+ export async function handler(args) {
13
+ const cacheKey = `release:${args.owner}/${args.repo}:${args.tag ?? "latest"}`;
14
+ const cached = cacheGet(cacheKey);
15
+ if (cached)
16
+ return cached;
17
+ const client = getGitHubClient();
18
+ const endpoint = args.tag
19
+ ? `/repos/${args.owner}/${args.repo}/releases/tags/${args.tag}`
20
+ : `/repos/${args.owner}/${args.repo}/releases/latest`;
21
+ const res = await client.get(endpoint);
22
+ const r = res.data;
23
+ const result = tokenGuard({
24
+ id: r.id,
25
+ tag_name: r.tag_name,
26
+ name: r.name,
27
+ draft: r.draft,
28
+ prerelease: r.prerelease,
29
+ body: typeof r.body === "string" ? r.body.slice(0, 500) : undefined,
30
+ published_at: r.published_at,
31
+ html_url: r.html_url,
32
+ assets: (r.assets ?? []).map((a) => ({
33
+ name: a.name,
34
+ size: a.size,
35
+ download_count: a.download_count,
36
+ browser_download_url: a.browser_download_url,
37
+ })),
38
+ });
39
+ cacheSet(cacheKey, result);
40
+ return result;
41
+ }
42
+ //# sourceMappingURL=get_release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_release.js","sourceRoot":"","sources":["../../src/tools/get_release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,qDAAqD,CAAC;AAEjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG;QACvB,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,GAAG,EAAE;QAC/D,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,kBAAkB,CAAC;IAExD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IAEnB,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;SAC7C,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export declare const name = "get_repo";
3
+ export declare const description = "Get repository details with recent activity summary";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ owner: string;
9
+ repo: string;
10
+ }, {
11
+ owner: string;
12
+ repo: string;
13
+ }>;
14
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
15
+ //# sourceMappingURL=get_repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_repo.d.ts","sourceRoot":"","sources":["../../src/tools/get_repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,WAAW,wDAAwD,CAAC;AAEjF,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAyBzD"}
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "get_repo";
6
+ export const description = "Get repository details with recent activity summary";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner username"),
9
+ repo: z.string().describe("Repository name"),
10
+ });
11
+ export async function handler(args) {
12
+ const cacheKey = `repo:${args.owner}/${args.repo}`;
13
+ const cached = cacheGet(cacheKey);
14
+ if (cached)
15
+ return cached;
16
+ const client = getGitHubClient();
17
+ const res = await client.get(`/repos/${args.owner}/${args.repo}`);
18
+ const r = res.data;
19
+ const result = tokenGuard({
20
+ name: r.name,
21
+ full_name: r.full_name,
22
+ description: r.description,
23
+ stars: r.stargazers_count,
24
+ forks: r.forks_count,
25
+ language: r.language,
26
+ open_issues: r.open_issues_count,
27
+ license: r.license?.spdx_id,
28
+ updated_at: r.updated_at,
29
+ pushed_at: r.pushed_at,
30
+ html_url: r.html_url,
31
+ });
32
+ cacheSet(cacheKey, result);
33
+ return result;
34
+ }
35
+ //# sourceMappingURL=get_repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_repo.js","sourceRoot":"","sources":["../../src/tools/get_repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,qDAAqD,CAAC;AAEjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IAEnB,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,KAAK,EAAE,CAAC,CAAC,gBAAgB;QACzB,KAAK,EAAE,CAAC,CAAC,WAAW;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,CAAC,CAAC,iBAAiB;QAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO;QAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ export declare const name = "list_commits";
3
+ export declare const description = "List recent commits with message and author";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ branch: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ per_page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ branch: string;
11
+ owner: string;
12
+ repo: string;
13
+ per_page: number;
14
+ }, {
15
+ owner: string;
16
+ repo: string;
17
+ branch?: string | undefined;
18
+ per_page?: number | undefined;
19
+ }>;
20
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
21
+ //# sourceMappingURL=list_commits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_commits.d.ts","sourceRoot":"","sources":["../../src/tools/list_commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,iBAAiB,CAAC;AACnC,eAAO,MAAM,WAAW,gDAAgD,CAAC;AAEzE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;EAKjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAsBzD"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "list_commits";
6
+ export const description = "List recent commits with message and author";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner"),
9
+ repo: z.string().describe("Repository name"),
10
+ branch: z.string().optional().default("main").describe("Branch name"),
11
+ per_page: z.number().int().min(1).max(10).optional().default(10).describe("Number of commits to return (1–10)"),
12
+ });
13
+ export async function handler(args) {
14
+ const cacheKey = `commits:${args.owner}/${args.repo}:${args.branch}`;
15
+ const cached = cacheGet(cacheKey);
16
+ if (cached)
17
+ return cached;
18
+ const client = getGitHubClient();
19
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/commits`, { params: { sha: args.branch, per_page: args.per_page } });
20
+ const commits = res.data.map((c) => ({
21
+ sha: c.sha.substring(0, 7),
22
+ message: c.commit.message,
23
+ author: c.commit.author?.name || c.author?.login || "Unknown",
24
+ date: c.commit.author?.date,
25
+ html_url: c.html_url,
26
+ }));
27
+ const result = tokenGuard(commits);
28
+ cacheSet(cacheKey, result);
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=list_commits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_commits.js","sourceRoot":"","sources":["../../src/tools/list_commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,6CAA6C,CAAC;AAEzE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAChH,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,UAAU,EAC3C,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAC1D,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACxC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS;QAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI;QAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export declare const name = "list_issues";
3
+ export declare const description = "List open issues with labels and assignees";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ state: z.ZodDefault<z.ZodOptional<z.ZodEnum<["open", "closed", "all"]>>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ state: "open" | "closed" | "all";
10
+ owner: string;
11
+ repo: string;
12
+ }, {
13
+ owner: string;
14
+ repo: string;
15
+ state?: "open" | "closed" | "all" | undefined;
16
+ }>;
17
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
18
+ //# sourceMappingURL=list_issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_issues.d.ts","sourceRoot":"","sources":["../../src/tools/list_issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAClC,eAAO,MAAM,WAAW,+CAA+C,CAAC;AAExE,eAAO,MAAM,MAAM;;;;;;;;;;;;EAIjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAuBzD"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "list_issues";
6
+ export const description = "List open issues with labels and assignees";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner"),
9
+ repo: z.string().describe("Repository name"),
10
+ state: z.enum(["open", "closed", "all"]).optional().default("open"),
11
+ });
12
+ export async function handler(args) {
13
+ const cacheKey = `issues:${args.owner}/${args.repo}:${args.state}`;
14
+ const cached = cacheGet(cacheKey);
15
+ if (cached)
16
+ return cached;
17
+ const client = getGitHubClient();
18
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/issues`, {
19
+ params: { state: args.state, per_page: 10 },
20
+ });
21
+ const issues = res.data.map((i) => ({
22
+ number: i.number,
23
+ title: i.title,
24
+ state: i.state,
25
+ labels: (i.labels || []).map((l) => (typeof l === "string" ? l : l?.name)).filter(Boolean),
26
+ assignee: i.assignee?.login,
27
+ created_at: i.created_at,
28
+ html_url: i.html_url,
29
+ }));
30
+ const result = tokenGuard(issues);
31
+ cacheSet(cacheKey, result);
32
+ return result;
33
+ }
34
+ //# sourceMappingURL=list_issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_issues.js","sourceRoot":"","sources":["../../src/tools/list_issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,4CAA4C,CAAC;AAExE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,EAAE;QACvE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;KAC5C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/F,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK;QAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export declare const name = "list_prs";
3
+ export declare const description = "List open pull requests with status and reviewers";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ state: z.ZodDefault<z.ZodOptional<z.ZodEnum<["open", "closed", "all"]>>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ state: "open" | "closed" | "all";
10
+ owner: string;
11
+ repo: string;
12
+ }, {
13
+ owner: string;
14
+ repo: string;
15
+ state?: "open" | "closed" | "all" | undefined;
16
+ }>;
17
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
18
+ //# sourceMappingURL=list_prs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_prs.d.ts","sourceRoot":"","sources":["../../src/tools/list_prs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,WAAW,sDAAsD,CAAC;AAE/E,eAAO,MAAM,MAAM;;;;;;;;;;;;EAIjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAuBzD"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "list_prs";
6
+ export const description = "List open pull requests with status and reviewers";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner"),
9
+ repo: z.string().describe("Repository name"),
10
+ state: z.enum(["open", "closed", "all"]).optional().default("open"),
11
+ });
12
+ export async function handler(args) {
13
+ const cacheKey = `prs:${args.owner}/${args.repo}:${args.state}`;
14
+ const cached = cacheGet(cacheKey);
15
+ if (cached)
16
+ return cached;
17
+ const client = getGitHubClient();
18
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/pulls`, { params: { state: args.state, per_page: 10 } });
19
+ const prs = res.data.map((pr) => ({
20
+ number: pr.number,
21
+ title: pr.title,
22
+ state: pr.state,
23
+ user: pr.user?.login,
24
+ created_at: pr.created_at,
25
+ html_url: pr.html_url,
26
+ }));
27
+ const result = tokenGuard(prs);
28
+ cacheSet(cacheKey, result);
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=list_prs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_prs.js","sourceRoot":"","sources":["../../src/tools/list_prs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,mDAAmD,CAAC;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,QAAQ,EACzC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAChD,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK;QACpB,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,QAAQ,EAAE,EAAE,CAAC,QAAQ;KACtB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export declare const name = "list_repos";
3
+ export declare const description = "List GitHub repositories with stars and primary language";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["owner", "member"]>>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ owner: string;
9
+ type: "owner" | "member";
10
+ }, {
11
+ owner: string;
12
+ type?: "owner" | "member" | undefined;
13
+ }>;
14
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
15
+ //# sourceMappingURL=list_repos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_repos.d.ts","sourceRoot":"","sources":["../../src/tools/list_repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,WAAW,6DAA6D,CAAC;AAEtF,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAuBzD"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "list_repos";
6
+ export const description = "List GitHub repositories with stars and primary language";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("GitHub username or organization name"),
9
+ type: z.enum(["owner", "member"]).optional().default("owner").describe("Repo visibility filter"),
10
+ });
11
+ export async function handler(args) {
12
+ const cacheKey = `repos:${args.owner}:${args.type}`;
13
+ const cached = cacheGet(cacheKey);
14
+ if (cached)
15
+ return cached;
16
+ const client = getGitHubClient();
17
+ const res = await client.get(`/users/${args.owner}/repos`, {
18
+ params: { type: args.type, sort: "updated", per_page: 10 },
19
+ });
20
+ const repos = res.data.map((r) => ({
21
+ name: r.name,
22
+ full_name: r.full_name,
23
+ stars: r.stargazers_count,
24
+ language: r.language,
25
+ visibility: r.visibility,
26
+ updated_at: r.updated_at,
27
+ html_url: r.html_url,
28
+ }));
29
+ const result = tokenGuard(repos);
30
+ cacheSet(cacheKey, result);
31
+ return result;
32
+ }
33
+ //# sourceMappingURL=list_repos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_repos.js","sourceRoot":"","sources":["../../src/tools/list_repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,0DAA0D,CAAC;AAEtF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACjG,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,QAAQ,EAAE;QACzD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,KAAK,EAAE,CAAC,CAAC,gBAAgB;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export declare const name = "list_workflows";
3
+ export declare const description = "List GitHub Actions workflows in a repository";
4
+ export declare const schema: z.ZodObject<{
5
+ owner: z.ZodString;
6
+ repo: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ owner: string;
9
+ repo: string;
10
+ }, {
11
+ owner: string;
12
+ repo: string;
13
+ }>;
14
+ export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
15
+ //# sourceMappingURL=list_workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_workflows.d.ts","sourceRoot":"","sources":["../../src/tools/list_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC,eAAO,MAAM,WAAW,kDAAkD,CAAC;AAE3E,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAoBzD"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { getGitHubClient } from "../github-client.js";
3
+ import { cacheGet, cacheSet } from "../utils/cache.js";
4
+ import { tokenGuard } from "../middleware/tokenGuard.js";
5
+ export const name = "list_workflows";
6
+ export const description = "List GitHub Actions workflows in a repository";
7
+ export const schema = z.object({
8
+ owner: z.string().describe("Repository owner"),
9
+ repo: z.string().describe("Repository name"),
10
+ });
11
+ export async function handler(args) {
12
+ const cacheKey = `workflows:${args.owner}/${args.repo}`;
13
+ const cached = cacheGet(cacheKey);
14
+ if (cached)
15
+ return cached;
16
+ const client = getGitHubClient();
17
+ const res = await client.get(`/repos/${args.owner}/${args.repo}/actions/workflows`);
18
+ const workflows = res.data.workflows.map((w) => ({
19
+ id: w.id,
20
+ name: w.name,
21
+ state: w.state,
22
+ path: w.path,
23
+ html_url: w.html_url,
24
+ updated_at: w.updated_at,
25
+ }));
26
+ const result = tokenGuard(workflows);
27
+ cacheSet(cacheKey, result);
28
+ return result;
29
+ }
30
+ //# sourceMappingURL=list_workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_workflows.js","sourceRoot":"","sources":["../../src/tools/list_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAE3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACpD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}