@arii/boomtick-mcp 0.6.1 → 0.7.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 (141) hide show
  1. package/.mcp/schemas/boomtick.health.json +22 -3
  2. package/.mcp/schemas/boomtick_health.json +22 -3
  3. package/.mcp/schemas/github.checkout_branch.json +16 -3
  4. package/.mcp/schemas/github.comment_triage_summary.json +16 -3
  5. package/.mcp/schemas/github.create_issue.json +72 -3
  6. package/.mcp/schemas/github.create_pull_request.json +16 -3
  7. package/.mcp/schemas/github.get_merge_conflict_files.json +40 -3
  8. package/.mcp/schemas/github.get_pr.json +12 -3
  9. package/.mcp/schemas/github.get_pr_commits.json +12 -3
  10. package/.mcp/schemas/github.get_pr_diff.json +30 -3
  11. package/.mcp/schemas/github.get_pr_reviews.json +24 -3
  12. package/.mcp/schemas/github.issue_comment.json +19 -3
  13. package/.mcp/schemas/github.issue_update.json +72 -3
  14. package/.mcp/schemas/github.issue_view.json +17 -3
  15. package/.mcp/schemas/github.open_replacement_pr.json +16 -3
  16. package/.mcp/schemas/github.search_open_prs.json +130 -3
  17. package/.mcp/schemas/github_checkout_branch.json +16 -3
  18. package/.mcp/schemas/github_comment_triage_summary.json +16 -3
  19. package/.mcp/schemas/github_create_issue.json +72 -3
  20. package/.mcp/schemas/github_create_pull_request.json +16 -3
  21. package/.mcp/schemas/github_get_merge_conflict_files.json +40 -3
  22. package/.mcp/schemas/github_get_pr.json +12 -3
  23. package/.mcp/schemas/github_get_pr_commits.json +12 -3
  24. package/.mcp/schemas/github_get_pr_diff.json +30 -3
  25. package/.mcp/schemas/github_get_pr_reviews.json +24 -3
  26. package/.mcp/schemas/github_issue_comment.json +19 -3
  27. package/.mcp/schemas/github_issue_update.json +72 -3
  28. package/.mcp/schemas/github_issue_view.json +17 -3
  29. package/.mcp/schemas/github_open_replacement_pr.json +16 -3
  30. package/.mcp/schemas/github_search_open_prs.json +130 -3
  31. package/.mcp/schemas/jules.cancel_session.json +38 -3
  32. package/.mcp/schemas/jules.create_session.json +52 -3
  33. package/.mcp/schemas/jules.get_messages.json +19 -3
  34. package/.mcp/schemas/jules.get_pr.json +23 -3
  35. package/.mcp/schemas/jules.get_session.json +38 -3
  36. package/.mcp/schemas/jules.list_sessions.json +53 -3
  37. package/.mcp/schemas/jules.send_message.json +31 -3
  38. package/.mcp/schemas/jules.trigger_feedback.json +28 -3
  39. package/.mcp/schemas/jules_cancel_session.json +38 -3
  40. package/.mcp/schemas/jules_create_session.json +52 -3
  41. package/.mcp/schemas/jules_get_messages.json +19 -3
  42. package/.mcp/schemas/jules_get_pr.json +23 -3
  43. package/.mcp/schemas/jules_get_session.json +38 -3
  44. package/.mcp/schemas/jules_list_sessions.json +53 -3
  45. package/.mcp/schemas/jules_send_message.json +31 -3
  46. package/.mcp/schemas/jules_trigger_feedback.json +28 -3
  47. package/.mcp/schemas/repo.check_jules_status.json +128 -0
  48. package/.mcp/schemas/repo.commit_patch.json +23 -3
  49. package/.mcp/schemas/repo.create_branch.json +28 -3
  50. package/.mcp/schemas/repo.create_repair_branch.json +31 -3
  51. package/.mcp/schemas/repo.get_changed_files.json +11 -3
  52. package/.mcp/schemas/repo.get_command_schema.json +29 -3
  53. package/.mcp/schemas/repo.get_package_scripts.json +11 -3
  54. package/.mcp/schemas/repo.get_workflow_runs.json +12 -3
  55. package/.mcp/schemas/repo.logs.json +14 -3
  56. package/.mcp/schemas/repo.multi_exec.json +89 -0
  57. package/.mcp/schemas/repo.read_agent_context.json +117 -5
  58. package/.mcp/schemas/repo.read_ci_logs.json +46 -3
  59. package/.mcp/schemas/repo.run_tests.json +31 -3
  60. package/.mcp/schemas/repo_check_jules_status.json +128 -0
  61. package/.mcp/schemas/repo_commit_patch.json +23 -3
  62. package/.mcp/schemas/repo_create_branch.json +28 -3
  63. package/.mcp/schemas/repo_create_repair_branch.json +31 -3
  64. package/.mcp/schemas/repo_get_changed_files.json +11 -3
  65. package/.mcp/schemas/repo_get_command_schema.json +29 -3
  66. package/.mcp/schemas/repo_get_package_scripts.json +11 -3
  67. package/.mcp/schemas/repo_get_workflow_runs.json +12 -3
  68. package/.mcp/schemas/repo_logs.json +14 -3
  69. package/.mcp/schemas/repo_multi_exec.json +89 -0
  70. package/.mcp/schemas/repo_read_agent_context.json +117 -5
  71. package/.mcp/schemas/repo_read_ci_logs.json +46 -3
  72. package/.mcp/schemas/repo_run_tests.json +31 -3
  73. package/CHANGELOG.md +22 -0
  74. package/README.md +29 -6
  75. package/actions/run-project-gate/action.yml +1 -1
  76. package/dist/config/dynamic.js +34 -0
  77. package/dist/config/github.js +16 -0
  78. package/dist/config/repo.js +28 -0
  79. package/dist/config.js +16 -81
  80. package/dist/config.test.js +10 -3
  81. package/dist/http.js +10 -0
  82. package/dist/mcp/definitions.js +76 -41
  83. package/dist/mcp/http.js +32 -9
  84. package/dist/mcp/http.test.js +62 -4
  85. package/dist/mcp/server.js +69 -10
  86. package/dist/mcp/server.test.js +59 -1
  87. package/dist/tools/contract.js +1079 -45
  88. package/dist/tools/github.comment_triage_summary.js +3 -10
  89. package/dist/tools/github.get_merge_conflict_files.js +4 -2
  90. package/dist/tools/github.get_pr_diff.js +3 -11
  91. package/dist/tools/jules/cancel-session.js +2 -9
  92. package/dist/tools/jules/cli.js +31 -0
  93. package/dist/tools/jules/create-session.js +12 -2
  94. package/dist/tools/jules/create-session.test.js +7 -0
  95. package/dist/tools/jules/get-messages.js +2 -9
  96. package/dist/tools/jules/list-sessions.js +4 -35
  97. package/dist/tools/jules/send-message.js +2 -9
  98. package/dist/tools/jules/session.js +26 -0
  99. package/dist/tools/jules/shared.js +2 -50
  100. package/dist/tools/jules/trigger-feedback.js +2 -10
  101. package/dist/tools/repo.check_jules_status.js +148 -0
  102. package/dist/tools/repo.check_jules_status.test.js +47 -0
  103. package/dist/tools/repo.multi_exec.js +21 -0
  104. package/dist/tools/repo.multi_exec.test.js +13 -0
  105. package/dist/tools/repo.read_agent_context.js +65 -3
  106. package/dist/tools/repo.read_agent_context.test.js +30 -1
  107. package/dist/tools/repo.run_tests.js +13 -1
  108. package/package.json +3 -2
  109. package/scripts/sync-contracts.ts +11 -2
  110. package/src/config/dynamic.ts +37 -0
  111. package/src/config/github.ts +16 -0
  112. package/src/config/repo.ts +36 -0
  113. package/src/config.test.ts +11 -3
  114. package/src/config.ts +16 -89
  115. package/src/http.ts +13 -0
  116. package/src/mcp/definitions.ts +110 -41
  117. package/src/mcp/http.test.ts +75 -5
  118. package/src/mcp/http.ts +40 -14
  119. package/src/mcp/server.test.ts +72 -1
  120. package/src/mcp/server.ts +72 -11
  121. package/src/tools/contract.ts +1194 -36
  122. package/src/tools/github.comment_triage_summary.ts +3 -12
  123. package/src/tools/github.get_merge_conflict_files.ts +5 -2
  124. package/src/tools/github.get_pr_diff.ts +3 -13
  125. package/src/tools/jules/cancel-session.ts +2 -11
  126. package/src/tools/jules/cli.ts +42 -0
  127. package/src/tools/jules/create-session.test.ts +9 -0
  128. package/src/tools/jules/create-session.ts +13 -2
  129. package/src/tools/jules/get-messages.ts +2 -11
  130. package/src/tools/jules/list-sessions.ts +5 -39
  131. package/src/tools/jules/send-message.ts +2 -11
  132. package/src/tools/jules/session.ts +28 -0
  133. package/src/tools/jules/shared.ts +2 -63
  134. package/src/tools/jules/trigger-feedback.ts +2 -13
  135. package/src/tools/repo.check_jules_status.test.ts +55 -0
  136. package/src/tools/repo.check_jules_status.ts +176 -0
  137. package/src/tools/repo.multi_exec.test.ts +15 -0
  138. package/src/tools/repo.multi_exec.ts +23 -0
  139. package/src/tools/repo.read_agent_context.test.ts +35 -1
  140. package/src/tools/repo.read_agent_context.ts +68 -3
  141. package/src/tools/repo.run_tests.ts +14 -1
@@ -79,12 +79,16 @@ describe("BoomtickMCPServer", () => {
79
79
  });
80
80
  });
81
81
  describe("ListResources", () => {
82
- it("should return resources list", async () => {
82
+ it("should return resources list containing workspace resources", async () => {
83
83
  const handler = requestHandlers.get("resources/list");
84
84
  expect(handler).toBeDefined();
85
85
  const result = await handler({ method: "resources/list" });
86
86
  expect(result.resources).toBeDefined();
87
87
  expect(Array.isArray(result.resources)).toBe(true);
88
+ const uris = result.resources.map((r) => r.uri);
89
+ expect(uris).toContain("mcp://workspace/agent-contract");
90
+ expect(uris).toContain("mcp://git/changed-files");
91
+ expect(uris).toContain("mcp://ci/latest-run");
88
92
  });
89
93
  it("should return resource templates list", async () => {
90
94
  const handler = requestHandlers.get("resources/templates/list");
@@ -150,6 +154,50 @@ describe("BoomtickMCPServer", () => {
150
154
  expect(result.contents[0].uri).toBe("repo://ci/42");
151
155
  expect(JSON.parse(result.contents[0].text)).toEqual({ status: "success" });
152
156
  });
157
+ it("should handle mcp://git/changed-files", async () => {
158
+ const handler = requestHandlers.get("resources/read");
159
+ const changedFilesModule = await import("../tools/repo.get_changed_files.js");
160
+ vi.spyOn(changedFilesModule, "getChangedFilesHandler").mockResolvedValue({ files: ["src/index.ts"] });
161
+ const result = await handler({
162
+ method: "resources/read",
163
+ params: { uri: "mcp://git/changed-files" },
164
+ });
165
+ expect(result.contents[0].uri).toBe("mcp://git/changed-files");
166
+ expect(result.contents[0].mimeType).toBe("application/json");
167
+ expect(JSON.parse(result.contents[0].text)).toEqual({ files: ["src/index.ts"] });
168
+ });
169
+ it("should handle mcp://workspace/project-config", async () => {
170
+ const handler = requestHandlers.get("resources/read");
171
+ vi.mocked(fs.readFile).mockResolvedValue('{"packageName": "boomtick"}');
172
+ const result = await handler({
173
+ method: "resources/read",
174
+ params: { uri: "mcp://workspace/project-config" },
175
+ });
176
+ expect(result.contents[0].uri).toBe("mcp://workspace/project-config");
177
+ expect(result.contents[0].mimeType).toBe("application/json");
178
+ expect(JSON.parse(result.contents[0].text)).toEqual({ packageName: "boomtick" });
179
+ });
180
+ it("should handle mcp://git/status", async () => {
181
+ const handler = requestHandlers.get("resources/read");
182
+ const result = await handler({
183
+ method: "resources/read",
184
+ params: { uri: "mcp://git/status" },
185
+ });
186
+ expect(result.contents[0].uri).toBe("mcp://git/status");
187
+ expect(result.contents[0].mimeType).toBe("application/json");
188
+ expect(JSON.parse(result.contents[0].text)).toHaveProperty("status");
189
+ });
190
+ it("should handle mcp://ci/latest-run", async () => {
191
+ const handler = requestHandlers.get("resources/read");
192
+ vi.spyOn(workflowRunsModule, "getWorkflowRunsHandler").mockResolvedValue({ workflowRuns: [{ id: 1, status: "completed", conclusion: "success" }] });
193
+ const result = await handler({
194
+ method: "resources/read",
195
+ params: { uri: "mcp://ci/latest-run" },
196
+ });
197
+ expect(result.contents[0].uri).toBe("mcp://ci/latest-run");
198
+ expect(result.contents[0].mimeType).toBe("application/json");
199
+ expect(JSON.parse(result.contents[0].text)).toEqual({ workflowRuns: [{ id: 1, status: "completed", conclusion: "success" }] });
200
+ });
153
201
  it("should throw when resource is unknown", async () => {
154
202
  const handler = requestHandlers.get("resources/read");
155
203
  await expect(handler({
@@ -166,6 +214,16 @@ describe("BoomtickMCPServer", () => {
166
214
  expect(result.tools).toBeDefined();
167
215
  expect(Array.isArray(result.tools)).toBe(true);
168
216
  });
217
+ it("should ensure all tools have typed outputSchema and none are empty or untyped DEFAULT_OUTPUT_SCHEMA", async () => {
218
+ const handler = requestHandlers.get("tools/list");
219
+ const result = await handler({ method: "tools/list" });
220
+ for (const tool of result.tools) {
221
+ expect(tool.outputSchema).toBeDefined();
222
+ expect(tool.outputSchema.type).toBe("object");
223
+ expect(tool.outputSchema.properties).toBeDefined();
224
+ expect(Object.keys(tool.outputSchema.properties).length).toBeGreaterThan(0);
225
+ }
226
+ });
169
227
  });
170
228
  describe("CallTool", () => {
171
229
  it("should execute registered tool handler successfully", async () => {