@arii/boomtick-mcp 0.3.6 → 0.3.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.7](https://github.com/arii/boomtick/compare/mcp-v0.3.6...mcp-v0.3.7) (2026-08-17)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **ci:** remove submodule-pinned action refs from impact-analysis ([#723](https://github.com/arii/boomtick/issues/723)) ([d6e0494](https://github.com/arii/boomtick/commit/d6e0494fe8ac781777fb1546bb3c0f0102074a5c))
9
+ * ensure impact analysis posts PR comments and sends Jules messages ([#724](https://github.com/arii/boomtick/issues/724)) ([a52cc8e](https://github.com/arii/boomtick/commit/a52cc8e220def8bf2057b4da1b596e80fc0eed1f))
10
+ * resolve script fallback paths in mcp impact-analysis action ([#716](https://github.com/arii/boomtick/issues/716)) ([b29dd06](https://github.com/arii/boomtick/commit/b29dd067da2b45fc8410ca26e34a8c74626fe937))
11
+
3
12
  ## [0.3.6](https://github.com/arii/boomtick/compare/mcp-v0.3.5...mcp-v0.3.6) (2026-08-13)
4
13
 
5
14
 
@@ -16,5 +16,5 @@ runs:
16
16
  echo "::error::Invalid PR_NUMBER: must be numeric."
17
17
  exit 1
18
18
  fi
19
- td-cli gh audit-pr "$PR_NUMBER" --fetch --audit
19
+ td-cli gh audit-pr "$PR_NUMBER" --fetch --audit --submit --execute
20
20
  shell: bash
@@ -16,10 +16,8 @@ inputs:
16
16
  runs:
17
17
  using: composite
18
18
  steps:
19
- - uses: arii/boomtick/mcp/actions/setup@main
20
-
21
- - name: pnpm install
22
- run: pnpm install --frozen-lockfile --prefer-offline
19
+ - name: Configure Git Safe Directory
20
+ run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
23
21
  shell: bash
24
22
 
25
23
  - name: Validate PR Number
@@ -173,8 +171,13 @@ runs:
173
171
  echo "Executing check-visual-changes.ts at: $RESOLVED_PATH"
174
172
  pnpm exec tsx "$RESOLVED_PATH" >> "$GITHUB_OUTPUT"
175
173
  else
176
- echo "⚠️ Skipping: check-visual-changes.ts script not found. Defaulting changed_routes=0"
177
- echo "changed_routes=0" >> "$GITHUB_OUTPUT"
174
+ if [ -f "scripts/check-visual-changes.ts" ]; then
175
+ echo "Executing check-visual-changes.ts from current workspace."
176
+ pnpm exec tsx scripts/check-visual-changes.ts >> "$GITHUB_OUTPUT"
177
+ else
178
+ echo "⚠️ Skipping: check-visual-changes.ts script not found. Defaulting changed_routes=0"
179
+ echo "changed_routes=0" >> "$GITHUB_OUTPUT"
180
+ fi
178
181
  fi
179
182
  shell: bash
180
183
 
@@ -194,21 +197,6 @@ runs:
194
197
  fi
195
198
  shell: bash
196
199
 
197
- - name: Visual review github models agent
198
- if: always() && steps.check_visuals.outputs.changed_routes != '0' && steps.check_visuals.outputs.changed_routes != ''
199
- env:
200
- GITHUB_TOKEN: ${{ inputs.github_token }}
201
- PR_NUMBER: ${{ inputs.pr_number }}
202
- JULES_API_KEY: ${{ inputs.jules_api_key }}
203
- GITHUB_REPOSITORY: ${{ github.repository }}
204
- run: |
205
- if node -e "const pkg = require('./package.json'); if (!pkg.scripts || !pkg.scripts['impact:github-models-review']) process.exit(1)" 2>/dev/null; then
206
- pnpm run impact:github-models-review
207
- else
208
- echo "⚠️ Skipping: impact:github-models-review script not found"
209
- fi
210
- shell: bash
211
-
212
200
  - name: Report Summary
213
201
  if: always()
214
202
  run: |
@@ -241,26 +229,20 @@ runs:
241
229
  if [ -f artifacts/gemini-review.md ]; then
242
230
  { echo ""; cat artifacts/gemini-review.md; } >> "$GITHUB_STEP_SUMMARY"
243
231
  fi
244
- if [ -f artifacts/github-models-review.md ]; then
245
- { echo ""; cat artifacts/github-models-review.md; } >> "$GITHUB_STEP_SUMMARY"
246
- fi
247
232
  if [ -f artifacts/gemini-code-review.md ]; then
248
233
  { echo ""; cat artifacts/gemini-code-review.md; } >> "$GITHUB_STEP_SUMMARY"
249
234
  fi
250
- if [ -f artifacts/github-models-code-review.md ]; then
251
- { echo ""; cat artifacts/github-models-code-review.md; } >> "$GITHUB_STEP_SUMMARY"
252
- fi
253
235
 
254
236
  FAILED=0
255
- # Expected verdicts: gemini-code-review, github-models-code-review
237
+ # Expected verdicts: gemini-code-review
256
238
  # Visual reviews are expected only if visual changes exist
257
239
  EXPECTED_REVIEWS=""
258
240
  if [ "${{ steps.impact_analysis.outputs.has_impact }}" == "true" ]; then
259
241
  if [ "${{ github.event_name }}" == "pull_request" ]; then
260
- EXPECTED_REVIEWS="gemini-code-review github-models-code-review"
242
+ EXPECTED_REVIEWS="gemini-code-review"
261
243
  fi
262
244
  if [ "${{ steps.check_visuals.outputs.changed_routes }}" != "0" ] && [ "${{ steps.check_visuals.outputs.changed_routes }}" != "" ]; then
263
- EXPECTED_REVIEWS="$EXPECTED_REVIEWS gemini-review github-models-review"
245
+ EXPECTED_REVIEWS="$EXPECTED_REVIEWS gemini-review"
264
246
  fi
265
247
  fi
266
248
 
@@ -328,19 +310,100 @@ runs:
328
310
  if [ -f "$TARGET_PATH" ]; then
329
311
  RESOLVED_PATH=$(realpath "$TARGET_PATH")
330
312
  echo "Executing send-jules-impact.py at: $RESOLVED_PATH"
313
+ export PYTHONPATH="$(realpath "${{ github.action_path }}/../../../cli"):$PYTHONPATH"
331
314
  python3 "$RESOLVED_PATH"
332
315
  else
333
- echo "⚠️ Skipping: send-jules-impact.py script not found."
316
+ # Fallback check for docker run execution or direct python script in checkout workspace
317
+ # Inside container execution, scripts/send-jules-impact.py should exist in workspace
318
+ if [ -f "scripts/send-jules-impact.py" ]; then
319
+ echo "Executing send-jules-impact.py from current workspace."
320
+ export PYTHONPATH="cli:$PYTHONPATH"
321
+ python3 scripts/send-jules-impact.py
322
+ else
323
+ echo "⚠️ Skipping: send-jules-impact.py script not found."
324
+ fi
334
325
  fi
335
326
  shell: bash
336
327
 
337
328
  - name: Update Impact Analysis Feedback (Final Result)
338
329
  if: always()
339
- uses: arii/boomtick/mcp/actions/update-pr-comment@main
330
+ uses: actions/github-script@v8 # nosemgrep: yaml.github-actions.security.github-actions-mutable-action-tag.github-actions-mutable-action-tag
331
+ env:
332
+ INPUT_STATUS_LINE: '✅ **Impact Analysis Complete**'
333
+ INPUT_IMPACT_BODY: ${{ env.IMPACT_BODY }}
340
334
  with:
341
- github_token: ${{ inputs.github_token }}
342
- status_line: '✅ **Impact Analysis Complete**'
343
- impact_body: ${{ env.IMPACT_BODY }}
335
+ github-token: ${{ inputs.github_token }}
336
+ script: |
337
+ const owner = context.repo.owner;
338
+ const repo = context.repo.repo;
339
+ const branchName = context.ref.replace('refs/heads/', '');
340
+
341
+ const pstTime = new Date().toLocaleString('en-US', {
342
+ timeZone: 'America/Los_Angeles',
343
+ dateStyle: 'medium',
344
+ timeStyle: 'short'
345
+ });
346
+
347
+ if (branchName === 'main') return;
348
+
349
+ const pullRequests = await github.paginate(github.rest.pulls.list, {
350
+ owner,
351
+ repo,
352
+ state: 'open'
353
+ });
354
+ const matchingPRs = pullRequests.filter(pr => pr.head.ref === branchName);
355
+
356
+ const statusLine = process.env.INPUT_STATUS_LINE;
357
+ let impactBodyText = (process.env.INPUT_IMPACT_BODY || '')
358
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '[REMOVED SCRIPT]');
359
+
360
+ for (const pr of matchingPRs) {
361
+ const commentTag = `<!-- impact-analysis-comment-${branchName} -->`;
362
+ let bodyParts = [
363
+ `🚀 **Impact Analysis Details** (Last updated: ${pstTime} PST)`,
364
+ '',
365
+ statusLine,
366
+ `- **Commit SHA:** \`${process.env.GITHUB_SHA.slice(0, 7)}\``,
367
+ `- [Link to artifacts](https://github.com/${owner}/${repo}/actions/runs/${context.runId})`,
368
+ ''
369
+ ];
370
+
371
+ if (impactBodyText) {
372
+ bodyParts.push(impactBodyText, '');
373
+ }
374
+
375
+ const MAX_LENGTH = 65536;
376
+ const truncationNotice = '\n\n... (truncated due to GitHub comment size limits)\n';
377
+ let currentContent = bodyParts.join('\n');
378
+ let projectedLength = currentContent.length + commentTag.length + 1;
379
+
380
+ if (projectedLength > MAX_LENGTH) {
381
+ const availableLength = MAX_LENGTH - commentTag.length - truncationNotice.length - 2;
382
+ let safeContent = currentContent.slice(0, availableLength);
383
+ let lastNewline = safeContent.lastIndexOf('\n');
384
+ if (lastNewline > availableLength * 0.9) {
385
+ safeContent = safeContent.slice(0, lastNewline);
386
+ }
387
+ bodyParts = [safeContent, truncationNotice];
388
+ }
389
+
390
+ bodyParts.push(commentTag);
391
+ const body = bodyParts.join('\n');
392
+
393
+ const comments = await github.paginate(github.rest.issues.listComments, {
394
+ owner,
395
+ repo,
396
+ issue_number: pr.number,
397
+ });
398
+
399
+ const existingComment = comments.find(c => c.body.includes(commentTag));
400
+
401
+ if (existingComment) {
402
+ await github.rest.issues.updateComment({ owner, repo, comment_id: existingComment.id, body });
403
+ } else {
404
+ await github.rest.issues.createComment({ issue_number: pr.number, owner, repo, body });
405
+ }
406
+ }
344
407
 
345
408
  - name: Merge AI Logs into Artifacts
346
409
  if: always()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arii/boomtick-mcp",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Boomtick MCP Guide: PR Rescue + Merge Conflict Agent",
5
5
  "repository": {
6
6
  "type": "git",