@arii/boomtick-mcp 0.5.0 → 0.6.1
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 +5 -0
- package/.mcp/schemas/boomtick_health.json +5 -0
- package/.mcp/schemas/github.checkout_branch.json +5 -0
- package/.mcp/schemas/github.comment_triage_summary.json +5 -0
- package/.mcp/schemas/github.create_issue.json +5 -0
- package/.mcp/schemas/github.create_pull_request.json +5 -0
- package/.mcp/schemas/github.get_merge_conflict_files.json +5 -0
- package/.mcp/schemas/github.get_pr.json +5 -0
- package/.mcp/schemas/github.get_pr_commits.json +5 -0
- package/.mcp/schemas/github.get_pr_diff.json +5 -0
- package/.mcp/schemas/github.get_pr_reviews.json +5 -0
- package/.mcp/schemas/github.issue_comment.json +5 -0
- package/.mcp/schemas/github.issue_update.json +5 -0
- package/.mcp/schemas/github.issue_view.json +5 -0
- package/.mcp/schemas/github.open_replacement_pr.json +5 -0
- package/.mcp/schemas/github.search_open_prs.json +5 -0
- package/.mcp/schemas/github_checkout_branch.json +5 -0
- package/.mcp/schemas/github_comment_triage_summary.json +5 -0
- package/.mcp/schemas/github_create_issue.json +5 -0
- package/.mcp/schemas/github_create_pull_request.json +5 -0
- package/.mcp/schemas/github_get_merge_conflict_files.json +5 -0
- package/.mcp/schemas/github_get_pr.json +5 -0
- package/.mcp/schemas/github_get_pr_commits.json +5 -0
- package/.mcp/schemas/github_get_pr_diff.json +5 -0
- package/.mcp/schemas/github_get_pr_reviews.json +5 -0
- package/.mcp/schemas/github_issue_comment.json +5 -0
- package/.mcp/schemas/github_issue_update.json +5 -0
- package/.mcp/schemas/github_issue_view.json +5 -0
- package/.mcp/schemas/github_open_replacement_pr.json +5 -0
- package/.mcp/schemas/github_search_open_prs.json +5 -0
- package/.mcp/schemas/jules.cancel_session.json +5 -0
- package/.mcp/schemas/jules.create_session.json +5 -0
- package/.mcp/schemas/jules.get_messages.json +5 -0
- package/.mcp/schemas/jules.get_pr.json +5 -0
- package/.mcp/schemas/jules.get_session.json +5 -0
- package/.mcp/schemas/jules.list_sessions.json +5 -0
- package/.mcp/schemas/jules.send_message.json +5 -0
- package/.mcp/schemas/jules.trigger_feedback.json +5 -0
- package/.mcp/schemas/jules_cancel_session.json +5 -0
- package/.mcp/schemas/jules_create_session.json +5 -0
- package/.mcp/schemas/jules_get_messages.json +5 -0
- package/.mcp/schemas/jules_get_pr.json +5 -0
- package/.mcp/schemas/jules_get_session.json +5 -0
- package/.mcp/schemas/jules_list_sessions.json +5 -0
- package/.mcp/schemas/jules_send_message.json +5 -0
- package/.mcp/schemas/jules_trigger_feedback.json +5 -0
- package/.mcp/schemas/repo.commit_patch.json +5 -0
- package/.mcp/schemas/repo.create_branch.json +5 -0
- package/.mcp/schemas/repo.create_repair_branch.json +5 -0
- package/.mcp/schemas/repo.get_changed_files.json +5 -0
- package/.mcp/schemas/repo.get_command_schema.json +6 -1
- package/.mcp/schemas/repo.get_package_scripts.json +5 -0
- package/.mcp/schemas/repo.get_workflow_runs.json +5 -0
- package/.mcp/schemas/repo.logs.json +5 -0
- package/.mcp/schemas/repo.read_agent_context.json +5 -0
- package/.mcp/schemas/repo.read_ci_logs.json +5 -0
- package/.mcp/schemas/repo.run_tests.json +5 -0
- package/.mcp/schemas/repo_commit_patch.json +5 -0
- package/.mcp/schemas/repo_create_branch.json +5 -0
- package/.mcp/schemas/repo_create_repair_branch.json +5 -0
- package/.mcp/schemas/repo_get_changed_files.json +5 -0
- package/.mcp/schemas/repo_get_command_schema.json +6 -1
- package/.mcp/schemas/repo_get_package_scripts.json +5 -0
- package/.mcp/schemas/repo_get_workflow_runs.json +5 -0
- package/.mcp/schemas/repo_logs.json +5 -0
- package/.mcp/schemas/repo_read_agent_context.json +5 -0
- package/.mcp/schemas/repo_read_ci_logs.json +5 -0
- package/.mcp/schemas/repo_run_tests.json +5 -0
- package/CHANGELOG.md +14 -0
- package/actions/ai-review/action.yml +2 -2
- package/actions/audit/action.yml +1 -1
- package/actions/ci-validate/action.yml +2 -2
- package/actions/impact-analysis/action.yml +3 -3
- package/actions/run-project-gate/action.yml +5 -5
- package/actions/setup/action.yml +1 -1
- package/actions/test-build/action.yml +1 -1
- package/dist/config.js +1 -1
- package/dist/config.test.js +3 -3
- package/dist/lib/result.js +4 -0
- package/dist/lib/result.test.js +4 -2
- package/dist/lib/shell.js +6 -6
- package/dist/mcp/definitions.js +73 -2
- package/dist/mcp/http.js +91 -0
- package/dist/mcp/http.test.js +58 -0
- package/dist/mcp/server.js +65 -13
- package/dist/mcp/server.test.js +44 -0
- package/dist/tools/contract.js +109 -1
- package/dist/tools/github.checkout_branch.js +1 -1
- package/dist/tools/github.comment_triage_summary.js +1 -1
- package/dist/tools/github.create_issue.js +1 -1
- package/dist/tools/github.create_issue.test.js +6 -6
- package/dist/tools/github.create_pull_request.js +1 -1
- package/dist/tools/github.create_pull_request.test.js +4 -4
- package/dist/tools/github.get_pr.js +1 -1
- package/dist/tools/github.get_pr_commits.js +2 -2
- package/dist/tools/github.get_pr_diff.js +1 -1
- package/dist/tools/github.get_pr_reviews.js +2 -2
- package/dist/tools/github.get_pr_reviews.test.js +9 -9
- package/dist/tools/github.issue_comment.js +1 -1
- package/dist/tools/github.issue_update.js +1 -1
- package/dist/tools/github.issue_view.js +1 -1
- package/dist/tools/github.search_open_prs.js +1 -1
- package/dist/tools/jules/cancel-session.js +1 -1
- package/dist/tools/jules/create-session.test.js +11 -11
- package/dist/tools/jules/get-messages.js +1 -1
- package/dist/tools/jules/get-messages.test.js +3 -3
- package/dist/tools/jules/get-pr.test.js +3 -3
- package/dist/tools/jules/list-sessions.js +1 -1
- package/dist/tools/jules/send-message.js +1 -1
- package/dist/tools/jules/send-message.test.js +5 -5
- package/dist/tools/jules/shared.js +4 -4
- package/dist/tools/jules/trigger-feedback.js +1 -1
- package/dist/tools/jules/trigger-feedback.test.js +5 -5
- package/dist/tools/repo.get_command_schema.js +2 -2
- package/dist/tools/repo.get_workflow_runs.js +2 -2
- package/package.json +1 -1
- package/scripts/sync-mcp-schemas.ts +2 -0
- package/src/config.test.ts +3 -3
- package/src/config.ts +1 -1
- package/src/lib/result.test.ts +4 -2
- package/src/lib/result.ts +6 -0
- package/src/lib/shell.ts +6 -6
- package/src/mcp/definitions.ts +76 -3
- package/src/mcp/http.test.ts +72 -0
- package/src/mcp/http.ts +118 -0
- package/src/mcp/server.test.ts +52 -0
- package/src/mcp/server.ts +75 -12
- package/src/tools/contract.ts +109 -1
- package/src/tools/github.checkout_branch.ts +1 -1
- package/src/tools/github.comment_triage_summary.ts +1 -1
- package/src/tools/github.create_issue.test.ts +6 -6
- package/src/tools/github.create_issue.ts +1 -1
- package/src/tools/github.create_pull_request.test.ts +4 -4
- package/src/tools/github.create_pull_request.ts +1 -1
- package/src/tools/github.get_pr.ts +1 -1
- package/src/tools/github.get_pr_commits.ts +2 -2
- package/src/tools/github.get_pr_diff.ts +1 -1
- package/src/tools/github.get_pr_reviews.test.ts +9 -9
- package/src/tools/github.get_pr_reviews.ts +2 -2
- package/src/tools/github.issue_comment.ts +1 -1
- package/src/tools/github.issue_update.ts +1 -1
- package/src/tools/github.issue_view.ts +1 -1
- package/src/tools/github.search_open_prs.ts +1 -1
- package/src/tools/jules/cancel-session.ts +1 -1
- package/src/tools/jules/create-session.test.ts +11 -11
- package/src/tools/jules/get-messages.test.ts +3 -3
- package/src/tools/jules/get-messages.ts +1 -1
- package/src/tools/jules/get-pr.test.ts +3 -3
- package/src/tools/jules/list-sessions.ts +1 -1
- package/src/tools/jules/send-message.test.ts +5 -5
- package/src/tools/jules/send-message.ts +1 -1
- package/src/tools/jules/shared.ts +4 -4
- package/src/tools/jules/trigger-feedback.test.ts +5 -5
- package/src/tools/jules/trigger-feedback.ts +1 -1
- package/src/tools/repo.get_command_schema.ts +2 -2
- package/src/tools/repo.get_workflow_runs.ts +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "repo_get_command_schema",
|
|
3
|
-
"description": "Retrieve a lightweight, targeted schema for a specific td
|
|
3
|
+
"description": "Retrieve a lightweight, targeted schema for a specific td subcommand. Use this instead of reading the entire cli-schema.json to save tokens.",
|
|
4
4
|
"parameters": {
|
|
5
5
|
"properties": {
|
|
6
6
|
"commandPath": {
|
|
@@ -14,5 +14,10 @@
|
|
|
14
14
|
],
|
|
15
15
|
"title": "GetCommandSchemaInput",
|
|
16
16
|
"type": "object"
|
|
17
|
+
},
|
|
18
|
+
"outputSchema": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {},
|
|
21
|
+
"additionalProperties": true
|
|
17
22
|
}
|
|
18
23
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.1](https://github.com/arii/boomtick/compare/mcp-v0.6.0...mcp-v0.6.1) (2026-10-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **mcp:** mount missing handlers for github_get_pr_reviews, github_get_pr_commits, and repo_get_workflow_runs [skip-scope-check] ([#916](https://github.com/arii/boomtick/issues/916)) ([60a2851](https://github.com/arii/boomtick/commit/60a2851a2f2d5ac8010422796573b7ea20bb6767))
|
|
9
|
+
|
|
10
|
+
## [0.6.0](https://github.com/arii/boomtick/compare/mcp-v0.5.0...mcp-v0.6.0) (2026-10-22)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* aggregate PRs 908, 893, 895, 896, 897, 898 (canonical td migration, modern MCP, multi-target release, code intelligence, container suggestions) ([#910](https://github.com/arii/boomtick/issues/910)) ([3636191](https://github.com/arii/boomtick/commit/36361910cf0a2d9b8648a951e3338143520bb664))
|
|
16
|
+
|
|
3
17
|
## [0.5.0](https://github.com/arii/boomtick/compare/mcp-v0.4.2...mcp-v0.5.0) (2026-10-19)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: BoomTick AI Review
|
|
2
|
-
description: Runs AI code review via td
|
|
2
|
+
description: Runs AI code review via td CLI
|
|
3
3
|
inputs:
|
|
4
4
|
pr_number:
|
|
5
5
|
description: PR number to review
|
|
@@ -16,5 +16,5 @@ runs:
|
|
|
16
16
|
echo "::error::Invalid PR_NUMBER: must be numeric."
|
|
17
17
|
exit 1
|
|
18
18
|
fi
|
|
19
|
-
td
|
|
19
|
+
td gh audit-pr "$PR_NUMBER" --fetch --audit --submit --execute
|
|
20
20
|
shell: bash
|
package/actions/audit/action.yml
CHANGED
|
@@ -21,7 +21,7 @@ runs:
|
|
|
21
21
|
trap 'echo "::endgroup::"' EXIT
|
|
22
22
|
export PATH="$HOME/.local/bin:/github/home/.local/bin:$PATH"
|
|
23
23
|
if ! node scripts/detect-antipatterns.mjs; then echo "Audit failed"; exit 1; fi
|
|
24
|
-
td
|
|
24
|
+
td gh audit-gate
|
|
25
25
|
shell: bash
|
|
26
26
|
|
|
27
27
|
- name: Design Token Compliance
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
name: BoomTick CI Validate
|
|
2
|
-
description: Runs pre-submit checks via td
|
|
2
|
+
description: Runs pre-submit checks via td CLI
|
|
3
3
|
runs:
|
|
4
4
|
using: composite
|
|
5
5
|
steps:
|
|
6
6
|
- uses: arii/boomtick/mcp/actions/setup@main
|
|
7
7
|
- name: Pre-submit gate
|
|
8
|
-
run: td
|
|
8
|
+
run: td gh pre-submit
|
|
9
9
|
shell: bash
|
|
@@ -426,7 +426,7 @@ runs:
|
|
|
426
426
|
env:
|
|
427
427
|
GITHUB_TOKEN: ${{ inputs.github_token }}
|
|
428
428
|
run: |
|
|
429
|
-
# Inject custom CLI path for td
|
|
429
|
+
# Inject custom CLI path for td resolution
|
|
430
430
|
PYTHON_SCRIPTS_PATH=$(python3 -c "import sysconfig; print(sysconfig.get_path('scripts'))")
|
|
431
431
|
export PATH="$PYTHON_SCRIPTS_PATH:$HOME/.local/bin:/github/home/.local/bin:$PATH"
|
|
432
432
|
|
|
@@ -436,8 +436,8 @@ runs:
|
|
|
436
436
|
fi
|
|
437
437
|
|
|
438
438
|
mkdir -p .boomtick/logs/ai
|
|
439
|
-
td
|
|
440
|
-
if ! td
|
|
439
|
+
td gh summary-report >> "$GITHUB_STEP_SUMMARY"
|
|
440
|
+
if ! td gh verify-metrics; then
|
|
441
441
|
echo "CI Metrics verification failed."
|
|
442
442
|
exit 1
|
|
443
443
|
fi
|
|
@@ -91,8 +91,8 @@ runs:
|
|
|
91
91
|
FILTER_PATH: ${{ steps.resolve-paths.outputs.FILTER_PATH }}
|
|
92
92
|
run: |
|
|
93
93
|
if [ "$TARGET" = "boomtick-mcp" ]; then
|
|
94
|
-
if command -v td
|
|
95
|
-
PYTHONPATH="$CLI_PATH" td
|
|
94
|
+
if command -v td >/dev/null 2>&1; then
|
|
95
|
+
PYTHONPATH="$CLI_PATH" td schema --generate
|
|
96
96
|
else
|
|
97
97
|
PYTHONPATH="$CLI_PATH" python3 "$CLI_PATH/dev_tools/schema_gen.py"
|
|
98
98
|
fi
|
|
@@ -139,8 +139,8 @@ runs:
|
|
|
139
139
|
run: |
|
|
140
140
|
echo "::group::Pytest"
|
|
141
141
|
trap 'echo "::endgroup::"' EXIT
|
|
142
|
-
if command -v td
|
|
143
|
-
PYTHONPATH="$CLI_PATH" td
|
|
142
|
+
if command -v td >/dev/null 2>&1; then
|
|
143
|
+
PYTHONPATH="$CLI_PATH" td test cli
|
|
144
144
|
else
|
|
145
145
|
PYTHONPATH="$CLI_PATH:$CLI_PATH/dev_tools" python3 -m pytest "$CLI_PATH/tests/"
|
|
146
146
|
fi
|
|
@@ -158,7 +158,7 @@ runs:
|
|
|
158
158
|
trap 'echo "::endgroup::"' EXIT
|
|
159
159
|
export PYTHONPATH="${{ steps.resolve-paths.outputs.CLI_PATH }}:${{ steps.resolve-paths.outputs.CLI_PATH }}/dev_tools"
|
|
160
160
|
export PATH="$HOME/.local/bin:/github/home/.local/bin:$PATH"
|
|
161
|
-
td
|
|
161
|
+
td gh ratchet-any
|
|
162
162
|
env:
|
|
163
163
|
GITHUB_TOKEN: ${{ inputs.github_token }}
|
|
164
164
|
shell: bash
|
package/actions/setup/action.yml
CHANGED
package/dist/config.js
CHANGED
|
@@ -37,7 +37,7 @@ export function initializeConfig() {
|
|
|
37
37
|
try {
|
|
38
38
|
// Attempt to load core properties from the Python CLI in the active workspace
|
|
39
39
|
const cwd = process.env.BOOMTICK_REPO_PATH || process.cwd();
|
|
40
|
-
const cmd = `td
|
|
40
|
+
const cmd = `td config view`;
|
|
41
41
|
const output = execSync(cmd, {
|
|
42
42
|
cwd,
|
|
43
43
|
encoding: "utf-8",
|
package/dist/config.test.js
CHANGED
|
@@ -15,12 +15,12 @@ describe("config", () => {
|
|
|
15
15
|
process.env = originalEnv;
|
|
16
16
|
});
|
|
17
17
|
describe("initializeConfig", () => {
|
|
18
|
-
it("should load dynamic config from td
|
|
18
|
+
it("should load dynamic config from td config view using active cwd", async () => {
|
|
19
19
|
const mockConfig = { github_repo: "owner/repo", base_branch: "origin/main", vite_base_path: "/app/" };
|
|
20
20
|
vi.mocked(execSync).mockReturnValue(JSON.stringify(mockConfig));
|
|
21
21
|
const { initializeConfig } = await import("./config.js");
|
|
22
22
|
const result = initializeConfig();
|
|
23
|
-
expect(execSync).toHaveBeenCalledWith("td
|
|
23
|
+
expect(execSync).toHaveBeenCalledWith("td config view", expect.objectContaining({
|
|
24
24
|
cwd: process.cwd()
|
|
25
25
|
}));
|
|
26
26
|
expect(result).toEqual(mockConfig);
|
|
@@ -93,7 +93,7 @@ describe("config", () => {
|
|
|
93
93
|
delete process.env.GITHUB_REPOSITORY;
|
|
94
94
|
delete process.env.GH_REPO;
|
|
95
95
|
vi.mocked(execSync).mockImplementation(() => {
|
|
96
|
-
throw new Error("td
|
|
96
|
+
throw new Error("td failed");
|
|
97
97
|
});
|
|
98
98
|
process.env.NODE_ENV = "production";
|
|
99
99
|
process.env.CI = "false";
|
package/dist/lib/result.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export function createSuccessResult(data) {
|
|
2
|
+
const structuredContent = typeof data === "object" && data !== null
|
|
3
|
+
? data
|
|
4
|
+
: { result: data };
|
|
2
5
|
return {
|
|
3
6
|
content: [
|
|
4
7
|
{
|
|
@@ -6,6 +9,7 @@ export function createSuccessResult(data) {
|
|
|
6
9
|
text: typeof data === "string" ? data : JSON.stringify(data, null, 2),
|
|
7
10
|
},
|
|
8
11
|
],
|
|
12
|
+
structuredContent,
|
|
9
13
|
};
|
|
10
14
|
}
|
|
11
15
|
export function createErrorResult(message) {
|
package/dist/lib/result.test.js
CHANGED
|
@@ -2,7 +2,7 @@ import { describe, it, expect } from "vitest";
|
|
|
2
2
|
import { createSuccessResult, createErrorResult } from "./result.js";
|
|
3
3
|
describe("result utils", () => {
|
|
4
4
|
describe("createSuccessResult", () => {
|
|
5
|
-
it("should format string data directly without JSON stringifying", () => {
|
|
5
|
+
it("should format string data directly without JSON stringifying and provide structuredContent", () => {
|
|
6
6
|
const result = createSuccessResult("simple string message");
|
|
7
7
|
expect(result).toEqual({
|
|
8
8
|
content: [
|
|
@@ -11,10 +11,11 @@ describe("result utils", () => {
|
|
|
11
11
|
text: "simple string message",
|
|
12
12
|
},
|
|
13
13
|
],
|
|
14
|
+
structuredContent: { result: "simple string message" },
|
|
14
15
|
});
|
|
15
16
|
expect(result.isError).toBeUndefined();
|
|
16
17
|
});
|
|
17
|
-
it("should format object data as pretty-printed JSON string", () => {
|
|
18
|
+
it("should format object data as pretty-printed JSON string and provide structuredContent", () => {
|
|
18
19
|
const objData = { foo: "bar", count: 42 };
|
|
19
20
|
const result = createSuccessResult(objData);
|
|
20
21
|
expect(result).toEqual({
|
|
@@ -24,6 +25,7 @@ describe("result utils", () => {
|
|
|
24
25
|
text: JSON.stringify(objData, null, 2),
|
|
25
26
|
},
|
|
26
27
|
],
|
|
28
|
+
structuredContent: objData,
|
|
27
29
|
});
|
|
28
30
|
expect(result.isError).toBeUndefined();
|
|
29
31
|
});
|
package/dist/lib/shell.js
CHANGED
|
@@ -5,7 +5,7 @@ import fs from "fs";
|
|
|
5
5
|
export const ALLOWED_COMMANDS = {
|
|
6
6
|
git: "git",
|
|
7
7
|
gh: "gh",
|
|
8
|
-
|
|
8
|
+
td: "td",
|
|
9
9
|
pnpm: "pnpm",
|
|
10
10
|
ls: "ls",
|
|
11
11
|
rm: "rm",
|
|
@@ -20,16 +20,16 @@ export async function runCommand(cmd, args, options = {}) {
|
|
|
20
20
|
const safeCmd = cmd;
|
|
21
21
|
const start = Date.now();
|
|
22
22
|
const timeout = options.timeout || 60000;
|
|
23
|
-
// Resolve path for 'gh' or 'td
|
|
23
|
+
// Resolve path for 'gh' or 'td' if specified
|
|
24
24
|
let finalCmd = ALLOWED_COMMANDS[safeCmd];
|
|
25
25
|
if (safeCmd === "gh") {
|
|
26
26
|
finalCmd = config.ghPath;
|
|
27
27
|
}
|
|
28
|
-
else if (safeCmd === "td
|
|
28
|
+
else if (safeCmd === "td") {
|
|
29
29
|
// If we have a repo-relative .venv, prioritize it
|
|
30
|
-
const venvBin = path.join(config.repoPath, ".venv", "bin", "td
|
|
31
|
-
const localVenvBin = path.join(process.cwd(), ".venv", "bin", "td
|
|
32
|
-
const parentVenvBin = path.join(config.repoPath, "..", ".venv", "bin", "td
|
|
30
|
+
const venvBin = path.join(config.repoPath, ".venv", "bin", "td");
|
|
31
|
+
const localVenvBin = path.join(process.cwd(), ".venv", "bin", "td");
|
|
32
|
+
const parentVenvBin = path.join(config.repoPath, "..", ".venv", "bin", "td");
|
|
33
33
|
// In standalone mode, config.repoPath is the boomtick-pkg root.
|
|
34
34
|
// We check common venv locations to ensure we call the isolated binary.
|
|
35
35
|
if (fs.existsSync(venvBin)) {
|