Conversation
There was a problem hiding this comment.
Pull request overview
This PR rebrands the macOS app and Swift packages from Clarc to RxCode, adds CI/release automation, and introduces several supporting services/utilities for updates, keychain access, Bash safety, app support migration, and core/chat package structure.
Changes:
- Renames app/module references, user-facing strings, docs, tests, schemes, and release scripts to RxCode.
- Adds GitHub Actions workflows plus CI scripts for testing, signing, notarization, appcast generation, and semantic release.
- Adds/moves core and chat package source files, assets, Sparkle update support, and archive/todo/session-related models.
Reviewed changes
Copilot reviewed 120 out of 172 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/build.yaml |
Adds macOS build, signing, notarization, appcast, and Pages deploy workflow. |
.github/workflows/create-release.yaml |
Adds semantic-release workflow. |
.github/workflows/test.yaml |
Adds package test and release build smoke workflow. |
.gitignore |
Ignores CI outputs and release artifacts. |
.releaserc |
Adds semantic-release plugin config. |
AGENTS.md |
Updates agent guidance to RxCode naming. |
CLAUDE.md |
Updates Claude guidance to RxCode naming. |
README.md |
Rebrands README and build/install instructions. |
Packages/Package.swift |
Renames Swift package/products/targets/tests to RxCode. |
Packages/Sources/ClarcCore/Utilities/AppSupport.swift |
Removes old Clarc app support helper. |
Packages/Sources/RxCodeCore/CLISession/CLILineToBlocksMapper.swift |
Updates comments for RxCode naming. |
Packages/Sources/RxCodeCore/CLISession/CLISessionRecord.swift |
Adds CLI JSONL line decoding models. |
Packages/Sources/RxCodeCore/CLISession/CLISessionStore.swift |
Updates comments for RxCode naming. |
Packages/Sources/RxCodeCore/CLISession/LegacyMigrator.swift |
Updates legacy migration comments. |
Packages/Sources/RxCodeCore/CLISession/PickerExposer.swift |
Updates picker exposure comments. |
Packages/Sources/RxCodeCore/CLISession/SessionMetaStore.swift |
Updates sidecar metadata comments. |
Packages/Sources/RxCodeCore/Models/AskUserQuestion.swift |
Adds AskUserQuestion parsing/answer model. |
Packages/Sources/RxCodeCore/Models/Attachment.swift |
Renames generated image attachment prefix. |
Packages/Sources/RxCodeCore/Models/AttachmentAutoPreviewSettings.swift |
Adds attachment auto-preview settings model. |
Packages/Sources/RxCodeCore/Models/ChatSession.swift |
Updates legacy origin default name. |
Packages/Sources/RxCodeCore/Models/ChatSessionStats.swift |
Adds chat session stats model. |
Packages/Sources/RxCodeCore/Models/ChatThread.swift |
Adds SwiftData chat thread model. |
Packages/Sources/RxCodeCore/Models/GitHubModels.swift |
Adds GitHub OAuth/repo DTOs. |
Packages/Sources/RxCodeCore/Models/InteractiveTerminalState.swift |
Adds interactive terminal state model. |
Packages/Sources/RxCodeCore/Models/JSONValue.swift |
Adds arbitrary JSON value type. |
Packages/Sources/RxCodeCore/Models/MCPServer.swift |
Adds MCP server models. |
Packages/Sources/RxCodeCore/Models/MarketplacePlugin.swift |
Adds marketplace plugin model. |
Packages/Sources/RxCodeCore/Models/PermissionMode.swift |
Adds Claude permission mode enum. |
Packages/Sources/RxCodeCore/Models/PermissionRequest.swift |
Adds permission request/decision models. |
Packages/Sources/RxCodeCore/Models/PreviewFile.swift |
Adds preview/diff file model. |
Packages/Sources/RxCodeCore/Models/Project.swift |
Adds project model. |
Packages/Sources/RxCodeCore/Models/QueuedMessageRecord.swift |
Adds persisted queued message model. |
Packages/Sources/RxCodeCore/Models/RateLimitUsage.swift |
Updates comments for RxCodeChatKit. |
Packages/Sources/RxCodeCore/Models/SessionOrigin.swift |
Renames legacy session origin case. |
Packages/Sources/RxCodeCore/Models/SessionRowReconciler.swift |
Adds session row reconciliation helper. |
Packages/Sources/RxCodeCore/Models/StreamEvent.swift |
Adds stream event models. |
Packages/Sources/RxCodeCore/Models/StreamEventDecoding.swift |
Adds stream event decoders. |
Packages/Sources/RxCodeCore/Models/ThreadFileEdit.swift |
Adds persisted thread file edit model. |
Packages/Sources/RxCodeCore/Models/TodoItem.swift |
Adds TodoWrite item extraction. |
Packages/Sources/RxCodeCore/Models/TodoSnapshot.swift |
Adds persisted todo snapshot model. |
Packages/Sources/RxCodeCore/Theme/AppTheme.swift |
Renames theme change notification. |
Packages/Sources/RxCodeCore/Theme/ClaudeTheme.swift |
Adds shared theme helpers/styles. |
Packages/Sources/RxCodeCore/Utilities/AppSupport.swift |
Adds RxCode app support migration/scoping helper. |
Packages/Sources/RxCodeCore/Utilities/ClipboardHelper.swift |
Adds clipboard helper. |
Packages/Sources/RxCodeCore/Utilities/DirectoryWatcher.swift |
Adds FSEvents directory watcher. |
Packages/Sources/RxCodeCore/Utilities/DurationFormatting.swift |
Adds duration formatter. |
Packages/Sources/RxCodeCore/Utilities/GitHelper.swift |
Adds async git helper. |
Packages/Sources/RxCodeCore/Utilities/GitStatusParsing.swift |
Adds git status parser. |
Packages/Sources/RxCodeCore/Utilities/GitURLHelpers.swift |
Adds GitHub remote URL parser. |
Packages/Sources/RxCodeCore/Utilities/GitWorktreeService.swift |
Rebrands worktree support path. |
Packages/Sources/RxCodeCore/Utilities/PathEncoding.swift |
Adds Claude project path encoding helpers. |
Packages/Sources/RxCodeCore/WindowState.swift |
Adds shared per-window state model. |
Packages/Sources/RxCodeChatKit/AskUserQuestionView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/AttachmentPreviewItem.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/AutoScrollAnchor.swift |
Adds auto-scroll anchoring helper. |
Packages/Sources/RxCodeChatKit/BashTerminalSheet.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/BubbleStyle.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/ChatBridge.swift |
Rebrands bridge comments/imports. |
Packages/Sources/RxCodeChatKit/ChatShortcut.swift |
Rebrands shortcut storage/export text. |
Packages/Sources/RxCodeChatKit/ChatView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/FileDiffView.swift |
Updates import and theme notification. |
Packages/Sources/RxCodeChatKit/IMETextView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/ImagePreviewSheet.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/InputBarView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/MarkdownView.swift |
Updates import and theme notification. |
Packages/Sources/RxCodeChatKit/MessageBubble.swift |
Rebrands inline image URL scheme. |
Packages/Sources/RxCodeChatKit/MessageListView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/PlanCardView.swift |
Updates import and initial expansion behavior. |
Packages/Sources/RxCodeChatKit/Resources/en.lproj/Localizable.strings |
Rebrands ChatKit English strings. |
Packages/Sources/RxCodeChatKit/Resources/ko.lproj/Localizable.strings |
Rebrands ChatKit Korean strings. |
Packages/Sources/RxCodeChatKit/ShortcutManagerView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/SlashCommandBar.swift |
Rebrands slash command storage/export text. |
Packages/Sources/RxCodeChatKit/SlashCommandManagerView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/StatusLineView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/TextPreviewSheet.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/TodoProgressView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/ToolResultView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/TypingDotsView.swift |
Updates import to RxCodeCore. |
Packages/Sources/RxCodeChatKit/WebPreviewButton.swift |
Updates import to RxCodeCore. |
Packages/Tests/RxCodeChatKitTests/AutoScrollAnchorTests.swift |
Rebrands test imports. |
Packages/Tests/RxCodeChatKitTests/ChatBridgePlanStateTests.swift |
Rebrands test imports. |
Packages/Tests/RxCodeChatKitTests/MessageBubbleTests.swift |
Rebrands test imports/temp file prefix. |
Packages/Tests/RxCodeCoreTests/ChatSessionTitleTests.swift |
Rebrands test imports/fixtures. |
Packages/Tests/RxCodeCoreTests/GitStatusParsingTests.swift |
Rebrands test imports. |
Packages/Tests/RxCodeCoreTests/GitURLHelpersTests.swift |
Rebrands test imports. |
Packages/Tests/RxCodeCoreTests/SessionRowReconcilerTests.swift |
Rebrands test imports/fixtures. |
RxCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
Adds workspace metadata. |
RxCode.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved |
Adds resolved SwiftPM dependency pins. |
RxCode.xcodeproj/xcshareddata/xcschemes/RxCode.xcscheme |
Renames scheme references to RxCode. |
RxCode/App/AppState.swift |
Rebrands imports/paths and adjusts foreground session handling. |
RxCode/App/RxCodeApp.swift |
Renames app entry point and menubar/update UI text. |
RxCode/Assets.xcassets/AccentColor.colorset/Contents.json |
Adds accent color asset metadata. |
RxCode/Assets.xcassets/AppIcon.appiconset/128-mac.png |
Adds app icon asset. |
RxCode/Assets.xcassets/AppIcon.appiconset/16-mac.png |
Adds app icon asset. |
RxCode/Assets.xcassets/AppIcon.appiconset/32-mac.png |
Adds app icon asset. |
RxCode/Assets.xcassets/AppIcon.appiconset/64-mac.png |
Adds app icon asset. |
RxCode/Assets.xcassets/AppIcon.appiconset/Contents.json |
Adds app icon set metadata. |
RxCode/Assets.xcassets/Contents.json |
Adds asset catalog metadata. |
RxCode/Assets.xcassets/GitHubMark.imageset/Contents.json |
Adds GitHub mark image metadata. |
RxCode/Assets.xcassets/GitHubMark.imageset/github-mark.pdf |
Adds GitHub mark vector asset. |
RxCode/Info.plist |
Updates Sparkle feed URL. |
RxCode/Resources/en.lproj/Localizable.strings |
Rebrands app English strings. |
RxCode/Services/BashSafety.swift |
Adds Bash read-only safety classifier. |
RxCode/Services/ClaudeService.swift |
Rebrands temp directory/imports. |
RxCode/Services/GitHubService.swift |
Rebrands SSH key title/imports. |
RxCode/Services/MCPService.swift |
Rebrands MCP client name/imports. |
RxCode/Services/MarketplaceService.swift |
Updates import to RxCodeCore. |
RxCode/Services/NotificationService.swift |
Rebrands logger subsystem. |
RxCode/Services/PermissionServer.swift |
Rebrands support path/imports. |
RxCode/Services/PersistenceService.swift |
Rebrands legacy origin/path/comments. |
RxCode/Services/RateLimitService.swift |
Updates import to RxCodeCore. |
RxCode/Services/ThreadStore.swift |
Rebrands SwiftData store path/imports. |
RxCode/Services/UpdateService.swift |
Adds Sparkle updater service. |
RxCode/Utilities/KeychainHelper.swift |
Adds keychain read/write/delete helper. |
RxCode/Utilities/SSHKeyManager.swift |
Rebrands SSH config comments/logs. |
RxCode/Views/Chat/BranchPickerChip.swift |
Rebrands branch prefix placeholder. |
RxCode/Views/Chat/GitHubSheet.swift |
Updates import to RxCodeCore. |
RxCode/Views/Chat/RecentChatsSuggestionList.swift |
Updates import to RxCodeCore. |
RxCode/Views/Chat/SkillMarketView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Inspector/InspectorContentView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Inspector/RightInspectorPanel.swift |
Updates import to RxCodeCore. |
RxCode/Views/InspectorMemoPanel.swift |
Rebrands memo keys/imports. |
RxCode/Views/LoadingView.swift |
Rebrands loading UI. |
RxCode/Views/MainView.swift |
Rebrands imports and toolbar content reference. |
RxCode/Views/Onboarding/GitHubLoginView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Onboarding/OnboardingView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Permission/PermissionModal.swift |
Updates import to RxCodeCore. |
RxCode/Views/Permission/PermissionQueueBanner.swift |
Updates import to RxCodeCore. |
RxCode/Views/Permission/QuestionSheetView.swift |
Updates import to RxCodeCore. |
RxCode/Views/ProjectWindowView.swift |
Rebrands imports and toolbar content reference. |
RxCode/Views/Settings/MCPServerEditorSheet.swift |
Updates import to RxCodeCore. |
RxCode/Views/Settings/MCPSettingsTab.swift |
Updates import to RxCodeCore. |
RxCode/Views/SettingsView.swift |
Rebrands imports, source link, and UI text. |
RxCode/Views/Sidebar/FileInspectorView.swift |
Updates import and theme notification. |
RxCode/Views/Sidebar/FileTreeView.swift |
Rebrands import/preview path. |
RxCode/Views/Sidebar/GitHubRepoListView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Sidebar/GitStatusView.swift |
Rebrands import/preview path. |
RxCode/Views/Sidebar/HistoryListView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Sidebar/MarkdownPreviewView.swift |
Rebrands JS markdown variable. |
RxCode/Views/Sidebar/ProjectChatRow.swift |
Adds archive/unarchive context menu action. |
RxCode/Views/Sidebar/ProjectListView.swift |
Rebrands import/delete copy. |
RxCode/Views/Sidebar/ProjectTreeView.swift |
Rebrands import/copy and wires archive action. |
RxCode/Views/Sidebar/TypewriterTitleText.swift |
Updates import to RxCodeCore. |
RxCode/Views/Terminal/TerminalView.swift |
Updates import to RxCodeCore. |
RxCode/Views/Toolbar/ExternalEditorMenu.swift |
Updates import to RxCodeCore. |
RxCode/Views/Toolbar/RxCodeToolbar.swift |
Renames toolbar content type. |
RxCode/Views/Toolbar/TodoProgressToolbarItem.swift |
Updates imports to RxCode packages. |
RxCode/Views/UserManualView.swift |
Rebrands manual content/import. |
RxCodeTests/AppStateProjectSwitchTests.swift |
Rebrands test imports. |
RxCodeTests/InputBarDisableTests.swift |
Rebrands test imports. |
RxCodeTests/PlanCardViewTests.swift |
Rebrands test imports. |
RxCodeTests/PlanDecisionTests.swift |
Rebrands test imports. |
docs/superpowers/specs/2026-04-27-attachment-auto-preview-settings-design.md |
Rebrands spec links/paths. |
scripts/build_zip.sh |
Rebrands build script paths/artifact names. |
scripts/ci/convert-markdown.py |
Adds release note markdown-to-HTML converter. |
scripts/ci/generate-appcast.sh |
Adds CI appcast generation script. |
scripts/ci/notary.sh |
Adds DMG creation/notarization script. |
scripts/ci/sign-sparkle.sh |
Adds Sparkle signing script. |
scripts/ci/update-version.sh |
Adds CI version bump script. |
scripts/ci/update-xml.py |
Adds appcast XML mutation script. |
scripts/release.sh |
Rebrands release script names/titles. |
scripts/setup_sparkle.sh |
Rebrands Sparkle setup project/target references. |
Comments suppressed due to low confidence (8)
Packages/Sources/RxCodeCore/Models/SessionOrigin.swift:7
- Changing the
SessionOriginraw value fromlegacyClarctolegacyRxCodebreaks decoding of existing persisted session JSON that already contains"origin":"legacyClarc";decodeIfPresent(SessionOrigin.self, ...)will throw rather than fall back, causing those legacy sessions/summaries to be skipped. Keep the old raw value or add a custom decoder that maps both strings.
scripts/ci/update-xml.py:68 - This assignment runs for every
<item>in the appcast, so a release rewrites all historical Sparkle versions to the current CI build number. That corrupts update ordering for existing releases; update only the newly generated/current item.
RxCode/Views/Sidebar/ProjectTreeView.swift:406 - This adds an Archive action to the project chat row, but
ProjectChatsList.sessionsabove only filters by project id and does not excludeisArchivedsessions. As a result, choosing Archive from this menu leaves the chat visible in the project tree (only the menu label changes to Unarchive), unlikeHistoryListViewwhere archived/non-archived lists are separated.
RxCode/Services/ThreadStore.swift:40 - This path hardcodes
Application Support/RxCodeinstead of usingAppSupport.bundleScopedURL(Packages/Sources/RxCodeCore/Utilities/AppSupport.swift:3-6 says non-production bundle IDs should useRxCode.<suffix>so dev builds do not share production state). As written, dev/test bundle IDs still share the production ThreadStore database.
RxCode/Services/PermissionServer.swift:480 - This path hardcodes
Application Support/RxCodeinstead of usingAppSupport.bundleScopedURL(Packages/Sources/RxCodeCore/Utilities/AppSupport.swift:3-6 establishes bundle-scoped support directories). Alternate bundle IDs will therefore share the production Bash allowlist instead of getting an isolatedRxCode.<suffix>directory.
Packages/Sources/RxCodeChatKit/SlashCommandBar.swift:235 - This store path hardcodes
Application Support/RxCodeinstead of usingAppSupport.bundleScopedURL(Packages/Sources/RxCodeCore/Utilities/AppSupport.swift:3-6 establishes bundle-scoped support directories). Dev/test bundle IDs will share production custom slash commands.
Packages/Sources/RxCodeChatKit/ChatShortcut.swift:69 - This store path hardcodes
Application Support/RxCodeinstead of usingAppSupport.bundleScopedURL(Packages/Sources/RxCodeCore/Utilities/AppSupport.swift:3-6 establishes bundle-scoped support directories). Dev/test bundle IDs will share production shortcut data.
Packages/Sources/RxCodeCore/Utilities/GitWorktreeService.swift:39 - This worktree cache path hardcodes
Application Support/RxCodeinstead of usingAppSupport.bundleScopedURL(Packages/Sources/RxCodeCore/Utilities/AppSupport.swift:3-6 establishes bundle-scoped support directories). Alternate bundle IDs can therefore share or mutate production worktree state.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+19
to
+22
| ./bin/generate_appcast ./ \ | ||
| --ed-key-file sparkle.key \ | ||
| --link https://github.com/rxtech-lab/Clarc/releases \ | ||
| --download-url-prefix https://github.com/rxtech-lab/Clarc/releases/download/${VERSION}/ |
Comment on lines
+52
to
+56
| - name: Import code signing certificate | ||
| uses: apple-actions/import-codesign-certs@v6 | ||
| with: | ||
| p12-file-base64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} | ||
| p12-password: ${{ secrets.P12_PASSWORD }} |
Comment on lines
+36
to
+39
| if release_notes_link is None: | ||
| # Create new releaseNotesLink element | ||
| release_notes_link = ET.Element('{http://www.andymatuschak.org/xml-namespaces/sparkle}releaseNotesLink') | ||
| release_notes_link.text = notes_path |
Comment on lines
+131
to
+135
| - name: Upload release notes for deploy job | ||
| if: github.event_name == 'release' | ||
| uses: actions/upload-artifact@v7 | ||
| with: | ||
| name: release_notes-${{ github.sha }} |
Comment on lines
99
to
101
| echo "🔧 pbxproj에 SUPublicEDKey 자동 추가 중..." | ||
| sed -i '' "s|INFOPLIST_KEY_SUFeedURL = \"https://raw.githubusercontent.com/ttnear/Clarc/main/appcast.xml\";|INFOPLIST_KEY_SUFeedURL = \"https://raw.githubusercontent.com/ttnear/Clarc/main/appcast.xml\";\n\t\t\t\tINFOPLIST_KEY_SUPublicEDKey = \"${PUBLIC_KEY}\";|g" "$PBXPROJ" | ||
| sed -i '' "s|INFOPLIST_KEY_SUFeedURL = \"https://raw.githubusercontent.com/ttnear/RxCode/main/appcast.xml\";|INFOPLIST_KEY_SUFeedURL = \"https://raw.githubusercontent.com/ttnear/RxCode/main/appcast.xml\";\n\t\t\t\tINFOPLIST_KEY_SUPublicEDKey = \"${PUBLIC_KEY}\";|g" "$PBXPROJ" | ||
| echo "✓ SUPublicEDKey가 pbxproj에 추가되었습니다." |
Comment on lines
+7
to
+11
| on: | ||
| push: | ||
| pull_request: | ||
| branches: | ||
| - main |
Comment on lines
+14
to
+18
| pull_request: | ||
| branches: | ||
| - main | ||
|
|
||
| jobs: |
Comment on lines
+4
to
+5
| # Write SPARKLE_KEY to sparkle.key | ||
| echo "$SPARKLE_KEY" > sparkle.key |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.