AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

AIT-239: Address MCP review feedback - #30

Merged
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes
Jul 22, 2026
Merged

AIT-239: Address MCP review feedback#30
ord669 merged 3 commits into
mainfrom
ait-239-review-fixes

Conversation

@ord669

@ord669ord669 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary\n- bound every Claude subprocess call with a shared timeout\n- use an absolute executable helper for MCP headers\n- surface MCP cleanup failures during logout\n- honor global JSON output for MCP installation\n\n## Validation\n- 116 focused tests pass\n- TypeScript check passes\n- production build passes\n\nFollow-up to #29. Linear: AIT-239

Summary by CodeRabbit

  • New Features
    • MCP setup/removal now emit richer structured JSON output for automation.
    • Logout now includes MCP cleanup results in JSON (and shows a warning in non-JSON when cleanup fails).
    • mcp install --agent claude can output { status: 'configured', agent: 'claude' } in JSON mode.
  • Bug Fixes
    • Added timeout-aware handling to prevent MCP subprocesses from hanging.
    • Improved status/cleanup reporting when MCP is timed out or not found.
  • Tests
    • Expanded coverage for JSON-mode CLI output and timeout/error scenarios.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 845034c8-e01b-4e1d-99f1-2831692bc378

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Claude MCP operations now use bounded execution and structured cleanup results. MCP installation supports JSON output, while logout reports cleanup success or warnings in both JSON and human-readable modes.

Changes

MCP lifecycle and command output

Layer / File(s)Summary
Bounded Claude MCP operations
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
Claude MCP commands use shared timeout options, dynamic header helper commands, timeout detection, and structured removal results.
MCP install command output
src/commands/mcp.ts, src/commands/__tests__/mcp.test.ts
mcp install --agent claude emits { status: 'configured', agent: 'claude' } in JSON mode and retains plain-text output otherwise.
Logout cleanup reporting
src/auth/logout.ts, src/auth/__tests__/logout.test.ts
Logout includes mcpCleanup in JSON responses and prints a warning when MCP cleanup fails.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant User
participant LogoutCommand
participant removeClaudeMcp
participant ClaudeCode
User->>LogoutCommand: run logout
LogoutCommand->>removeClaudeMcp: remove Claude MCP configuration
removeClaudeMcp->>ClaudeCode: execute cleanup with timeout
ClaudeCode-->>removeClaudeMcp: return cleanup result
removeClaudeMcp-->>LogoutCommand: return ok and detail
LogoutCommand-->>User: print logged-out status or warning
Loading

Possibly related PRs

  • hookmyapp/cli#29: Both changes update the logout flow to invoke removeClaudeMcp.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title is related to the PR’s main purpose, summarizing the MCP review-feedback fixes even if it is broad.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ait-239-review-fixes

Comment @coderabbitai help to get the list of available commands.

@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:16f90c4e26

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/commands/__tests__/mcp.test.ts (1)

42-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assert the resolved absolute entrypoint.

mcp.ts calls resolve(process.argv[1]), but this test compares against raw process.argv[1]. It only matches when the runner already supplies an absolute path, so relative invocations can fail and the absolute-path contract is not actually asserted. Use resolve(process.argv[1]) in the expectation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/__tests__/mcp.test.ts` at line 42, Update the headersHelper
expectation in the MCP test to resolve process.argv[1] before constructing the
expected command, matching the absolute-entrypoint behavior in mcp.ts while
preserving the existing JSON stringification and argument order.
src/commands/mcp.ts (1)

39-40: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Preserve cleanup failures during duplicate recovery.

If removeClaudeMcp(true) times out or fails, its { ok: false, detail } result is ignored and another 10-second claude mcp add-json attempt runs. This can add another 10 seconds and mask the actual cleanup error; check the result before retrying.

Suggested fix
- removeClaudeMcp(true);+ const cleanup = removeClaudeMcp(true);+ if (!cleanup.ok) {+ throw new ConfigurationError(+ cleanup.detail ?? 'Claude MCP cleanup failed',+ 'MCP_INSTALL_FAILED',+ );+ }
result = spawnSync('claude', args, CLAUDE_OPTIONS);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 39 - 40, Update the duplicate-recovery flow
around removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
src/auth/__tests__/logout.test.ts (1)

63-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the cleanup-warning branch.

Add a test where removeClaudeMcp() returns { ok: false, detail: '...' }, asserting logged_out_with_warning, the propagated detail, and the human-readable warning output.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/auth/__tests__/logout.test.ts` around lines 63 - 67, Add a logout test
covering the cleanup-warning branch by mocking removeClaudeMcp() to return an
unsuccessful result with a detail string, then assert the response status is
logged_out_with_warning, the detail is propagated, and the output includes the
human-readable warning message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/commands/mcp.ts`:
- Around line 11-12: Update headersHelper so both executable and script paths
are safely escaped for shell execution rather than JSON-encoded, preventing
metacharacter expansion when Claude invokes the generated command. Use the
project’s existing shell-escaping utility or a fixed wrapper, and add a
regression test covering characters such as $() and backticks.
---
Nitpick comments:
In `@src/auth/__tests__/logout.test.ts`:
- Around line 63-67: Add a logout test covering the cleanup-warning branch by
mocking removeClaudeMcp() to return an unsuccessful result with a detail string,
then assert the response status is logged_out_with_warning, the detail is
propagated, and the output includes the human-readable warning message.
In `@src/commands/__tests__/mcp.test.ts`:
- Line 42: Update the headersHelper expectation in the MCP test to resolve
process.argv[1] before constructing the expected command, matching the
absolute-entrypoint behavior in mcp.ts while preserving the existing JSON
stringification and argument order.
In `@src/commands/mcp.ts`:
- Around line 39-40: Update the duplicate-recovery flow around
removeClaudeMcp(true) to inspect its result before invoking the retry
spawnSync('claude', args, CLAUDE_OPTIONS). If cleanup returns ok: false,
preserve and surface its detail instead of attempting another add-json call;
only retry when cleanup succeeds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8b28b23-ab56-465f-9bf5-7150b4b528c8

📥 Commits

Reviewing files that changed from the base of the PR and between 8a76dfe and 16f90c4.

📒 Files selected for processing (4)
  • src/auth/__tests__/logout.test.ts
  • src/auth/logout.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts

Comment threadsrc/commands/mcp.ts Outdated
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

47-51: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve combined Claude CLI diagnostics in both failure paths.

Both paths can discard stdout: installation does not refresh output after retrying, while cleanup never combines stdout and stderr.

  • src/commands/mcp.ts#L47-L51: recompute combined output after the retry and use it for the final error fallback.
  • src/commands/mcp.ts#L76-L80: use combined stdout/stderr when constructing cleanup failure details.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 47 - 51, The Claude CLI failure handling in
install and cleanup must preserve diagnostics from both stdout and stderr. In
src/commands/mcp.ts lines 47-51, recompute the combined output after any retry
and use it as the final ConfigurationError fallback; in src/commands/mcp.ts
lines 76-80, use the combined stdout/stderr output when constructing cleanup
failure details.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 47-51: The Claude CLI failure handling in install and cleanup must
preserve diagnostics from both stdout and stderr. In src/commands/mcp.ts lines
47-51, recompute the combined output after any retry and use it as the final
ConfigurationError fallback; in src/commands/mcp.ts lines 76-80, use the
combined stdout/stderr output when constructing cleanup failure details.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c287244-2171-49ab-b226-37d309e599de

📥 Commits

Reviewing files that changed from the base of the PR and between 16f90c4 and beaa3e2.

📒 Files selected for processing (3)
  • src/auth/__tests__/logout.test.ts
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:beaa3e2426

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/commands/mcp.ts
Comment threadsrc/commands/mcp.ts
@ord669

Copy link
Copy Markdown
ContributorAuthor

@codex review

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit:fa1985e8a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ord669

Copy link
Copy Markdown
ContributorAuthor

@coderabbitai review

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/commands/mcp.ts (1)

81-85: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Preserve combined output in failure details.

The code combines stdout and stderr for classification but reports only stderr. If Claude writes diagnostics to stdout, logout loses the useful failure reason; use the trimmed combined output as the fallback detail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/commands/mcp.ts` around lines 81 - 85, Update the failure detail
construction in the MCP cleanup result to use the trimmed combined
stdout-and-stderr output as its fallback, rather than only result.stderr.
Preserve the timedOut(result.error) message and the existing
result.error?.message precedence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/commands/mcp.ts`:
- Around line 81-85: Update the failure detail construction in the MCP cleanup
result to use the trimmed combined stdout-and-stderr output as its fallback,
rather than only result.stderr. Preserve the timedOut(result.error) message and
the existing result.error?.message precedence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 15c66ae9-e114-4c49-80bf-47406daf7f7c

📥 Commits

Reviewing files that changed from the base of the PR and between beaa3e2 and fa1985e.

📒 Files selected for processing (2)
  • src/commands/__tests__/mcp.test.ts
  • src/commands/mcp.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/commands/tests/mcp.test.ts

@ord669
ord669 merged commit b14355f into mainJul 22, 2026
3 checks passed
@ord669
ord669 deleted the ait-239-review-fixes branch July 22, 2026 10:35
ord669 added a commit that referenced this pull request Aug 12, 2026
* AIT-239 address MCP review feedback
* AIT-239 harden MCP helper execution
* AIT-239 make MCP cleanup cross-platform
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ord669