@arii/boomtick-mcp 0.4.1 → 0.5.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/.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_commits.json +32 -0
- package/.mcp/schemas/github.get_pr_diff.json +30 -12
- package/.mcp/schemas/github.get_pr_reviews.json +32 -0
- 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_commits.json +32 -0
- package/.mcp/schemas/github_get_pr_diff.json +32 -0
- package/.mcp/schemas/github_get_pr_reviews.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_workflow_runs.json +50 -0
- package/.mcp/schemas/repo.logs.json +42 -24
- package/.mcp/schemas/repo.read_agent_context.json +7 -3
- package/.mcp/schemas/repo.read_ci_logs.json +35 -17
- 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_workflow_runs.json +50 -0
- package/.mcp/schemas/repo_logs.json +45 -0
- package/.mcp/schemas/repo_read_agent_context.json +9 -0
- package/.mcp/schemas/repo_read_ci_logs.json +38 -0
- package/.mcp/schemas/repo_run_tests.json +45 -0
- package/CHANGELOG.md +16 -0
- package/README.md +0 -1
- package/actions/impact-analysis/action.yml +4 -16
- package/actions/run-project-gate/action.yml +2 -9
- package/actions/test-build/action.yml +1 -19
- package/dist/lib/git.js +74 -0
- package/dist/lib/git.test.js +82 -0
- package/dist/lib/param_utils.js +35 -0
- package/dist/lib/param_utils.test.js +44 -0
- package/dist/mcp/definitions.js +27 -40
- package/dist/mcp/schemas.test.js +28 -0
- package/dist/mcp/server.js +64 -74
- package/dist/mcp/server.test.js +0 -33
- package/dist/tools/contract.js +229 -10
- 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_merge_conflict_files.js +10 -18
- package/dist/tools/github.get_pr.js +4 -1
- package/dist/tools/github.get_pr_commits.js +21 -0
- package/dist/tools/github.get_pr_diff.js +6 -2
- package/dist/tools/github.get_pr_reviews.js +21 -0
- package/dist/tools/github.get_pr_reviews.test.js +99 -0
- 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/jules/create-session.js +1 -2
- package/dist/tools/jules/get-pr.js +1 -2
- package/dist/tools/jules/get-session.js +1 -2
- package/dist/tools/jules/shared.js +24 -0
- package/dist/tools/repo.commit_patch.js +30 -10
- package/dist/tools/repo.get_changed_files.js +2 -13
- package/dist/tools/repo.get_workflow_runs.js +29 -0
- package/dist/tools/repo.logs.js +5 -1
- package/dist/tools/repo.read_agent_context.js +27 -1
- package/dist/tools/repo.read_agent_context.test.js +1 -1
- package/dist/tools/repo.read_ci_logs.js +5 -1
- package/dist/tools/repo.run_tests.js +26 -4
- package/package.json +4 -7
- package/scripts/sync-mcp-schemas.ts +6 -1
- package/src/agents/verifier-agent.prompt.md +0 -4
- package/src/lib/git.test.ts +110 -0
- package/src/lib/git.ts +109 -0
- package/src/lib/param_utils.test.ts +49 -0
- package/src/lib/param_utils.ts +42 -0
- package/src/mcp/definitions.ts +30 -43
- package/src/mcp/schemas.test.ts +34 -0
- package/src/mcp/server.test.ts +0 -42
- package/src/mcp/server.ts +65 -75
- package/src/tools/contract.ts +241 -10
- 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_merge_conflict_files.ts +10 -20
- package/src/tools/github.get_pr.ts +4 -1
- package/src/tools/github.get_pr_commits.ts +27 -0
- package/src/tools/github.get_pr_diff.ts +7 -2
- package/src/tools/github.get_pr_reviews.test.ts +110 -0
- package/src/tools/github.get_pr_reviews.ts +27 -0
- 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/jules/create-session.ts +1 -2
- package/src/tools/jules/get-pr.ts +1 -2
- package/src/tools/jules/get-session.ts +1 -2
- package/src/tools/jules/shared.ts +35 -0
- package/src/tools/repo.commit_patch.ts +35 -11
- package/src/tools/repo.get_changed_files.ts +2 -16
- package/src/tools/repo.get_workflow_runs.ts +36 -0
- package/src/tools/repo.logs.ts +5 -1
- package/src/tools/repo.read_agent_context.test.ts +1 -1
- package/src/tools/repo.read_agent_context.ts +35 -1
- package/src/tools/repo.read_ci_logs.ts +5 -1
- package/src/tools/repo.run_tests.ts +28 -5
- package/.mcp/schemas/agent.search_ddgs.json +0 -27
- package/.mcp/schemas/repo.get_route_map.json +0 -19
- package/.mcp/schemas/repo.run_lighthouse.json +0 -25
- package/.mcp/schemas/repo.run_playwright.json +0 -32
- package/dist/lib/td-cli.js +0 -54
- package/dist/tools/ddgs.search.js +0 -50
- package/dist/tools/ddgs.search.test.js +0 -67
- package/dist/tools/ddgs_search.py +0 -23
- package/dist/tools/repo.get_route_map.js +0 -37
- package/dist/tools/repo.run_lighthouse.js +0 -37
- package/dist/tools/repo.run_playwright.js +0 -29
- package/scripts/export-mcp-schema.ts +0 -7
- package/src/lib/td-cli.ts +0 -73
- package/src/tools/ddgs.search.test.ts +0 -92
- package/src/tools/ddgs.search.ts +0 -58
- package/src/tools/ddgs_search.py +0 -23
- package/src/tools/repo.get_route_map.ts +0 -41
- package/src/tools/repo.run_lighthouse.ts +0 -40
- package/src/tools/repo.run_playwright.ts +0 -35
package/dist/mcp/server.js
CHANGED
|
@@ -4,6 +4,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSche
|
|
|
4
4
|
import { config } from "../config.js";
|
|
5
5
|
import { createSuccessResult, createErrorResult } from "../lib/result.js";
|
|
6
6
|
import { MCP_TOOLS, MCP_PROMPTS, MCP_RESOURCES } from "./definitions.js";
|
|
7
|
+
import { normalizeArguments } from "../lib/param_utils.js";
|
|
7
8
|
import { healthHandler, HealthCheckInputSchema } from "./tools.js";
|
|
8
9
|
import { searchOpenPrsHandler, SearchOpenPrsInputSchema } from "../tools/github.search_open_prs.js";
|
|
9
10
|
import { getPrDiffHandler, GetPrDiffInputSchema } from "../tools/github.get_pr_diff.js";
|
|
@@ -13,14 +14,11 @@ import { getChangedFilesHandler, GetChangedFilesInputSchema } from "../tools/rep
|
|
|
13
14
|
import { readAgentContextHandler, ReadAgentContextInputSchema } from "../tools/repo.read_agent_context.js";
|
|
14
15
|
import { getCommandSchemaHandler, GetCommandSchemaInputSchema } from "../tools/repo.get_command_schema.js";
|
|
15
16
|
import { getPackageScriptsHandler, GetPackageScriptsInputSchema } from "../tools/repo.get_package_scripts.js";
|
|
16
|
-
import { getRouteMapHandler, GetRouteMapInputSchema } from "../tools/repo.get_route_map.js";
|
|
17
17
|
import { readCiLogsHandler, ReadCiLogsInputSchema } from "../tools/repo.read_ci_logs.js";
|
|
18
18
|
import { repoLogsHandler, RepoLogsInputSchema } from "../tools/repo.logs.js";
|
|
19
19
|
import { createRepairBranchHandler, CreateRepairBranchInputSchema } from "../tools/repo.create_repair_branch.js";
|
|
20
20
|
import { createBranchHandler, CreateBranchInputSchema } from "../tools/repo.create_branch.js";
|
|
21
21
|
import { runTestsHandler, RunTestsInputSchema } from "../tools/repo.run_tests.js";
|
|
22
|
-
import { runLighthouseHandler, RunLighthouseInputSchema } from "../tools/repo.run_lighthouse.js";
|
|
23
|
-
import { runPlaywrightHandler, RunPlaywrightInputSchema } from "../tools/repo.run_playwright.js";
|
|
24
22
|
import { commitPatchHandler, CommitPatchInputSchema } from "../tools/repo.commit_patch.js";
|
|
25
23
|
import { openReplacementPrHandler, OpenReplacementPrInputSchema } from "../tools/github.open_replacement_pr.js";
|
|
26
24
|
import { commentTriageSummaryHandler, CommentTriageSummaryInputSchema } from "../tools/github.comment_triage_summary.js";
|
|
@@ -38,12 +36,10 @@ import { listJulesSessionsHandler, ListJulesSessionsInputSchema } from "../tools
|
|
|
38
36
|
import { cancelJulesSessionHandler, CancelJulesSessionInputSchema } from "../tools/jules/cancel-session.js";
|
|
39
37
|
import { getJulesPullRequestHandler, GetJulesPullRequestInputSchema } from "../tools/jules/get-pr.js";
|
|
40
38
|
import { triggerJulesFeedbackHandler, TriggerJulesFeedbackInputSchema } from "../tools/jules/trigger-feedback.js";
|
|
41
|
-
import { ddgsSearchHandler, DdgsSearchInputSchema } from "../tools/ddgs.search.js";
|
|
42
39
|
import fs from "fs/promises";
|
|
43
40
|
import { existsSync, readFileSync } from "fs";
|
|
44
41
|
import path from "path";
|
|
45
42
|
import { spawnSync } from "child_process";
|
|
46
|
-
import { fileURLToPath } from "url";
|
|
47
43
|
export class BoomtickMCPServer {
|
|
48
44
|
server;
|
|
49
45
|
constructor() {
|
|
@@ -105,12 +101,6 @@ export class BoomtickMCPServer {
|
|
|
105
101
|
contents: [{ uri, mimeType: "application/json", text: content }],
|
|
106
102
|
};
|
|
107
103
|
}
|
|
108
|
-
if (uri === "repo://routes") {
|
|
109
|
-
const routeMap = await getRouteMapHandler({});
|
|
110
|
-
return {
|
|
111
|
-
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(routeMap, null, 2) }],
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
104
|
if (uri === "repo://design-tokens") {
|
|
115
105
|
const tokensPath = path.join(config.repoPath, "src/styles/design-tokens.ts");
|
|
116
106
|
const content = await fs.readFile(tokensPath, "utf-8");
|
|
@@ -132,20 +122,6 @@ export class BoomtickMCPServer {
|
|
|
132
122
|
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(logs, null, 2) }],
|
|
133
123
|
};
|
|
134
124
|
}
|
|
135
|
-
if (uri.startsWith("repo://lighthouse/")) {
|
|
136
|
-
const branch = uri.split("/").pop() || "";
|
|
137
|
-
const report = await runLighthouseHandler({ route: "/", worktreePath: `../boomtick-mcp-rescue-${branch}` });
|
|
138
|
-
return {
|
|
139
|
-
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(report, null, 2) }],
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
if (uri.startsWith("repo://playwright/")) {
|
|
143
|
-
const branch = uri.split("/").pop() || "";
|
|
144
|
-
const report = await runPlaywrightHandler({ worktreePath: `../boomtick-mcp-rescue-${branch}` });
|
|
145
|
-
return {
|
|
146
|
-
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(report, null, 2) }],
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
125
|
throw new Error(`Resource not found: ${uri}`);
|
|
150
126
|
});
|
|
151
127
|
}
|
|
@@ -157,77 +133,100 @@ export class BoomtickMCPServer {
|
|
|
157
133
|
});
|
|
158
134
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
159
135
|
try {
|
|
160
|
-
|
|
136
|
+
const normalizedToolName = request.params.name.replace(/_/g, ".");
|
|
137
|
+
const normArgs = normalizeArguments(request.params.arguments);
|
|
138
|
+
switch (normalizedToolName) {
|
|
161
139
|
case "boomtick.health":
|
|
162
|
-
return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(
|
|
140
|
+
return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(normArgs)));
|
|
141
|
+
case "github.search.open.prs":
|
|
163
142
|
case "github.search_open_prs":
|
|
164
|
-
return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(
|
|
143
|
+
return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(normArgs)));
|
|
144
|
+
case "repo.read.agent.context":
|
|
165
145
|
case "repo.read_agent_context":
|
|
166
|
-
return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(
|
|
146
|
+
return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(normArgs)));
|
|
147
|
+
case "github.get.pr.diff":
|
|
167
148
|
case "github.get_pr_diff":
|
|
168
|
-
return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(
|
|
149
|
+
return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(normArgs)));
|
|
150
|
+
case "github.get.merge.conflict.files":
|
|
169
151
|
case "github.get_merge_conflict_files":
|
|
170
|
-
return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(
|
|
152
|
+
return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(normArgs)));
|
|
153
|
+
case "github.checkout.branch":
|
|
171
154
|
case "github.checkout_branch":
|
|
172
|
-
return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(
|
|
155
|
+
return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(normArgs)));
|
|
156
|
+
case "repo.get.changed.files":
|
|
173
157
|
case "repo.get_changed_files":
|
|
174
|
-
return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(
|
|
158
|
+
return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(normArgs)));
|
|
159
|
+
case "repo.get.command.schema":
|
|
175
160
|
case "repo.get_command_schema":
|
|
176
|
-
return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(
|
|
161
|
+
return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(normArgs)));
|
|
162
|
+
case "repo.get.package.scripts":
|
|
177
163
|
case "repo.get_package_scripts":
|
|
178
|
-
return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(
|
|
179
|
-
case "repo.
|
|
180
|
-
return createSuccessResult(await getRouteMapHandler(GetRouteMapInputSchema.parse(request.params.arguments || {})));
|
|
164
|
+
return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(normArgs)));
|
|
165
|
+
case "repo.read.ci.logs":
|
|
181
166
|
case "repo.read_ci_logs":
|
|
182
|
-
return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(
|
|
167
|
+
return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(normArgs)));
|
|
183
168
|
case "repo.logs":
|
|
184
|
-
return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(
|
|
169
|
+
return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(normArgs)));
|
|
170
|
+
case "repo.create.branch":
|
|
185
171
|
case "repo.create_branch":
|
|
186
|
-
return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(
|
|
172
|
+
return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(normArgs)));
|
|
173
|
+
case "repo.create.repair.branch":
|
|
187
174
|
case "repo.create_repair_branch":
|
|
188
|
-
return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(
|
|
175
|
+
return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(normArgs)));
|
|
176
|
+
case "repo.run.tests":
|
|
189
177
|
case "repo.run_tests":
|
|
190
|
-
return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(
|
|
191
|
-
case "repo.
|
|
192
|
-
return createSuccessResult(await runLighthouseHandler(RunLighthouseInputSchema.parse(request.params.arguments || {})));
|
|
193
|
-
case "repo.run_playwright":
|
|
194
|
-
return createSuccessResult(await runPlaywrightHandler(RunPlaywrightInputSchema.parse(request.params.arguments || {})));
|
|
178
|
+
return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(normArgs)));
|
|
179
|
+
case "repo.commit.patch":
|
|
195
180
|
case "repo.commit_patch":
|
|
196
|
-
return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(
|
|
181
|
+
return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(normArgs)));
|
|
182
|
+
case "github.open.replacement.pr":
|
|
197
183
|
case "github.open_replacement_pr":
|
|
198
|
-
return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(
|
|
184
|
+
return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(normArgs)));
|
|
185
|
+
case "github.comment.triage.summary":
|
|
199
186
|
case "github.comment_triage_summary":
|
|
200
|
-
return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(
|
|
187
|
+
return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(normArgs)));
|
|
188
|
+
case "github.create.pull.request":
|
|
201
189
|
case "github.create_pull_request":
|
|
202
|
-
return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(
|
|
190
|
+
return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(normArgs)));
|
|
191
|
+
case "github.get.pr":
|
|
203
192
|
case "github.get_pr":
|
|
204
|
-
return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(
|
|
193
|
+
return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(normArgs)));
|
|
194
|
+
case "github.issue.view":
|
|
205
195
|
case "github.issue_view":
|
|
206
|
-
return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(
|
|
196
|
+
return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(normArgs)));
|
|
197
|
+
case "github.issue.update":
|
|
207
198
|
case "github.issue_update":
|
|
208
|
-
return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(
|
|
199
|
+
return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(normArgs)));
|
|
200
|
+
case "github.issue.comment":
|
|
209
201
|
case "github.issue_comment":
|
|
210
|
-
return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(
|
|
202
|
+
return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(normArgs)));
|
|
203
|
+
case "github.create.issue":
|
|
211
204
|
case "github.create_issue":
|
|
212
|
-
return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(
|
|
205
|
+
return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(normArgs)));
|
|
206
|
+
case "jules.create.session":
|
|
213
207
|
case "jules.create_session":
|
|
214
|
-
return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(
|
|
208
|
+
return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(normArgs)));
|
|
209
|
+
case "jules.get.session":
|
|
215
210
|
case "jules.get_session":
|
|
216
|
-
return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(
|
|
211
|
+
return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(normArgs)));
|
|
212
|
+
case "jules.send.message":
|
|
217
213
|
case "jules.send_message":
|
|
218
|
-
return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(
|
|
214
|
+
return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(normArgs)));
|
|
215
|
+
case "jules.get.messages":
|
|
219
216
|
case "jules.get_messages":
|
|
220
|
-
return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(
|
|
217
|
+
return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(normArgs)));
|
|
218
|
+
case "jules.list.sessions":
|
|
221
219
|
case "jules.list_sessions":
|
|
222
|
-
return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(
|
|
220
|
+
return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(normArgs)));
|
|
221
|
+
case "jules.cancel.session":
|
|
223
222
|
case "jules.cancel_session":
|
|
224
|
-
return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(
|
|
223
|
+
return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(normArgs)));
|
|
224
|
+
case "jules.get.pr":
|
|
225
225
|
case "jules.get_pr":
|
|
226
|
-
return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(
|
|
226
|
+
return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(normArgs)));
|
|
227
|
+
case "jules.trigger.feedback":
|
|
227
228
|
case "jules.trigger_feedback":
|
|
228
|
-
return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(
|
|
229
|
-
case "agent.search_ddgs":
|
|
230
|
-
return createSuccessResult(await ddgsSearchHandler(DdgsSearchInputSchema.parse(request.params.arguments)));
|
|
229
|
+
return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(normArgs)));
|
|
231
230
|
default:
|
|
232
231
|
return createErrorResult(`Tool not found: ${request.params.name}`);
|
|
233
232
|
}
|
|
@@ -301,15 +300,6 @@ export class BoomtickMCPServer {
|
|
|
301
300
|
console.error("❌ Fatal: td-cli pre-flight check failed:", error instanceof Error ? error.message : String(error));
|
|
302
301
|
process.exit(1);
|
|
303
302
|
}
|
|
304
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
305
|
-
const ddgsScriptPath = path.join(__dirname, "..", "tools", "ddgs_search.py");
|
|
306
|
-
try {
|
|
307
|
-
await fs.access(ddgsScriptPath);
|
|
308
|
-
}
|
|
309
|
-
catch (err) {
|
|
310
|
-
console.error(`❌ Fatal: ddgs_search.py not found at ${ddgsScriptPath}`);
|
|
311
|
-
process.exit(1);
|
|
312
|
-
}
|
|
313
303
|
const transport = new StdioServerTransport();
|
|
314
304
|
await this.server.connect(transport);
|
|
315
305
|
console.error("Boomtick MCP Server running on stdio");
|
package/dist/mcp/server.test.js
CHANGED
|
@@ -2,11 +2,8 @@ import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
|
2
2
|
import { BoomtickMCPServer } from "./server.js";
|
|
3
3
|
import fs from "fs/promises";
|
|
4
4
|
import * as healthModule from "./tools.js";
|
|
5
|
-
import * as routeMapModule from "../tools/repo.get_route_map.js";
|
|
6
5
|
import * as prDiffModule from "../tools/github.get_pr_diff.js";
|
|
7
6
|
import * as ciLogsModule from "../tools/repo.read_ci_logs.js";
|
|
8
|
-
import * as lighthouseModule from "../tools/repo.run_lighthouse.js";
|
|
9
|
-
import * as playwrightModule from "../tools/repo.run_playwright.js";
|
|
10
7
|
vi.mock("fs/promises");
|
|
11
8
|
vi.mock("../config.js", () => ({
|
|
12
9
|
config: {
|
|
@@ -99,16 +96,6 @@ describe("BoomtickMCPServer", () => {
|
|
|
99
96
|
contents: [{ uri: "repo://package-json", mimeType: "application/json", text: '{"name": "test"}' }],
|
|
100
97
|
});
|
|
101
98
|
});
|
|
102
|
-
it("should handle repo://routes", async () => {
|
|
103
|
-
const handler = requestHandlers.get("resources/read");
|
|
104
|
-
vi.spyOn(routeMapModule, "getRouteMapHandler").mockResolvedValue({ routes: ["/"] });
|
|
105
|
-
const result = await handler({
|
|
106
|
-
method: "resources/read",
|
|
107
|
-
params: { uri: "repo://routes" },
|
|
108
|
-
});
|
|
109
|
-
expect(result.contents[0].uri).toBe("repo://routes");
|
|
110
|
-
expect(JSON.parse(result.contents[0].text)).toEqual({ routes: ["/"] });
|
|
111
|
-
});
|
|
112
99
|
it("should handle repo://design-tokens", async () => {
|
|
113
100
|
const handler = requestHandlers.get("resources/read");
|
|
114
101
|
vi.mocked(fs.readFile).mockResolvedValue("export const tokens = {};");
|
|
@@ -141,26 +128,6 @@ describe("BoomtickMCPServer", () => {
|
|
|
141
128
|
expect(result.contents[0].uri).toBe("repo://ci/42");
|
|
142
129
|
expect(JSON.parse(result.contents[0].text)).toEqual({ status: "success" });
|
|
143
130
|
});
|
|
144
|
-
it("should handle repo://lighthouse/:branch", async () => {
|
|
145
|
-
const handler = requestHandlers.get("resources/read");
|
|
146
|
-
vi.spyOn(lighthouseModule, "runLighthouseHandler").mockResolvedValue({ score: 100 });
|
|
147
|
-
const result = await handler({
|
|
148
|
-
method: "resources/read",
|
|
149
|
-
params: { uri: "repo://lighthouse/feature-x" },
|
|
150
|
-
});
|
|
151
|
-
expect(result.contents[0].uri).toBe("repo://lighthouse/feature-x");
|
|
152
|
-
expect(JSON.parse(result.contents[0].text)).toEqual({ score: 100 });
|
|
153
|
-
});
|
|
154
|
-
it("should handle repo://playwright/:branch", async () => {
|
|
155
|
-
const handler = requestHandlers.get("resources/read");
|
|
156
|
-
vi.spyOn(playwrightModule, "runPlaywrightHandler").mockResolvedValue({ passed: true });
|
|
157
|
-
const result = await handler({
|
|
158
|
-
method: "resources/read",
|
|
159
|
-
params: { uri: "repo://playwright/feature-x" },
|
|
160
|
-
});
|
|
161
|
-
expect(result.contents[0].uri).toBe("repo://playwright/feature-x");
|
|
162
|
-
expect(JSON.parse(result.contents[0].text)).toEqual({ passed: true });
|
|
163
|
-
});
|
|
164
131
|
it("should throw when resource is unknown", async () => {
|
|
165
132
|
const handler = requestHandlers.get("resources/read");
|
|
166
133
|
await expect(handler({
|