Skip to content

feat: refactor card generation and update UI design for mobile#36

Merged
sirily11 merged 2 commits into
mainfrom
message-fix
May 21, 2026
Merged

feat: refactor card generation and update UI design for mobile#36
sirily11 merged 2 commits into
mainfrom
message-fix

Conversation

@sirily11
Copy link
Copy Markdown
Contributor

No description provided.

- eliminate redundant animation code
- integrate new streaming indicator view
- streamline sidebar view state management
Copilot AI review requested due to automatic review settings May 21, 2026 08:33
@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
rxcode Ready Ready Preview, Comment May 21, 2026 8:42am

Request Review

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR refreshes the mobile UI with new “liquid glass” card designs and improves cross-device features by expanding the sync protocol (runnable detection + encrypted widget pushes) and updating desktop chat UX (agent-scoped commands, @ mention popup, pinned-send behavior).

Changes:

  • Added a new sync loading splash, refreshed mobile sidebar/list card UI, and improved iPad briefing navigation.
  • Extended mobile↔desktop sync for runnable detection and enhanced remote folder picking (including optional file listing).
  • Secured widget background pushes via per-device E2E encryption and reorganized desktop command/shortcut settings + chat input popups.

Reviewed changes

Copilot reviewed 36 out of 36 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
RxCodeMobile/Views/SyncLoadingView.swift New full-screen syncing splash with animations and transitions.
RxCodeMobile/Views/SessionsList.swift Global (desktop-backed) thread search results + run profile UI refactor and previews.
RxCodeMobile/Views/RootView.swift Loading splash gating + iPad briefing split view selection/navigation improvements.
RxCodeMobile/Views/RemoteFolderPickerView.swift Generalized picker modes (add project / pick folder / pick entry) + file inclusion support.
RxCodeMobile/Views/ProjectsSidebar.swift New glass-card sidebar UI, search handling changes, and new components/layout helpers.
RxCodeMobile/Views/MobileRunProfileEditorView.swift New extracted run profile editor with remote picker integration.
RxCodeMobile/Views/MobileChatView.swift Revised scroll/auto-follow behavior (pin sent message to top) + scroll button placement/logging.
RxCodeMobile/Views/MobileBriefingView.swift Added iPad content-column briefing list with selection + filtering UI.
RxCodeMobile/Views/GlassThreadCard.swift Updated card title layout + new streaming indicator component.
RxCodeMobile/State/MobileAppState+Sync.swift Added runnable detection request API + reset initial snapshot flag on mirror clear.
RxCodeMobile/State/MobileAppState+Intents.swift Folder tree requests now support includeFiles.
RxCodeMobile/State/MobileAppState+Inbound.swift Handle runnable detection results + mark initial snapshot received.
RxCodeMobile/State/MobileAppState.swift New published state for detected runnables + initial snapshot tracking.
RxCodeMobile/AppDelegate.swift Decrypt E2E widget payloads for background pushes; refactored envelope resolution.
RxCode/Views/UserManualView.swift Updated manual wording for commands/shortcuts and @ mentions behavior.
RxCode/Views/SettingsView.swift Consolidated commands/shortcuts into a single “Commands” settings tab.
RxCode/Views/Settings/CommandsSettingsTab.swift New segmented settings container for slash commands vs shortcuts.
RxCode/Services/RunProfile/RunProfileDetector.swift Moved detected runnable model types to RxCodeCore for sync sharing.
RxCode/Services/MobileSyncService+LiveActivity.swift Widget background pushes now send encrypted encWidget payloads.
RxCode/Services/MobileSyncService+EventDispatch.swift Added runnable detection request dispatch path.
RxCode/Services/MobileSyncService.swift New notification name for runnable detection requests.
RxCode/App/AppState+MobileSync.swift Desktop handler for runnable detection requests and result reply.
RxCode/App/AppState+MobileRemote.swift Folder tree now optionally includes files; nodes carry isDirectory.
relay-server/push.go Updated docs/comments to reflect encrypted widget payloads.
Packages/Sources/RxCodeSync/Protocol/Payload.swift Added runnable detect payload types; split large payload structs into new files.
Packages/Sources/RxCodeSync/Protocol/FolderPayloads.swift New file housing folder tree and create-project payload types + includeFiles.
Packages/Sources/RxCodeSync/Protocol/DetectionPayloads.swift New file for runnable detect request/result payloads.
Packages/Sources/RxCodeSync/APNs/EncryptedAlert.swift Generalized envelope sealing/opening + added widget snapshot plaintext type.
Packages/Sources/RxCodeCore/RunProfile/DetectedRunnable.swift New shared model for detected runnables (desktop + mobile).
Packages/Sources/RxCodeChatKit/SlashCommandManagerView.swift Shows agent scope badges + supports editing agent scope.
Packages/Sources/RxCodeChatKit/SlashCommandBar.swift Adds agent scoping/filtering for slash command popup results.
Packages/Sources/RxCodeChatKit/MessageListView.swift Desktop chat: dynamic tail spacer + pin-sent-message behavior.
Packages/Sources/RxCodeChatKit/InputBarView.swift Unified @ mention popup (shortcuts + files) and agent-aware slash popup.
Packages/Sources/RxCodeChatKit/ChatView.swift Removed old shortcut bar in favor of @ mention popup behavior.
Packages/Sources/RxCodeChatKit/ChatMessageListView.swift Added shared coordinate space + env hooks for tracked-message geometry reporting.
Packages/Sources/RxCodeChatKit/AtFileSearchBar.swift Replaced file-only popup with AtMentionPopup (shortcuts + files).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +309 to +315
private func startAnimation() {
Timer.scheduledTimer(withTimeInterval: 0.4, repeats: true) { _ in
withAnimation(.easeInOut(duration: 0.2)) {
dotCount = (dotCount + 1) % 4
}
}
}
Comment on lines +616 to +621
/// A layout that arranges views horizontally and wraps to the next line when needed.
/// Used for metadata rows that need to adapt to narrow sidebar widths on iPad.
private struct FlowLayout: Layout {
var spacing: CGFloat = 8

func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
Comment on lines +242 to +255
private func threadCount(for projectID: UUID) -> Int {
state.sessions.filter { $0.projectId == projectID && !$0.isArchived }.count
}

private func activeJobCount(for projectID: UUID) -> Int {
state.sessions.filter { $0.projectId == projectID && $0.isStreaming }.count
}

private func lastActivity(for projectID: UUID) -> Date? {
state.sessions
.filter { $0.projectId == projectID }
.map(\.updatedAt)
.max()
}
Comment on lines +233 to +245
func applyRunnableDetectResult(_ result: RunnableDetectResultPayload) {
runnableDetectInFlight.remove(result.projectID)
if pendingRunnableDetectRequestID == result.clientRequestID {
pendingRunnableDetectRequestID = nil
}
if result.ok, let detected = result.detected {
detectedRunnablesByProject[result.projectID] = detected
runnableDetectError = nil
logger.info("[RunProfiles] applied detection project=\(result.projectID.uuidString, privacy: .public) xcode=\(detected.xcode.count, privacy: .public) npm=\(detected.npm.count, privacy: .public) make=\(detected.make.count, privacy: .public)")
} else {
runnableDetectError = result.errorMessage ?? "Failed to detect runnables."
}
}
@sirily11 sirily11 enabled auto-merge (squash) May 21, 2026 08:42
@sirily11 sirily11 merged commit 04d51bb into main May 21, 2026
7 checks passed
@sirily11 sirily11 deleted the message-fix branch May 21, 2026 08:45
@sirily11
Copy link
Copy Markdown
Contributor Author

🎉 This PR is included in version 1.9.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants