@arii/boomtick-mcp 0.3.5 → 0.3.6
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/github.issue_update.json +5 -1
- package/.mcp/schemas/github.search_open_prs.json +8 -1
- package/CHANGELOG.md +9 -0
- package/actions/ai-review/action.yml +1 -1
- package/actions/audit/action.yml +1 -1
- package/actions/ci-validate/action.yml +1 -1
- package/actions/impact-analysis/action.yml +10 -3
- package/actions/lint-typecheck/action.yml +2 -2
- package/actions/setup/action.yml +1 -1
- package/actions/test-build/action.yml +1 -1
- package/dist/lib/td-cli.js +27 -0
- package/dist/tools/contract.js +1085 -151
- package/dist/tools/github.get_pr_diff.js +1 -1
- package/dist/tools/repo.read_agent_context.js +10 -14
- package/dist/tools/repo.read_agent_context.test.js +10 -0
- package/package.json +4 -3
- package/scripts/sync-contracts.ts +216 -6
- package/src/lib/td-cli.ts +35 -0
- package/src/tools/contract.ts +1844 -878
- package/src/tools/github.get_pr_diff.ts +1 -1
- package/src/tools/repo.read_agent_context.test.ts +11 -0
- package/src/tools/repo.read_agent_context.ts +10 -14
|
@@ -82,6 +82,10 @@
|
|
|
82
82
|
"state": {
|
|
83
83
|
"anyOf": [
|
|
84
84
|
{
|
|
85
|
+
"enum": [
|
|
86
|
+
"open",
|
|
87
|
+
"closed"
|
|
88
|
+
],
|
|
85
89
|
"type": "string"
|
|
86
90
|
},
|
|
87
91
|
{
|
|
@@ -89,7 +93,7 @@
|
|
|
89
93
|
}
|
|
90
94
|
],
|
|
91
95
|
"default": null,
|
|
92
|
-
"description": "The state to set the issue to
|
|
96
|
+
"description": "The state to set the issue to.",
|
|
93
97
|
"title": "State"
|
|
94
98
|
}
|
|
95
99
|
},
|
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
"properties": {
|
|
3
3
|
"state": {
|
|
4
4
|
"default": "open",
|
|
5
|
-
"description": "The state of the PRs to search for
|
|
5
|
+
"description": "The state of the PRs to search for.",
|
|
6
|
+
"enum": [
|
|
7
|
+
"open",
|
|
8
|
+
"closed",
|
|
9
|
+
"all"
|
|
10
|
+
],
|
|
6
11
|
"title": "State",
|
|
7
12
|
"type": "string"
|
|
8
13
|
},
|
|
9
14
|
"limit": {
|
|
10
15
|
"default": 100,
|
|
11
16
|
"description": "The maximum number of PRs to return (default: 100, range: 1-100).",
|
|
17
|
+
"maximum": 100,
|
|
18
|
+
"minimum": 1,
|
|
12
19
|
"title": "Limit",
|
|
13
20
|
"type": "integer"
|
|
14
21
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.6](https://github.com/arii/boomtick/compare/mcp-v0.3.5...mcp-v0.3.6) (2026-08-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ai:** add gemini fallback logic to AIClient ([5cc87cc](https://github.com/arii/boomtick/commit/5cc87cc79e65df79db98bc27e679d14ffdd2d18d))
|
|
9
|
+
* **ai:** add gemini fallback logic to AIClient ([3ba37ec](https://github.com/arii/boomtick/commit/3ba37ec50a7447a9517e9f0029ff05ee01adf4d8))
|
|
10
|
+
* resolve td-cli not found in impact-analysis CI action ([#508](https://github.com/arii/boomtick/issues/508)) ([702643f](https://github.com/arii/boomtick/commit/702643f9d0d2447ae7baf20d22d553a7dfbae777))
|
|
11
|
+
|
|
3
12
|
## [0.3.5](https://github.com/arii/boomtick/compare/mcp-v0.3.4...mcp-v0.3.5) (2026-08-05)
|
|
4
13
|
|
|
5
14
|
|
package/actions/audit/action.yml
CHANGED
|
@@ -16,7 +16,7 @@ inputs:
|
|
|
16
16
|
runs:
|
|
17
17
|
using: composite
|
|
18
18
|
steps:
|
|
19
|
-
- uses:
|
|
19
|
+
- uses: arii/boomtick/mcp/actions/setup@main
|
|
20
20
|
|
|
21
21
|
- name: pnpm install
|
|
22
22
|
run: pnpm install --frozen-lockfile --prefer-offline
|
|
@@ -26,6 +26,9 @@ runs:
|
|
|
26
26
|
env:
|
|
27
27
|
PR_NUMBER: ${{ inputs.pr_number }}
|
|
28
28
|
run: |
|
|
29
|
+
if [[ -z "$PR_NUMBER" ]]; then
|
|
30
|
+
exit 0
|
|
31
|
+
fi
|
|
29
32
|
if [[ ! "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
|
|
30
33
|
echo "::error::Invalid PR_NUMBER: must be numeric."
|
|
31
34
|
exit 1
|
|
@@ -275,7 +278,7 @@ runs:
|
|
|
275
278
|
|
|
276
279
|
if [[ "$VERDICT" == "warn" ]]; then
|
|
277
280
|
# Only allow specific safe-skip reasons for warnings to pass CI
|
|
278
|
-
IS_TRUNCATED=$(jq -r '.isTruncated //
|
|
281
|
+
IS_TRUNCATED=$(jq -r '.isTruncated // "false"' "$f" 2>/dev/null)
|
|
279
282
|
SKIP_REASON=$(jq -r '.skipReason // "NONE"' "$f" 2>/dev/null)
|
|
280
283
|
|
|
281
284
|
if [[ "$IS_TRUNCATED" == "true" || "$SKIP_REASON" == *"MISSING_API_KEY"* || "$SKIP_REASON" == *"RATE_LIMIT"* || "$SKIP_REASON" == *"UNHANDLED_ERROR"* || "$SKIP_REASON" == *"TRUNCATED"* || "$SKIP_REASON" == *"PARSE_ERROR"* || "$SKIP_REASON" == "NONE" ]]; then
|
|
@@ -333,7 +336,7 @@ runs:
|
|
|
333
336
|
|
|
334
337
|
- name: Update Impact Analysis Feedback (Final Result)
|
|
335
338
|
if: always()
|
|
336
|
-
uses:
|
|
339
|
+
uses: arii/boomtick/mcp/actions/update-pr-comment@main
|
|
337
340
|
with:
|
|
338
341
|
github_token: ${{ inputs.github_token }}
|
|
339
342
|
status_line: '✅ **Impact Analysis Complete**'
|
|
@@ -372,6 +375,10 @@ runs:
|
|
|
372
375
|
env:
|
|
373
376
|
GITHUB_TOKEN: ${{ inputs.github_token }}
|
|
374
377
|
run: |
|
|
378
|
+
# Inject custom CLI path for td-cli resolution
|
|
379
|
+
PYTHON_SCRIPTS_PATH=$(python3 -c "import sysconfig; print(sysconfig.get_path('scripts'))")
|
|
380
|
+
export PATH="$PYTHON_SCRIPTS_PATH:$HOME/.local/bin:/github/home/.local/bin:$PATH"
|
|
381
|
+
|
|
375
382
|
# Resolve CLI dir for PYTHONPATH
|
|
376
383
|
if [ -d "cli" ]; then
|
|
377
384
|
export PYTHONPATH="cli:$PYTHONPATH"
|
|
@@ -10,10 +10,10 @@ inputs:
|
|
|
10
10
|
runs:
|
|
11
11
|
using: composite
|
|
12
12
|
steps:
|
|
13
|
-
- uses:
|
|
13
|
+
- uses: arii/boomtick/mcp/actions/setup@main
|
|
14
14
|
|
|
15
15
|
- name: Run Project Gate
|
|
16
|
-
uses:
|
|
16
|
+
uses: arii/boomtick/mcp/actions/run-project-gate@main
|
|
17
17
|
with:
|
|
18
18
|
target: ${{ inputs.target }}
|
|
19
19
|
github_token: ${{ inputs.github_token }}
|
package/actions/setup/action.yml
CHANGED
package/dist/lib/td-cli.js
CHANGED
|
@@ -1,4 +1,31 @@
|
|
|
1
1
|
import { runCommand } from "../lib/shell.js";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
export const loadStandaloneAgentContext = (repoRoot = process.cwd()) => {
|
|
6
|
+
const configPath = path.join(repoRoot, "project_config.json");
|
|
7
|
+
let config = {};
|
|
8
|
+
if (fs.existsSync(configPath)) {
|
|
9
|
+
try {
|
|
10
|
+
config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
console.warn(`[MCP Warning] Failed to parse ${configPath}:`, e);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
let gitCommit = "unknown";
|
|
17
|
+
try {
|
|
18
|
+
gitCommit = execSync("git rev-parse HEAD", { cwd: repoRoot, encoding: "utf-8" }).trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fallback if git is unavailable (e.g. Docker container without git)
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
packageName: config.packageName ?? "boomtick",
|
|
25
|
+
gitCommit,
|
|
26
|
+
config,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
2
29
|
function tryParseJson(text) {
|
|
3
30
|
try {
|
|
4
31
|
return JSON.parse(text);
|