Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR addresses an ACP + MCP integration issue by emitting HTTP/SSE MCP server entries in ACP’s expected discriminated-union shape and then filtering those entries based on the agent’s advertised MCP transport capabilities after initialize. It also adds local AI UI acceptance coverage and supporting tooling (scripts + accessibility identifiers) to validate MCP/tooling flows end-to-end.
Changes:
- Extend ACP MCP server payload building to include stdio/http/sse entries and add post-
initializecapability-based filtering for unsupported transports. - Add local AI UI acceptance tests (Codex / Claude Code / ACP) plus a minimal MCP echo server and a helper script to run the suite locally.
- Harden CI appcast generation and add UI accessibility identifiers used by the new UI tests.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/mcp_echo_server.py | Adds a simple stdio MCP JSON-RPC echo server for UI acceptance testing. |
| scripts/local-ai-ui-tests.sh | Adds a helper script to run the local AI UI acceptance test suite. |
| scripts/ci/generate-appcast.sh | Hardens appcast generation and validates expected output URLs/signatures/min macOS version. |
| RxCodeUITests/LocalAIProviderAcceptanceTests.swift | Introduces end-to-end UI acceptance tests that exercise plan mode, edits, and MCP tool calls. |
| RxCode/Views/Toolbar/TodoProgressToolbarItem.swift | Adds accessibility identifiers for UI test automation. |
| RxCode/Views/Toolbar/RxCodeToolbar.swift | Adds accessibility identifiers for UI test automation. |
| RxCode/Views/RunProfile/RunProfileToolbarGroup.swift | Adds accessibility identifiers for UI test automation. |
| RxCode/Views/MainView.swift | Adds accessibility identifiers for UI test automation across key menus/views. |
| RxCode/Services/ThreadStore.swift | Switches thread store location to AppSupport.bundleScopedURL. |
| RxCode/Services/MCPService.swift | Emits ACP MCP server entries for stdio/http/sse and adds debug logging of payloads. |
| RxCode/Services/ACPService.swift | Filters MCP servers by agent-advertised MCP transport support and logs resulting payload. |
| RxCode/Info.plist | Updates Sparkle public EdDSA key. |
| RxCode.xcodeproj/xcshareddata/xcschemes/RxCode.xcscheme | Adds the UI test target to the shared scheme’s test action. |
| RxCode.xcodeproj/project.pbxproj | Adds a new UI test target and updates build settings / deployment targets. |
| Packages/Sources/RxCodeCore/Utilities/AppSupport.swift | Adds RXCODE_APP_SUPPORT_DIR override for Application Support (useful for UI tests). |
| Packages/Sources/RxCodeChatKit/PlanSheetView.swift | Adds accessibility identifiers for plan decision buttons. |
| Packages/Sources/RxCodeChatKit/PlanCardView.swift | Adds accessibility identifier for plan card button. |
| Packages/Sources/RxCodeChatKit/InputBarView.swift | Adds accessibility identifiers for composer controls. |
| Packages/Sources/RxCodeChatKit/IMETextView.swift | Adds a specific accessibility identifier to the underlying NSTextView used for chat input. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Dump the full JSON payload so a comparison against a known-good | ||
| // Python repro is one log line away. | ||
| if let data = try? JSONEncoder().encode(JSONValue.array(entries)), | ||
| let json = String(data: data, encoding: .utf8) { | ||
| logger.info("[ACP-MCP] payload=\(json, privacy: .public)") | ||
| } |
| if let data = try? JSONEncoder().encode(JSONValue.array(filteredMCPServers)), | ||
| let json = String(data: data, encoding: .utf8) { | ||
| logger.info("[ACP-MCP] session/new mcpServers payload=\(json, privacy: .public)") | ||
| } |
| .accessibilityIdentifier("plan-button-\(accessibilityIDComponent(from: title))") | ||
| } | ||
|
|
||
| private func accessibilityIDComponent(from title: String) -> String { | ||
| title |
| if let override = ProcessInfo.processInfo.environment["RXCODE_APP_SUPPORT_DIR"], | ||
| !override.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { | ||
| return URL(fileURLWithPath: override, isDirectory: true) |
|
|
||
| ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | ||
|
|
||
| export RXCODE_RUN_LOCAL_AI_UI_TESTS="${RXCODE_RUN_LOCAL_AI_UI_TESTS:-1}" |
|
🎉 This PR is included in version 1.3.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
No description provided.