@arii/boomtick-mcp 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/.mcp/schemas/boomtick.health.json +5 -0
  2. package/.mcp/schemas/boomtick_health.json +5 -0
  3. package/.mcp/schemas/github.checkout_branch.json +5 -0
  4. package/.mcp/schemas/github.comment_triage_summary.json +5 -0
  5. package/.mcp/schemas/github.create_issue.json +5 -0
  6. package/.mcp/schemas/github.create_pull_request.json +5 -0
  7. package/.mcp/schemas/github.get_merge_conflict_files.json +5 -0
  8. package/.mcp/schemas/github.get_pr.json +5 -0
  9. package/.mcp/schemas/github.get_pr_commits.json +37 -0
  10. package/.mcp/schemas/github.get_pr_diff.json +5 -0
  11. package/.mcp/schemas/github.get_pr_reviews.json +37 -0
  12. package/.mcp/schemas/github.issue_comment.json +5 -0
  13. package/.mcp/schemas/github.issue_update.json +5 -0
  14. package/.mcp/schemas/github.issue_view.json +5 -0
  15. package/.mcp/schemas/github.open_replacement_pr.json +5 -0
  16. package/.mcp/schemas/github.search_open_prs.json +5 -0
  17. package/.mcp/schemas/github_checkout_branch.json +5 -0
  18. package/.mcp/schemas/github_comment_triage_summary.json +5 -0
  19. package/.mcp/schemas/github_create_issue.json +5 -0
  20. package/.mcp/schemas/github_create_pull_request.json +5 -0
  21. package/.mcp/schemas/github_get_merge_conflict_files.json +5 -0
  22. package/.mcp/schemas/github_get_pr.json +5 -0
  23. package/.mcp/schemas/github_get_pr_commits.json +37 -0
  24. package/.mcp/schemas/github_get_pr_diff.json +5 -0
  25. package/.mcp/schemas/github_get_pr_reviews.json +37 -0
  26. package/.mcp/schemas/github_issue_comment.json +5 -0
  27. package/.mcp/schemas/github_issue_update.json +5 -0
  28. package/.mcp/schemas/github_issue_view.json +5 -0
  29. package/.mcp/schemas/github_open_replacement_pr.json +5 -0
  30. package/.mcp/schemas/github_search_open_prs.json +5 -0
  31. package/.mcp/schemas/jules.cancel_session.json +5 -0
  32. package/.mcp/schemas/jules.create_session.json +5 -0
  33. package/.mcp/schemas/jules.get_messages.json +5 -0
  34. package/.mcp/schemas/jules.get_pr.json +5 -0
  35. package/.mcp/schemas/jules.get_session.json +5 -0
  36. package/.mcp/schemas/jules.list_sessions.json +5 -0
  37. package/.mcp/schemas/jules.send_message.json +5 -0
  38. package/.mcp/schemas/jules.trigger_feedback.json +5 -0
  39. package/.mcp/schemas/jules_cancel_session.json +5 -0
  40. package/.mcp/schemas/jules_create_session.json +5 -0
  41. package/.mcp/schemas/jules_get_messages.json +5 -0
  42. package/.mcp/schemas/jules_get_pr.json +5 -0
  43. package/.mcp/schemas/jules_get_session.json +5 -0
  44. package/.mcp/schemas/jules_list_sessions.json +5 -0
  45. package/.mcp/schemas/jules_send_message.json +5 -0
  46. package/.mcp/schemas/jules_trigger_feedback.json +5 -0
  47. package/.mcp/schemas/repo.commit_patch.json +5 -0
  48. package/.mcp/schemas/repo.create_branch.json +5 -0
  49. package/.mcp/schemas/repo.create_repair_branch.json +5 -0
  50. package/.mcp/schemas/repo.get_changed_files.json +5 -0
  51. package/.mcp/schemas/repo.get_command_schema.json +6 -1
  52. package/.mcp/schemas/repo.get_package_scripts.json +5 -0
  53. package/.mcp/schemas/repo.get_workflow_runs.json +55 -0
  54. package/.mcp/schemas/repo.logs.json +19 -0
  55. package/.mcp/schemas/repo.read_agent_context.json +5 -0
  56. package/.mcp/schemas/repo.read_ci_logs.json +19 -0
  57. package/.mcp/schemas/repo.run_tests.json +5 -0
  58. package/.mcp/schemas/repo_commit_patch.json +5 -0
  59. package/.mcp/schemas/repo_create_branch.json +5 -0
  60. package/.mcp/schemas/repo_create_repair_branch.json +5 -0
  61. package/.mcp/schemas/repo_get_changed_files.json +5 -0
  62. package/.mcp/schemas/repo_get_command_schema.json +6 -1
  63. package/.mcp/schemas/repo_get_package_scripts.json +5 -0
  64. package/.mcp/schemas/repo_get_workflow_runs.json +55 -0
  65. package/.mcp/schemas/repo_logs.json +19 -0
  66. package/.mcp/schemas/repo_read_agent_context.json +5 -0
  67. package/.mcp/schemas/repo_read_ci_logs.json +19 -0
  68. package/.mcp/schemas/repo_run_tests.json +5 -0
  69. package/CHANGELOG.md +14 -0
  70. package/README.md +0 -1
  71. package/actions/ai-review/action.yml +2 -2
  72. package/actions/audit/action.yml +1 -1
  73. package/actions/ci-validate/action.yml +2 -2
  74. package/actions/impact-analysis/action.yml +7 -19
  75. package/actions/run-project-gate/action.yml +7 -14
  76. package/actions/setup/action.yml +1 -1
  77. package/actions/test-build/action.yml +2 -20
  78. package/dist/config.js +1 -1
  79. package/dist/config.test.js +3 -3
  80. package/dist/lib/git.js +44 -0
  81. package/dist/lib/git.test.js +82 -0
  82. package/dist/lib/result.js +4 -0
  83. package/dist/lib/result.test.js +4 -2
  84. package/dist/lib/shell.js +6 -6
  85. package/dist/mcp/definitions.js +86 -38
  86. package/dist/mcp/http.js +91 -0
  87. package/dist/mcp/http.test.js +58 -0
  88. package/dist/mcp/server.js +51 -57
  89. package/dist/mcp/server.test.js +19 -32
  90. package/dist/tools/contract.js +244 -3
  91. package/dist/tools/github.checkout_branch.js +1 -1
  92. package/dist/tools/github.comment_triage_summary.js +1 -1
  93. package/dist/tools/github.create_issue.js +1 -1
  94. package/dist/tools/github.create_issue.test.js +6 -6
  95. package/dist/tools/github.create_pull_request.js +1 -1
  96. package/dist/tools/github.create_pull_request.test.js +4 -4
  97. package/dist/tools/github.get_merge_conflict_files.js +10 -18
  98. package/dist/tools/github.get_pr.js +1 -1
  99. package/dist/tools/github.get_pr_commits.js +21 -0
  100. package/dist/tools/github.get_pr_diff.js +1 -1
  101. package/dist/tools/github.get_pr_reviews.js +21 -0
  102. package/dist/tools/github.get_pr_reviews.test.js +99 -0
  103. package/dist/tools/github.issue_comment.js +1 -1
  104. package/dist/tools/github.issue_update.js +1 -1
  105. package/dist/tools/github.issue_view.js +1 -1
  106. package/dist/tools/github.search_open_prs.js +1 -1
  107. package/dist/tools/jules/cancel-session.js +1 -1
  108. package/dist/tools/jules/create-session.js +1 -2
  109. package/dist/tools/jules/create-session.test.js +11 -11
  110. package/dist/tools/jules/get-messages.js +1 -1
  111. package/dist/tools/jules/get-messages.test.js +3 -3
  112. package/dist/tools/jules/get-pr.js +1 -2
  113. package/dist/tools/jules/get-pr.test.js +3 -3
  114. package/dist/tools/jules/get-session.js +1 -2
  115. package/dist/tools/jules/list-sessions.js +1 -1
  116. package/dist/tools/jules/send-message.js +1 -1
  117. package/dist/tools/jules/send-message.test.js +5 -5
  118. package/dist/tools/jules/shared.js +24 -0
  119. package/dist/tools/jules/trigger-feedback.js +1 -1
  120. package/dist/tools/jules/trigger-feedback.test.js +5 -5
  121. package/dist/tools/repo.get_changed_files.js +2 -13
  122. package/dist/tools/repo.get_command_schema.js +2 -2
  123. package/dist/tools/repo.get_workflow_runs.js +29 -0
  124. package/dist/tools/repo.logs.js +5 -1
  125. package/dist/tools/repo.read_agent_context.js +27 -1
  126. package/dist/tools/repo.read_agent_context.test.js +1 -1
  127. package/dist/tools/repo.read_ci_logs.js +5 -1
  128. package/dist/tools/repo.run_tests.js +1 -1
  129. package/package.json +3 -6
  130. package/scripts/sync-mcp-schemas.ts +2 -0
  131. package/src/agents/verifier-agent.prompt.md +0 -4
  132. package/src/config.test.ts +3 -3
  133. package/src/config.ts +1 -1
  134. package/src/lib/git.test.ts +110 -0
  135. package/src/lib/git.ts +75 -0
  136. package/src/lib/result.test.ts +4 -2
  137. package/src/lib/result.ts +6 -0
  138. package/src/lib/shell.ts +6 -6
  139. package/src/mcp/definitions.ts +91 -42
  140. package/src/mcp/http.test.ts +72 -0
  141. package/src/mcp/http.ts +118 -0
  142. package/src/mcp/server.test.ts +20 -38
  143. package/src/mcp/server.ts +60 -54
  144. package/src/tools/contract.ts +256 -3
  145. package/src/tools/github.checkout_branch.ts +1 -1
  146. package/src/tools/github.comment_triage_summary.ts +1 -1
  147. package/src/tools/github.create_issue.test.ts +6 -6
  148. package/src/tools/github.create_issue.ts +1 -1
  149. package/src/tools/github.create_pull_request.test.ts +4 -4
  150. package/src/tools/github.create_pull_request.ts +1 -1
  151. package/src/tools/github.get_merge_conflict_files.ts +10 -20
  152. package/src/tools/github.get_pr.ts +1 -1
  153. package/src/tools/github.get_pr_commits.ts +27 -0
  154. package/src/tools/github.get_pr_diff.ts +1 -1
  155. package/src/tools/github.get_pr_reviews.test.ts +110 -0
  156. package/src/tools/github.get_pr_reviews.ts +27 -0
  157. package/src/tools/github.issue_comment.ts +1 -1
  158. package/src/tools/github.issue_update.ts +1 -1
  159. package/src/tools/github.issue_view.ts +1 -1
  160. package/src/tools/github.search_open_prs.ts +1 -1
  161. package/src/tools/jules/cancel-session.ts +1 -1
  162. package/src/tools/jules/create-session.test.ts +11 -11
  163. package/src/tools/jules/create-session.ts +1 -2
  164. package/src/tools/jules/get-messages.test.ts +3 -3
  165. package/src/tools/jules/get-messages.ts +1 -1
  166. package/src/tools/jules/get-pr.test.ts +3 -3
  167. package/src/tools/jules/get-pr.ts +1 -2
  168. package/src/tools/jules/get-session.ts +1 -2
  169. package/src/tools/jules/list-sessions.ts +1 -1
  170. package/src/tools/jules/send-message.test.ts +5 -5
  171. package/src/tools/jules/send-message.ts +1 -1
  172. package/src/tools/jules/shared.ts +35 -0
  173. package/src/tools/jules/trigger-feedback.test.ts +5 -5
  174. package/src/tools/jules/trigger-feedback.ts +1 -1
  175. package/src/tools/repo.get_changed_files.ts +2 -16
  176. package/src/tools/repo.get_command_schema.ts +2 -2
  177. package/src/tools/repo.get_workflow_runs.ts +36 -0
  178. package/src/tools/repo.logs.ts +5 -1
  179. package/src/tools/repo.read_agent_context.test.ts +1 -1
  180. package/src/tools/repo.read_agent_context.ts +35 -1
  181. package/src/tools/repo.read_ci_logs.ts +5 -1
  182. package/src/tools/repo.run_tests.ts +1 -1
  183. package/.mcp/schemas/agent.search_ddgs.json +0 -31
  184. package/.mcp/schemas/agent_search_ddgs.json +0 -31
  185. package/.mcp/schemas/repo.get_route_map.json +0 -23
  186. package/.mcp/schemas/repo.run_lighthouse.json +0 -29
  187. package/.mcp/schemas/repo.run_playwright.json +0 -36
  188. package/.mcp/schemas/repo_get_route_map.json +0 -23
  189. package/.mcp/schemas/repo_run_lighthouse.json +0 -29
  190. package/.mcp/schemas/repo_run_playwright.json +0 -36
  191. package/dist/lib/td-cli.js +0 -54
  192. package/dist/tools/ddgs.search.js +0 -50
  193. package/dist/tools/ddgs.search.test.js +0 -67
  194. package/dist/tools/ddgs_search.py +0 -23
  195. package/dist/tools/repo.get_route_map.js +0 -37
  196. package/dist/tools/repo.run_lighthouse.js +0 -37
  197. package/dist/tools/repo.run_playwright.js +0 -34
  198. package/scripts/export-mcp-schema.ts +0 -7
  199. package/src/lib/td-cli.ts +0 -73
  200. package/src/tools/ddgs.search.test.ts +0 -92
  201. package/src/tools/ddgs.search.ts +0 -58
  202. package/src/tools/ddgs_search.py +0 -23
  203. package/src/tools/repo.get_route_map.ts +0 -41
  204. package/src/tools/repo.run_lighthouse.ts +0 -40
  205. package/src/tools/repo.run_playwright.ts +0 -42
@@ -1,58 +0,0 @@
1
- import { z } from "zod";
2
- import { runCommand } from "../lib/shell.js";
3
-
4
- export const DdgsSearchInputSchema = z.object({
5
- query: z.string(),
6
- maxResults: z.number().optional().default(5),
7
- });
8
-
9
- import path from "path";
10
- import { fileURLToPath } from "url";
11
-
12
- const __filename = fileURLToPath(import.meta.url);
13
- const __dirname = path.dirname(__filename);
14
-
15
- export async function ddgsSearchHandler(args: z.infer<typeof DdgsSearchInputSchema>) {
16
- const scriptPath = path.join(__dirname, "ddgs_search.py");
17
-
18
- // Sanitize query by removing control characters, newlines, and null bytes
19
- // eslint-disable-next-line no-control-regex
20
- const safeQuery = args.query.replace(/[\x00-\x1F\x7F-\x9F]/g, " ").trim();
21
- if (!safeQuery) {
22
- throw new Error("Query cannot be empty after sanitization.");
23
- }
24
-
25
- const result = await runCommand("python3", [scriptPath, safeQuery, (args.maxResults ?? 5).toString()]);
26
-
27
- // duckduckgo_search logs annoying deprecation warnings to stderr we want to ignore
28
- // if it really failed, exitCode will be non-zero and we'll have stdout/stderr
29
- if (result.exitCode !== 0) {
30
- let parsedError = result.stderr || result.stdout;
31
-
32
- const lines = parsedError.split("\n");
33
- for (const line of lines) {
34
- try {
35
- const json = JSON.parse(line);
36
- if (json.error) {
37
- parsedError = json.error;
38
- break;
39
- }
40
- } catch {
41
- // continue
42
- }
43
- }
44
-
45
- throw new Error(`Failed to search ddgs: ${parsedError}`);
46
- }
47
-
48
- try {
49
- const data = JSON.parse(result.stdout);
50
- if (!Array.isArray(data)) {
51
- throw new Error("Expected an array of search results");
52
- }
53
- return { results: data };
54
- } catch (e) {
55
- const message = e instanceof Error ? e.message : String(e);
56
- throw new Error(`Failed to parse ddgs search results. Error: ${message}. Output was: ${result.stdout}`);
57
- }
58
- }
@@ -1,23 +0,0 @@
1
- # pylint: disable=line-too-long
2
- """DuckDuckGo Search tool."""
3
- import json
4
- import sys
5
-
6
- try:
7
- from duckduckgo_search import DDGS
8
- except ImportError:
9
- print(json.dumps({"error": "duckduckgo_search package not found. Please install it using 'pip install duckduckgo-search' (preferably in a virtual environment)."}), file=sys.stderr)
10
- sys.exit(1)
11
-
12
- if len(sys.argv) != 3:
13
- print(json.dumps({"error": f"Invalid argument count. Expected 2 (query, max_results), got {len(sys.argv) - 1}."}), file=sys.stderr)
14
- sys.exit(1)
15
-
16
- try:
17
- query = sys.argv[1]
18
- max_results = int(sys.argv[2])
19
- results = DDGS().text(query, max_results=max_results)
20
- print(json.dumps(list(results)))
21
- except Exception as e:
22
- print(json.dumps({"error": str(e)}), file=sys.stderr)
23
- sys.exit(1)
@@ -1,41 +0,0 @@
1
- import { z } from "zod";
2
- import { runCommand } from "../lib/shell.js";
3
- import { config } from "../config.js";
4
- import path from "path";
5
-
6
- export const GetRouteMapInputSchema = z.object({
7
- includeStatic: z.boolean().optional(),
8
- });
9
-
10
- export async function getRouteMapHandler(args: z.infer<typeof GetRouteMapInputSchema>) {
11
- GetRouteMapInputSchema.parse(args);
12
- // Logic based on tech-dancer repo structure: src/config/routes.ts and content/
13
- const routesPath = path.join(config.repoPath, "src/config/routes.ts");
14
-
15
- // For simplicity in MVP, we'll try to find routes by listing content files
16
- // and reading the main routes file if it exists.
17
- let routeMap: Record<string, string> = {};
18
-
19
- try {
20
- const gitFiles = await runCommand("git", ["ls-files", "content/"]);
21
- const contentFiles = gitFiles.stdout.trim().split("\n");
22
-
23
- for (const file of contentFiles) {
24
- if (file.endsWith(".md")) {
25
- const slug = path.basename(file, ".md");
26
- if (file.includes("/posts/")) {
27
- routeMap[`/blog/${slug}`] = file;
28
- } else if (file.includes("/resources/")) {
29
- routeMap[`/resources/${slug}`] = file;
30
- }
31
- }
32
- }
33
- } catch (error) {
34
- // If no content files, that's fine
35
- }
36
-
37
- if (args.includeStatic) {
38
- routeMap["/favicon.ico"] = "public/favicon.ico";
39
- }
40
- return { routeMap };
41
- }
@@ -1,40 +0,0 @@
1
- import { z } from "zod";
2
- import { runCommand } from "../lib/shell.js";
3
-
4
- export const RunLighthouseInputSchema = z.object({
5
- route: z.string().optional().default("/"),
6
- worktreePath: z.string().optional(),
7
- });
8
-
9
- export async function runLighthouseHandler(args: z.infer<typeof RunLighthouseInputSchema>) {
10
- const results = await runCommand("pnpm", ["lhci", "autorun", "--json"], { cwd: args.worktreePath });
11
-
12
- let summary = {};
13
- const failures: string[] = [];
14
-
15
- try {
16
- // Attempt to parse summary from LHCI output if available
17
- // For MVP, we'll provide a structured placeholder if actual JSON isn't present
18
- if (results.stdout.includes("{")) {
19
- const possibleJson = results.stdout.substring(results.stdout.indexOf("{"));
20
- summary = JSON.parse(possibleJson);
21
- } else {
22
- summary = {
23
- performance: 0,
24
- accessibility: 0,
25
- bestPractices: 0,
26
- seo: 0
27
- };
28
- }
29
- } catch (e) {
30
- failures.push("Failed to parse Lighthouse report");
31
- }
32
-
33
- return {
34
- success: results.exitCode === 0,
35
- route: args.route,
36
- summary,
37
- failures,
38
- command: results.command
39
- };
40
- }
@@ -1,42 +0,0 @@
1
- import { z } from "zod";
2
- import { runCommand } from "../lib/shell.js";
3
-
4
- export const RunPlaywrightInputSchema = z.object({
5
- grep: z.string().optional(),
6
- worktreePath: z.string().optional(),
7
- timeoutSeconds: z.number().optional().default(180),
8
- });
9
-
10
- export type RunPlaywrightInput = z.input<typeof RunPlaywrightInputSchema>;
11
-
12
- export async function runPlaywrightHandler(args: RunPlaywrightInput) {
13
- const parsed = RunPlaywrightInputSchema.parse(args || {});
14
- const tdArgs = ["repo", "run-playwright"];
15
- if (parsed.grep) {
16
- tdArgs.push("--grep", parsed.grep);
17
- }
18
- if (parsed.worktreePath) {
19
- tdArgs.push("--worktree", parsed.worktreePath);
20
- }
21
-
22
- const result = await runCommand("td-cli", tdArgs, {
23
- cwd: parsed.worktreePath,
24
- timeout: parsed.timeoutSeconds * 1000,
25
- });
26
-
27
- if (result.exitCode !== 0) {
28
- // Playwright might exit with non-zero if tests fail, but our td-cli should ideally handle it
29
- // and return a JSON with success: false.
30
- }
31
-
32
- const output = JSON.parse(result.stdout);
33
- if (output.status === "error") {
34
- throw new Error(`Failed to run Playwright: ${output.message}`);
35
- }
36
-
37
- return {
38
- success: output.success,
39
- command: output.command,
40
- failedTests: output.failedTests
41
- };
42
- }