Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
Adds a global Cmd+K semantic search across all threads, a Briefings dashboard summarizing per-project / per-branch activity, multi-terminal inspector tabs, and typed Run Profiles (Xcode / Make) with auto-detection. Supporting changes wire a new ThreadSearchService (on-device NLEmbedding actor) and a thread-summary / branch-briefing pipeline into AppState, replace ProjectWindowRoot's view with MainView, and add per-project draft/queue scoping.
Changes:
- New global search overlay +
ThreadSearchServicewith backfill/reindex andThreadEmbeddingChunkpersistence. - New
BriefingViewplusThreadSummaryRecord/BranchBriefingRecordstorage and summarization helpers in the LLM services. - Multi-terminal inspector tabs, typed Xcode/Make run profiles with
RunProfileDetector, and various sidebar polish (animations, briefing entry, fixed-width timestamps).
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 |
|---|---|
| RxCodeTests/AppStateProjectSwitchTests.swift | New tests covering per-project draft queue preservation across project switches. |
| RxCode/Views/Terminal/TerminalView.swift | Adds TerminalProcess.clear() that resets the terminal without killing the shell. |
| RxCode/Views/Sidebar/ProjectTreeView.swift | Adds Briefing entry section, expand/collapse animations, and briefing-aware "current" highlighting; introduces dynamic visible-thread caps. |
| RxCode/Views/Sidebar/ProjectChatRow.swift | Fixed-width monospaced trailing time/progress column. |
| RxCode/Views/Sidebar/HistoryListView.swift | Import reorder only. |
| RxCode/Views/Sidebar/BriefingView.swift | New briefings dashboard with per-project filter and grouped cards. |
| RxCode/Views/SettingsView.swift | Adds a "Search Index" section to manually reindex threads with progress. |
| RxCode/Views/Search/GlobalSearchOverlay.swift | New Cmd+K overlay with semantic + in-thread search and keyboard navigation. |
| RxCode/Views/RunProfile/RunConfigurationsView.swift | Typed Xcode/Make profile UI, detected-runnables add menu. |
| RxCode/Views/ProjectWindowView.swift | Wires Briefing pane into the detail area; adds ThreadTitlePopoverButton. |
| RxCode/Views/MainView.swift | Routes Cmd+K, hosts the global search overlay, and becomes the new project window root. |
| RxCode/Views/Inspector/RightInspectorPanel.swift | Multi-terminal storage with add/select/close/rename/reset/clear per session. |
| RxCode/Views/Inspector/InspectorContentView.swift | Flattened multi-terminal rendering with tab bar. |
| RxCode/Views/EmptyProjectStateView.swift | New empty-state landing with recent briefings list. |
| RxCode/Views/Chat/ThreadTitlePopoverButton.swift | Title button that reveals current thread summary in a popover. |
| RxCode/Views/Chat/RecentChatsSuggestionList.swift | Guards visibility via ChatBridge and applies pinned/unpinned ordering caps. |
| RxCode/Services/ThreadStore.swift | Schema for ThreadSummaryRecord, BranchBriefingRecord, ThreadEmbeddingChunk and related CRUD. |
| RxCode/Services/ThreadSearchService.swift | New on-device NLEmbedding actor with chunking, backfill, reindex, in-thread search. |
| RxCode/Services/RunProfile/RunProfileDetector.swift | Auto-detects Xcode schemes, npm scripts, and Makefile targets. |
| RxCode/Services/OpenAISummarizationService.swift / ClaudeService.swift / CodexAppServer.swift | Adds summary/briefing generation helpers. |
| RxCode/App/RxCodeApp.swift | Switches ProjectWindowRoot to MainView and reorders lifecycle hooks. |
| RxCode/App/AppState.swift | Boots search service, runs backfill/reindex, drives briefing/summary pipeline, project-scoped draft keys, briefing-on-launch behavior. |
| Packages/Tests/RxCodeCoreTests/RunTaskExecutorTests.swift | Tests for Make profile script generation. |
| Packages/Sources/RxCodeCore/WindowState.swift | Adds clearTerminalRequest, default showingBriefing = true, and showGlobalSearch. |
| Packages/Sources/RxCodeCore/RunProfile/RunTaskExecutor.swift | Synthesizes xcodebuild / make / open commands. |
| Packages/Sources/RxCodeCore/Models/* | New models (XcodeRunConfig, MakeRunConfig, ThreadSummaryRecord, BranchBriefingRecord, ThreadEmbeddingChunk) and RunProfile extensions. |
| Packages/Sources/RxCodeCore/Models/QueuedMessageRecord.swift | Doc comment updated to note project-scoped session keys. |
| Packages/Sources/RxCodeChatKit/WebPreviewButton.swift | Color tweak. |
| Packages/Sources/RxCodeChatKit/MessageListView.swift | Removes the "Show earlier messages" folding behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| func removeProject(id: UUID) async { | ||
| for (threadId, chunks) in index where chunks.first?.projectId == id { | ||
| index.removeValue(forKey: threadId) | ||
| } | ||
| // ThreadStore.deleteAll(projectId:) already purges chunks at the same | ||
| // time it removes the threads, so the disk side is handled there. | ||
| } |
| .padding(8) | ||
| .background(ClaudeTheme.codeBackground) | ||
| VStack(spacing: 0) { | ||
| if currentTerminals.count > 1 || !currentTerminals.isEmpty { |
| } | ||
| } | ||
|
|
||
| // MARK: - SummarySidebarSection | ||
|
|
||
| private struct SummarySidebarSection: View { | ||
| @Environment(WindowState.self) private var windowState | ||
|
|
||
| var body: some View { | ||
| VStack(alignment: .leading, spacing: 2) { | ||
| Text("General") | ||
| .font(.system(size: ClaudeTheme.size(12), weight: .semibold)) | ||
| .foregroundStyle(ClaudeTheme.textTertiary) | ||
| .textCase(.uppercase) | ||
| .padding(.horizontal, 12) | ||
| .padding(.bottom, 2) | ||
|
|
||
| Button { | ||
| windowState.showingBriefing = true | ||
| } label: { | ||
| HStack(spacing: 8) { | ||
| Image(systemName: "text.page") | ||
| .font(.system(size: ClaudeTheme.size(12), weight: .medium)) | ||
| .frame(width: 18, height: 18) | ||
|
|
||
| Text("Briefing") | ||
| .font(.system(size: ClaudeTheme.size(13), weight: .medium)) | ||
| .lineLimit(1) | ||
|
|
||
| Spacer(minLength: 4) | ||
| } | ||
| .foregroundStyle(windowState.showingBriefing ? ClaudeTheme.accent : ClaudeTheme.textSecondary) | ||
| .padding(.horizontal, 10) | ||
| .padding(.vertical, 7) | ||
| .background( | ||
| RoundedRectangle(cornerRadius: ClaudeTheme.cornerRadiusSmall) | ||
| .fill(windowState.showingBriefing ? ClaudeTheme.accent.opacity(0.10) : Color.clear) | ||
| ) | ||
| .padding(.horizontal, 8) | ||
| .contentShape(Rectangle()) | ||
| } | ||
| .buttonStyle(.plain) | ||
| .help("Open project branch briefing") | ||
| } | ||
| } | ||
| } | ||
|
|
||
| // MARK: - Empty State | ||
| // MARK: - Empty State | ||
|
|
||
| private var emptyState: some View { |
| Menu { | ||
| Button { | ||
| selectedProjectIds.removeAll() | ||
| } label: { | ||
| Label("All projects", systemImage: selectedProjectIds.isEmpty ? "checkmark" : "") | ||
| } | ||
| Divider() | ||
| ForEach(projects) { project in | ||
| Button { | ||
| toggleProject(project.id) | ||
| } label: { | ||
| Label( | ||
| project.name, | ||
| systemImage: selectedProjectIds.contains(project.id) ? "checkmark" : "" | ||
| ) | ||
| } | ||
| } |
|
🎉 This PR is included in version 1.5.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
No description provided.