Skip to content

replace desktop frontend with GPUI - #138

Merged
RestartFU merged 190 commits into
masterfrom
feat/gpui-desktop
Aug 7, 2026
Merged

replace desktop frontend with GPUI#138
RestartFU merged 190 commits into
masterfrom
feat/gpui-desktop

Conversation

@RestartFU

@RestartFU RestartFU commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Status

Incremental Rust rewrite. The GPUI client and Rust daemon run together as the isolated xd-dev channel while the production Crystal client remains unchanged.

Landed

  • native GPUI shell with real, collapsible workspace and chat navigation
  • app-owned persistent Rust daemon and isolated state
  • Codex and Claude turn execution, cancellation, queueing, and automatic sign-in detection
  • generated and existing Git worktree creation, selection, and safe removal
  • named chat and workspace creation, including existing repository-backed workspaces and background Git cloning
  • inherited workspace assistant, model, workdir, repository, and context defaults
  • synchronized text drafts and PNG attachment previews
  • assistant, model, effort, access, and plan controls
  • global and workspace prompt shortcuts
  • virtualized live transcript with bounded Markdown and language-aware code highlighting
  • shared expandable activity, subagent, and workflow cards
  • daemon-owned GitHub workflow status with bounded polling and last-known-good fallback
  • bounded full-text conversation search with Ctrl/Cmd+K and Ctrl/Cmd+F
  • collapsible, colorized working-tree and branch diff inspection
  • repository status, commit-all, non-force push, bounded file browsing, and highlighted previews
  • bounded queued-message management with send-now, inline edit, and remove controls
  • inline rename, move, delete, and recoverable trash controls for chats and workspaces
  • unread background-turn badges and optional local desktop completion notifications
  • persisted global accent, notification, and selective speech settings
  • opt-in local Linux speech for finalized <speak> sections with replay protection
  • shared Rust PTY lifecycle and interactive GPUI terminal with bounded replay/scrollback
  • rolling xd-dev prerelease and one-line installer

Validation

Every feature slice is formatted, tested, and release-built through the pinned Rust-only Docker target. Feature-branch pushes publish the exact tested GPUI/Rust bundle to the rolling dev prerelease.

RestartFU and others added 3 commits August 5, 2026 09:20
Add an independently buildable GPUI shell that preserves the existing daemon protocol, with state reducers and bounded transcript virtualization as the migration foundation.

Co-authored-by: Codex <codex@openai.com>
Build and test the GPUI prototype in Docker on feature-branch pushes, then replace a separate dev prerelease with the Linux x86_64 archive and checksum.

Co-authored-by: Codex <codex@openai.com>
Publish a dedicated installer and consistently name the rolling GPUI archive, directory, binary, and command xd-dev.

Co-authored-by: Codex <codex@openai.com>
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 367 files, which is 267 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e74d837e-69bf-45f2-aadc-ee4621def5a4

📥 Commits

Reviewing files that changed from the base of the PR and between e1f110a and 1a6ed7a.

⛔ Files ignored due to path filters (3)
  • daemon-rs/Cargo.lock is excluded by !**/*.lock
  • desktop/Cargo.lock is excluded by !**/*.lock
  • shard.lock is excluded by !**/*.lock
📒 Files selected for processing (367)
  • .github/workflows/mobile.yml
  • .github/workflows/nightly.yml
  • .github/workflows/pr.yml
  • .github/workflows/release.yml
  • .gitignore
  • Dockerfile
  • README.md
  • bindings/adw/binding.yml
  • bindings/vte/binding-unix.yml
  • daemon-rs/Cargo.toml
  • daemon-rs/src/agent.rs
  • daemon-rs/src/ask.rs
  • daemon-rs/src/auth.rs
  • daemon-rs/src/claude_proxy.rs
  • daemon-rs/src/cli_versions.rs
  • daemon-rs/src/git_draft.rs
  • daemon-rs/src/lib.rs
  • daemon-rs/src/local_socket.rs
  • daemon-rs/src/main.rs
  • daemon-rs/src/pairing.rs
  • daemon-rs/src/private_fs.rs
  • daemon-rs/src/remote_proxy.rs
  • daemon-rs/src/repository_monitor.rs
  • daemon-rs/src/runtime.rs
  • daemon-rs/src/secrets.rs
  • daemon-rs/src/self_update.rs
  • daemon-rs/src/storage.rs
  • daemon-rs/src/terminal.rs
  • daemon-rs/src/terminal_windows.rs
  • daemon-rs/src/voice.rs
  • daemon-rs/src/workflow.rs
  • daemon-rs/src/worktree_name.rs
  • desktop/Cargo.toml
  • desktop/README.md
  • desktop/src/activity.rs
  • desktop/src/channel.rs
  • desktop/src/context_usage.rs
  • desktop/src/daemon.rs
  • desktop/src/editor.rs
  • desktop/src/input.rs
  • desktop/src/lib.rs
  • desktop/src/local_socket.rs
  • desktop/src/main.rs
  • desktop/src/markdown.rs
  • desktop/src/model.rs
  • desktop/src/presence.rs
  • desktop/src/private_fs.rs
  • desktop/src/protocol.rs
  • desktop/src/remote.rs
  • desktop/src/settings.rs
  • desktop/src/source_build.rs
  • desktop/src/speech.rs
  • desktop/src/terminal.rs
  • desktop/src/transcript.rs
  • desktop/src/voice_input.rs
  • docs/crystal-parity.md
  • docs/mobile.md
  • docs/protocol.md
  • installer/macos/Info.plist.in
  • installer/macos/xd-rust-launcher.sh
  • mobile/Dockerfile
  • mobile/androidApp/src/main/kotlin/com/restartfu/xd/mobile/ui/TerminalPane.kt
  • mobile/androidApp/src/main/kotlin/com/restartfu/xd/mobile/ui/Theme.kt
  • mobile/shared/build.gradle.kts
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/model/Ask.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/model/ImageReference.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/model/ToolGrouping.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/model/ToolText.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/model/TurnTiming.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/net/LineAssembler.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/protocol/JsonConfig.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/syntax/Words.kt
  • mobile/shared/src/commonMain/kotlin/com/restartfu/xd/voice/Wav.kt
  • mobile/shared/src/commonTest/kotlin/com/restartfu/xd/model/AskTest.kt
  • mobile/shared/src/commonTest/kotlin/com/restartfu/xd/model/TurnTimingTest.kt
  • mobile/shared/src/commonTest/kotlin/com/restartfu/xd/syntax/SyntaxTest.kt
  • mobile/shared/src/commonTest/kotlin/com/restartfu/xd/voice/WavTest.kt
  • scripts/build-macos-git.sh
  • scripts/build-macos-openssl.sh
  • scripts/build-macos.sh
  • scripts/build-native-whisper.sh
  • scripts/build-windows.ps1
  • scripts/build-windows.sh
  • scripts/build.sh
  • scripts/bump-version.sh
  • scripts/bundle-macos.sh
  • scripts/bundle-windows.sh
  • scripts/bundle.sh
  • scripts/fetch-native-agents.sh
  • scripts/fetch-windows-git.sh
  • scripts/install-branch.sh
  • scripts/install-macos.sh
  • scripts/install.ps1
  • scripts/install.sh
  • scripts/mobile-build.sh
  • scripts/mobile-test.sh
  • scripts/package-windows.ps1
  • scripts/payload-cache.sh
  • scripts/runner-docker-build.sh
  • scripts/runner-jobs.sh
  • scripts/smoke-bundle.sh
  • scripts/smoke-macos.sh
  • scripts/stage-native.sh
  • scripts/test.sh
  • scripts/xd.sh
  • shard.yml
  • spec/spec_helper.cr
  • spec/support/local_endpoint.cr
  • spec/support/voice_transcriber.cr
  • spec/xd/agent/ask_spec.cr
  • spec/xd/agent/assistant_sections_spec.cr
  • spec/xd/agent/authentication_spec.cr
  • spec/xd/agent/catalog_spec.cr
  • spec/xd/agent/claude_proxy_spec.cr
  • spec/xd/agent/cli_versions_spec.cr
  • spec/xd/agent/codex_app_server_spec.cr
  • spec/xd/agent/codex_protocol_spec.cr
  • spec/xd/agent/conversation_spec.cr
  • spec/xd/agent/environment_spec.cr
  • spec/xd/agent/exec_session_spec.cr
  • spec/xd/agent/git_diff_tracker_spec.cr
  • spec/xd/agent/git_draft_spec.cr
  • spec/xd/agent/image_reference_spec.cr
  • spec/xd/agent/manager_spec.cr
  • spec/xd/agent/parser_spec.cr
  • spec/xd/agent/secrets_spec.cr
  • spec/xd/agent/tool_summary_spec.cr
  • spec/xd/agent/workflow_run_spec.cr
  • spec/xd/agent/workspace_block_spec.cr
  • spec/xd/agent/worktree_name_spec.cr
  • spec/xd/bundle_environment_spec.cr
  • spec/xd/cli_spec.cr
  • spec/xd/daemon/client_spec.cr
  • spec/xd/daemon/engine_spec.cr
  • spec/xd/daemon/event_bus_spec.cr
  • spec/xd/daemon/execution_host_spec.cr
  • spec/xd/daemon/filesystem_spec.cr
  • spec/xd/daemon/images_spec.cr
  • spec/xd/daemon/local_connection_spec.cr
  • spec/xd/daemon/local_ipc_spec.cr
  • spec/xd/daemon/repository_monitor_spec.cr
  • spec/xd/daemon/repository_spec.cr
  • spec/xd/daemon/search_spec.cr
  • spec/xd/daemon/server_spec.cr
  • spec/xd/daemon/session_spec.cr
  • spec/xd/daemon/terminal_spec.cr
  • spec/xd/daemon/transport_parity_spec.cr
  • spec/xd/daemon/voice_jobs_spec.cr
  • spec/xd/daemon/workspace_monitor_spec.cr
  • spec/xd/git_path_spec.cr
  • spec/xd/integrations/discord_presence_spec.cr
  • spec/xd/markdown_spec.cr
  • spec/xd/native_bundle_spec.cr
  • spec/xd/protocol/frame_spec.cr
  • spec/xd/protocol/message_spec.cr
  • spec/xd/protocol/mobile_contract_spec.cr
  • spec/xd/protocol/operation_spec.cr
  • spec/xd/remote/connection_spec.cr
  • spec/xd/remote/credentials_spec.cr
  • spec/xd/storage/chats_spec.cr
  • spec/xd/storage/messages_spec.cr
  • spec/xd/storage/sessions_spec.cr
  • spec/xd/storage/store_spec.cr
  • spec/xd/storage/workflow_state_spec.cr
  • spec/xd/syntax_highlight_spec.cr
  • spec/xd/syntax_spec.cr
  • spec/xd/ui/background_work_spec.cr
  • spec/xd/ui/branch_build_run_spec.cr
  • spec/xd/ui/branch_build_spec.cr
  • spec/xd/ui/command_suggestions_spec.cr
  • spec/xd/ui/context_usage_spec.cr
  • spec/xd/ui/dialogs_spec.cr
  • spec/xd/ui/diff_file_sections_spec.cr
  • spec/xd/ui/diff_pane_spec.cr
  • spec/xd/ui/diff_text_spec.cr
  • spec/xd/ui/diff_view_spec.cr
  • spec/xd/ui/directory_browser_spec.cr
  • spec/xd/ui/dots_spec.cr
  • spec/xd/ui/download_progress_spec.cr
  • spec/xd/ui/event_inbox_spec.cr
  • spec/xd/ui/file_pane_spec.cr
  • spec/xd/ui/idle_queue_spec.cr
  • spec/xd/ui/image_attachment_spec.cr
  • spec/xd/ui/message_content_spec.cr
  • spec/xd/ui/message_row_spec.cr
  • spec/xd/ui/optimistic_send_spec.cr
  • spec/xd/ui/pane_state_spec.cr
  • spec/xd/ui/queue_presentation_spec.cr
  • spec/xd/ui/render_retry_queue_spec.cr
  • spec/xd/ui/runtime_spec.cr
  • spec/xd/ui/shortcut_dialog_spec.cr
  • spec/xd/ui/sidebar_popover_spec.cr
  • spec/xd/ui/sidebar_state_spec.cr
  • spec/xd/ui/subagent_card_spec.cr
  • spec/xd/ui/terminal_replay_spec.cr
  • spec/xd/ui/text_reveal_spec.cr
  • spec/xd/ui/tool_call_group_spec.cr
  • spec/xd/ui/tool_panel_spec.cr
  • spec/xd/ui/transcript_paging_spec.cr
  • spec/xd/ui/turn_recovery_spec.cr
  • spec/xd/ui/turn_timing_spec.cr
  • spec/xd/ui/window_auth_spec.cr
  • spec/xd/ui/window_scroll_spec.cr
  • spec/xd/unified_diff_spec.cr
  • spec/xd/update_channel_spec.cr
  • spec/xd/voice/data_spec.cr
  • spec/xd/voice/model_spec.cr
  • spec/xd/voice/recorder_spec.cr
  • spec/xd/voice/transcriber_spec.cr
  • spec/xd/workspace/clone_spec.cr
  • spec/xd/workspace/service_spec.cr
  • spec/xd/workspace/worktrees_spec.cr
  • src/xd.cr
  • src/xd/agent/ask.cr
  • src/xd/agent/assistant_sections.cr
  • src/xd/agent/authentication.cr
  • src/xd/agent/catalog.cr
  • src/xd/agent/claude_proxy.cr
  • src/xd/agent/cli_versions.cr
  • src/xd/agent/codex_app_server.cr
  • src/xd/agent/codex_protocol.cr
  • src/xd/agent/conversation.cr
  • src/xd/agent/environment.cr
  • src/xd/agent/event.cr
  • src/xd/agent/exec_session.cr
  • src/xd/agent/executable.cr
  • src/xd/agent/git_diff_tracker.cr
  • src/xd/agent/git_draft.cr
  • src/xd/agent/image_reference.cr
  • src/xd/agent/manager.cr
  • src/xd/agent/parser.cr
  • src/xd/agent/secrets.cr
  • src/xd/agent/subagent_tool.cr
  • src/xd/agent/tool_diff.cr
  • src/xd/agent/tool_summary.cr
  • src/xd/agent/types.cr
  • src/xd/agent/workflow_run.cr
  • src/xd/agent/workspace_block.cr
  • src/xd/agent/worktree_name.cr
  • src/xd/app_paths.cr
  • src/xd/bundle_environment.cr
  • src/xd/cli.cr
  • src/xd/daemon/certificate.cr
  • src/xd/daemon/client.cr
  • src/xd/daemon/connection.cr
  • src/xd/daemon/device_store.cr
  • src/xd/daemon/endpoint.cr
  • src/xd/daemon/engine.cr
  • src/xd/daemon/errors.cr
  • src/xd/daemon/event_bus.cr
  • src/xd/daemon/execution_host.cr
  • src/xd/daemon/filesystem.cr
  • src/xd/daemon/images.cr
  • src/xd/daemon/local_connection.cr
  • src/xd/daemon/local_ipc.cr
  • src/xd/daemon/network_address.cr
  • src/xd/daemon/repository.cr
  • src/xd/daemon/repository_monitor.cr
  • src/xd/daemon/search.cr
  • src/xd/daemon/self_update.cr
  • src/xd/daemon/server.cr
  • src/xd/daemon/session.cr
  • src/xd/daemon/terminal.cr
  • src/xd/daemon/terminals.cr
  • src/xd/daemon/voice_jobs.cr
  • src/xd/daemon/workspace_monitor.cr
  • src/xd/git_path.cr
  • src/xd/integrations/discord_presence.cr
  • src/xd/markdown.cr
  • src/xd/native_bundle.cr
  • src/xd/protocol/frame.cr
  • src/xd/protocol/message.cr
  • src/xd/protocol/operation.cr
  • src/xd/remote/connection.cr
  • src/xd/remote/credentials.cr
  • src/xd/storage/chats.cr
  • src/xd/storage/messages.cr
  • src/xd/storage/models.cr
  • src/xd/storage/schema.cr
  • src/xd/storage/sessions.cr
  • src/xd/storage/store.cr
  • src/xd/storage/workflow_state.cr
  • src/xd/storage/workspaces.cr
  • src/xd/storage/worktree_containers.cr
  • src/xd/syntax.cr
  • src/xd/syntax_highlight.cr
  • src/xd/ui/adw.cr
  • src/xd/ui/application.cr
  • src/xd/ui/auth_dialog.cr
  • src/xd/ui/background_work.cr
  • src/xd/ui/branch_build.cr
  • src/xd/ui/branch_build_dialog.cr
  • src/xd/ui/branch_build_run.cr
  • src/xd/ui/chat_controls.cr
  • src/xd/ui/command_suggestions.cr
  • src/xd/ui/context_dialog.cr
  • src/xd/ui/context_usage.cr
  • src/xd/ui/daemon_update_dialog.cr
  • src/xd/ui/devices_dialog.cr
  • src/xd/ui/dialogs.cr
  • src/xd/ui/diff_file_sections.cr
  • src/xd/ui/diff_pane.cr
  • src/xd/ui/diff_text.cr
  • src/xd/ui/diff_view.cr
  • src/xd/ui/directory_browser.cr
  • src/xd/ui/dots.cr
  • src/xd/ui/download_progress.cr
  • src/xd/ui/event_inbox.cr
  • src/xd/ui/file_pane.cr
  • src/xd/ui/folder_dialogs.cr
  • src/xd/ui/git_actions.cr
  • src/xd/ui/git_writing_settings.cr
  • src/xd/ui/host_launch.cr
  • src/xd/ui/idle_queue.cr
  • src/xd/ui/image_attachment.cr
  • src/xd/ui/image_presenter.cr
  • src/xd/ui/message_content.cr
  • src/xd/ui/message_row.cr
  • src/xd/ui/model_picker.cr
  • src/xd/ui/option_picker.cr
  • src/xd/ui/pair_dialog.cr
  • src/xd/ui/pane_state.cr
  • src/xd/ui/panel_call.cr
  • src/xd/ui/queue_presentation.cr
  • src/xd/ui/render_retry_queue.cr
  • src/xd/ui/run_card.cr
  • src/xd/ui/runtime.cr
  • src/xd/ui/search_dialog.cr
  • src/xd/ui/secrets_dialog.cr
  • src/xd/ui/share_dialog.cr
  • src/xd/ui/shortcut_dialog.cr
  • src/xd/ui/sidebar.cr
  • src/xd/ui/sidebar_state.cr
  • src/xd/ui/style.cr
  • src/xd/ui/subagent_card.cr
  • src/xd/ui/terminal_panel.cr
  • src/xd/ui/terminal_panel_windows.cr
  • src/xd/ui/terminal_replay.cr
  • src/xd/ui/text_reveal.cr
  • src/xd/ui/tool_call_group.cr
  • src/xd/ui/tool_panel.cr
  • src/xd/ui/transcript_paging.cr
  • src/xd/ui/turn_recovery.cr
  • src/xd/ui/turn_timing.cr
  • src/xd/ui/updater.cr
  • src/xd/ui/voice_input.cr
  • src/xd/ui/vte.cr
  • src/xd/ui/window.cr
  • src/xd/ui/workflow_card.cr
  • src/xd/ui/workspace_create_dialog.cr
  • src/xd/unified_diff.cr
  • src/xd/update_channel.cr
  • src/xd/version.cr
  • src/xd/voice/data.cr
  • src/xd/voice/model.cr
  • src/xd/voice/recorder.cr
  • src/xd/voice/transcriber.cr
  • src/xd/workspace/clone.cr
  • src/xd/workspace/service.cr
  • src/xd/workspace/settings.cr
  • src/xd/workspace/worktree_containers.cr
  • src/xd/workspace/worktrees.cr
  • tls-proxy-rs/Cargo.toml
  • tls-proxy-rs/src/client.rs
  • tls-proxy-rs/src/local_socket.rs
  • tls-proxy-rs/src/main.rs
  • tls-proxy-rs/src/private_fs.rs

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


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

RestartFU and others added 26 commits August 5, 2026 09:51
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
RestartFU and others added 27 commits August 6, 2026 19:00
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Build self-contained Rust/GPUI MSI artifacts for stable and nightly with bundled agents, PortableGit, and local Whisper support.

Co-authored-by: Codex <codex@openai.com>
Replace the Windows terminal stub with bounded interactive ConPTY sessions and cap runner build parallelism at 75 percent across Docker, Rust, CMake, and Gradle pipelines.

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>

Co-Authored-By: Claude <noreply@anthropic.com>
`sun_path` is 104 bytes on macOS and its temp directory is already half of
that, so a scratch name built from the test's own thread name -- which is
the full test path -- overran it and the bind failed with SUN_LEN, which
says nothing about what was too long. Both socket tests now take a short
unique name from one helper.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The in-app handoff ran install.ps1 without -Release, and the script's
default is the nightly. The staged package was the right one, but the
installer that received it looked for a nightly to install over, decided
which running processes were its own from the nightly root, and reported
installing a nightly -- on a release install, all three were wrong. Only
the explicit -InstallRoot kept it landing in the right place.

The argument list moves out of the spawn so it can be checked on any host,
the way the staging arguments already are.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The macOS build read the version with `0,/re/{s//\1/p}`, which is a GNU
range and a BSD flag error: `sed: bad flag in substitute command: '}'`, and
the app bundle never got built. Three copies of that expression existed, so
the fix is one implementation -- `bump-version.sh --current` -- that the
macOS build and the release workflow now ask.

The write path had the same problem waiting: `sed -i` takes a mandatory
backup suffix on BSD and none on GNU, and first-match-only is another GNU
range. It rewrites through awk now, which behaves the same everywhere, so a
release can be cut from whichever machine its author is sitting at.

Exercised under gawk, mawk and busybox awk: one line moves in each of the
five files that state a version, and no dependency version moves.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Anthropic republished 2.1.220 for darwin-arm64: the same URL now serves a
different binary, which is what the pin exists to notice, and the macOS
build stopped there. Verified before repinning -- the download is a Mach-O
arm64 executable, it carries 2.1.220 and no other version, and the digest
is the same on two separate fetches. darwin-x64 still matches its pin, so
only this one moved.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@RestartFU
RestartFU marked this pull request as ready for review August 7, 2026 14:02
@RestartFU RestartFU changed the title Draft: replace desktop frontend with GPUI replace desktop frontend with GPUI Aug 7, 2026
@RestartFU
RestartFU merged commit be27418 into master Aug 7, 2026
6 checks passed
Sign up for free to 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