@arii/boomtick-mcp 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mcp/schemas/agent.search_ddgs.json +28 -24
- package/.mcp/schemas/agent_search_ddgs.json +31 -0
- package/.mcp/schemas/boomtick.health.json +14 -10
- package/.mcp/schemas/boomtick_health.json +16 -0
- package/.mcp/schemas/github.checkout_branch.json +28 -24
- package/.mcp/schemas/github.comment_triage_summary.json +21 -17
- package/.mcp/schemas/github.create_issue.json +55 -50
- package/.mcp/schemas/github.create_pull_request.json +53 -48
- package/.mcp/schemas/github.get_merge_conflict_files.json +21 -17
- package/.mcp/schemas/github.get_pr.json +30 -12
- package/.mcp/schemas/github.get_pr_diff.json +30 -12
- package/.mcp/schemas/github.issue_comment.json +35 -17
- package/.mcp/schemas/github.issue_update.json +114 -96
- package/.mcp/schemas/github.issue_view.json +30 -12
- package/.mcp/schemas/github.open_replacement_pr.json +64 -60
- package/.mcp/schemas/github.search_open_prs.json +61 -43
- package/.mcp/schemas/github_checkout_branch.json +31 -0
- package/.mcp/schemas/github_comment_triage_summary.json +24 -0
- package/.mcp/schemas/github_create_issue.json +58 -0
- package/.mcp/schemas/github_create_pull_request.json +56 -0
- package/.mcp/schemas/github_get_merge_conflict_files.json +24 -0
- package/.mcp/schemas/github_get_pr.json +32 -0
- package/.mcp/schemas/github_get_pr_diff.json +32 -0
- package/.mcp/schemas/github_issue_comment.json +38 -0
- package/.mcp/schemas/github_issue_update.json +123 -0
- package/.mcp/schemas/github_issue_view.json +32 -0
- package/.mcp/schemas/github_open_replacement_pr.json +67 -0
- package/.mcp/schemas/github_search_open_prs.json +65 -0
- package/.mcp/schemas/jules.cancel_session.json +16 -12
- package/.mcp/schemas/jules.create_session.json +41 -37
- package/.mcp/schemas/jules.get_messages.json +16 -12
- package/.mcp/schemas/jules.get_pr.json +16 -12
- package/.mcp/schemas/jules.get_session.json +16 -12
- package/.mcp/schemas/jules.list_sessions.json +33 -29
- package/.mcp/schemas/jules.send_message.json +30 -26
- package/.mcp/schemas/jules.trigger_feedback.json +16 -12
- package/.mcp/schemas/jules_cancel_session.json +18 -0
- package/.mcp/schemas/jules_create_session.json +44 -0
- package/.mcp/schemas/jules_get_messages.json +18 -0
- package/.mcp/schemas/jules_get_pr.json +18 -0
- package/.mcp/schemas/jules_get_session.json +18 -0
- package/.mcp/schemas/jules_list_sessions.json +36 -0
- package/.mcp/schemas/jules_send_message.json +35 -0
- package/.mcp/schemas/jules_trigger_feedback.json +18 -0
- package/.mcp/schemas/repo.commit_patch.json +34 -30
- package/.mcp/schemas/repo.create_branch.json +21 -17
- package/.mcp/schemas/repo.create_repair_branch.json +34 -30
- package/.mcp/schemas/repo.get_changed_files.json +19 -15
- package/.mcp/schemas/repo.get_command_schema.json +16 -12
- package/.mcp/schemas/repo.get_package_scripts.json +21 -17
- package/.mcp/schemas/repo.get_route_map.json +21 -17
- package/.mcp/schemas/repo.logs.json +28 -24
- package/.mcp/schemas/repo.read_agent_context.json +7 -3
- package/.mcp/schemas/repo.read_ci_logs.json +21 -17
- package/.mcp/schemas/repo.run_lighthouse.json +26 -22
- package/.mcp/schemas/repo.run_playwright.json +33 -29
- package/.mcp/schemas/repo.run_tests.json +40 -36
- package/.mcp/schemas/repo_commit_patch.json +39 -0
- package/.mcp/schemas/repo_create_branch.json +24 -0
- package/.mcp/schemas/repo_create_repair_branch.json +37 -0
- package/.mcp/schemas/repo_get_changed_files.json +22 -0
- package/.mcp/schemas/repo_get_command_schema.json +18 -0
- package/.mcp/schemas/repo_get_package_scripts.json +23 -0
- package/.mcp/schemas/repo_get_route_map.json +23 -0
- package/.mcp/schemas/repo_logs.json +31 -0
- package/.mcp/schemas/repo_read_agent_context.json +9 -0
- package/.mcp/schemas/repo_read_ci_logs.json +24 -0
- package/.mcp/schemas/repo_run_lighthouse.json +29 -0
- package/.mcp/schemas/repo_run_playwright.json +36 -0
- package/.mcp/schemas/repo_run_tests.json +45 -0
- package/CHANGELOG.md +16 -0
- package/dist/config.js +43 -17
- package/dist/config.test.js +18 -3
- package/dist/lib/git.js +30 -0
- package/dist/lib/param_utils.js +35 -0
- package/dist/lib/param_utils.test.js +44 -0
- package/dist/mcp/definitions.js +11 -1
- package/dist/mcp/schemas.test.js +28 -0
- package/dist/mcp/server.js +72 -36
- package/dist/tools/contract.js +94 -8
- package/dist/tools/github.create_issue.js +3 -2
- package/dist/tools/github.create_issue.test.js +10 -0
- package/dist/tools/github.create_pull_request.js +4 -4
- package/dist/tools/github.get_pr.js +4 -1
- package/dist/tools/github.get_pr_diff.js +6 -2
- package/dist/tools/github.issue_comment.js +8 -1
- package/dist/tools/github.issue_update.js +3 -0
- package/dist/tools/github.issue_view.js +4 -1
- package/dist/tools/github.search_open_prs.js +4 -0
- package/dist/tools/repo.commit_patch.js +30 -10
- package/dist/tools/repo.run_playwright.js +10 -5
- package/dist/tools/repo.run_tests.js +26 -4
- package/package.json +2 -2
- package/scripts/sync-mcp-schemas.ts +6 -1
- package/src/config.test.ts +22 -3
- package/src/config.ts +47 -17
- package/src/lib/git.ts +34 -0
- package/src/lib/param_utils.test.ts +49 -0
- package/src/lib/param_utils.ts +42 -0
- package/src/mcp/definitions.ts +12 -1
- package/src/mcp/schemas.test.ts +34 -0
- package/src/mcp/server.ts +73 -38
- package/src/tools/contract.ts +94 -8
- package/src/tools/github.create_issue.test.ts +10 -0
- package/src/tools/github.create_issue.ts +3 -1
- package/src/tools/github.create_pull_request.ts +4 -5
- package/src/tools/github.get_pr.ts +4 -1
- package/src/tools/github.get_pr_diff.ts +7 -2
- package/src/tools/github.issue_comment.ts +8 -1
- package/src/tools/github.issue_update.ts +4 -1
- package/src/tools/github.issue_view.ts +4 -1
- package/src/tools/github.search_open_prs.ts +4 -0
- package/src/tools/repo.commit_patch.ts +35 -11
- package/src/tools/repo.run_playwright.ts +13 -6
- package/src/tools/repo.run_tests.ts +28 -5
package/src/config.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import dotenv from "dotenv";
|
|
2
1
|
import path from "path";
|
|
3
2
|
import fs from "fs";
|
|
4
3
|
import { fileURLToPath } from "url";
|
|
@@ -6,10 +5,14 @@ import { execSync } from "child_process";
|
|
|
6
5
|
|
|
7
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
const envPath = path.resolve(__dirname, "../.env");
|
|
9
|
+
if (fs.existsSync(envPath) && typeof process.loadEnvFile === "function") {
|
|
10
|
+
try {
|
|
11
|
+
process.loadEnvFile(envPath);
|
|
12
|
+
} catch {
|
|
13
|
+
// Ignore if already loaded or invalid
|
|
14
|
+
}
|
|
15
|
+
}
|
|
13
16
|
|
|
14
17
|
function getGithubToken(): string | undefined {
|
|
15
18
|
if (process.env.GITHUB_TOKEN) {
|
|
@@ -36,9 +39,11 @@ export function initializeConfig() {
|
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
try {
|
|
39
|
-
// Attempt to load core properties from the Python CLI
|
|
42
|
+
// Attempt to load core properties from the Python CLI in the active workspace
|
|
43
|
+
const cwd = process.env.BOOMTICK_REPO_PATH || process.cwd();
|
|
40
44
|
const cmd = `td-cli config view`;
|
|
41
45
|
const output = execSync(cmd, {
|
|
46
|
+
cwd,
|
|
42
47
|
encoding: "utf-8",
|
|
43
48
|
stdio: ["ignore", "pipe", "ignore"]
|
|
44
49
|
});
|
|
@@ -64,10 +69,27 @@ function findRepoRoot() {
|
|
|
64
69
|
return process.env.BOOMTICK_REPO_PATH;
|
|
65
70
|
}
|
|
66
71
|
|
|
67
|
-
// Traverse up to find workspace.json or .git
|
|
68
|
-
let current =
|
|
72
|
+
// Traverse up from process.cwd() to find project_config.json, workspace.json, or .git
|
|
73
|
+
let current = process.cwd();
|
|
69
74
|
while (current !== path.parse(current).root) {
|
|
70
|
-
if (
|
|
75
|
+
if (
|
|
76
|
+
fs.existsSync(path.join(current, "project_config.json")) ||
|
|
77
|
+
fs.existsSync(path.join(current, "workspace.json")) ||
|
|
78
|
+
fs.existsSync(path.join(current, ".git"))
|
|
79
|
+
) {
|
|
80
|
+
return current;
|
|
81
|
+
}
|
|
82
|
+
current = path.dirname(current);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Fallback to __dirname search if discovery from cwd fails
|
|
86
|
+
current = __dirname;
|
|
87
|
+
while (current !== path.parse(current).root) {
|
|
88
|
+
if (
|
|
89
|
+
fs.existsSync(path.join(current, "project_config.json")) ||
|
|
90
|
+
fs.existsSync(path.join(current, "workspace.json")) ||
|
|
91
|
+
fs.existsSync(path.join(current, ".git"))
|
|
92
|
+
) {
|
|
71
93
|
return current;
|
|
72
94
|
}
|
|
73
95
|
current = path.dirname(current);
|
|
@@ -79,20 +101,28 @@ function findRepoRoot() {
|
|
|
79
101
|
export const config = {
|
|
80
102
|
get githubToken() { return getGithubToken(); },
|
|
81
103
|
get githubOwner() {
|
|
82
|
-
if (process.env.GITHUB_OWNER) return process.env.GITHUB_OWNER;
|
|
83
104
|
const repoString = cachedDynamicConfig?.github_repo;
|
|
84
|
-
if (typeof repoString
|
|
85
|
-
|
|
105
|
+
if (typeof repoString === "string" && repoString.includes("/")) {
|
|
106
|
+
return repoString.split("/")[0];
|
|
107
|
+
}
|
|
108
|
+
if (process.env.GITHUB_OWNER) return process.env.GITHUB_OWNER;
|
|
109
|
+
const envRepo = process.env.GITHUB_REPOSITORY || process.env.GH_REPO;
|
|
110
|
+
if (envRepo && envRepo.includes("/")) {
|
|
111
|
+
return envRepo.split("/")[0];
|
|
86
112
|
}
|
|
87
|
-
|
|
113
|
+
throw new Error("GITHUB_OWNER must be set via environment variable or project_config.json");
|
|
88
114
|
},
|
|
89
115
|
get githubRepo() {
|
|
90
|
-
if (process.env.GITHUB_REPO) return process.env.GITHUB_REPO;
|
|
91
116
|
const repoString = cachedDynamicConfig?.github_repo;
|
|
92
|
-
if (typeof repoString
|
|
93
|
-
|
|
117
|
+
if (typeof repoString === "string" && repoString.includes("/")) {
|
|
118
|
+
return repoString.split("/")[1];
|
|
119
|
+
}
|
|
120
|
+
if (process.env.GITHUB_REPO) return process.env.GITHUB_REPO;
|
|
121
|
+
const envRepo = process.env.GITHUB_REPOSITORY || process.env.GH_REPO;
|
|
122
|
+
if (envRepo && envRepo.includes("/")) {
|
|
123
|
+
return envRepo.split("/")[1];
|
|
94
124
|
}
|
|
95
|
-
|
|
125
|
+
throw new Error("GITHUB_REPO must be set via environment variable or project_config.json");
|
|
96
126
|
},
|
|
97
127
|
get repoPath() {
|
|
98
128
|
return findRepoRoot();
|
package/src/lib/git.ts
CHANGED
|
@@ -2,6 +2,40 @@ import { runCommand } from "./shell.js";
|
|
|
2
2
|
import { config } from "../config.js";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import fs from "fs/promises";
|
|
5
|
+
import { execSync } from "child_process";
|
|
6
|
+
|
|
7
|
+
const repoCache = new Map<string, string>();
|
|
8
|
+
|
|
9
|
+
export function resolveRepo(explicitRepo?: string | null, cwd?: string): string {
|
|
10
|
+
if (explicitRepo && explicitRepo.trim().length > 0) {
|
|
11
|
+
return explicitRepo.trim();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const targetCwd = cwd || process.cwd();
|
|
15
|
+
if (repoCache.has(targetCwd)) {
|
|
16
|
+
return repoCache.get(targetCwd)!;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const url = execSync("git remote get-url origin", {
|
|
21
|
+
cwd: targetCwd,
|
|
22
|
+
encoding: "utf-8",
|
|
23
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
24
|
+
}).trim();
|
|
25
|
+
|
|
26
|
+
const match = url.match(/[:/]([^/]+\/[^/.]+)(\.git)?$/);
|
|
27
|
+
if (match) {
|
|
28
|
+
repoCache.set(targetCwd, match[1]);
|
|
29
|
+
return match[1];
|
|
30
|
+
}
|
|
31
|
+
} catch (e) {
|
|
32
|
+
// Ignore error and fall back to static config
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const fallback = `${config.githubOwner}/${config.githubRepo}`;
|
|
36
|
+
repoCache.set(targetCwd, fallback);
|
|
37
|
+
return fallback;
|
|
38
|
+
}
|
|
5
39
|
|
|
6
40
|
function validatePrNumber(value: unknown): number {
|
|
7
41
|
const prNumber = Number(value);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { normalizeArguments } from "./param_utils.js";
|
|
3
|
+
|
|
4
|
+
describe("param_utils.normalizeArguments", () => {
|
|
5
|
+
it("should convert snake_case keys to camelCase", () => {
|
|
6
|
+
const input = {
|
|
7
|
+
pr_number: 123,
|
|
8
|
+
issue_number: 456,
|
|
9
|
+
worktree_path: "/tmp/worktree",
|
|
10
|
+
base_branch: "main",
|
|
11
|
+
};
|
|
12
|
+
const output = normalizeArguments(input);
|
|
13
|
+
expect(output).toEqual({
|
|
14
|
+
prNumber: 123,
|
|
15
|
+
issueNumber: 456,
|
|
16
|
+
worktreePath: "/tmp/worktree",
|
|
17
|
+
baseBranch: "main",
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("should coerce numeric strings for prNumber and issueNumber", () => {
|
|
22
|
+
const input = {
|
|
23
|
+
pr_number: "789",
|
|
24
|
+
issue_number: "101",
|
|
25
|
+
};
|
|
26
|
+
const output = normalizeArguments(input);
|
|
27
|
+
expect(output).toEqual({
|
|
28
|
+
prNumber: 789,
|
|
29
|
+
issueNumber: 101,
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("should synchronize branch and branchName", () => {
|
|
34
|
+
expect(normalizeArguments({ branch: "feat-x" })).toEqual({
|
|
35
|
+
branch: "feat-x",
|
|
36
|
+
branchName: "feat-x",
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(normalizeArguments({ branch_name: "feat-y" })).toEqual({
|
|
40
|
+
branchName: "feat-y",
|
|
41
|
+
branch: "feat-y",
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("should handle null or empty arguments safely", () => {
|
|
46
|
+
expect(normalizeArguments(null)).toEqual({});
|
|
47
|
+
expect(normalizeArguments(undefined)).toEqual({});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export function normalizeArguments(args: Record<string, unknown> | null | undefined): Record<string, unknown> {
|
|
2
|
+
if (!args || typeof args !== "object") {
|
|
3
|
+
return {};
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const result: Record<string, unknown> = {};
|
|
7
|
+
|
|
8
|
+
for (const [key, value] of Object.entries(args)) {
|
|
9
|
+
// Convert snake_case to camelCase
|
|
10
|
+
const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
11
|
+
|
|
12
|
+
// Normalize value recursively if it's an object/array
|
|
13
|
+
let normalizedValue = value;
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
normalizedValue = value.map((item) =>
|
|
16
|
+
item && typeof item === "object" ? normalizeArguments(item as Record<string, unknown>) : item
|
|
17
|
+
);
|
|
18
|
+
} else if (value && typeof value === "object" && !(value instanceof RegExp)) {
|
|
19
|
+
normalizedValue = normalizeArguments(value as Record<string, unknown>);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Coerce numeric string to integer for prNumber / issueNumber if applicable
|
|
23
|
+
if ((camelKey === "prNumber" || camelKey === "issueNumber") && typeof normalizedValue === "string") {
|
|
24
|
+
const parsedNum = parseInt(normalizedValue, 10);
|
|
25
|
+
if (!isNaN(parsedNum)) {
|
|
26
|
+
normalizedValue = parsedNum;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
result[camelKey] = normalizedValue;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Parameter aliases harmonization
|
|
34
|
+
// branch vs branchName harmonization
|
|
35
|
+
if (result.branch !== undefined && result.branchName === undefined) {
|
|
36
|
+
result.branchName = result.branch;
|
|
37
|
+
} else if (result.branchName !== undefined && result.branch === undefined) {
|
|
38
|
+
result.branch = result.branchName;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return result;
|
|
42
|
+
}
|
package/src/mcp/definitions.ts
CHANGED
|
@@ -99,7 +99,7 @@ export const MCP_RESOURCES: Resource[] = [
|
|
|
99
99
|
},
|
|
100
100
|
];
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
const BASE_MCP_TOOLS: Tool[] = [
|
|
103
103
|
{
|
|
104
104
|
name: "boomtick.health",
|
|
105
105
|
description: "Check the health and configuration of the MCP server.",
|
|
@@ -276,3 +276,14 @@ export const MCP_TOOLS: Tool[] = [
|
|
|
276
276
|
inputSchema: SearchDdgsInputJsonSchema as any,
|
|
277
277
|
},
|
|
278
278
|
];
|
|
279
|
+
|
|
280
|
+
export const MCP_TOOLS: Tool[] = BASE_MCP_TOOLS.flatMap((tool) => {
|
|
281
|
+
const underscoreName = tool.name.replace(/\./g, "_");
|
|
282
|
+
if (underscoreName !== tool.name) {
|
|
283
|
+
return [
|
|
284
|
+
{ ...tool, name: underscoreName },
|
|
285
|
+
tool,
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
return [tool];
|
|
289
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
|
|
6
|
+
describe("MCP tool schemas export", () => {
|
|
7
|
+
it("should generate valid schema files with non-null parameters object", () => {
|
|
8
|
+
const schemasDir = path.resolve(process.cwd(), ".mcp/schemas");
|
|
9
|
+
if (!fs.existsSync(schemasDir)) {
|
|
10
|
+
execSync("npx tsx scripts/sync-mcp-schemas.ts", { cwd: process.cwd() });
|
|
11
|
+
}
|
|
12
|
+
expect(fs.existsSync(schemasDir)).toBe(true);
|
|
13
|
+
|
|
14
|
+
const files = fs.readdirSync(schemasDir).filter((f) => f.endsWith(".json"));
|
|
15
|
+
expect(files.length).toBeGreaterThan(0);
|
|
16
|
+
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
const filePath = path.join(schemasDir, file);
|
|
19
|
+
const content = JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
20
|
+
|
|
21
|
+
expect(content).toHaveProperty("name");
|
|
22
|
+
expect(typeof content.name).toBe("string");
|
|
23
|
+
|
|
24
|
+
expect(content).toHaveProperty("description");
|
|
25
|
+
expect(typeof content.description).toBe("string");
|
|
26
|
+
|
|
27
|
+
expect(content).toHaveProperty("parameters");
|
|
28
|
+
expect(content.parameters).not.toBeNull();
|
|
29
|
+
expect(typeof content.parameters).toBe("object");
|
|
30
|
+
expect(content.parameters.type).toBe("object");
|
|
31
|
+
expect(content.parameters.properties).toBeDefined();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
package/src/mcp/server.ts
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { config } from "../config.js";
|
|
12
12
|
import { createSuccessResult, createErrorResult } from "../lib/result.js";
|
|
13
13
|
import { MCP_TOOLS, MCP_PROMPTS, MCP_RESOURCES } from "./definitions.js";
|
|
14
|
+
import { normalizeArguments } from "../lib/param_utils.js";
|
|
14
15
|
import { healthHandler, HealthCheckInputSchema } from "./tools.js";
|
|
15
16
|
import { searchOpenPrsHandler, SearchOpenPrsInputSchema } from "../tools/github.search_open_prs.js";
|
|
16
17
|
import { getPrDiffHandler, GetPrDiffInputSchema } from "../tools/github.get_pr_diff.js";
|
|
@@ -182,80 +183,114 @@ export class BoomtickMCPServer {
|
|
|
182
183
|
|
|
183
184
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
184
185
|
try {
|
|
185
|
-
|
|
186
|
+
const normalizedToolName = request.params.name.replace(/_/g, ".");
|
|
187
|
+
const normArgs = normalizeArguments(request.params.arguments as Record<string, unknown>);
|
|
188
|
+
|
|
189
|
+
switch (normalizedToolName) {
|
|
186
190
|
case "boomtick.health":
|
|
187
|
-
return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(
|
|
191
|
+
return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(normArgs)));
|
|
192
|
+
case "github.search.open.prs":
|
|
188
193
|
case "github.search_open_prs":
|
|
189
|
-
return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(
|
|
194
|
+
return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(normArgs)));
|
|
195
|
+
case "repo.read.agent.context":
|
|
190
196
|
case "repo.read_agent_context":
|
|
191
|
-
return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(
|
|
197
|
+
return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(normArgs)));
|
|
198
|
+
case "github.get.pr.diff":
|
|
192
199
|
case "github.get_pr_diff":
|
|
193
|
-
return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(
|
|
200
|
+
return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(normArgs)));
|
|
201
|
+
case "github.get.merge.conflict.files":
|
|
194
202
|
case "github.get_merge_conflict_files":
|
|
195
|
-
return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(
|
|
203
|
+
return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(normArgs)));
|
|
204
|
+
case "github.checkout.branch":
|
|
196
205
|
case "github.checkout_branch":
|
|
197
|
-
return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(
|
|
206
|
+
return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(normArgs)));
|
|
207
|
+
case "repo.get.changed.files":
|
|
198
208
|
case "repo.get_changed_files":
|
|
199
|
-
return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(
|
|
209
|
+
return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(normArgs)));
|
|
210
|
+
case "repo.get.command.schema":
|
|
200
211
|
case "repo.get_command_schema":
|
|
201
|
-
return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(
|
|
212
|
+
return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(normArgs)));
|
|
213
|
+
case "repo.get.package.scripts":
|
|
202
214
|
case "repo.get_package_scripts":
|
|
203
|
-
return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(
|
|
215
|
+
return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(normArgs)));
|
|
216
|
+
case "repo.get.route.map":
|
|
204
217
|
case "repo.get_route_map":
|
|
205
|
-
return createSuccessResult(await getRouteMapHandler(GetRouteMapInputSchema.parse(
|
|
218
|
+
return createSuccessResult(await getRouteMapHandler(GetRouteMapInputSchema.parse(normArgs)));
|
|
219
|
+
case "repo.read.ci.logs":
|
|
206
220
|
case "repo.read_ci_logs":
|
|
207
|
-
return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(
|
|
221
|
+
return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(normArgs)));
|
|
208
222
|
case "repo.logs":
|
|
209
|
-
return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(
|
|
223
|
+
return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(normArgs)));
|
|
224
|
+
case "repo.create.branch":
|
|
210
225
|
case "repo.create_branch":
|
|
211
|
-
return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(
|
|
226
|
+
return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(normArgs)));
|
|
227
|
+
case "repo.create.repair.branch":
|
|
212
228
|
case "repo.create_repair_branch":
|
|
213
|
-
return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(
|
|
229
|
+
return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(normArgs)));
|
|
230
|
+
case "repo.run.tests":
|
|
214
231
|
case "repo.run_tests":
|
|
215
|
-
return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(
|
|
232
|
+
return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(normArgs)));
|
|
233
|
+
case "repo.run.lighthouse":
|
|
216
234
|
case "repo.run_lighthouse":
|
|
217
|
-
return createSuccessResult(await runLighthouseHandler(RunLighthouseInputSchema.parse(
|
|
235
|
+
return createSuccessResult(await runLighthouseHandler(RunLighthouseInputSchema.parse(normArgs)));
|
|
236
|
+
case "repo.run.playwright":
|
|
218
237
|
case "repo.run_playwright":
|
|
219
|
-
return createSuccessResult(await runPlaywrightHandler(RunPlaywrightInputSchema.parse(
|
|
238
|
+
return createSuccessResult(await runPlaywrightHandler(RunPlaywrightInputSchema.parse(normArgs)));
|
|
239
|
+
case "repo.commit.patch":
|
|
220
240
|
case "repo.commit_patch":
|
|
221
|
-
return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(
|
|
241
|
+
return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(normArgs)));
|
|
242
|
+
case "github.open.replacement.pr":
|
|
222
243
|
case "github.open_replacement_pr":
|
|
223
|
-
return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(
|
|
244
|
+
return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(normArgs)));
|
|
245
|
+
case "github.comment.triage.summary":
|
|
224
246
|
case "github.comment_triage_summary":
|
|
225
|
-
return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(
|
|
247
|
+
return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(normArgs)));
|
|
248
|
+
case "github.create.pull.request":
|
|
226
249
|
case "github.create_pull_request":
|
|
227
|
-
return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(
|
|
250
|
+
return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(normArgs)));
|
|
251
|
+
case "github.get.pr":
|
|
228
252
|
case "github.get_pr":
|
|
229
|
-
return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(
|
|
253
|
+
return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(normArgs)));
|
|
254
|
+
case "github.issue.view":
|
|
230
255
|
case "github.issue_view":
|
|
231
|
-
return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(
|
|
256
|
+
return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(normArgs)));
|
|
257
|
+
case "github.issue.update":
|
|
232
258
|
case "github.issue_update":
|
|
233
|
-
return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(
|
|
259
|
+
return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(normArgs)));
|
|
260
|
+
case "github.issue.comment":
|
|
234
261
|
case "github.issue_comment":
|
|
235
|
-
return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(
|
|
262
|
+
return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(normArgs)));
|
|
263
|
+
case "github.create.issue":
|
|
236
264
|
case "github.create_issue":
|
|
237
|
-
return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(
|
|
238
|
-
|
|
239
|
-
|
|
265
|
+
return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(normArgs)));
|
|
240
266
|
|
|
267
|
+
case "jules.create.session":
|
|
241
268
|
case "jules.create_session":
|
|
242
|
-
return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(
|
|
269
|
+
return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(normArgs)));
|
|
270
|
+
case "jules.get.session":
|
|
243
271
|
case "jules.get_session":
|
|
244
|
-
return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(
|
|
272
|
+
return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(normArgs)));
|
|
273
|
+
case "jules.send.message":
|
|
245
274
|
case "jules.send_message":
|
|
246
|
-
return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(
|
|
275
|
+
return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(normArgs)));
|
|
276
|
+
case "jules.get.messages":
|
|
247
277
|
case "jules.get_messages":
|
|
248
|
-
return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(
|
|
278
|
+
return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(normArgs)));
|
|
279
|
+
case "jules.list.sessions":
|
|
249
280
|
case "jules.list_sessions":
|
|
250
|
-
return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(
|
|
281
|
+
return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(normArgs)));
|
|
282
|
+
case "jules.cancel.session":
|
|
251
283
|
case "jules.cancel_session":
|
|
252
|
-
return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(
|
|
284
|
+
return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(normArgs)));
|
|
285
|
+
case "jules.get.pr":
|
|
253
286
|
case "jules.get_pr":
|
|
254
|
-
return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(
|
|
287
|
+
return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(normArgs)));
|
|
288
|
+
case "jules.trigger.feedback":
|
|
255
289
|
case "jules.trigger_feedback":
|
|
256
|
-
return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(
|
|
290
|
+
return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(normArgs)));
|
|
291
|
+
case "agent.search.ddgs":
|
|
257
292
|
case "agent.search_ddgs":
|
|
258
|
-
return createSuccessResult(await ddgsSearchHandler(DdgsSearchInputSchema.parse(
|
|
293
|
+
return createSuccessResult(await ddgsSearchHandler(DdgsSearchInputSchema.parse(normArgs)));
|
|
259
294
|
default:
|
|
260
295
|
return createErrorResult(`Tool not found: ${request.params.name}`);
|
|
261
296
|
}
|