@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.
- package/LICENSE +21 -0
- package/README.md +659 -0
- package/dist/github-client.d.ts +5 -0
- package/dist/github-client.d.ts.map +1 -0
- package/dist/github-client.js +53 -0
- package/dist/github-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/tokenGuard.d.ts +2 -0
- package/dist/middleware/tokenGuard.d.ts.map +1 -0
- package/dist/middleware/tokenGuard.js +75 -0
- package/dist/middleware/tokenGuard.js.map +1 -0
- package/dist/tools/add_comment.d.ts +21 -0
- package/dist/tools/add_comment.d.ts.map +1 -0
- package/dist/tools/add_comment.js +24 -0
- package/dist/tools/add_comment.js.map +1 -0
- package/dist/tools/assign_issue.d.ts +24 -0
- package/dist/tools/assign_issue.d.ts.map +1 -0
- package/dist/tools/assign_issue.js +32 -0
- package/dist/tools/assign_issue.js.map +1 -0
- package/dist/tools/create_branch.d.ts +21 -0
- package/dist/tools/create_branch.d.ts.map +1 -0
- package/dist/tools/create_branch.js +28 -0
- package/dist/tools/create_branch.js.map +1 -0
- package/dist/tools/create_issue.d.ts +24 -0
- package/dist/tools/create_issue.d.ts.map +1 -0
- package/dist/tools/create_issue.js +29 -0
- package/dist/tools/create_issue.js.map +1 -0
- package/dist/tools/create_pr.d.ts +27 -0
- package/dist/tools/create_pr.d.ts.map +1 -0
- package/dist/tools/create_pr.js +31 -0
- package/dist/tools/create_pr.js.map +1 -0
- package/dist/tools/create_release.d.ts +33 -0
- package/dist/tools/create_release.d.ts.map +1 -0
- package/dist/tools/create_release.js +41 -0
- package/dist/tools/create_release.js.map +1 -0
- package/dist/tools/delete_branch.d.ts +21 -0
- package/dist/tools/delete_branch.d.ts.map +1 -0
- package/dist/tools/delete_branch.js +17 -0
- package/dist/tools/delete_branch.js.map +1 -0
- package/dist/tools/get_file.d.ts +21 -0
- package/dist/tools/get_file.d.ts.map +1 -0
- package/dist/tools/get_file.js +33 -0
- package/dist/tools/get_file.js.map +1 -0
- package/dist/tools/get_pr_diff.d.ts +18 -0
- package/dist/tools/get_pr_diff.d.ts.map +1 -0
- package/dist/tools/get_pr_diff.js +32 -0
- package/dist/tools/get_pr_diff.js.map +1 -0
- package/dist/tools/get_release.d.ts +18 -0
- package/dist/tools/get_release.d.ts.map +1 -0
- package/dist/tools/get_release.js +42 -0
- package/dist/tools/get_release.js.map +1 -0
- package/dist/tools/get_repo.d.ts +15 -0
- package/dist/tools/get_repo.d.ts.map +1 -0
- package/dist/tools/get_repo.js +35 -0
- package/dist/tools/get_repo.js.map +1 -0
- package/dist/tools/list_commits.d.ts +21 -0
- package/dist/tools/list_commits.d.ts.map +1 -0
- package/dist/tools/list_commits.js +31 -0
- package/dist/tools/list_commits.js.map +1 -0
- package/dist/tools/list_issues.d.ts +18 -0
- package/dist/tools/list_issues.d.ts.map +1 -0
- package/dist/tools/list_issues.js +34 -0
- package/dist/tools/list_issues.js.map +1 -0
- package/dist/tools/list_prs.d.ts +18 -0
- package/dist/tools/list_prs.d.ts.map +1 -0
- package/dist/tools/list_prs.js +31 -0
- package/dist/tools/list_prs.js.map +1 -0
- package/dist/tools/list_repos.d.ts +15 -0
- package/dist/tools/list_repos.d.ts.map +1 -0
- package/dist/tools/list_repos.js +33 -0
- package/dist/tools/list_repos.js.map +1 -0
- package/dist/tools/list_workflows.d.ts +15 -0
- package/dist/tools/list_workflows.d.ts.map +1 -0
- package/dist/tools/list_workflows.js +30 -0
- package/dist/tools/list_workflows.js.map +1 -0
- package/dist/tools/merge_pr.d.ts +24 -0
- package/dist/tools/merge_pr.d.ts.map +1 -0
- package/dist/tools/merge_pr.js +30 -0
- package/dist/tools/merge_pr.js.map +1 -0
- package/dist/tools/search_code.d.ts +15 -0
- package/dist/tools/search_code.d.ts.map +1 -0
- package/dist/tools/search_code.js +30 -0
- package/dist/tools/search_code.js.map +1 -0
- package/dist/tools/trigger_workflow.d.ts +28 -0
- package/dist/tools/trigger_workflow.d.ts.map +1 -0
- package/dist/tools/trigger_workflow.js +24 -0
- package/dist/tools/trigger_workflow.js.map +1 -0
- package/dist/utils/cache.d.ts +5 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +36 -0
- package/dist/utils/cache.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { cacheGet, cacheSet } from "./utils/cache.js";
|
|
3
|
+
let client = null;
|
|
4
|
+
export function getGitHubClient() {
|
|
5
|
+
if (client)
|
|
6
|
+
return client;
|
|
7
|
+
const token = process.env.GITHUB_TOKEN;
|
|
8
|
+
if (!token) {
|
|
9
|
+
throw new Error("GITHUB_TOKEN not set. Add it to your .env file or environment.");
|
|
10
|
+
}
|
|
11
|
+
client = axios.create({
|
|
12
|
+
baseURL: "https://api.github.com",
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${token}`,
|
|
15
|
+
Accept: "application/vnd.github+json",
|
|
16
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
17
|
+
},
|
|
18
|
+
timeout: 15000,
|
|
19
|
+
});
|
|
20
|
+
client.interceptors.response.use((res) => res, (err) => {
|
|
21
|
+
const status = err.response?.status;
|
|
22
|
+
const apiMsg = typeof err.response?.data === "object"
|
|
23
|
+
? err.response?.data?.message
|
|
24
|
+
: undefined;
|
|
25
|
+
if (status === 401)
|
|
26
|
+
throw new Error("GitHub API (401): Invalid token");
|
|
27
|
+
if (status === 403)
|
|
28
|
+
throw new Error("GitHub API (403): Rate limited or insufficient permissions");
|
|
29
|
+
if (status === 404)
|
|
30
|
+
throw new Error("GitHub API (404): Resource not found");
|
|
31
|
+
if (status === 422)
|
|
32
|
+
throw new Error(`GitHub API (422): Unprocessable — ${apiMsg || "check your inputs"}`);
|
|
33
|
+
if (status === 409)
|
|
34
|
+
throw new Error(`GitHub API (409): Conflict — ${apiMsg || "resource already exists"}`);
|
|
35
|
+
throw new Error(`GitHub API (${status ?? "unknown"}): ${apiMsg || err.message}`);
|
|
36
|
+
});
|
|
37
|
+
return client;
|
|
38
|
+
}
|
|
39
|
+
/** Returns the repo's default branch, cached for 120 s. */
|
|
40
|
+
export async function getDefaultBranch(owner, repo) {
|
|
41
|
+
const cacheKey = `default_branch:${owner}/${repo}`;
|
|
42
|
+
const cached = cacheGet(cacheKey);
|
|
43
|
+
if (typeof cached === "string")
|
|
44
|
+
return cached;
|
|
45
|
+
const gh = getGitHubClient();
|
|
46
|
+
const res = await gh.get(`/repos/${owner}/${repo}`);
|
|
47
|
+
const branch = res.data.default_branch;
|
|
48
|
+
if (!branch)
|
|
49
|
+
throw new Error(`Could not determine default branch for ${owner}/${repo}`);
|
|
50
|
+
cacheSet(cacheKey, branch);
|
|
51
|
+
return branch;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=github-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-client.js","sourceRoot":"","sources":["../src/github-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEtD,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC,MAAM,UAAU,eAAe;IAC7B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,MAAM,EAAE,6BAA6B;YACrC,sBAAsB,EAAE,YAAY;SACrC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EACZ,CAAC,GAAG,EAAE,EAAE;QACN,MAAM,MAAM,GAAuB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxD,MAAM,MAAM,GACV,OAAO,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ;YACpC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;YAC7B,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvE,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClG,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5E,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,IAAI,mBAAmB,EAAE,CAAC,CAAC;QAC1G,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAC3G,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,IAAI,SAAS,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,IAAY;IAChE,MAAM,QAAQ,GAAG,kBAAkB,KAAK,IAAI,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAuB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACxF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
+
import * as listRepos from "./tools/list_repos.js";
|
|
6
|
+
import * as getRepo from "./tools/get_repo.js";
|
|
7
|
+
import * as listIssues from "./tools/list_issues.js";
|
|
8
|
+
import * as createIssue from "./tools/create_issue.js";
|
|
9
|
+
import * as listPrs from "./tools/list_prs.js";
|
|
10
|
+
import * as createPr from "./tools/create_pr.js";
|
|
11
|
+
import * as getFile from "./tools/get_file.js";
|
|
12
|
+
import * as searchCode from "./tools/search_code.js";
|
|
13
|
+
import * as listCommits from "./tools/list_commits.js";
|
|
14
|
+
import * as createBranch from "./tools/create_branch.js";
|
|
15
|
+
import * as addComment from "./tools/add_comment.js";
|
|
16
|
+
import * as mergePr from "./tools/merge_pr.js";
|
|
17
|
+
import * as deleteBranch from "./tools/delete_branch.js";
|
|
18
|
+
import * as getPrDiff from "./tools/get_pr_diff.js";
|
|
19
|
+
import * as listWorkflows from "./tools/list_workflows.js";
|
|
20
|
+
import * as triggerWorkflow from "./tools/trigger_workflow.js";
|
|
21
|
+
import * as getRelease from "./tools/get_release.js";
|
|
22
|
+
import * as createRelease from "./tools/create_release.js";
|
|
23
|
+
import * as assignIssue from "./tools/assign_issue.js";
|
|
24
|
+
const server = new McpServer({
|
|
25
|
+
name: "github-mcp-server",
|
|
26
|
+
version: "1.0.0",
|
|
27
|
+
});
|
|
28
|
+
const tools = [
|
|
29
|
+
listRepos,
|
|
30
|
+
getRepo,
|
|
31
|
+
listIssues,
|
|
32
|
+
createIssue,
|
|
33
|
+
listPrs,
|
|
34
|
+
createPr,
|
|
35
|
+
getFile,
|
|
36
|
+
searchCode,
|
|
37
|
+
listCommits,
|
|
38
|
+
createBranch,
|
|
39
|
+
addComment,
|
|
40
|
+
mergePr,
|
|
41
|
+
deleteBranch,
|
|
42
|
+
getPrDiff,
|
|
43
|
+
listWorkflows,
|
|
44
|
+
triggerWorkflow,
|
|
45
|
+
getRelease,
|
|
46
|
+
createRelease,
|
|
47
|
+
assignIssue,
|
|
48
|
+
];
|
|
49
|
+
for (const tool of tools) {
|
|
50
|
+
server.tool(tool.name, tool.description, tool.schema.shape, async (args) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await tool.handler(args);
|
|
53
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: JSON.stringify({ error: message }) }],
|
|
59
|
+
isError: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function main() {
|
|
65
|
+
const transport = new StdioServerTransport();
|
|
66
|
+
await server.connect(transport);
|
|
67
|
+
console.error("GitHub MCP Server running on stdio");
|
|
68
|
+
}
|
|
69
|
+
main().catch((err) => {
|
|
70
|
+
console.error("Fatal error:", err);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAUvD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAiB;IAC1B,SAAS;IACT,OAAO;IACP,UAAU;IACV,WAAW;IACX,OAAO;IACP,QAAQ;IACR,OAAO;IACP,UAAU;IACV,WAAW;IACX,YAAY;IACZ,UAAU;IACV,OAAO;IACP,YAAY;IACZ,SAAS;IACT,aAAa;IACb,eAAe;IACf,UAAU;IACV,aAAa;IACb,WAAW;CACI,CAAC;AAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC9E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACtD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenGuard.d.ts","sourceRoot":"","sources":["../../src/middleware/tokenGuard.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAmBjD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Character limit for serialized JSON responses (~1000 tokens at ~4 chars/token)
|
|
2
|
+
const CHAR_LIMIT = 4000;
|
|
3
|
+
export function tokenGuard(data) {
|
|
4
|
+
if (typeof data === "string" && data.length > CHAR_LIMIT) {
|
|
5
|
+
return data.substring(0, CHAR_LIMIT) + "\n... [truncated]";
|
|
6
|
+
}
|
|
7
|
+
if (Array.isArray(data) && data.length > 10) {
|
|
8
|
+
return data.slice(0, 10);
|
|
9
|
+
}
|
|
10
|
+
if (data && typeof data === "object") {
|
|
11
|
+
const stripped = stripNulls(data);
|
|
12
|
+
const json = JSON.stringify(stripped);
|
|
13
|
+
if (json.length > CHAR_LIMIT) {
|
|
14
|
+
return compactify(stripped);
|
|
15
|
+
}
|
|
16
|
+
return stripped;
|
|
17
|
+
}
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
function stripNulls(obj) {
|
|
21
|
+
const result = {};
|
|
22
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
23
|
+
if (v === null || v === undefined || v === "")
|
|
24
|
+
continue;
|
|
25
|
+
if (Array.isArray(v)) {
|
|
26
|
+
const arr = v.filter((x) => x !== null && x !== undefined);
|
|
27
|
+
if (arr.length > 0)
|
|
28
|
+
result[k] = arr.map((item) => typeof item === "object" && item !== null ? stripNulls(item) : item);
|
|
29
|
+
}
|
|
30
|
+
else if (typeof v === "object") {
|
|
31
|
+
const nested = stripNulls(v);
|
|
32
|
+
if (Object.keys(nested).length > 0)
|
|
33
|
+
result[k] = nested;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
result[k] = v;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
function compactify(obj) {
|
|
42
|
+
const compact = {};
|
|
43
|
+
const priorityKeys = [
|
|
44
|
+
"name",
|
|
45
|
+
"title",
|
|
46
|
+
"id",
|
|
47
|
+
"number",
|
|
48
|
+
"state",
|
|
49
|
+
"status",
|
|
50
|
+
"full_name",
|
|
51
|
+
"html_url",
|
|
52
|
+
"path",
|
|
53
|
+
"description",
|
|
54
|
+
"stars",
|
|
55
|
+
"language",
|
|
56
|
+
"sha",
|
|
57
|
+
"message",
|
|
58
|
+
"author",
|
|
59
|
+
"merged",
|
|
60
|
+
"branch",
|
|
61
|
+
"ref",
|
|
62
|
+
"created_at",
|
|
63
|
+
"updated_at",
|
|
64
|
+
];
|
|
65
|
+
for (const key of priorityKeys) {
|
|
66
|
+
if (obj[key] !== undefined)
|
|
67
|
+
compact[key] = obj[key];
|
|
68
|
+
}
|
|
69
|
+
if (Object.keys(compact).length === 0) {
|
|
70
|
+
const entries = Object.entries(obj).slice(0, 6);
|
|
71
|
+
return Object.fromEntries(entries);
|
|
72
|
+
}
|
|
73
|
+
return compact;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=tokenGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenGuard.js","sourceRoot":"","sources":["../../src/middleware/tokenGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "add_comment";
|
|
3
|
+
export declare const description = "Add a comment to an issue or pull request";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
issue_number: z.ZodNumber;
|
|
8
|
+
body: z.ZodString;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
owner: string;
|
|
11
|
+
repo: string;
|
|
12
|
+
body: string;
|
|
13
|
+
issue_number: number;
|
|
14
|
+
}, {
|
|
15
|
+
owner: string;
|
|
16
|
+
repo: string;
|
|
17
|
+
body: string;
|
|
18
|
+
issue_number: number;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
21
|
+
//# sourceMappingURL=add_comment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_comment.d.ts","sourceRoot":"","sources":["../../src/tools/add_comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAClC,eAAO,MAAM,WAAW,8CAA8C,CAAC;AAEvE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;EAKjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAgBzD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient } from "../github-client.js";
|
|
3
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
4
|
+
export const name = "add_comment";
|
|
5
|
+
export const description = "Add a comment to an issue or pull request";
|
|
6
|
+
export const schema = z.object({
|
|
7
|
+
owner: z.string().describe("Repository owner"),
|
|
8
|
+
repo: z.string().describe("Repository name"),
|
|
9
|
+
issue_number: z.number().describe("Issue or PR number"),
|
|
10
|
+
body: z.string().describe("Comment text"),
|
|
11
|
+
});
|
|
12
|
+
export async function handler(args) {
|
|
13
|
+
const client = getGitHubClient();
|
|
14
|
+
const res = await client.post(`/repos/${args.owner}/${args.repo}/issues/${args.issue_number}/comments`, { body: args.body });
|
|
15
|
+
const comment = res.data;
|
|
16
|
+
const result = tokenGuard({
|
|
17
|
+
id: comment.id,
|
|
18
|
+
user: comment.user?.login,
|
|
19
|
+
created_at: comment.created_at,
|
|
20
|
+
html_url: comment.html_url,
|
|
21
|
+
});
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=add_comment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_comment.js","sourceRoot":"","sources":["../../src/tools/add_comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAEvE,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,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,YAAY,WAAW,EACxE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACpB,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK;QACzB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "assign_issue";
|
|
3
|
+
export declare const description = "Assign or unassign users on an issue or pull request";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
issue_number: z.ZodNumber;
|
|
8
|
+
assignees: z.ZodArray<z.ZodString, "many">;
|
|
9
|
+
action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["add", "remove"]>>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
owner: string;
|
|
12
|
+
repo: string;
|
|
13
|
+
issue_number: number;
|
|
14
|
+
assignees: string[];
|
|
15
|
+
action: "add" | "remove";
|
|
16
|
+
}, {
|
|
17
|
+
owner: string;
|
|
18
|
+
repo: string;
|
|
19
|
+
issue_number: number;
|
|
20
|
+
assignees: string[];
|
|
21
|
+
action?: "add" | "remove" | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
24
|
+
//# sourceMappingURL=assign_issue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assign_issue.d.ts","sourceRoot":"","sources":["../../src/tools/assign_issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,iBAAiB,CAAC;AACnC,eAAO,MAAM,WAAW,yDAAyD,CAAC;AAElF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAqBzD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient } from "../github-client.js";
|
|
3
|
+
import { cacheDelete } from "../utils/cache.js";
|
|
4
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
5
|
+
export const name = "assign_issue";
|
|
6
|
+
export const description = "Assign or unassign users on an issue or pull request";
|
|
7
|
+
export const schema = z.object({
|
|
8
|
+
owner: z.string().describe("Repository owner"),
|
|
9
|
+
repo: z.string().describe("Repository name"),
|
|
10
|
+
issue_number: z.number().int().describe("Issue or PR number"),
|
|
11
|
+
assignees: z.array(z.string()).min(1).describe("GitHub usernames to assign"),
|
|
12
|
+
action: z.enum(["add", "remove"]).optional().default("add").describe("Add or remove assignees"),
|
|
13
|
+
});
|
|
14
|
+
export async function handler(args) {
|
|
15
|
+
const client = getGitHubClient();
|
|
16
|
+
const endpoint = `/repos/${args.owner}/${args.repo}/issues/${args.issue_number}/assignees`;
|
|
17
|
+
const res = args.action === "remove"
|
|
18
|
+
? await client.delete(endpoint, { data: { assignees: args.assignees } })
|
|
19
|
+
: await client.post(endpoint, { assignees: args.assignees });
|
|
20
|
+
cacheDelete(`issues:${args.owner}/${args.repo}:open`);
|
|
21
|
+
cacheDelete(`issues:${args.owner}/${args.repo}:closed`);
|
|
22
|
+
cacheDelete(`issues:${args.owner}/${args.repo}:all`);
|
|
23
|
+
const issue = res.data;
|
|
24
|
+
const result = tokenGuard({
|
|
25
|
+
number: issue.number,
|
|
26
|
+
title: issue.title,
|
|
27
|
+
assignees: (issue.assignees ?? []).map((a) => a.login),
|
|
28
|
+
html_url: issue.html_url,
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=assign_issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assign_issue.js","sourceRoot":"","sources":["../../src/tools/assign_issue.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;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,sDAAsD,CAAC;AAElF,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,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC5E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAChG,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,YAAY,YAAY,CAAC;IAE3F,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ;QAClC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACxE,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/D,WAAW,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;IACtD,WAAW,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;IACxD,WAAW,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3D,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "create_branch";
|
|
3
|
+
export declare const description = "Create a new branch from an existing base branch";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
branch: z.ZodString;
|
|
8
|
+
base: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
branch: string;
|
|
11
|
+
owner: string;
|
|
12
|
+
repo: string;
|
|
13
|
+
base?: string | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
branch: string;
|
|
16
|
+
owner: string;
|
|
17
|
+
repo: string;
|
|
18
|
+
base?: string | undefined;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
21
|
+
//# sourceMappingURL=create_branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_branch.d.ts","sourceRoot":"","sources":["../../src/tools/create_branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,WAAW,qDAAqD,CAAC;AAE9E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;EAKjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAwBzD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient, getDefaultBranch } from "../github-client.js";
|
|
3
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
4
|
+
export const name = "create_branch";
|
|
5
|
+
export const description = "Create a new branch from an existing base branch";
|
|
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("New branch name"),
|
|
10
|
+
base: z.string().optional().describe("Base branch (defaults to the repo's default branch)"),
|
|
11
|
+
});
|
|
12
|
+
export async function handler(args) {
|
|
13
|
+
const client = getGitHubClient();
|
|
14
|
+
const base = args.base ?? await getDefaultBranch(args.owner, args.repo);
|
|
15
|
+
// Get the latest commit SHA from base branch
|
|
16
|
+
const baseRes = await client.get(`/repos/${args.owner}/${args.repo}/git/ref/heads/${base}`);
|
|
17
|
+
const baseSha = baseRes.data.object.sha;
|
|
18
|
+
// Create the new branch
|
|
19
|
+
const res = await client.post(`/repos/${args.owner}/${args.repo}/git/refs`, { ref: `refs/heads/${args.branch}`, sha: baseSha });
|
|
20
|
+
const result = tokenGuard({
|
|
21
|
+
branch: args.branch,
|
|
22
|
+
base,
|
|
23
|
+
sha: res.data.object.sha.substring(0, 7),
|
|
24
|
+
ref: res.data.ref,
|
|
25
|
+
});
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=create_branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_branch.js","sourceRoot":"","sources":["../../src/tools/create_branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,kDAAkD,CAAC;AAE9E,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,iBAAiB,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC5F,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAExE,6CAA6C;IAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAC9B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,kBAAkB,IAAI,EAAE,CAC1D,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAExC,wBAAwB;IACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,WAAW,EAC5C,EAAE,GAAG,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CACnD,CAAC;IAEF,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;KAClB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "create_issue";
|
|
3
|
+
export declare const description = "Create a new issue with title, body, and labels";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
title: z.ZodString;
|
|
8
|
+
body: z.ZodOptional<z.ZodString>;
|
|
9
|
+
labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
title: string;
|
|
12
|
+
owner: string;
|
|
13
|
+
repo: string;
|
|
14
|
+
body?: string | undefined;
|
|
15
|
+
labels?: string[] | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
title: string;
|
|
18
|
+
owner: string;
|
|
19
|
+
repo: string;
|
|
20
|
+
body?: string | undefined;
|
|
21
|
+
labels?: string[] | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
24
|
+
//# sourceMappingURL=create_issue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_issue.d.ts","sourceRoot":"","sources":["../../src/tools/create_issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,iBAAiB,CAAC;AACnC,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAE7E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAoBzD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient } from "../github-client.js";
|
|
3
|
+
import { cacheDelete } from "../utils/cache.js";
|
|
4
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
5
|
+
export const name = "create_issue";
|
|
6
|
+
export const description = "Create a new issue with title, body, and labels";
|
|
7
|
+
export const schema = z.object({
|
|
8
|
+
owner: z.string().describe("Repository owner"),
|
|
9
|
+
repo: z.string().describe("Repository name"),
|
|
10
|
+
title: z.string().describe("Issue title"),
|
|
11
|
+
body: z.string().optional().describe("Issue body/description"),
|
|
12
|
+
labels: z.array(z.string()).optional().describe("Labels to apply"),
|
|
13
|
+
});
|
|
14
|
+
export async function handler(args) {
|
|
15
|
+
const client = getGitHubClient();
|
|
16
|
+
const res = await client.post(`/repos/${args.owner}/${args.repo}/issues`, { title: args.title, body: args.body, labels: args.labels });
|
|
17
|
+
const issue = res.data;
|
|
18
|
+
cacheDelete(`issues:${args.owner}/${args.repo}:open`);
|
|
19
|
+
cacheDelete(`issues:${args.owner}/${args.repo}:all`);
|
|
20
|
+
const result = tokenGuard({
|
|
21
|
+
number: issue.number,
|
|
22
|
+
title: issue.title,
|
|
23
|
+
state: issue.state,
|
|
24
|
+
html_url: issue.html_url,
|
|
25
|
+
created_at: issue.created_at,
|
|
26
|
+
});
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=create_issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_issue.js","sourceRoot":"","sources":["../../src/tools/create_issue.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;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,iDAAiD,CAAC;AAE7E,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,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC9D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,EAC1C,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAC5D,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;IACvB,WAAW,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;IACtD,WAAW,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "create_pr";
|
|
3
|
+
export declare const description = "Create a pull request from a branch with title, body, and base branch";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
title: z.ZodString;
|
|
8
|
+
body: z.ZodOptional<z.ZodString>;
|
|
9
|
+
head: z.ZodString;
|
|
10
|
+
base: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
head: string;
|
|
13
|
+
title: string;
|
|
14
|
+
owner: string;
|
|
15
|
+
repo: string;
|
|
16
|
+
body?: string | undefined;
|
|
17
|
+
base?: string | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
head: string;
|
|
20
|
+
title: string;
|
|
21
|
+
owner: string;
|
|
22
|
+
repo: string;
|
|
23
|
+
body?: string | undefined;
|
|
24
|
+
base?: string | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
27
|
+
//# sourceMappingURL=create_pr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_pr.d.ts","sourceRoot":"","sources":["../../src/tools/create_pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,WAAW,0EAA0E,CAAC;AAEnG,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;EAOjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBAqBzD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient, getDefaultBranch } from "../github-client.js";
|
|
3
|
+
import { cacheDelete } from "../utils/cache.js";
|
|
4
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
5
|
+
export const name = "create_pr";
|
|
6
|
+
export const description = "Create a pull request from a branch with title, body, and base branch";
|
|
7
|
+
export const schema = z.object({
|
|
8
|
+
owner: z.string().describe("Repository owner"),
|
|
9
|
+
repo: z.string().describe("Repository name"),
|
|
10
|
+
title: z.string().describe("PR title"),
|
|
11
|
+
body: z.string().optional().describe("PR description"),
|
|
12
|
+
head: z.string().describe("Source branch name"),
|
|
13
|
+
base: z.string().optional().describe("Target branch (defaults to the repo's default branch)"),
|
|
14
|
+
});
|
|
15
|
+
export async function handler(args) {
|
|
16
|
+
const client = getGitHubClient();
|
|
17
|
+
const base = args.base ?? await getDefaultBranch(args.owner, args.repo);
|
|
18
|
+
const res = await client.post(`/repos/${args.owner}/${args.repo}/pulls`, { title: args.title, body: args.body, head: args.head, base });
|
|
19
|
+
const pr = res.data;
|
|
20
|
+
cacheDelete(`prs:${args.owner}/${args.repo}:open`);
|
|
21
|
+
cacheDelete(`prs:${args.owner}/${args.repo}:all`);
|
|
22
|
+
const result = tokenGuard({
|
|
23
|
+
number: pr.number,
|
|
24
|
+
title: pr.title,
|
|
25
|
+
state: pr.state,
|
|
26
|
+
html_url: pr.html_url,
|
|
27
|
+
created_at: pr.created_at,
|
|
28
|
+
});
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=create_pr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_pr.js","sourceRoot":"","sources":["../../src/tools/create_pr.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,WAAW,CAAC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,uEAAuE,CAAC;AAEnG,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,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,QAAQ,EACzC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAC9D,CAAC;IAEF,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IACpB,WAAW,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;IACnD,WAAW,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,UAAU,EAAE,EAAE,CAAC,UAAU;KAC1B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "create_release";
|
|
3
|
+
export declare const description = "Create a new GitHub release with a tag, title, and release notes";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
owner: z.ZodString;
|
|
6
|
+
repo: z.ZodString;
|
|
7
|
+
tag_name: z.ZodString;
|
|
8
|
+
name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
body: z.ZodOptional<z.ZodString>;
|
|
10
|
+
draft: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
prerelease: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
12
|
+
target_commitish: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
owner: string;
|
|
15
|
+
repo: string;
|
|
16
|
+
tag_name: string;
|
|
17
|
+
draft: boolean;
|
|
18
|
+
prerelease: boolean;
|
|
19
|
+
name?: string | undefined;
|
|
20
|
+
body?: string | undefined;
|
|
21
|
+
target_commitish?: string | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
owner: string;
|
|
24
|
+
repo: string;
|
|
25
|
+
tag_name: string;
|
|
26
|
+
name?: string | undefined;
|
|
27
|
+
body?: string | undefined;
|
|
28
|
+
draft?: boolean | undefined;
|
|
29
|
+
prerelease?: boolean | undefined;
|
|
30
|
+
target_commitish?: string | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function handler(args: z.infer<typeof schema>): Promise<unknown>;
|
|
33
|
+
//# sourceMappingURL=create_release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_release.d.ts","sourceRoot":"","sources":["../../src/tools/create_release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC,eAAO,MAAM,WAAW,qEAAqE,CAAC;AAE9F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;EASjB,CAAC;AAEH,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,oBA2BzD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getGitHubClient, getDefaultBranch } from "../github-client.js";
|
|
3
|
+
import { cacheDelete } from "../utils/cache.js";
|
|
4
|
+
import { tokenGuard } from "../middleware/tokenGuard.js";
|
|
5
|
+
export const name = "create_release";
|
|
6
|
+
export const description = "Create a new GitHub release with a tag, title, and release notes";
|
|
7
|
+
export const schema = z.object({
|
|
8
|
+
owner: z.string().describe("Repository owner"),
|
|
9
|
+
repo: z.string().describe("Repository name"),
|
|
10
|
+
tag_name: z.string().describe("Tag name for the release (e.g. 'v1.2.0')"),
|
|
11
|
+
name: z.string().optional().describe("Release title (defaults to tag name)"),
|
|
12
|
+
body: z.string().optional().describe("Release notes / changelog"),
|
|
13
|
+
draft: z.boolean().optional().default(false).describe("Publish as draft"),
|
|
14
|
+
prerelease: z.boolean().optional().default(false).describe("Mark as pre-release"),
|
|
15
|
+
target_commitish: z.string().optional().describe("Branch or commit SHA to tag (defaults to repo's default branch)"),
|
|
16
|
+
});
|
|
17
|
+
export async function handler(args) {
|
|
18
|
+
const client = getGitHubClient();
|
|
19
|
+
const target = args.target_commitish ?? await getDefaultBranch(args.owner, args.repo);
|
|
20
|
+
const res = await client.post(`/repos/${args.owner}/${args.repo}/releases`, {
|
|
21
|
+
tag_name: args.tag_name,
|
|
22
|
+
name: args.name ?? args.tag_name,
|
|
23
|
+
body: args.body,
|
|
24
|
+
draft: args.draft,
|
|
25
|
+
prerelease: args.prerelease,
|
|
26
|
+
target_commitish: target,
|
|
27
|
+
});
|
|
28
|
+
const r = res.data;
|
|
29
|
+
cacheDelete(`release:${args.owner}/${args.repo}:latest`);
|
|
30
|
+
const result = tokenGuard({
|
|
31
|
+
id: r.id,
|
|
32
|
+
tag_name: r.tag_name,
|
|
33
|
+
name: r.name,
|
|
34
|
+
draft: r.draft,
|
|
35
|
+
prerelease: r.prerelease,
|
|
36
|
+
published_at: r.published_at,
|
|
37
|
+
html_url: r.html_url,
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=create_release.js.map
|